@payloadcms/ui 3.68.0-internal-debug.2eb12b9 → 3.68.0-internal-debug.185cc5f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements/AnimateHeight/usePatchAnimateHeight.js +2 -2
- package/dist/elements/AnimateHeight/usePatchAnimateHeight.js.map +1 -1
- package/dist/elements/Autosave/index.js +1 -0
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/BulkUpload/EditMany/index.js +2 -2
- package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
- package/dist/elements/BulkUpload/FormsManager/index.js +8 -8
- package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
- package/dist/elements/BulkUpload/index.js +12 -1
- package/dist/elements/BulkUpload/index.js.map +1 -1
- package/dist/elements/Button/index.js +2 -2
- package/dist/elements/Button/index.js.map +1 -1
- package/dist/elements/Button/types.js +13 -1
- package/dist/elements/Button/types.js.map +1 -1
- package/dist/elements/Card/index.js +5 -1
- package/dist/elements/Card/index.js.map +1 -1
- package/dist/elements/CodeEditor/CodeEditor.js +2 -2
- package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
- package/dist/elements/CodeEditor/types.js +3 -1
- package/dist/elements/CodeEditor/types.js.map +1 -1
- package/dist/elements/Collapsible/index.js +8 -1
- package/dist/elements/Collapsible/index.js.map +1 -1
- package/dist/elements/Combobox/index.js +6 -0
- package/dist/elements/Combobox/index.js.map +1 -1
- package/dist/elements/DatePicker/DatePicker.js +1 -0
- package/dist/elements/DatePicker/DatePicker.js.map +1 -1
- package/dist/elements/DatePicker/getFormattedLocale.js +1 -0
- package/dist/elements/DatePicker/getFormattedLocale.js.map +1 -1
- package/dist/elements/DeleteMany/index.js +25 -1
- package/dist/elements/DeleteMany/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.js +1 -1
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentDrawer/Provider.js +5 -1
- package/dist/elements/DocumentDrawer/Provider.js.map +1 -1
- package/dist/elements/DocumentDrawer/types.js +11 -1
- package/dist/elements/DocumentDrawer/types.js.map +1 -1
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js +1 -0
- package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
- package/dist/elements/Drawer/index.js +3 -1
- package/dist/elements/Drawer/index.js.map +1 -1
- package/dist/elements/EditMany/DrawerContent.js +15 -1
- package/dist/elements/EditMany/DrawerContent.js.map +1 -1
- package/dist/elements/EditMany/index.js +3 -1
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +8 -1
- package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -1
- package/dist/elements/FolderView/FolderFileCard/index.js +1 -0
- package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -1
- package/dist/elements/FolderView/MoveDocToFolder/index.js +2 -3
- package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -1
- package/dist/elements/HTMLDiff/diff/index.js +24 -3
- package/dist/elements/HTMLDiff/diff/index.js.map +1 -1
- package/dist/elements/HydrateAuthProvider/index.js +6 -1
- package/dist/elements/HydrateAuthProvider/index.js.map +1 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js +3 -1
- package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
- package/dist/elements/Link/index.js +5 -1
- package/dist/elements/Link/index.js.map +1 -1
- package/dist/elements/ListControls/types.js +7 -1
- package/dist/elements/ListControls/types.js.map +1 -1
- package/dist/elements/ListDrawer/DrawerContent.js +2 -2
- package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/ListDrawer/Provider.js +8 -1
- package/dist/elements/ListDrawer/Provider.js.map +1 -1
- package/dist/elements/ListDrawer/index.js +2 -1
- package/dist/elements/ListDrawer/index.js.map +1 -1
- package/dist/elements/ListDrawer/types.js +5 -1
- package/dist/elements/ListDrawer/types.js.map +1 -1
- package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +5 -1
- package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
- package/dist/elements/ListSelection/index.js +11 -1
- package/dist/elements/ListSelection/index.js.map +1 -1
- package/dist/elements/LivePreview/Toolbar/Controls/index.js +1 -1
- package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
- package/dist/elements/Logout/index.js +5 -1
- package/dist/elements/Logout/index.js.map +1 -1
- package/dist/elements/Pill/index.js +5 -2
- package/dist/elements/Pill/index.js.map +1 -1
- package/dist/elements/PublishMany/index.js +3 -1
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -2
- package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
- package/dist/elements/ReactSelect/index.js +2 -2
- package/dist/elements/ReactSelect/index.js.map +1 -1
- package/dist/elements/ReactSelect/types.js +8 -1
- package/dist/elements/ReactSelect/types.js.map +1 -1
- package/dist/elements/RelationshipTable/index.js +2 -2
- package/dist/elements/RelationshipTable/index.js.map +1 -1
- package/dist/elements/RestoreMany/index.js +1 -0
- package/dist/elements/RestoreMany/index.js.map +1 -1
- package/dist/elements/SaveButton/index.js +1 -2
- package/dist/elements/SaveButton/index.js.map +1 -1
- package/dist/elements/SaveDraftButton/index.js +1 -2
- package/dist/elements/SaveDraftButton/index.js.map +1 -1
- package/dist/elements/SearchFilter/types.js +19 -1
- package/dist/elements/SearchFilter/types.js.map +1 -1
- package/dist/elements/Status/index.js +2 -2
- package/dist/elements/Status/index.js.map +1 -1
- package/dist/elements/StepNav/index.js +5 -1
- package/dist/elements/StepNav/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Select/index.js +4 -4
- package/dist/elements/Table/DefaultCell/fields/Select/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +2 -1
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/Table/RelationshipProvider/index.js +3 -0
- package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
- package/dist/elements/Thumbnail/createThumbnail.js +12 -12
- package/dist/elements/Thumbnail/createThumbnail.js.map +1 -1
- package/dist/elements/Tooltip/index.js +3 -1
- package/dist/elements/Tooltip/index.js.map +1 -1
- package/dist/elements/UnpublishMany/index.js +3 -1
- package/dist/elements/UnpublishMany/index.js.map +1 -1
- package/dist/elements/Upload/index.js +8 -8
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Number/index.js +1 -0
- package/dist/elements/WhereBuilder/Condition/Number/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js +5 -6
- package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
- package/dist/elements/WhereBuilder/Condition/Text/index.js +1 -0
- package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
- package/dist/elements/WhereBuilder/index.js +2 -2
- package/dist/elements/WhereBuilder/index.js.map +1 -1
- package/dist/exports/client/index.js +26 -2
- package/dist/exports/client/index.js.map +1 -1
- package/dist/exports/shared/index.js +2 -1
- package/dist/exports/shared/index.js.map +1 -1
- package/dist/fields/Blocks/BlockSelector/index.js +3 -1
- package/dist/fields/Blocks/BlockSelector/index.js.map +1 -1
- package/dist/fields/Email/index.js +1 -1
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/Group/index.js +1 -1
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/Number/index.js +5 -3
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Password/types.js +11 -1
- package/dist/fields/Password/types.js.map +1 -1
- package/dist/fields/Point/index.js +2 -2
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js +4 -1
- package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
- package/dist/fields/Relationship/select-components/SingleValue/index.js +4 -1
- package/dist/fields/Relationship/select-components/SingleValue/index.js.map +1 -1
- package/dist/fields/Text/index.js +3 -2
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Upload/Input.js +3 -1
- package/dist/fields/Upload/Input.js.map +1 -1
- package/dist/fields/Upload/types.js +1 -0
- package/dist/fields/Upload/types.js.map +1 -1
- package/dist/fields/shared/index.js +2 -3
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/Form/fieldReducer.js +2 -1
- package/dist/forms/Form/fieldReducer.js.map +1 -1
- package/dist/forms/Form/index.js +12 -9
- package/dist/forms/Form/index.js.map +1 -1
- package/dist/forms/Form/mergeServerFormState.js +11 -3
- package/dist/forms/Form/mergeServerFormState.js.map +1 -1
- package/dist/forms/Form/reduceToSerializableFields.js +2 -2
- package/dist/forms/Form/reduceToSerializableFields.js.map +1 -1
- package/dist/forms/Form/types.js +52 -1
- package/dist/forms/Form/types.js.map +1 -1
- package/dist/forms/NullifyField/index.js +2 -1
- package/dist/forms/NullifyField/index.js.map +1 -1
- package/dist/forms/WatchChildErrors/index.js +6 -1
- package/dist/forms/WatchChildErrors/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +20 -0
- package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/index.js +33 -1
- package/dist/forms/fieldSchemasToFormState/index.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js +2 -2
- package/dist/forms/fieldSchemasToFormState/isRowCollapsed.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/iterateFields.js +16 -0
- package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/renderField.js +2 -2
- package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -1
- package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
- package/dist/forms/fieldSchemasToFormState/types.js +5 -1
- package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
- package/dist/forms/useField/index.js +1 -0
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/forms/useField/types.js +19 -1
- package/dist/forms/useField/types.js.map +1 -1
- package/dist/hooks/useControllableState.js +9 -1
- package/dist/hooks/useControllableState.js.map +1 -1
- package/dist/hooks/useDelayedRender.js +3 -1
- package/dist/hooks/useDelayedRender.js.map +1 -1
- package/dist/hooks/useHotkey.js +2 -2
- package/dist/hooks/useHotkey.js.map +1 -1
- package/dist/hooks/usePayloadAPI.js +3 -4
- package/dist/hooks/usePayloadAPI.js.map +1 -1
- package/dist/hooks/usePopupWindow.js +2 -2
- package/dist/hooks/usePopupWindow.js.map +1 -1
- package/dist/hooks/useQueue.js +15 -7
- package/dist/hooks/useQueue.js.map +1 -1
- package/dist/hooks/useResize.js +4 -3
- package/dist/hooks/useResize.js.map +1 -1
- package/dist/providers/Auth/index.js +35 -3
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/Config/index.js +10 -1
- package/dist/providers/Config/index.js.map +1 -1
- package/dist/providers/DocumentInfo/index.js +6 -7
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/DocumentInfo/types.js +25 -1
- package/dist/providers/DocumentInfo/types.js.map +1 -1
- package/dist/providers/Folders/index.js +44 -2
- package/dist/providers/Folders/index.js.map +1 -1
- package/dist/providers/ListQuery/types.js +5 -1
- package/dist/providers/ListQuery/types.js.map +1 -1
- package/dist/providers/LivePreview/context.js +11 -1
- package/dist/providers/LivePreview/context.js.map +1 -1
- package/dist/providers/LivePreview/index.js +7 -4
- package/dist/providers/LivePreview/index.js.map +1 -1
- package/dist/providers/Preferences/index.js +7 -2
- package/dist/providers/Preferences/index.js.map +1 -1
- package/dist/providers/RouteTransition/index.js +9 -9
- package/dist/providers/RouteTransition/index.js.map +1 -1
- package/dist/providers/Selection/index.js +7 -2
- package/dist/providers/Selection/index.js.map +1 -1
- package/dist/providers/ServerFunctions/index.js +25 -22
- package/dist/providers/ServerFunctions/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/index.js +10 -9
- package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
- package/dist/providers/TableColumns/buildColumnState/renderCell.js +4 -3
- package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
- package/dist/providers/TableColumns/types.js +17 -1
- package/dist/providers/TableColumns/types.js.map +1 -1
- package/dist/utilities/abortAndIgnore.js +4 -6
- package/dist/utilities/abortAndIgnore.js.map +1 -1
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js +2 -2
- package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
- package/dist/utilities/copyDataFromLocale.js +6 -2
- package/dist/utilities/copyDataFromLocale.js.map +1 -1
- package/dist/utilities/getDisplayedFieldValue.js +8 -8
- package/dist/utilities/getDisplayedFieldValue.js.map +1 -1
- package/dist/utilities/getFolderResultsComponentAndData.js +2 -1
- package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -1
- package/dist/utilities/handleFormStateLocking.js +2 -2
- package/dist/utilities/handleFormStateLocking.js.map +1 -1
- package/dist/utilities/hasSavePermission.js +5 -1
- package/dist/utilities/hasSavePermission.js.map +1 -1
- package/dist/utilities/isURLAllowed.js +6 -6
- package/dist/utilities/isURLAllowed.js.map +1 -1
- package/dist/utilities/renderTable.js +2 -1
- package/dist/utilities/renderTable.js.map +1 -1
- package/dist/utilities/schedulePublishHandler.js +3 -1
- package/dist/utilities/schedulePublishHandler.js.map +1 -1
- package/dist/utilities/upsertPreferences.js +1 -0
- package/dist/utilities/upsertPreferences.js.map +1 -1
- package/dist/views/Edit/index.js +7 -7
- package/dist/views/Edit/index.js.map +1 -1
- package/dist/views/List/ListHeader/index.js +6 -1
- package/dist/views/List/ListHeader/index.js.map +1 -1
- package/package.json +6 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/DocumentDrawer/types.ts"],"sourcesContent":["import type { Data, DefaultDocumentIDType, FormState, Operation } from 'payload'\nimport type React from 'react'\nimport type { HTMLAttributes } from 'react'\n\nimport type { Props as DrawerProps } from '../Drawer/types.js'\nimport type { DocumentDrawerContextProps } from './Provider.js'\n\nexport type DocumentDrawerProps = {\n readonly AfterFields?: React.ReactNode\n /**\n * The slug of the collection to which the document belongs.\n */\n readonly collectionSlug: string\n readonly disableActions?: boolean\n readonly drawerSlug?: string\n /**\n * The ID of the document to be edited.\n * When provided, will be fetched and displayed in the drawer.\n * If omitted, will render the \"create new\" view for the given collection.\n */\n readonly id?: DefaultDocumentIDType | null\n readonly initialData?: Data\n /**\n * @deprecated\n */\n readonly initialState?: FormState\n readonly overrideEntityVisibility?: boolean\n readonly redirectAfterCreate?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n} & Pick<DocumentDrawerContextProps, 'onDelete' | 'onDuplicate' | 'onSave'> &\n Pick<DrawerProps, 'Header'>\n\nexport type DocumentTogglerProps = {\n readonly children?: React.ReactNode\n readonly className?: string\n readonly collectionSlug: string\n readonly disabled?: boolean\n readonly drawerSlug?: string\n readonly onClick?: () => void\n readonly operation: Operation\n} & Readonly<HTMLAttributes<HTMLButtonElement>>\n\nexport type UseDocumentDrawerContext = {\n closeDrawer: () => void\n drawerDepth: number\n drawerSlug: string\n isDrawerOpen: boolean\n openDrawer: () => void\n toggleDrawer: () => void\n}\n\nexport type UseDocumentDrawer = (\n args: Pick<DocumentDrawerProps, 'collectionSlug' | 'id' | 'overrideEntityVisibility'>,\n) => [\n // drawer\n React.FC<\n {\n children?: React.ReactNode\n } & Omit<DocumentDrawerProps, 'collectionSlug' | 'operation'>\n >,\n // toggler\n React.FC<\n {\n children?: React.ReactNode\n } & Omit<DocumentTogglerProps, 'collectionSlug' | 'operation'>\n >,\n // context\n UseDocumentDrawerContext,\n]\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/DocumentDrawer/types.ts"],"sourcesContent":["import type { Data, DefaultDocumentIDType, FormState, Operation } from 'payload'\nimport type React from 'react'\nimport type { HTMLAttributes } from 'react'\n\nimport type { Props as DrawerProps } from '../Drawer/types.js'\nimport type { DocumentDrawerContextProps } from './Provider.js'\n\nexport type DocumentDrawerProps = {\n readonly AfterFields?: React.ReactNode\n /**\n * The slug of the collection to which the document belongs.\n */\n readonly collectionSlug: string\n readonly disableActions?: boolean\n readonly drawerSlug?: string\n /**\n * The ID of the document to be edited.\n * When provided, will be fetched and displayed in the drawer.\n * If omitted, will render the \"create new\" view for the given collection.\n */\n readonly id?: DefaultDocumentIDType | null\n readonly initialData?: Data\n /**\n * @deprecated\n */\n readonly initialState?: FormState\n readonly overrideEntityVisibility?: boolean\n readonly redirectAfterCreate?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n} & Pick<DocumentDrawerContextProps, 'onDelete' | 'onDuplicate' | 'onSave'> &\n Pick<DrawerProps, 'Header'>\n\nexport type DocumentTogglerProps = {\n readonly children?: React.ReactNode\n readonly className?: string\n readonly collectionSlug: string\n readonly disabled?: boolean\n readonly drawerSlug?: string\n readonly onClick?: () => void\n readonly operation: Operation\n} & Readonly<HTMLAttributes<HTMLButtonElement>>\n\nexport type UseDocumentDrawerContext = {\n closeDrawer: () => void\n drawerDepth: number\n drawerSlug: string\n isDrawerOpen: boolean\n openDrawer: () => void\n toggleDrawer: () => void\n}\n\nexport type UseDocumentDrawer = (\n args: Pick<DocumentDrawerProps, 'collectionSlug' | 'id' | 'overrideEntityVisibility'>,\n) => [\n // drawer\n React.FC<\n {\n children?: React.ReactNode\n } & Omit<DocumentDrawerProps, 'collectionSlug' | 'operation'>\n >,\n // toggler\n React.FC<\n {\n children?: React.ReactNode\n } & Omit<DocumentTogglerProps, 'collectionSlug' | 'operation'>\n >,\n // context\n UseDocumentDrawerContext,\n]\n"],"names":[],"mappings":"AASE;;GAEC,GAID;;;;GAIC,GAGD;;GAEC,GA6BH,WAiBC,CAdC,SAAS;CAMT,UAAU;CAMV,UAAU"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/elements/DraggableSortable/useDraggableSortable/index.tsx"],"sourcesContent":["'use client'\nimport type { UseDraggableArguments } from '@dnd-kit/core'\n\nimport { useSortable } from '@dnd-kit/sortable'\n\nimport type { UseDraggableSortableReturn } from './types.js'\n\nexport const useDraggableSortable = (props: UseDraggableArguments): UseDraggableSortableReturn => {\n const { id, disabled } = props\n\n const { attributes, isDragging, listeners, setNodeRef, transform, transition } = useSortable({\n id,\n disabled,\n transition: {\n duration: 250,\n easing: 'cubic-bezier(0, 0.2, 0.2, 1)',\n },\n })\n\n return {\n attributes: {\n ...attributes,\n style: {\n cursor: isDragging ? 'grabbing' : 'grab',\n transition,\n },\n },\n isDragging,\n listeners,\n setNodeRef,\n transform: transform && `translate3d(${transform.x}px, ${transform.y}px, 0)`, // translate3d is faster than translate in most browsers\n transition,\n }\n}\n"],"names":["useSortable","useDraggableSortable","props","id","disabled","attributes","isDragging","listeners","setNodeRef","transform","transition","duration","easing","style","cursor","x","y"],"mappings":"AAAA;AAGA,SAASA,WAAW,QAAQ,oBAAmB;AAI/C,OAAO,MAAMC,uBAAuB,CAACC;IACnC,MAAM,EAAEC,EAAE,EAAEC,QAAQ,EAAE,GAAGF;IAEzB,MAAM,EAAEG,UAAU,EAAEC,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGV,YAAY;QAC3FG;QACAC;QACAM,YAAY;YACVC,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,OAAO;QACLP,YAAY;YACV,GAAGA,UAAU;YACbQ,OAAO;gBACLC,QAAQR,aAAa,aAAa;gBAClCI;YACF;QACF;QACAJ;QACAC;QACAC;QACAC,WAAWA,aAAa,CAAC,YAAY,EAAEA,UAAUM,CAAC,CAAC,IAAI,EAAEN,UAAUO,CAAC,CAAC,MAAM,CAAC;
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/DraggableSortable/useDraggableSortable/index.tsx"],"sourcesContent":["'use client'\nimport type { UseDraggableArguments } from '@dnd-kit/core'\n\nimport { useSortable } from '@dnd-kit/sortable'\n\nimport type { UseDraggableSortableReturn } from './types.js'\n\nexport const useDraggableSortable = (props: UseDraggableArguments): UseDraggableSortableReturn => {\n const { id, disabled } = props\n\n const { attributes, isDragging, listeners, setNodeRef, transform, transition } = useSortable({\n id,\n disabled,\n transition: {\n duration: 250,\n easing: 'cubic-bezier(0, 0.2, 0.2, 1)',\n },\n })\n\n return {\n attributes: {\n ...attributes,\n style: {\n cursor: isDragging ? 'grabbing' : 'grab',\n transition,\n },\n },\n isDragging,\n listeners,\n setNodeRef,\n transform: transform && `translate3d(${transform.x}px, ${transform.y}px, 0)`, // translate3d is faster than translate in most browsers\n transition,\n }\n}\n"],"names":["useSortable","useDraggableSortable","props","id","disabled","attributes","isDragging","listeners","setNodeRef","transform","transition","duration","easing","style","cursor","x","y"],"mappings":"AAAA;AAGA,SAASA,WAAW,QAAQ,oBAAmB;AAI/C,OAAO,MAAMC,uBAAuB,CAACC;IACnC,MAAM,EAAEC,EAAE,EAAEC,QAAQ,EAAE,GAAGF;IAEzB,MAAM,EAAEG,UAAU,EAAEC,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAEC,SAAS,EAAEC,UAAU,EAAE,GAAGV,YAAY;QAC3FG;QACAC;QACAM,YAAY;YACVC,UAAU;YACVC,QAAQ;QACV;IACF;IAEA,OAAO;QACLP,YAAY;YACV,GAAGA,UAAU;YACbQ,OAAO;gBACLC,QAAQR,aAAa,aAAa;gBAClCI;YACF;QACF;QACAJ;QACAC;QACAC;QACAC,WAAWA,aAAa,CAAC,YAAY,EAAEA,UAAUM,CAAC,CAAC,IAAI,EAAEN,UAAUO,CAAC,CAAC,MAAM,CAAC;QAAE,wDAAwD;QACtIN;IACF;AACF,EAAC"}
|
|
@@ -92,7 +92,9 @@ export const Drawer = ({ slug, children, className, gutter = true, Header, hover
|
|
|
92
92
|
title: hoverTitle ? title : null,
|
|
93
93
|
children: title
|
|
94
94
|
}),
|
|
95
|
-
|
|
95
|
+
/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...
|
|
96
|
+
i.e. changing to a `div` element will fix the animation issue but will break accessibility
|
|
97
|
+
*/ /*#__PURE__*/ _jsx("button", {
|
|
96
98
|
"aria-label": t('general:close'),
|
|
97
99
|
className: `${baseClass}__header__close`,
|
|
98
100
|
id: `close-drawer__${slug}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Drawer/index.tsx"],"sourcesContent":["'use client'\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport React, { createContext, use, useCallback, useLayoutEffect, useState } from 'react'\n\nimport type { Props, TogglerProps } from './types.js'\n\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport './index.scss'\n\nconst baseClass = 'drawer'\n\nexport const drawerZBase = 100\n\nexport const formatDrawerSlug = ({ slug, depth }: { depth: number; slug: string }): string =>\n `drawer_${depth}_${slug}`\n\nexport { useDrawerSlug } from './useDrawerSlug.js'\n\nexport const DrawerToggler: React.FC<TogglerProps> = ({\n slug,\n children,\n className,\n disabled,\n onClick,\n ...rest\n}) => {\n const { openModal } = useModal()\n\n const handleClick = useCallback(\n (e) => {\n openModal(slug)\n if (typeof onClick === 'function') {\n onClick(e)\n }\n },\n [openModal, slug, onClick],\n )\n\n return (\n <button className={className} disabled={disabled} onClick={handleClick} type=\"button\" {...rest}>\n {children}\n </button>\n )\n}\n\nexport const Drawer: React.FC<Props> = ({\n slug,\n children,\n className,\n gutter = true,\n Header,\n hoverTitle,\n title,\n}) => {\n const { t } = useTranslation()\n const { closeModal, modalState } = useModal()\n const drawerDepth = useDrawerDepth()\n\n const isOpen = !!modalState[slug]?.isOpen\n\n const [animateIn, setAnimateIn] = useState(isOpen)\n\n useLayoutEffect(() => {\n setAnimateIn(isOpen)\n }, [isOpen])\n\n if (isOpen) {\n // IMPORTANT: do not render the drawer until it is explicitly open, this is to avoid large html trees especially when nesting drawers\n return (\n <DrawerDepthProvider>\n <Modal\n className={[\n className,\n baseClass,\n animateIn && `${baseClass}--is-open`,\n drawerDepth > 1 && `${baseClass}--nested`,\n ]\n .filter(Boolean)\n .join(' ')}\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n slug={slug}\n style={{\n zIndex: drawerZBase + drawerDepth,\n }}\n >\n {(!drawerDepth || drawerDepth === 1) && <div className={`${baseClass}__blur-bg`} />}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n />\n <div\n className={`${baseClass}__content`}\n style={{\n width: `calc(100% - (${drawerDepth} * var(--gutter-h)))`,\n }}\n >\n <div className={`${baseClass}__blur-bg-content`} />\n <Gutter className={`${baseClass}__content-children`} left={gutter} right={gutter}>\n {Header}\n {Header === undefined && (\n <div className={`${baseClass}__header`}>\n <h2 className={`${baseClass}__header__title`} title={hoverTitle ? title : null}>\n {title}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n )}\n {children}\n </Gutter>\n </div>\n </Modal>\n </DrawerDepthProvider>\n )\n }\n\n return null\n}\n\nexport const DrawerDepthContext = createContext(1)\n\nexport const DrawerDepthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const parentDepth = useDrawerDepth()\n const depth = parentDepth + 1\n\n return <DrawerDepthContext value={depth}>{children}</DrawerDepthContext>\n}\n\nexport const useDrawerDepth = (): number => use(DrawerDepthContext)\n"],"names":["Modal","useModal","React","createContext","use","useCallback","useLayoutEffect","useState","XIcon","useTranslation","Gutter","baseClass","drawerZBase","formatDrawerSlug","slug","depth","useDrawerSlug","DrawerToggler","children","className","disabled","onClick","rest","openModal","handleClick","e","button","type","Drawer","gutter","Header","hoverTitle","title","t","closeModal","modalState","drawerDepth","useDrawerDepth","isOpen","animateIn","setAnimateIn","DrawerDepthProvider","filter","Boolean","join","closeOnBlur","style","zIndex","div","aria-label","id","width","left","right","undefined","h2","DrawerDepthContext","parentDepth","value"],"mappings":"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
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Drawer/index.tsx"],"sourcesContent":["'use client'\nimport { Modal, useModal } from '@faceless-ui/modal'\nimport React, { createContext, use, useCallback, useLayoutEffect, useState } from 'react'\n\nimport type { Props, TogglerProps } from './types.js'\n\nimport { XIcon } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport './index.scss'\n\nconst baseClass = 'drawer'\n\nexport const drawerZBase = 100\n\nexport const formatDrawerSlug = ({ slug, depth }: { depth: number; slug: string }): string =>\n `drawer_${depth}_${slug}`\n\nexport { useDrawerSlug } from './useDrawerSlug.js'\n\nexport const DrawerToggler: React.FC<TogglerProps> = ({\n slug,\n children,\n className,\n disabled,\n onClick,\n ...rest\n}) => {\n const { openModal } = useModal()\n\n const handleClick = useCallback(\n (e) => {\n openModal(slug)\n if (typeof onClick === 'function') {\n onClick(e)\n }\n },\n [openModal, slug, onClick],\n )\n\n return (\n <button className={className} disabled={disabled} onClick={handleClick} type=\"button\" {...rest}>\n {children}\n </button>\n )\n}\n\nexport const Drawer: React.FC<Props> = ({\n slug,\n children,\n className,\n gutter = true,\n Header,\n hoverTitle,\n title,\n}) => {\n const { t } = useTranslation()\n const { closeModal, modalState } = useModal()\n const drawerDepth = useDrawerDepth()\n\n const isOpen = !!modalState[slug]?.isOpen\n\n const [animateIn, setAnimateIn] = useState(isOpen)\n\n useLayoutEffect(() => {\n setAnimateIn(isOpen)\n }, [isOpen])\n\n if (isOpen) {\n // IMPORTANT: do not render the drawer until it is explicitly open, this is to avoid large html trees especially when nesting drawers\n return (\n <DrawerDepthProvider>\n <Modal\n className={[\n className,\n baseClass,\n animateIn && `${baseClass}--is-open`,\n drawerDepth > 1 && `${baseClass}--nested`,\n ]\n .filter(Boolean)\n .join(' ')}\n // Fixes https://github.com/payloadcms/payload/issues/13778\n closeOnBlur={false}\n slug={slug}\n style={{\n zIndex: drawerZBase + drawerDepth,\n }}\n >\n {(!drawerDepth || drawerDepth === 1) && <div className={`${baseClass}__blur-bg`} />}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n />\n <div\n className={`${baseClass}__content`}\n style={{\n width: `calc(100% - (${drawerDepth} * var(--gutter-h)))`,\n }}\n >\n <div className={`${baseClass}__blur-bg-content`} />\n <Gutter className={`${baseClass}__content-children`} left={gutter} right={gutter}>\n {Header}\n {Header === undefined && (\n <div className={`${baseClass}__header`}>\n <h2 className={`${baseClass}__header__title`} title={hoverTitle ? title : null}>\n {title}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header__close`}\n id={`close-drawer__${slug}`}\n onClick={() => closeModal(slug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n )}\n {children}\n </Gutter>\n </div>\n </Modal>\n </DrawerDepthProvider>\n )\n }\n\n return null\n}\n\nexport const DrawerDepthContext = createContext(1)\n\nexport const DrawerDepthProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const parentDepth = useDrawerDepth()\n const depth = parentDepth + 1\n\n return <DrawerDepthContext value={depth}>{children}</DrawerDepthContext>\n}\n\nexport const useDrawerDepth = (): number => use(DrawerDepthContext)\n"],"names":["Modal","useModal","React","createContext","use","useCallback","useLayoutEffect","useState","XIcon","useTranslation","Gutter","baseClass","drawerZBase","formatDrawerSlug","slug","depth","useDrawerSlug","DrawerToggler","children","className","disabled","onClick","rest","openModal","handleClick","e","button","type","Drawer","gutter","Header","hoverTitle","title","t","closeModal","modalState","drawerDepth","useDrawerDepth","isOpen","animateIn","setAnimateIn","DrawerDepthProvider","filter","Boolean","join","closeOnBlur","style","zIndex","div","aria-label","id","width","left","right","undefined","h2","DrawerDepthContext","parentDepth","value"],"mappings":"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"}
|
|
@@ -92,7 +92,21 @@ const SaveDraftButton = ({ action, disabled })=>{
|
|
|
92
92
|
children: t('version:saveDraft')
|
|
93
93
|
});
|
|
94
94
|
};
|
|
95
|
-
|
|
95
|
+
/**
|
|
96
|
+
* The total count of selected items
|
|
97
|
+
*/ /**
|
|
98
|
+
* The slug of the drawer
|
|
99
|
+
*/ /**
|
|
100
|
+
* The IDs of the selected items
|
|
101
|
+
*/ /**
|
|
102
|
+
* The function to call after a successful action
|
|
103
|
+
*/ /**
|
|
104
|
+
* Whether all items are selected
|
|
105
|
+
*/ /**
|
|
106
|
+
* The fields that are selected to bulk edit
|
|
107
|
+
*/ /**
|
|
108
|
+
* The function to set the selected fields to bulk edit
|
|
109
|
+
*/ export const EditManyDrawerContent = (props)=>{
|
|
96
110
|
const { collection, collection: { fields, labels: { plural, singular } } = {}, count, drawerSlug, ids, onSuccess: onSuccessFromProps, selectAll, selectedFields, setSelectedFields, where } = props;
|
|
97
111
|
const { permissions, user } = useAuth();
|
|
98
112
|
const { code: locale } = useLocale();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/EditMany/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectType, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { combineWhereConstraints, mergeListSearchAndWhere, unflatten } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { OnFieldSelect } from '../FieldSelect/index.js'\nimport type { FieldOption } from '../FieldSelect/reduceFieldOptions.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { RenderField } from '../../forms/RenderFields/RenderField.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { OperationContext } from '../../providers/Operation/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { FieldSelect } from '../FieldSelect/index.js'\nimport './index.scss'\nimport '../../forms/RenderFields/index.scss'\nimport { baseClass, type EditManyProps } from './index.js'\n\nconst Submit: React.FC<{\n readonly action: string\n readonly disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit className={`${baseClass}__save`} disabled={disabled} onClick={save}>\n {t('general:save')}\n </FormSubmit>\n )\n}\n\nconst PublishButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'published',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit className={`${baseClass}__publish`} disabled={disabled} onClick={save}>\n {t('version:publishChanges')}\n </FormSubmit>\n )\n}\n\nconst SaveDraftButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit\n buttonStyle=\"secondary\"\n className={`${baseClass}__draft`}\n disabled={disabled}\n onClick={save}\n >\n {t('version:saveDraft')}\n </FormSubmit>\n )\n}\n\ntype EditManyDrawerContentProps = {\n /**\n * The total count of selected items\n */\n count?: number\n /**\n * The slug of the drawer\n */\n drawerSlug: string\n /**\n * The IDs of the selected items\n */\n ids?: (number | string)[]\n /**\n * The function to call after a successful action\n */\n onSuccess?: () => void\n /**\n * Whether all items are selected\n */\n selectAll?: boolean\n /**\n * The fields that are selected to bulk edit\n */\n selectedFields: FieldOption[]\n /**\n * The function to set the selected fields to bulk edit\n */\n setSelectedFields: (fields: FieldOption[]) => void\n where?: Where\n} & EditManyProps\n\nexport const EditManyDrawerContent: React.FC<EditManyDrawerContentProps> = (props) => {\n const {\n collection,\n collection: { fields, labels: { plural, singular } } = {},\n count,\n drawerSlug,\n ids,\n onSuccess: onSuccessFromProps,\n selectAll,\n selectedFields,\n setSelectedFields,\n where,\n } = props\n\n const { permissions, user } = useAuth()\n const { code: locale } = useLocale()\n\n const { closeModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const { getFormState } = useServerFunctions()\n\n const { i18n, t } = useTranslation()\n\n const [isInitializing, setIsInitializing] = useState(false)\n\n const router = useRouter()\n const abortFormStateRef = React.useRef<AbortController>(null)\n const { clearRouteCache } = useRouteCache()\n const collectionPermissions = permissions?.collections?.[collection.slug]\n const searchParams = useSearchParams()\n\n const select = useMemo<SelectType>(() => {\n return unflatten(\n selectedFields.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n )\n }, [selectedFields])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState, submitted }) => {\n const controller = handleAbortRef(abortFormStateRef)\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState: prevFormState,\n operation: 'update',\n schemaPath: collection.slug,\n select,\n signal: controller.signal,\n skipValidation: !submitted,\n })\n\n abortFormStateRef.current = null\n\n return state\n },\n [getFormState, collection, collectionPermissions, select],\n )\n\n useEffect(() => {\n const abortFormState = abortFormStateRef.current\n\n return () => {\n abortAndIgnore(abortFormState)\n }\n }, [])\n\n const queryString = useMemo((): string => {\n const whereConstraints: Where[] = []\n\n if (where) {\n whereConstraints.push(where)\n }\n\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n if (queryWithSearch) {\n whereConstraints.push(queryWithSearch)\n }\n\n if (selectAll) {\n // Match the current filter/search, or default to all docs\n whereConstraints.push(\n (parseSearchParams(searchParams)?.where as Where) || {\n id: {\n not_equals: '',\n },\n },\n )\n } else {\n // If we're not selecting all, we need to select specific docs\n whereConstraints.push({\n id: {\n in: ids || [],\n },\n })\n }\n\n return qs.stringify(\n {\n locale,\n select: {},\n where: combineWhereConstraints(whereConstraints),\n },\n { addQueryPrefix: true },\n )\n }, [collection, searchParams, selectAll, ids, locale, where])\n\n const onSuccess = () => {\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n clearRouteCache()\n closeModal(drawerSlug)\n\n if (typeof onSuccessFromProps === 'function') {\n onSuccessFromProps()\n }\n }\n\n const onFieldSelect = useCallback<OnFieldSelect>(\n async ({ dispatchFields, formState, selected }) => {\n setIsInitializing(true)\n\n setSelectedFields(selected || [])\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState,\n operation: 'update',\n schemaPath: collection.slug,\n select: unflatten(\n selected.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n ),\n skipValidation: true,\n })\n\n dispatchFields({\n type: 'UPDATE_MANY',\n formState: state,\n })\n\n setIsInitializing(false)\n },\n [getFormState, collection.slug, collectionPermissions, setSelectedFields],\n )\n\n return (\n <DocumentInfoProvider\n collectionSlug={collection.slug}\n currentEditor={user}\n hasPublishedDoc={false}\n id={null}\n initialData={{}}\n isLocked={false}\n lastUpdateTime={0}\n mostRecentVersionIsAutosaved={false}\n unpublishedVersionCount={0}\n versionCount={0}\n >\n <OperationContext value=\"update\">\n <div className={`${baseClass}__main`}>\n <div className={`${baseClass}__header`}>\n <h2 className={`${baseClass}__header__title`}>\n {t('general:editingLabel', {\n count,\n label: getTranslation(count > 1 ? plural : singular, i18n),\n })}\n </h2>\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header__close`}\n id={`close-drawer__${drawerSlug}`}\n onClick={() => closeModal(drawerSlug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n <Form\n className={`${baseClass}__form`}\n isInitializing={isInitializing}\n onChange={[onChange]}\n onSuccess={onSuccess}\n >\n <FieldSelect\n fields={fields}\n onChange={onFieldSelect}\n permissions={collectionPermissions.fields}\n />\n {selectedFields.length === 0 ? null : (\n <div className=\"render-fields\">\n {selectedFields.map((option, i) => {\n const {\n value: { field, fieldPermissions, path },\n } = option\n\n return (\n <RenderField\n clientFieldConfig={field}\n indexPath=\"\"\n key={`${path}-${i}`}\n parentPath=\"\"\n parentSchemaPath=\"\"\n path={path}\n permissions={fieldPermissions}\n />\n )\n })}\n </div>\n )}\n <div className={`${baseClass}__sidebar-wrap`}>\n <div className={`${baseClass}__sidebar`}>\n <div className={`${baseClass}__sidebar-sticky-wrap`}>\n <div className={`${baseClass}__document-actions`}>\n {collection?.versions?.drafts ? (\n <React.Fragment>\n <SaveDraftButton\n action={`${serverURL}${apiRoute}/${collection.slug}${queryString}&draft=true`}\n disabled={selectedFields.length === 0}\n />\n <PublishButton\n action={`${serverURL}${apiRoute}/${collection.slug}${queryString}&draft=true`}\n disabled={selectedFields.length === 0}\n />\n </React.Fragment>\n ) : (\n <Submit\n action={`${serverURL}${apiRoute}/${collection.slug}${queryString}`}\n disabled={selectedFields.length === 0}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n </Form>\n </div>\n </OperationContext>\n </DocumentInfoProvider>\n )\n}\n"],"names":["useModal","getTranslation","useRouter","useSearchParams","combineWhereConstraints","mergeListSearchAndWhere","unflatten","qs","React","useCallback","useEffect","useMemo","useState","useForm","Form","RenderField","FormSubmit","XIcon","useAuth","useConfig","DocumentInfoProvider","useLocale","OperationContext","useRouteCache","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","parseSearchParams","FieldSelect","baseClass","Submit","action","disabled","submit","t","save","method","skipValidation","className","onClick","PublishButton","overrides","_status","SaveDraftButton","buttonStyle","EditManyDrawerContent","props","collection","fields","labels","plural","singular","count","drawerSlug","ids","onSuccess","onSuccessFromProps","selectAll","selectedFields","setSelectedFields","where","permissions","user","code","locale","closeModal","config","routes","api","apiRoute","serverURL","getFormState","i18n","isInitializing","setIsInitializing","router","abortFormStateRef","useRef","clearRouteCache","collectionPermissions","collections","slug","searchParams","select","reduce","acc","option","value","path","onChange","formState","prevFormState","submitted","controller","state","collectionSlug","docPermissions","docPreferences","operation","schemaPath","signal","current","abortFormState","queryString","whereConstraints","push","queryWithSearch","collectionConfig","search","get","id","not_equals","in","stringify","addQueryPrefix","replace","page","undefined","onFieldSelect","dispatchFields","selected","type","currentEditor","hasPublishedDoc","initialData","isLocked","lastUpdateTime","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","div","h2","label","button","aria-label","length","map","i","field","fieldPermissions","clientFieldConfig","indexPath","parentPath","parentSchemaPath","versions","drafts","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/EditMany/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport type { SelectType, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { useRouter, useSearchParams } from 'next/navigation.js'\nimport { combineWhereConstraints, mergeListSearchAndWhere, unflatten } from 'payload/shared'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useMemo, useState } from 'react'\n\nimport type { FormProps } from '../../forms/Form/index.js'\nimport type { OnFieldSelect } from '../FieldSelect/index.js'\nimport type { FieldOption } from '../FieldSelect/reduceFieldOptions.js'\n\nimport { useForm } from '../../forms/Form/context.js'\nimport { Form } from '../../forms/Form/index.js'\nimport { RenderField } from '../../forms/RenderFields/RenderField.js'\nimport { FormSubmit } from '../../forms/Submit/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { OperationContext } from '../../providers/Operation/index.js'\nimport { useRouteCache } from '../../providers/RouteCache/index.js'\nimport { useServerFunctions } from '../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { abortAndIgnore, handleAbortRef } from '../../utilities/abortAndIgnore.js'\nimport { parseSearchParams } from '../../utilities/parseSearchParams.js'\nimport { FieldSelect } from '../FieldSelect/index.js'\nimport './index.scss'\nimport '../../forms/RenderFields/index.scss'\nimport { baseClass, type EditManyProps } from './index.js'\n\nconst Submit: React.FC<{\n readonly action: string\n readonly disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit className={`${baseClass}__save`} disabled={disabled} onClick={save}>\n {t('general:save')}\n </FormSubmit>\n )\n}\n\nconst PublishButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'published',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit className={`${baseClass}__publish`} disabled={disabled} onClick={save}>\n {t('version:publishChanges')}\n </FormSubmit>\n )\n}\n\nconst SaveDraftButton: React.FC<{\n action: string\n disabled: boolean\n}> = ({ action, disabled }) => {\n const { submit } = useForm()\n const { t } = useTranslation()\n\n const save = useCallback(() => {\n void submit({\n action,\n method: 'PATCH',\n overrides: {\n _status: 'draft',\n },\n skipValidation: true,\n })\n }, [action, submit])\n\n return (\n <FormSubmit\n buttonStyle=\"secondary\"\n className={`${baseClass}__draft`}\n disabled={disabled}\n onClick={save}\n >\n {t('version:saveDraft')}\n </FormSubmit>\n )\n}\n\ntype EditManyDrawerContentProps = {\n /**\n * The total count of selected items\n */\n count?: number\n /**\n * The slug of the drawer\n */\n drawerSlug: string\n /**\n * The IDs of the selected items\n */\n ids?: (number | string)[]\n /**\n * The function to call after a successful action\n */\n onSuccess?: () => void\n /**\n * Whether all items are selected\n */\n selectAll?: boolean\n /**\n * The fields that are selected to bulk edit\n */\n selectedFields: FieldOption[]\n /**\n * The function to set the selected fields to bulk edit\n */\n setSelectedFields: (fields: FieldOption[]) => void\n where?: Where\n} & EditManyProps\n\nexport const EditManyDrawerContent: React.FC<EditManyDrawerContentProps> = (props) => {\n const {\n collection,\n collection: { fields, labels: { plural, singular } } = {},\n count,\n drawerSlug,\n ids,\n onSuccess: onSuccessFromProps,\n selectAll,\n selectedFields,\n setSelectedFields,\n where,\n } = props\n\n const { permissions, user } = useAuth()\n const { code: locale } = useLocale()\n\n const { closeModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n serverURL,\n },\n } = useConfig()\n\n const { getFormState } = useServerFunctions()\n\n const { i18n, t } = useTranslation()\n\n const [isInitializing, setIsInitializing] = useState(false)\n\n const router = useRouter()\n const abortFormStateRef = React.useRef<AbortController>(null)\n const { clearRouteCache } = useRouteCache()\n const collectionPermissions = permissions?.collections?.[collection.slug]\n const searchParams = useSearchParams()\n\n const select = useMemo<SelectType>(() => {\n return unflatten(\n selectedFields.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n )\n }, [selectedFields])\n\n const onChange: FormProps['onChange'][0] = useCallback(\n async ({ formState: prevFormState, submitted }) => {\n const controller = handleAbortRef(abortFormStateRef)\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState: prevFormState,\n operation: 'update',\n schemaPath: collection.slug,\n select,\n signal: controller.signal,\n skipValidation: !submitted,\n })\n\n abortFormStateRef.current = null\n\n return state\n },\n [getFormState, collection, collectionPermissions, select],\n )\n\n useEffect(() => {\n const abortFormState = abortFormStateRef.current\n\n return () => {\n abortAndIgnore(abortFormState)\n }\n }, [])\n\n const queryString = useMemo((): string => {\n const whereConstraints: Where[] = []\n\n if (where) {\n whereConstraints.push(where)\n }\n\n const queryWithSearch = mergeListSearchAndWhere({\n collectionConfig: collection,\n search: searchParams.get('search'),\n })\n\n if (queryWithSearch) {\n whereConstraints.push(queryWithSearch)\n }\n\n if (selectAll) {\n // Match the current filter/search, or default to all docs\n whereConstraints.push(\n (parseSearchParams(searchParams)?.where as Where) || {\n id: {\n not_equals: '',\n },\n },\n )\n } else {\n // If we're not selecting all, we need to select specific docs\n whereConstraints.push({\n id: {\n in: ids || [],\n },\n })\n }\n\n return qs.stringify(\n {\n locale,\n select: {},\n where: combineWhereConstraints(whereConstraints),\n },\n { addQueryPrefix: true },\n )\n }, [collection, searchParams, selectAll, ids, locale, where])\n\n const onSuccess = () => {\n router.replace(\n qs.stringify(\n {\n ...parseSearchParams(searchParams),\n page: selectAll ? '1' : undefined,\n },\n { addQueryPrefix: true },\n ),\n )\n clearRouteCache()\n closeModal(drawerSlug)\n\n if (typeof onSuccessFromProps === 'function') {\n onSuccessFromProps()\n }\n }\n\n const onFieldSelect = useCallback<OnFieldSelect>(\n async ({ dispatchFields, formState, selected }) => {\n setIsInitializing(true)\n\n setSelectedFields(selected || [])\n\n const { state } = await getFormState({\n collectionSlug: collection.slug,\n docPermissions: collectionPermissions,\n docPreferences: null,\n formState,\n operation: 'update',\n schemaPath: collection.slug,\n select: unflatten(\n selected.reduce((acc, option) => {\n acc[option.value.path] = true\n return acc\n }, {} as SelectType),\n ),\n skipValidation: true,\n })\n\n dispatchFields({\n type: 'UPDATE_MANY',\n formState: state,\n })\n\n setIsInitializing(false)\n },\n [getFormState, collection.slug, collectionPermissions, setSelectedFields],\n )\n\n return (\n <DocumentInfoProvider\n collectionSlug={collection.slug}\n currentEditor={user}\n hasPublishedDoc={false}\n id={null}\n initialData={{}}\n isLocked={false}\n lastUpdateTime={0}\n mostRecentVersionIsAutosaved={false}\n unpublishedVersionCount={0}\n versionCount={0}\n >\n <OperationContext value=\"update\">\n <div className={`${baseClass}__main`}>\n <div className={`${baseClass}__header`}>\n <h2 className={`${baseClass}__header__title`}>\n {t('general:editingLabel', {\n count,\n label: getTranslation(count > 1 ? plural : singular, i18n),\n })}\n </h2>\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header__close`}\n id={`close-drawer__${drawerSlug}`}\n onClick={() => closeModal(drawerSlug)}\n type=\"button\"\n >\n <XIcon />\n </button>\n </div>\n <Form\n className={`${baseClass}__form`}\n isInitializing={isInitializing}\n onChange={[onChange]}\n onSuccess={onSuccess}\n >\n <FieldSelect\n fields={fields}\n onChange={onFieldSelect}\n permissions={collectionPermissions.fields}\n />\n {selectedFields.length === 0 ? null : (\n <div className=\"render-fields\">\n {selectedFields.map((option, i) => {\n const {\n value: { field, fieldPermissions, path },\n } = option\n\n return (\n <RenderField\n clientFieldConfig={field}\n indexPath=\"\"\n key={`${path}-${i}`}\n parentPath=\"\"\n parentSchemaPath=\"\"\n path={path}\n permissions={fieldPermissions}\n />\n )\n })}\n </div>\n )}\n <div className={`${baseClass}__sidebar-wrap`}>\n <div className={`${baseClass}__sidebar`}>\n <div className={`${baseClass}__sidebar-sticky-wrap`}>\n <div className={`${baseClass}__document-actions`}>\n {collection?.versions?.drafts ? (\n <React.Fragment>\n <SaveDraftButton\n action={`${serverURL}${apiRoute}/${collection.slug}${queryString}&draft=true`}\n disabled={selectedFields.length === 0}\n />\n <PublishButton\n action={`${serverURL}${apiRoute}/${collection.slug}${queryString}&draft=true`}\n disabled={selectedFields.length === 0}\n />\n </React.Fragment>\n ) : (\n <Submit\n action={`${serverURL}${apiRoute}/${collection.slug}${queryString}`}\n disabled={selectedFields.length === 0}\n />\n )}\n </div>\n </div>\n </div>\n </div>\n </Form>\n </div>\n </OperationContext>\n </DocumentInfoProvider>\n )\n}\n"],"names":["useModal","getTranslation","useRouter","useSearchParams","combineWhereConstraints","mergeListSearchAndWhere","unflatten","qs","React","useCallback","useEffect","useMemo","useState","useForm","Form","RenderField","FormSubmit","XIcon","useAuth","useConfig","DocumentInfoProvider","useLocale","OperationContext","useRouteCache","useServerFunctions","useTranslation","abortAndIgnore","handleAbortRef","parseSearchParams","FieldSelect","baseClass","Submit","action","disabled","submit","t","save","method","skipValidation","className","onClick","PublishButton","overrides","_status","SaveDraftButton","buttonStyle","EditManyDrawerContent","props","collection","fields","labels","plural","singular","count","drawerSlug","ids","onSuccess","onSuccessFromProps","selectAll","selectedFields","setSelectedFields","where","permissions","user","code","locale","closeModal","config","routes","api","apiRoute","serverURL","getFormState","i18n","isInitializing","setIsInitializing","router","abortFormStateRef","useRef","clearRouteCache","collectionPermissions","collections","slug","searchParams","select","reduce","acc","option","value","path","onChange","formState","prevFormState","submitted","controller","state","collectionSlug","docPermissions","docPreferences","operation","schemaPath","signal","current","abortFormState","queryString","whereConstraints","push","queryWithSearch","collectionConfig","search","get","id","not_equals","in","stringify","addQueryPrefix","replace","page","undefined","onFieldSelect","dispatchFields","selected","type","currentEditor","hasPublishedDoc","initialData","isLocked","lastUpdateTime","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","div","h2","label","button","aria-label","length","map","i","field","fieldPermissions","clientFieldConfig","indexPath","parentPath","parentSchemaPath","versions","drafts","Fragment"],"mappings":"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"}
|
|
@@ -21,7 +21,9 @@ export const EditMany = (props)=>{
|
|
|
21
21
|
selectAll: selectAll === SelectAllStatus.AllAvailable
|
|
22
22
|
});
|
|
23
23
|
};
|
|
24
|
-
export const EditMany_v4 =
|
|
24
|
+
export const EditMany_v4 = /**
|
|
25
|
+
* When multiple EditMany components are rendered on the page, this will differentiate them.
|
|
26
|
+
*/ ({ collection, count, ids, modalPrefix, onSuccess, selectAll, where })=>{
|
|
25
27
|
const { permissions } = useAuth();
|
|
26
28
|
const { openModal } = useModal();
|
|
27
29
|
const { t } = useTranslation();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/EditMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useState } from 'react'\n\nimport type { FieldOption } from '../FieldSelect/reduceFieldOptions.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\nimport { EditManyDrawerContent } from './DrawerContent.js'\nimport './index.scss'\n\nexport const baseClass = 'edit-many'\n\nexport type EditManyProps = {\n readonly collection: ClientCollectionConfig\n}\n\nexport const EditMany: React.FC<EditManyProps> = (props) => {\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n\n return (\n <EditMany_v4\n {...props}\n count={count}\n ids={selectedIDs}\n onSuccess={() => toggleAll()}\n selectAll={selectAll === SelectAllStatus.AllAvailable}\n />\n )\n}\n\nexport const EditMany_v4: React.FC<\n {\n count: number\n ids: (number | string)[]\n /**\n * When multiple EditMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n onSuccess?: () => void\n selectAll: boolean\n where?: Where\n } & Omit<EditManyProps, 'ids'>\n> = ({ collection, count, ids, modalPrefix, onSuccess, selectAll, where }) => {\n const { permissions } = useAuth()\n const { openModal } = useModal()\n\n const { t } = useTranslation()\n\n const [selectedFields, setSelectedFields] = useState<FieldOption[]>([])\n\n const collectionPermissions = permissions?.collections?.[collection.slug]\n\n const drawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}edit-${collection.slug}`\n\n if (count === 0 || !collectionPermissions?.update) {\n return null\n }\n\n return (\n <div className={[baseClass, `${baseClass}__toggle`].filter(Boolean).join(' ')}>\n <ListSelectionButton\n aria-label={t('general:edit')}\n onClick={() => {\n openModal(drawerSlug)\n setSelectedFields([])\n }}\n >\n {t('general:edit')}\n </ListSelectionButton>\n <EditDepthProvider>\n <Drawer Header={null} slug={drawerSlug}>\n <EditManyDrawerContent\n collection={collection}\n count={count}\n drawerSlug={drawerSlug}\n ids={ids}\n onSuccess={onSuccess}\n selectAll={selectAll}\n selectedFields={selectedFields}\n setSelectedFields={setSelectedFields}\n where={where}\n />\n </Drawer>\n </EditDepthProvider>\n </div>\n )\n}\n"],"names":["useModal","React","useState","useAuth","EditDepthProvider","SelectAllStatus","useSelection","useTranslation","Drawer","ListSelectionButton","EditManyDrawerContent","baseClass","EditMany","props","count","selectAll","selectedIDs","toggleAll","EditMany_v4","ids","onSuccess","AllAvailable","collection","modalPrefix","where","permissions","openModal","t","selectedFields","setSelectedFields","collectionPermissions","collections","slug","drawerSlug","update","div","className","filter","Boolean","join","aria-label","onClick","Header"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,OAAOC,SAASC,QAAQ,QAAQ,QAAO;AAIvC,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,iBAAiB,QAAQ,qCAAoC;AACtE,SAASC,eAAe,EAAEC,YAAY,QAAQ,qCAAoC;AAClF,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,mBAAmB,QAAQ,4BAA2B;AAC/D,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,OAAO,eAAc;AAErB,OAAO,MAAMC,YAAY,YAAW;AAMpC,OAAO,MAAMC,WAAoC,CAACC;IAChD,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGX;IAErD,qBACE,KAACY;QACE,GAAGL,KAAK;QACTC,OAAOA;QACPK,KAAKH;QACLI,WAAW,IAAMH;QACjBF,WAAWA,cAAcV,gBAAgBgB,YAAY;;AAG3D,EAAC;AAED,OAAO,MAAMH,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/EditMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React, { useState } from 'react'\n\nimport type { FieldOption } from '../FieldSelect/reduceFieldOptions.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\nimport { EditManyDrawerContent } from './DrawerContent.js'\nimport './index.scss'\n\nexport const baseClass = 'edit-many'\n\nexport type EditManyProps = {\n readonly collection: ClientCollectionConfig\n}\n\nexport const EditMany: React.FC<EditManyProps> = (props) => {\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n\n return (\n <EditMany_v4\n {...props}\n count={count}\n ids={selectedIDs}\n onSuccess={() => toggleAll()}\n selectAll={selectAll === SelectAllStatus.AllAvailable}\n />\n )\n}\n\nexport const EditMany_v4: React.FC<\n {\n count: number\n ids: (number | string)[]\n /**\n * When multiple EditMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n onSuccess?: () => void\n selectAll: boolean\n where?: Where\n } & Omit<EditManyProps, 'ids'>\n> = ({ collection, count, ids, modalPrefix, onSuccess, selectAll, where }) => {\n const { permissions } = useAuth()\n const { openModal } = useModal()\n\n const { t } = useTranslation()\n\n const [selectedFields, setSelectedFields] = useState<FieldOption[]>([])\n\n const collectionPermissions = permissions?.collections?.[collection.slug]\n\n const drawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}edit-${collection.slug}`\n\n if (count === 0 || !collectionPermissions?.update) {\n return null\n }\n\n return (\n <div className={[baseClass, `${baseClass}__toggle`].filter(Boolean).join(' ')}>\n <ListSelectionButton\n aria-label={t('general:edit')}\n onClick={() => {\n openModal(drawerSlug)\n setSelectedFields([])\n }}\n >\n {t('general:edit')}\n </ListSelectionButton>\n <EditDepthProvider>\n <Drawer Header={null} slug={drawerSlug}>\n <EditManyDrawerContent\n collection={collection}\n count={count}\n drawerSlug={drawerSlug}\n ids={ids}\n onSuccess={onSuccess}\n selectAll={selectAll}\n selectedFields={selectedFields}\n setSelectedFields={setSelectedFields}\n where={where}\n />\n </Drawer>\n </EditDepthProvider>\n </div>\n )\n}\n"],"names":["useModal","React","useState","useAuth","EditDepthProvider","SelectAllStatus","useSelection","useTranslation","Drawer","ListSelectionButton","EditManyDrawerContent","baseClass","EditMany","props","count","selectAll","selectedIDs","toggleAll","EditMany_v4","ids","onSuccess","AllAvailable","collection","modalPrefix","where","permissions","openModal","t","selectedFields","setSelectedFields","collectionPermissions","collections","slug","drawerSlug","update","div","className","filter","Boolean","join","aria-label","onClick","Header"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,OAAOC,SAASC,QAAQ,QAAQ,QAAO;AAIvC,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,iBAAiB,QAAQ,qCAAoC;AACtE,SAASC,eAAe,EAAEC,YAAY,QAAQ,qCAAoC;AAClF,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,mBAAmB,QAAQ,4BAA2B;AAC/D,SAASC,qBAAqB,QAAQ,qBAAoB;AAC1D,OAAO,eAAc;AAErB,OAAO,MAAMC,YAAY,YAAW;AAMpC,OAAO,MAAMC,WAAoC,CAACC;IAChD,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGX;IAErD,qBACE,KAACY;QACE,GAAGL,KAAK;QACTC,OAAOA;QACPK,KAAKH;QACLI,WAAW,IAAMH;QACjBF,WAAWA,cAAcV,gBAAgBgB,YAAY;;AAG3D,EAAC;AAED,OAAO,MAAMH,cAIT;;KAEC,GAMD,CAAC,EAAEI,UAAU,EAAER,KAAK,EAAEK,GAAG,EAAEI,WAAW,EAAEH,SAAS,EAAEL,SAAS,EAAES,KAAK,EAAE;IACvE,MAAM,EAAEC,WAAW,EAAE,GAAGtB;IACxB,MAAM,EAAEuB,SAAS,EAAE,GAAG1B;IAEtB,MAAM,EAAE2B,CAAC,EAAE,GAAGpB;IAEd,MAAM,CAACqB,gBAAgBC,kBAAkB,GAAG3B,SAAwB,EAAE;IAEtE,MAAM4B,wBAAwBL,aAAaM,aAAa,CAACT,WAAWU,IAAI,CAAC;IAEzE,MAAMC,aAAa,GAAGV,cAAc,GAAGA,YAAY,CAAC,CAAC,GAAG,GAAG,KAAK,EAAED,WAAWU,IAAI,EAAE;IAEnF,IAAIlB,UAAU,KAAK,CAACgB,uBAAuBI,QAAQ;QACjD,OAAO;IACT;IAEA,qBACE,MAACC;QAAIC,WAAW;YAACzB;YAAW,GAAGA,UAAU,QAAQ,CAAC;SAAC,CAAC0B,MAAM,CAACC,SAASC,IAAI,CAAC;;0BACvE,KAAC9B;gBACC+B,cAAYb,EAAE;gBACdc,SAAS;oBACPf,UAAUO;oBACVJ,kBAAkB,EAAE;gBACtB;0BAECF,EAAE;;0BAEL,KAACvB;0BACC,cAAA,KAACI;oBAAOkC,QAAQ;oBAAMV,MAAMC;8BAC1B,cAAA,KAACvB;wBACCY,YAAYA;wBACZR,OAAOA;wBACPmB,YAAYA;wBACZd,KAAKA;wBACLC,WAAWA;wBACXL,WAAWA;wBACXa,gBAAgBA;wBAChBC,mBAAmBA;wBACnBL,OAAOA;;;;;;AAMnB,EAAC"}
|
|
@@ -25,7 +25,14 @@ import './index.scss';
|
|
|
25
25
|
const baseClass = 'move-folder-drawer';
|
|
26
26
|
const baseModalSlug = 'move-folder-drawer';
|
|
27
27
|
const confirmModalSlug = `${baseModalSlug}-confirm-move`;
|
|
28
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Callback function to be called when the user confirms the move
|
|
30
|
+
*
|
|
31
|
+
* @param folderID - The ID of the folder to move the items to
|
|
32
|
+
*/ /**
|
|
33
|
+
* Set to `true` to skip the confirmation modal
|
|
34
|
+
* @default false
|
|
35
|
+
*/ export function MoveItemsToFolderDrawer(props) {
|
|
29
36
|
return /*#__PURE__*/ _jsx(Drawer, {
|
|
30
37
|
gutter: false,
|
|
31
38
|
Header: null,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/FolderView/Drawers/MoveToFolder/index.tsx"],"sourcesContent":["'use client'\n\nimport type { CollectionSlug, Document } from 'payload'\nimport type { FolderBreadcrumb, FolderOrDocument } from 'payload/shared'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { extractID } from 'payload/shared'\nimport React from 'react'\n\nimport { useAuth } from '../../../../providers/Auth/index.js'\nimport { FolderProvider, useFolder } from '../../../../providers/Folders/index.js'\nimport { useRouteCache } from '../../../../providers/RouteCache/index.js'\nimport { useServerFunctions } from '../../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { Button } from '../../../Button/index.js'\nimport { ConfirmationModal } from '../../../ConfirmationModal/index.js'\nimport { useDocumentDrawer } from '../../../DocumentDrawer/index.js'\nimport { Drawer } from '../../../Drawer/index.js'\nimport { DrawerActionHeader } from '../../../DrawerActionHeader/index.js'\nimport { DrawerContentContainer } from '../../../DrawerContentContainer/index.js'\nimport { ListCreateNewDocInFolderButton } from '../../../ListHeader/TitleActions/ListCreateNewDocInFolderButton.js'\nimport { LoadingOverlay } from '../../../Loading/index.js'\nimport { NoListResults } from '../../../NoListResults/index.js'\nimport { Translation } from '../../../Translation/index.js'\nimport { FolderBreadcrumbs } from '../../Breadcrumbs/index.js'\nimport { ColoredFolderIcon } from '../../ColoredFolderIcon/index.js'\nimport './index.scss'\n\nconst baseClass = 'move-folder-drawer'\nconst baseModalSlug = 'move-folder-drawer'\nconst confirmModalSlug = `${baseModalSlug}-confirm-move`\n\ntype ActionProps =\n | {\n readonly action: 'moveItemsToFolder'\n }\n | {\n readonly action: 'moveItemToFolder'\n readonly title: string\n }\nexport type MoveToFolderDrawerProps = {\n readonly drawerSlug: string\n readonly folderAssignedCollections: CollectionSlug[]\n readonly folderCollectionSlug: string\n readonly folderFieldName: string\n readonly fromFolderID?: number | string\n readonly fromFolderName?: string\n readonly itemsToMove: FolderOrDocument[]\n /**\n * Callback function to be called when the user confirms the move\n *\n * @param folderID - The ID of the folder to move the items to\n */\n readonly onConfirm: (args: {\n id: null | number | string\n name: null | string\n }) => Promise<void> | void\n readonly populateMoveToFolderDrawer?: (folderID: null | number | string) => Promise<void> | void\n /**\n * Set to `true` to skip the confirmation modal\n * @default false\n */\n readonly skipConfirmModal?: boolean\n} & ActionProps\n\nexport function MoveItemsToFolderDrawer(props: MoveToFolderDrawerProps) {\n return (\n <Drawer gutter={false} Header={null} slug={props.drawerSlug}>\n <LoadFolderData {...props} />\n </Drawer>\n )\n}\n\nfunction LoadFolderData(props: MoveToFolderDrawerProps) {\n const { permissions } = useAuth()\n const [subfolders, setSubfolders] = React.useState<FolderOrDocument[]>([])\n const [documents, setDocuments] = React.useState<FolderOrDocument[]>([])\n const [breadcrumbs, setBreadcrumbs] = React.useState<FolderBreadcrumb[]>([])\n const [FolderResultsComponent, setFolderResultsComponent] = React.useState<React.ReactNode>(null)\n const [hasLoaded, setHasLoaded] = React.useState(false)\n const [folderID, setFolderID] = React.useState<null | number | string>(props.fromFolderID || null)\n const hasLoadedRef = React.useRef(false)\n const { getFolderResultsComponentAndData } = useServerFunctions()\n\n const populateMoveToFolderDrawer = React.useCallback(\n async (folderIDToPopulate: null | number | string) => {\n try {\n const result = await getFolderResultsComponentAndData({\n browseByFolder: false,\n collectionsToDisplay: [props.folderCollectionSlug],\n displayAs: 'grid',\n // todo: should be able to pass undefined, empty array or null and get all folders. Need to look at API for this in the server function\n folderAssignedCollections: props.folderAssignedCollections,\n folderID: folderIDToPopulate,\n sort: 'name',\n })\n\n setBreadcrumbs(result.breadcrumbs || [])\n setSubfolders(result?.subfolders || [])\n setDocuments(result?.documents || [])\n setFolderResultsComponent(result.FolderResultsComponent || null)\n setFolderID(folderIDToPopulate)\n setHasLoaded(true)\n } catch (e) {\n setBreadcrumbs([])\n setSubfolders([])\n setDocuments([])\n }\n\n hasLoadedRef.current = true\n },\n [getFolderResultsComponentAndData, props.folderAssignedCollections, props.folderCollectionSlug],\n )\n\n React.useEffect(() => {\n if (!hasLoadedRef.current) {\n void populateMoveToFolderDrawer(props.fromFolderID)\n }\n }, [populateMoveToFolderDrawer, props.fromFolderID])\n\n if (!hasLoaded) {\n return <LoadingOverlay />\n }\n\n return (\n <FolderProvider\n allCollectionFolderSlugs={[props.folderCollectionSlug]}\n allowCreateCollectionSlugs={\n permissions.collections[props.folderCollectionSlug]?.create\n ? [props.folderCollectionSlug]\n : []\n }\n allowMultiSelection={false}\n breadcrumbs={breadcrumbs}\n documents={documents}\n folderFieldName={props.folderFieldName}\n folderID={folderID}\n FolderResultsComponent={FolderResultsComponent}\n key={folderID}\n onItemClick={async (item) => {\n await populateMoveToFolderDrawer(item.value.id)\n }}\n subfolders={subfolders}\n >\n <Content {...props} populateMoveToFolderDrawer={populateMoveToFolderDrawer} />\n </FolderProvider>\n )\n}\n\nfunction Content({\n drawerSlug,\n fromFolderID,\n fromFolderName,\n itemsToMove,\n onConfirm,\n populateMoveToFolderDrawer,\n skipConfirmModal,\n ...props\n}: MoveToFolderDrawerProps) {\n const { clearRouteCache } = useRouteCache()\n const { closeModal, isModalOpen, openModal } = useModal()\n const [count] = React.useState(() => itemsToMove.length)\n const [folderAddedToUnderlyingFolder, setFolderAddedToUnderlyingFolder] = React.useState(false)\n const { i18n, t } = useTranslation()\n const {\n breadcrumbs,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID,\n FolderResultsComponent,\n folderType,\n getSelectedItems,\n subfolders,\n } = useFolder()\n const [FolderDocumentDrawer, , { closeDrawer: closeFolderDrawer, openDrawer: openFolderDrawer }] =\n useDocumentDrawer({\n collectionSlug: folderCollectionSlug,\n })\n\n const getSelectedFolder = React.useCallback((): {\n id: null | number | string\n name: null | string\n } => {\n const selected = getSelectedItems()\n\n if (selected.length === 0) {\n const lastCrumb = breadcrumbs?.[breadcrumbs.length - 1]\n // use the breadcrumb\n return {\n id: lastCrumb?.id || null,\n name: lastCrumb?.name || null,\n }\n } else {\n // use the selected item\n return {\n id: selected[0].value.id,\n name: selected[0].value._folderOrDocumentTitle,\n }\n }\n }, [breadcrumbs, getSelectedItems])\n\n const onCreateSuccess = React.useCallback(\n async ({ collectionSlug, doc }: { collectionSlug: CollectionSlug; doc: Document }) => {\n await populateMoveToFolderDrawer(folderID)\n if (\n collectionSlug === folderCollectionSlug &&\n ((doc?.folder && fromFolderID === extractID(doc?.folder)) ||\n (!fromFolderID && !doc?.folder))\n ) {\n // if the folder we created is in the same folder as the one we are moving from\n // set variable so we can clear the route cache when we close the drawer\n setFolderAddedToUnderlyingFolder(true)\n }\n },\n [populateMoveToFolderDrawer, folderID, fromFolderID, folderCollectionSlug],\n )\n\n const onConfirmMove = React.useCallback(() => {\n if (typeof onConfirm === 'function') {\n void onConfirm(getSelectedFolder())\n }\n }, [getSelectedFolder, onConfirm])\n\n React.useEffect(() => {\n if (!isModalOpen(drawerSlug) && folderAddedToUnderlyingFolder) {\n // if we added a folder to the underlying folder, clear the route cache\n // so that the folder view will be reloaded with the new folder\n setFolderAddedToUnderlyingFolder(false)\n clearRouteCache()\n }\n }, [drawerSlug, isModalOpen, clearRouteCache, folderAddedToUnderlyingFolder])\n\n return (\n <div className={baseClass}>\n <DrawerActionHeader\n onCancel={() => {\n closeModal(drawerSlug)\n }}\n onSave={() => {\n if (skipConfirmModal) {\n onConfirmMove()\n } else {\n openModal(confirmModalSlug)\n }\n }}\n saveLabel={t('general:select')}\n title={\n <DrawerHeading\n action={props.action}\n count={count}\n fromFolderName={fromFolderID ? fromFolderName : undefined}\n title={props.action === 'moveItemToFolder' ? props.title : undefined}\n />\n }\n />\n\n <div className={`${baseClass}__breadcrumbs-section`}>\n <FolderBreadcrumbs\n breadcrumbs={[\n {\n id: null,\n name: (\n <span className={`${baseClass}__folder-breadcrumbs-root`}>\n <ColoredFolderIcon />\n {t('folder:folders')}\n </span>\n ),\n onClick: breadcrumbs.length\n ? () => {\n void populateMoveToFolderDrawer(null)\n }\n : undefined,\n },\n ...breadcrumbs.map((crumb, index) => ({\n id: crumb.id,\n name: crumb.name,\n onClick:\n index !== breadcrumbs.length - 1\n ? () => {\n void populateMoveToFolderDrawer(crumb.id)\n }\n : undefined,\n })),\n ]}\n />\n {subfolders.length > 0 && (\n <>\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__add-folder-button`}\n margin={false}\n onClick={() => {\n openFolderDrawer()\n }}\n >\n {t('fields:addLabel', {\n label: getTranslation(folderCollectionConfig.labels?.singular, i18n),\n })}\n </Button>\n <FolderDocumentDrawer\n initialData={{\n [folderFieldName]: folderID,\n folderType,\n }}\n onSave={(result) => {\n void onCreateSuccess({\n collectionSlug: folderCollectionConfig.slug,\n doc: result.doc,\n })\n closeFolderDrawer()\n }}\n redirectAfterCreate={false}\n />\n </>\n )}\n </div>\n\n <DrawerContentContainer className={`${baseClass}__body-section`}>\n {subfolders.length > 0 ? (\n FolderResultsComponent\n ) : (\n <NoListResults\n Actions={[\n <ListCreateNewDocInFolderButton\n buttonLabel={`${t('general:create')} ${getTranslation(folderCollectionConfig.labels?.singular, i18n).toLowerCase()}`}\n collectionSlugs={[folderCollectionSlug]}\n folderAssignedCollections={props.folderAssignedCollections}\n key=\"create-folder\"\n onCreateSuccess={onCreateSuccess}\n slugPrefix=\"create-new-folder-from-drawer--no-results\"\n />,\n ]}\n Message={\n <p>\n {i18n.t('general:noResults', {\n label: `${getTranslation(folderCollectionConfig.labels?.plural, i18n)}`,\n })}\n </p>\n }\n />\n )}\n </DrawerContentContainer>\n\n {!skipConfirmModal && (\n <ConfirmationModal\n body={\n <ConfirmationMessage\n action={props.action}\n count={count}\n fromFolderName={fromFolderName}\n title={props.action === 'moveItemToFolder' ? props.title : undefined}\n toFolderName={getSelectedFolder().name}\n />\n }\n confirmingLabel={t('general:moving')}\n confirmLabel={t('general:move')}\n heading={t('general:confirmMove')}\n modalSlug={confirmModalSlug}\n onConfirm={onConfirmMove}\n />\n )}\n </div>\n )\n}\n\nfunction DrawerHeading(\n props: { count?: number } & ActionProps & Pick<MoveToFolderDrawerProps, 'fromFolderName'>,\n): string {\n const { t } = useTranslation()\n\n switch (props.action) {\n case 'moveItemToFolder':\n // moving current folder from list view actions menu\n // or moving item from edit view\n if (props.fromFolderName) {\n // move from folder\n return t('folder:movingFromFolder', {\n fromFolder: props.fromFolderName,\n title: props.title,\n })\n } else {\n // move from root\n return t('folder:selectFolderForItem', {\n title: props.title,\n })\n }\n\n case 'moveItemsToFolder':\n if (props.fromFolderName) {\n // move from folder\n return t('folder:movingFromFolder', {\n fromFolder: props.fromFolderName,\n title: `${props.count} ${props.count > 1 ? t('general:items') : t('general:item')}`,\n })\n } else {\n // move from root\n return t('folder:selectFolderForItem', {\n title: `${props.count} ${props.count > 1 ? t('general:items') : t('general:item')}`,\n })\n }\n }\n}\n\nfunction ConfirmationMessage(\n props: { count?: number; toFolderName?: string } & ActionProps &\n Pick<MoveToFolderDrawerProps, 'fromFolderName'>,\n) {\n const { t } = useTranslation()\n\n switch (props.action) {\n case 'moveItemToFolder':\n // moving current folder from list view actions menu\n // or moving item from edit view\n if (props.toFolderName) {\n // move to destination\n // You are about to move {{title}} to {{toFolder}}. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n 2: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemToFolderConfirmation\"\n t={t}\n variables={{\n title: props.title,\n toFolder: props.toFolderName,\n }}\n />\n )\n } else {\n // move to root\n // You are about to move {{title}} to the root folder. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemToRootConfirmation\"\n t={t}\n variables={{\n title: props.title,\n }}\n />\n )\n }\n\n case 'moveItemsToFolder':\n // moving many (documents/folders) from list view\n if (props.toFolderName) {\n // move to destination\n // You are about to move {{count}} {{label}} to {{toFolder}}. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n 2: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemsToFolderConfirmation\"\n t={t}\n variables={{\n count: props.count,\n label: props.count > 1 ? t('general:items') : t('general:item'),\n toFolder: props.toFolderName,\n }}\n />\n )\n } else {\n // move to root\n // You are about to move {{count}} {{label}} to the root folder. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemsToRootConfirmation\"\n t={t}\n variables={{\n count: props.count,\n label: props.count > 1 ? t('general:items') : t('general:item'),\n }}\n />\n )\n }\n }\n}\n"],"names":["useModal","getTranslation","extractID","React","useAuth","FolderProvider","useFolder","useRouteCache","useServerFunctions","useTranslation","Button","ConfirmationModal","useDocumentDrawer","Drawer","DrawerActionHeader","DrawerContentContainer","ListCreateNewDocInFolderButton","LoadingOverlay","NoListResults","Translation","FolderBreadcrumbs","ColoredFolderIcon","baseClass","baseModalSlug","confirmModalSlug","MoveItemsToFolderDrawer","props","gutter","Header","slug","drawerSlug","LoadFolderData","permissions","subfolders","setSubfolders","useState","documents","setDocuments","breadcrumbs","setBreadcrumbs","FolderResultsComponent","setFolderResultsComponent","hasLoaded","setHasLoaded","folderID","setFolderID","fromFolderID","hasLoadedRef","useRef","getFolderResultsComponentAndData","populateMoveToFolderDrawer","useCallback","folderIDToPopulate","result","browseByFolder","collectionsToDisplay","folderCollectionSlug","displayAs","folderAssignedCollections","sort","e","current","useEffect","allCollectionFolderSlugs","allowCreateCollectionSlugs","collections","create","allowMultiSelection","folderFieldName","onItemClick","item","value","id","Content","fromFolderName","itemsToMove","onConfirm","skipConfirmModal","clearRouteCache","closeModal","isModalOpen","openModal","count","length","folderAddedToUnderlyingFolder","setFolderAddedToUnderlyingFolder","i18n","t","folderCollectionConfig","folderType","getSelectedItems","FolderDocumentDrawer","closeDrawer","closeFolderDrawer","openDrawer","openFolderDrawer","collectionSlug","getSelectedFolder","selected","lastCrumb","name","_folderOrDocumentTitle","onCreateSuccess","doc","folder","onConfirmMove","div","className","onCancel","onSave","saveLabel","title","DrawerHeading","action","undefined","span","onClick","map","crumb","index","buttonStyle","margin","label","labels","singular","initialData","redirectAfterCreate","Actions","buttonLabel","toLowerCase","collectionSlugs","slugPrefix","Message","p","plural","body","ConfirmationMessage","toFolderName","confirmingLabel","confirmLabel","heading","modalSlug","fromFolder","elements","children","strong","i18nKey","variables","toFolder"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/FolderView/Drawers/MoveToFolder/index.tsx"],"sourcesContent":["'use client'\n\nimport type { CollectionSlug, Document } from 'payload'\nimport type { FolderBreadcrumb, FolderOrDocument } from 'payload/shared'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { extractID } from 'payload/shared'\nimport React from 'react'\n\nimport { useAuth } from '../../../../providers/Auth/index.js'\nimport { FolderProvider, useFolder } from '../../../../providers/Folders/index.js'\nimport { useRouteCache } from '../../../../providers/RouteCache/index.js'\nimport { useServerFunctions } from '../../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { Button } from '../../../Button/index.js'\nimport { ConfirmationModal } from '../../../ConfirmationModal/index.js'\nimport { useDocumentDrawer } from '../../../DocumentDrawer/index.js'\nimport { Drawer } from '../../../Drawer/index.js'\nimport { DrawerActionHeader } from '../../../DrawerActionHeader/index.js'\nimport { DrawerContentContainer } from '../../../DrawerContentContainer/index.js'\nimport { ListCreateNewDocInFolderButton } from '../../../ListHeader/TitleActions/ListCreateNewDocInFolderButton.js'\nimport { LoadingOverlay } from '../../../Loading/index.js'\nimport { NoListResults } from '../../../NoListResults/index.js'\nimport { Translation } from '../../../Translation/index.js'\nimport { FolderBreadcrumbs } from '../../Breadcrumbs/index.js'\nimport { ColoredFolderIcon } from '../../ColoredFolderIcon/index.js'\nimport './index.scss'\n\nconst baseClass = 'move-folder-drawer'\nconst baseModalSlug = 'move-folder-drawer'\nconst confirmModalSlug = `${baseModalSlug}-confirm-move`\n\ntype ActionProps =\n | {\n readonly action: 'moveItemsToFolder'\n }\n | {\n readonly action: 'moveItemToFolder'\n readonly title: string\n }\nexport type MoveToFolderDrawerProps = {\n readonly drawerSlug: string\n readonly folderAssignedCollections: CollectionSlug[]\n readonly folderCollectionSlug: string\n readonly folderFieldName: string\n readonly fromFolderID?: number | string\n readonly fromFolderName?: string\n readonly itemsToMove: FolderOrDocument[]\n /**\n * Callback function to be called when the user confirms the move\n *\n * @param folderID - The ID of the folder to move the items to\n */\n readonly onConfirm: (args: {\n id: null | number | string\n name: null | string\n }) => Promise<void> | void\n readonly populateMoveToFolderDrawer?: (folderID: null | number | string) => Promise<void> | void\n /**\n * Set to `true` to skip the confirmation modal\n * @default false\n */\n readonly skipConfirmModal?: boolean\n} & ActionProps\n\nexport function MoveItemsToFolderDrawer(props: MoveToFolderDrawerProps) {\n return (\n <Drawer gutter={false} Header={null} slug={props.drawerSlug}>\n <LoadFolderData {...props} />\n </Drawer>\n )\n}\n\nfunction LoadFolderData(props: MoveToFolderDrawerProps) {\n const { permissions } = useAuth()\n const [subfolders, setSubfolders] = React.useState<FolderOrDocument[]>([])\n const [documents, setDocuments] = React.useState<FolderOrDocument[]>([])\n const [breadcrumbs, setBreadcrumbs] = React.useState<FolderBreadcrumb[]>([])\n const [FolderResultsComponent, setFolderResultsComponent] = React.useState<React.ReactNode>(null)\n const [hasLoaded, setHasLoaded] = React.useState(false)\n const [folderID, setFolderID] = React.useState<null | number | string>(props.fromFolderID || null)\n const hasLoadedRef = React.useRef(false)\n const { getFolderResultsComponentAndData } = useServerFunctions()\n\n const populateMoveToFolderDrawer = React.useCallback(\n async (folderIDToPopulate: null | number | string) => {\n try {\n const result = await getFolderResultsComponentAndData({\n browseByFolder: false,\n collectionsToDisplay: [props.folderCollectionSlug],\n displayAs: 'grid',\n // todo: should be able to pass undefined, empty array or null and get all folders. Need to look at API for this in the server function\n folderAssignedCollections: props.folderAssignedCollections,\n folderID: folderIDToPopulate,\n sort: 'name',\n })\n\n setBreadcrumbs(result.breadcrumbs || [])\n setSubfolders(result?.subfolders || [])\n setDocuments(result?.documents || [])\n setFolderResultsComponent(result.FolderResultsComponent || null)\n setFolderID(folderIDToPopulate)\n setHasLoaded(true)\n } catch (e) {\n setBreadcrumbs([])\n setSubfolders([])\n setDocuments([])\n }\n\n hasLoadedRef.current = true\n },\n [getFolderResultsComponentAndData, props.folderAssignedCollections, props.folderCollectionSlug],\n )\n\n React.useEffect(() => {\n if (!hasLoadedRef.current) {\n void populateMoveToFolderDrawer(props.fromFolderID)\n }\n }, [populateMoveToFolderDrawer, props.fromFolderID])\n\n if (!hasLoaded) {\n return <LoadingOverlay />\n }\n\n return (\n <FolderProvider\n allCollectionFolderSlugs={[props.folderCollectionSlug]}\n allowCreateCollectionSlugs={\n permissions.collections[props.folderCollectionSlug]?.create\n ? [props.folderCollectionSlug]\n : []\n }\n allowMultiSelection={false}\n breadcrumbs={breadcrumbs}\n documents={documents}\n folderFieldName={props.folderFieldName}\n folderID={folderID}\n FolderResultsComponent={FolderResultsComponent}\n key={folderID}\n onItemClick={async (item) => {\n await populateMoveToFolderDrawer(item.value.id)\n }}\n subfolders={subfolders}\n >\n <Content {...props} populateMoveToFolderDrawer={populateMoveToFolderDrawer} />\n </FolderProvider>\n )\n}\n\nfunction Content({\n drawerSlug,\n fromFolderID,\n fromFolderName,\n itemsToMove,\n onConfirm,\n populateMoveToFolderDrawer,\n skipConfirmModal,\n ...props\n}: MoveToFolderDrawerProps) {\n const { clearRouteCache } = useRouteCache()\n const { closeModal, isModalOpen, openModal } = useModal()\n const [count] = React.useState(() => itemsToMove.length)\n const [folderAddedToUnderlyingFolder, setFolderAddedToUnderlyingFolder] = React.useState(false)\n const { i18n, t } = useTranslation()\n const {\n breadcrumbs,\n folderCollectionConfig,\n folderCollectionSlug,\n folderFieldName,\n folderID,\n FolderResultsComponent,\n folderType,\n getSelectedItems,\n subfolders,\n } = useFolder()\n const [FolderDocumentDrawer, , { closeDrawer: closeFolderDrawer, openDrawer: openFolderDrawer }] =\n useDocumentDrawer({\n collectionSlug: folderCollectionSlug,\n })\n\n const getSelectedFolder = React.useCallback((): {\n id: null | number | string\n name: null | string\n } => {\n const selected = getSelectedItems()\n\n if (selected.length === 0) {\n const lastCrumb = breadcrumbs?.[breadcrumbs.length - 1]\n // use the breadcrumb\n return {\n id: lastCrumb?.id || null,\n name: lastCrumb?.name || null,\n }\n } else {\n // use the selected item\n return {\n id: selected[0].value.id,\n name: selected[0].value._folderOrDocumentTitle,\n }\n }\n }, [breadcrumbs, getSelectedItems])\n\n const onCreateSuccess = React.useCallback(\n async ({ collectionSlug, doc }: { collectionSlug: CollectionSlug; doc: Document }) => {\n await populateMoveToFolderDrawer(folderID)\n if (\n collectionSlug === folderCollectionSlug &&\n ((doc?.folder && fromFolderID === extractID(doc?.folder)) ||\n (!fromFolderID && !doc?.folder))\n ) {\n // if the folder we created is in the same folder as the one we are moving from\n // set variable so we can clear the route cache when we close the drawer\n setFolderAddedToUnderlyingFolder(true)\n }\n },\n [populateMoveToFolderDrawer, folderID, fromFolderID, folderCollectionSlug],\n )\n\n const onConfirmMove = React.useCallback(() => {\n if (typeof onConfirm === 'function') {\n void onConfirm(getSelectedFolder())\n }\n }, [getSelectedFolder, onConfirm])\n\n React.useEffect(() => {\n if (!isModalOpen(drawerSlug) && folderAddedToUnderlyingFolder) {\n // if we added a folder to the underlying folder, clear the route cache\n // so that the folder view will be reloaded with the new folder\n setFolderAddedToUnderlyingFolder(false)\n clearRouteCache()\n }\n }, [drawerSlug, isModalOpen, clearRouteCache, folderAddedToUnderlyingFolder])\n\n return (\n <div className={baseClass}>\n <DrawerActionHeader\n onCancel={() => {\n closeModal(drawerSlug)\n }}\n onSave={() => {\n if (skipConfirmModal) {\n onConfirmMove()\n } else {\n openModal(confirmModalSlug)\n }\n }}\n saveLabel={t('general:select')}\n title={\n <DrawerHeading\n action={props.action}\n count={count}\n fromFolderName={fromFolderID ? fromFolderName : undefined}\n title={props.action === 'moveItemToFolder' ? props.title : undefined}\n />\n }\n />\n\n <div className={`${baseClass}__breadcrumbs-section`}>\n <FolderBreadcrumbs\n breadcrumbs={[\n {\n id: null,\n name: (\n <span className={`${baseClass}__folder-breadcrumbs-root`}>\n <ColoredFolderIcon />\n {t('folder:folders')}\n </span>\n ),\n onClick: breadcrumbs.length\n ? () => {\n void populateMoveToFolderDrawer(null)\n }\n : undefined,\n },\n ...breadcrumbs.map((crumb, index) => ({\n id: crumb.id,\n name: crumb.name,\n onClick:\n index !== breadcrumbs.length - 1\n ? () => {\n void populateMoveToFolderDrawer(crumb.id)\n }\n : undefined,\n })),\n ]}\n />\n {subfolders.length > 0 && (\n <>\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__add-folder-button`}\n margin={false}\n onClick={() => {\n openFolderDrawer()\n }}\n >\n {t('fields:addLabel', {\n label: getTranslation(folderCollectionConfig.labels?.singular, i18n),\n })}\n </Button>\n <FolderDocumentDrawer\n initialData={{\n [folderFieldName]: folderID,\n folderType,\n }}\n onSave={(result) => {\n void onCreateSuccess({\n collectionSlug: folderCollectionConfig.slug,\n doc: result.doc,\n })\n closeFolderDrawer()\n }}\n redirectAfterCreate={false}\n />\n </>\n )}\n </div>\n\n <DrawerContentContainer className={`${baseClass}__body-section`}>\n {subfolders.length > 0 ? (\n FolderResultsComponent\n ) : (\n <NoListResults\n Actions={[\n <ListCreateNewDocInFolderButton\n buttonLabel={`${t('general:create')} ${getTranslation(folderCollectionConfig.labels?.singular, i18n).toLowerCase()}`}\n collectionSlugs={[folderCollectionSlug]}\n folderAssignedCollections={props.folderAssignedCollections}\n key=\"create-folder\"\n onCreateSuccess={onCreateSuccess}\n slugPrefix=\"create-new-folder-from-drawer--no-results\"\n />,\n ]}\n Message={\n <p>\n {i18n.t('general:noResults', {\n label: `${getTranslation(folderCollectionConfig.labels?.plural, i18n)}`,\n })}\n </p>\n }\n />\n )}\n </DrawerContentContainer>\n\n {!skipConfirmModal && (\n <ConfirmationModal\n body={\n <ConfirmationMessage\n action={props.action}\n count={count}\n fromFolderName={fromFolderName}\n title={props.action === 'moveItemToFolder' ? props.title : undefined}\n toFolderName={getSelectedFolder().name}\n />\n }\n confirmingLabel={t('general:moving')}\n confirmLabel={t('general:move')}\n heading={t('general:confirmMove')}\n modalSlug={confirmModalSlug}\n onConfirm={onConfirmMove}\n />\n )}\n </div>\n )\n}\n\nfunction DrawerHeading(\n props: { count?: number } & ActionProps & Pick<MoveToFolderDrawerProps, 'fromFolderName'>,\n): string {\n const { t } = useTranslation()\n\n switch (props.action) {\n case 'moveItemToFolder':\n // moving current folder from list view actions menu\n // or moving item from edit view\n if (props.fromFolderName) {\n // move from folder\n return t('folder:movingFromFolder', {\n fromFolder: props.fromFolderName,\n title: props.title,\n })\n } else {\n // move from root\n return t('folder:selectFolderForItem', {\n title: props.title,\n })\n }\n\n case 'moveItemsToFolder':\n if (props.fromFolderName) {\n // move from folder\n return t('folder:movingFromFolder', {\n fromFolder: props.fromFolderName,\n title: `${props.count} ${props.count > 1 ? t('general:items') : t('general:item')}`,\n })\n } else {\n // move from root\n return t('folder:selectFolderForItem', {\n title: `${props.count} ${props.count > 1 ? t('general:items') : t('general:item')}`,\n })\n }\n }\n}\n\nfunction ConfirmationMessage(\n props: { count?: number; toFolderName?: string } & ActionProps &\n Pick<MoveToFolderDrawerProps, 'fromFolderName'>,\n) {\n const { t } = useTranslation()\n\n switch (props.action) {\n case 'moveItemToFolder':\n // moving current folder from list view actions menu\n // or moving item from edit view\n if (props.toFolderName) {\n // move to destination\n // You are about to move {{title}} to {{toFolder}}. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n 2: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemToFolderConfirmation\"\n t={t}\n variables={{\n title: props.title,\n toFolder: props.toFolderName,\n }}\n />\n )\n } else {\n // move to root\n // You are about to move {{title}} to the root folder. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemToRootConfirmation\"\n t={t}\n variables={{\n title: props.title,\n }}\n />\n )\n }\n\n case 'moveItemsToFolder':\n // moving many (documents/folders) from list view\n if (props.toFolderName) {\n // move to destination\n // You are about to move {{count}} {{label}} to {{toFolder}}. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n 2: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemsToFolderConfirmation\"\n t={t}\n variables={{\n count: props.count,\n label: props.count > 1 ? t('general:items') : t('general:item'),\n toFolder: props.toFolderName,\n }}\n />\n )\n } else {\n // move to root\n // You are about to move {{count}} {{label}} to the root folder. Are you sure?\n return (\n <Translation\n elements={{\n 1: ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"folder:moveItemsToRootConfirmation\"\n t={t}\n variables={{\n count: props.count,\n label: props.count > 1 ? t('general:items') : t('general:item'),\n }}\n />\n )\n }\n }\n}\n"],"names":["useModal","getTranslation","extractID","React","useAuth","FolderProvider","useFolder","useRouteCache","useServerFunctions","useTranslation","Button","ConfirmationModal","useDocumentDrawer","Drawer","DrawerActionHeader","DrawerContentContainer","ListCreateNewDocInFolderButton","LoadingOverlay","NoListResults","Translation","FolderBreadcrumbs","ColoredFolderIcon","baseClass","baseModalSlug","confirmModalSlug","MoveItemsToFolderDrawer","props","gutter","Header","slug","drawerSlug","LoadFolderData","permissions","subfolders","setSubfolders","useState","documents","setDocuments","breadcrumbs","setBreadcrumbs","FolderResultsComponent","setFolderResultsComponent","hasLoaded","setHasLoaded","folderID","setFolderID","fromFolderID","hasLoadedRef","useRef","getFolderResultsComponentAndData","populateMoveToFolderDrawer","useCallback","folderIDToPopulate","result","browseByFolder","collectionsToDisplay","folderCollectionSlug","displayAs","folderAssignedCollections","sort","e","current","useEffect","allCollectionFolderSlugs","allowCreateCollectionSlugs","collections","create","allowMultiSelection","folderFieldName","onItemClick","item","value","id","Content","fromFolderName","itemsToMove","onConfirm","skipConfirmModal","clearRouteCache","closeModal","isModalOpen","openModal","count","length","folderAddedToUnderlyingFolder","setFolderAddedToUnderlyingFolder","i18n","t","folderCollectionConfig","folderType","getSelectedItems","FolderDocumentDrawer","closeDrawer","closeFolderDrawer","openDrawer","openFolderDrawer","collectionSlug","getSelectedFolder","selected","lastCrumb","name","_folderOrDocumentTitle","onCreateSuccess","doc","folder","onConfirmMove","div","className","onCancel","onSave","saveLabel","title","DrawerHeading","action","undefined","span","onClick","map","crumb","index","buttonStyle","margin","label","labels","singular","initialData","redirectAfterCreate","Actions","buttonLabel","toLowerCase","collectionSlugs","slugPrefix","Message","p","plural","body","ConfirmationMessage","toFolderName","confirmingLabel","confirmLabel","heading","modalSlug","fromFolder","elements","children","strong","i18nKey","variables","toFolder"],"mappings":"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"}
|
|
@@ -131,6 +131,7 @@ function AssignedCollections({ folderType }) {
|
|
|
131
131
|
}, label))
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
|
+
// todo: possibly remove
|
|
134
135
|
export function ContextFolderFileCard({ type, className, index, item }) {
|
|
135
136
|
const { checkIfItemIsDisabled, focusedRowIndex, onItemClick, onItemKeyPress, selectedItemKeys } = useFolder();
|
|
136
137
|
const isSelected = selectedItemKeys.has(item.itemKey);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/elements/FolderView/FolderFileCard/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FolderOrDocument } from 'payload/shared'\n\nimport { useDroppable } from '@dnd-kit/core'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { DocumentIcon } from '../../../icons/Document/index.js'\nimport { ThreeDotsIcon } from '../../../icons/ThreeDots/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useFolder } from '../../../providers/Folders/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Popup } from '../../Popup/index.js'\nimport { Thumbnail } from '../../Thumbnail/index.js'\nimport { ColoredFolderIcon } from '../ColoredFolderIcon/index.js'\nimport { DraggableWithClick } from '../DraggableWithClick/index.js'\nimport './index.scss'\n\nconst baseClass = 'folder-file-card'\n\ntype Props = {\n readonly className?: string\n readonly disabled?: boolean\n readonly folderType?: string[]\n readonly id: number | string\n readonly isDeleting?: boolean\n readonly isFocused?: boolean\n readonly isSelected?: boolean\n readonly itemKey: string\n readonly onClick?: (e: React.MouseEvent) => void\n readonly onKeyDown?: (e: React.KeyboardEvent) => void\n readonly PopupActions?: React.ReactNode\n readonly previewUrl?: string\n readonly selectedCount?: number\n readonly title: string\n readonly type: 'file' | 'folder'\n}\nexport function FolderFileCard({\n id,\n type,\n className = '',\n disabled = false,\n folderType,\n isDeleting = false,\n isFocused = false,\n isSelected = false,\n itemKey,\n onClick,\n onKeyDown,\n PopupActions,\n previewUrl,\n selectedCount = 0,\n title,\n}: Props) {\n const disableDrop = !id || disabled || type !== 'folder'\n const { isOver, setNodeRef } = useDroppable({\n id: itemKey,\n data: {\n id,\n type,\n folderType,\n },\n disabled: disableDrop,\n })\n const ref = React.useRef(null)\n\n React.useEffect(() => {\n const copyOfRef = ref.current\n if (isFocused && ref.current) {\n ref.current.focus()\n } else if (!isFocused && ref.current) {\n ref.current.blur()\n }\n\n return () => {\n if (copyOfRef) {\n copyOfRef.blur()\n }\n }\n }, [isFocused])\n\n return (\n <DraggableWithClick\n className={[\n baseClass,\n className,\n isSelected && `${baseClass}--selected`,\n disabled && `${baseClass}--disabled`,\n isDeleting && `${baseClass}--deleting`,\n isFocused && `${baseClass}--focused`,\n isOver && `${baseClass}--over`,\n `${baseClass}--${type}`,\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={disabled || (!onClick && !onKeyDown)}\n key={itemKey}\n onClick={onClick}\n onKeyDown={onKeyDown}\n ref={ref}\n >\n {!disableDrop ? <div className={`${baseClass}__drop-area`} ref={setNodeRef} /> : null}\n\n {type === 'file' ? (\n <div className={`${baseClass}__preview-area`}>\n {previewUrl ? <Thumbnail fileSrc={previewUrl} /> : <DocumentIcon />}\n </div>\n ) : null}\n\n <div className={`${baseClass}__titlebar-area`}>\n <div className={`${baseClass}__icon-wrap`}>\n {type === 'file' ? <DocumentIcon /> : <ColoredFolderIcon />}\n </div>\n <div className={`${baseClass}__titlebar-labels`}>\n <p className={`${baseClass}__name`} title={title}>\n <span>{title}</span>\n </p>\n {folderType && folderType.length > 0 ? (\n <AssignedCollections folderType={folderType} />\n ) : null}\n </div>\n {PopupActions ? (\n <Popup\n button={<ThreeDotsIcon />}\n disabled={selectedCount > 1 || (selectedCount === 1 && !isSelected)}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n {PopupActions}\n </Popup>\n ) : null}\n </div>\n </DraggableWithClick>\n )\n}\n\nfunction AssignedCollections({ folderType }: { folderType: string[] }) {\n const { config } = useConfig()\n const { i18n } = useTranslation()\n\n const collectionsDisplayText = React.useMemo(() => {\n return folderType.reduce((acc, collection) => {\n const collectionConfig = config.collections?.find((c) => c.slug === collection)\n if (collectionConfig) {\n return [...acc, getTranslation(collectionConfig.labels.plural, i18n)]\n }\n return acc\n }, [])\n }, [folderType, config.collections, i18n])\n\n return (\n <p className={`${baseClass}__assigned-collections`}>\n {collectionsDisplayText.map((label, index) => (\n <span key={label}>\n {label}\n {index < folderType.length - 1 ? ', ' : ''}\n </span>\n ))}\n </p>\n )\n}\n\ntype ContextCardProps = {\n readonly className?: string\n readonly index: number // todo: possibly remove\n readonly item: FolderOrDocument\n readonly type: 'file' | 'folder'\n}\nexport function ContextFolderFileCard({ type, className, index, item }: ContextCardProps) {\n const { checkIfItemIsDisabled, focusedRowIndex, onItemClick, onItemKeyPress, selectedItemKeys } =\n useFolder()\n const isSelected = selectedItemKeys.has(item.itemKey)\n const isDisabled = checkIfItemIsDisabled(item)\n\n return (\n <FolderFileCard\n className={className}\n disabled={isDisabled}\n folderType={item.value.folderType || []}\n id={item.value.id}\n isFocused={focusedRowIndex === index}\n isSelected={isSelected}\n itemKey={item.itemKey}\n onClick={(event) => {\n void onItemClick({ event, index, item })\n }}\n onKeyDown={(event) => {\n void onItemKeyPress({ event, index, item })\n }}\n previewUrl={item.value.url}\n title={item.value._folderOrDocumentTitle}\n type={type}\n />\n )\n}\n"],"names":["useDroppable","getTranslation","React","DocumentIcon","ThreeDotsIcon","useConfig","useFolder","useTranslation","Popup","Thumbnail","ColoredFolderIcon","DraggableWithClick","baseClass","FolderFileCard","id","type","className","disabled","folderType","isDeleting","isFocused","isSelected","itemKey","onClick","onKeyDown","PopupActions","previewUrl","selectedCount","title","disableDrop","isOver","setNodeRef","data","ref","useRef","useEffect","copyOfRef","current","focus","blur","filter","Boolean","join","div","fileSrc","p","span","length","AssignedCollections","button","horizontalAlign","size","verticalAlign","config","i18n","collectionsDisplayText","useMemo","reduce","acc","collection","collectionConfig","collections","find","c","slug","labels","plural","map","label","index","ContextFolderFileCard","item","checkIfItemIsDisabled","focusedRowIndex","onItemClick","onItemKeyPress","selectedItemKeys","has","isDisabled","value","event","url","_folderOrDocumentTitle"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/FolderView/FolderFileCard/index.tsx"],"sourcesContent":["'use client'\n\nimport type { FolderOrDocument } from 'payload/shared'\n\nimport { useDroppable } from '@dnd-kit/core'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport { DocumentIcon } from '../../../icons/Document/index.js'\nimport { ThreeDotsIcon } from '../../../icons/ThreeDots/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useFolder } from '../../../providers/Folders/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Popup } from '../../Popup/index.js'\nimport { Thumbnail } from '../../Thumbnail/index.js'\nimport { ColoredFolderIcon } from '../ColoredFolderIcon/index.js'\nimport { DraggableWithClick } from '../DraggableWithClick/index.js'\nimport './index.scss'\n\nconst baseClass = 'folder-file-card'\n\ntype Props = {\n readonly className?: string\n readonly disabled?: boolean\n readonly folderType?: string[]\n readonly id: number | string\n readonly isDeleting?: boolean\n readonly isFocused?: boolean\n readonly isSelected?: boolean\n readonly itemKey: string\n readonly onClick?: (e: React.MouseEvent) => void\n readonly onKeyDown?: (e: React.KeyboardEvent) => void\n readonly PopupActions?: React.ReactNode\n readonly previewUrl?: string\n readonly selectedCount?: number\n readonly title: string\n readonly type: 'file' | 'folder'\n}\nexport function FolderFileCard({\n id,\n type,\n className = '',\n disabled = false,\n folderType,\n isDeleting = false,\n isFocused = false,\n isSelected = false,\n itemKey,\n onClick,\n onKeyDown,\n PopupActions,\n previewUrl,\n selectedCount = 0,\n title,\n}: Props) {\n const disableDrop = !id || disabled || type !== 'folder'\n const { isOver, setNodeRef } = useDroppable({\n id: itemKey,\n data: {\n id,\n type,\n folderType,\n },\n disabled: disableDrop,\n })\n const ref = React.useRef(null)\n\n React.useEffect(() => {\n const copyOfRef = ref.current\n if (isFocused && ref.current) {\n ref.current.focus()\n } else if (!isFocused && ref.current) {\n ref.current.blur()\n }\n\n return () => {\n if (copyOfRef) {\n copyOfRef.blur()\n }\n }\n }, [isFocused])\n\n return (\n <DraggableWithClick\n className={[\n baseClass,\n className,\n isSelected && `${baseClass}--selected`,\n disabled && `${baseClass}--disabled`,\n isDeleting && `${baseClass}--deleting`,\n isFocused && `${baseClass}--focused`,\n isOver && `${baseClass}--over`,\n `${baseClass}--${type}`,\n ]\n .filter(Boolean)\n .join(' ')}\n disabled={disabled || (!onClick && !onKeyDown)}\n key={itemKey}\n onClick={onClick}\n onKeyDown={onKeyDown}\n ref={ref}\n >\n {!disableDrop ? <div className={`${baseClass}__drop-area`} ref={setNodeRef} /> : null}\n\n {type === 'file' ? (\n <div className={`${baseClass}__preview-area`}>\n {previewUrl ? <Thumbnail fileSrc={previewUrl} /> : <DocumentIcon />}\n </div>\n ) : null}\n\n <div className={`${baseClass}__titlebar-area`}>\n <div className={`${baseClass}__icon-wrap`}>\n {type === 'file' ? <DocumentIcon /> : <ColoredFolderIcon />}\n </div>\n <div className={`${baseClass}__titlebar-labels`}>\n <p className={`${baseClass}__name`} title={title}>\n <span>{title}</span>\n </p>\n {folderType && folderType.length > 0 ? (\n <AssignedCollections folderType={folderType} />\n ) : null}\n </div>\n {PopupActions ? (\n <Popup\n button={<ThreeDotsIcon />}\n disabled={selectedCount > 1 || (selectedCount === 1 && !isSelected)}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n {PopupActions}\n </Popup>\n ) : null}\n </div>\n </DraggableWithClick>\n )\n}\n\nfunction AssignedCollections({ folderType }: { folderType: string[] }) {\n const { config } = useConfig()\n const { i18n } = useTranslation()\n\n const collectionsDisplayText = React.useMemo(() => {\n return folderType.reduce((acc, collection) => {\n const collectionConfig = config.collections?.find((c) => c.slug === collection)\n if (collectionConfig) {\n return [...acc, getTranslation(collectionConfig.labels.plural, i18n)]\n }\n return acc\n }, [])\n }, [folderType, config.collections, i18n])\n\n return (\n <p className={`${baseClass}__assigned-collections`}>\n {collectionsDisplayText.map((label, index) => (\n <span key={label}>\n {label}\n {index < folderType.length - 1 ? ', ' : ''}\n </span>\n ))}\n </p>\n )\n}\n\ntype ContextCardProps = {\n readonly className?: string\n readonly index: number // todo: possibly remove\n readonly item: FolderOrDocument\n readonly type: 'file' | 'folder'\n}\nexport function ContextFolderFileCard({ type, className, index, item }: ContextCardProps) {\n const { checkIfItemIsDisabled, focusedRowIndex, onItemClick, onItemKeyPress, selectedItemKeys } =\n useFolder()\n const isSelected = selectedItemKeys.has(item.itemKey)\n const isDisabled = checkIfItemIsDisabled(item)\n\n return (\n <FolderFileCard\n className={className}\n disabled={isDisabled}\n folderType={item.value.folderType || []}\n id={item.value.id}\n isFocused={focusedRowIndex === index}\n isSelected={isSelected}\n itemKey={item.itemKey}\n onClick={(event) => {\n void onItemClick({ event, index, item })\n }}\n onKeyDown={(event) => {\n void onItemKeyPress({ event, index, item })\n }}\n previewUrl={item.value.url}\n title={item.value._folderOrDocumentTitle}\n type={type}\n />\n )\n}\n"],"names":["useDroppable","getTranslation","React","DocumentIcon","ThreeDotsIcon","useConfig","useFolder","useTranslation","Popup","Thumbnail","ColoredFolderIcon","DraggableWithClick","baseClass","FolderFileCard","id","type","className","disabled","folderType","isDeleting","isFocused","isSelected","itemKey","onClick","onKeyDown","PopupActions","previewUrl","selectedCount","title","disableDrop","isOver","setNodeRef","data","ref","useRef","useEffect","copyOfRef","current","focus","blur","filter","Boolean","join","div","fileSrc","p","span","length","AssignedCollections","button","horizontalAlign","size","verticalAlign","config","i18n","collectionsDisplayText","useMemo","reduce","acc","collection","collectionConfig","collections","find","c","slug","labels","plural","map","label","index","ContextFolderFileCard","item","checkIfItemIsDisabled","focusedRowIndex","onItemClick","onItemKeyPress","selectedItemKeys","has","isDisabled","value","event","url","_folderOrDocumentTitle"],"mappings":"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"}
|
|
@@ -135,10 +135,9 @@ const baseClass = 'move-doc-to-folder';
|
|
|
135
135
|
title: titleToRender
|
|
136
136
|
}));
|
|
137
137
|
}
|
|
138
|
-
} catch (_) {
|
|
139
|
-
// todo: add error toast?
|
|
140
|
-
}
|
|
138
|
+
} catch (_) {}
|
|
141
139
|
}
|
|
140
|
+
// todo: add error toast?
|
|
142
141
|
closeModal(drawerSlug);
|
|
143
142
|
},
|
|
144
143
|
skipConfirmModal: skipConfirmModal,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/elements/FolderView/MoveDocToFolder/index.tsx"],"sourcesContent":["'use client'\n\nimport type { CollectionSlug } from 'payload'\nimport type { FolderOrDocument } from 'payload/shared'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useId } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props as ButtonProps } from '../../Button/types.js'\n\nimport { useForm, useFormFields } from '../../../forms/Form/context.js'\nimport { FolderIcon } from '../../../icons/Folder/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { formatDrawerSlug, useDrawerDepth } from '../../Drawer/index.js'\nimport './index.scss'\nimport { MoveItemsToFolderDrawer } from '../Drawers/MoveToFolder/index.js'\n\nconst baseClass = 'move-doc-to-folder'\n\n/**\n * This is the button shown on the edit document view. It uses the more generic `MoveDocToFolderButton` component.\n */\nexport function MoveDocToFolder({\n buttonProps,\n className = '',\n folderCollectionSlug,\n folderFieldName,\n}: {\n readonly buttonProps?: Partial<ButtonProps>\n readonly className?: string\n readonly folderCollectionSlug: string\n readonly folderFieldName: string\n}) {\n const { t } = useTranslation()\n const dispatchField = useFormFields(([_, dispatch]) => dispatch)\n const currentParentFolder = useFormFields(\n ([fields]) => (fields && fields?.[folderFieldName]) || null,\n )\n const fromFolderID = currentParentFolder?.value\n const { id, collectionSlug, initialData, title } = useDocumentInfo()\n const { setModified } = useForm()\n const [fromFolderName, setFromFolderName] = React.useState(() => `${t('general:loading')}...`)\n\n const { config } = useConfig()\n const modalID = useId()\n\n React.useEffect(() => {\n async function fetchFolderLabel() {\n if (fromFolderID && (typeof fromFolderID === 'string' || typeof fromFolderID === 'number')) {\n const response = await fetch(`${config.routes.api}/${folderCollectionSlug}/${fromFolderID}`)\n const folderData = await response.json()\n setFromFolderName(folderData?.name || t('folder:noFolder'))\n } else {\n setFromFolderName(t('folder:noFolder'))\n }\n }\n\n void fetchFolderLabel()\n }, [folderCollectionSlug, config.routes.api, fromFolderID, t])\n\n return (\n <MoveDocToFolderButton\n buttonProps={buttonProps}\n className={className}\n collectionSlug={collectionSlug}\n docData={initialData as FolderOrDocument['value']}\n docID={id}\n docTitle={title}\n folderCollectionSlug={folderCollectionSlug}\n folderFieldName={folderFieldName}\n fromFolderID={fromFolderID as number | string}\n fromFolderName={fromFolderName}\n modalSlug={`move-to-folder-${modalID}`}\n onConfirm={({ id }) => {\n if (currentParentFolder.value !== id) {\n dispatchField({\n type: 'UPDATE',\n path: folderFieldName,\n value: id,\n })\n setModified(true)\n }\n }}\n skipConfirmModal={!currentParentFolder?.value}\n />\n )\n}\n\ntype MoveDocToFolderButtonProps = {\n readonly buttonProps?: Partial<ButtonProps>\n readonly className?: string\n readonly collectionSlug: string\n readonly docData: FolderOrDocument['value']\n readonly docID: number | string\n readonly docTitle?: string\n readonly folderCollectionSlug: string\n readonly folderFieldName: string\n readonly fromFolderID?: number | string\n readonly fromFolderName: string\n readonly modalSlug: string\n readonly onConfirm?: (args: { id: number | string; name: string }) => Promise<void> | void\n readonly skipConfirmModal?: boolean\n}\n\n/**\n * This is a more generic button that can be used in other contexts, such as table cells and the edit view.\n */\nexport const MoveDocToFolderButton = ({\n buttonProps,\n className,\n collectionSlug,\n docData,\n docID,\n docTitle,\n folderCollectionSlug,\n folderFieldName,\n fromFolderID,\n fromFolderName,\n modalSlug,\n onConfirm,\n skipConfirmModal,\n}: MoveDocToFolderButtonProps) => {\n const { getEntityConfig } = useConfig()\n const { i18n, t } = useTranslation()\n const { closeModal, openModal } = useModal()\n const drawerDepth = useDrawerDepth()\n const drawerSlug = formatDrawerSlug({ slug: modalSlug, depth: drawerDepth })\n\n const titleToRender =\n docTitle || getTranslation(getEntityConfig({ collectionSlug }).labels.singular, i18n)\n\n return (\n <>\n <Button\n buttonStyle=\"subtle\"\n className={[baseClass, className].filter(Boolean).join(' ')}\n icon={<FolderIcon />}\n iconPosition=\"left\"\n onClick={() => {\n openModal(drawerSlug)\n }}\n {...buttonProps}\n >\n {fromFolderName}\n </Button>\n\n <MoveItemsToFolderDrawer\n action=\"moveItemToFolder\"\n drawerSlug={drawerSlug}\n //todo this should inherit\n folderAssignedCollections={[collectionSlug]}\n folderCollectionSlug={folderCollectionSlug}\n folderFieldName={folderFieldName}\n fromFolderID={fromFolderID}\n fromFolderName={fromFolderName}\n itemsToMove={[\n {\n itemKey: `${collectionSlug}-${docID}`,\n relationTo: collectionSlug,\n value: { ...docData, id: docID },\n },\n ]}\n onConfirm={async (args) => {\n if (fromFolderID !== args.id && typeof onConfirm === 'function') {\n try {\n await onConfirm(args)\n\n if (args.id) {\n // moved to folder\n toast.success(\n t('folder:itemHasBeenMoved', {\n folderName: `\"${args.name}\"`,\n title: titleToRender,\n }),\n )\n } else {\n // moved to root\n toast.success(\n t('folder:itemHasBeenMovedToRoot', {\n title: titleToRender,\n }),\n )\n }\n } catch (_) {\n // todo: add error toast?\n }\n }\n\n closeModal(drawerSlug)\n }}\n skipConfirmModal={skipConfirmModal}\n title={titleToRender}\n />\n </>\n )\n}\n"],"names":["useModal","getTranslation","React","useId","toast","useForm","useFormFields","FolderIcon","useConfig","useDocumentInfo","useTranslation","Button","formatDrawerSlug","useDrawerDepth","MoveItemsToFolderDrawer","baseClass","MoveDocToFolder","buttonProps","className","folderCollectionSlug","folderFieldName","t","dispatchField","_","dispatch","currentParentFolder","fields","fromFolderID","value","id","collectionSlug","initialData","title","setModified","fromFolderName","setFromFolderName","useState","config","modalID","useEffect","fetchFolderLabel","response","fetch","routes","api","folderData","json","name","MoveDocToFolderButton","docData","docID","docTitle","modalSlug","onConfirm","type","path","skipConfirmModal","getEntityConfig","i18n","closeModal","openModal","drawerDepth","drawerSlug","slug","depth","titleToRender","labels","singular","buttonStyle","filter","Boolean","join","icon","iconPosition","onClick","action","folderAssignedCollections","itemsToMove","itemKey","relationTo","args","success","folderName"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../src/elements/FolderView/MoveDocToFolder/index.tsx"],"sourcesContent":["'use client'\n\nimport type { CollectionSlug } from 'payload'\nimport type { FolderOrDocument } from 'payload/shared'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useId } from 'react'\nimport { toast } from 'sonner'\n\nimport type { Props as ButtonProps } from '../../Button/types.js'\n\nimport { useForm, useFormFields } from '../../../forms/Form/context.js'\nimport { FolderIcon } from '../../../icons/Folder/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { formatDrawerSlug, useDrawerDepth } from '../../Drawer/index.js'\nimport './index.scss'\nimport { MoveItemsToFolderDrawer } from '../Drawers/MoveToFolder/index.js'\n\nconst baseClass = 'move-doc-to-folder'\n\n/**\n * This is the button shown on the edit document view. It uses the more generic `MoveDocToFolderButton` component.\n */\nexport function MoveDocToFolder({\n buttonProps,\n className = '',\n folderCollectionSlug,\n folderFieldName,\n}: {\n readonly buttonProps?: Partial<ButtonProps>\n readonly className?: string\n readonly folderCollectionSlug: string\n readonly folderFieldName: string\n}) {\n const { t } = useTranslation()\n const dispatchField = useFormFields(([_, dispatch]) => dispatch)\n const currentParentFolder = useFormFields(\n ([fields]) => (fields && fields?.[folderFieldName]) || null,\n )\n const fromFolderID = currentParentFolder?.value\n const { id, collectionSlug, initialData, title } = useDocumentInfo()\n const { setModified } = useForm()\n const [fromFolderName, setFromFolderName] = React.useState(() => `${t('general:loading')}...`)\n\n const { config } = useConfig()\n const modalID = useId()\n\n React.useEffect(() => {\n async function fetchFolderLabel() {\n if (fromFolderID && (typeof fromFolderID === 'string' || typeof fromFolderID === 'number')) {\n const response = await fetch(`${config.routes.api}/${folderCollectionSlug}/${fromFolderID}`)\n const folderData = await response.json()\n setFromFolderName(folderData?.name || t('folder:noFolder'))\n } else {\n setFromFolderName(t('folder:noFolder'))\n }\n }\n\n void fetchFolderLabel()\n }, [folderCollectionSlug, config.routes.api, fromFolderID, t])\n\n return (\n <MoveDocToFolderButton\n buttonProps={buttonProps}\n className={className}\n collectionSlug={collectionSlug}\n docData={initialData as FolderOrDocument['value']}\n docID={id}\n docTitle={title}\n folderCollectionSlug={folderCollectionSlug}\n folderFieldName={folderFieldName}\n fromFolderID={fromFolderID as number | string}\n fromFolderName={fromFolderName}\n modalSlug={`move-to-folder-${modalID}`}\n onConfirm={({ id }) => {\n if (currentParentFolder.value !== id) {\n dispatchField({\n type: 'UPDATE',\n path: folderFieldName,\n value: id,\n })\n setModified(true)\n }\n }}\n skipConfirmModal={!currentParentFolder?.value}\n />\n )\n}\n\ntype MoveDocToFolderButtonProps = {\n readonly buttonProps?: Partial<ButtonProps>\n readonly className?: string\n readonly collectionSlug: string\n readonly docData: FolderOrDocument['value']\n readonly docID: number | string\n readonly docTitle?: string\n readonly folderCollectionSlug: string\n readonly folderFieldName: string\n readonly fromFolderID?: number | string\n readonly fromFolderName: string\n readonly modalSlug: string\n readonly onConfirm?: (args: { id: number | string; name: string }) => Promise<void> | void\n readonly skipConfirmModal?: boolean\n}\n\n/**\n * This is a more generic button that can be used in other contexts, such as table cells and the edit view.\n */\nexport const MoveDocToFolderButton = ({\n buttonProps,\n className,\n collectionSlug,\n docData,\n docID,\n docTitle,\n folderCollectionSlug,\n folderFieldName,\n fromFolderID,\n fromFolderName,\n modalSlug,\n onConfirm,\n skipConfirmModal,\n}: MoveDocToFolderButtonProps) => {\n const { getEntityConfig } = useConfig()\n const { i18n, t } = useTranslation()\n const { closeModal, openModal } = useModal()\n const drawerDepth = useDrawerDepth()\n const drawerSlug = formatDrawerSlug({ slug: modalSlug, depth: drawerDepth })\n\n const titleToRender =\n docTitle || getTranslation(getEntityConfig({ collectionSlug }).labels.singular, i18n)\n\n return (\n <>\n <Button\n buttonStyle=\"subtle\"\n className={[baseClass, className].filter(Boolean).join(' ')}\n icon={<FolderIcon />}\n iconPosition=\"left\"\n onClick={() => {\n openModal(drawerSlug)\n }}\n {...buttonProps}\n >\n {fromFolderName}\n </Button>\n\n <MoveItemsToFolderDrawer\n action=\"moveItemToFolder\"\n drawerSlug={drawerSlug}\n //todo this should inherit\n folderAssignedCollections={[collectionSlug]}\n folderCollectionSlug={folderCollectionSlug}\n folderFieldName={folderFieldName}\n fromFolderID={fromFolderID}\n fromFolderName={fromFolderName}\n itemsToMove={[\n {\n itemKey: `${collectionSlug}-${docID}`,\n relationTo: collectionSlug,\n value: { ...docData, id: docID },\n },\n ]}\n onConfirm={async (args) => {\n if (fromFolderID !== args.id && typeof onConfirm === 'function') {\n try {\n await onConfirm(args)\n\n if (args.id) {\n // moved to folder\n toast.success(\n t('folder:itemHasBeenMoved', {\n folderName: `\"${args.name}\"`,\n title: titleToRender,\n }),\n )\n } else {\n // moved to root\n toast.success(\n t('folder:itemHasBeenMovedToRoot', {\n title: titleToRender,\n }),\n )\n }\n } catch (_) {\n // todo: add error toast?\n }\n }\n\n closeModal(drawerSlug)\n }}\n skipConfirmModal={skipConfirmModal}\n title={titleToRender}\n />\n </>\n )\n}\n"],"names":["useModal","getTranslation","React","useId","toast","useForm","useFormFields","FolderIcon","useConfig","useDocumentInfo","useTranslation","Button","formatDrawerSlug","useDrawerDepth","MoveItemsToFolderDrawer","baseClass","MoveDocToFolder","buttonProps","className","folderCollectionSlug","folderFieldName","t","dispatchField","_","dispatch","currentParentFolder","fields","fromFolderID","value","id","collectionSlug","initialData","title","setModified","fromFolderName","setFromFolderName","useState","config","modalID","useEffect","fetchFolderLabel","response","fetch","routes","api","folderData","json","name","MoveDocToFolderButton","docData","docID","docTitle","modalSlug","onConfirm","type","path","skipConfirmModal","getEntityConfig","i18n","closeModal","openModal","drawerDepth","drawerSlug","slug","depth","titleToRender","labels","singular","buttonStyle","filter","Boolean","join","icon","iconPosition","onClick","action","folderAssignedCollections","itemsToMove","itemKey","relationTo","args","success","folderName"],"mappings":"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"}
|