mirror of
https://github.com/plankanban/planka.git
synced 2025-07-19 05:09:43 +02:00
parent
b810dcced7
commit
dd83278c83
30 changed files with 775 additions and 204 deletions
|
@ -6,68 +6,140 @@ import { Button, Modal, Table } from 'semantic-ui-react';
|
|||
import UserAddPopupContainer from '../../containers/UserAddPopupContainer';
|
||||
import Item from './Item';
|
||||
|
||||
const UsersModal = React.memo(({ items, onUpdate, onDelete, onClose }) => {
|
||||
const [t] = useTranslation();
|
||||
const UsersModal = React.memo(
|
||||
({
|
||||
items,
|
||||
onUpdate,
|
||||
onUsernameUpdate,
|
||||
onUsernameUpdateMessageDismiss,
|
||||
onEmailUpdate,
|
||||
onEmailUpdateMessageDismiss,
|
||||
onPasswordUpdate,
|
||||
onPasswordUpdateMessageDismiss,
|
||||
onDelete,
|
||||
onClose,
|
||||
}) => {
|
||||
const [t] = useTranslation();
|
||||
|
||||
const handleUpdate = useCallback(
|
||||
(id, data) => {
|
||||
onUpdate(id, data);
|
||||
},
|
||||
[onUpdate],
|
||||
);
|
||||
const handleUpdate = useCallback(
|
||||
(id, data) => {
|
||||
onUpdate(id, data);
|
||||
},
|
||||
[onUpdate],
|
||||
);
|
||||
|
||||
const handleDelete = useCallback(
|
||||
(id) => {
|
||||
onDelete(id);
|
||||
},
|
||||
[onDelete],
|
||||
);
|
||||
const handleUsernameUpdate = useCallback(
|
||||
(id, data) => {
|
||||
onUsernameUpdate(id, data);
|
||||
},
|
||||
[onUsernameUpdate],
|
||||
);
|
||||
|
||||
return (
|
||||
<Modal open closeIcon size="large" centered={false} onClose={onClose}>
|
||||
<Modal.Header>
|
||||
{t('common.users', {
|
||||
context: 'title',
|
||||
})}
|
||||
</Modal.Header>
|
||||
<Modal.Content>
|
||||
<Table basic="very">
|
||||
<Table.Header>
|
||||
<Table.Row>
|
||||
<Table.HeaderCell width={4}>{t('common.name')}</Table.HeaderCell>
|
||||
<Table.HeaderCell width={4}>{t('common.username')}</Table.HeaderCell>
|
||||
<Table.HeaderCell width={4}>{t('common.email')}</Table.HeaderCell>
|
||||
<Table.HeaderCell>{t('common.administrator')}</Table.HeaderCell>
|
||||
<Table.HeaderCell />
|
||||
</Table.Row>
|
||||
</Table.Header>
|
||||
<Table.Body>
|
||||
{items.map((item) => (
|
||||
<Item
|
||||
key={item.id}
|
||||
name={item.name}
|
||||
username={item.username}
|
||||
email={item.email}
|
||||
isAdmin={item.isAdmin}
|
||||
onUpdate={(data) => handleUpdate(item.id, data)}
|
||||
onDelete={() => handleDelete(item.id)}
|
||||
/>
|
||||
))}
|
||||
</Table.Body>
|
||||
</Table>
|
||||
</Modal.Content>
|
||||
<Modal.Actions>
|
||||
<UserAddPopupContainer>
|
||||
<Button positive content={t('action.addUser')} />
|
||||
</UserAddPopupContainer>
|
||||
</Modal.Actions>
|
||||
</Modal>
|
||||
);
|
||||
});
|
||||
const handleUsernameUpdateMessageDismiss = useCallback(
|
||||
(id) => {
|
||||
onUsernameUpdateMessageDismiss(id);
|
||||
},
|
||||
[onUsernameUpdateMessageDismiss],
|
||||
);
|
||||
|
||||
const handleEmailUpdate = useCallback(
|
||||
(id, data) => {
|
||||
onEmailUpdate(id, data);
|
||||
},
|
||||
[onEmailUpdate],
|
||||
);
|
||||
|
||||
const handleEmailUpdateMessageDismiss = useCallback(
|
||||
(id) => {
|
||||
onEmailUpdateMessageDismiss(id);
|
||||
},
|
||||
[onEmailUpdateMessageDismiss],
|
||||
);
|
||||
|
||||
const handlePasswordUpdate = useCallback(
|
||||
(id, data) => {
|
||||
onPasswordUpdate(id, data);
|
||||
},
|
||||
[onPasswordUpdate],
|
||||
);
|
||||
|
||||
const handlePasswordUpdateMessageDismiss = useCallback(
|
||||
(id) => {
|
||||
onPasswordUpdateMessageDismiss(id);
|
||||
},
|
||||
[onPasswordUpdateMessageDismiss],
|
||||
);
|
||||
|
||||
const handleDelete = useCallback(
|
||||
(id) => {
|
||||
onDelete(id);
|
||||
},
|
||||
[onDelete],
|
||||
);
|
||||
|
||||
return (
|
||||
<Modal open closeIcon size="large" centered={false} onClose={onClose}>
|
||||
<Modal.Header>
|
||||
{t('common.users', {
|
||||
context: 'title',
|
||||
})}
|
||||
</Modal.Header>
|
||||
<Modal.Content>
|
||||
<Table basic="very">
|
||||
<Table.Header>
|
||||
<Table.Row>
|
||||
<Table.HeaderCell width={4}>{t('common.name')}</Table.HeaderCell>
|
||||
<Table.HeaderCell width={4}>{t('common.username')}</Table.HeaderCell>
|
||||
<Table.HeaderCell width={4}>{t('common.email')}</Table.HeaderCell>
|
||||
<Table.HeaderCell>{t('common.administrator')}</Table.HeaderCell>
|
||||
<Table.HeaderCell />
|
||||
</Table.Row>
|
||||
</Table.Header>
|
||||
<Table.Body>
|
||||
{items.map((item) => (
|
||||
<Item
|
||||
key={item.id}
|
||||
email={item.email}
|
||||
username={item.username}
|
||||
name={item.name}
|
||||
organization={item.organization}
|
||||
phone={item.phone}
|
||||
isAdmin={item.isAdmin}
|
||||
emailUpdateForm={item.emailUpdateForm}
|
||||
passwordUpdateForm={item.passwordUpdateForm}
|
||||
usernameUpdateForm={item.usernameUpdateForm}
|
||||
onUpdate={(data) => handleUpdate(item.id, data)}
|
||||
onUsernameUpdate={(data) => handleUsernameUpdate(item.id, data)}
|
||||
onUsernameUpdateMessageDismiss={() => handleUsernameUpdateMessageDismiss(item.id)}
|
||||
onEmailUpdate={(data) => handleEmailUpdate(item.id, data)}
|
||||
onEmailUpdateMessageDismiss={() => handleEmailUpdateMessageDismiss(item.id)}
|
||||
onPasswordUpdate={(data) => handlePasswordUpdate(item.id, data)}
|
||||
onPasswordUpdateMessageDismiss={() => handlePasswordUpdateMessageDismiss(item.id)}
|
||||
onDelete={() => handleDelete(item.id)}
|
||||
/>
|
||||
))}
|
||||
</Table.Body>
|
||||
</Table>
|
||||
</Modal.Content>
|
||||
<Modal.Actions>
|
||||
<UserAddPopupContainer>
|
||||
<Button positive content={t('action.addUser')} />
|
||||
</UserAddPopupContainer>
|
||||
</Modal.Actions>
|
||||
</Modal>
|
||||
);
|
||||
},
|
||||
);
|
||||
|
||||
UsersModal.propTypes = {
|
||||
items: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types
|
||||
onUpdate: PropTypes.func.isRequired,
|
||||
onUsernameUpdate: PropTypes.func.isRequired,
|
||||
onUsernameUpdateMessageDismiss: PropTypes.func.isRequired,
|
||||
onEmailUpdate: PropTypes.func.isRequired,
|
||||
onEmailUpdateMessageDismiss: PropTypes.func.isRequired,
|
||||
onPasswordUpdate: PropTypes.func.isRequired,
|
||||
onPasswordUpdateMessageDismiss: PropTypes.func.isRequired,
|
||||
onDelete: PropTypes.func.isRequired,
|
||||
onClose: PropTypes.func.isRequired,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue