@payloadcms/ui 3.38.0-internal.8afd37f → 3.38.0

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.
Files changed (41) hide show
  1. package/dist/elements/ListControls/useQueryPresets.d.ts.map +1 -1
  2. package/dist/elements/ListControls/useQueryPresets.js +3 -0
  3. package/dist/elements/ListControls/useQueryPresets.js.map +1 -1
  4. package/dist/elements/QueryPresets/fields/WhereField/index.js +1 -1
  5. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  6. package/dist/elements/WhereBuilder/reduceFields.d.ts.map +1 -1
  7. package/dist/elements/WhereBuilder/reduceFields.js +24 -2
  8. package/dist/elements/WhereBuilder/reduceFields.js.map +1 -1
  9. package/dist/exports/client/index.js +11 -11
  10. package/dist/exports/client/index.js.map +4 -4
  11. package/dist/fields/Group/index.d.ts +1 -1
  12. package/dist/fields/Group/index.d.ts.map +1 -1
  13. package/dist/fields/Group/index.js +12 -1
  14. package/dist/fields/Group/index.js.map +1 -1
  15. package/dist/fields/Join/index.js +2 -2
  16. package/dist/fields/Join/index.js.map +1 -1
  17. package/dist/fields/Relationship/index.d.ts.map +1 -1
  18. package/dist/fields/Relationship/index.js +2 -0
  19. package/dist/fields/Relationship/index.js.map +1 -1
  20. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -1
  21. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  22. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.d.ts.map +1 -1
  23. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js +29 -15
  24. package/dist/forms/fieldSchemasToFormState/calculateDefaultValues/promise.js.map +1 -1
  25. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  26. package/dist/forms/fieldSchemasToFormState/renderField.js +2 -1
  27. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  28. package/dist/utilities/buildClientFieldSchemaMap/traverseFields.d.ts.map +1 -1
  29. package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js +41 -13
  30. package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js.map +1 -1
  31. package/dist/utilities/buildFieldSchemaMap/traverseFields.d.ts.map +1 -1
  32. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +22 -2
  33. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  34. package/dist/utilities/copyDataFromLocale.d.ts.map +1 -1
  35. package/dist/utilities/copyDataFromLocale.js +3 -1
  36. package/dist/utilities/copyDataFromLocale.js.map +1 -1
  37. package/dist/utilities/sanitizeFilterOptionsQuery.d.ts +3 -0
  38. package/dist/utilities/sanitizeFilterOptionsQuery.d.ts.map +1 -0
  39. package/dist/utilities/sanitizeFilterOptionsQuery.js +18 -0
  40. package/dist/utilities/sanitizeFilterOptionsQuery.js.map +1 -0
  41. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryPresets.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/useQueryPresets.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAA;AAKzF,OAAO,KAAyC,MAAM,OAAO,CAAA;AAiB7D,eAAO,MAAM,eAAe,8DAIzB;IACD,YAAY,EAAE,WAAW,CAAA;IACzB,cAAc,EAAE,cAAc,CAAA;IAC9B,sBAAsB,EAAE,6BAA6B,CAAA;CACtD,KAAG;IACF,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAChC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,oBAAoB,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IACvC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CA4SjC,CAAA"}
1
+ {"version":3,"file":"useQueryPresets.d.ts","sourceRoot":"","sources":["../../../src/elements/ListControls/useQueryPresets.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,SAAS,CAAA;AAKzF,OAAO,KAAyC,MAAM,OAAO,CAAA;AAiB7D,eAAO,MAAM,eAAe,8DAIzB;IACD,YAAY,EAAE,WAAW,CAAA;IACzB,cAAc,EAAE,cAAc,CAAA;IAC9B,sBAAsB,EAAE,6BAA6B,CAAA;CACtD,KAAG;IACF,qBAAqB,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAA;IAClC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,iBAAiB,EAAE,OAAO,CAAA;IAC1B,oBAAoB,EAAE,MAAM,IAAI,CAAA;IAChC,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAA;IACjC,oBAAoB,EAAE,KAAK,CAAC,SAAS,EAAE,CAAA;IACvC,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CA+SjC,CAAA"}
@@ -58,6 +58,9 @@ export const useQueryPresets = ({
58
58
  });
59
59
  const filterOptions = useMemo(() => ({
60
60
  'payload-query-presets': {
61
+ isTemp: {
62
+ not_equals: true
63
+ },
61
64
  relatedCollection: {
62
65
  equals: collectionSlug
63
66
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryPresets.js","names":["useModal","getTranslation","transformColumnsToPreferences","transformColumnsToSearchParams","React","Fragment","useCallback","useMemo","toast","useConfig","useListQuery","useTranslation","ConfirmationModal","useDocumentDrawer","useListDrawer","PopupList","PopupListGroupLabel","Translation","confirmDeletePresetModalSlug","queryPresetsSlug","useQueryPresets","activePreset","collectionSlug","queryPresetPermissions","modified","query","refineListData","setModified","setQueryModified","i18n","t","openModal","config","routes","api","apiRoute","getEntityConfig","presetConfig","PresetDocumentDrawer","openDrawer","openDocumentDrawer","id","CreateNewPresetDrawer","closeDrawer","closeCreateNewDrawer","openCreateNewDrawer","filterOptions","relatedCollection","equals","ListDrawer","closeListDrawer","openListDrawer","collectionSlugs","selectedCollection","handlePresetChange","preset","columns","undefined","where","resetQueryPreset","handleDeletePreset","fetch","method","then","res","json","status","success","label","labels","singular","title","errors","forEach","error","message","_err","saveCurrentChanges","body","JSON","stringify","credentials","headers","queryPresetMenuItems","menuItems","_jsx","plural","push","Button","onClick","update","isShared","delete","_jsxs","initialData","onSave","doc","redirectAfterCreate","DeletePresetModal","elements","1","children","i18nKey","variables","confirmingLabel","heading","modalSlug","onConfirm","EditPresetDrawer","onDelete","onDuplicate","hasModifiedPreset","openPresetListDrawer","PresetListDrawer","allowCreate","disableQueryPresets","onSelect","resetPreset"],"sources":["../../../src/elements/ListControls/useQueryPresets.tsx"],"sourcesContent":["import type { CollectionSlug, QueryPreset, SanitizedCollectionPermission } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { transformColumnsToPreferences, transformColumnsToSearchParams } from 'payload/shared'\nimport React, { Fragment, useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/context.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { useDocumentDrawer } from '../DocumentDrawer/index.js'\nimport { useListDrawer } from '../ListDrawer/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { PopupListGroupLabel } from '../Popup/PopupGroupLabel/index.js'\nimport { Translation } from '../Translation/index.js'\n\nconst confirmDeletePresetModalSlug = 'confirm-delete-preset'\n\nconst queryPresetsSlug = 'payload-query-presets'\n\nexport const useQueryPresets = ({\n activePreset,\n collectionSlug,\n queryPresetPermissions,\n}: {\n activePreset: QueryPreset\n collectionSlug: CollectionSlug\n queryPresetPermissions: SanitizedCollectionPermission\n}): {\n CreateNewPresetDrawer: React.ReactNode\n DeletePresetModal: React.ReactNode\n EditPresetDrawer: React.ReactNode\n hasModifiedPreset: boolean\n openPresetListDrawer: () => void\n PresetListDrawer: React.ReactNode\n queryPresetMenuItems: React.ReactNode[]\n resetPreset: () => Promise<void>\n} => {\n const { modified, query, refineListData, setModified: setQueryModified } = useListQuery()\n\n const { i18n, t } = useTranslation()\n const { openModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const presetConfig = getEntityConfig({ collectionSlug: queryPresetsSlug })\n\n const [PresetDocumentDrawer, , { openDrawer: openDocumentDrawer }] = useDocumentDrawer({\n id: activePreset?.id,\n collectionSlug: queryPresetsSlug,\n })\n\n const [\n CreateNewPresetDrawer,\n ,\n { closeDrawer: closeCreateNewDrawer, openDrawer: openCreateNewDrawer },\n ] = useDocumentDrawer({\n collectionSlug: queryPresetsSlug,\n })\n\n const filterOptions = useMemo(\n () => ({\n 'payload-query-presets': {\n relatedCollection: {\n equals: collectionSlug,\n },\n },\n }),\n [collectionSlug],\n )\n\n const [ListDrawer, , { closeDrawer: closeListDrawer, openDrawer: openListDrawer }] =\n useListDrawer({\n collectionSlugs: [queryPresetsSlug],\n filterOptions,\n selectedCollection: queryPresetsSlug,\n })\n\n const handlePresetChange = useCallback(\n async (preset: QueryPreset) => {\n await refineListData(\n {\n columns: preset.columns ? transformColumnsToSearchParams(preset.columns) : undefined,\n preset: preset.id,\n where: preset.where,\n },\n false,\n )\n },\n [refineListData],\n )\n\n const resetQueryPreset = useCallback(async () => {\n await refineListData(\n {\n columns: undefined,\n preset: undefined,\n where: undefined,\n },\n false,\n )\n }, [refineListData])\n\n const handleDeletePreset = useCallback(async () => {\n try {\n await fetch(`${apiRoute}/${queryPresetsSlug}/${activePreset.id}`, {\n method: 'DELETE',\n }).then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:titleDeleted', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n title: activePreset.title,\n }),\n )\n\n await resetQueryPreset()\n } else {\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n }\n } catch (_err) {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n })\n } catch (_err) {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n }, [apiRoute, activePreset?.id, activePreset?.title, t, presetConfig, i18n, resetQueryPreset])\n\n const saveCurrentChanges = useCallback(async () => {\n try {\n await fetch(`${apiRoute}/payload-query-presets/${activePreset.id}`, {\n body: JSON.stringify({\n columns: transformColumnsToPreferences(query.columns),\n where: query.where,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n }).then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:updatedLabelSuccessfully', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n }),\n )\n\n setQueryModified(false)\n } else {\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n toast.error(t('error:unknown'))\n }\n }\n } catch (_err) {\n toast.error(t('error:unknown'))\n }\n })\n } catch (_err) {\n toast.error(t('error:unknown'))\n }\n }, [\n apiRoute,\n activePreset?.id,\n query.columns,\n query.where,\n t,\n presetConfig?.labels?.singular,\n i18n,\n setQueryModified,\n ])\n\n // Memoize so that components aren't re-rendered on query and column changes\n const queryPresetMenuItems = useMemo(() => {\n const menuItems: React.ReactNode[] = [\n <PopupListGroupLabel\n key=\"preset-group-label\"\n label={getTranslation(presetConfig?.labels?.plural, i18n)}\n />,\n ]\n\n if (activePreset && modified) {\n menuItems.push(\n <PopupList.Button\n onClick={async () => {\n await refineListData(\n {\n columns: transformColumnsToSearchParams(activePreset.columns),\n where: activePreset.where,\n },\n false,\n )\n }}\n >\n {t('general:reset')}\n </PopupList.Button>,\n )\n\n if (queryPresetPermissions.update) {\n menuItems.push(\n <PopupList.Button\n onClick={async () => {\n await saveCurrentChanges()\n }}\n >\n {activePreset.isShared ? t('general:updateForEveryone') : t('general:save')}\n </PopupList.Button>,\n )\n }\n }\n\n menuItems.push(\n <PopupList.Button\n onClick={() => {\n openCreateNewDrawer()\n }}\n >\n {t('general:createNew')}\n </PopupList.Button>,\n )\n\n if (activePreset && queryPresetPermissions?.delete) {\n menuItems.push(\n <Fragment>\n <PopupList.Button onClick={() => openModal(confirmDeletePresetModalSlug)}>\n {t('general:delete')}\n </PopupList.Button>\n <PopupList.Button\n onClick={() => {\n openDocumentDrawer()\n }}\n >\n {t('general:edit')}\n </PopupList.Button>\n </Fragment>,\n )\n }\n\n return menuItems\n }, [\n activePreset,\n queryPresetPermissions?.delete,\n queryPresetPermissions?.update,\n openCreateNewDrawer,\n openDocumentDrawer,\n openModal,\n saveCurrentChanges,\n t,\n refineListData,\n modified,\n presetConfig?.labels?.plural,\n i18n,\n ])\n\n return {\n CreateNewPresetDrawer: (\n <CreateNewPresetDrawer\n initialData={{\n columns: transformColumnsToPreferences(query.columns),\n relatedCollection: collectionSlug,\n where: query.where,\n }}\n onSave={async ({ doc }) => {\n closeCreateNewDrawer()\n await handlePresetChange(doc as QueryPreset)\n }}\n redirectAfterCreate={false}\n />\n ),\n DeletePresetModal: (\n <ConfirmationModal\n body={\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToDelete\"\n t={t}\n variables={{\n label: presetConfig?.labels?.singular,\n title: activePreset?.title,\n }}\n />\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmDeletePresetModalSlug}\n onConfirm={handleDeletePreset}\n />\n ),\n EditPresetDrawer: (\n <PresetDocumentDrawer\n onDelete={() => {\n // setSelectedPreset(undefined)\n }}\n onDuplicate={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n onSave={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n />\n ),\n hasModifiedPreset: modified,\n openPresetListDrawer: openListDrawer,\n PresetListDrawer: (\n <ListDrawer\n allowCreate={false}\n disableQueryPresets\n onSelect={async ({ doc }) => {\n closeListDrawer()\n await handlePresetChange(doc as QueryPreset)\n }}\n />\n ),\n queryPresetMenuItems,\n resetPreset: resetQueryPreset,\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useQueryPresets.js","names":["useModal","getTranslation","transformColumnsToPreferences","transformColumnsToSearchParams","React","Fragment","useCallback","useMemo","toast","useConfig","useListQuery","useTranslation","ConfirmationModal","useDocumentDrawer","useListDrawer","PopupList","PopupListGroupLabel","Translation","confirmDeletePresetModalSlug","queryPresetsSlug","useQueryPresets","activePreset","collectionSlug","queryPresetPermissions","modified","query","refineListData","setModified","setQueryModified","i18n","t","openModal","config","routes","api","apiRoute","getEntityConfig","presetConfig","PresetDocumentDrawer","openDrawer","openDocumentDrawer","id","CreateNewPresetDrawer","closeDrawer","closeCreateNewDrawer","openCreateNewDrawer","filterOptions","isTemp","not_equals","relatedCollection","equals","ListDrawer","closeListDrawer","openListDrawer","collectionSlugs","selectedCollection","handlePresetChange","preset","columns","undefined","where","resetQueryPreset","handleDeletePreset","fetch","method","then","res","json","status","success","label","labels","singular","title","errors","forEach","error","message","_err","saveCurrentChanges","body","JSON","stringify","credentials","headers","queryPresetMenuItems","menuItems","_jsx","plural","push","Button","onClick","update","isShared","delete","_jsxs","initialData","onSave","doc","redirectAfterCreate","DeletePresetModal","elements","1","children","i18nKey","variables","confirmingLabel","heading","modalSlug","onConfirm","EditPresetDrawer","onDelete","onDuplicate","hasModifiedPreset","openPresetListDrawer","PresetListDrawer","allowCreate","disableQueryPresets","onSelect","resetPreset"],"sources":["../../../src/elements/ListControls/useQueryPresets.tsx"],"sourcesContent":["import type { CollectionSlug, QueryPreset, SanitizedCollectionPermission } from 'payload'\n\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { transformColumnsToPreferences, transformColumnsToSearchParams } from 'payload/shared'\nimport React, { Fragment, useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/context.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ConfirmationModal } from '../ConfirmationModal/index.js'\nimport { useDocumentDrawer } from '../DocumentDrawer/index.js'\nimport { useListDrawer } from '../ListDrawer/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { PopupListGroupLabel } from '../Popup/PopupGroupLabel/index.js'\nimport { Translation } from '../Translation/index.js'\n\nconst confirmDeletePresetModalSlug = 'confirm-delete-preset'\n\nconst queryPresetsSlug = 'payload-query-presets'\n\nexport const useQueryPresets = ({\n activePreset,\n collectionSlug,\n queryPresetPermissions,\n}: {\n activePreset: QueryPreset\n collectionSlug: CollectionSlug\n queryPresetPermissions: SanitizedCollectionPermission\n}): {\n CreateNewPresetDrawer: React.ReactNode\n DeletePresetModal: React.ReactNode\n EditPresetDrawer: React.ReactNode\n hasModifiedPreset: boolean\n openPresetListDrawer: () => void\n PresetListDrawer: React.ReactNode\n queryPresetMenuItems: React.ReactNode[]\n resetPreset: () => Promise<void>\n} => {\n const { modified, query, refineListData, setModified: setQueryModified } = useListQuery()\n\n const { i18n, t } = useTranslation()\n const { openModal } = useModal()\n\n const {\n config: {\n routes: { api: apiRoute },\n },\n getEntityConfig,\n } = useConfig()\n\n const presetConfig = getEntityConfig({ collectionSlug: queryPresetsSlug })\n\n const [PresetDocumentDrawer, , { openDrawer: openDocumentDrawer }] = useDocumentDrawer({\n id: activePreset?.id,\n collectionSlug: queryPresetsSlug,\n })\n\n const [\n CreateNewPresetDrawer,\n ,\n { closeDrawer: closeCreateNewDrawer, openDrawer: openCreateNewDrawer },\n ] = useDocumentDrawer({\n collectionSlug: queryPresetsSlug,\n })\n\n const filterOptions = useMemo(\n () => ({\n 'payload-query-presets': {\n isTemp: {\n not_equals: true,\n },\n relatedCollection: {\n equals: collectionSlug,\n },\n },\n }),\n [collectionSlug],\n )\n\n const [ListDrawer, , { closeDrawer: closeListDrawer, openDrawer: openListDrawer }] =\n useListDrawer({\n collectionSlugs: [queryPresetsSlug],\n filterOptions,\n selectedCollection: queryPresetsSlug,\n })\n\n const handlePresetChange = useCallback(\n async (preset: QueryPreset) => {\n await refineListData(\n {\n columns: preset.columns ? transformColumnsToSearchParams(preset.columns) : undefined,\n preset: preset.id,\n where: preset.where,\n },\n false,\n )\n },\n [refineListData],\n )\n\n const resetQueryPreset = useCallback(async () => {\n await refineListData(\n {\n columns: undefined,\n preset: undefined,\n where: undefined,\n },\n false,\n )\n }, [refineListData])\n\n const handleDeletePreset = useCallback(async () => {\n try {\n await fetch(`${apiRoute}/${queryPresetsSlug}/${activePreset.id}`, {\n method: 'DELETE',\n }).then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:titleDeleted', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n title: activePreset.title,\n }),\n )\n\n await resetQueryPreset()\n } else {\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n }\n } catch (_err) {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n })\n } catch (_err) {\n toast.error(t('error:deletingTitle', { title: activePreset.title }))\n }\n }, [apiRoute, activePreset?.id, activePreset?.title, t, presetConfig, i18n, resetQueryPreset])\n\n const saveCurrentChanges = useCallback(async () => {\n try {\n await fetch(`${apiRoute}/payload-query-presets/${activePreset.id}`, {\n body: JSON.stringify({\n columns: transformColumnsToPreferences(query.columns),\n where: query.where,\n }),\n credentials: 'include',\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'PATCH',\n }).then(async (res) => {\n try {\n const json = await res.json()\n\n if (res.status < 400) {\n toast.success(\n t('general:updatedLabelSuccessfully', {\n label: getTranslation(presetConfig?.labels?.singular, i18n),\n }),\n )\n\n setQueryModified(false)\n } else {\n if (json.errors) {\n json.errors.forEach((error) => toast.error(error.message))\n } else {\n toast.error(t('error:unknown'))\n }\n }\n } catch (_err) {\n toast.error(t('error:unknown'))\n }\n })\n } catch (_err) {\n toast.error(t('error:unknown'))\n }\n }, [\n apiRoute,\n activePreset?.id,\n query.columns,\n query.where,\n t,\n presetConfig?.labels?.singular,\n i18n,\n setQueryModified,\n ])\n\n // Memoize so that components aren't re-rendered on query and column changes\n const queryPresetMenuItems = useMemo(() => {\n const menuItems: React.ReactNode[] = [\n <PopupListGroupLabel\n key=\"preset-group-label\"\n label={getTranslation(presetConfig?.labels?.plural, i18n)}\n />,\n ]\n\n if (activePreset && modified) {\n menuItems.push(\n <PopupList.Button\n onClick={async () => {\n await refineListData(\n {\n columns: transformColumnsToSearchParams(activePreset.columns),\n where: activePreset.where,\n },\n false,\n )\n }}\n >\n {t('general:reset')}\n </PopupList.Button>,\n )\n\n if (queryPresetPermissions.update) {\n menuItems.push(\n <PopupList.Button\n onClick={async () => {\n await saveCurrentChanges()\n }}\n >\n {activePreset.isShared ? t('general:updateForEveryone') : t('general:save')}\n </PopupList.Button>,\n )\n }\n }\n\n menuItems.push(\n <PopupList.Button\n onClick={() => {\n openCreateNewDrawer()\n }}\n >\n {t('general:createNew')}\n </PopupList.Button>,\n )\n\n if (activePreset && queryPresetPermissions?.delete) {\n menuItems.push(\n <Fragment>\n <PopupList.Button onClick={() => openModal(confirmDeletePresetModalSlug)}>\n {t('general:delete')}\n </PopupList.Button>\n <PopupList.Button\n onClick={() => {\n openDocumentDrawer()\n }}\n >\n {t('general:edit')}\n </PopupList.Button>\n </Fragment>,\n )\n }\n\n return menuItems\n }, [\n activePreset,\n queryPresetPermissions?.delete,\n queryPresetPermissions?.update,\n openCreateNewDrawer,\n openDocumentDrawer,\n openModal,\n saveCurrentChanges,\n t,\n refineListData,\n modified,\n presetConfig?.labels?.plural,\n i18n,\n ])\n\n return {\n CreateNewPresetDrawer: (\n <CreateNewPresetDrawer\n initialData={{\n columns: transformColumnsToPreferences(query.columns),\n relatedCollection: collectionSlug,\n where: query.where,\n }}\n onSave={async ({ doc }) => {\n closeCreateNewDrawer()\n await handlePresetChange(doc as QueryPreset)\n }}\n redirectAfterCreate={false}\n />\n ),\n DeletePresetModal: (\n <ConfirmationModal\n body={\n <Translation\n elements={{\n '1': ({ children }) => <strong>{children}</strong>,\n }}\n i18nKey=\"general:aboutToDelete\"\n t={t}\n variables={{\n label: presetConfig?.labels?.singular,\n title: activePreset?.title,\n }}\n />\n }\n confirmingLabel={t('general:deleting')}\n heading={t('general:confirmDeletion')}\n modalSlug={confirmDeletePresetModalSlug}\n onConfirm={handleDeletePreset}\n />\n ),\n EditPresetDrawer: (\n <PresetDocumentDrawer\n onDelete={() => {\n // setSelectedPreset(undefined)\n }}\n onDuplicate={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n onSave={async ({ doc }) => {\n await handlePresetChange(doc as QueryPreset)\n }}\n />\n ),\n hasModifiedPreset: modified,\n openPresetListDrawer: openListDrawer,\n PresetListDrawer: (\n <ListDrawer\n allowCreate={false}\n disableQueryPresets\n onSelect={async ({ doc }) => {\n closeListDrawer()\n await handlePresetChange(doc as QueryPreset)\n }}\n />\n ),\n queryPresetMenuItems,\n resetPreset: resetQueryPreset,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -102,7 +102,7 @@ export const QueryPresetsWhereField = t0 => {
102
102
  required
103
103
  }), _jsx("div", {
104
104
  className: "value-wrapper",
105
- children: value ? transformWhereToNaturalLanguage(value, getTranslation(collectionConfig.labels.plural, i18n)) : "No where query"
105
+ children: value ? transformWhereToNaturalLanguage(value, getTranslation(collectionConfig?.labels?.plural, i18n)) : "No where query"
106
106
  })]
107
107
  });
108
108
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","toWords","React","FieldLabel","useField","useConfig","useListQuery","useTranslation","Pill","transformWhereToNaturalLanguage","where","collectionLabel","renderCondition","condition","key","Object","keys","operator","value","Date","toLocaleDateString","_err","_jsxs","pillStyle","_jsx","renderWhere","or","length","className","map","orCondition","orIndex","Fragment","and","andCondition","andIndex","QueryPresetsWhereField","t0","field","t1","label","required","path","collectionSlug","getEntityConfig","collectionConfig","i18n","children","as","labels","plural"],"sources":["../../../../../src/elements/QueryPresets/fields/WhereField/index.tsx"],"sourcesContent":["'use client'\nimport type { JSONFieldClientComponent, Where } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { toWords } from 'payload/shared'\nimport React from 'react'\n\nimport { FieldLabel } from '../../../../fields/FieldLabel/index.js'\nimport { useField } from '../../../../forms/useField/index.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useListQuery } from '../../../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { Pill } from '../../../Pill/index.js'\nimport './index.scss'\n\n/** @todo: improve this */\nconst transformWhereToNaturalLanguage = (\n where: Where,\n collectionLabel: string,\n): React.ReactNode => {\n if (!where) {\n return null\n }\n\n const renderCondition = (condition: any): React.ReactNode => {\n const key = Object.keys(condition)[0]\n\n if (!condition[key]) {\n return 'No where query'\n }\n\n const operator = Object.keys(condition[key])[0]\n let value = condition[key][operator]\n\n // TODO: this is not right, but works for now at least.\n // Ideally we look up iterate _fields_ so we know the type of the field\n // Currently, we're only iterating over the `where` field's value, so we don't know the type\n if (typeof value === 'object') {\n try {\n value = new Date(value).toLocaleDateString()\n } catch (_err) {\n value = 'Unknown error has occurred'\n }\n }\n\n return (\n <Pill pillStyle=\"always-white\">\n <b>{toWords(key)}</b> {operator} <b>{toWords(value)}</b>\n </Pill>\n )\n }\n\n const renderWhere = (where: Where, collectionLabel: string): React.ReactNode => {\n if (where.or && where.or.length > 0) {\n return (\n <div className=\"or-condition\">\n {where.or.map((orCondition, orIndex) => (\n <React.Fragment key={orIndex}>\n {orCondition.and && orCondition.and.length > 0 ? (\n <div className=\"and-condition\">\n {orIndex === 0 && (\n <span className=\"label\">{`Filter ${collectionLabel} where `}</span>\n )}\n {orIndex > 0 && <span className=\"label\"> or </span>}\n {orCondition.and.map((andCondition, andIndex) => (\n <React.Fragment key={andIndex}>\n {renderCondition(andCondition)}\n {andIndex < orCondition.and.length - 1 && (\n <span className=\"label\"> and </span>\n )}\n </React.Fragment>\n ))}\n </div>\n ) : (\n renderCondition(orCondition)\n )}\n </React.Fragment>\n ))}\n </div>\n )\n }\n\n return renderCondition(where)\n }\n\n return renderWhere(where, collectionLabel)\n}\n\nexport const QueryPresetsWhereField: JSONFieldClientComponent = ({\n field: { label, required },\n}) => {\n const { path, value } = useField()\n const { collectionSlug } = useListQuery()\n const { getEntityConfig } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const { i18n } = useTranslation()\n\n return (\n <div className=\"field-type query-preset-where-field\">\n <FieldLabel as=\"h3\" label={label} path={path} required={required} />\n <div className=\"value-wrapper\">\n {value\n ? transformWhereToNaturalLanguage(\n value as Where,\n getTranslation(collectionConfig.labels.plural, i18n),\n )\n : 'No where query'}\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","toWords","React","FieldLabel","useField","useConfig","useListQuery","useTranslation","Pill","transformWhereToNaturalLanguage","where","collectionLabel","renderCondition","condition","key","Object","keys","operator","value","Date","toLocaleDateString","_err","_jsxs","pillStyle","_jsx","renderWhere","or","length","className","map","orCondition","orIndex","Fragment","and","andCondition","andIndex","QueryPresetsWhereField","t0","field","t1","label","required","path","collectionSlug","getEntityConfig","collectionConfig","i18n","children","as","labels","plural"],"sources":["../../../../../src/elements/QueryPresets/fields/WhereField/index.tsx"],"sourcesContent":["'use client'\nimport type { JSONFieldClientComponent, Where } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { toWords } from 'payload/shared'\nimport React from 'react'\n\nimport { FieldLabel } from '../../../../fields/FieldLabel/index.js'\nimport { useField } from '../../../../forms/useField/index.js'\nimport { useConfig } from '../../../../providers/Config/index.js'\nimport { useListQuery } from '../../../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { Pill } from '../../../Pill/index.js'\nimport './index.scss'\n\n/** @todo: improve this */\nconst transformWhereToNaturalLanguage = (\n where: Where,\n collectionLabel: string,\n): React.ReactNode => {\n if (!where) {\n return null\n }\n\n const renderCondition = (condition: any): React.ReactNode => {\n const key = Object.keys(condition)[0]\n\n if (!condition[key]) {\n return 'No where query'\n }\n\n const operator = Object.keys(condition[key])[0]\n let value = condition[key][operator]\n\n // TODO: this is not right, but works for now at least.\n // Ideally we look up iterate _fields_ so we know the type of the field\n // Currently, we're only iterating over the `where` field's value, so we don't know the type\n if (typeof value === 'object') {\n try {\n value = new Date(value).toLocaleDateString()\n } catch (_err) {\n value = 'Unknown error has occurred'\n }\n }\n\n return (\n <Pill pillStyle=\"always-white\">\n <b>{toWords(key)}</b> {operator} <b>{toWords(value)}</b>\n </Pill>\n )\n }\n\n const renderWhere = (where: Where, collectionLabel: string): React.ReactNode => {\n if (where.or && where.or.length > 0) {\n return (\n <div className=\"or-condition\">\n {where.or.map((orCondition, orIndex) => (\n <React.Fragment key={orIndex}>\n {orCondition.and && orCondition.and.length > 0 ? (\n <div className=\"and-condition\">\n {orIndex === 0 && (\n <span className=\"label\">{`Filter ${collectionLabel} where `}</span>\n )}\n {orIndex > 0 && <span className=\"label\"> or </span>}\n {orCondition.and.map((andCondition, andIndex) => (\n <React.Fragment key={andIndex}>\n {renderCondition(andCondition)}\n {andIndex < orCondition.and.length - 1 && (\n <span className=\"label\"> and </span>\n )}\n </React.Fragment>\n ))}\n </div>\n ) : (\n renderCondition(orCondition)\n )}\n </React.Fragment>\n ))}\n </div>\n )\n }\n\n return renderCondition(where)\n }\n\n return renderWhere(where, collectionLabel)\n}\n\nexport const QueryPresetsWhereField: JSONFieldClientComponent = ({\n field: { label, required },\n}) => {\n const { path, value } = useField()\n const { collectionSlug } = useListQuery()\n const { getEntityConfig } = useConfig()\n\n const collectionConfig = getEntityConfig({ collectionSlug })\n\n const { i18n } = useTranslation()\n\n return (\n <div className=\"field-type query-preset-where-field\">\n <FieldLabel as=\"h3\" label={label} path={path} required={required} />\n <div className=\"value-wrapper\">\n {value\n ? transformWhereToNaturalLanguage(\n value as Where,\n getTranslation(collectionConfig?.labels?.plural, i18n),\n )\n : 'No where query'}\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFields.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/reduceFields.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAM1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM9C,KAAK,sBAAsB,GAAG;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,+CAKtB,sBAAsB,KAAG,YAAY,EAiJvC,CAAA"}
1
+ {"version":3,"file":"reduceFields.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/reduceFields.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,0BAA0B,CAAA;AACjF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAM1C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAM9C,KAAK,sBAAsB,GAAG;IAC5B,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,+CAKtB,sBAAsB,KAAG,YAAY,EAwLvC,CAAA"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import { getTranslation } from '@payloadcms/translations';
4
- import { fieldIsHiddenOrDisabled, fieldIsID, tabHasName } from 'payload/shared';
4
+ import { fieldAffectsData, fieldIsHiddenOrDisabled, fieldIsID, tabHasName } from 'payload/shared';
5
5
  import { renderToStaticMarkup } from 'react-dom/server';
6
6
  import { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js';
7
7
  import { combineFieldLabel } from '../../utilities/combineFieldLabel.js';
@@ -62,7 +62,29 @@ export const reduceFields = ({
62
62
  }));
63
63
  return reduced;
64
64
  }
65
- if ((field.type === 'group' || field.type === 'array') && 'fields' in field) {
65
+ if (field.type === 'group' && 'fields' in field) {
66
+ const translatedLabel = getTranslation(field.label || '', i18n);
67
+ const labelWithPrefix = labelPrefix ? translatedLabel ? labelPrefix + ' > ' + translatedLabel : labelPrefix : translatedLabel;
68
+ if (fieldAffectsData(field)) {
69
+ // Make sure we handle deeply nested groups
70
+ const pathWithPrefix = field.name ? pathPrefix ? pathPrefix + '.' + field.name : field.name : pathPrefix;
71
+ reduced.push(...reduceFields({
72
+ fields: field.fields,
73
+ i18n,
74
+ labelPrefix: labelWithPrefix,
75
+ pathPrefix: pathWithPrefix
76
+ }));
77
+ } else {
78
+ reduced.push(...reduceFields({
79
+ fields: field.fields,
80
+ i18n,
81
+ labelPrefix: labelWithPrefix,
82
+ pathPrefix
83
+ }));
84
+ }
85
+ return reduced;
86
+ }
87
+ if (field.type === 'array' && 'fields' in field) {
66
88
  const translatedLabel = getTranslation(field.label || '', i18n);
67
89
  const labelWithPrefix = labelPrefix ? translatedLabel ? labelPrefix + ' > ' + translatedLabel : labelPrefix : translatedLabel;
68
90
  // Make sure we handle deeply nested groups
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFields.js","names":["getTranslation","fieldIsHiddenOrDisabled","fieldIsID","tabHasName","renderToStaticMarkup","createNestedClientFieldPath","combineFieldLabel","fieldTypes","reduceFields","fields","i18n","labelPrefix","pathPrefix","reduce","reduced","field","type","tabs","forEach","tab","label","localizedTabLabel","labelWithPrefix","tabPathPrefix","name","push","translatedLabel","pathWithPrefix","operatorKeys","Set","operators","acc","operator","has","value","add","operatorKey","t","localizedLabel","formattedLabel","prefix","textFromLabel","extractTextFromReactNode","fieldPath","formattedField","plainTextLabel","reactNode","html","document","div","createElement","innerHTML","textContent","replace"],"sources":["../../../src/elements/WhereBuilder/reduceFields.tsx"],"sourcesContent":["'use client'\nimport type { ClientTranslationKeys, I18nClient } from '@payloadcms/translations'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldIsHiddenOrDisabled, fieldIsID, tabHasName } from 'payload/shared'\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nimport type { ReducedField } from './types.js'\n\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { combineFieldLabel } from '../../utilities/combineFieldLabel.js'\nimport fieldTypes from './field-types.js'\n\ntype ReduceFieldOptionsArgs = {\n fields: ClientField[]\n i18n: I18nClient\n labelPrefix?: string\n pathPrefix?: string\n}\n\n/**\n * Reduces a field map to a flat array of fields with labels and values.\n * Used in the WhereBuilder component to render the fields in the dropdown.\n */\nexport const reduceFields = ({\n fields,\n i18n,\n labelPrefix,\n pathPrefix,\n}: ReduceFieldOptionsArgs): ReducedField[] => {\n return fields.reduce((reduced, field) => {\n // Do not filter out `field.admin.disableListFilter` fields here, as these should still render as disabled if they appear in the URL query\n if (fieldIsHiddenOrDisabled(field) && !fieldIsID(field)) {\n return reduced\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n const tabs = field.tabs\n\n tabs.forEach((tab) => {\n if (typeof tab.label !== 'boolean') {\n const localizedTabLabel = getTranslation(tab.label, i18n)\n\n const labelWithPrefix = labelPrefix\n ? labelPrefix + ' > ' + localizedTabLabel\n : localizedTabLabel\n\n // Make sure we handle nested tabs\n const tabPathPrefix =\n tabHasName(tab) && tab.name\n ? pathPrefix\n ? pathPrefix + '.' + tab.name\n : tab.name\n : pathPrefix\n\n if (typeof localizedTabLabel === 'string') {\n reduced.push(\n ...reduceFields({\n fields: tab.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix: tabPathPrefix,\n }),\n )\n }\n }\n })\n return reduced\n }\n\n // Rows cant have labels, so we need to handle them differently\n if (field.type === 'row' && 'fields' in field) {\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix,\n pathPrefix,\n }),\n )\n return reduced\n }\n\n if (field.type === 'collapsible' && 'fields' in field) {\n const localizedTabLabel = getTranslation(field.label || '', i18n)\n\n const labelWithPrefix = labelPrefix\n ? labelPrefix + ' > ' + localizedTabLabel\n : localizedTabLabel\n\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix,\n }),\n )\n return reduced\n }\n\n if ((field.type === 'group' || field.type === 'array') && 'fields' in field) {\n const translatedLabel = getTranslation(field.label || '', i18n)\n\n const labelWithPrefix = labelPrefix\n ? translatedLabel\n ? labelPrefix + ' > ' + translatedLabel\n : labelPrefix\n : translatedLabel\n\n // Make sure we handle deeply nested groups\n const pathWithPrefix = field.name\n ? pathPrefix\n ? pathPrefix + '.' + field.name\n : field.name\n : pathPrefix\n\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix: pathWithPrefix,\n }),\n )\n\n return reduced\n }\n\n if (typeof fieldTypes[field.type] === 'object') {\n const operatorKeys = new Set()\n\n const operators = fieldTypes[field.type].operators.reduce((acc, operator) => {\n if (!operatorKeys.has(operator.value)) {\n operatorKeys.add(operator.value)\n const operatorKey = `operators:${operator.label}` as ClientTranslationKeys\n acc.push({\n ...operator,\n label: i18n.t(operatorKey),\n })\n }\n\n return acc\n }, [])\n\n const localizedLabel = getTranslation(field.label || '', i18n)\n\n const formattedLabel = labelPrefix\n ? combineFieldLabel({\n field,\n prefix: labelPrefix,\n })\n : localizedLabel\n\n // React elements in filter options are not searchable in React Select\n // Extract plain text to make them filterable in dropdowns\n const textFromLabel = extractTextFromReactNode(formattedLabel)\n\n const fieldPath = pathPrefix ? createNestedClientFieldPath(pathPrefix, field) : field.name\n\n const formattedField: ReducedField = {\n label: formattedLabel,\n plainTextLabel: textFromLabel,\n value: fieldPath,\n ...fieldTypes[field.type],\n field,\n operators,\n }\n\n reduced.push(formattedField)\n return reduced\n }\n return reduced\n }, [])\n}\n\n/**\n * Extracts plain text content from a React node by removing HTML tags.\n * Used to make React elements searchable in filter dropdowns.\n */\nconst extractTextFromReactNode = (reactNode: React.ReactNode): string => {\n if (!reactNode) {\n return ''\n }\n if (typeof reactNode === 'string') {\n return reactNode\n }\n\n const html = renderToStaticMarkup(reactNode)\n\n // Handle different environments (server vs browser)\n if (typeof document !== 'undefined') {\n // Browser environment - use actual DOM\n const div = document.createElement('div')\n div.innerHTML = html\n return div.textContent || ''\n } else {\n // Server environment - use regex to strip HTML tags\n return html.replace(/<[^>]*>/g, '')\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"reduceFields.js","names":["getTranslation","fieldAffectsData","fieldIsHiddenOrDisabled","fieldIsID","tabHasName","renderToStaticMarkup","createNestedClientFieldPath","combineFieldLabel","fieldTypes","reduceFields","fields","i18n","labelPrefix","pathPrefix","reduce","reduced","field","type","tabs","forEach","tab","label","localizedTabLabel","labelWithPrefix","tabPathPrefix","name","push","translatedLabel","pathWithPrefix","operatorKeys","Set","operators","acc","operator","has","value","add","operatorKey","t","localizedLabel","formattedLabel","prefix","textFromLabel","extractTextFromReactNode","fieldPath","formattedField","plainTextLabel","reactNode","html","document","div","createElement","innerHTML","textContent","replace"],"sources":["../../../src/elements/WhereBuilder/reduceFields.tsx"],"sourcesContent":["'use client'\nimport type { ClientTranslationKeys, I18nClient } from '@payloadcms/translations'\nimport type { ClientField } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldAffectsData, fieldIsHiddenOrDisabled, fieldIsID, tabHasName } from 'payload/shared'\nimport { renderToStaticMarkup } from 'react-dom/server'\n\nimport type { ReducedField } from './types.js'\n\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { combineFieldLabel } from '../../utilities/combineFieldLabel.js'\nimport fieldTypes from './field-types.js'\n\ntype ReduceFieldOptionsArgs = {\n fields: ClientField[]\n i18n: I18nClient\n labelPrefix?: string\n pathPrefix?: string\n}\n\n/**\n * Reduces a field map to a flat array of fields with labels and values.\n * Used in the WhereBuilder component to render the fields in the dropdown.\n */\nexport const reduceFields = ({\n fields,\n i18n,\n labelPrefix,\n pathPrefix,\n}: ReduceFieldOptionsArgs): ReducedField[] => {\n return fields.reduce((reduced, field) => {\n // Do not filter out `field.admin.disableListFilter` fields here, as these should still render as disabled if they appear in the URL query\n if (fieldIsHiddenOrDisabled(field) && !fieldIsID(field)) {\n return reduced\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n const tabs = field.tabs\n\n tabs.forEach((tab) => {\n if (typeof tab.label !== 'boolean') {\n const localizedTabLabel = getTranslation(tab.label, i18n)\n\n const labelWithPrefix = labelPrefix\n ? labelPrefix + ' > ' + localizedTabLabel\n : localizedTabLabel\n\n // Make sure we handle nested tabs\n const tabPathPrefix =\n tabHasName(tab) && tab.name\n ? pathPrefix\n ? pathPrefix + '.' + tab.name\n : tab.name\n : pathPrefix\n\n if (typeof localizedTabLabel === 'string') {\n reduced.push(\n ...reduceFields({\n fields: tab.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix: tabPathPrefix,\n }),\n )\n }\n }\n })\n return reduced\n }\n\n // Rows cant have labels, so we need to handle them differently\n if (field.type === 'row' && 'fields' in field) {\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix,\n pathPrefix,\n }),\n )\n return reduced\n }\n\n if (field.type === 'collapsible' && 'fields' in field) {\n const localizedTabLabel = getTranslation(field.label || '', i18n)\n\n const labelWithPrefix = labelPrefix\n ? labelPrefix + ' > ' + localizedTabLabel\n : localizedTabLabel\n\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix,\n }),\n )\n return reduced\n }\n\n if (field.type === 'group' && 'fields' in field) {\n const translatedLabel = getTranslation(field.label || '', i18n)\n\n const labelWithPrefix = labelPrefix\n ? translatedLabel\n ? labelPrefix + ' > ' + translatedLabel\n : labelPrefix\n : translatedLabel\n\n if (fieldAffectsData(field)) {\n // Make sure we handle deeply nested groups\n const pathWithPrefix = field.name\n ? pathPrefix\n ? pathPrefix + '.' + field.name\n : field.name\n : pathPrefix\n\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix: pathWithPrefix,\n }),\n )\n } else {\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix,\n }),\n )\n }\n\n return reduced\n }\n\n if (field.type === 'array' && 'fields' in field) {\n const translatedLabel = getTranslation(field.label || '', i18n)\n\n const labelWithPrefix = labelPrefix\n ? translatedLabel\n ? labelPrefix + ' > ' + translatedLabel\n : labelPrefix\n : translatedLabel\n\n // Make sure we handle deeply nested groups\n const pathWithPrefix = field.name\n ? pathPrefix\n ? pathPrefix + '.' + field.name\n : field.name\n : pathPrefix\n\n reduced.push(\n ...reduceFields({\n fields: field.fields,\n i18n,\n labelPrefix: labelWithPrefix,\n pathPrefix: pathWithPrefix,\n }),\n )\n\n return reduced\n }\n\n if (typeof fieldTypes[field.type] === 'object') {\n const operatorKeys = new Set()\n\n const operators = fieldTypes[field.type].operators.reduce((acc, operator) => {\n if (!operatorKeys.has(operator.value)) {\n operatorKeys.add(operator.value)\n const operatorKey = `operators:${operator.label}` as ClientTranslationKeys\n acc.push({\n ...operator,\n label: i18n.t(operatorKey),\n })\n }\n\n return acc\n }, [])\n\n const localizedLabel = getTranslation(field.label || '', i18n)\n\n const formattedLabel = labelPrefix\n ? combineFieldLabel({\n field,\n prefix: labelPrefix,\n })\n : localizedLabel\n\n // React elements in filter options are not searchable in React Select\n // Extract plain text to make them filterable in dropdowns\n const textFromLabel = extractTextFromReactNode(formattedLabel)\n\n const fieldPath = pathPrefix ? createNestedClientFieldPath(pathPrefix, field) : field.name\n\n const formattedField: ReducedField = {\n label: formattedLabel,\n plainTextLabel: textFromLabel,\n value: fieldPath,\n ...fieldTypes[field.type],\n field,\n operators,\n }\n\n reduced.push(formattedField)\n return reduced\n }\n return reduced\n }, [])\n}\n\n/**\n * Extracts plain text content from a React node by removing HTML tags.\n * Used to make React elements searchable in filter dropdowns.\n */\nconst extractTextFromReactNode = (reactNode: React.ReactNode): string => {\n if (!reactNode) {\n return ''\n }\n if (typeof reactNode === 'string') {\n return reactNode\n }\n\n const html = renderToStaticMarkup(reactNode)\n\n // Handle different environments (server vs browser)\n if (typeof document !== 'undefined') {\n // Browser environment - use actual DOM\n const div = document.createElement('div')\n div.innerHTML = html\n return div.textContent || ''\n } else {\n // Server environment - use regex to strip HTML tags\n return html.replace(/<[^>]*>/g, '')\n }\n}\n"],"mappings":"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","ignoreList":[]}