import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, Icon, IconButton, } from "@prismicio/editor-ui"; import { type CustomType } from "@prismicio/types-internal/lib/customtypes"; import { CustomTypeFormat } from "@slicemachine/manager"; import { useRouter } from "next/router"; import { type FC, useState } from "react"; import { DeleteCustomTypeModal } from "@/legacy/components/DeleteCTModal"; import { RenameCustomTypeModal } from "@/legacy/components/Forms/RenameCustomTypeModal"; import useSliceMachineActions from "@/modules/useSliceMachineActions"; import { convertCustomToPageType } from "./actions/convertCustomToPageType"; import { CUSTOM_TYPES_CONFIG } from "./customTypesConfig"; type EditDropdownProps = { isChangesLocal: boolean; format: CustomTypeFormat; customType: CustomType; setLocalCustomType?: (args: { customType: CustomType }) => void; }; export const EditDropdown: FC = ({ format, customType, isChangesLocal, setLocalCustomType, }) => { const router = useRouter(); const { saveCustomTypeSuccess } = useSliceMachineActions(); const [isDeleteCustomTypeModalOpen, setIsDeleteCustomTypeModalOpen] = useState(false); const [isRenameCustomTypeModalOpen, setIsRenameCustomTypeModalOpen] = useState(false); const [isCustomTypeBeingConverted, setCustomTypeBeingConverted] = useState(false); const convertCustomType = async () => { setCustomTypeBeingConverted(true); await convertCustomToPageType(customType, saveCustomTypeSuccess); const customPagePathname = CUSTOM_TYPES_CONFIG.custom.getBuilderPagePathname(customType.id); if (router.asPath === customPagePathname) { const pagePagePathname = CUSTOM_TYPES_CONFIG.page.getBuilderPagePathname( customType.id, ); void router.replace(pagePagePathname); setCustomTypeBeingConverted(false); } else { setCustomTypeBeingConverted(false); } }; const onDeleteCustomType = () => { const { tablePagePathname } = CUSTOM_TYPES_CONFIG[customType.format ?? "custom"]; if (router.asPath !== tablePagePathname) { void router.replace(tablePagePathname); } else { setIsDeleteCustomTypeModalOpen(false); } }; return ( <> } onSelect={() => { setIsRenameCustomTypeModalOpen(true); }} > Rename {format === "custom" && !isChangesLocal && ( } onSelect={() => void convertCustomType()} > Convert to page type )} } onSelect={() => { setIsDeleteCustomTypeModalOpen(true); }} > Remove {isDeleteCustomTypeModalOpen ? ( setIsDeleteCustomTypeModalOpen(false)} onDeleteCustomTypeSuccess={onDeleteCustomType} /> ) : null} {isRenameCustomTypeModalOpen ? ( setIsRenameCustomTypeModalOpen(false)} setLocalCustomType={setLocalCustomType} /> ) : null} ); };