1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-15 01:16:22 +02:00
unleash.unleash/frontend/src/component/user/UserProfile/UserProfileContent/UserProfileContent.tsx
olav 7785e2c717 refactor: improve header button ARIA attrs (#957)
* refactor: fix header docs icon color

* refactor: improve header button ARIA attrs
2022-05-06 11:38:11 +02:00

186 lines
7.4 KiB
TypeScript

import React, { useState } from 'react';
import { ConditionallyRender } from 'component/common/ConditionallyRender/ConditionallyRender';
import {
Avatar,
Button,
FormControl,
InputLabel,
Paper,
Select,
Typography,
SelectChangeEvent,
} from '@mui/material';
import classnames from 'classnames';
import { useStyles } from 'component/user/UserProfile/UserProfileContent/UserProfileContent.styles';
import { useThemeStyles } from 'themes/themeStyles';
import { Alert } from '@mui/material';
import EditProfile from '../EditProfile/EditProfile';
import legacyStyles from '../../user.module.scss';
import { getBasePath } from 'utils/formatPath';
import useUiConfig from 'hooks/api/getters/useUiConfig/useUiConfig';
import { IUser } from 'interfaces/user';
import { ILocationSettings } from 'hooks/useLocationSettings';
interface IUserProfileContentProps {
id: string;
showProfile: boolean;
profile: IUser;
possibleLocales: string[];
imageUrl: string;
currentLocale?: string;
setCurrentLocale: (value: string) => void;
setLocationSettings: React.Dispatch<
React.SetStateAction<ILocationSettings>
>;
}
const UserProfileContent = ({
id,
showProfile,
profile,
possibleLocales,
imageUrl,
currentLocale,
setCurrentLocale,
setLocationSettings,
}: IUserProfileContentProps) => {
const { classes: themeStyles } = useThemeStyles();
const { uiConfig } = useUiConfig();
const [updatedPassword, setUpdatedPassword] = useState(false);
const [editingProfile, setEditingProfile] = useState(false);
const { classes: styles } = useStyles();
const profileAvatarClasses = classnames(styles.avatar, {
[styles.editingAvatar]: editingProfile,
});
const profileEmailClasses = classnames(styles.profileEmail, {
[styles.editingEmail]: editingProfile,
});
const handleChange = (e: SelectChangeEvent) => {
const locale = e.target.value;
setCurrentLocale(locale);
setLocationSettings({ locale });
};
return (
<ConditionallyRender
condition={showProfile}
show={
<Paper
id={id}
className={classnames(
styles.profile,
themeStyles.flexColumn,
themeStyles.itemsCenter,
themeStyles.contentSpacingY
)}
>
<Avatar
alt="Your Gravatar"
src={imageUrl}
className={profileAvatarClasses}
/>
<Typography variant="body1" className={profileEmailClasses}>
{profile?.email}
</Typography>
<ConditionallyRender
condition={updatedPassword}
show={
<Alert onClose={() => setUpdatedPassword(false)}>
Successfully updated password.
</Alert>
}
/>
<ConditionallyRender
condition={!editingProfile}
show={
<>
<ConditionallyRender
condition={!uiConfig.disablePasswordAuth}
show={
<Button
onClick={() =>
setEditingProfile(true)
}
>
Update password
</Button>
}
/>
<div className={themeStyles.divider} />
<div className={legacyStyles.showUserSettings}>
<FormControl
variant="outlined"
size="small"
style={{
width: '100%',
minWidth: '120px',
}}
>
<InputLabel
htmlFor="locale-select"
style={{ backgroundColor: '#fff' }}
>
Date/Time formatting
</InputLabel>
<Select
id="locale-select"
value={currentLocale || ''}
native
onChange={handleChange}
MenuProps={{
style: {
zIndex: 9999,
},
}}
>
{possibleLocales.map(locale => {
return (
<option
key={locale}
value={locale}
>
{locale}
</option>
);
})}
</Select>
</FormControl>
</div>
<div className={themeStyles.divider} />
<a
className={styles.link}
href="https://www.getunleash.io/privacy-policy"
rel="noopener noreferrer"
target="_blank"
>
Privacy policy
</a>
<div className={themeStyles.divider} />
<Button
variant="contained"
color="primary"
href={`${getBasePath()}/logout`}
>
Logout
</Button>
</>
}
elseShow={
<EditProfile
setEditingProfile={setEditingProfile}
setUpdatedPassword={setUpdatedPassword}
/>
}
/>
</Paper>
}
/>
);
};
export default UserProfileContent;