@payloadcms/ui 3.30.0-internal.ef2a0e5 → 3.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { fieldAffectsData, fieldHasSubFields, fieldIsHiddenOrDisabled } from 'payload/shared';
1
+ import { fieldAffectsData, fieldHasSubFields, fieldIsHiddenOrDisabled, getFieldPermissions } from 'payload/shared';
2
2
  import { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js';
3
3
  import { combineFieldLabel } from '../../utilities/combineFieldLabel.js';
4
4
  export const ignoreFromBulkEdit = field => Boolean((fieldAffectsData(field) || field.type === 'ui') && (field.admin.disableBulkEdit || field.unique || fieldIsHiddenOrDisabled(field) || 'readOnly' in field && field.readOnly));
@@ -6,15 +6,27 @@ export const reduceFieldOptions = ({
6
6
  fields,
7
7
  formState,
8
8
  labelPrefix = null,
9
- path = ''
9
+ parentPath = '',
10
+ path = '',
11
+ permissions
10
12
  }) => {
11
13
  if (!fields) {
12
14
  return [];
13
15
  }
14
16
  const CustomLabel = formState?.[path]?.customComponents?.Label;
15
17
  return fields?.reduce((fieldsToUse, field) => {
18
+ const {
19
+ operation: hasOperationPermission,
20
+ permissions: fieldPermissions,
21
+ read: hasReadPermission
22
+ } = getFieldPermissions({
23
+ field,
24
+ operation: 'update',
25
+ parentName: parentPath?.includes('.') ? parentPath.split('.')[parentPath.split('.').length - 1] : parentPath,
26
+ permissions
27
+ });
16
28
  // escape for a variety of reasons, include ui fields as they have `name`.
17
- if ((fieldAffectsData(field) || field.type === 'ui') && (field.admin?.disableBulkEdit || field.unique || fieldIsHiddenOrDisabled(field) || 'readOnly' in field && field.readOnly)) {
29
+ if ((fieldAffectsData(field) || field.type === 'ui') && (field.admin?.disableBulkEdit || field.unique || fieldIsHiddenOrDisabled(field) || 'readOnly' in field && field.readOnly || !hasOperationPermission || !hasReadPermission)) {
18
30
  return fieldsToUse;
19
31
  }
20
32
  if (!(field.type === 'array' || field.type === 'blocks') && fieldHasSubFields(field)) {
@@ -25,7 +37,9 @@ export const reduceFieldOptions = ({
25
37
  field,
26
38
  prefix: labelPrefix
27
39
  }),
28
- path: createNestedClientFieldPath(path, field)
40
+ parentPath: path,
41
+ path: createNestedClientFieldPath(path, field),
42
+ permissions: fieldPermissions
29
43
  })];
30
44
  }
31
45
  if (field.type === 'tabs' && 'tabs' in field) {
@@ -35,7 +49,9 @@ export const reduceFieldOptions = ({
35
49
  return [...tabFields, ...reduceFieldOptions({
36
50
  fields: tab.fields,
37
51
  labelPrefix,
38
- path: isNamedTab ? createNestedClientFieldPath(path, field) : path
52
+ parentPath: path,
53
+ path: isNamedTab ? createNestedClientFieldPath(path, field) : path,
54
+ permissions: fieldPermissions
39
55
  })];
40
56
  }
41
57
  }, [])];
@@ -47,7 +63,8 @@ export const reduceFieldOptions = ({
47
63
  prefix: labelPrefix
48
64
  }),
49
65
  value: {
50
- ...field,
66
+ field,
67
+ fieldPermissions,
51
68
  path: createNestedClientFieldPath(path, field)
52
69
  }
53
70
  };
@@ -1 +1 @@
1
- {"version":3,"file":"reduceFieldOptions.js","names":["fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","createNestedClientFieldPath","combineFieldLabel","ignoreFromBulkEdit","field","Boolean","type","admin","disableBulkEdit","unique","readOnly","reduceFieldOptions","fields","formState","labelPrefix","path","CustomLabel","customComponents","Label","reduce","fieldsToUse","prefix","tabs","tabFields","tab","isNamedTab","name","formattedField","label","value"],"sources":["../../../src/elements/FieldSelect/reduceFieldOptions.ts"],"sourcesContent":["import type { ClientField, FieldWithPathClient, FormState } from 'payload'\n\nimport { fieldAffectsData, fieldHasSubFields, fieldIsHiddenOrDisabled } from 'payload/shared'\n\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { combineFieldLabel } from '../../utilities/combineFieldLabel.js'\n\nexport type SelectedField = {\n path: string\n}\n\nexport type FieldOption = {\n label: React.ReactNode\n value: SelectedField\n}\n\nexport const ignoreFromBulkEdit = (field: ClientField): boolean =>\n Boolean(\n (fieldAffectsData(field) || field.type === 'ui') &&\n (field.admin.disableBulkEdit ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly)),\n )\n\nexport const reduceFieldOptions = ({\n fields,\n formState,\n labelPrefix = null,\n path = '',\n}: {\n fields: ClientField[]\n formState?: FormState\n labelPrefix?: React.ReactNode\n path?: string\n}): { Label: React.ReactNode; value: FieldWithPathClient }[] => {\n if (!fields) {\n return []\n }\n\n const CustomLabel = formState?.[path]?.customComponents?.Label\n\n return fields?.reduce((fieldsToUse, field) => {\n // escape for a variety of reasons, include ui fields as they have `name`.\n if (\n (fieldAffectsData(field) || field.type === 'ui') &&\n (field.admin?.disableBulkEdit ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly))\n ) {\n return fieldsToUse\n }\n\n if (!(field.type === 'array' || field.type === 'blocks') && fieldHasSubFields(field)) {\n return [\n ...fieldsToUse,\n ...reduceFieldOptions({\n fields: field.fields,\n labelPrefix: combineFieldLabel({ CustomLabel, field, prefix: labelPrefix }),\n path: createNestedClientFieldPath(path, field),\n }),\n ]\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n return [\n ...fieldsToUse,\n ...field.tabs.reduce((tabFields, tab) => {\n if ('fields' in tab) {\n const isNamedTab = 'name' in tab && tab.name\n return [\n ...tabFields,\n ...reduceFieldOptions({\n fields: tab.fields,\n labelPrefix,\n path: isNamedTab ? createNestedClientFieldPath(path, field) : path,\n }),\n ]\n }\n }, []),\n ]\n }\n\n const formattedField = {\n label: combineFieldLabel({ CustomLabel, field, prefix: labelPrefix }),\n value: {\n ...field,\n path: createNestedClientFieldPath(path, field),\n },\n }\n\n return [...fieldsToUse, formattedField]\n }, [])\n}\n"],"mappings":"AAEA,SAASA,gBAAgB,EAAEC,iBAAiB,EAAEC,uBAAuB,QAAQ;AAE7E,SAASC,2BAA2B,QAAQ;AAC5C,SAASC,iBAAiB,QAAQ;AAWlC,OAAO,MAAMC,kBAAA,GAAsBC,KAAA,IACjCC,OAAA,CACE,CAACP,gBAAA,CAAiBM,KAAA,KAAUA,KAAA,CAAME,IAAI,KAAK,IAAG,MAC3CF,KAAA,CAAMG,KAAK,CAACC,eAAe,IAC1BJ,KAAA,CAAMK,MAAM,IACZT,uBAAA,CAAwBI,KAAA,KACvB,cAAcA,KAAA,IAASA,KAAA,CAAMM,QAAQ;AAG9C,OAAO,MAAMC,kBAAA,GAAqBA,CAAC;EACjCC,MAAM;EACNC,SAAS;EACTC,WAAA,GAAc,IAAI;EAClBC,IAAA,GAAO;AAAE,CAMV;EACC,IAAI,CAACH,MAAA,EAAQ;IACX,OAAO,EAAE;EACX;EAEA,MAAMI,WAAA,GAAcH,SAAA,GAAYE,IAAA,CAAK,EAAEE,gBAAA,EAAkBC,KAAA;EAEzD,OAAON,MAAA,EAAQO,MAAA,CAAO,CAACC,WAAA,EAAahB,KAAA;IAClC;IACA,IACE,CAACN,gBAAA,CAAiBM,KAAA,KAAUA,KAAA,CAAME,IAAI,KAAK,IAAG,MAC7CF,KAAA,CAAMG,KAAK,EAAEC,eAAA,IACZJ,KAAA,CAAMK,MAAM,IACZT,uBAAA,CAAwBI,KAAA,KACvB,cAAcA,KAAA,IAASA,KAAA,CAAMM,QAAQ,GACxC;MACA,OAAOU,WAAA;IACT;IAEA,IAAI,EAAEhB,KAAA,CAAME,IAAI,KAAK,WAAWF,KAAA,CAAME,IAAI,KAAK,QAAO,KAAMP,iBAAA,CAAkBK,KAAA,GAAQ;MACpF,OAAO,C,GACFgB,WAAA,E,GACAT,kBAAA,CAAmB;QACpBC,MAAA,EAAQR,KAAA,CAAMQ,MAAM;QACpBE,WAAA,EAAaZ,iBAAA,CAAkB;UAAEc,WAAA;UAAaZ,KAAA;UAAOiB,MAAA,EAAQP;QAAY;QACzEC,IAAA,EAAMd,2BAAA,CAA4Bc,IAAA,EAAMX,KAAA;MAC1C,GACD;IACH;IAEA,IAAIA,KAAA,CAAME,IAAI,KAAK,UAAU,UAAUF,KAAA,EAAO;MAC5C,OAAO,C,GACFgB,WAAA,E,GACAhB,KAAA,CAAMkB,IAAI,CAACH,MAAM,CAAC,CAACI,SAAA,EAAWC,GAAA;QAC/B,IAAI,YAAYA,GAAA,EAAK;UACnB,MAAMC,UAAA,GAAa,UAAUD,GAAA,IAAOA,GAAA,CAAIE,IAAI;UAC5C,OAAO,C,GACFH,SAAA,E,GACAZ,kBAAA,CAAmB;YACpBC,MAAA,EAAQY,GAAA,CAAIZ,MAAM;YAClBE,WAAA;YACAC,IAAA,EAAMU,UAAA,GAAaxB,2BAAA,CAA4Bc,IAAA,EAAMX,KAAA,IAASW;UAChE,GACD;QACH;MACF,GAAG,EAAE,EACN;IACH;IAEA,MAAMY,cAAA,GAAiB;MACrBC,KAAA,EAAO1B,iBAAA,CAAkB;QAAEc,WAAA;QAAaZ,KAAA;QAAOiB,MAAA,EAAQP;MAAY;MACnEe,KAAA,EAAO;QACL,GAAGzB,KAAK;QACRW,IAAA,EAAMd,2BAAA,CAA4Bc,IAAA,EAAMX,KAAA;MAC1C;IACF;IAEA,OAAO,C,GAAIgB,WAAA,EAAaO,cAAA,CAAe;EACzC,GAAG,EAAE;AACP","ignoreList":[]}
1
+ {"version":3,"file":"reduceFieldOptions.js","names":["fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","getFieldPermissions","createNestedClientFieldPath","combineFieldLabel","ignoreFromBulkEdit","field","Boolean","type","admin","disableBulkEdit","unique","readOnly","reduceFieldOptions","fields","formState","labelPrefix","parentPath","path","permissions","CustomLabel","customComponents","Label","reduce","fieldsToUse","operation","hasOperationPermission","fieldPermissions","read","hasReadPermission","parentName","includes","split","length","prefix","tabs","tabFields","tab","isNamedTab","name","formattedField","label","value"],"sources":["../../../src/elements/FieldSelect/reduceFieldOptions.ts"],"sourcesContent":["import type { ClientField, FormState, SanitizedFieldPermissions } from 'payload'\n\nimport {\n fieldAffectsData,\n fieldHasSubFields,\n fieldIsHiddenOrDisabled,\n getFieldPermissions,\n} from 'payload/shared'\n\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { combineFieldLabel } from '../../utilities/combineFieldLabel.js'\n\nexport type SelectedField = {\n field: ClientField\n fieldPermissions: SanitizedFieldPermissions\n path: string\n}\n\nexport type FieldOption = {\n label: React.ReactNode\n value: SelectedField\n}\n\nexport const ignoreFromBulkEdit = (field: ClientField): boolean =>\n Boolean(\n (fieldAffectsData(field) || field.type === 'ui') &&\n (field.admin.disableBulkEdit ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly)),\n )\n\nexport const reduceFieldOptions = ({\n fields,\n formState,\n labelPrefix = null,\n parentPath = '',\n path = '',\n permissions,\n}: {\n readonly fields: ClientField[]\n readonly formState?: FormState\n readonly labelPrefix?: React.ReactNode\n readonly parentPath?: string\n readonly path?: string\n readonly permissions:\n | {\n [fieldName: string]: SanitizedFieldPermissions\n }\n | SanitizedFieldPermissions\n}): FieldOption[] => {\n if (!fields) {\n return []\n }\n\n const CustomLabel = formState?.[path]?.customComponents?.Label\n\n return fields?.reduce((fieldsToUse, field) => {\n const {\n operation: hasOperationPermission,\n permissions: fieldPermissions,\n read: hasReadPermission,\n } = getFieldPermissions({\n field,\n operation: 'update',\n parentName: parentPath?.includes('.')\n ? parentPath.split('.')[parentPath.split('.').length - 1]\n : parentPath,\n permissions,\n })\n\n // escape for a variety of reasons, include ui fields as they have `name`.\n if (\n (fieldAffectsData(field) || field.type === 'ui') &&\n (field.admin?.disableBulkEdit ||\n field.unique ||\n fieldIsHiddenOrDisabled(field) ||\n ('readOnly' in field && field.readOnly) ||\n !hasOperationPermission ||\n !hasReadPermission)\n ) {\n return fieldsToUse\n }\n\n if (!(field.type === 'array' || field.type === 'blocks') && fieldHasSubFields(field)) {\n return [\n ...fieldsToUse,\n ...reduceFieldOptions({\n fields: field.fields,\n labelPrefix: combineFieldLabel({ CustomLabel, field, prefix: labelPrefix }),\n parentPath: path,\n path: createNestedClientFieldPath(path, field),\n permissions: fieldPermissions,\n }),\n ]\n }\n\n if (field.type === 'tabs' && 'tabs' in field) {\n return [\n ...fieldsToUse,\n ...field.tabs.reduce((tabFields, tab) => {\n if ('fields' in tab) {\n const isNamedTab = 'name' in tab && tab.name\n return [\n ...tabFields,\n ...reduceFieldOptions({\n fields: tab.fields,\n labelPrefix,\n parentPath: path,\n path: isNamedTab ? createNestedClientFieldPath(path, field) : path,\n permissions: fieldPermissions,\n }),\n ]\n }\n }, []),\n ]\n }\n\n const formattedField: FieldOption = {\n label: combineFieldLabel({ CustomLabel, field, prefix: labelPrefix }),\n value: {\n field,\n fieldPermissions,\n path: createNestedClientFieldPath(path, field),\n },\n }\n\n return [...fieldsToUse, formattedField]\n }, [])\n}\n"],"mappings":"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","ignoreList":[]}