@payloadcms/ui 3.62.0-canary.2 → 3.62.0-canary.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Date/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,eAAe,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAM1D,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAQtC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Date/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,eAAe,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAO1D,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAetC,CAAA"}
@@ -1,27 +1,36 @@
1
1
  'use client';
2
2
 
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
+ import { getTranslation } from '@payloadcms/translations';
4
5
  import React from 'react';
6
+ import { useTranslation } from '../../../../providers/Translation/index.js';
5
7
  import { DatePickerField } from '../../../DatePicker/index.js';
6
8
  const baseClass = 'condition-value-date';
7
- export const DateFilter = ({
8
- disabled,
9
- field: {
9
+ export const DateFilter = t0 => {
10
+ const {
11
+ disabled,
12
+ field: t1,
13
+ onChange,
14
+ value
15
+ } = t0;
16
+ const {
10
17
  admin
11
- },
12
- onChange,
13
- value
14
- }) => {
18
+ } = t1;
15
19
  const {
16
20
  date
17
21
  } = admin || {};
18
- return /*#__PURE__*/_jsx("div", {
22
+ const {
23
+ i18n,
24
+ t
25
+ } = useTranslation();
26
+ return _jsx("div", {
19
27
  className: baseClass,
20
- children: /*#__PURE__*/_jsx(DatePickerField, {
28
+ children: _jsx(DatePickerField, {
21
29
  ...date,
22
- onChange: onChange,
30
+ onChange,
31
+ placeholder: getTranslation(admin.placeholder, i18n) || t("general:enterAValue"),
23
32
  readOnly: disabled,
24
- value: value
33
+ value
25
34
  })
26
35
  });
27
36
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","DatePickerField","baseClass","DateFilter","disabled","field","admin","onChange","value","date","_jsx","className","readOnly"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Date/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { DateFilterProps as Props } from './types.js'\n\nimport { DatePickerField } from '../../../DatePicker/index.js'\n\nconst baseClass = 'condition-value-date'\n\nexport const DateFilter: React.FC<Props> = ({ disabled, field: { admin }, onChange, value }) => {\n const { date } = admin || {}\n\n return (\n <div className={baseClass}>\n <DatePickerField {...date} onChange={onChange} readOnly={disabled} value={value as Date} />\n </div>\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,KAAA,MAAW;AAIlB,SAASC,eAAe,QAAQ;AAEhC,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,UAAA,GAA8BA,CAAC;EAAEC,QAAQ;EAAEC,KAAA,EAAO;IAAEC;EAAK,CAAE;EAAEC,QAAQ;EAAEC;AAAK,CAAE;EACzF,MAAM;IAAEC;EAAI,CAAE,GAAGH,KAAA,IAAS,CAAC;EAE3B,oBACEI,IAAA,CAAC;IAAIC,SAAA,EAAWT,SAAA;cACd,aAAAQ,IAAA,CAACT,eAAA;MAAiB,GAAGQ,IAAI;MAAEF,QAAA,EAAUA,QAAA;MAAUK,QAAA,EAAUR,QAAA;MAAUI,KAAA,EAAOA;;;AAGhF","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["getTranslation","React","useTranslation","DatePickerField","baseClass","DateFilter","t0","disabled","field","t1","onChange","value","admin","date","i18n","t","_jsx","className","children","placeholder","readOnly"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Date/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { DateFilterProps as Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { DatePickerField } from '../../../DatePicker/index.js'\n\nconst baseClass = 'condition-value-date'\n\nexport const DateFilter: React.FC<Props> = ({ disabled, field: { admin }, onChange, value }) => {\n const { date } = admin || {}\n const { i18n, t } = useTranslation()\n\n return (\n <div className={baseClass}>\n <DatePickerField\n {...date}\n onChange={onChange}\n placeholder={getTranslation(admin.placeholder, i18n) || t('general:enterAValue')}\n readOnly={disabled}\n value={value as Date}\n />\n </div>\n )\n}\n"],"mappings":"AAAA;;;AACA,SAASA,cAAc,QAAQ;AAC/B,OAAOC,KAAA,MAAW;AAIlB,SAASC,cAAc,QAAQ;AAC/B,SAASC,eAAe,QAAQ;AAEhC,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,UAAA,GAA8BC,EAAA;EAAC;IAAAC,QAAA;IAAAC,KAAA,EAAAC,EAAA;IAAAC,QAAA;IAAAC;EAAA,IAAAL,EAA+C;EAA5B;IAAAM;EAAA,IAAAH,EAAS;EACtE;IAAAI;EAAA,IAAiBD,KAAA,MAAU;EAC3B;IAAAE,IAAA;IAAAC;EAAA,IAAoBb,cAAA;EAAA,OAGlBc,IAAA,CAAC;IAAAC,SAAA,EAAAb,SAAA;IAAAc,QAAA,EACCF,IAAA,CAAAb,eAAA;MAAA,GACMU,IAAI;MAAAH,QAAA;MAAAS,WAAA,EAEKnB,cAAA,CAAeY,KAAA,CAAAO,WAAA,EAAmBL,IAAA,KAASC,CAAA,CAAE;MAAAK,QAAA,EAChDb,QAAA;MAAAI;IAAA,C;;CAKlB","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAI5D,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA6ExC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,iBAAiB,IAAI,KAAK,EAAE,MAAM,YAAY,CAAA;AAI5D,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA+ExC,CAAA"}
@@ -2,13 +2,14 @@
2
2
 
3
3
  import { c as _c } from "react/compiler-runtime";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
+ import { getTranslation } from '@payloadcms/translations';
5
6
  import React from 'react';
6
7
  import { useTranslation } from '../../../../providers/Translation/index.js';
7
8
  import { ReactSelect } from '../../../ReactSelect/index.js';
8
9
  import './index.scss';
9
10
  const baseClass = 'condition-value-number';
10
11
  export const NumberFilter = props => {
11
- const $ = _c(18);
12
+ const $ = _c(20);
12
13
  const {
13
14
  disabled,
14
15
  field: t0,
@@ -17,9 +18,11 @@ export const NumberFilter = props => {
17
18
  value
18
19
  } = props;
19
20
  const {
21
+ admin,
20
22
  hasMany
21
23
  } = t0;
22
24
  const {
25
+ i18n,
23
26
  t
24
27
  } = useTranslation();
25
28
  let t1;
@@ -84,7 +87,8 @@ export const NumberFilter = props => {
84
87
  }
85
88
  React.useEffect(t4, t5);
86
89
  let t6;
87
- if ($[10] !== disabled || $[11] !== isMulti || $[12] !== onChange || $[13] !== onSelect || $[14] !== t || $[15] !== value || $[16] !== valueToRender) {
90
+ if ($[10] !== admin?.placeholder || $[11] !== disabled || $[12] !== i18n || $[13] !== isMulti || $[14] !== onChange || $[15] !== onSelect || $[16] !== t || $[17] !== value || $[18] !== valueToRender) {
91
+ const placeholder = getTranslation(admin?.placeholder, i18n) || t("general:enterAValue");
88
92
  t6 = isMulti ? _jsx(ReactSelect, {
89
93
  disabled,
90
94
  isClearable: true,
@@ -94,26 +98,28 @@ export const NumberFilter = props => {
94
98
  numberOnly: true,
95
99
  onChange: onSelect,
96
100
  options: [],
97
- placeholder: t("general:enterAValue"),
101
+ placeholder,
98
102
  value: valueToRender || []
99
103
  }) : _jsx("input", {
100
104
  className: baseClass,
101
105
  disabled,
102
106
  onChange: e => onChange(e.target.value),
103
- placeholder: t("general:enterAValue"),
107
+ placeholder,
104
108
  type: "number",
105
109
  value
106
110
  });
107
- $[10] = disabled;
108
- $[11] = isMulti;
109
- $[12] = onChange;
110
- $[13] = onSelect;
111
- $[14] = t;
112
- $[15] = value;
113
- $[16] = valueToRender;
114
- $[17] = t6;
111
+ $[10] = admin?.placeholder;
112
+ $[11] = disabled;
113
+ $[12] = i18n;
114
+ $[13] = isMulti;
115
+ $[14] = onChange;
116
+ $[15] = onSelect;
117
+ $[16] = t;
118
+ $[17] = value;
119
+ $[18] = valueToRender;
120
+ $[19] = t6;
115
121
  } else {
116
- t6 = $[17];
122
+ t6 = $[19];
117
123
  }
118
124
  return t6;
119
125
  };
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useTranslation","ReactSelect","baseClass","NumberFilter","props","$","disabled","field","t0","onChange","operator","value","hasMany","t","t1","includes","isMulti","t2","Symbol","for","valueToRender","setValueToRender","useState","t3","selectedOption","newValue","Array","isArray","map","_temp","onSelect","t4","t5","_temp2","useEffect","t6","_jsx","isClearable","isCreatable","isSortable","numberOnly","options","placeholder","className","e","target","type","option","Number","val","index","id","label","toString"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"sourcesContent":["'use client'\nimport React from 'react'\n\nimport type { NumberFilterProps as Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-number'\n\nexport const NumberFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { hasMany },\n onChange,\n operator,\n value,\n } = props\n\n const { t } = useTranslation()\n\n const isMulti = ['in', 'not_in'].includes(operator) || hasMany\n\n const [valueToRender, setValueToRender] = React.useState<\n { id: string; label: string; value: { value: number } }[]\n >([])\n\n const onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (isMulti) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => Number(option.value?.value || option.value))\n } else {\n newValue = [Number(selectedOption.value?.value || selectedOption.value)]\n }\n }\n\n onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n if (Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as any)?.value || val,\n },\n }\n }),\n )\n } else {\n setValueToRender([])\n }\n }, [value])\n\n return isMulti ? (\n <ReactSelect\n disabled={disabled}\n isClearable\n isCreatable\n isMulti={isMulti}\n isSortable\n numberOnly\n onChange={onSelect}\n options={[]}\n placeholder={t('general:enterAValue')}\n value={valueToRender || []}\n />\n ) : (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={t('general:enterAValue')}\n type=\"number\"\n value={value as number}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,KAAA,MAAW;AAIlB,SAASC,cAAc,QAAQ;AAC/B,SAASC,WAAW,QAAQ;AAC5B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,YAAA,GAAgCC,KAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAC3C;IAAAQ,QAAA;IAAAC,KAAA,EAAAC,EAAA;IAAAC,QAAA;IAAAC,QAAA;IAAAC;EAAA,IAMIP,KAAA;EAJK;IAAAQ;EAAA,IAAAJ,EAAW;EAMpB;IAAAK;EAAA,IAAcb,cAAA;EAAA,IAAAc,EAAA;EAAA,IAAAT,CAAA,QAAAO,OAAA,IAAAP,CAAA,QAAAK,QAAA;IAEEI,EAAA,IAAC,MAAM,UAAAC,QAAA,CAAmBL,QAAA,KAAaE,OAAA;IAAAP,CAAA,MAAAO,OAAA;IAAAP,CAAA,MAAAK,QAAA;IAAAL,CAAA,MAAAS,EAAA;EAAA;IAAAA,EAAA,GAAAT,CAAA;EAAA;EAAvD,MAAAW,OAAA,GAAgBF,EAAuC;EAAA,IAAAG,EAAA;EAAA,IAAAZ,CAAA,QAAAa,MAAA,CAAAC,GAAA;IAIrDF,EAAA;IAAEZ,CAAA,MAAAY,EAAA;EAAA;IAAAA,EAAA,GAAAZ,CAAA;EAAA;EAFJ,OAAAe,aAAA,EAAAC,gBAAA,IAA0CtB,KAAA,CAAAuB,QAAA,CAExCL,EAAE;EAAA,IAAAM,EAAA;EAAA,IAAAlB,CAAA,QAAAW,OAAA,IAAAX,CAAA,QAAAI,QAAA;IAGFc,EAAA,GAAAC,cAAA;MACMC,GAAA,CAAAA,QAAA;MAAA,KACCD,cAAA;QACHC,QAAA,CAAAA,CAAA,CAAAA,EAAA;MAAA;QAAA,IACST,OAAA;UAAA,IACLU,KAAA,CAAAC,OAAA,CAAcH,cAAA;YAChBC,QAAA,CAAAA,CAAA,CAAWD,cAAA,CAAAI,GAAA,CAAAC,KAAyE;UAApF;YAEAJ,QAAA,CAAAA,CAAA,CAAAA,CAAYA,OAAOD,cAAA,CAAAb,KAAA,EAAAA,KAAA,IAA+Ba,cAAA,CAAAb,KAAoB;UAAtE;QAAA;MAAA;MAIJF,QAAA,CAASgB,QAAA;IAAA;IACXpB,CAAA,MAAAW,OAAA;IAAAX,CAAA,MAAAI,QAAA;IAAAJ,CAAA,MAAAkB,EAAA;EAAA;IAAAA,EAAA,GAAAlB,CAAA;EAAA;EAdF,MAAAyB,QAAA,GAAiBP,EAeI;EAAA,IAAAQ,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAA3B,CAAA,QAAAM,KAAA;IAGLoB,EAAA,GAAAA,CAAA;MAAA,IACVL,KAAA,CAAAC,OAAA,CAAchB,KAAA;QAChBU,gBAAA,CACEV,KAAA,CAAAiB,GAAA,CAAAK,MASA;MAAA;QAGFZ,gBAAA,GAAmB;MAAA;IAAA;IAEpBW,EAAA,IAACrB,KAAA;IAAMN,CAAA,MAAAM,KAAA;IAAAN,CAAA,MAAA0B,EAAA;IAAA1B,CAAA,MAAA2B,EAAA;EAAA;IAAAD,EAAA,GAAA1B,CAAA;IAAA2B,EAAA,GAAA3B,CAAA;EAAA;EAjBVN,KAAA,CAAAmC,SAAA,CAAgBH,EAiBhB,EAAGC,EAAO;EAAA,IAAAG,EAAA;EAAA,IAAA9B,CAAA,SAAAC,QAAA,IAAAD,CAAA,SAAAW,OAAA,IAAAX,CAAA,SAAAI,QAAA,IAAAJ,CAAA,SAAAyB,QAAA,IAAAzB,CAAA,SAAAQ,CAAA,IAAAR,CAAA,SAAAM,KAAA,IAAAN,CAAA,SAAAe,aAAA;IAEHe,EAAA,GAAAnB,OAAA,GACLoB,IAAA,CAAAnC,WAAA;MAAAK,QAAA;MAAA+B,WAAA;MAAAC,WAAA;MAAAtB,OAAA;MAAAuB,UAAA;MAAAC,UAAA;MAAA/B,QAAA,EAOYqB,QAAA;MAAAW,OAAA;MAAAC,WAAA,EAEG7B,CAAA,CAAE;MAAAF,KAAA,EACRS,aAAA;IAAmB,C,IAG5BgB,IAAA,CAAC;MAAAO,SAAA,EAAAzC,SAAA;MAAAI,QAAA;MAAAG,QAAA,EAAAmC,CAAA,IAGkBnC,QAAA,CAASmC,CAAA,CAAAC,MAAA,CAAAlC,KAAc;MAAA+B,WAAA,EAC3B7B,CAAA,CAAE;MAAAiC,IAAA,EACV;MAAAnC;IAAA,C;;;;;;;;;;;;SAnBFwB,E;CAuBT;AA7E6C,SAAAN,MAAAkB,MAAA;EAAA,OAwBOC,MAAA,CAAOD,MAAA,CAAApC,KAAA,EAAAA,KAAA,IAAuBoC,MAAA,CAAApC,KAAY;AAAA;AAxBjD,SAAAsB,OAAAgB,GAAA,EAAAC,KAAA;EAAA;IAAAC,EAAA,EAwC7B,GAAGF,GAAA,GAAMC,KAAA,EAAO;IAAAE,KAAA,EACb,GAAGH,GAAA,EAAK;IAAAtC,KAAA;MAAA0C,QAAA,EAAAA,CAAA,KAEG,GAAGJ,GAAA,GAAMC,KAAA,EAAO;MAAAvC,KAAA,EACzBsC,GAAC,EAAAtC,KAAA,IAAsBsC;IAAA;EAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","React","useTranslation","ReactSelect","baseClass","NumberFilter","props","$","disabled","field","t0","onChange","operator","value","admin","hasMany","i18n","t","t1","includes","isMulti","t2","Symbol","for","valueToRender","setValueToRender","useState","t3","selectedOption","newValue","Array","isArray","map","_temp","onSelect","t4","t5","_temp2","useEffect","t6","placeholder","_jsx","isClearable","isCreatable","isSortable","numberOnly","options","className","e","target","type","option","Number","val","index","id","label","toString"],"sources":["../../../../../src/elements/WhereBuilder/Condition/Number/index.tsx"],"sourcesContent":["'use client'\nimport { getTranslation } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { NumberFilterProps as Props } from './types.js'\n\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { ReactSelect } from '../../../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'condition-value-number'\n\nexport const NumberFilter: React.FC<Props> = (props) => {\n const {\n disabled,\n field: { admin, hasMany },\n onChange,\n operator,\n value,\n } = props\n\n const { i18n, t } = useTranslation()\n\n const isMulti = ['in', 'not_in'].includes(operator) || hasMany\n\n const [valueToRender, setValueToRender] = React.useState<\n { id: string; label: string; value: { value: number } }[]\n >([])\n\n const onSelect = React.useCallback(\n (selectedOption) => {\n let newValue\n if (!selectedOption) {\n newValue = []\n } else if (isMulti) {\n if (Array.isArray(selectedOption)) {\n newValue = selectedOption.map((option) => Number(option.value?.value || option.value))\n } else {\n newValue = [Number(selectedOption.value?.value || selectedOption.value)]\n }\n }\n\n onChange(newValue)\n },\n [isMulti, onChange],\n )\n\n React.useEffect(() => {\n if (Array.isArray(value)) {\n setValueToRender(\n value.map((val, index) => {\n return {\n id: `${val}${index}`, // append index to avoid duplicate keys but allow duplicate numbers\n label: `${val}`,\n value: {\n toString: () => `${val}${index}`,\n value: (val as any)?.value || val,\n },\n }\n }),\n )\n } else {\n setValueToRender([])\n }\n }, [value])\n\n const placeholder = getTranslation(admin?.placeholder, i18n) || t('general:enterAValue')\n\n return isMulti ? (\n <ReactSelect\n disabled={disabled}\n isClearable\n isCreatable\n isMulti={isMulti}\n isSortable\n numberOnly\n onChange={onSelect}\n options={[]}\n placeholder={placeholder}\n value={valueToRender || []}\n />\n ) : (\n <input\n className={baseClass}\n disabled={disabled}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n type=\"number\"\n value={value as number}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,eAAe,EACf,KAAK,EACN,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAA;IACxC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,OAAO,KAAK,EAAE,QAAQ,EAA2B,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAWvF,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAiLrC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAE/D,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,eAAe,EACf,KAAK,EACN,MAAM,aAAa,CAAA;AAEpB,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAA;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,aAAa,EAAE,qBAAqB,CAAA;IAC7C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,aAAa,EAAE,YAAY,EAAE,CAAA;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAA;IACxC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAA;IACzC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CACtB,CAAA;AAED,OAAO,KAAK,EAAE,QAAQ,EAA2B,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAWvF,OAAO,cAAc,CAAA;AAIrB,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAoLrC,CAAA"}
@@ -47,6 +47,7 @@ export const Condition = props => {
47
47
  const updateValue = useEffectEvent(async debouncedValue_0 => {
48
48
  if (operator) {
49
49
  await updateCondition({
50
+ type: 'value',
50
51
  andIndex,
51
52
  field: reducedField,
52
53
  operator,
@@ -62,6 +63,7 @@ export const Condition = props => {
62
63
  const handleFieldChange = useCallback(async field_0 => {
63
64
  setInternalValue(undefined);
64
65
  await updateCondition({
66
+ type: 'field',
65
67
  andIndex,
66
68
  field: reducedFields.find(option => option.value === field_0.value),
67
69
  operator,
@@ -79,6 +81,7 @@ export const Condition = props => {
79
81
  setInternalValue(undefined);
80
82
  }
81
83
  await updateCondition({
84
+ type: 'operator',
82
85
  andIndex,
83
86
  field: reducedField,
84
87
  operator: operator_0.value,
@@ -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","disabled","admin","disableListFilter","handleFieldChange","undefined","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) => {\n if (operator) {\n await updateCondition({\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: debouncedValue === null ? '' : 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 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 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","disabled","admin","disableListFilter","handleFieldChange","undefined","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) => {\n if (operator) {\n await updateCondition({\n type: 'value',\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: debouncedValue === null ? '' : 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,8 +1,9 @@
1
+ import type { ClientField } from 'payload';
1
2
  export declare const arrayOperators: {
2
3
  label: string;
3
4
  value: string;
4
5
  }[];
5
- declare const fieldTypeConditions: {
6
+ export declare const fieldTypeConditions: {
6
7
  [key: string]: {
7
8
  component: string;
8
9
  operators: {
@@ -11,5 +12,14 @@ declare const fieldTypeConditions: {
11
12
  }[];
12
13
  };
13
14
  };
14
- export default fieldTypeConditions;
15
+ export declare const getValidFieldOperators: ({ field, operator, }: {
16
+ field: ClientField;
17
+ operator?: string;
18
+ }) => {
19
+ validOperator: string;
20
+ validOperators: {
21
+ label: string;
22
+ value: string;
23
+ }[];
24
+ };
15
25
  //# sourceMappingURL=field-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/field-types.tsx"],"names":[],"mappings":"AAYA,eAAO,MAAM,cAAc;;;GAa1B,CAAA;AA6DD,QAAA,MAAM,mBAAmB,EAAE;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC9C,CAAA;CA0DF,CAAA;AAED,eAAe,mBAAmB,CAAA"}
1
+ {"version":3,"file":"field-types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/field-types.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAa1C,eAAO,MAAM,cAAc;;;GAS1B,CAAA;AA8DD,eAAO,MAAM,mBAAmB,EAAE;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG;QACb,SAAS,EAAE,MAAM,CAAA;QACjB,SAAS,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,EAAE,CAAA;KAC9C,CAAA;CA0DF,CAAA;AAED,eAAO,MAAM,sBAAsB,yBAGhC;IACD,KAAK,EAAE,WAAW,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,KAAG;IACF,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE;QACd,KAAK,EAAE,MAAM,CAAA;QACb,KAAK,EAAE,MAAM,CAAA;KACd,EAAE,CAAA;CAwBJ,CAAA"}
@@ -13,11 +13,12 @@ export const arrayOperators = [{
13
13
  }, {
14
14
  label: 'isNotIn',
15
15
  value: 'not_in'
16
- }, {
16
+ }];
17
+ const exists = {
17
18
  label: 'exists',
18
19
  value: 'exists'
19
- }];
20
- const base = [...equalsOperators, ...arrayOperators];
20
+ };
21
+ const base = [...equalsOperators, ...arrayOperators, exists];
21
22
  const numeric = [...base, {
22
23
  label: 'isGreaterThan',
23
24
  value: 'greater_than'
@@ -32,9 +33,6 @@ const numeric = [...base, {
32
33
  value: 'greater_than_equal'
33
34
  }];
34
35
  const geo = [...equalsOperators, {
35
- label: 'exists',
36
- value: 'exists'
37
- }, {
38
36
  label: 'near',
39
37
  value: 'near'
40
38
  }];
@@ -58,10 +56,10 @@ const contains = {
58
56
  label: 'contains',
59
57
  value: 'contains'
60
58
  };
61
- const fieldTypeConditions = {
59
+ export const fieldTypeConditions = {
62
60
  checkbox: {
63
61
  component: 'Text',
64
- operators: equalsOperators
62
+ operators: [...equalsOperators, exists]
65
63
  },
66
64
  code: {
67
65
  component: 'Text',
@@ -69,7 +67,7 @@ const fieldTypeConditions = {
69
67
  },
70
68
  date: {
71
69
  component: 'Date',
72
- operators: [...base, ...numeric]
70
+ operators: [...numeric, exists]
73
71
  },
74
72
  email: {
75
73
  component: 'Text',
@@ -81,11 +79,11 @@ const fieldTypeConditions = {
81
79
  },
82
80
  number: {
83
81
  component: 'Number',
84
- operators: [...base, ...numeric]
82
+ operators: [...numeric, exists]
85
83
  },
86
84
  point: {
87
85
  component: 'Point',
88
- operators: [...geo, within, intersects]
86
+ operators: [...geo, exists, within, intersects]
89
87
  },
90
88
  radio: {
91
89
  component: 'Select',
@@ -116,5 +114,25 @@ const fieldTypeConditions = {
116
114
  operators: [...base]
117
115
  }
118
116
  };
119
- export default fieldTypeConditions;
117
+ export const getValidFieldOperators = ({
118
+ field,
119
+ operator
120
+ }) => {
121
+ let validOperators = [];
122
+ if (field.type === 'relationship' && Array.isArray(field.relationTo)) {
123
+ if ('hasMany' in field && field.hasMany) {
124
+ validOperators = [...equalsOperators, exists];
125
+ } else {
126
+ validOperators = [...base];
127
+ }
128
+ } else {
129
+ validOperators = [...fieldTypeConditions[field.type].operators];
130
+ }
131
+ return {
132
+ validOperator: operator && validOperators.find(({
133
+ value
134
+ }) => value === operator) ? operator : validOperators[0].value,
135
+ validOperators
136
+ };
137
+ };
120
138
  //# sourceMappingURL=field-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"field-types.js","names":["equalsOperators","label","value","arrayOperators","base","numeric","geo","within","intersects","like","notLike","contains","fieldTypeConditions","checkbox","component","operators","code","date","email","json","number","point","radio","relationship","richText","select","text","textarea","upload"],"sources":["../../../src/elements/WhereBuilder/field-types.tsx"],"sourcesContent":["'use client'\nconst equalsOperators = [\n {\n label: 'equals',\n value: 'equals',\n },\n {\n label: 'isNotEqualTo',\n value: 'not_equals',\n },\n]\n\nexport const arrayOperators = [\n {\n label: 'isIn',\n value: 'in',\n },\n {\n label: 'isNotIn',\n value: 'not_in',\n },\n {\n label: 'exists',\n value: 'exists',\n },\n]\n\nconst base = [...equalsOperators, ...arrayOperators]\n\nconst numeric = [\n ...base,\n {\n label: 'isGreaterThan',\n value: 'greater_than',\n },\n {\n label: 'isLessThan',\n value: 'less_than',\n },\n {\n label: 'isLessThanOrEqualTo',\n value: 'less_than_equal',\n },\n {\n label: 'isGreaterThanOrEqualTo',\n value: 'greater_than_equal',\n },\n]\n\nconst geo = [\n ...equalsOperators,\n {\n label: 'exists',\n value: 'exists',\n },\n {\n label: 'near',\n value: 'near',\n },\n]\n\nconst within = {\n label: 'within',\n value: 'within',\n}\n\nconst intersects = {\n label: 'intersects',\n value: 'intersects',\n}\n\nconst like = {\n label: 'isLike',\n value: 'like',\n}\n\nconst notLike = {\n label: 'isNotLike',\n value: 'not_like',\n}\n\nconst contains = {\n label: 'contains',\n value: 'contains',\n}\n\nconst fieldTypeConditions: {\n [key: string]: {\n component: string\n operators: { label: string; value: string }[]\n }\n} = {\n checkbox: {\n component: 'Text',\n operators: equalsOperators,\n },\n code: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n date: {\n component: 'Date',\n operators: [...base, ...numeric],\n },\n email: {\n component: 'Text',\n operators: [...base, contains],\n },\n json: {\n component: 'Text',\n operators: [...base, like, contains, notLike, within, intersects],\n },\n number: {\n component: 'Number',\n operators: [...base, ...numeric],\n },\n point: {\n component: 'Point',\n operators: [...geo, within, intersects],\n },\n radio: {\n component: 'Select',\n operators: [...base],\n },\n relationship: {\n component: 'Relationship',\n operators: [...base],\n },\n richText: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n select: {\n component: 'Select',\n operators: [...base],\n },\n text: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n textarea: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n upload: {\n component: 'Text',\n operators: [...base],\n },\n}\n\nexport default fieldTypeConditions\n"],"mappings":"AAAA;;AACA,MAAMA,eAAA,GAAkB,CACtB;EACEC,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,GACA;EACED,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,EACD;AAED,OAAO,MAAMC,cAAA,GAAiB,CAC5B;EACEF,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,GACA;EACED,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,GACA;EACED,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,EACD;AAED,MAAME,IAAA,GAAO,C,GAAIJ,eAAA,E,GAAoBG,cAAA,CAAe;AAEpD,MAAME,OAAA,GAAU,C,GACXD,IAAA,EACH;EACEH,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,GACA;EACED,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,GACA;EACED,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,GACA;EACED,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,EACD;AAED,MAAMI,GAAA,GAAM,C,GACPN,eAAA,EACH;EACEC,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,GACA;EACED,KAAA,EAAO;EACPC,KAAA,EAAO;AACT,EACD;AAED,MAAMK,MAAA,GAAS;EACbN,KAAA,EAAO;EACPC,KAAA,EAAO;AACT;AAEA,MAAMM,UAAA,GAAa;EACjBP,KAAA,EAAO;EACPC,KAAA,EAAO;AACT;AAEA,MAAMO,IAAA,GAAO;EACXR,KAAA,EAAO;EACPC,KAAA,EAAO;AACT;AAEA,MAAMQ,OAAA,GAAU;EACdT,KAAA,EAAO;EACPC,KAAA,EAAO;AACT;AAEA,MAAMS,QAAA,GAAW;EACfV,KAAA,EAAO;EACPC,KAAA,EAAO;AACT;AAEA,MAAMU,mBAAA,GAKF;EACFC,QAAA,EAAU;IACRC,SAAA,EAAW;IACXC,SAAA,EAAWf;EACb;EACAgB,IAAA,EAAM;IACJF,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,EAAMK,IAAA,EAAMC,OAAA,EAASC,QAAA;EACtC;EACAM,IAAA,EAAM;IACJH,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,E,GAASC,OAAA;EAC1B;EACAa,KAAA,EAAO;IACLJ,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,EAAMO,QAAA;EACvB;EACAQ,IAAA,EAAM;IACJL,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,EAAMK,IAAA,EAAME,QAAA,EAAUD,OAAA,EAASH,MAAA,EAAQC,UAAA;EACxD;EACAY,MAAA,EAAQ;IACNN,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,E,GAASC,OAAA;EAC1B;EACAgB,KAAA,EAAO;IACLP,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIT,GAAA,EAAKC,MAAA,EAAQC,UAAA;EAC9B;EACAc,KAAA,EAAO;IACLR,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA;EACjB;EACAmB,YAAA,EAAc;IACZT,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA;EACjB;EACAoB,QAAA,EAAU;IACRV,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,EAAMK,IAAA,EAAMC,OAAA,EAASC,QAAA;EACtC;EACAc,MAAA,EAAQ;IACNX,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA;EACjB;EACAsB,IAAA,EAAM;IACJZ,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,EAAMK,IAAA,EAAMC,OAAA,EAASC,QAAA;EACtC;EACAgB,QAAA,EAAU;IACRb,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA,EAAMK,IAAA,EAAMC,OAAA,EAASC,QAAA;EACtC;EACAiB,MAAA,EAAQ;IACNd,SAAA,EAAW;IACXC,SAAA,EAAW,C,GAAIX,IAAA;EACjB;AACF;AAEA,eAAeQ,mBAAA","ignoreList":[]}
1
+ {"version":3,"file":"field-types.js","names":["equalsOperators","label","value","arrayOperators","exists","base","numeric","geo","within","intersects","like","notLike","contains","fieldTypeConditions","checkbox","component","operators","code","date","email","json","number","point","radio","relationship","richText","select","text","textarea","upload","getValidFieldOperators","field","operator","validOperators","type","Array","isArray","relationTo","hasMany","validOperator","find"],"sources":["../../../src/elements/WhereBuilder/field-types.tsx"],"sourcesContent":["'use client'\n\nimport type { ClientField } from 'payload'\n\nconst equalsOperators = [\n {\n label: 'equals',\n value: 'equals',\n },\n {\n label: 'isNotEqualTo',\n value: 'not_equals',\n },\n]\n\nexport const arrayOperators = [\n {\n label: 'isIn',\n value: 'in',\n },\n {\n label: 'isNotIn',\n value: 'not_in',\n },\n]\n\nconst exists = {\n label: 'exists',\n value: 'exists',\n}\n\nconst base = [...equalsOperators, ...arrayOperators, exists]\n\nconst numeric = [\n ...base,\n {\n label: 'isGreaterThan',\n value: 'greater_than',\n },\n {\n label: 'isLessThan',\n value: 'less_than',\n },\n {\n label: 'isLessThanOrEqualTo',\n value: 'less_than_equal',\n },\n {\n label: 'isGreaterThanOrEqualTo',\n value: 'greater_than_equal',\n },\n]\n\nconst geo = [\n ...equalsOperators,\n {\n label: 'near',\n value: 'near',\n },\n]\n\nconst within = {\n label: 'within',\n value: 'within',\n}\n\nconst intersects = {\n label: 'intersects',\n value: 'intersects',\n}\n\nconst like = {\n label: 'isLike',\n value: 'like',\n}\n\nconst notLike = {\n label: 'isNotLike',\n value: 'not_like',\n}\n\nconst contains = {\n label: 'contains',\n value: 'contains',\n}\n\nexport const fieldTypeConditions: {\n [key: string]: {\n component: string\n operators: { label: string; value: string }[]\n }\n} = {\n checkbox: {\n component: 'Text',\n operators: [...equalsOperators, exists],\n },\n code: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n date: {\n component: 'Date',\n operators: [...numeric, exists],\n },\n email: {\n component: 'Text',\n operators: [...base, contains],\n },\n json: {\n component: 'Text',\n operators: [...base, like, contains, notLike, within, intersects],\n },\n number: {\n component: 'Number',\n operators: [...numeric, exists],\n },\n point: {\n component: 'Point',\n operators: [...geo, exists, within, intersects],\n },\n radio: {\n component: 'Select',\n operators: [...base],\n },\n relationship: {\n component: 'Relationship',\n operators: [...base],\n },\n richText: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n select: {\n component: 'Select',\n operators: [...base],\n },\n text: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n textarea: {\n component: 'Text',\n operators: [...base, like, notLike, contains],\n },\n upload: {\n component: 'Text',\n operators: [...base],\n },\n}\n\nexport const getValidFieldOperators = ({\n field,\n operator,\n}: {\n field: ClientField\n operator?: string\n}): {\n validOperator: string\n validOperators: {\n label: string\n value: string\n }[]\n} => {\n let validOperators: {\n label: string\n value: string\n }[] = []\n\n if (field.type === 'relationship' && Array.isArray(field.relationTo)) {\n if ('hasMany' in field && field.hasMany) {\n validOperators = [...equalsOperators, exists]\n } else {\n validOperators = [...base]\n }\n } else {\n validOperators = [...fieldTypeConditions[field.type].operators]\n }\n\n return {\n validOperator:\n operator && validOperators.find(({ value }) => value === operator)\n ? operator\n : validOperators[0].value,\n validOperators,\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAkD,iBAAiB,EAAE,MAAM,YAAY,CAAA;AASnG,OAAO,cAAc,CAAA;AAIrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAkNpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAAkD,iBAAiB,EAAE,MAAM,YAAY,CAAA;AASnG,OAAO,cAAc,CAAA;AAIrB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;GAGG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAyMpD,CAAA"}
@@ -10,7 +10,7 @@ import { useTranslation } from '../../providers/Translation/index.js';
10
10
  import { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js';
11
11
  import { Button } from '../Button/index.js';
12
12
  import { Condition } from './Condition/index.js';
13
- import fieldTypes from './field-types.js';
13
+ import { fieldTypeConditions, getValidFieldOperators } from './field-types.js';
14
14
  import './index.scss';
15
15
  const baseClass = 'where-builder';
16
16
  /**
@@ -65,7 +65,7 @@ export const WhereBuilder = props => {
65
65
  relation
66
66
  }) => {
67
67
  const newConditions = [...conditions];
68
- const defaultOperator = fieldTypes[field.field.type].operators[0].value;
68
+ const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value;
69
69
  if (relation === 'and') {
70
70
  newConditions[orIndex].and.splice(andIndex, 0, {
71
71
  [String(field.value)]: {
@@ -90,27 +90,26 @@ export const WhereBuilder = props => {
90
90
  field: field_0,
91
91
  operator: incomingOperator,
92
92
  orIndex: orIndex_0,
93
- value: valueArg
93
+ value
94
94
  }) => {
95
95
  const existingCondition = conditions[orIndex_0].and[andIndex_0];
96
- const defaults = fieldTypes[field_0.field.type];
97
- const operator = incomingOperator || defaults.operators[0].value;
98
96
  if (typeof existingCondition === 'object' && field_0.value) {
99
- const value = valueArg ?? existingCondition?.[operator];
100
- const valueChanged = value !== existingCondition?.[String(field_0.value)]?.[String(operator)];
101
- const operatorChanged = operator !== Object.keys(existingCondition?.[String(field_0.value)] || {})?.[0];
102
- if (valueChanged || operatorChanged) {
103
- const newRowCondition = {
104
- [String(field_0.value)]: {
105
- [operator]: value
106
- }
107
- };
108
- const newConditions_0 = [...conditions];
109
- newConditions_0[orIndex_0].and[andIndex_0] = newRowCondition;
110
- await handleWhereChange({
111
- or: newConditions_0
112
- });
113
- }
97
+ const {
98
+ validOperator
99
+ } = getValidFieldOperators({
100
+ field: field_0.field,
101
+ operator: incomingOperator
102
+ });
103
+ const newRowCondition = {
104
+ [String(field_0.value)]: {
105
+ [validOperator]: value
106
+ }
107
+ };
108
+ const newConditions_0 = [...conditions];
109
+ newConditions_0[orIndex_0].and[andIndex_0] = newRowCondition;
110
+ await handleWhereChange({
111
+ or: newConditions_0
112
+ });
114
113
  }
115
114
  }, [conditions, handleWhereChange]);
116
115
  const removeCondition = React.useCallback(async ({
@@ -147,8 +146,8 @@ export const WhereBuilder = props => {
147
146
  children: Array.isArray(or?.and) && or.and.map((_, andIndex_2) => {
148
147
  const condition = conditions[orIndex_2].and[andIndex_2];
149
148
  const fieldPath = Object.keys(condition)[0];
150
- const operator_0 = Object.keys(condition?.[fieldPath] || {})?.[0] || undefined;
151
- const value_0 = condition?.[fieldPath]?.[operator_0] || undefined;
149
+ const operator = Object.keys(condition?.[fieldPath] || {})?.[0] || undefined;
150
+ const value_0 = condition?.[fieldPath]?.[operator] || undefined;
152
151
  return /*#__PURE__*/_jsxs("li", {
153
152
  children: [andIndex_2 !== 0 && /*#__PURE__*/_jsx("div", {
154
153
  className: `${baseClass}__label`,
@@ -158,7 +157,7 @@ export const WhereBuilder = props => {
158
157
  andIndex: andIndex_2,
159
158
  fieldPath: fieldPath,
160
159
  filterOptions: resolvedFilterOptions?.get(fieldPath),
161
- operator: operator_0,
160
+ operator: operator,
162
161
  orIndex: orIndex_2,
163
162
  reducedFields: reducedFields,
164
163
  removeCondition: removeCondition,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["getTranslation","transformWhereQuery","validateWhereQuery","React","useMemo","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypes","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","valueArg","existingCondition","defaults","valueChanged","operatorChanged","Object","keys","newRowCondition","removeCondition","length","_jsxs","className","Fragment","_jsx","label","map","compoundOrKey","Array","isArray","_","condition","fieldPath","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 { 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 fieldTypes from './field-types.js'\nimport './index.scss'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug, fields, renderedFilters, resolvedFilterOptions } =\n props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const { handleWhereChange, query } = useListQuery()\n\n const conditions = useMemo(() => {\n const whereFromSearch = query.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n\n return []\n }, [query.where])\n\n const addCondition: AddCondition = React.useCallback(\n async ({ andIndex, field, orIndex, relation }) => {\n const newConditions = [...conditions]\n\n const defaultOperator = fieldTypes[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: valueArg }) => {\n const existingCondition = conditions[orIndex].and[andIndex]\n\n const defaults = fieldTypes[field.field.type]\n const operator = incomingOperator || defaults.operators[0].value\n\n if (typeof existingCondition === 'object' && field.value) {\n const value = valueArg ?? existingCondition?.[operator]\n\n const valueChanged = value !== existingCondition?.[String(field.value)]?.[String(operator)]\n\n const operatorChanged =\n operator !== Object.keys(existingCondition?.[String(field.value)] || {})?.[0]\n\n if (valueChanged || operatorChanged) {\n const newRowCondition = {\n [String(field.value)]: { [operator]: value },\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n\n await handleWhereChange({ or: newConditions })\n }\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","transformWhereQuery","validateWhereQuery","React","useMemo","useAuth","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionPluralLabel","collectionSlug","fields","renderedFilters","resolvedFilterOptions","i18n","t","permissions","fieldPermissions","collections","reducedFields","handleWhereChange","query","conditions","whereFromSearch","where","or","transformedWhere","console","warn","JSON","stringify","addCondition","useCallback","andIndex","field","orIndex","relation","newConditions","defaultOperator","type","operators","value","and","splice","String","undefined","push","updateCondition","operator","incomingOperator","existingCondition","validOperator","newRowCondition","removeCondition","length","_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 { transformWhereQuery, validateWhereQuery } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport type { AddCondition, RemoveCondition, UpdateCondition, WhereBuilderProps } from './types.js'\n\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\nimport './index.scss'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view.\n * It is part of the {@link ListControls} component which is used to render the controls (search, filter, where).\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const { collectionPluralLabel, collectionSlug, fields, renderedFilters, resolvedFilterOptions } =\n props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields,\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const { handleWhereChange, query } = useListQuery()\n\n const conditions = useMemo(() => {\n const whereFromSearch = query.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or\n }\n\n // Transform the where query to be in the right format. This will transform something simple like [text][equals]=example%20post to the right format\n const transformedWhere = transformWhereQuery(whereFromSearch)\n\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or\n }\n\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n\n return []\n }, [query.where])\n\n const addCondition: AddCondition = React.useCallback(\n async ({ andIndex, field, orIndex, relation }) => {\n const newConditions = [...conditions]\n\n const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value\n\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n })\n } else {\n newConditions.push({\n and: [\n {\n [String(field.value)]: {\n [defaultOperator]: undefined,\n },\n },\n ],\n })\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const updateCondition: UpdateCondition = React.useCallback(\n async ({ andIndex, field, operator: incomingOperator, orIndex, value }) => {\n const existingCondition = conditions[orIndex].and[andIndex]\n\n if (typeof existingCondition === 'object' && field.value) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n const newRowCondition = {\n [String(field.value)]: { [validOperator]: value },\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n await handleWhereChange({ or: newConditions })\n }\n },\n [conditions, handleWhereChange],\n )\n\n const removeCondition: RemoveCondition = React.useCallback(\n async ({ andIndex, orIndex }) => {\n const newConditions = [...conditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n return (\n <div className={baseClass}>\n {conditions.length > 0 && (\n <React.Fragment>\n <p className={`${baseClass}__label`}>\n {t('general:filterWhere', { label: getTranslation(collectionPluralLabel, i18n) })}\n </p>\n <ul className={`${baseClass}__or-filters`}>\n {conditions.map((or, orIndex) => {\n const compoundOrKey = `${orIndex}_${Array.isArray(or?.and) ? or.and.length : ''}`\n\n return (\n <li key={compoundOrKey}>\n {orIndex !== 0 && <div className={`${baseClass}__label`}>{t('general:or')}</div>}\n <ul className={`${baseClass}__and-filters`}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const condition = conditions[orIndex].and[andIndex]\n const fieldPath = Object.keys(condition)[0]\n\n const operator =\n (Object.keys(condition?.[fieldPath] || {})?.[0] as Operator) || undefined\n\n const value = condition?.[fieldPath]?.[operator] || undefined\n\n return (\n <li key={andIndex}>\n {andIndex !== 0 && (\n <div className={`${baseClass}__label`}>{t('general:and')}</div>\n )}\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldPath={fieldPath}\n filterOptions={resolvedFilterOptions?.get(fieldPath)}\n operator={operator}\n orIndex={orIndex}\n reducedFields={reducedFields}\n removeCondition={removeCondition}\n RenderedFilter={renderedFilters?.get(fieldPath)}\n updateCondition={updateCondition}\n value={value}\n />\n </li>\n )\n })}\n </ul>\n </li>\n )\n })}\n </ul>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-or`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }}\n >\n {t('general:or')}\n </Button>\n </React.Fragment>\n )}\n {conditions.length === 0 && (\n <div className={`${baseClass}__no-filters`}>\n <div className={`${baseClass}__label`}>{t('general:noFiltersSet')}</div>\n <Button\n buttonStyle=\"icon-label\"\n className={`${baseClass}__add-first-filter`}\n icon=\"plus\"\n iconPosition=\"left\"\n iconStyle=\"with-border\"\n onClick={async () => {\n if (reducedFields.length > 0) {\n await addCondition({\n andIndex: 0,\n field: reducedFields.find((field) => !field.field.admin?.disableListFilter),\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n )}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}