1
0
Fork 0
mirror of https://github.com/plankanban/planka.git synced 2025-07-18 20:59:44 +02:00
planka/client/src/components/UserSettingsModal/UserSettingsModal.jsx

121 lines
3.4 KiB
React
Raw Normal View History

2020-04-08 21:12:58 +05:00
import React from 'react';
import PropTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
import { Modal, Tab } from 'semantic-ui-react';
import AccountPane from './AccountPane';
import PreferencesPane from './PreferencesPane';
2020-04-08 21:12:58 +05:00
const UserSettingsModal = React.memo(
({
email,
name,
username,
2020-04-21 05:04:34 +05:00
avatarUrl,
phone,
organization,
subscribeToOwnCards,
2020-04-21 05:04:34 +05:00
isAvatarUpdating,
2020-04-08 21:12:58 +05:00
usernameUpdateForm,
emailUpdateForm,
passwordUpdateForm,
onUpdate,
2020-04-21 05:04:34 +05:00
onAvatarUpdate,
2020-04-08 21:12:58 +05:00
onUsernameUpdate,
onUsernameUpdateMessageDismiss,
onEmailUpdate,
onEmailUpdateMessageDismiss,
onPasswordUpdate,
onPasswordUpdateMessageDismiss,
onClose,
}) => {
const [t] = useTranslation();
const panes = [
{
menuItem: t('common.account', {
context: 'title',
}),
render: () => (
<AccountPane
email={email}
name={name}
username={username}
2020-04-21 05:04:34 +05:00
avatarUrl={avatarUrl}
phone={phone}
organization={organization}
2020-04-21 05:04:34 +05:00
isAvatarUpdating={isAvatarUpdating}
2020-04-08 21:12:58 +05:00
usernameUpdateForm={usernameUpdateForm}
emailUpdateForm={emailUpdateForm}
passwordUpdateForm={passwordUpdateForm}
onUpdate={onUpdate}
2020-04-21 05:04:34 +05:00
onAvatarUpdate={onAvatarUpdate}
2020-04-08 21:12:58 +05:00
onUsernameUpdate={onUsernameUpdate}
onUsernameUpdateMessageDismiss={onUsernameUpdateMessageDismiss}
onEmailUpdate={onEmailUpdate}
onEmailUpdateMessageDismiss={onEmailUpdateMessageDismiss}
onPasswordUpdate={onPasswordUpdate}
onPasswordUpdateMessageDismiss={onPasswordUpdateMessageDismiss}
/>
),
},
{
menuItem: t('common.preferences', {
context: 'title',
}),
render: () => (
<PreferencesPane subscribeToOwnCards={subscribeToOwnCards} onUpdate={onUpdate} />
),
},
2020-04-08 21:12:58 +05:00
];
return (
<Modal open closeIcon size="small" centered={false} onClose={onClose}>
<Modal.Content>
<Tab
menu={{
secondary: true,
pointing: true,
}}
panes={panes}
/>
2020-04-08 21:12:58 +05:00
</Modal.Content>
</Modal>
);
},
);
UserSettingsModal.propTypes = {
email: PropTypes.string.isRequired,
name: PropTypes.string.isRequired,
username: PropTypes.string,
2020-04-21 05:04:34 +05:00
avatarUrl: PropTypes.string,
phone: PropTypes.string,
organization: PropTypes.string,
subscribeToOwnCards: PropTypes.bool.isRequired,
2020-04-21 05:04:34 +05:00
isAvatarUpdating: PropTypes.bool.isRequired,
2020-04-08 21:12:58 +05:00
/* eslint-disable react/forbid-prop-types */
usernameUpdateForm: PropTypes.object.isRequired,
emailUpdateForm: PropTypes.object.isRequired,
passwordUpdateForm: PropTypes.object.isRequired,
/* eslint-enable react/forbid-prop-types */
onUpdate: PropTypes.func.isRequired,
2020-04-21 05:04:34 +05:00
onAvatarUpdate: PropTypes.func.isRequired,
2020-04-08 21:12:58 +05:00
onUsernameUpdate: PropTypes.func.isRequired,
onUsernameUpdateMessageDismiss: PropTypes.func.isRequired,
onEmailUpdate: PropTypes.func.isRequired,
onEmailUpdateMessageDismiss: PropTypes.func.isRequired,
onPasswordUpdate: PropTypes.func.isRequired,
onPasswordUpdateMessageDismiss: PropTypes.func.isRequired,
onClose: PropTypes.func.isRequired,
};
UserSettingsModal.defaultProps = {
username: undefined,
2020-04-21 05:04:34 +05:00
avatarUrl: undefined,
phone: undefined,
organization: undefined,
2020-04-08 21:12:58 +05:00
};
export default UserSettingsModal;