import { useRouter } from "next/router"; import { subject } from "@casl/ability"; import { faClose, faFolder, faPencilSquare } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useNotificationContext } from "@app/components/context/Notifications/NotificationProvider"; import { ProjectPermissionCan } from "@app/components/permissions"; import { DeleteActionModal, IconButton, Modal, ModalContent } from "@app/components/v2"; import { ProjectPermissionActions, ProjectPermissionSub } from "@app/context"; import { usePopUp } from "@app/hooks"; import { useDeleteFolder, useUpdateFolder } from "@app/hooks/api"; import { TSecretFolder } from "@app/hooks/api/secretFolders/types"; import { SortDir } from "../../SecretMainPage.types"; import { FolderForm } from "../ActionBar/FolderForm"; type Props = { folders?: TSecretFolder[]; environment: string; workspaceId: string; secretPath?: string; sortDir: SortDir; }; export const FolderListView = ({ folders = [], environment, workspaceId, secretPath = "/", sortDir = SortDir.ASC }: Props) => { const { popUp, handlePopUpToggle, handlePopUpOpen, handlePopUpClose } = usePopUp([ "updateFolder", "deleteFolder" ] as const); const router = useRouter(); const { createNotification } = useNotificationContext(); const { mutateAsync: updateFolder } = useUpdateFolder(); const { mutateAsync: deleteFolder } = useDeleteFolder(); const handleFolderUpdate = async (newFolderName: string) => { try { await updateFolder({ folderName: popUp.updateFolder.data as string, name: newFolderName, directory: secretPath, environment, workspaceId }); handlePopUpClose("updateFolder"); createNotification({ type: "success", text: "Successfully saved folder" }); } catch (error) { console.log(error); createNotification({ type: "error", text: "Failed to save folder" }); } }; const handleFolderDelete = async () => { try { await deleteFolder({ folderName: popUp.deleteFolder.data as string, directory: secretPath, environment, workspaceId }); handlePopUpClose("deleteFolder"); createNotification({ type: "success", text: "Successfully deleted folder" }); } catch (error) { console.log(error); createNotification({ type: "error", text: "Failed to delete folder" }); } }; const handleFolderClick = (name: string) => { router.push({ pathname: router.pathname, query: { ...router.query, secretPath: `${router.query?.secretPath || ""}/${name}` } }); }; return ( <> {folders .sort((a, b) => sortDir === SortDir.ASC ? a.name.toLowerCase().localeCompare(b.name.toLowerCase()) : b.name.toLowerCase().localeCompare(a.name.toLowerCase()) ) .map(({ name, id }) => (