Skip to content

Commit 77db01e

Browse files
committed
language overlay
1 parent 9420858 commit 77db01e

File tree

1 file changed

+76
-2
lines changed

1 file changed

+76
-2
lines changed

client/modules/IDE/components/Header/MobileNav.jsx

Lines changed: 76 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import React, { useContext, useMemo } from 'react';
1+
import React, { useContext, useMemo, useState } from 'react';
22
import styled from 'styled-components';
33
import { useDispatch, useSelector } from 'react-redux';
44
import { useTranslation } from 'react-i18next';
55
import { useLocation } from 'react-router';
66
import { Link } from 'react-router-dom';
7+
import { sortBy } from 'lodash';
78
import { ParentMenuContext } from '../../../../components/Nav/contexts';
89
import NavBar from '../../../../components/Nav/NavBar';
910
import { useMenuProps } from '../../../../components/Nav/NavDropdownMenu';
@@ -22,6 +23,10 @@ import { logoutUser } from '../../../User/actions';
2223
import { useSketchActions } from '../../hooks';
2324
import { CmControllerContext } from '../../pages/IDEView';
2425
import { selectSketchPath } from '../../selectors/project';
26+
import { availableLanguages, languageKeyToLabel } from '../../../../i18n';
27+
import { showToast } from '../../actions/toast';
28+
import { setLanguage } from '../../actions/preferences';
29+
import Overlay from '../../../App/components/Overlay';
2530

2631
const Nav = styled(NavBar)`
2732
background: ${prop('MobilePanel.default.background')};
@@ -148,6 +153,41 @@ const Options = styled.div`
148153
}
149154
`;
150155

156+
const LanguageSelect = styled.div`
157+
display: flex;
158+
flex-direction: column;
159+
position: relative;
160+
height: 100%;
161+
justify-content: center;
162+
163+
h3 {
164+
text-align: center;
165+
margin-bottom: 2rem;
166+
}
167+
168+
div {
169+
display: flex;
170+
gap: ${remSize(8)};
171+
flex-direction: column;
172+
position: block;
173+
align-items: center;
174+
175+
button {
176+
font-size: ${remSize(16)};
177+
padding: ${remSize(8)} ${remSize(15)} ${remSize(8)} ${remSize(10)};
178+
width: 100%;
179+
max-width: 80vw;
180+
181+
&:hover,
182+
&:active,
183+
&:focus {
184+
background-color: ${prop('Button.primary.hover.background')};
185+
color: ${prop('Button.primary.hover.foreground')};
186+
}
187+
}
188+
}
189+
`;
190+
151191
const MobileNav = () => {
152192
const project = useSelector((state) => state.project);
153193
const user = useSelector((state) => state.user);
@@ -248,6 +288,7 @@ const MoreMenu = () => {
248288
const rootFile = useSelector(
249289
(state) => state.files.filter((file) => file.name === 'root')[0]
250290
);
291+
251292
const dispatch = useDispatch();
252293
const { t } = useTranslation();
253294
const { newSketch, saveSketch } = useSketchActions();
@@ -256,8 +297,39 @@ const MoreMenu = () => {
256297

257298
const { isOpen, handlers } = useMenuProps('more');
258299

300+
const [isLanguageModalVisible, setIsLanguageModalVisible] = useState(false);
301+
302+
function handleLangSelection(event) {
303+
dispatch(setLanguage(event.target.value));
304+
dispatch(showToast('Toast.LangChange'));
305+
setIsLanguageModalVisible(false);
306+
}
307+
259308
return (
260309
<div>
310+
{isLanguageModalVisible && (
311+
<Overlay
312+
// TODO: add translations
313+
title="Select Language"
314+
ariaLabel="Select Language"
315+
closeOverlay={() => setIsLanguageModalVisible(false)}
316+
>
317+
<LanguageSelect>
318+
<div>
319+
{sortBy(availableLanguages).map((key) => (
320+
<button
321+
aria-label={languageKeyToLabel(key)}
322+
key={key}
323+
onClick={handleLangSelection}
324+
value={key}
325+
>
326+
{languageKeyToLabel(key)}
327+
</button>
328+
))}
329+
</div>
330+
</LanguageSelect>
331+
</Overlay>
332+
)}
261333
<IconButton icon={MoreIcon} {...handlers} />
262334
<ul className={isOpen ? 'opened' : ''}>
263335
<ParentMenuContext.Provider value="more">
@@ -293,7 +365,9 @@ const MoreMenu = () => {
293365
>
294366
Preferences
295367
</NavMenuItem>
296-
<NavMenuItem>Language</NavMenuItem>
368+
<NavMenuItem onClick={() => setIsLanguageModalVisible(true)}>
369+
Language
370+
</NavMenuItem>
297371
<b>{t('Nav.Help.Title')}</b>
298372
<NavMenuItem onClick={() => dispatch(showKeyboardShortcutModal())}>
299373
{t('Nav.Help.KeyboardShortcuts')}

0 commit comments

Comments
 (0)