import { faFolder, faPencil, faTrash } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { format, formatDistance } from "date-fns"; import { twMerge } from "tailwind-merge"; import { createNotification } from "@app/components/notifications"; import { ProjectPermissionCan } from "@app/components/permissions"; import { DeleteActionModal, EmptyState, IconButton, Modal, ModalContent, Table, TableContainer, TableSkeleton, Tag, TBody, Td, Th, THead, Tooltip, Tr } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub, useUser, useProject } from "@app/context"; import { formatProjectRoleName } from "@app/helpers/roles"; import { usePopUp } from "@app/hooks"; import { useUpdateUserWorkspaceRole } from "@app/hooks/api"; import { TProjectRole } from "@app/hooks/api/roles/types"; import { TWorkspaceUser } from "@app/hooks/api/types"; import { MemberRoleModify } from "./MemberRoleModify"; type Props = { membershipDetails: TWorkspaceUser; isMembershipDetailsLoading?: boolean; onOpenUpgradeModal: () => void; }; export const MemberRoleDetailsSection = ({ membershipDetails, isMembershipDetailsLoading, onOpenUpgradeModal }: Props) => { const { user } = useUser(); const userId = user?.id; const { projectId } = useProject(); const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ "deleteRole", "modifyRole" ] as const); const { mutateAsync: updateUserWorkspaceRole } = useUpdateUserWorkspaceRole(); const isOwnProjectMembershipDetails = userId === membershipDetails?.user?.id; const handleRoleDelete = async () => { const { id } = popUp?.deleteRole?.data as TProjectRole; try { const updatedRoles = membershipDetails?.roles?.filter((el) => el.id !== id); await updateUserWorkspaceRole({ projectId, roles: updatedRoles.map( ({ role, customRoleSlug, isTemporary, temporaryMode, temporaryRange, temporaryAccessStartTime, temporaryAccessEndTime }) => ({ role: role === "custom" ? customRoleSlug : role, ...(isTemporary ? { isTemporary, temporaryMode, temporaryRange, temporaryAccessStartTime, temporaryAccessEndTime } : { isTemporary }) }) ), membershipId: membershipDetails.id }); createNotification({ type: "success", text: "Successfully removed role" }); handlePopUpClose("deleteRole"); } catch (err) { console.log(err); createNotification({ type: "error", text: "Failed to delete role" }); } }; return (
| Role | Duration | |
|---|---|---|
| {roleDetails.role === "custom" ? roleDetails.customRoleName : formatProjectRoleName(roleDetails.role)} |
|
|