feature: duplicate project role

This commit is contained in:
Scott Wilson
2025-05-08 20:10:25 -07:00
parent 8dfc0cfbe0
commit 57a29577fe
4 changed files with 215 additions and 7 deletions
@@ -19,6 +19,7 @@ import { ProjectPermissionActions, ProjectPermissionSub, useWorkspace } from "@a
import { useDeleteProjectRole, useGetProjectRoleBySlug } from "@app/hooks/api";
import { ProjectMembershipRole } from "@app/hooks/api/roles/types";
import { usePopUp } from "@app/hooks/usePopUp";
import { DuplicateRoleModal } from "@app/pages/project/RoleDetailsBySlugPage/components/DuplicateRoleModal";
import { ProjectAccessControlTabs } from "@app/types/project";
import { RoleDetailsSection } from "./components/RoleDetailsSection";
@@ -40,7 +41,8 @@ const Page = () => {
const { popUp, handlePopUpOpen, handlePopUpClose, handlePopUpToggle } = usePopUp([
"role",
"deleteRole"
"deleteRole",
"duplicateRole"
] as const);
const onDeleteRoleSubmit = async () => {
@@ -117,6 +119,24 @@ const Page = () => {
</DropdownMenuItem>
)}
</ProjectPermissionCan>
<ProjectPermissionCan
I={ProjectPermissionActions.Create}
a={ProjectPermissionSub.Role}
>
{(isAllowed) => (
<DropdownMenuItem
className={twMerge(
!isAllowed && "pointer-events-none cursor-not-allowed opacity-50"
)}
onClick={() => {
handlePopUpOpen("duplicateRole");
}}
disabled={!isAllowed}
>
Duplicate Role
</DropdownMenuItem>
)}
</ProjectPermissionCan>
<ProjectPermissionCan
I={ProjectPermissionActions.Delete}
a={ProjectPermissionSub.Role}
@@ -155,6 +175,11 @@ const Page = () => {
deleteKey="confirm"
onDeleteApproved={() => onDeleteRoleSubmit()}
/>
<DuplicateRoleModal
isOpen={popUp.duplicateRole.isOpen}
onOpenChange={(isOpen) => handlePopUpToggle("duplicateRole", isOpen)}
roleSlug={roleSlug}
/>
</div>
);
};