import { subject } from "@casl/ability"; 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, useProject } from "@app/context"; import { formatProjectRoleName } from "@app/helpers/roles"; import { usePopUp } from "@app/hooks"; import { useUpdateIdentityWorkspaceRole } from "@app/hooks/api"; import { IdentityMembership } from "@app/hooks/api/identities/types"; import { TProjectRole } from "@app/hooks/api/roles/types"; import { IdentityRoleModify } from "./IdentityRoleModify"; type Props = { identityMembershipDetails: IdentityMembership; isMembershipDetailsLoading?: boolean; }; export const IdentityRoleDetailsSection = ({ identityMembershipDetails, isMembershipDetailsLoading }: Props) => { const { currentProject } = useProject(); const { popUp, handlePopUpOpen, handlePopUpToggle, handlePopUpClose } = usePopUp([ "deleteRole", "modifyRole" ] as const); const { mutateAsync: updateIdentityWorkspaceRole } = useUpdateIdentityWorkspaceRole(); const handleRoleDelete = async () => { const { id } = popUp?.deleteRole?.data as TProjectRole; try { const updatedRoles = identityMembershipDetails?.roles?.filter((el) => el.id !== id); await updateIdentityWorkspaceRole({ projectId: currentProject?.id || "", identityId: identityMembershipDetails.identity.id, roles: updatedRoles.map( ({ role, customRoleSlug, isTemporary, temporaryMode, temporaryRange, temporaryAccessStartTime, temporaryAccessEndTime }) => ({ role: role === "custom" ? customRoleSlug : role, ...(isTemporary ? { isTemporary, temporaryMode, temporaryRange, temporaryAccessStartTime, temporaryAccessEndTime } : { isTemporary }) }) ) }); 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)} |
|
|