@payloadcms/ui 3.78.0-canary.0 → 3.78.0-canary.2

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 (72) hide show
  1. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  2. package/dist/elements/DeleteDocument/index.js +16 -5
  3. package/dist/elements/DeleteDocument/index.js.map +1 -1
  4. package/dist/elements/DeleteMany/index.d.ts +21 -1
  5. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  6. package/dist/elements/DeleteMany/index.js +25 -11
  7. package/dist/elements/DeleteMany/index.js.map +1 -1
  8. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  9. package/dist/elements/DocumentControls/index.js +8 -2
  10. package/dist/elements/DocumentControls/index.js.map +1 -1
  11. package/dist/elements/GroupByBuilder/index.d.ts +4 -1
  12. package/dist/elements/GroupByBuilder/index.d.ts.map +1 -1
  13. package/dist/elements/GroupByBuilder/index.js +81 -39
  14. package/dist/elements/GroupByBuilder/index.js.map +1 -1
  15. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
  16. package/dist/elements/QueryPresets/fields/ColumnsField/index.js +100 -37
  17. package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
  18. package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts.map +1 -1
  19. package/dist/elements/QueryPresets/fields/GroupByField/index.js +24 -48
  20. package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
  21. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts.map +1 -1
  22. package/dist/elements/QueryPresets/fields/WhereField/index.js +73 -94
  23. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  24. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.d.ts +1 -1
  25. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.d.ts.map +1 -1
  26. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js +2 -2
  27. package/dist/elements/WhereBuilder/Condition/DefaultFilter/index.js.map +1 -1
  28. package/dist/elements/WhereBuilder/Condition/Text/index.d.ts.map +1 -1
  29. package/dist/elements/WhereBuilder/Condition/Text/index.js +30 -32
  30. package/dist/elements/WhereBuilder/Condition/Text/index.js.map +1 -1
  31. package/dist/elements/WhereBuilder/Condition/index.d.ts +2 -2
  32. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  33. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  34. package/dist/elements/WhereBuilder/index.d.ts +3 -2
  35. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  36. package/dist/elements/WhereBuilder/index.js +33 -18
  37. package/dist/elements/WhereBuilder/index.js.map +1 -1
  38. package/dist/elements/WhereBuilder/types.d.ts +4 -1
  39. package/dist/elements/WhereBuilder/types.d.ts.map +1 -1
  40. package/dist/elements/WhereBuilder/types.js.map +1 -1
  41. package/dist/exports/client/{DatePicker-YF5TBW3N.js → DatePicker-CL2EGBVQ.js} +2 -2
  42. package/dist/exports/client/{chunk-ZPLD37T2.js → chunk-SH42NW5R.js} +2 -2
  43. package/dist/exports/client/{chunk-ZPLD37T2.js.map → chunk-SH42NW5R.js.map} +4 -4
  44. package/dist/exports/client/index.js +12 -12
  45. package/dist/exports/client/index.js.map +4 -4
  46. package/dist/providers/DocumentInfo/types.d.ts +7 -0
  47. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  48. package/dist/providers/DocumentInfo/types.js.map +1 -1
  49. package/dist/styles.css +1 -1
  50. package/dist/utilities/getColumns.d.ts.map +1 -1
  51. package/dist/utilities/getColumns.js +1 -2
  52. package/dist/utilities/getColumns.js.map +1 -1
  53. package/dist/utilities/shouldPermanentlyDelete.d.ts +13 -0
  54. package/dist/utilities/shouldPermanentlyDelete.d.ts.map +1 -0
  55. package/dist/utilities/shouldPermanentlyDelete.js +11 -0
  56. package/dist/utilities/shouldPermanentlyDelete.js.map +1 -0
  57. package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +1 -1
  58. package/dist/views/CollectionFolder/ListSelection/index.js +1 -0
  59. package/dist/views/CollectionFolder/ListSelection/index.js.map +1 -1
  60. package/dist/views/List/ListHeader/index.d.ts +1 -0
  61. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  62. package/dist/views/List/ListHeader/index.js +3 -0
  63. package/dist/views/List/ListHeader/index.js.map +1 -1
  64. package/dist/views/List/ListSelection/index.d.ts +2 -0
  65. package/dist/views/List/ListSelection/index.d.ts.map +1 -1
  66. package/dist/views/List/ListSelection/index.js +22 -16
  67. package/dist/views/List/ListSelection/index.js.map +1 -1
  68. package/dist/views/List/index.d.ts.map +1 -1
  69. package/dist/views/List/index.js +2 -0
  70. package/dist/views/List/index.js.map +1 -1
  71. package/package.json +4 -4
  72. /package/dist/exports/client/{DatePicker-YF5TBW3N.js.map → DatePicker-CL2EGBVQ.js.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useState","useDebounce","useEffectEvent","useTranslation","Button","ReactSelect","DefaultFilter","getOperatorValueTypes","baseClass","Condition","props","addCondition","andIndex","fieldPath","filterOptions","operator","orIndex","reducedFields","removeCondition","RenderedFilter","updateCondition","value","t","reducedField","find","field","internalValue","setInternalValue","debouncedValue","booleanSelect","includes","type","valueOptions","label","options","updateValue","undefined","disabled","admin","disableListFilter","handleFieldChange","option","handleOperatorChange","operatorValueTypes","validOperatorValue","isValidValue","_jsx","className","_jsxs","filterOption","inputValue","data","plainTextLabel","toLowerCase","isClearable","onChange","filter","operators","o","internalField","buttonStyle","icon","iconStyle","onClick","round","relation"],"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type {\n AddCondition,\n ReducedField,\n RemoveCondition,\n UpdateCondition,\n Value,\n} from '../types.js'\n\nexport type Props = {\n readonly addCondition: AddCondition\n readonly andIndex: number\n readonly fieldPath: string\n readonly filterOptions: ResolvedFilterOptions\n readonly operator: Operator\n readonly orIndex: number\n readonly reducedFields: ReducedField[]\n readonly removeCondition: RemoveCondition\n readonly RenderedFilter: React.ReactNode\n readonly updateCondition: UpdateCondition\n readonly value: Value\n}\n\nimport type { Operator, Option as PayloadOption, ResolvedFilterOptions } from 'payload'\n\nimport type { Option } from '../../ReactSelect/index.js'\n\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DefaultFilter } from './DefaultFilter/index.js'\nimport { getOperatorValueTypes } from './validOperators.js'\nimport './index.scss'\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n addCondition,\n andIndex,\n fieldPath,\n filterOptions,\n operator,\n orIndex,\n reducedFields,\n removeCondition,\n RenderedFilter,\n updateCondition,\n value,\n } = props\n\n const { t } = useTranslation()\n\n const reducedField = reducedFields.find((field) => field.value === fieldPath)\n\n const [internalValue, setInternalValue] = useState<Value>(value)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n const booleanSelect = ['exists'].includes(operator) || reducedField?.field?.type === 'checkbox'\n\n let valueOptions: PayloadOption[] = []\n\n if (booleanSelect) {\n valueOptions = [\n { label: t('general:true'), value: 'true' },\n { label: t('general:false'), value: 'false' },\n ]\n } else if (reducedField?.field && 'options' in reducedField.field) {\n valueOptions = reducedField.field.options\n }\n\n const updateValue = useEffectEvent(async (debouncedValue: Value) => {\n if (operator) {\n await updateCondition({\n type: 'value',\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: debouncedValue === null || debouncedValue === '' ? undefined : debouncedValue,\n })\n }\n })\n\n useEffect(() => {\n void updateValue(debouncedValue)\n }, [debouncedValue])\n\n const disabled =\n (!reducedField?.value && typeof reducedField?.value !== 'number') ||\n reducedField?.field?.admin?.disableListFilter\n\n const handleFieldChange = useCallback(\n async (field: Option<string>) => {\n setInternalValue(undefined)\n await updateCondition({\n type: 'field',\n andIndex,\n field: reducedFields.find((option) => option.value === field.value),\n operator,\n orIndex,\n value: undefined,\n })\n },\n [andIndex, operator, orIndex, reducedFields, updateCondition],\n )\n\n const handleOperatorChange = useCallback(\n async (operator: Option<Operator>) => {\n const operatorValueTypes = getOperatorValueTypes(reducedField.field.type)\n const validOperatorValue = operatorValueTypes[operator.value] || 'any'\n const isValidValue =\n validOperatorValue === 'any' ||\n typeof value === validOperatorValue ||\n (validOperatorValue === 'boolean' && (value === 'true' || value === 'false'))\n\n if (!isValidValue) {\n // if the current value is not valid for the new operator\n // reset the value before passing it to updateCondition\n setInternalValue(undefined)\n }\n\n await updateCondition({\n type: 'operator',\n andIndex,\n field: reducedField,\n operator: operator.value,\n orIndex,\n value: isValidValue ? value : undefined,\n })\n },\n [andIndex, reducedField, orIndex, updateCondition, value],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n disabled={disabled}\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n isClearable={false}\n onChange={handleFieldChange}\n options={reducedFields.filter((field) => !field.field.admin.disableListFilter)}\n value={\n reducedField || {\n value: reducedField?.value,\n }\n }\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={disabled}\n isClearable={false}\n onChange={handleOperatorChange}\n options={reducedField?.operators}\n value={reducedField?.operators.find((o) => operator === o.value) || null}\n />\n </div>\n <div className={`${baseClass}__value`}>\n {RenderedFilter || (\n <DefaultFilter\n booleanSelect={booleanSelect}\n disabled={\n !operator || !reducedField || reducedField?.field?.admin?.disableListFilter\n }\n filterOptions={filterOptions}\n internalField={reducedField}\n onChange={setInternalValue}\n operator={operator}\n options={valueOptions}\n value={internalValue ?? ''}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n round\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-add`}\n icon=\"plus\"\n iconStyle=\"with-border\"\n onClick={() =>\n addCondition({\n andIndex: andIndex + 1,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex,\n relation: 'and',\n })\n }\n round\n />\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useState","useDebounce","useEffectEvent","useTranslation","Button","ReactSelect","DefaultFilter","getOperatorValueTypes","baseClass","Condition","props","addCondition","andIndex","fieldPath","filterOptions","operator","orIndex","reducedFields","removeCondition","RenderedFilter","updateCondition","value","t","reducedField","find","field","internalValue","setInternalValue","debouncedValue","booleanSelect","includes","type","valueOptions","label","options","updateValue","undefined","disabled","admin","disableListFilter","handleFieldChange","option","handleOperatorChange","operatorValueTypes","validOperatorValue","isValidValue","_jsx","className","_jsxs","filterOption","inputValue","data","plainTextLabel","toLowerCase","isClearable","onChange","filter","operators","o","internalField","buttonStyle","icon","iconStyle","onClick","round","relation"],"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type {\n AddCondition,\n ReducedField,\n RemoveCondition,\n UpdateCondition,\n Value,\n} from '../types.js'\n\nexport type Props = {\n readonly addCondition: AddCondition\n readonly andIndex: number\n readonly fieldPath: string\n readonly filterOptions?: ResolvedFilterOptions\n readonly operator: Operator\n readonly orIndex: number\n readonly reducedFields: ReducedField[]\n readonly removeCondition: RemoveCondition\n readonly RenderedFilter?: React.ReactNode\n readonly updateCondition: UpdateCondition\n readonly value: Value\n}\n\nimport type { Operator, Option as PayloadOption, ResolvedFilterOptions } from 'payload'\n\nimport type { Option } from '../../ReactSelect/index.js'\n\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DefaultFilter } from './DefaultFilter/index.js'\nimport { getOperatorValueTypes } from './validOperators.js'\nimport './index.scss'\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n addCondition,\n andIndex,\n fieldPath,\n filterOptions,\n operator,\n orIndex,\n reducedFields,\n removeCondition,\n RenderedFilter,\n updateCondition,\n value,\n } = props\n\n const { t } = useTranslation()\n\n const reducedField = reducedFields.find((field) => field.value === fieldPath)\n\n const [internalValue, setInternalValue] = useState<Value>(value)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n const booleanSelect = ['exists'].includes(operator) || reducedField?.field?.type === 'checkbox'\n\n let valueOptions: PayloadOption[] = []\n\n if (booleanSelect) {\n valueOptions = [\n { label: t('general:true'), value: 'true' },\n { label: t('general:false'), value: 'false' },\n ]\n } else if (reducedField?.field && 'options' in reducedField.field) {\n valueOptions = reducedField.field.options\n }\n\n const updateValue = useEffectEvent(async (debouncedValue: Value) => {\n if (operator) {\n await updateCondition({\n type: 'value',\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: debouncedValue === null || debouncedValue === '' ? undefined : debouncedValue,\n })\n }\n })\n\n useEffect(() => {\n void updateValue(debouncedValue)\n }, [debouncedValue])\n\n const disabled =\n (!reducedField?.value && typeof reducedField?.value !== 'number') ||\n reducedField?.field?.admin?.disableListFilter\n\n const handleFieldChange = useCallback(\n async (field: Option<string>) => {\n setInternalValue(undefined)\n await updateCondition({\n type: 'field',\n andIndex,\n field: reducedFields.find((option) => option.value === field.value),\n operator,\n orIndex,\n value: undefined,\n })\n },\n [andIndex, operator, orIndex, reducedFields, updateCondition],\n )\n\n const handleOperatorChange = useCallback(\n async (operator: Option<Operator>) => {\n const operatorValueTypes = getOperatorValueTypes(reducedField.field.type)\n const validOperatorValue = operatorValueTypes[operator.value] || 'any'\n const isValidValue =\n validOperatorValue === 'any' ||\n typeof value === validOperatorValue ||\n (validOperatorValue === 'boolean' && (value === 'true' || value === 'false'))\n\n if (!isValidValue) {\n // if the current value is not valid for the new operator\n // reset the value before passing it to updateCondition\n setInternalValue(undefined)\n }\n\n await updateCondition({\n type: 'operator',\n andIndex,\n field: reducedField,\n operator: operator.value,\n orIndex,\n value: isValidValue ? value : undefined,\n })\n },\n [andIndex, reducedField, orIndex, updateCondition, value],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n disabled={disabled}\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n isClearable={false}\n onChange={handleFieldChange}\n options={reducedFields.filter((field) => !field.field.admin.disableListFilter)}\n value={\n reducedField || {\n value: reducedField?.value,\n }\n }\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={disabled}\n isClearable={false}\n onChange={handleOperatorChange}\n options={reducedField?.operators}\n value={reducedField?.operators.find((o) => operator === o.value) || null}\n />\n </div>\n <div className={`${baseClass}__value`}>\n {RenderedFilter || (\n <DefaultFilter\n booleanSelect={booleanSelect}\n disabled={\n !operator || !reducedField || reducedField?.field?.admin?.disableListFilter\n }\n filterOptions={filterOptions}\n internalField={reducedField}\n onChange={setInternalValue}\n operator={operator}\n options={valueOptions}\n value={internalValue ?? ''}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-remove`}\n icon=\"x\"\n iconStyle=\"with-border\"\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n round\n />\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__actions-add`}\n icon=\"plus\"\n iconStyle=\"with-border\"\n onClick={() =>\n addCondition({\n andIndex: andIndex + 1,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex,\n relation: 'and',\n })\n }\n round\n />\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,8 +3,9 @@ import type { WhereBuilderProps } from './types.js';
3
3
  import './index.scss';
4
4
  export { WhereBuilderProps };
5
5
  /**
6
- * The WhereBuilder component is used to render the filter controls for a collection's list view.
7
- * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).
6
+ * The WhereBuilder component is used to render the filter controls for a collection's list view
7
+ * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled
8
+ * by the form; otherwise it uses list query state from {@link useListQuery}.
8
9
  */
9
10
  export declare const WhereBuilder: React.FC<WhereBuilderProps>;
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAkD,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAQnG,OAAO,cAAc,CAAA;AAKrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAqNpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAkD,iBAAiB,EAAE,MAAM,YAAY,CAAA;AASnG,OAAO,cAAc,CAAA;AAKrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA8OpD,CAAA"}
@@ -6,6 +6,7 @@ import { dequal } from 'dequal/lite';
6
6
  import { transformWhereQuery, validateWhereQuery } from 'payload/shared';
7
7
  import React, { useMemo } from 'react';
8
8
  import { useAuth } from '../../providers/Auth/index.js';
9
+ import { useConfig } from '../../providers/Config/index.js';
9
10
  import { useListQuery } from '../../providers/ListQuery/index.js';
10
11
  import { useTranslation } from '../../providers/Translation/index.js';
11
12
  import { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js';
@@ -15,16 +16,19 @@ import './index.scss';
15
16
  import { fieldTypeConditions, getValidFieldOperators } from './field-types.js';
16
17
  const baseClass = 'where-builder';
17
18
  /**
18
- * The WhereBuilder component is used to render the filter controls for a collection's list view.
19
- * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).
19
+ * The WhereBuilder component is used to render the filter controls for a collection's list view
20
+ * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled
21
+ * by the form; otherwise it uses list query state from {@link useListQuery}.
20
22
  */
21
23
  export const WhereBuilder = props => {
22
24
  const {
23
- collectionPluralLabel,
25
+ collectionPluralLabel: collectionPluralLabelProp,
24
26
  collectionSlug,
25
- fields,
26
- renderedFilters,
27
- resolvedFilterOptions
27
+ fields: fieldsProp,
28
+ onChange,
29
+ renderedFilters = undefined,
30
+ resolvedFilterOptions = undefined,
31
+ value: valueProp
28
32
  } = props;
29
33
  const {
30
34
  i18n,
@@ -33,31 +37,42 @@ export const WhereBuilder = props => {
33
37
  const {
34
38
  permissions
35
39
  } = useAuth();
40
+ const {
41
+ getEntityConfig
42
+ } = useConfig();
43
+ const listQuery = useListQuery();
44
+ const isFormMode = typeof onChange === 'function';
45
+ const collectionConfig = useMemo(() => isFormMode ? getEntityConfig({
46
+ collectionSlug
47
+ }) : null, [isFormMode, collectionSlug, getEntityConfig]);
48
+ const collectionPluralLabel = isFormMode ? collectionConfig?.labels?.plural ?? collectionSlug : collectionPluralLabelProp ?? collectionSlug;
49
+ const fields = isFormMode ? collectionConfig?.fields : fieldsProp;
50
+ const fieldsSafe = fields ?? [];
36
51
  const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields;
37
52
  const reducedFields = useMemo(() => reduceFieldsToOptions({
38
53
  fieldPermissions,
39
- fields,
54
+ fields: fieldsSafe,
40
55
  i18n
41
- }), [fieldPermissions, fields, i18n]);
42
- const {
43
- handleWhereChange,
44
- query
45
- } = useListQuery();
56
+ }), [fieldPermissions, fieldsSafe, i18n]);
46
57
  const conditions = useMemo(() => {
47
- const whereFromSearch = query.where;
58
+ const whereFromSearch = isFormMode ? valueProp : listQuery.query?.where;
48
59
  if (whereFromSearch) {
49
60
  if (validateWhereQuery(whereFromSearch)) {
50
- return whereFromSearch.or;
61
+ return whereFromSearch.or ?? [];
51
62
  }
52
- // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format
53
63
  const transformedWhere = transformWhereQuery(whereFromSearch);
54
64
  if (validateWhereQuery(transformedWhere)) {
55
- return transformedWhere.or;
65
+ return transformedWhere.or ?? [];
66
+ }
67
+ if (!isFormMode) {
68
+ console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`); // eslint-disable-line no-console
56
69
  }
57
- console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`); // eslint-disable-line no-console
58
70
  }
59
71
  return [];
60
- }, [query.where]);
72
+ }, [isFormMode, valueProp, listQuery.query?.where]);
73
+ const handleWhereChange = isFormMode ? where => {
74
+ onChange?.(where);
75
+ } : listQuery.handleWhereChange;
61
76
  const addCondition = React.useCallback(async ({
62
77
  andIndex,
63
78
  field,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","dequal","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","existingValue","newRowCondition","removeCondition","length","_jsxs","className","Fragment","_jsx","label","map","compoundOrKey","Array","isArray","_","condition","fieldPath","Object","keys","filterOptions","get","RenderedFilter","buttonStyle","icon","iconPosition","iconStyle","onClick","find","admin","disableListFilter"],"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { dequal } from 'dequal/lite'\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 './index.scss'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\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\n // Skip if nothing changed\n const existingValue = existingCondition[String(field.value)]?.[validOperator]\n if (typeof existingValue !== 'undefined' && existingValue === value) {\n return\n }\n\n const newRowCondition = {\n [String(field.value)]: { [validOperator]: value },\n }\n\n if (dequal(existingCondition, newRowCondition)) {\n return\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n\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"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","dequal","transformWhereQuery","validateWhereQuery","React","useMemo","useAuth","useConfig","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionPluralLabel","collectionPluralLabelProp","collectionSlug","fields","fieldsProp","onChange","renderedFilters","undefined","resolvedFilterOptions","value","valueProp","i18n","t","permissions","getEntityConfig","listQuery","isFormMode","collectionConfig","labels","plural","fieldsSafe","fieldPermissions","collections","reducedFields","conditions","whereFromSearch","query","where","or","transformedWhere","console","warn","JSON","stringify","handleWhereChange","addCondition","useCallback","andIndex","field","orIndex","relation","newConditions","defaultOperator","type","operators","and","splice","String","push","updateCondition","operator","incomingOperator","existingCondition","validOperator","existingValue","newRowCondition","removeCondition","length","_jsxs","className","Fragment","_jsx","label","map","compoundOrKey","Array","isArray","_","condition","fieldPath","Object","keys","filterOptions","get","RenderedFilter","buttonStyle","icon","iconPosition","iconStyle","onClick","find","admin","disableListFilter"],"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { dequal } from 'dequal/lite'\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 { useConfig } from '../../providers/Config/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 './index.scss'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\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 * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled\n * by the form; otherwise it uses list query state from {@link useListQuery}.\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const {\n collectionPluralLabel: collectionPluralLabelProp,\n collectionSlug,\n fields: fieldsProp,\n onChange,\n renderedFilters = undefined,\n resolvedFilterOptions = undefined,\n value: valueProp,\n } = props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { getEntityConfig } = useConfig()\n const listQuery = useListQuery()\n\n const isFormMode = typeof onChange === 'function'\n\n const collectionConfig = useMemo(\n () => (isFormMode ? getEntityConfig({ collectionSlug }) : null),\n [isFormMode, collectionSlug, getEntityConfig],\n )\n const collectionPluralLabel = isFormMode\n ? (collectionConfig?.labels?.plural ?? collectionSlug)\n : (collectionPluralLabelProp ?? collectionSlug)\n const fields = isFormMode ? collectionConfig?.fields : fieldsProp\n const fieldsSafe = fields ?? []\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields: fieldsSafe,\n i18n,\n }),\n [fieldPermissions, fieldsSafe, i18n],\n )\n\n const conditions = useMemo(() => {\n const whereFromSearch = isFormMode ? valueProp : listQuery.query?.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or ?? []\n }\n\n const transformedWhere = transformWhereQuery(whereFromSearch)\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or ?? []\n }\n\n if (!isFormMode) {\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n }\n\n return []\n }, [isFormMode, valueProp, listQuery.query?.where])\n\n const handleWhereChange = isFormMode\n ? (where: { or: typeof conditions }) => {\n onChange?.(where)\n }\n : listQuery.handleWhereChange\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\n // Skip if nothing changed\n const existingValue = existingCondition[String(field.value)]?.[validOperator]\n if (typeof existingValue !== 'undefined' && existingValue === value) {\n return\n }\n\n const newRowCondition = {\n [String(field.value)]: { [validOperator]: value },\n }\n\n if (dequal(existingCondition, newRowCondition)) {\n return\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n\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"],"mappings":"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","ignoreList":[]}
@@ -1,10 +1,13 @@
1
1
  import type { ClientField, Operator, ResolvedFilterOptions, SanitizedCollectionConfig, Where } from 'payload';
2
2
  export type WhereBuilderProps = {
3
- readonly collectionPluralLabel: SanitizedCollectionConfig['labels']['plural'];
3
+ readonly collectionPluralLabel?: SanitizedCollectionConfig['labels']['plural'];
4
4
  readonly collectionSlug: SanitizedCollectionConfig['slug'];
5
5
  readonly fields?: ClientField[];
6
+ /** When set, WhereBuilder is controlled by the form (value + onChange) instead of list query. */
7
+ readonly onChange?: (where: Where) => void;
6
8
  readonly renderedFilters?: Map<string, React.ReactNode>;
7
9
  readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>;
10
+ readonly value?: Where;
8
11
  };
9
12
  export type Value = Date | number | number[] | string | string[];
10
13
  export type ReducedField = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/WhereBuilder/types.ts"],"sourcesContent":["import type {\n ClientField,\n Operator,\n ResolvedFilterOptions,\n SanitizedCollectionConfig,\n Where,\n} from 'payload'\n\nexport type WhereBuilderProps = {\n readonly collectionPluralLabel: SanitizedCollectionConfig['labels']['plural']\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly fields?: ClientField[]\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n}\n\nexport type Value = Date | number | number[] | string | string[]\n\nexport type ReducedField = {\n field: ClientField\n label: React.ReactNode\n operators: {\n label: string\n value: Operator\n }[]\n plainTextLabel?: string\n value: Value\n}\n\nexport type Relation = 'and' | 'or'\n\nexport type ADD = {\n andIndex?: number\n field: string\n orIndex?: number\n relation?: Relation\n type: 'add'\n}\n\nexport type REMOVE = {\n andIndex: number\n orIndex: number\n type: 'remove'\n}\n\nexport type UPDATE = {\n andIndex: number\n field?: string\n operator?: string\n orIndex: number\n type: 'update'\n value?: unknown\n}\n\nexport type Action = ADD | REMOVE | UPDATE\n\nexport type State = {\n or: Where[]\n}\n\nexport type AddCondition = ({\n andIndex,\n field,\n orIndex,\n relation,\n}: {\n andIndex: number\n field: ReducedField\n orIndex: number\n relation: 'and' | 'or'\n}) => Promise<void> | void\n\nexport type UpdateCondition = ({\n type,\n andIndex,\n field,\n operator,\n orIndex,\n value,\n}: {\n andIndex: number\n field: ReducedField\n operator: string\n orIndex: number\n type: 'field' | 'operator' | 'value'\n value: Value\n}) => Promise<void> | void\n\nexport type RemoveCondition = ({\n andIndex,\n orIndex,\n}: {\n andIndex: number\n orIndex: number\n}) => Promise<void> | void\n"],"mappings":"AAwFA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/WhereBuilder/types.ts"],"sourcesContent":["import type {\n ClientField,\n Operator,\n ResolvedFilterOptions,\n SanitizedCollectionConfig,\n Where,\n} from 'payload'\n\nexport type WhereBuilderProps = {\n readonly collectionPluralLabel?: SanitizedCollectionConfig['labels']['plural']\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly fields?: ClientField[]\n /** When set, WhereBuilder is controlled by the form (value + onChange) instead of list query. */\n readonly onChange?: (where: Where) => void\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n readonly value?: Where\n}\n\nexport type Value = Date | number | number[] | string | string[]\n\nexport type ReducedField = {\n field: ClientField\n label: React.ReactNode\n operators: {\n label: string\n value: Operator\n }[]\n plainTextLabel?: string\n value: Value\n}\n\nexport type Relation = 'and' | 'or'\n\nexport type ADD = {\n andIndex?: number\n field: string\n orIndex?: number\n relation?: Relation\n type: 'add'\n}\n\nexport type REMOVE = {\n andIndex: number\n orIndex: number\n type: 'remove'\n}\n\nexport type UPDATE = {\n andIndex: number\n field?: string\n operator?: string\n orIndex: number\n type: 'update'\n value?: unknown\n}\n\nexport type Action = ADD | REMOVE | UPDATE\n\nexport type State = {\n or: Where[]\n}\n\nexport type AddCondition = ({\n andIndex,\n field,\n orIndex,\n relation,\n}: {\n andIndex: number\n field: ReducedField\n orIndex: number\n relation: 'and' | 'or'\n}) => Promise<void> | void\n\nexport type UpdateCondition = ({\n type,\n andIndex,\n field,\n operator,\n orIndex,\n value,\n}: {\n andIndex: number\n field: ReducedField\n operator: string\n orIndex: number\n type: 'field' | 'operator' | 'value'\n value: Value\n}) => Promise<void> | void\n\nexport type RemoveCondition = ({\n andIndex,\n orIndex,\n}: {\n andIndex: number\n orIndex: number\n}) => Promise<void> | void\n"],"mappings":"AA2FA","ignoreList":[]}
@@ -10,5 +10,5 @@ function require(m) {
10
10
  }
11
11
  // Workaround end
12
12
 
13
- import{n as a}from"./chunk-ZPLD37T2.js";import"./chunk-5LKBKI4T.js";export{a as default};
14
- //# sourceMappingURL=DatePicker-YF5TBW3N.js.map
13
+ import{n as a}from"./chunk-SH42NW5R.js";import"./chunk-5LKBKI4T.js";export{a as default};
14
+ //# sourceMappingURL=DatePicker-CL2EGBVQ.js.map