summaryrefslogtreecommitdiffstats
path: root/client/src/common/jsx
diff options
context:
space:
mode:
Diffstat (limited to 'client/src/common/jsx')
-rw-r--r--client/src/common/jsx/Info.jsx9
-rw-r--r--client/src/common/jsx/LangSwitch.jsx43
-rw-r--r--client/src/common/jsx/TopBar.jsx38
-rw-r--r--client/src/common/jsx/User.jsx38
-rw-r--r--client/src/common/jsx/WithHover.jsx13
5 files changed, 141 insertions, 0 deletions
diff --git a/client/src/common/jsx/Info.jsx b/client/src/common/jsx/Info.jsx
new file mode 100644
index 0000000..00d04b3
--- /dev/null
+++ b/client/src/common/jsx/Info.jsx
@@ -0,0 +1,9 @@
+import React from 'react';
+
+const Info = ({info, hover, t}) => (
+ <p className="info">
+ { hover ? t(hover) : t(info) }
+ </p>
+);
+
+export default Info;
diff --git a/client/src/common/jsx/LangSwitch.jsx b/client/src/common/jsx/LangSwitch.jsx
new file mode 100644
index 0000000..eba1b27
--- /dev/null
+++ b/client/src/common/jsx/LangSwitch.jsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import WithHover from './WithHover.jsx';
+import texts from '../data/texts.js';
+
+const LangSwitch = ({ lang, setLang, setHover, opened, setOpened}) => {
+
+ const handleSetLang = (key) => {
+ setLang(key);
+ setOpened(false);
+ };
+
+ return (
+ <div className="lang-switch">
+ <WithHover setHover={setHover} message="click-to-change-language">
+ <span
+ className={`lang-switch__main-item${opened === 'lang' ? ' lang-switch__main-item--active' : ''}`}
+ onClick={() => setOpened(opened !== 'lang' ? 'lang' : false)}
+ >
+ {lang}
+ </span>
+ {
+ opened === 'lang' && (
+ <div className="lang-switch__list">
+ {
+ Object.keys(texts).map(key => key !== lang && (
+ <span
+ className="lang-switch__item"
+ key={key}
+ onClick={() => handleSetLang(key)}
+ >
+ {key}
+ </span>
+ ))
+ }
+ </div>
+ )
+ }
+ </WithHover>
+ </div>
+ );
+};
+
+export default LangSwitch;
diff --git a/client/src/common/jsx/TopBar.jsx b/client/src/common/jsx/TopBar.jsx
new file mode 100644
index 0000000..6e5ad6a
--- /dev/null
+++ b/client/src/common/jsx/TopBar.jsx
@@ -0,0 +1,38 @@
+import React, {useState} from 'react';
+import LangSwitch from './LangSwitch.jsx';
+import User from './User.jsx';
+
+const TopBar = ({user, setUser, setHover, lang, setLang, t={t}}) => {
+ const [opened, setOpened] = useState(false);
+
+ return (
+ <div className="top-bar">
+ { opened !== false && (
+ <div
+ className="top-bar__fog"
+ onClick={() => setOpened(false)}
+ />
+ )}
+ <LangSwitch
+ lang={lang}
+ setLang={setLang}
+ setHover={setHover}
+ opened={opened}
+ setOpened={setOpened}
+ />
+ { user && (
+ <User
+ user={user}
+ setUser={setUser}
+ setHover={setHover}
+ t={t}
+ opened={opened}
+ setOpened={setOpened}
+ />
+ )
+ }
+ </div>
+ );
+};
+
+export default TopBar;
diff --git a/client/src/common/jsx/User.jsx b/client/src/common/jsx/User.jsx
new file mode 100644
index 0000000..8b05d44
--- /dev/null
+++ b/client/src/common/jsx/User.jsx
@@ -0,0 +1,38 @@
+import React from 'react';
+import WithHover from './WithHover.jsx';
+
+const User = ({user, setUser, setHover, t, opened, setOpened}) => {
+ const handleLogout = () => {
+ setOpened(false);
+ setUser(null);
+ };
+ const handleChangePass = () => { setOpened(false) };
+ const handleRemoveUser = () => { setOpened(false) };
+
+ return (
+ <div className="user">
+ <WithHover setHover={setHover} message="click-to-change-user">
+ <span
+ className={`user__main-item${opened === 'user' ? ' user__main-item--active' : ''}`}
+ onClick={() => setOpened(opened !== 'user' ? 'user' : false)}
+ >
+ {user}
+ </span>
+ {
+ opened === 'user' && (
+ <div className="user__list" >
+ <WithHover setHover={setHover} message="click-to-logout">
+ <span className="user__item" onClick={handleLogout}>{t('logout')}</span>
+ </WithHover>
+ <WithHover setHover={setHover} message="click-to-change-user-settings">
+ <span className="user__item" onClick={handleChangePass}>{t('user-settings')}</span>
+ </WithHover>
+ </div>
+ )
+ }
+ </WithHover>
+ </div>
+ );
+};
+
+export default User;
diff --git a/client/src/common/jsx/WithHover.jsx b/client/src/common/jsx/WithHover.jsx
new file mode 100644
index 0000000..bb1a7f4
--- /dev/null
+++ b/client/src/common/jsx/WithHover.jsx
@@ -0,0 +1,13 @@
+import React from 'react';
+
+const WithHover = ({ children, setHover, message, classes }) => (
+ <div
+ onMouseEnter={()=>setHover(message)}
+ onMouseLeave={()=>setHover(null)}
+ className={classes}
+ >
+ {children}
+ </div>
+);
+
+export default WithHover;