Newer
Older
Joel Jeremy Marquez
committed
import React, { useState, useEffect } from 'react';
import { useSelector } from 'react-redux';
import { useActions } from '../hooks/useActions';
Joel Jeremy Marquez
committed
import { colors, styles, type CSSProperties } from '../style';
Matiss Janis Aboltins
committed
import Button from './common/Button';
import Menu from './common/Menu';
import Text from './common/Text';
import View from './common/View';
import { useServerURL } from './ServerContext';
Matiss Janis Aboltins
committed
import { Tooltip } from './tooltips';
type LoggedInUserProps = {
hideIfNoServer?: boolean;
style?: CSSProperties;
color?: string;
};
export default function LoggedInUser({
hideIfNoServer,
style,
color,
}: LoggedInUserProps) {
let userData = useSelector(state => state.user.data);
let { getUserData, signOut, closeBudget } = useActions();
let [loading, setLoading] = useState(true);
let [menuOpen, setMenuOpen] = useState(false);
useEffect(() => {
getUserData().then(() => setLoading(false));
}, []);
async function onChangePassword() {
await closeBudget();
async function onMenuSelect(type) {
setMenuOpen(false);
switch (type) {
case 'change-password':
onChangePassword();
break;
case 'sign-in':
await closeBudget();
case 'config-server':
await closeBudget();
function serverMessage() {
}
if (userData?.offline) {
return 'Server offline';
}
return 'Server online';
}
if (hideIfNoServer && !serverUrl) {
return null;
if (loading && serverUrl) {
Joel Jeremy Marquez
committed
style={{
color: colors.n5,
fontStyle: 'italic',
...styles.delayedFadeIn,
...style,
}}
Joel Jeremy Marquez
committed
<View style={{ flexDirection: 'row', alignItems: 'center', ...style }}>
<Button type="bare" onClick={() => setMenuOpen(true)} style={{ color }}>
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
{menuOpen && (
<Tooltip
position="bottom-right"
style={{ padding: 0 }}
onClose={() => setMenuOpen(false)}
>
<Menu
onMenuSelect={onMenuSelect}
items={[
serverUrl &&
!userData?.offline && {
name: 'change-password',
text: 'Change password',
},
serverUrl && { name: 'sign-out', text: 'Sign out' },
{
name: 'config-server',
text: serverUrl ? 'Change server URL' : 'Start using a server',
},
]}
/>
</Tooltip>
)}
</View>
);