import React from 'react'; import { Popup, usePopup } from 'shared/components/PopupMenu'; import { RoleCode } from 'shared/generated/graphql'; import { RoleCheckmark, RoleName, RoleDescription, Profile, Content, DeleteDescription, RemoveMemberButton, WarningText, ProfileIcon, Separator, ProfileInfo, InfoTitle, InfoUsername, InfoBio, CurrentPermission, MiniProfileActions, MiniProfileActionWrapper, MiniProfileActionItem, } from './Styles'; const permissions = [ { code: 'owner', name: 'Owner', description: 'Can view and edit cards, remove members, and change all settings for the project. Can delete the project.', }, { code: 'admin', name: 'Admin', description: 'Can view and edit cards, remove members, and change all settings for the project.', }, { code: 'member', name: 'Member', description: "Can view and edit cards. Can't change settings." }, { code: 'observer', name: 'Observer', description: "Can view, comment, and vote on cards. Can't move or edit cards or change settings.", }, ]; type MiniProfileProps = { bio: string; user: TaskUser; onRemoveFromTask?: () => void; onChangeRole?: (roleCode: RoleCode) => void; onRemoveFromBoard?: () => void; warning?: string | null; canChangeRole?: boolean; }; const MiniProfile: React.FC = ({ user, bio, canChangeRole, onRemoveFromTask, onChangeRole, onRemoveFromBoard, warning, }) => { const { hidePopup, setTab } = usePopup(); return ( <> hidePopup()} tab={0}> {user.profileIcon && ( {user.profileIcon.url === null && user.profileIcon.initials} )} {user.fullName} {`@${user.username}`} {bio} {onRemoveFromTask && ( { onRemoveFromTask(); }} > Remove from card )} {onChangeRole && user.role && ( { setTab(1); }} > Change permissions... {`(${user.role.name})`} )} {onRemoveFromBoard && ( { setTab(2); }} > Remove from board... )} {warning && ( <> {warning} )} hidePopup()} tab={1}> {permissions .filter(p => (user.role && user.role.code === 'owner') || p.code !== 'owner') .map(perm => ( { if (onChangeRole && user.role && perm.code !== user.role.code) { switch (perm.code) { case 'owner': onChangeRole(RoleCode.Owner); break; case 'admin': onChangeRole(RoleCode.Admin); break; case 'member': onChangeRole(RoleCode.Member); break; case 'observer': onChangeRole(RoleCode.Observer); break; default: break; } hidePopup(); } }} > {perm.name} {user.role && perm.code === user.role.code && } {perm.description} ))} {user.role && user.role.code === 'owner' && ( <> You can not change roles because there must be an owner. )} hidePopup()} tab={2}> The member will be removed from all cards on this project. They will receive a notification. { if (onRemoveFromBoard) { onRemoveFromBoard(); } }} > Remove Member ); }; export default MiniProfile;