@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/UnpublishMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React from 'react'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\nimport { UnpublishManyDrawerContent } from './DrawerContent.js'\n\nexport type UnpublishManyProps = {\n collection: ClientCollectionConfig\n}\n\nexport const UnpublishMany: React.FC<UnpublishManyProps> = (props) => {\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n\n return (\n <UnpublishMany_v4\n {...props}\n count={count}\n ids={selectedIDs}\n onSuccess={() => toggleAll()}\n selectAll={selectAll === SelectAllStatus.AllAvailable}\n />\n )\n}\n\nexport const UnpublishMany_v4: React.FC<\n {\n count: number\n ids: (number | string)[]\n /**\n * When multiple UnpublishMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n onSuccess?: () => void\n selectAll: boolean\n where?: Where\n } & UnpublishManyProps\n> = (props) => {\n const {\n collection,\n collection: { slug, versions } = {},\n count,\n ids,\n modalPrefix,\n onSuccess,\n selectAll,\n where,\n } = props\n\n const { t } = useTranslation()\n const { permissions } = useAuth()\n const { toggleModal } = useModal()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasPermission = collectionPermissions?.update\n\n const drawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}unpublish-${slug}`\n\n if (!versions?.drafts || count === 0 || !hasPermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <ListSelectionButton\n aria-label={t('version:unpublish')}\n onClick={() => {\n toggleModal(drawerSlug)\n }}\n >\n {t('version:unpublish')}\n </ListSelectionButton>\n <UnpublishManyDrawerContent\n collection={collection}\n drawerSlug={drawerSlug}\n ids={ids}\n onSuccess={onSuccess}\n selectAll={selectAll}\n where={where}\n />\n </React.Fragment>\n )\n}\n"],"names":["useModal","React","useAuth","SelectAllStatus","useSelection","useTranslation","ListSelectionButton","UnpublishManyDrawerContent","UnpublishMany","props","count","selectAll","selectedIDs","toggleAll","UnpublishMany_v4","ids","onSuccess","AllAvailable","collection","slug","versions","modalPrefix","where","t","permissions","toggleModal","collectionPermissions","collections","hasPermission","update","drawerSlug","drafts","Fragment","aria-label","onClick"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,OAAOC,WAAW,QAAO;AAEzB,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,eAAe,EAAEC,YAAY,QAAQ,qCAAoC;AAClF,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,mBAAmB,QAAQ,4BAA2B;AAC/D,SAASC,0BAA0B,QAAQ,qBAAoB;AAM/D,OAAO,MAAMC,gBAA8C,CAACC;IAC1D,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGT;IAErD,qBACE,KAACU;QACE,GAAGL,KAAK;QACTC,OAAOA;QACPK,KAAKH;QACLI,WAAW,IAAMH;QACjBF,WAAWA,cAAcR,gBAAgBc,YAAY;;AAG3D,EAAC;AAED,OAAO,MAAMH,
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/UnpublishMany/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, Where } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport React from 'react'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { SelectAllStatus, useSelection } from '../../providers/Selection/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ListSelectionButton } from '../ListSelection/index.js'\nimport { UnpublishManyDrawerContent } from './DrawerContent.js'\n\nexport type UnpublishManyProps = {\n collection: ClientCollectionConfig\n}\n\nexport const UnpublishMany: React.FC<UnpublishManyProps> = (props) => {\n const { count, selectAll, selectedIDs, toggleAll } = useSelection()\n\n return (\n <UnpublishMany_v4\n {...props}\n count={count}\n ids={selectedIDs}\n onSuccess={() => toggleAll()}\n selectAll={selectAll === SelectAllStatus.AllAvailable}\n />\n )\n}\n\nexport const UnpublishMany_v4: React.FC<\n {\n count: number\n ids: (number | string)[]\n /**\n * When multiple UnpublishMany components are rendered on the page, this will differentiate them.\n */\n modalPrefix?: string\n onSuccess?: () => void\n selectAll: boolean\n where?: Where\n } & UnpublishManyProps\n> = (props) => {\n const {\n collection,\n collection: { slug, versions } = {},\n count,\n ids,\n modalPrefix,\n onSuccess,\n selectAll,\n where,\n } = props\n\n const { t } = useTranslation()\n const { permissions } = useAuth()\n const { toggleModal } = useModal()\n\n const collectionPermissions = permissions?.collections?.[slug]\n const hasPermission = collectionPermissions?.update\n\n const drawerSlug = `${modalPrefix ? `${modalPrefix}-` : ''}unpublish-${slug}`\n\n if (!versions?.drafts || count === 0 || !hasPermission) {\n return null\n }\n\n return (\n <React.Fragment>\n <ListSelectionButton\n aria-label={t('version:unpublish')}\n onClick={() => {\n toggleModal(drawerSlug)\n }}\n >\n {t('version:unpublish')}\n </ListSelectionButton>\n <UnpublishManyDrawerContent\n collection={collection}\n drawerSlug={drawerSlug}\n ids={ids}\n onSuccess={onSuccess}\n selectAll={selectAll}\n where={where}\n />\n </React.Fragment>\n )\n}\n"],"names":["useModal","React","useAuth","SelectAllStatus","useSelection","useTranslation","ListSelectionButton","UnpublishManyDrawerContent","UnpublishMany","props","count","selectAll","selectedIDs","toggleAll","UnpublishMany_v4","ids","onSuccess","AllAvailable","collection","slug","versions","modalPrefix","where","t","permissions","toggleModal","collectionPermissions","collections","hasPermission","update","drawerSlug","drafts","Fragment","aria-label","onClick"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,OAAOC,WAAW,QAAO;AAEzB,SAASC,OAAO,QAAQ,gCAA+B;AACvD,SAASC,eAAe,EAAEC,YAAY,QAAQ,qCAAoC;AAClF,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,mBAAmB,QAAQ,4BAA2B;AAC/D,SAASC,0BAA0B,QAAQ,qBAAoB;AAM/D,OAAO,MAAMC,gBAA8C,CAACC;IAC1D,MAAM,EAAEC,KAAK,EAAEC,SAAS,EAAEC,WAAW,EAAEC,SAAS,EAAE,GAAGT;IAErD,qBACE,KAACU;QACE,GAAGL,KAAK;QACTC,OAAOA;QACPK,KAAKH;QACLI,WAAW,IAAMH;QACjBF,WAAWA,cAAcR,gBAAgBc,YAAY;;AAG3D,EAAC;AAED,OAAO,MAAMH,mBAIT;;KAEC,GAMD,CAACL;IACH,MAAM,EACJS,UAAU,EACVA,YAAY,EAAEC,IAAI,EAAEC,QAAQ,EAAE,GAAG,CAAC,CAAC,EACnCV,KAAK,EACLK,GAAG,EACHM,WAAW,EACXL,SAAS,EACTL,SAAS,EACTW,KAAK,EACN,GAAGb;IAEJ,MAAM,EAAEc,CAAC,EAAE,GAAGlB;IACd,MAAM,EAAEmB,WAAW,EAAE,GAAGtB;IACxB,MAAM,EAAEuB,WAAW,EAAE,GAAGzB;IAExB,MAAM0B,wBAAwBF,aAAaG,aAAa,CAACR,KAAK;IAC9D,MAAMS,gBAAgBF,uBAAuBG;IAE7C,MAAMC,aAAa,GAAGT,cAAc,GAAGA,YAAY,CAAC,CAAC,GAAG,GAAG,UAAU,EAAEF,MAAM;IAE7E,IAAI,CAACC,UAAUW,UAAUrB,UAAU,KAAK,CAACkB,eAAe;QACtD,OAAO;IACT;IAEA,qBACE,MAAC3B,MAAM+B,QAAQ;;0BACb,KAAC1B;gBACC2B,cAAYV,EAAE;gBACdW,SAAS;oBACPT,YAAYK;gBACd;0BAECP,EAAE;;0BAEL,KAAChB;gBACCW,YAAYA;gBACZY,YAAYA;gBACZf,KAAKA;gBACLC,WAAWA;gBACXL,WAAWA;gBACXW,OAAOA;;;;AAIf,EAAC"}
|
|
@@ -205,8 +205,9 @@ export const Upload_v4 = (props)=>{
|
|
|
205
205
|
file
|
|
206
206
|
});
|
|
207
207
|
setUploadStatus('idle');
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
208
|
+
return;
|
|
209
|
+
} // Exit if client-side fetch succeeds
|
|
210
|
+
catch (_clientError) {
|
|
210
211
|
if (!useServerSideFetch) {
|
|
211
212
|
// If server-side fetch is not enabled, show client-side error
|
|
212
213
|
toast.error('Failed to fetch the file.');
|
|
@@ -257,10 +258,9 @@ export const Upload_v4 = (props)=>{
|
|
|
257
258
|
initialState
|
|
258
259
|
]);
|
|
259
260
|
useEffect(()=>{
|
|
260
|
-
if (showUrlInput && urlInputRef.current) {
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
}, [
|
|
261
|
+
if (showUrlInput && urlInputRef.current) {}
|
|
262
|
+
}, // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true
|
|
263
|
+
[
|
|
264
264
|
showUrlInput
|
|
265
265
|
]);
|
|
266
266
|
useEffect(()=>{
|
|
@@ -397,7 +397,7 @@ export const Upload_v4 = (props)=>{
|
|
|
397
397
|
/*#__PURE__*/ _jsxs("div", {
|
|
398
398
|
className: `${baseClass}__remote-file-wrap`,
|
|
399
399
|
children: [
|
|
400
|
-
/*#__PURE__*/ _jsx("input", {
|
|
400
|
+
/* eslint-disable-next-line jsx-a11y/control-has-associated-label */ /*#__PURE__*/ _jsx("input", {
|
|
401
401
|
className: `${baseClass}__remote-file`,
|
|
402
402
|
onChange: (e)=>{
|
|
403
403
|
setFileUrl(e.target.value);
|
|
@@ -448,7 +448,7 @@ export const Upload_v4 = (props)=>{
|
|
|
448
448
|
/*#__PURE__*/ _jsxs("div", {
|
|
449
449
|
className: `${baseClass}__file-adjustments`,
|
|
450
450
|
children: [
|
|
451
|
-
/*#__PURE__*/ _jsx("input", {
|
|
451
|
+
/* eslint-disable-next-line jsx-a11y/control-has-associated-label */ /*#__PURE__*/ _jsx("input", {
|
|
452
452
|
className: `${baseClass}__filename`,
|
|
453
453
|
onChange: handleFileNameChange,
|
|
454
454
|
title: filename || value.name,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { UploadControlsProvider, useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport './index.scss'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n const { openModal } = useModal()\n\n const fileTypeIsAdjustable =\n isImage(mimeType) && mimeType !== 'image/svg+xml' && mimeType !== 'image/jxl'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__previewSizes`}\n margin={false}\n onClick={() => {\n openModal(sizePreviewSlug)\n }}\n size=\"small\"\n >\n {t('upload:previewSizes')}\n </Button>\n )}\n {enableAdjustments && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__edit`}\n margin={false}\n onClick={() => {\n openModal(editDrawerSlug)\n }}\n size=\"small\"\n >\n {t('upload:editImage')}\n </Button>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n readonly UploadControls?: React.ReactNode\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n return (\n <UploadControlsProvider>\n <Upload_v4\n {...props}\n resetUploadEdits={resetUploadEdits}\n updateUploadEdits={updateUploadEdits}\n uploadEdits={uploadEdits}\n />\n </UploadControlsProvider>\n )\n}\n\nexport type UploadProps_v4 = {\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadEdits?: UploadEdits\n} & UploadProps\n\nexport const Upload_v4: React.FC<UploadProps_v4> = (props) => {\n const {\n collectionSlug,\n customActions,\n initialState,\n onChange,\n resetUploadEdits,\n updateUploadEdits,\n uploadConfig,\n UploadControls,\n uploadEdits,\n } = props\n\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileName,\n uploadControlFileUrl,\n } = useUploadControls()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { id, data, docPermissions, setUploadStatus } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const urlInputRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const useServerSideFetch =\n typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0\n\n const handleFileChange = useCallback(\n ({ file, isNewFile = true }: { file: File | null; isNewFile?: boolean }) => {\n if (isNewFile && file instanceof File) {\n setFileSrc(URL.createObjectURL(file))\n }\n\n setValue(file)\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n\n if (typeof onChange === 'function') {\n onChange(file)\n }\n },\n [onChange, setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange({ file: renameFile(value, updatedFileName), isNewFile: false })\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange({ file: fileToUpload })\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange({ file: null })\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handleUrlSubmit = useCallback(async () => {\n if (!fileUrl || uploadConfig?.pasteURL === false) {\n return\n }\n\n setUploadStatus('uploading')\n try {\n // Attempt client-side fetch\n const clientResponse = await fetch(fileUrl)\n\n if (!clientResponse.ok) {\n throw new Error(`Fetch failed with status: ${clientResponse.status}`)\n }\n\n const blob = await clientResponse.blob()\n const fileName = uploadControlFileName || decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n return // Exit if client-side fetch succeeds\n } catch (_clientError) {\n if (!useServerSideFetch) {\n // If server-side fetch is not enabled, show client-side error\n toast.error('Failed to fetch the file.')\n setUploadStatus('failed')\n return\n }\n }\n\n // Attempt server-side fetch if client-side fetch fails and useServerSideFetch is true\n try {\n const pasteURL = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`\n const serverResponse = await fetch(`${serverURL}${api}${pasteURL}`)\n\n if (!serverResponse.ok) {\n throw new Error(`Fetch failed with status: ${serverResponse.status}`)\n }\n\n const blob = await serverResponse.blob()\n const fileName = decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n } catch (_serverError) {\n toast.error('The provided URL is not allowed.')\n setUploadStatus('failed')\n }\n }, [\n api,\n collectionSlug,\n fileUrl,\n handleFileChange,\n id,\n serverURL,\n setUploadStatus,\n uploadConfig,\n uploadControlFileName,\n useServerSideFetch,\n ])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload = docPermissions?.update\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit])\n\n useEffect(() => {\n const handleControlFile = () => {\n if (uploadControlFile) {\n handleFileChange({ file: uploadControlFile })\n }\n }\n\n void handleControlFile()\n }, [uploadControlFile, handleFileChange])\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {data && data.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={data}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n hideRemoveFile={uploadConfig.hideRemoveFile}\n imageCacheTag={imageCacheTag}\n uploadConfig={uploadConfig}\n />\n )}\n {((!uploadConfig.hideFileInputOnCreate && !data?.filename) || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"small\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n {uploadConfig?.pasteURL !== false && (\n <Fragment>\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n setShowUrlInput(true)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n size=\"small\"\n >\n {t('upload:pasteURL')}\n </Button>\n </Fragment>\n )}\n\n {UploadControls ? UploadControls : null}\n </div>\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n title={fileUrl}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() => {\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n title={filename || value.name}\n type=\"text\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && data?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || data?.filename) && (\n <EditDepthProvider>\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || data?.filename}\n fileSrc={data?.url || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || data?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || data?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"names":["useModal","isImage","React","Fragment","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useFormProcessing","useField","useConfig","useDocumentInfo","EditDepthProvider","useTranslation","UploadControlsProvider","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","name","UploadActions","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","openModal","fileTypeIsAdjustable","length","div","className","buttonStyle","margin","onClick","size","map","CustomAction","i","Upload","props","resetUploadEdits","updateUploadEdits","uploadEdits","Upload_v4","collectionSlug","initialState","onChange","uploadConfig","UploadControls","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileName","uploadControlFileUrl","config","routes","api","serverURL","setModified","id","data","docPermissions","setUploadStatus","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","urlInputRef","inputRef","useServerSideFetch","pasteURL","allowList","handleFileChange","file","isNewFile","File","URL","createObjectURL","renameFile","fileToChange","newName","newFile","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handleUrlSubmit","clientResponse","fetch","ok","Error","status","blob","fileName","decodeURIComponent","split","pop","_clientError","error","encodeURIComponent","serverResponse","_serverError","current","canRemoveUpload","update","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","handleControlFileUrl","handleControlFile","filter","message","customUploadActions","doc","handleRemove","hideRemoveFile","hideFileInputOnCreate","click","input","accept","aria-hidden","hidden","ref","span","p","title","button","icon","iconStyle","round","tooltip","Header","slug","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","label"],"mappings":"AAAA;;AAGA,SAASA,QAAQ,QAAQ,qBAAoB;AAC7C,SAASC,OAAO,QAAQ,iBAAgB;AACxC,OAAOC,SAASC,QAAQ,EAAEC,WAAW,EAAEC,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,QAAO;AACjF,SAASC,KAAK,QAAQ,SAAQ;AAE9B,SAASC,UAAU,QAAQ,mCAAkC;AAC7D,SAASC,cAAc,QAAQ,+BAA8B;AAC7D,SAASC,OAAO,EAAEC,iBAAiB,QAAQ,4BAA2B;AACtE,SAASC,QAAQ,QAAQ,gCAA+B;AACxD,SAASC,SAAS,QAAQ,kCAAiC;AAC3D,SAASC,eAAe,QAAQ,wCAAuC;AACvE,SAASC,iBAAiB,QAAQ,qCAAoC;AACtE,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,sBAAsB,EAAEC,iBAAiB,QAAQ,0CAAyC;AACnG,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,MAAM,QAAQ,qBAAoB;AAC3C,SAASC,QAAQ,QAAQ,uBAAsB;AAC/C,SAASC,UAAU,QAAQ,yBAAwB;AACnD,OAAO,eAAc;AACrB,SAASC,WAAW,QAAQ,0BAAyB;AACrD,SAASC,YAAY,QAAQ,2BAA0B;AACvD,SAASC,SAAS,QAAQ,wBAAuB;AAEjD,MAAMC,YAAY;AAClB,OAAO,MAAMC,iBAAiB,cAAa;AAC3C,OAAO,MAAMC,kBAAkB,gBAAe;AAE9C,MAAMC,WAAW,CAACC;IAChB,IAAI,CAACA,SAASA,UAAUC,WAAW;QACjC,OAAO;IACT;IAEA,IAAID,SAAU,CAAA,CAACA,MAAME,IAAI,IAAIF,MAAME,IAAI,KAAK,EAAC,GAAI;QAC/C,OAAO;IACT;IAEA,OAAO;AACT;AASA,OAAO,MAAMC,gBAAgB,CAAC,EAC5BC,aAAa,EACbC,iBAAiB,EACjBC,kBAAkB,EAClBC,QAAQ,EACU;IAClB,MAAM,EAAEC,CAAC,EAAE,GAAGvB;IACd,MAAM,EAAEwB,SAAS,EAAE,GAAGzC;IAEtB,MAAM0C,uBACJzC,QAAQsC,aAAaA,aAAa,mBAAmBA,aAAa;IAEpE,IAAI,CAACG,wBAAyB,CAAA,CAACN,iBAAiBA,cAAcO,MAAM,KAAK,CAAA,GAAI;QAC3E,OAAO;IACT;IAEA,qBACE,MAACC;QAAIC,WAAW,GAAGjB,UAAU,gBAAgB,CAAC;;YAC3Cc,sCACC,MAACxC,MAAMC,QAAQ;;oBACZmC,oCACC,KAACjB;wBACCyB,aAAY;wBACZD,WAAW,GAAGjB,UAAU,cAAc,CAAC;wBACvCmB,QAAQ;wBACRC,SAAS;4BACPP,UAAUX;wBACZ;wBACAmB,MAAK;kCAEJT,EAAE;;oBAGNH,mCACC,KAAChB;wBACCyB,aAAY;wBACZD,WAAW,GAAGjB,UAAU,MAAM,CAAC;wBAC/BmB,QAAQ;wBACRC,SAAS;4BACPP,UAAUZ;wBACZ;wBACAoB,MAAK;kCAEJT,EAAE;;;;YAMVJ,iBACCA,cAAcc,GAAG,CAAC,CAACC,cAAcC;gBAC/B,qBAAO,KAAClD,MAAMC,QAAQ;8BAAUgD;mBAAJC;YAC9B;;;AAGR,EAAC;AAWD,OAAO,MAAMC,SAAgC,CAACC;IAC5C,MAAM,EAAEC,gBAAgB,EAAEC,iBAAiB,EAAEC,WAAW,EAAE,GAAGrC;IAC7D,qBACE,KAACF;kBACC,cAAA,KAACwC;YACE,GAAGJ,KAAK;YACTC,kBAAkBA;YAClBC,mBAAmBA;YACnBC,aAAaA;;;AAIrB,EAAC;AAQD,OAAO,MAAMC,YAAsC,CAACJ;IAClD,MAAM,EACJK,cAAc,EACdvB,aAAa,EACbwB,YAAY,EACZC,QAAQ,EACRN,gBAAgB,EAChBC,iBAAiB,EACjBM,YAAY,EACZC,cAAc,EACdN,WAAW,EACZ,GAAGH;IAEJ,MAAM,EACJU,oBAAoB,EACpBC,wBAAwB,EACxBC,uBAAuB,EACvBC,iBAAiB,EACjBC,qBAAqB,EACrBC,oBAAoB,EACrB,GAAGlD;IAEJ,MAAM,EACJmD,QAAQ,EACNC,QAAQ,EAAEC,GAAG,EAAE,EACfC,SAAS,EACV,EACF,GAAG3D;IAEJ,MAAM,EAAE0B,CAAC,EAAE,GAAGvB;IACd,MAAM,EAAEyD,WAAW,EAAE,GAAG/D;IACxB,MAAM,EAAEgE,EAAE,EAAEC,IAAI,EAAEC,cAAc,EAAEC,eAAe,EAAE,GAAG/D;IACtD,MAAMgE,mBAAmBnE;IACzB,MAAM,EAAEoE,YAAY,EAAEC,QAAQ,EAAEC,SAAS,EAAElD,KAAK,EAAE,GAAGnB,SAAe;QAClEsE,MAAM;QACNpD;IACF;IAEA,MAAM,CAACqD,SAASC,WAAW,GAAG9E,SAAwB;IACtD,MAAM,CAAC+E,aAAaC,eAAe,GAAGhF,SAAS;IAC/C,MAAM,CAACiF,UAAUC,YAAY,GAAGlF,SAAiByB,OAAOE,QAAQ;IAChE,MAAM,CAACwD,cAAcC,gBAAgB,GAAGpF,SAAS;IACjD,MAAM,CAACqF,SAASC,WAAW,GAAGtF,SAAiB;IAE/C,MAAMuF,cAAcxF,OAAyB;IAC7C,MAAMyF,WAAWzF,OAAyB;IAE1C,MAAM0F,qBACJ,OAAOlC,cAAcmC,aAAa,YAAYnC,aAAamC,QAAQ,CAACC,SAAS,EAAEvD,SAAS;IAE1F,MAAMwD,mBAAmB/F,YACvB,CAAC,EAAEgG,IAAI,EAAEC,YAAY,IAAI,EAA8C;QACrE,IAAIA,aAAaD,gBAAgBE,MAAM;YACrCjB,WAAWkB,IAAIC,eAAe,CAACJ;QACjC;QAEAnB,SAASmB;QACTT,gBAAgB;QAChBzB,wBAAwB;QACxBD,yBAAyB;QACzBD,qBAAqB;QAErB,IAAI,OAAOH,aAAa,YAAY;YAClCA,SAASuC;QACX;IACF,GACA;QAACvC;QAAUoB;QAAUjB;QAAsBC;QAA0BC;KAAwB;IAG/F,MAAMuC,aAAa,CAACC,cAAoBC;QACtC,qDAAqD;QACrD,MAAMC,UAAU,IAAIN,KAAK;YAACI;SAAa,EAAEC,SAAS;YAChDE,MAAMH,aAAaG,IAAI;YACvBC,cAAcJ,aAAaI,YAAY;QACzC;QACA,OAAOF;IACT;IAEA,MAAMG,uBAAuB7G,MAAME,WAAW,CAC5C,CAAC4G;QACC,MAAMC,kBAAkBD,EAAEE,MAAM,CAAClF,KAAK;QAEtC,IAAIA,OAAO;YACTmE,iBAAiB;gBAAEC,MAAMK,WAAWzE,OAAOiF;gBAAkBZ,WAAW;YAAM;YAC9EZ,YAAYwB;QACd;IACF,GACA;QAACd;QAAkBnE;KAAM;IAG3B,MAAMmF,sBAAsB/G,YAC1B,CAACgH;QACC,MAAMC,eAAeD,OAAO,CAAC,EAAE;QAC/BjB,iBAAiB;YAAEC,MAAMiB;QAAa;IACxC,GACA;QAAClB;KAAiB;IAGpB,MAAMmB,oBAAoBlH,YAAY;QACpCmF,eAAe;QACfY,iBAAiB;YAAEC,MAAM;QAAK;QAC9Bf,WAAW;QACXQ,WAAW;QACXtC;QACAoC,gBAAgB;QAChBzB,wBAAwB;QACxBD,yBAAyB;QACzBD,qBAAqB;IACvB,GAAG;QACDmC;QACA5C;QACAS;QACAC;QACAC;KACD;IAED,MAAMqD,cAAcnH,YAClB,CAACoH;QACC9C,YAAY;QACZlB,kBAAkBgE;IACpB,GACA;QAAC9C;QAAalB;KAAkB;IAGlC,MAAMiE,kBAAkBrH,YAAY;QAClC,IAAI,CAACwF,WAAW9B,cAAcmC,aAAa,OAAO;YAChD;QACF;QAEAnB,gBAAgB;QAChB,IAAI;YACF,4BAA4B;YAC5B,MAAM4C,iBAAiB,MAAMC,MAAM/B;YAEnC,IAAI,CAAC8B,eAAeE,EAAE,EAAE;gBACtB,MAAM,IAAIC,MAAM,CAAC,0BAA0B,EAAEH,eAAeI,MAAM,EAAE;YACtE;YAEA,MAAMC,OAAO,MAAML,eAAeK,IAAI;YACtC,MAAMC,WAAW5D,yBAAyB6D,mBAAmBrC,QAAQsC,KAAK,CAAC,KAAKC,GAAG,MAAM;YACzF,MAAM/B,OAAO,IAAIE,KAAK;gBAACyB;aAAK,EAAEC,UAAU;gBAAEnB,MAAMkB,KAAKlB,IAAI;YAAC;YAE1DV,iBAAiB;gBAAEC;YAAK;YACxBtB,gBAAgB;YAChB,QAAO,qCAAqC;QAC9C,EAAE,OAAOsD,cAAc;YACrB,IAAI,CAACpC,oBAAoB;gBACvB,8DAA8D;gBAC9DxF,MAAM6H,KAAK,CAAC;gBACZvD,gBAAgB;gBAChB;YACF;QACF;QAEA,sFAAsF;QACtF,IAAI;YACF,MAAMmB,WAAW,CAAC,CAAC,EAAEtC,eAAe,UAAU,EAAEgB,KAAK,CAAC,CAAC,EAAEA,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,EAAE2D,mBAAmB1C,UAAU;YACxG,MAAM2C,iBAAiB,MAAMZ,MAAM,GAAGlD,YAAYD,MAAMyB,UAAU;YAElE,IAAI,CAACsC,eAAeX,EAAE,EAAE;gBACtB,MAAM,IAAIC,MAAM,CAAC,0BAA0B,EAAEU,eAAeT,MAAM,EAAE;YACtE;YAEA,MAAMC,OAAO,MAAMQ,eAAeR,IAAI;YACtC,MAAMC,WAAWC,mBAAmBrC,QAAQsC,KAAK,CAAC,KAAKC,GAAG,MAAM;YAChE,MAAM/B,OAAO,IAAIE,KAAK;gBAACyB;aAAK,EAAEC,UAAU;gBAAEnB,MAAMkB,KAAKlB,IAAI;YAAC;YAE1DV,iBAAiB;gBAAEC;YAAK;YACxBtB,gBAAgB;QAClB,EAAE,OAAO0D,cAAc;YACrBhI,MAAM6H,KAAK,CAAC;YACZvD,gBAAgB;QAClB;IACF,GAAG;QACDN;QACAb;QACAiC;QACAO;QACAxB;QACAF;QACAK;QACAhB;QACAM;QACA4B;KACD;IAED3F,UAAU;QACR,IAAIuD,cAAcwC,MAAMpE,iBAAiBsE,MAAM;YAC7CjB,WAAWkB,IAAIC,eAAe,CAAC5C,aAAawC,IAAI,CAACpE,KAAK;YACtDuD,eAAe;QACjB;IACF,GAAG;QAAC3B;KAAa;IAEjBvD,UAAU;QACR,IAAIqF,gBAAgBI,YAAY2C,OAAO,EAAE;QACvC,+FAA+F;QACjG;IACF,GAAG;QAAC/C;KAAa;IAEjBrF,UAAU;QACR,IAAI0E,kBAAkB;YACpBQ,eAAe;QACjB;IACF,GAAG;QAACR;KAAiB;IAErB,MAAM2D,kBAAkB7D,gBAAgB8D;IAExC,MAAMC,gBAAgB9E,cAAc+E,YAAYlG,SAAS;IACzD,MAAMmG,mBAAmBC,QAAQjF,cAAckF;IAC/C,uDAAuD;IACvD,MAAMC,oBAAoBnF,cAAcoF,eAAe;IAEvD,MAAM,EAAEC,MAAMC,WAAW,IAAI,EAAEF,aAAa,IAAI,EAAE,GAAGpF;IAErD,MAAMuF,iBAAiBH,cAAeN,CAAAA,iBAAiBE,oBAAoBG,iBAAgB;IAE3F,MAAMK,kBAAkBxF,aAAayF,SAAS,EAAEC,KAAK;IAErD,MAAMC,gBAAgB3F,cAAc4F,aAAa9E,MAAM+E;IAEvDtJ,UAAU;QACR,MAAMuJ,uBAAuB;YAC3B,IAAIvF,sBAAsB;gBACxBwB,WAAWxB;gBACX,MAAMoD;YACR;QACF;QAEA,KAAKmC;IACP,GAAG;QAACvF;QAAsBoD;KAAgB;IAE1CpH,UAAU;QACR,MAAMwJ,oBAAoB;YACxB,IAAI1F,mBAAmB;gBACrBgC,iBAAiB;oBAAEC,MAAMjC;gBAAkB;YAC7C;QACF;QAEA,KAAK0F;IACP,GAAG;QAAC1F;QAAmBgC;KAAiB;IAExC,qBACE,MAACvD;QAAIC,WAAW;YAACnC;YAAgBkB;SAAU,CAACkI,MAAM,CAACf,SAASS,IAAI,CAAC;;0BAC/D,KAAC/I;gBAAWsJ,SAAS/E;gBAAcE,WAAWA;;YAC7CN,QAAQA,KAAKY,QAAQ,IAAI,CAACF,6BACzB,KAAC7D;gBACCkC,gBAAgBA;gBAChBqG,qBAAqB5H;gBACrB6H,KAAKrF;gBACLvC,mBAAmB+G,YAAYC;gBAC/Ba,cAAcxB,kBAAkBpB,oBAAoBrF;gBACpD2G,eAAeA;gBACfuB,gBAAgBrG,aAAaqG,cAAc;gBAC3CV,eAAeA;gBACf3F,cAAcA;;YAGhB,CAAA,AAAC,CAACA,aAAasG,qBAAqB,IAAI,CAACxF,MAAMY,YAAaF,WAAU,mBACtE,MAAC1C;gBAAIC,WAAW,GAAGjB,UAAU,QAAQ,CAAC;;oBACnC,CAACI,SAAS,CAAC0D,8BACV,KAACnE;wBAASsC,UAAUsD;kCAClB,cAAA,MAACvE;4BAAIC,WAAW,GAAGjB,UAAU,iBAAiB,CAAC;;8CAC7C,MAACgB;oCAAIC,WAAW,GAAGjB,UAAU,iBAAiB,CAAC;;sDAC7C,KAACP;4CACCyB,aAAY;4CACZE,SAAS;gDACP,IAAI+C,SAAS0C,OAAO,EAAE;oDACpB1C,SAAS0C,OAAO,CAAC4B,KAAK;gDACxB;4CACF;4CACApH,MAAK;sDAEJT,EAAE;;sDAEL,KAAC8H;4CACCC,QAAQjB;4CACRkB,eAAY;4CACZ3H,WAAW,GAAGjB,UAAU,cAAc,CAAC;4CACvC6I,MAAM;4CACN5G,UAAU,CAACmD;gDACT,IAAIA,EAAEE,MAAM,CAACE,KAAK,IAAIJ,EAAEE,MAAM,CAACE,KAAK,CAACzE,MAAM,GAAG,GAAG;oDAC/CwE,oBAAoBH,EAAEE,MAAM,CAACE,KAAK;gDACpC;4CACF;4CACAsD,KAAK3E;4CACLc,MAAK;;wCAEN/C,cAAcmC,aAAa,uBAC1B,MAAC9F;;8DACC,KAACwK;oDAAK9H,WAAW,GAAGjB,UAAU,QAAQ,CAAC;8DAAGY,EAAE;;8DAC5C,KAACnB;oDACCyB,aAAY;oDACZE,SAAS;wDACP2C,gBAAgB;wDAChBzB,wBAAwB;wDACxBF,qBAAqB;wDACrBC,yBAAyB;oDAC3B;oDACAhB,MAAK;8DAEJT,EAAE;;;;wCAKRuB,iBAAiBA,iBAAiB;;;8CAErC,MAAC6G;oCAAE/H,WAAW,GAAGjB,UAAU,iBAAiB,CAAC;;wCAC1CY,EAAE;wCAAc;wCAAEA,EAAE;;;;;;oBAK5BkD,8BACC,MAACxF,MAAMC,QAAQ;;0CACb,MAACyC;gCAAIC,WAAW,GAAGjB,UAAU,kBAAkB,CAAC;;kDAE9C,KAAC0I;wCACCzH,WAAW,GAAGjB,UAAU,aAAa,CAAC;wCACtCiC,UAAU,CAACmD;4CACTnB,WAAWmB,EAAEE,MAAM,CAAClF,KAAK;wCAC3B;wCACA0I,KAAK5E;wCACL+E,OAAOjF;wCACPiB,MAAK;wCACL7E,OAAO4D;;kDAET,KAAChD;wCAAIC,WAAW,GAAGjB,UAAU,eAAe,CAAC;kDAC3C,cAAA,KAACkJ;4CACCjI,WAAW,GAAGjB,UAAU,UAAU,CAAC;4CACnCoB,SAAS;gDACP,KAAKyE;4CACP;4CACAZ,MAAK;sDAEJrE,EAAE;;;;;0CAIT,KAACnB;gCACCyB,aAAY;gCACZD,WAAW,GAAGjB,UAAU,QAAQ,CAAC;gCACjCmJ,MAAK;gCACLC,WAAU;gCACVhI,SAAS;oCACP2C,gBAAgB;oCAChBzB,wBAAwB;oCACxBF,qBAAqB;oCACrBC,yBAAyB;gCAC3B;gCACAgH,KAAK;gCACLC,SAAS1I,EAAE;;;;oBAIhBR,SAASoD,yBACR,MAAClF,MAAMC,QAAQ;;0CACb,KAACyC;gCAAIC,WAAW,GAAGjB,UAAU,gBAAgB,CAAC;0CAC5C,cAAA,KAACD;oCACCgC,gBAAgBA;oCAChByB,SAASnF,QAAQ+B,MAAM6E,IAAI,IAAIzB,UAAU;;;0CAG7C,MAACxC;gCAAIC,WAAW,GAAGjB,UAAU,kBAAkB,CAAC;;kDAE9C,KAAC0I;wCACCzH,WAAW,GAAGjB,UAAU,UAAU,CAAC;wCACnCiC,UAAUkD;wCACV8D,OAAOrF,YAAYxD,MAAME,IAAI;wCAC7B2E,MAAK;wCACL7E,OAAOwD,YAAYxD,MAAME,IAAI;;kDAE/B,KAACC;wCACCC,eAAeA;wCACfC,mBAAmB+G,YAAYC;wCAC/B/G,oBAAoBsG,iBAAiBhE,MAAMY,YAAY,CAACF;wCACxD/C,UAAUP,MAAM6E,IAAI;;;;0CAGxB,KAACxF;gCACCyB,aAAY;gCACZD,WAAW,GAAGjB,UAAU,QAAQ,CAAC;gCACjCmJ,MAAK;gCACLC,WAAU;gCACVhI,SAASsE;gCACT2D,KAAK;gCACLC,SAAS1I,EAAE;;;;;;YAMnBR,CAAAA,SAAS4C,MAAMY,QAAO,mBACtB,KAACxE;0BACC,cAAA,KAACM;oBAAO6J,QAAQ;oBAAMC,MAAMvJ;8BAC1B,cAAA,KAACL;wBACCwG,UAAUhG,OAAOE,QAAQ0C,MAAMY;wBAC/BJ,SAASR,MAAMyG,OAAOjG;wBACtBqE,eAAeA;wBACf6B,aAAa7H,aAAa0F,QAAQlH;wBAClCsJ,mBAAmB;4BACjBC,GAAG/H,aAAayF,YAAYsC,KAAK5G,MAAM6G,UAAU;4BACjDC,GAAGjI,aAAayF,YAAYwC,KAAK9G,MAAM+G,UAAU;wBACnD;wBACAC,QAAQrE;wBACR6B,UAAUA;wBACVC,gBAAgBA;;;;YAKvBzE,QAAQgE,+BACP,KAACtH;gBACCuB,WAAW,GAAGjB,UAAU,eAAe,CAAC;gBACxCiK,UAAU;gBACVT,MAAMtJ;gBACN+I,OAAOrI,EAAE,mBAAmB;oBAAEsJ,OAAOlH,KAAKY,QAAQ;gBAAC;0BAEnD,cAAA,KAAC9D;oBAAauI,KAAKrF;oBAAM6E,eAAeA;oBAAe3F,cAAcA;;;;;AAK/E,EAAC"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/Upload/index.tsx"],"sourcesContent":["'use client'\nimport type { FormState, SanitizedCollectionConfig, UploadEdits } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { isImage } from 'payload/shared'\nimport React, { Fragment, useCallback, useEffect, useRef, useState } from 'react'\nimport { toast } from 'sonner'\n\nimport { FieldError } from '../../fields/FieldError/index.js'\nimport { fieldBaseClass } from '../../fields/shared/index.js'\nimport { useForm, useFormProcessing } from '../../forms/Form/index.js'\nimport { useField } from '../../forms/useField/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { EditDepthProvider } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { UploadControlsProvider, useUploadControls } from '../../providers/UploadControls/index.js'\nimport { useUploadEdits } from '../../providers/UploadEdits/index.js'\nimport { Button } from '../Button/index.js'\nimport { Drawer } from '../Drawer/index.js'\nimport { Dropzone } from '../Dropzone/index.js'\nimport { EditUpload } from '../EditUpload/index.js'\nimport './index.scss'\nimport { FileDetails } from '../FileDetails/index.js'\nimport { PreviewSizes } from '../PreviewSizes/index.js'\nimport { Thumbnail } from '../Thumbnail/index.js'\n\nconst baseClass = 'file-field'\nexport const editDrawerSlug = 'edit-upload'\nexport const sizePreviewSlug = 'preview-sizes'\n\nconst validate = (value) => {\n if (!value && value !== undefined) {\n return 'A file is required.'\n }\n\n if (value && (!value.name || value.name === '')) {\n return 'A file name is required.'\n }\n\n return true\n}\n\ntype UploadActionsArgs = {\n readonly customActions?: React.ReactNode[]\n readonly enableAdjustments: boolean\n readonly enablePreviewSizes: boolean\n readonly mimeType: string\n}\n\nexport const UploadActions = ({\n customActions,\n enableAdjustments,\n enablePreviewSizes,\n mimeType,\n}: UploadActionsArgs) => {\n const { t } = useTranslation()\n const { openModal } = useModal()\n\n const fileTypeIsAdjustable =\n isImage(mimeType) && mimeType !== 'image/svg+xml' && mimeType !== 'image/jxl'\n\n if (!fileTypeIsAdjustable && (!customActions || customActions.length === 0)) {\n return null\n }\n\n return (\n <div className={`${baseClass}__upload-actions`}>\n {fileTypeIsAdjustable && (\n <React.Fragment>\n {enablePreviewSizes && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__previewSizes`}\n margin={false}\n onClick={() => {\n openModal(sizePreviewSlug)\n }}\n size=\"small\"\n >\n {t('upload:previewSizes')}\n </Button>\n )}\n {enableAdjustments && (\n <Button\n buttonStyle=\"pill\"\n className={`${baseClass}__edit`}\n margin={false}\n onClick={() => {\n openModal(editDrawerSlug)\n }}\n size=\"small\"\n >\n {t('upload:editImage')}\n </Button>\n )}\n </React.Fragment>\n )}\n\n {customActions &&\n customActions.map((CustomAction, i) => {\n return <React.Fragment key={i}>{CustomAction}</React.Fragment>\n })}\n </div>\n )\n}\n\nexport type UploadProps = {\n readonly collectionSlug: string\n readonly customActions?: React.ReactNode[]\n readonly initialState?: FormState\n readonly onChange?: (file?: File) => void\n readonly uploadConfig: SanitizedCollectionConfig['upload']\n readonly UploadControls?: React.ReactNode\n}\n\nexport const Upload: React.FC<UploadProps> = (props) => {\n const { resetUploadEdits, updateUploadEdits, uploadEdits } = useUploadEdits()\n return (\n <UploadControlsProvider>\n <Upload_v4\n {...props}\n resetUploadEdits={resetUploadEdits}\n updateUploadEdits={updateUploadEdits}\n uploadEdits={uploadEdits}\n />\n </UploadControlsProvider>\n )\n}\n\nexport type UploadProps_v4 = {\n readonly resetUploadEdits?: () => void\n readonly updateUploadEdits?: (args: UploadEdits) => void\n readonly uploadEdits?: UploadEdits\n} & UploadProps\n\nexport const Upload_v4: React.FC<UploadProps_v4> = (props) => {\n const {\n collectionSlug,\n customActions,\n initialState,\n onChange,\n resetUploadEdits,\n updateUploadEdits,\n uploadConfig,\n UploadControls,\n uploadEdits,\n } = props\n\n const {\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n uploadControlFile,\n uploadControlFileName,\n uploadControlFileUrl,\n } = useUploadControls()\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n } = useConfig()\n\n const { t } = useTranslation()\n const { setModified } = useForm()\n const { id, data, docPermissions, setUploadStatus } = useDocumentInfo()\n const isFormSubmitting = useFormProcessing()\n const { errorMessage, setValue, showError, value } = useField<File>({\n path: 'file',\n validate,\n })\n\n const [fileSrc, setFileSrc] = useState<null | string>(null)\n const [removedFile, setRemovedFile] = useState(false)\n const [filename, setFilename] = useState<string>(value?.name || '')\n const [showUrlInput, setShowUrlInput] = useState(false)\n const [fileUrl, setFileUrl] = useState<string>('')\n\n const urlInputRef = useRef<HTMLInputElement>(null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n const useServerSideFetch =\n typeof uploadConfig?.pasteURL === 'object' && uploadConfig.pasteURL.allowList?.length > 0\n\n const handleFileChange = useCallback(\n ({ file, isNewFile = true }: { file: File | null; isNewFile?: boolean }) => {\n if (isNewFile && file instanceof File) {\n setFileSrc(URL.createObjectURL(file))\n }\n\n setValue(file)\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n\n if (typeof onChange === 'function') {\n onChange(file)\n }\n },\n [onChange, setValue, setUploadControlFile, setUploadControlFileName, setUploadControlFileUrl],\n )\n\n const renameFile = (fileToChange: File, newName: string): File => {\n // Creating a new File object with updated properties\n const newFile = new File([fileToChange], newName, {\n type: fileToChange.type,\n lastModified: fileToChange.lastModified,\n })\n return newFile\n }\n\n const handleFileNameChange = React.useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n const updatedFileName = e.target.value\n\n if (value) {\n handleFileChange({ file: renameFile(value, updatedFileName), isNewFile: false })\n setFilename(updatedFileName)\n }\n },\n [handleFileChange, value],\n )\n\n const handleFileSelection = useCallback(\n (files: FileList) => {\n const fileToUpload = files?.[0]\n handleFileChange({ file: fileToUpload })\n },\n [handleFileChange],\n )\n\n const handleFileRemoval = useCallback(() => {\n setRemovedFile(true)\n handleFileChange({ file: null })\n setFileSrc('')\n setFileUrl('')\n resetUploadEdits()\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFileName(null)\n setUploadControlFile(null)\n }, [\n handleFileChange,\n resetUploadEdits,\n setUploadControlFile,\n setUploadControlFileName,\n setUploadControlFileUrl,\n ])\n\n const onEditsSave = useCallback(\n (args: UploadEdits) => {\n setModified(true)\n updateUploadEdits(args)\n },\n [setModified, updateUploadEdits],\n )\n\n const handleUrlSubmit = useCallback(async () => {\n if (!fileUrl || uploadConfig?.pasteURL === false) {\n return\n }\n\n setUploadStatus('uploading')\n try {\n // Attempt client-side fetch\n const clientResponse = await fetch(fileUrl)\n\n if (!clientResponse.ok) {\n throw new Error(`Fetch failed with status: ${clientResponse.status}`)\n }\n\n const blob = await clientResponse.blob()\n const fileName = uploadControlFileName || decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n return // Exit if client-side fetch succeeds\n } catch (_clientError) {\n if (!useServerSideFetch) {\n // If server-side fetch is not enabled, show client-side error\n toast.error('Failed to fetch the file.')\n setUploadStatus('failed')\n return\n }\n }\n\n // Attempt server-side fetch if client-side fetch fails and useServerSideFetch is true\n try {\n const pasteURL = `/${collectionSlug}/paste-url${id ? `/${id}?` : '?'}src=${encodeURIComponent(fileUrl)}`\n const serverResponse = await fetch(`${serverURL}${api}${pasteURL}`)\n\n if (!serverResponse.ok) {\n throw new Error(`Fetch failed with status: ${serverResponse.status}`)\n }\n\n const blob = await serverResponse.blob()\n const fileName = decodeURIComponent(fileUrl.split('/').pop() || '')\n const file = new File([blob], fileName, { type: blob.type })\n\n handleFileChange({ file })\n setUploadStatus('idle')\n } catch (_serverError) {\n toast.error('The provided URL is not allowed.')\n setUploadStatus('failed')\n }\n }, [\n api,\n collectionSlug,\n fileUrl,\n handleFileChange,\n id,\n serverURL,\n setUploadStatus,\n uploadConfig,\n uploadControlFileName,\n useServerSideFetch,\n ])\n\n useEffect(() => {\n if (initialState?.file?.value instanceof File) {\n setFileSrc(URL.createObjectURL(initialState.file.value))\n setRemovedFile(false)\n }\n }, [initialState])\n\n useEffect(() => {\n if (showUrlInput && urlInputRef.current) {\n // urlInputRef.current.focus() // Focus on the remote-url input field when showUrlInput is true\n }\n }, [showUrlInput])\n\n useEffect(() => {\n if (isFormSubmitting) {\n setRemovedFile(false)\n }\n }, [isFormSubmitting])\n\n const canRemoveUpload = docPermissions?.update\n\n const hasImageSizes = uploadConfig?.imageSizes?.length > 0\n const hasResizeOptions = Boolean(uploadConfig?.resizeOptions)\n // Explicity check if set to true, default is undefined\n const focalPointEnabled = uploadConfig?.focalPoint === true\n\n const { crop: showCrop = true, focalPoint = true } = uploadConfig\n\n const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions || focalPointEnabled)\n\n const acceptMimeTypes = uploadConfig.mimeTypes?.join(', ')\n\n const imageCacheTag = uploadConfig?.cacheTags && data?.updatedAt\n\n useEffect(() => {\n const handleControlFileUrl = async () => {\n if (uploadControlFileUrl) {\n setFileUrl(uploadControlFileUrl)\n await handleUrlSubmit()\n }\n }\n\n void handleControlFileUrl()\n }, [uploadControlFileUrl, handleUrlSubmit])\n\n useEffect(() => {\n const handleControlFile = () => {\n if (uploadControlFile) {\n handleFileChange({ file: uploadControlFile })\n }\n }\n\n void handleControlFile()\n }, [uploadControlFile, handleFileChange])\n\n return (\n <div className={[fieldBaseClass, baseClass].filter(Boolean).join(' ')}>\n <FieldError message={errorMessage} showError={showError} />\n {data && data.filename && !removedFile && (\n <FileDetails\n collectionSlug={collectionSlug}\n customUploadActions={customActions}\n doc={data}\n enableAdjustments={showCrop || showFocalPoint}\n handleRemove={canRemoveUpload ? handleFileRemoval : undefined}\n hasImageSizes={hasImageSizes}\n hideRemoveFile={uploadConfig.hideRemoveFile}\n imageCacheTag={imageCacheTag}\n uploadConfig={uploadConfig}\n />\n )}\n {((!uploadConfig.hideFileInputOnCreate && !data?.filename) || removedFile) && (\n <div className={`${baseClass}__upload`}>\n {!value && !showUrlInput && (\n <Dropzone onChange={handleFileSelection}>\n <div className={`${baseClass}__dropzoneContent`}>\n <div className={`${baseClass}__dropzoneButtons`}>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n if (inputRef.current) {\n inputRef.current.click()\n }\n }}\n size=\"small\"\n >\n {t('upload:selectFile')}\n </Button>\n <input\n accept={acceptMimeTypes}\n aria-hidden=\"true\"\n className={`${baseClass}__hidden-input`}\n hidden\n onChange={(e) => {\n if (e.target.files && e.target.files.length > 0) {\n handleFileSelection(e.target.files)\n }\n }}\n ref={inputRef}\n type=\"file\"\n />\n {uploadConfig?.pasteURL !== false && (\n <Fragment>\n <span className={`${baseClass}__orText`}>{t('general:or')}</span>\n <Button\n buttonStyle=\"pill\"\n onClick={() => {\n setShowUrlInput(true)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n size=\"small\"\n >\n {t('upload:pasteURL')}\n </Button>\n </Fragment>\n )}\n\n {UploadControls ? UploadControls : null}\n </div>\n <p className={`${baseClass}__dragAndDropText`}>\n {t('general:or')} {t('upload:dragAndDrop')}\n </p>\n </div>\n </Dropzone>\n )}\n {showUrlInput && (\n <React.Fragment>\n <div className={`${baseClass}__remote-file-wrap`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__remote-file`}\n onChange={(e) => {\n setFileUrl(e.target.value)\n }}\n ref={urlInputRef}\n title={fileUrl}\n type=\"text\"\n value={fileUrl}\n />\n <div className={`${baseClass}__add-file-wrap`}>\n <button\n className={`${baseClass}__add-file`}\n onClick={() => {\n void handleUrlSubmit()\n }}\n type=\"button\"\n >\n {t('upload:addFile')}\n </button>\n </div>\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() => {\n setShowUrlInput(false)\n setUploadControlFileUrl('')\n setUploadControlFile(null)\n setUploadControlFileName(null)\n }}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n {value && fileSrc && (\n <React.Fragment>\n <div className={`${baseClass}__thumbnail-wrap`}>\n <Thumbnail\n collectionSlug={collectionSlug}\n fileSrc={isImage(value.type) ? fileSrc : null}\n />\n </div>\n <div className={`${baseClass}__file-adjustments`}>\n {/* eslint-disable-next-line jsx-a11y/control-has-associated-label */}\n <input\n className={`${baseClass}__filename`}\n onChange={handleFileNameChange}\n title={filename || value.name}\n type=\"text\"\n value={filename || value.name}\n />\n <UploadActions\n customActions={customActions}\n enableAdjustments={showCrop || showFocalPoint}\n enablePreviewSizes={hasImageSizes && data?.filename && !removedFile}\n mimeType={value.type}\n />\n </div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={handleFileRemoval}\n round\n tooltip={t('general:cancel')}\n />\n </React.Fragment>\n )}\n </div>\n )}\n {(value || data?.filename) && (\n <EditDepthProvider>\n <Drawer Header={null} slug={editDrawerSlug}>\n <EditUpload\n fileName={value?.name || data?.filename}\n fileSrc={data?.url || fileSrc}\n imageCacheTag={imageCacheTag}\n initialCrop={uploadEdits?.crop ?? undefined}\n initialFocalPoint={{\n x: uploadEdits?.focalPoint?.x || data?.focalX || 50,\n y: uploadEdits?.focalPoint?.y || data?.focalY || 50,\n }}\n onSave={onEditsSave}\n showCrop={showCrop}\n showFocalPoint={showFocalPoint}\n />\n </Drawer>\n </EditDepthProvider>\n )}\n {data && hasImageSizes && (\n <Drawer\n className={`${baseClass}__previewDrawer`}\n hoverTitle\n slug={sizePreviewSlug}\n title={t('upload:sizesFor', { label: data.filename })}\n >\n <PreviewSizes doc={data} imageCacheTag={imageCacheTag} uploadConfig={uploadConfig} />\n </Drawer>\n )}\n </div>\n )\n}\n"],"names":["useModal","isImage","React","Fragment","useCallback","useEffect","useRef","useState","toast","FieldError","fieldBaseClass","useForm","useFormProcessing","useField","useConfig","useDocumentInfo","EditDepthProvider","useTranslation","UploadControlsProvider","useUploadControls","useUploadEdits","Button","Drawer","Dropzone","EditUpload","FileDetails","PreviewSizes","Thumbnail","baseClass","editDrawerSlug","sizePreviewSlug","validate","value","undefined","name","UploadActions","customActions","enableAdjustments","enablePreviewSizes","mimeType","t","openModal","fileTypeIsAdjustable","length","div","className","buttonStyle","margin","onClick","size","map","CustomAction","i","Upload","props","resetUploadEdits","updateUploadEdits","uploadEdits","Upload_v4","collectionSlug","initialState","onChange","uploadConfig","UploadControls","setUploadControlFile","setUploadControlFileName","setUploadControlFileUrl","uploadControlFile","uploadControlFileName","uploadControlFileUrl","config","routes","api","serverURL","setModified","id","data","docPermissions","setUploadStatus","isFormSubmitting","errorMessage","setValue","showError","path","fileSrc","setFileSrc","removedFile","setRemovedFile","filename","setFilename","showUrlInput","setShowUrlInput","fileUrl","setFileUrl","urlInputRef","inputRef","useServerSideFetch","pasteURL","allowList","handleFileChange","file","isNewFile","File","URL","createObjectURL","renameFile","fileToChange","newName","newFile","type","lastModified","handleFileNameChange","e","updatedFileName","target","handleFileSelection","files","fileToUpload","handleFileRemoval","onEditsSave","args","handleUrlSubmit","clientResponse","fetch","ok","Error","status","blob","fileName","decodeURIComponent","split","pop","_clientError","error","encodeURIComponent","serverResponse","_serverError","current","canRemoveUpload","update","hasImageSizes","imageSizes","hasResizeOptions","Boolean","resizeOptions","focalPointEnabled","focalPoint","crop","showCrop","showFocalPoint","acceptMimeTypes","mimeTypes","join","imageCacheTag","cacheTags","updatedAt","handleControlFileUrl","handleControlFile","filter","message","customUploadActions","doc","handleRemove","hideRemoveFile","hideFileInputOnCreate","click","input","accept","aria-hidden","hidden","ref","span","p","title","button","icon","iconStyle","round","tooltip","Header","slug","url","initialCrop","initialFocalPoint","x","focalX","y","focalY","onSave","hoverTitle","label"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { NumberFilterProps as Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-number'\n\nexport const NumberFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin, hasMany },\n onChange,\n operator,\n value,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const isMulti = ['in', 'not_in'].includes(operator) || hasMany\n\n const [valueToRender, setValueToRender] = React.useState<\n { id: string; label: string; value: { value: number } }[]\n >([])\n\n const onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (isMulti) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => Number(option.value?.value || option.value))\n } else {\n newValue = [Number(selectedOption.value?.value || selectedOption.value)]\n }\n }\n\n onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n if (Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as any)?.value || val,\n },\n }\n }),\n )\n } else {\n setValueToRender([])\n }\n }, [value])\n\n const placeholder = getTranslation(admin?.placeholder, i18n) || t('general:enterAValue')\n\n return isMulti ? (\n <ReactSelect\n disabled={disabled}\n isClearable\n isCreatable\n isMulti={isMulti}\n isSortable\n numberOnly\n onChange={onSelect}\n options={[]}\n placeholder={placeholder}\n value={valueToRender || []}\n />\n ) : (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n type=\"number\"\n value={value as number}\n />\n )\n}\n"],"names":["getTranslation","React","useTranslation","ReactSelect","baseClass","NumberFilter","props","disabled","field","admin","hasMany","onChange","operator","value","i18n","t","isMulti","includes","valueToRender","setValueToRender","useState","onSelect","useCallback","selectedOption","newValue","Array","isArray","map","option","Number","useEffect","val","index","id","label","toString","placeholder","isClearable","isCreatable","isSortable","numberOnly","options","input","className","e","target","type"],"mappings":"AAAA;;AACA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAIzB,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,eAAgC,CAACC;IAC5C,MAAM,EACJC,QAAQ,EACRC,OAAO,EAAEC,KAAK,EAAEC,OAAO,EAAE,EACzBC,QAAQ,EACRC,QAAQ,EACRC,KAAK,EACN,GAAGP;IAEJ,MAAM,EAAEQ,IAAI,EAAEC,CAAC,EAAE,GAAGb;IAEpB,MAAMc,UAAU;QAAC;QAAM;KAAS,CAACC,QAAQ,CAACL,aAAaF;IAEvD,MAAM,CAACQ,eAAeC,iBAAiB,GAAGlB,MAAMmB,QAAQ,CAEtD,EAAE;IAEJ,MAAMC,WAAWpB,MAAMqB,WAAW,CAChC,CAACC;QACC,IAAIC;QACJ,IAAI,CAACD,gBAAgB;YACnBC,WAAW,EAAE;QACf,OAAO,IAAIR,SAAS;YAClB,IAAIS,MAAMC,OAAO,CAACH,iBAAiB;gBACjCC,WAAWD,eAAeI,GAAG,CAAC,CAACC,SAAWC,OAAOD,OAAOf,KAAK,EAAEA,SAASe,OAAOf,KAAK;YACtF,OAAO;gBACLW,WAAW;oBAACK,OAAON,eAAeV,KAAK,EAAEA,SAASU,eAAeV,KAAK;iBAAE;YAC1E;QACF;QAEAF,SAASa;IACX,GACA;QAACR;QAASL;KAAS;IAGrBV,MAAM6B,SAAS,CAAC;QACd,IAAIL,MAAMC,OAAO,CAACb,QAAQ;YACxBM,iBACEN,MAAMc,GAAG,CAAC,CAACI,KAAKC;gBACd,OAAO;oBACLC,IAAI,GAAGF,MAAMC,OAAO;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { NumberFilterProps as Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-number'\n\nexport const NumberFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin, hasMany },\n onChange,\n operator,\n value,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const isMulti = ['in', 'not_in'].includes(operator) || hasMany\n\n const [valueToRender, setValueToRender] = React.useState<\n { id: string; label: string; value: { value: number } }[]\n >([])\n\n const onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (isMulti) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => Number(option.value?.value || option.value))\n } else {\n newValue = [Number(selectedOption.value?.value || selectedOption.value)]\n }\n }\n\n onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n if (Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as any)?.value || val,\n },\n }\n }),\n )\n } else {\n setValueToRender([])\n }\n }, [value])\n\n const placeholder = getTranslation(admin?.placeholder, i18n) || t('general:enterAValue')\n\n return isMulti ? (\n <ReactSelect\n disabled={disabled}\n isClearable\n isCreatable\n isMulti={isMulti}\n isSortable\n numberOnly\n onChange={onSelect}\n options={[]}\n placeholder={placeholder}\n value={valueToRender || []}\n />\n ) : (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n type=\"number\"\n value={value as number}\n />\n )\n}\n"],"names":["getTranslation","React","useTranslation","ReactSelect","baseClass","NumberFilter","props","disabled","field","admin","hasMany","onChange","operator","value","i18n","t","isMulti","includes","valueToRender","setValueToRender","useState","onSelect","useCallback","selectedOption","newValue","Array","isArray","map","option","Number","useEffect","val","index","id","label","toString","placeholder","isClearable","isCreatable","isSortable","numberOnly","options","input","className","e","target","type"],"mappings":"AAAA;;AACA,SAASA,cAAc,QAAQ,2BAA0B;AACzD,OAAOC,WAAW,QAAO;AAIzB,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,eAAgC,CAACC;IAC5C,MAAM,EACJC,QAAQ,EACRC,OAAO,EAAEC,KAAK,EAAEC,OAAO,EAAE,EACzBC,QAAQ,EACRC,QAAQ,EACRC,KAAK,EACN,GAAGP;IAEJ,MAAM,EAAEQ,IAAI,EAAEC,CAAC,EAAE,GAAGb;IAEpB,MAAMc,UAAU;QAAC;QAAM;KAAS,CAACC,QAAQ,CAACL,aAAaF;IAEvD,MAAM,CAACQ,eAAeC,iBAAiB,GAAGlB,MAAMmB,QAAQ,CAEtD,EAAE;IAEJ,MAAMC,WAAWpB,MAAMqB,WAAW,CAChC,CAACC;QACC,IAAIC;QACJ,IAAI,CAACD,gBAAgB;YACnBC,WAAW,EAAE;QACf,OAAO,IAAIR,SAAS;YAClB,IAAIS,MAAMC,OAAO,CAACH,iBAAiB;gBACjCC,WAAWD,eAAeI,GAAG,CAAC,CAACC,SAAWC,OAAOD,OAAOf,KAAK,EAAEA,SAASe,OAAOf,KAAK;YACtF,OAAO;gBACLW,WAAW;oBAACK,OAAON,eAAeV,KAAK,EAAEA,SAASU,eAAeV,KAAK;iBAAE;YAC1E;QACF;QAEAF,SAASa;IACX,GACA;QAACR;QAASL;KAAS;IAGrBV,MAAM6B,SAAS,CAAC;QACd,IAAIL,MAAMC,OAAO,CAACb,QAAQ;YACxBM,iBACEN,MAAMc,GAAG,CAAC,CAACI,KAAKC;gBACd,OAAO;oBACLC,IAAI,GAAGF,MAAMC,OAAO;oBAAE,mEAAmE;oBACzFE,OAAO,GAAGH,KAAK;oBACflB,OAAO;wBACLsB,UAAU,IAAM,GAAGJ,MAAMC,OAAO;wBAChCnB,OAAO,AAACkB,KAAalB,SAASkB;oBAChC;gBACF;YACF;QAEJ,OAAO;YACLZ,iBAAiB,EAAE;QACrB;IACF,GAAG;QAACN;KAAM;IAEV,MAAMuB,cAAcpC,eAAeS,OAAO2B,aAAatB,SAASC,EAAE;IAElE,OAAOC,wBACL,KAACb;QACCI,UAAUA;QACV8B,WAAW;QACXC,WAAW;QACXtB,SAASA;QACTuB,UAAU;QACVC,UAAU;QACV7B,UAAUU;QACVoB,SAAS,EAAE;QACXL,aAAaA;QACbvB,OAAOK,iBAAiB,EAAE;uBAG5B,KAACwB;QACCC,WAAWvC;QACXG,UAAUA;QACVI,UAAU,CAACiC,IAAMjC,SAASiC,EAAEC,MAAM,CAAChC,KAAK;QACxCuB,aAAaA;QACbU,MAAK;QACLjC,OAAOA;;AAGb,EAAC"}
|
|
@@ -113,11 +113,11 @@ export const RelationshipFilter = (props)=>{
|
|
|
113
113
|
}
|
|
114
114
|
} catch (e) {
|
|
115
115
|
if (!abortController.signal.aborted) {
|
|
116
|
-
console.error(e)
|
|
117
|
-
;
|
|
116
|
+
console.error(e);
|
|
118
117
|
}
|
|
119
118
|
}
|
|
120
119
|
}
|
|
120
|
+
// eslint-disable-line no-console
|
|
121
121
|
setHasLoadedFirstOptions(true);
|
|
122
122
|
});
|
|
123
123
|
const handleScrollToBottom = React.useCallback(()=>{
|
|
@@ -270,13 +270,12 @@ export const RelationshipFilter = (props)=>{
|
|
|
270
270
|
if (controller.signal) {
|
|
271
271
|
try {
|
|
272
272
|
controller.abort();
|
|
273
|
-
} catch (_err) {
|
|
274
|
-
// swallow error
|
|
275
|
-
}
|
|
273
|
+
} catch (_err) {}
|
|
276
274
|
}
|
|
277
275
|
});
|
|
278
276
|
};
|
|
279
|
-
},
|
|
277
|
+
}, // swallow error
|
|
278
|
+
[
|
|
280
279
|
i18n,
|
|
281
280
|
relationTo,
|
|
282
281
|
debouncedSearch,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { RelationshipFilterProps as Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useLocale } from '../../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport optionsReducer from './optionsReducer.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin = {}, hasMany, relationTo },\n filterOptions,\n onChange,\n value,\n } = props\n\n const placeholder = 'placeholder' in admin ? admin?.placeholder : undefined\n const isSortable = admin?.isSortable\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const debouncedSearch = useDebounce(search, 300)\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const { i18n, t } = useTranslation()\n const locale = useLocale()\n\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n\n const loadedRelationships = React.useRef<\n Map<\n string,\n {\n hasLoadedAll: boolean\n nextPage: number\n }\n >\n >(\n new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n ),\n )\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation })\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadOptions = useEffectEvent(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n const loadedRelationship = loadedRelationships.current.get(relationSlug)\n\n if (relationSlug && !loadedRelationship.hasLoadedAll) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n })\n\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n\n const where: Where = {\n and: [],\n }\n\n const query = {\n depth: 0,\n limit: maxResultsPerRequest,\n locale: locale.code,\n page: loadedRelationship.nextPage,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (filterOptions && filterOptions?.[relationSlug]) {\n query.where.and.push(filterOptions[relationSlug])\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (data.nextPage) {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: false,\n nextPage: data.nextPage,\n })\n } else {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: true,\n nextPage: null,\n })\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e) // eslint-disable-line no-console\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n )\n\n const handleScrollToBottom = React.useCallback(() => {\n const relationshipToLoad = loadedRelationships.current.entries().next().value\n\n if (relationshipToLoad[0] && !relationshipToLoad[1].hasLoadedAll) {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relationshipToLoad[0],\n })\n }\n }, [])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = useCallback(\n (input: string) => {\n if (input !== search) {\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n\n const relationSlugs = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n setSearch(input)\n }\n },\n [i18n, relationTo, search],\n )\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * When `relationTo` changes externally, reset the options and reload them from scratch\n * The `loadOptions` dependency is a useEffectEvent which has no dependencies of its own\n * This means we can safely depend on it without it triggering this effect to run\n * This is useful because this effect should _only_ run when `relationTo` changes\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relations.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n setHasLoadedFirstOptions(false)\n\n const abortControllers: AbortController[] = []\n\n relations.forEach((relation) => {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relation,\n })\n\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) {\n try {\n controller.abort()\n } catch (_err) {\n // swallow error\n }\n }\n })\n }\n }, [i18n, relationTo, debouncedSearch, filterOptions])\n\n /**\n * Load any other options that might exist in the value that were not loaded already\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n void addOptionByID(value[i].value, value[i].relationTo)\n } else {\n void addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n void addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {errorLoading ? (\n <div className={`${baseClass}__error-loading`}>{errorLoading}</div>\n ) : (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n\n if (hasMany && Array.isArray(selected)) {\n onChange(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option?.relationTo,\n value: option?.value,\n }\n }\n\n return option?.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={handleScrollToBottom}\n options={options}\n placeholder={placeholder}\n value={valueToRender}\n />\n )}\n </div>\n )\n}\n"],"names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useEffectEvent","useConfig","useLocale","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","hasMany","relationTo","filterOptions","onChange","value","placeholder","undefined","isSortable","config","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","debouncedSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","i18n","t","locale","relationSlugs","loadedRelationships","useRef","Map","map","relation","hasLoadedAll","nextPage","addOptions","data","collection","collectionSlug","type","loadOptions","abortController","relationSlug","loadedRelationship","current","get","fieldToSearch","useAsTitle","where","and","query","depth","limit","code","page","select","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","set","e","aborted","console","error","handleScrollToBottom","relationshipToLoad","entries","next","AbortController","findOptionsByValue","val","matchedOption","forEach","opt","some","subOpt","find","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","filter","Boolean","join","valueToRender","div","className","isMulti","selected","onInputChange","onMenuScrollToBottom"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type { PaginatedDocs, Where } from 'payload'\n\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useEffect, useReducer, useState } from 'react'\n\nimport type { Option } from '../../../ReactSelect/types.js'\nimport type { RelationshipFilterProps as Props, ValueWithRelation } from './types.js'\n\nimport { useDebounce } from '../../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../../hooks/useEffectEvent.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useLocale } from '../../../../providers/Locale/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport optionsReducer from './optionsReducer.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-relationship'\n\nconst maxResultsPerRequest = 10\n\nexport const RelationshipFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin = {}, hasMany, relationTo },\n filterOptions,\n onChange,\n value,\n } = props\n\n const placeholder = 'placeholder' in admin ? admin?.placeholder : undefined\n const isSortable = admin?.isSortable\n\n const {\n config: {\n routes: { api },\n serverURL,\n },\n getEntityConfig,\n } = useConfig()\n\n const hasMultipleRelations = Array.isArray(relationTo)\n const [options, dispatchOptions] = useReducer(optionsReducer, [])\n const [search, setSearch] = useState('')\n const debouncedSearch = useDebounce(search, 300)\n const [errorLoading, setErrorLoading] = useState('')\n const [hasLoadedFirstOptions, setHasLoadedFirstOptions] = useState(false)\n const { i18n, t } = useTranslation()\n const locale = useLocale()\n\n const relationSlugs = hasMultipleRelations ? relationTo : [relationTo]\n\n const loadedRelationships = React.useRef<\n Map<\n string,\n {\n hasLoadedAll: boolean\n nextPage: number\n }\n >\n >(\n new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n ),\n )\n\n const addOptions = useCallback(\n (data, relation) => {\n const collection = getEntityConfig({ collectionSlug: relation })\n dispatchOptions({ type: 'ADD', collection, data, hasMultipleRelations, i18n, relation })\n },\n [hasMultipleRelations, i18n, getEntityConfig],\n )\n\n const loadOptions = useEffectEvent(\n async ({\n abortController,\n relationSlug,\n }: {\n abortController: AbortController\n relationSlug: string\n }) => {\n const loadedRelationship = loadedRelationships.current.get(relationSlug)\n\n if (relationSlug && !loadedRelationship.hasLoadedAll) {\n const collection = getEntityConfig({\n collectionSlug: relationSlug,\n })\n\n const fieldToSearch = collection?.admin?.useAsTitle || 'id'\n\n const where: Where = {\n and: [],\n }\n\n const query = {\n depth: 0,\n limit: maxResultsPerRequest,\n locale: locale.code,\n page: loadedRelationship.nextPage,\n select: {\n [fieldToSearch]: true,\n },\n where,\n }\n\n if (filterOptions && filterOptions?.[relationSlug]) {\n query.where.and.push(filterOptions[relationSlug])\n }\n\n if (debouncedSearch) {\n query.where.and.push({\n [fieldToSearch]: {\n like: debouncedSearch,\n },\n })\n }\n\n try {\n const response = await fetch(\n `${serverURL}${api}/${relationSlug}${qs.stringify(query, { addQueryPrefix: true })}`,\n {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n signal: abortController.signal,\n },\n )\n\n if (response.ok) {\n const data: PaginatedDocs = await response.json()\n if (data.docs.length > 0) {\n addOptions(data, relationSlug)\n\n if (data.nextPage) {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: false,\n nextPage: data.nextPage,\n })\n } else {\n loadedRelationships.current.set(relationSlug, {\n hasLoadedAll: true,\n nextPage: null,\n })\n }\n }\n } else {\n setErrorLoading(t('error:unspecific'))\n }\n } catch (e) {\n if (!abortController.signal.aborted) {\n console.error(e) // eslint-disable-line no-console\n }\n }\n }\n\n setHasLoadedFirstOptions(true)\n },\n )\n\n const handleScrollToBottom = React.useCallback(() => {\n const relationshipToLoad = loadedRelationships.current.entries().next().value\n\n if (relationshipToLoad[0] && !relationshipToLoad[1].hasLoadedAll) {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relationshipToLoad[0],\n })\n }\n }, [])\n\n const findOptionsByValue = useCallback((): Option | Option[] => {\n if (value) {\n if (hasMany) {\n if (Array.isArray(value)) {\n return value.map((val) => {\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n options.forEach((opt) => {\n if (opt.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == val.value) {\n matchedOption = subOpt\n return true\n }\n\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == val)\n })\n }\n\n return undefined\n }\n\n if (hasMultipleRelations) {\n let matchedOption: Option\n\n const valueWithRelation = value as ValueWithRelation\n\n options.forEach((opt) => {\n if (opt?.options) {\n opt.options.some((subOpt) => {\n if (subOpt?.value == valueWithRelation.value) {\n matchedOption = subOpt\n return true\n }\n return false\n })\n }\n })\n\n return matchedOption\n }\n\n return options.find((opt) => opt.value == value)\n }\n\n return undefined\n }, [hasMany, hasMultipleRelations, value, options])\n\n const handleInputChange = useCallback(\n (input: string) => {\n if (input !== search) {\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n\n const relationSlugs = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relationSlugs.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n setSearch(input)\n }\n },\n [i18n, relationTo, search],\n )\n\n const addOptionByID = useCallback(\n async (id, relation) => {\n if (!errorLoading && id !== 'null' && id && relation) {\n const response = await fetch(`${serverURL}${api}/${relation}/${id}?depth=0`, {\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n },\n })\n\n if (response.ok) {\n const data = await response.json()\n addOptions({ docs: [data] }, relation)\n } else {\n // eslint-disable-next-line no-console\n console.error(t('error:loadingDocument', { id }))\n }\n }\n },\n [i18n, addOptions, api, errorLoading, serverURL, t],\n )\n\n /**\n * When `relationTo` changes externally, reset the options and reload them from scratch\n * The `loadOptions` dependency is a useEffectEvent which has no dependencies of its own\n * This means we can safely depend on it without it triggering this effect to run\n * This is useful because this effect should _only_ run when `relationTo` changes\n */\n useEffect(() => {\n const relations = Array.isArray(relationTo) ? relationTo : [relationTo]\n\n loadedRelationships.current = new Map(\n relations.map((relation) => [\n relation,\n {\n hasLoadedAll: false,\n nextPage: 1,\n },\n ]),\n )\n\n dispatchOptions({ type: 'CLEAR', i18n, required: false })\n setHasLoadedFirstOptions(false)\n\n const abortControllers: AbortController[] = []\n\n relations.forEach((relation) => {\n const abortController = new AbortController()\n\n void loadOptions({\n abortController,\n relationSlug: relation,\n })\n\n abortControllers.push(abortController)\n })\n\n return () => {\n abortControllers.forEach((controller) => {\n if (controller.signal) {\n try {\n controller.abort()\n } catch (_err) {\n // swallow error\n }\n }\n })\n }\n }, [i18n, relationTo, debouncedSearch, filterOptions])\n\n /**\n * Load any other options that might exist in the value that were not loaded already\n */\n useEffect(() => {\n if (value && hasLoadedFirstOptions) {\n if (hasMany) {\n const matchedOptions = findOptionsByValue()\n\n ;((matchedOptions as Option[]) || []).forEach((option, i) => {\n if (!option) {\n if (hasMultipleRelations) {\n void addOptionByID(value[i].value, value[i].relationTo)\n } else {\n void addOptionByID(value[i], relationTo)\n }\n }\n })\n } else {\n const matchedOption = findOptionsByValue()\n\n if (!matchedOption) {\n if (hasMultipleRelations) {\n const valueWithRelation = value as ValueWithRelation\n void addOptionByID(valueWithRelation.value, valueWithRelation.relationTo)\n } else {\n void addOptionByID(value, relationTo)\n }\n }\n }\n }\n }, [\n addOptionByID,\n findOptionsByValue,\n hasMany,\n hasMultipleRelations,\n relationTo,\n value,\n hasLoadedFirstOptions,\n ])\n\n const classes = ['field-type', baseClass, errorLoading && 'error-loading']\n .filter(Boolean)\n .join(' ')\n\n const valueToRender = (findOptionsByValue() || value) as Option\n\n return (\n <div className={classes}>\n {errorLoading ? (\n <div className={`${baseClass}__error-loading`}>{errorLoading}</div>\n ) : (\n <ReactSelect\n disabled={disabled}\n isMulti={hasMany}\n isSortable={isSortable}\n onChange={(selected) => {\n if (!selected) {\n onChange(null)\n return\n }\n\n if (hasMany && Array.isArray(selected)) {\n onChange(\n selected\n ? selected.map((option) => {\n if (hasMultipleRelations) {\n return {\n relationTo: option?.relationTo,\n value: option?.value,\n }\n }\n\n return option?.value\n })\n : null,\n )\n } else if (hasMultipleRelations && !Array.isArray(selected)) {\n onChange({\n relationTo: selected?.relationTo,\n value: selected?.value,\n })\n } else if (!Array.isArray(selected)) {\n onChange(selected?.value)\n }\n }}\n onInputChange={handleInputChange}\n onMenuScrollToBottom={handleScrollToBottom}\n options={options}\n placeholder={placeholder}\n value={valueToRender}\n />\n )}\n </div>\n )\n}\n"],"names":["qs","React","useCallback","useEffect","useReducer","useState","useDebounce","useEffectEvent","useConfig","useLocale","useTranslation","ReactSelect","optionsReducer","baseClass","maxResultsPerRequest","RelationshipFilter","props","disabled","field","admin","hasMany","relationTo","filterOptions","onChange","value","placeholder","undefined","isSortable","config","routes","api","serverURL","getEntityConfig","hasMultipleRelations","Array","isArray","options","dispatchOptions","search","setSearch","debouncedSearch","errorLoading","setErrorLoading","hasLoadedFirstOptions","setHasLoadedFirstOptions","i18n","t","locale","relationSlugs","loadedRelationships","useRef","Map","map","relation","hasLoadedAll","nextPage","addOptions","data","collection","collectionSlug","type","loadOptions","abortController","relationSlug","loadedRelationship","current","get","fieldToSearch","useAsTitle","where","and","query","depth","limit","code","page","select","push","like","response","fetch","stringify","addQueryPrefix","credentials","headers","language","signal","ok","json","docs","length","set","e","aborted","console","error","handleScrollToBottom","relationshipToLoad","entries","next","AbortController","findOptionsByValue","val","matchedOption","forEach","opt","some","subOpt","find","valueWithRelation","handleInputChange","input","required","addOptionByID","id","relations","abortControllers","controller","abort","_err","matchedOptions","option","i","classes","filter","Boolean","join","valueToRender","div","className","isMulti","selected","onInputChange","onMenuScrollToBottom"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Text/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { TextFilterProps as Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-text'\n\nexport const Text: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { hasMany },\n onChange,\n operator,\n value,\n } = props\n const { t } = useTranslation()\n\n const isMulti = ['in', 'not_in'].includes(operator) || hasMany\n\n const [valueToRender, setValueToRender] = React.useState<\n { id: string; label: string; value: { value: string } }[]\n >([])\n\n const onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (isMulti) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value?.value || option.value)\n } else {\n newValue = [selectedOption.value?.value || selectedOption.value]\n }\n }\n\n onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n if (Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as any)?.value || val,\n },\n }\n }),\n )\n } else {\n setValueToRender([])\n }\n }, [value])\n\n return isMulti ? (\n <ReactSelect\n disabled={disabled}\n isClearable\n isCreatable\n isMulti={isMulti}\n isSortable\n onChange={onSelect}\n options={[]}\n placeholder={t('general:enterAValue')}\n value={valueToRender || []}\n />\n ) : (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t('general:enterAValue')}\n type=\"text\"\n value={value || ''}\n />\n )\n}\n"],"names":["React","useTranslation","ReactSelect","baseClass","Text","props","disabled","field","hasMany","onChange","operator","value","t","isMulti","includes","valueToRender","setValueToRender","useState","onSelect","useCallback","selectedOption","newValue","Array","isArray","map","option","useEffect","val","index","id","label","toString","isClearable","isCreatable","isSortable","options","placeholder","input","className","e","target","type"],"mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AAIzB,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,OAAwB,CAACC;IACpC,MAAM,EACJC,QAAQ,EACRC,OAAO,EAAEC,OAAO,EAAE,EAClBC,QAAQ,EACRC,QAAQ,EACRC,KAAK,EACN,GAAGN;IACJ,MAAM,EAAEO,CAAC,EAAE,GAAGX;IAEd,MAAMY,UAAU;QAAC;QAAM;KAAS,CAACC,QAAQ,CAACJ,aAAaF;IAEvD,MAAM,CAACO,eAAeC,iBAAiB,GAAGhB,MAAMiB,QAAQ,CAEtD,EAAE;IAEJ,MAAMC,WAAWlB,MAAMmB,WAAW,CAChC,CAACC;QACC,IAAIC;QACJ,IAAI,CAACD,gBAAgB;YACnBC,WAAW,EAAE;QACf,OAAO,IAAIR,SAAS;YAClB,IAAIS,MAAMC,OAAO,CAACH,iBAAiB;gBACjCC,WAAWD,eAAeI,GAAG,CAAC,CAACC,SAAWA,OAAOd,KAAK,EAAEA,SAASc,OAAOd,KAAK;YAC/E,OAAO;gBACLU,WAAW;oBAACD,eAAeT,KAAK,EAAEA,SAASS,eAAeT,KAAK;iBAAC;YAClE;QACF;QAEAF,SAASY;IACX,GACA;QAACR;QAASJ;KAAS;IAGrBT,MAAM0B,SAAS,CAAC;QACd,IAAIJ,MAAMC,OAAO,CAACZ,QAAQ;YACxBK,iBACEL,MAAMa,GAAG,CAAC,CAACG,KAAKC;gBACd,OAAO;oBACLC,IAAI,GAAGF,MAAMC,OAAO;
|
|
1
|
+
{"version":3,"sources":["../../../../../src/elements/WhereBuilder/Condition/Text/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { TextFilterProps as Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-text'\n\nexport const Text: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { hasMany },\n onChange,\n operator,\n value,\n } = props\n const { t } = useTranslation()\n\n const isMulti = ['in', 'not_in'].includes(operator) || hasMany\n\n const [valueToRender, setValueToRender] = React.useState<\n { id: string; label: string; value: { value: string } }[]\n >([])\n\n const onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (isMulti) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => option.value?.value || option.value)\n } else {\n newValue = [selectedOption.value?.value || selectedOption.value]\n }\n }\n\n onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n if (Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as any)?.value || val,\n },\n }\n }),\n )\n } else {\n setValueToRender([])\n }\n }, [value])\n\n return isMulti ? (\n <ReactSelect\n disabled={disabled}\n isClearable\n isCreatable\n isMulti={isMulti}\n isSortable\n onChange={onSelect}\n options={[]}\n placeholder={t('general:enterAValue')}\n value={valueToRender || []}\n />\n ) : (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t('general:enterAValue')}\n type=\"text\"\n value={value || ''}\n />\n )\n}\n"],"names":["React","useTranslation","ReactSelect","baseClass","Text","props","disabled","field","hasMany","onChange","operator","value","t","isMulti","includes","valueToRender","setValueToRender","useState","onSelect","useCallback","selectedOption","newValue","Array","isArray","map","option","useEffect","val","index","id","label","toString","isClearable","isCreatable","isSortable","options","placeholder","input","className","e","target","type"],"mappings":"AAAA;;AACA,OAAOA,WAAW,QAAO;AAIzB,SAASC,cAAc,QAAQ,6CAA4C;AAC3E,SAASC,WAAW,QAAQ,gCAA+B;AAC3D,OAAO,eAAc;AAErB,MAAMC,YAAY;AAElB,OAAO,MAAMC,OAAwB,CAACC;IACpC,MAAM,EACJC,QAAQ,EACRC,OAAO,EAAEC,OAAO,EAAE,EAClBC,QAAQ,EACRC,QAAQ,EACRC,KAAK,EACN,GAAGN;IACJ,MAAM,EAAEO,CAAC,EAAE,GAAGX;IAEd,MAAMY,UAAU;QAAC;QAAM;KAAS,CAACC,QAAQ,CAACJ,aAAaF;IAEvD,MAAM,CAACO,eAAeC,iBAAiB,GAAGhB,MAAMiB,QAAQ,CAEtD,EAAE;IAEJ,MAAMC,WAAWlB,MAAMmB,WAAW,CAChC,CAACC;QACC,IAAIC;QACJ,IAAI,CAACD,gBAAgB;YACnBC,WAAW,EAAE;QACf,OAAO,IAAIR,SAAS;YAClB,IAAIS,MAAMC,OAAO,CAACH,iBAAiB;gBACjCC,WAAWD,eAAeI,GAAG,CAAC,CAACC,SAAWA,OAAOd,KAAK,EAAEA,SAASc,OAAOd,KAAK;YAC/E,OAAO;gBACLU,WAAW;oBAACD,eAAeT,KAAK,EAAEA,SAASS,eAAeT,KAAK;iBAAC;YAClE;QACF;QAEAF,SAASY;IACX,GACA;QAACR;QAASJ;KAAS;IAGrBT,MAAM0B,SAAS,CAAC;QACd,IAAIJ,MAAMC,OAAO,CAACZ,QAAQ;YACxBK,iBACEL,MAAMa,GAAG,CAAC,CAACG,KAAKC;gBACd,OAAO;oBACLC,IAAI,GAAGF,MAAMC,OAAO;oBAAE,mEAAmE;oBACzFE,OAAO,GAAGH,KAAK;oBACfhB,OAAO;wBACLoB,UAAU,IAAM,GAAGJ,MAAMC,OAAO;wBAChCjB,OAAO,AAACgB,KAAahB,SAASgB;oBAChC;gBACF;YACF;QAEJ,OAAO;YACLX,iBAAiB,EAAE;QACrB;IACF,GAAG;QAACL;KAAM;IAEV,OAAOE,wBACL,KAACX;QACCI,UAAUA;QACV0B,WAAW;QACXC,WAAW;QACXpB,SAASA;QACTqB,UAAU;QACVzB,UAAUS;QACViB,SAAS,EAAE;QACXC,aAAaxB,EAAE;QACfD,OAAOI,iBAAiB,EAAE;uBAG5B,KAACsB;QACCC,WAAWnC;QACXG,UAAUA;QACVG,UAAU,CAAC8B,IAAM9B,SAAS8B,EAAEC,MAAM,CAAC7B,KAAK;QACxCyB,aAAaxB,EAAE;QACf6B,MAAK;QACL9B,OAAOA,SAAS;;AAGtB,EAAC"}
|
|
@@ -41,9 +41,9 @@ const baseClass = 'where-builder';
|
|
|
41
41
|
if (validateWhereQuery(transformedWhere)) {
|
|
42
42
|
return transformedWhere.or;
|
|
43
43
|
}
|
|
44
|
-
console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`)
|
|
45
|
-
;
|
|
44
|
+
console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`);
|
|
46
45
|
}
|
|
46
|
+
// eslint-disable-line no-console
|
|
47
47
|
return [];
|
|
48
48
|
}, [
|
|
49
49
|
query.where
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { transformWhereQuery, validateWhereQuery } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport type { AddCondition, RemoveCondition, UpdateCondition, WhereBuilderProps } from './types.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\nimport './index.scss'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug, fields, renderedFilters, resolvedFilterOptions } =\n props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const { handleWhereChange, query } = useListQuery()\n\n const conditions = useMemo(() => {\n const whereFromSearch = query.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n\n return []\n }, [query.where])\n\n const addCondition: AddCondition = React.useCallback(\n async ({ andIndex, field, orIndex, relation }) => {\n const newConditions = [...conditions]\n\n const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value\n\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n })\n } else {\n newConditions.push({\n and: [\n {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n },\n ],\n })\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const updateCondition: UpdateCondition = React.useCallback(\n async ({ andIndex, field, operator: incomingOperator, orIndex, value }) => {\n const existingCondition = conditions[orIndex].and[andIndex]\n\n if (typeof existingCondition === 'object' && field.value) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n const newRowCondition = {\n [String(field.value)]: { [validOperator]: value },\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n await handleWhereChange({ or: newConditions })\n }\n },\n [conditions, handleWhereChange],\n )\n\n const removeCondition: RemoveCondition = React.useCallback(\n async ({ andIndex, orIndex }) => {\n const newConditions = [...conditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <p className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </p>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => {\n const compoundOrKey = `${orIndex}_${Array.isArray(or?.and) ? or.and.length : ''}`\n\n return (\n <li key={compoundOrKey}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const condition = conditions[orIndex].and[andIndex]\n const fieldPath = Object.keys(condition)[0]\n\n const operator =\n (Object.keys(condition?.[fieldPath] || {})?.[0] as Operator) || undefined\n\n const value = condition?.[fieldPath]?.[operator] || undefined\n\n return (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldPath={fieldPath}\n filterOptions={resolvedFilterOptions?.get(fieldPath)}\n operator={operator}\n orIndex={orIndex}\n reducedFields={reducedFields}\n removeCondition={removeCondition}\n RenderedFilter={renderedFilters?.get(fieldPath)}\n updateCondition={updateCondition}\n value={value}\n />\n </li>\n )\n })}\n </ul>\n </li>\n )\n })}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n if (reducedFields.length > 0) {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","transformWhereQuery","validateWhereQuery","React","useMemo","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionPluralLabel","collectionSlug","fields","renderedFilters","resolvedFilterOptions","i18n","t","permissions","fieldPermissions","collections","reducedFields","handleWhereChange","query","conditions","whereFromSearch","where","or","transformedWhere","console","warn","JSON","stringify","addCondition","useCallback","andIndex","field","orIndex","relation","newConditions","defaultOperator","type","operators","value","and","splice","String","undefined","push","updateCondition","operator","incomingOperator","existingCondition","validOperator","newRowCondition","removeCondition","length","div","className","Fragment","p","label","ul","map","compoundOrKey","Array","isArray","li","_","condition","fieldPath","Object","keys","filterOptions","get","RenderedFilter","buttonStyle","icon","iconPosition","iconStyle","onClick","find","admin","disableListFilter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { transformWhereQuery, validateWhereQuery } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport type { AddCondition, RemoveCondition, UpdateCondition, WhereBuilderProps } from './types.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\nimport './index.scss'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug, fields, renderedFilters, resolvedFilterOptions } =\n props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const { handleWhereChange, query } = useListQuery()\n\n const conditions = useMemo(() => {\n const whereFromSearch = query.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n\n return []\n }, [query.where])\n\n const addCondition: AddCondition = React.useCallback(\n async ({ andIndex, field, orIndex, relation }) => {\n const newConditions = [...conditions]\n\n const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value\n\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n })\n } else {\n newConditions.push({\n and: [\n {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n },\n ],\n })\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const updateCondition: UpdateCondition = React.useCallback(\n async ({ andIndex, field, operator: incomingOperator, orIndex, value }) => {\n const existingCondition = conditions[orIndex].and[andIndex]\n\n if (typeof existingCondition === 'object' && field.value) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n const newRowCondition = {\n [String(field.value)]: { [validOperator]: value },\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n await handleWhereChange({ or: newConditions })\n }\n },\n [conditions, handleWhereChange],\n )\n\n const removeCondition: RemoveCondition = React.useCallback(\n async ({ andIndex, orIndex }) => {\n const newConditions = [...conditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <p className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </p>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => {\n const compoundOrKey = `${orIndex}_${Array.isArray(or?.and) ? or.and.length : ''}`\n\n return (\n <li key={compoundOrKey}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const condition = conditions[orIndex].and[andIndex]\n const fieldPath = Object.keys(condition)[0]\n\n const operator =\n (Object.keys(condition?.[fieldPath] || {})?.[0] as Operator) || undefined\n\n const value = condition?.[fieldPath]?.[operator] || undefined\n\n return (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldPath={fieldPath}\n filterOptions={resolvedFilterOptions?.get(fieldPath)}\n operator={operator}\n orIndex={orIndex}\n reducedFields={reducedFields}\n removeCondition={removeCondition}\n RenderedFilter={renderedFilters?.get(fieldPath)}\n updateCondition={updateCondition}\n value={value}\n />\n </li>\n )\n })}\n </ul>\n </li>\n )\n })}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n if (reducedFields.length > 0) {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"names":["getTranslation","transformWhereQuery","validateWhereQuery","React","useMemo","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionPluralLabel","collectionSlug","fields","renderedFilters","resolvedFilterOptions","i18n","t","permissions","fieldPermissions","collections","reducedFields","handleWhereChange","query","conditions","whereFromSearch","where","or","transformedWhere","console","warn","JSON","stringify","addCondition","useCallback","andIndex","field","orIndex","relation","newConditions","defaultOperator","type","operators","value","and","splice","String","undefined","push","updateCondition","operator","incomingOperator","existingCondition","validOperator","newRowCondition","removeCondition","length","div","className","Fragment","p","label","ul","map","compoundOrKey","Array","isArray","li","_","condition","fieldPath","Object","keys","filterOptions","get","RenderedFilter","buttonStyle","icon","iconPosition","iconStyle","onClick","find","admin","disableListFilter"],"mappings":"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"}
|
|
@@ -114,7 +114,11 @@ export { SetStepNav } from '../../elements/StepNav/SetStepNav.js';
|
|
|
114
114
|
export { useStepNav } from '../../elements/StepNav/index.js';
|
|
115
115
|
export { RelationshipProvider, useListRelationships } from '../../elements/Table/RelationshipProvider/index.js';
|
|
116
116
|
export { Table } from '../../elements/Table/index.js';
|
|
117
|
-
|
|
117
|
+
/**
|
|
118
|
+
* @deprecated
|
|
119
|
+
* This export will be removed in the next major version.
|
|
120
|
+
* Use `import { Column } from 'payload'` instead.
|
|
121
|
+
*/ export { DefaultCell } from '../../elements/Table/DefaultCell/index.js';
|
|
118
122
|
export { Thumbnail } from '../../elements/Thumbnail/index.js';
|
|
119
123
|
export { Tooltip } from '../../elements/Tooltip/index.js';
|
|
120
124
|
import { toast } from 'sonner';
|
|
@@ -260,7 +264,27 @@ export { SelectMany } from '../../elements/SelectMany/index.js';
|
|
|
260
264
|
export { DefaultListView } from '../../views/List/index.js';
|
|
261
265
|
export { DefaultCollectionFolderView } from '../../views/CollectionFolder/index.js';
|
|
262
266
|
export { DefaultBrowseByFolderView } from '../../views/BrowseByFolder/index.js';
|
|
263
|
-
|
|
267
|
+
/**
|
|
268
|
+
* @deprecated
|
|
269
|
+
* This export will be removed in the next major version.
|
|
270
|
+
* Use `import type { ListViewSlots } from 'payload'` instead.
|
|
271
|
+
*/ /**
|
|
272
|
+
* @deprecated
|
|
273
|
+
* This export will be removed in the next major version.
|
|
274
|
+
* Use `import type { ListViewClientProps } from 'payload'` instead.
|
|
275
|
+
*/ /**
|
|
276
|
+
* @deprecated
|
|
277
|
+
* This export will be removed in the next major version.
|
|
278
|
+
* Use `import type { ListViewClientProps } from 'payload'` instead.
|
|
279
|
+
*/ /**
|
|
280
|
+
* @deprecated
|
|
281
|
+
* This export will be removed in the next major version.
|
|
282
|
+
* Use `import type { ListViewServerProps } from 'payload'` instead.
|
|
283
|
+
*/ /**
|
|
284
|
+
* @deprecated
|
|
285
|
+
* This export will be removed in the next major version.
|
|
286
|
+
* Use `import type { CollectionPreferences } from 'payload'` instead.
|
|
287
|
+
*/ export { DefaultEditView } from '../../views/Edit/index.js';
|
|
264
288
|
export { SetDocumentStepNav } from '../../views/Edit/SetDocumentStepNav/index.js';
|
|
265
289
|
export { SetDocumentTitle } from '../../views/Edit/SetDocumentTitle/index.js';
|
|
266
290
|
export { parseSearchParams } from '../../utilities/parseSearchParams.js';
|