File size: 5,145 Bytes
e2eff86
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import { useLanguage } from '@site/src/contexts/LanguageContext';
import React from 'react';
import ReactDOM from 'react-dom';

const LanguageToggleComponent = () => {
  const { currentLanguage, changeLanguage } = useLanguage();

  const handleLanguageChange = (e) => {
    changeLanguage(e.target.value);
  };

  return (
    <select
      value={currentLanguage}
      onChange={handleLanguageChange}
      aria-label="Select language"
      style={{
        backgroundColor: 'var(--ifm-navbar-link-color, #fff)',
        color: 'var(--ifm-navbar-background-color, #000)',
        border: '1px solid var(--ifm-navbar-link-color, #ccc)',
        borderRadius: '4px',
        padding: '0.25rem 0.5rem',
        fontSize: '0.8rem',
        cursor: 'pointer',
        marginLeft: '0.5rem'
      }}
    >
      <option value="en">EN</option>
      <option value="ur">UR</option>
    </select>
  );
};

// Render the language toggle in the placeholder
if (typeof window !== 'undefined') {
  // Wait for the DOM to be ready
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', () => {
      const placeholder = document.getElementById('language-toggle-placeholder');
      if (placeholder) {
        // Wrap the component in the LanguageProvider context
        const wrapper = document.createElement('div');
        placeholder.appendChild(wrapper);
        
        // Since we can't directly access the LanguageProvider context here,
        // we'll render a simple implementation
        ReactDOM.render(
          React.createElement(() => {
            const [currentLanguage, setCurrentLanguage] = React.useState('en');
            
            React.useEffect(() => {
              const savedLanguage = localStorage.getItem('preferredLanguage') || 'en';
              setCurrentLanguage(savedLanguage);
            }, []);
            
            const handleLanguageChange = (newLanguage) => {
              if (newLanguage !== currentLanguage) {
                setCurrentLanguage(newLanguage);
                localStorage.setItem('preferredLanguage', newLanguage);
                
                // Dispatch a custom event that other components can listen to
                window.dispatchEvent(new CustomEvent('languageChange', { 
                  detail: { newLanguage } 
                }));
              }
            };
            
            return (
              <select
                value={currentLanguage}
                onChange={(e) => handleLanguageChange(e.target.value)}
                aria-label="Select language"
                style={{
                  backgroundColor: 'var(--ifm-navbar-link-color, #fff)',
                  color: 'var(--ifm-navbar-background-color, #000)',
                  border: '1px solid var(--ifm-navbar-link-color, #ccc)',
                  borderRadius: '4px',
                  padding: '0.25rem 0.5rem',
                  fontSize: '0.8rem',
                  cursor: 'pointer',
                  marginLeft: '0.5rem'
                }}
              >
                <option value="en">EN</option>
                <option value="ur">UR</option>
              </select>
            );
          }),
          wrapper
        );
      }
    });
  } else {
    // DOM is already ready
    const placeholder = document.getElementById('language-toggle-placeholder');
    if (placeholder) {
      const wrapper = document.createElement('div');
      placeholder.appendChild(wrapper);
      
      ReactDOM.render(
        React.createElement(() => {
          const [currentLanguage, setCurrentLanguage] = React.useState('en');
          
          React.useEffect(() => {
            const savedLanguage = localStorage.getItem('preferredLanguage') || 'en';
            setCurrentLanguage(savedLanguage);
          }, []);
          
          const handleLanguageChange = (newLanguage) => {
            if (newLanguage !== currentLanguage) {
              setCurrentLanguage(newLanguage);
              localStorage.setItem('preferredLanguage', newLanguage);
              
              // Dispatch a custom event that other components can listen to
              window.dispatchEvent(new CustomEvent('languageChange', { 
                detail: { newLanguage } 
              }));
            }
          };
          
          return (
            <select
              value={currentLanguage}
              onChange={(e) => handleLanguageChange(e.target.value)}
              aria-label="Select language"
              style={{
                backgroundColor: 'var(--ifm-navbar-link-color, #fff)',
                color: 'var(--ifm-navbar-background-color, #000)',
                border: '1px solid var(--ifm-navbar-link-color, #ccc)',
                borderRadius: '4px',
                padding: '0.25rem 0.5rem',
                fontSize: '0.8rem',
                cursor: 'pointer',
                marginLeft: '0.5rem'
              }}
            >
              <option value="en">EN</option>
              <option value="ur">UR</option>
            </select>
          );
        }),
        wrapper
      );
    }
  }
}