diff --git a/client/src/components/Memberships/Memberships.jsx b/client/src/components/Memberships/Memberships.jsx index d15a0d63..1aece7f0 100644 --- a/client/src/components/Memberships/Memberships.jsx +++ b/client/src/components/Memberships/Memberships.jsx @@ -8,6 +8,9 @@ import ActionsStep from './ActionsStep'; import User from '../User'; import styles from './Memberships.module.scss'; +import MembershipsStep from './MembershipsStep'; + +const MAX_MEMBERS = 6; const Memberships = React.memo( ({ @@ -31,11 +34,14 @@ const Memberships = React.memo( }) => { const AddPopup = usePopup(AddStep); const ActionsPopup = usePopup(ActionsStep); + const MembershipsPopup = usePopup(MembershipsStep); + + const remainMembersCount = items.length - MAX_MEMBERS; return ( <> - {items.map((item) => ( + {items.slice(0, MAX_MEMBERS).map((item) => ( ))} + {remainMembersCount > 0 && ( + 1 || canLeaveIfLast} + onUpdate={onUpdate} + onDelete={onDelete} + > + + + )} {canEdit && ( { + const [t] = useTranslation(); + + const [editingItem, setEditingItem] = useState(); + + const handleUserClick = useCallback( + (id) => { + setEditingItem(items.find((item) => item.user.id === id)); + }, + [setEditingItem, items], + ); + + if (editingItem) { + return ( + <> + setEditingItem(null)}>{t('common.memberInfo')} + + + + + ); + } + + return ( + {}} + /> + ); + }, +); + +MembershipsStep.propTypes = { + items: PropTypes.array.isRequired, // eslint-disable-line react/forbid-prop-types + permissionsSelectStep: PropTypes.elementType, + leaveButtonContent: PropTypes.string, + leaveConfirmationTitle: PropTypes.string, + leaveConfirmationContent: PropTypes.string, + leaveConfirmationButtonContent: PropTypes.string, + deleteButtonContent: PropTypes.string, + deleteConfirmationTitle: PropTypes.string, + deleteConfirmationContent: PropTypes.string, + deleteConfirmationButtonContent: PropTypes.string, + canEdit: PropTypes.bool.isRequired, + canLeave: PropTypes.bool.isRequired, + onUpdate: PropTypes.func, + onDelete: PropTypes.func.isRequired, + onClose: PropTypes.func.isRequired, +}; + +MembershipsStep.defaultProps = { + permissionsSelectStep: undefined, + leaveButtonContent: 'action.leaveBoard', + leaveConfirmationTitle: 'common.leaveBoard', + leaveConfirmationContent: 'common.areYouSureYouWantToLeaveBoard', + leaveConfirmationButtonContent: 'action.leaveBoard', + deleteButtonContent: 'action.removeFromBoard', + deleteConfirmationTitle: 'common.removeMember', + deleteConfirmationContent: 'common.areYouSureYouWantToRemoveThisMemberFromBoard', + deleteConfirmationButtonContent: 'action.removeMember', + onUpdate: undefined, +}; + +export default MembershipsStep; diff --git a/client/src/locales/en/core.js b/client/src/locales/en/core.js index 41e4494d..0eb0ae3c 100644 --- a/client/src/locales/en/core.js +++ b/client/src/locales/en/core.js @@ -108,6 +108,7 @@ export default { list: 'List', listActions_title: 'List Actions', managers: 'Managers', + memberInfo: 'Member Info', members: 'Members', minutes: 'Minutes', moveCard_title: 'Move Card', diff --git a/client/src/locales/pt/core.js b/client/src/locales/pt/core.js index 3d557e81..2cc6148f 100644 --- a/client/src/locales/pt/core.js +++ b/client/src/locales/pt/core.js @@ -111,6 +111,7 @@ export default { list: 'Lista', listActions_title: 'Ações da Lista', managers: 'Gerentes', + memberInfo: 'Informações do Membro', members: 'Membros', minutes: 'Minutos', moveCard_title: 'Mover Cartão',