@payloadcms/ui 3.29.0-canary.5 → 3.29.0-canary.7

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 (144) hide show
  1. package/dist/elements/Autosave/index.js +1 -1
  2. package/dist/elements/Autosave/index.js.map +1 -1
  3. package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts.map +1 -1
  4. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +143 -127
  5. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  6. package/dist/elements/BulkUpload/EditMany/index.d.ts.map +1 -1
  7. package/dist/elements/BulkUpload/EditMany/index.js +1 -1
  8. package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
  9. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  10. package/dist/elements/BulkUpload/FileSidebar/index.js +5 -5
  11. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  12. package/dist/elements/BulkUpload/FormsManager/index.js +1 -1
  13. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  14. package/dist/elements/DocumentControls/index.js +1 -1
  15. package/dist/elements/DocumentControls/index.js.map +1 -1
  16. package/dist/elements/DocumentFields/index.d.ts.map +1 -1
  17. package/dist/elements/DocumentFields/index.js +1 -5
  18. package/dist/elements/DocumentFields/index.js.map +1 -1
  19. package/dist/elements/EditMany/DrawerContent.d.ts +2 -1
  20. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  21. package/dist/elements/EditMany/DrawerContent.js +107 -118
  22. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  23. package/dist/elements/EditMany/index.d.ts.map +1 -1
  24. package/dist/elements/EditMany/index.js +6 -5
  25. package/dist/elements/EditMany/index.js.map +1 -1
  26. package/dist/elements/FieldSelect/index.d.ts +12 -2
  27. package/dist/elements/FieldSelect/index.d.ts.map +1 -1
  28. package/dist/elements/FieldSelect/index.js +31 -48
  29. package/dist/elements/FieldSelect/index.js.map +1 -1
  30. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts +2 -1
  31. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.d.ts.map +1 -1
  32. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js +5 -2
  33. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.js.map +1 -1
  34. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  35. package/dist/elements/PublishButton/ScheduleDrawer/index.js +3 -3
  36. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  37. package/dist/elements/Table/DefaultCell/fields/Date/index.js +1 -1
  38. package/dist/elements/Table/DefaultCell/fields/Date/index.js.map +1 -1
  39. package/dist/elements/Table/DefaultCell/fields/File/index.d.ts.map +1 -1
  40. package/dist/elements/Table/DefaultCell/fields/File/index.js +24 -1
  41. package/dist/elements/Table/DefaultCell/fields/File/index.js.map +1 -1
  42. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js +1 -1
  43. package/dist/elements/Table/DefaultCell/fields/Relationship/index.js.map +1 -1
  44. package/dist/elements/Thumbnail/index.js +25 -23
  45. package/dist/elements/Thumbnail/index.js.map +1 -1
  46. package/dist/elements/ThumbnailCard/index.js +1 -1
  47. package/dist/elements/ThumbnailCard/index.js.map +1 -1
  48. package/dist/exports/client/index.js +23 -23
  49. package/dist/exports/client/index.js.map +4 -4
  50. package/dist/exports/shared/index.d.ts +2 -2
  51. package/dist/exports/shared/index.d.ts.map +1 -1
  52. package/dist/exports/shared/index.js +2 -2
  53. package/dist/exports/shared/index.js.map +4 -4
  54. package/dist/fields/Array/index.d.ts.map +1 -1
  55. package/dist/fields/Array/index.js +4 -3
  56. package/dist/fields/Array/index.js.map +1 -1
  57. package/dist/fields/Blocks/index.d.ts.map +1 -1
  58. package/dist/fields/Blocks/index.js +5 -4
  59. package/dist/fields/Blocks/index.js.map +1 -1
  60. package/dist/fields/Checkbox/index.d.ts +1 -1
  61. package/dist/fields/Checkbox/index.d.ts.map +1 -1
  62. package/dist/fields/Checkbox/index.js +4 -3
  63. package/dist/fields/Checkbox/index.js.map +1 -1
  64. package/dist/fields/Code/index.d.ts.map +1 -1
  65. package/dist/fields/Code/index.js +4 -3
  66. package/dist/fields/Code/index.js.map +1 -1
  67. package/dist/fields/Collapsible/index.d.ts.map +1 -1
  68. package/dist/fields/Collapsible/index.js +3 -2
  69. package/dist/fields/Collapsible/index.js.map +1 -1
  70. package/dist/fields/ConfirmPassword/index.js +13 -11
  71. package/dist/fields/ConfirmPassword/index.js.map +1 -1
  72. package/dist/fields/DateTime/index.d.ts.map +1 -1
  73. package/dist/fields/DateTime/index.js +5 -4
  74. package/dist/fields/DateTime/index.js.map +1 -1
  75. package/dist/fields/Email/index.d.ts.map +1 -1
  76. package/dist/fields/Email/index.js +3 -2
  77. package/dist/fields/Email/index.js.map +1 -1
  78. package/dist/fields/Group/index.d.ts.map +1 -1
  79. package/dist/fields/Group/index.js.map +1 -1
  80. package/dist/fields/Group/index.scss +12 -6
  81. package/dist/fields/JSON/index.d.ts.map +1 -1
  82. package/dist/fields/JSON/index.js +5 -4
  83. package/dist/fields/JSON/index.js.map +1 -1
  84. package/dist/fields/Number/index.d.ts.map +1 -1
  85. package/dist/fields/Number/index.js +6 -5
  86. package/dist/fields/Number/index.js.map +1 -1
  87. package/dist/fields/Password/index.d.ts.map +1 -1
  88. package/dist/fields/Password/index.js +2 -4
  89. package/dist/fields/Password/index.js.map +1 -1
  90. package/dist/fields/Point/index.d.ts.map +1 -1
  91. package/dist/fields/Point/index.js +4 -3
  92. package/dist/fields/Point/index.js.map +1 -1
  93. package/dist/fields/RadioGroup/index.d.ts.map +1 -1
  94. package/dist/fields/RadioGroup/index.js +4 -3
  95. package/dist/fields/RadioGroup/index.js.map +1 -1
  96. package/dist/fields/Relationship/index.d.ts.map +1 -1
  97. package/dist/fields/Relationship/index.js +5 -4
  98. package/dist/fields/Relationship/index.js.map +1 -1
  99. package/dist/fields/Relationship/optionsReducer.js +1 -1
  100. package/dist/fields/Relationship/optionsReducer.js.map +1 -1
  101. package/dist/fields/Select/index.d.ts.map +1 -1
  102. package/dist/fields/Select/index.js +4 -3
  103. package/dist/fields/Select/index.js.map +1 -1
  104. package/dist/fields/Tabs/index.js.map +1 -1
  105. package/dist/fields/Text/index.d.ts.map +1 -1
  106. package/dist/fields/Text/index.js +4 -3
  107. package/dist/fields/Text/index.js.map +1 -1
  108. package/dist/fields/Textarea/index.d.ts.map +1 -1
  109. package/dist/fields/Textarea/index.js +2 -1
  110. package/dist/fields/Textarea/index.js.map +1 -1
  111. package/dist/fields/Upload/index.d.ts.map +1 -1
  112. package/dist/fields/Upload/index.js +2 -1
  113. package/dist/fields/Upload/index.js.map +1 -1
  114. package/dist/forms/Form/fieldReducer.js +1 -1
  115. package/dist/forms/Form/fieldReducer.js.map +1 -1
  116. package/dist/forms/useField/index.d.ts.map +1 -1
  117. package/dist/forms/useField/index.js +70 -67
  118. package/dist/forms/useField/index.js.map +1 -1
  119. package/dist/forms/useField/types.d.ts +1 -0
  120. package/dist/forms/useField/types.d.ts.map +1 -1
  121. package/dist/forms/useField/types.js.map +1 -1
  122. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  123. package/dist/providers/DocumentInfo/index.js +1 -1
  124. package/dist/providers/DocumentInfo/index.js.map +1 -1
  125. package/dist/styles.css +1 -1
  126. package/dist/utilities/{formatDate.d.ts → formatDocTitle/formatDateTitle.d.ts} +1 -1
  127. package/dist/utilities/formatDocTitle/formatDateTitle.d.ts.map +1 -0
  128. package/dist/utilities/{formatDate.js → formatDocTitle/formatDateTitle.js} +1 -1
  129. package/dist/utilities/formatDocTitle/formatDateTitle.js.map +1 -0
  130. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.d.ts +19 -0
  131. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.d.ts.map +1 -0
  132. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.js +19 -0
  133. package/dist/utilities/formatDocTitle/formatLexicalDocTitle.js.map +1 -0
  134. package/dist/utilities/{formatDocTitle.d.ts → formatDocTitle/index.d.ts} +2 -2
  135. package/dist/utilities/formatDocTitle/index.d.ts.map +1 -0
  136. package/dist/utilities/{formatDocTitle.js → formatDocTitle/index.js} +11 -3
  137. package/dist/utilities/formatDocTitle/index.js.map +1 -0
  138. package/dist/views/Edit/SetDocumentTitle/index.js +1 -1
  139. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  140. package/package.json +5 -5
  141. package/dist/utilities/formatDate.d.ts.map +0 -1
  142. package/dist/utilities/formatDate.js.map +0 -1
  143. package/dist/utilities/formatDocTitle.d.ts.map +0 -1
  144. package/dist/utilities/formatDocTitle.js.map +0 -1
@@ -9,6 +9,7 @@ import { FieldLabel } from '../../fields/FieldLabel/index.js';
9
9
  import { useForm } from '../../forms/Form/context.js';
10
10
  import { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js';
11
11
  import { useTranslation } from '../../providers/Translation/index.js';
12
+ import { filterOutUploadFields } from '../../utilities/filterOutUploadFields.js';
12
13
  import { ReactSelect } from '../ReactSelect/index.js';
13
14
  import './index.scss';
14
15
  const baseClass = 'field-select';
@@ -91,10 +92,10 @@ const reduceFields = ({
91
92
  }, []);
92
93
  };
93
94
  export const FieldSelect = t0 => {
94
- const $ = _c(11);
95
+ const $ = _c(13);
95
96
  const {
96
97
  fields,
97
- setSelected
98
+ onChange
98
99
  } = t0;
99
100
  const {
100
101
  t
@@ -106,7 +107,7 @@ export const FieldSelect = t0 => {
106
107
  let t1;
107
108
  if ($[0] !== fields || $[1] !== getFields) {
108
109
  t1 = () => reduceFields({
109
- fields,
110
+ fields: filterOutUploadFields(fields),
110
111
  formState: getFields()
111
112
  });
112
113
  $[0] = fields;
@@ -117,62 +118,44 @@ export const FieldSelect = t0 => {
117
118
  }
118
119
  const [options] = useState(t1);
119
120
  let t2;
120
- if ($[3] !== dispatchFields || $[4] !== getFields || $[5] !== setSelected) {
121
- t2 = selected => {
122
- const activeFields = getFields();
123
- if (selected === null) {
124
- setSelected([]);
125
- } else {
126
- setSelected(selected.map(_temp));
127
- }
128
- if (selected === null || Object.keys(activeFields || []).length > selected.length) {
129
- Object.keys(activeFields).forEach(path => {
130
- if (selected === null || !selected.find(field => field.value.path === path)) {
131
- dispatchFields({
132
- type: "REMOVE",
133
- path
134
- });
135
- }
136
- });
137
- }
138
- };
139
- $[3] = dispatchFields;
140
- $[4] = getFields;
141
- $[5] = setSelected;
142
- $[6] = t2;
143
- } else {
144
- t2 = $[6];
145
- }
146
- const handleChange = t2;
147
- let t3;
148
- if ($[7] !== handleChange || $[8] !== options || $[9] !== t) {
149
- t3 = _jsxs("div", {
121
+ if ($[3] !== dispatchFields || $[4] !== getFields || $[5] !== onChange || $[6] !== options || $[7] !== t) {
122
+ let t3;
123
+ if ($[9] !== dispatchFields || $[10] !== getFields || $[11] !== onChange) {
124
+ t3 = selected => onChange({
125
+ dispatchFields,
126
+ formState: getFields(),
127
+ selected
128
+ });
129
+ $[9] = dispatchFields;
130
+ $[10] = getFields;
131
+ $[11] = onChange;
132
+ $[12] = t3;
133
+ } else {
134
+ t3 = $[12];
135
+ }
136
+ t2 = _jsxs("div", {
150
137
  className: baseClass,
151
138
  children: [_jsx(FieldLabel, {
152
139
  label: t("fields:selectFieldsToEdit")
153
140
  }), _jsx(ReactSelect, {
154
- getOptionValue: _temp2,
141
+ getOptionValue: _temp,
155
142
  isMulti: true,
156
- onChange: handleChange,
143
+ onChange: t3,
157
144
  options
158
145
  })]
159
146
  });
160
- $[7] = handleChange;
161
- $[8] = options;
162
- $[9] = t;
163
- $[10] = t3;
147
+ $[3] = dispatchFields;
148
+ $[4] = getFields;
149
+ $[5] = onChange;
150
+ $[6] = options;
151
+ $[7] = t;
152
+ $[8] = t2;
164
153
  } else {
165
- t3 = $[10];
154
+ t2 = $[8];
166
155
  }
167
- return t3;
156
+ return t2;
168
157
  };
169
- function _temp(t0) {
170
- const {
171
- value
172
- } = t0;
173
- return value;
174
- }
175
- function _temp2(option) {
158
+ function _temp(option) {
176
159
  if (typeof option.value === "object" && "path" in option.value) {
177
160
  return String(option.value.path);
178
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","React","Fragment","useState","RenderCustomComponent","FieldLabel","useForm","createNestedClientFieldPath","useTranslation","ReactSelect","baseClass","combineLabel","CustomLabel","field","prefix","_jsxs","_jsx","style","display","CustomComponent","Fallback","label","reduceFields","fields","formState","labelPrefix","path","customComponents","Label","reduce","fieldsToUse","type","admin","disableBulkEdit","unique","readOnly","tabs","tabFields","tab","isNamedTab","name","formattedField","value","FieldSelect","t0","$","setSelected","t","dispatchFields","getFields","t1","options","t2","selected","activeFields","map","_temp","Object","keys","length","forEach","find","handleChange","t3","className","children","getOptionValue","_temp2","isMulti","onChange","option","String"],"sources":["../../../src/elements/FieldSelect/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, FieldWithPathClient, FormState } from 'payload'\n\nimport { fieldAffectsData, fieldHasSubFields, fieldIsHiddenOrDisabled } from 'payload/shared'\nimport React, { Fragment, useState } from 'react'\n\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useForm } from '../../forms/Form/context.js'\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { ReactSelect } from '../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'field-select'\n\nexport type FieldSelectProps = {\n readonly fields: ClientField[]\n readonly setSelected: (fields: FieldWithPathClient[]) => void\n}\n\nexport const combineLabel = ({\n CustomLabel,\n field,\n prefix,\n}: {\n CustomLabel?: React.ReactNode\n field?: ClientField\n prefix?: React.ReactNode\n}): React.ReactNode => {\n return (\n <Fragment>\n {prefix ? (\n <Fragment>\n <span style={{ display: 'inline-block' }}>{prefix}</span>\n {' > '}\n </Fragment>\n ) : null}\n <span style={{ display: 'inline-block' }}>\n <RenderCustomComponent\n CustomComponent={CustomLabel}\n Fallback={<FieldLabel label={'label' in field && field.label} />}\n />\n </span>\n </Fragment>\n )\n}\n\nconst reduceFields = ({\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 ...reduceFields({\n fields: field.fields,\n labelPrefix: combineLabel({ 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 ...reduceFields({\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: combineLabel({ CustomLabel, field, prefix: labelPrefix }),\n value: {\n ...field,\n path: createNestedClientFieldPath(path, field),\n },\n }\n\n return [...fieldsToUse, formattedField]\n }, [])\n}\n\nexport const FieldSelect: React.FC<FieldSelectProps> = ({ fields, setSelected }) => {\n const { t } = useTranslation()\n const { dispatchFields, getFields } = useForm()\n\n const [options] = useState(() => reduceFields({ fields, formState: getFields() }))\n\n const handleChange = (selected) => {\n const activeFields = getFields()\n\n if (selected === null) {\n setSelected([])\n } else {\n setSelected(selected.map(({ value }) => value))\n }\n\n // remove deselected values from form state\n if (selected === null || Object.keys(activeFields || []).length > selected.length) {\n Object.keys(activeFields).forEach((path) => {\n if (\n selected === null ||\n !selected.find((field) => {\n return field.value.path === path\n })\n ) {\n dispatchFields({\n type: 'REMOVE',\n path,\n })\n }\n })\n }\n }\n\n return (\n <div className={baseClass}>\n <FieldLabel label={t('fields:selectFieldsToEdit')} />\n <ReactSelect\n getOptionValue={(option) => {\n if (typeof option.value === 'object' && 'path' in option.value) {\n return String(option.value.path)\n }\n return String(option.value)\n }}\n isMulti\n onChange={handleChange}\n options={options}\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","fieldAffectsData","fieldHasSubFields","fieldIsHiddenOrDisabled","React","Fragment","useState","RenderCustomComponent","FieldLabel","useForm","createNestedClientFieldPath","useTranslation","filterOutUploadFields","ReactSelect","baseClass","combineLabel","CustomLabel","field","prefix","_jsxs","_jsx","style","display","CustomComponent","Fallback","label","reduceFields","fields","formState","labelPrefix","path","customComponents","Label","reduce","fieldsToUse","type","admin","disableBulkEdit","unique","readOnly","tabs","tabFields","tab","isNamedTab","name","formattedField","value","FieldSelect","t0","$","onChange","t","dispatchFields","getFields","t1","options","t2","t3","selected","className","children","getOptionValue","_temp","isMulti","option","String"],"sources":["../../../src/elements/FieldSelect/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientField, FieldWithPathClient, FormState } from 'payload'\n\nimport { fieldAffectsData, fieldHasSubFields, fieldIsHiddenOrDisabled } from 'payload/shared'\nimport React, { Fragment, useState } from 'react'\n\nimport type { FieldAction } from '../../forms/Form/types.js'\n\nimport { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js'\nimport { FieldLabel } from '../../fields/FieldLabel/index.js'\nimport { useForm } from '../../forms/Form/context.js'\nimport { createNestedClientFieldPath } from '../../forms/Form/createNestedClientFieldPath.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { filterOutUploadFields } from '../../utilities/filterOutUploadFields.js'\nimport { ReactSelect } from '../ReactSelect/index.js'\nimport './index.scss'\n\nconst baseClass = 'field-select'\n\nexport type OnFieldSelect = ({\n dispatchFields,\n formState,\n selected,\n}: {\n dispatchFields: React.Dispatch<FieldAction>\n formState: FormState\n selected: FieldOption[]\n}) => void\n\nexport type FieldSelectProps = {\n readonly fields: ClientField[]\n readonly onChange: OnFieldSelect\n}\n\nexport const combineLabel = ({\n CustomLabel,\n field,\n prefix,\n}: {\n CustomLabel?: React.ReactNode\n field?: ClientField\n prefix?: React.ReactNode\n}): React.ReactNode => {\n return (\n <Fragment>\n {prefix ? (\n <Fragment>\n <span style={{ display: 'inline-block' }}>{prefix}</span>\n {' > '}\n </Fragment>\n ) : null}\n <span style={{ display: 'inline-block' }}>\n <RenderCustomComponent\n CustomComponent={CustomLabel}\n Fallback={<FieldLabel label={'label' in field && field.label} />}\n />\n </span>\n </Fragment>\n )\n}\n\nexport type FieldOption = { Label: React.ReactNode; value: FieldWithPathClient }\n\nconst reduceFields = ({\n fields,\n formState,\n labelPrefix = null,\n path = '',\n}: {\n fields: ClientField[]\n formState?: FormState\n labelPrefix?: React.ReactNode\n path?: string\n}): FieldOption[] => {\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 ...reduceFields({\n fields: field.fields,\n labelPrefix: combineLabel({ 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 ...reduceFields({\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: combineLabel({ CustomLabel, field, prefix: labelPrefix }),\n value: {\n ...field,\n path: createNestedClientFieldPath(path, field),\n },\n }\n\n return [...fieldsToUse, formattedField]\n }, [])\n}\n\nexport const FieldSelect: React.FC<FieldSelectProps> = ({ fields, onChange }) => {\n const { t } = useTranslation()\n const { dispatchFields, getFields } = useForm()\n\n const [options] = useState<FieldOption[]>(() =>\n reduceFields({ fields: filterOutUploadFields(fields), formState: getFields() }),\n )\n\n return (\n <div className={baseClass}>\n <FieldLabel label={t('fields:selectFieldsToEdit')} />\n <ReactSelect\n getOptionValue={(option) => {\n if (typeof option.value === 'object' && 'path' in option.value) {\n return String(option.value.path)\n }\n return String(option.value)\n }}\n isMulti\n onChange={(selected: FieldOption[]) =>\n onChange({ dispatchFields, formState: getFields(), selected })\n }\n options={options}\n />\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -7,8 +7,9 @@ type Args = {
7
7
  docs: UpcomingEvent[];
8
8
  i18n: I18nClient;
9
9
  localization: ClientConfig['localization'];
10
+ supportedTimezones: ClientConfig['admin']['timezones']['supportedTimezones'];
10
11
  t: TFunction;
11
12
  };
12
- export declare const buildUpcomingColumns: ({ dateFormat, deleteHandler, docs, i18n, localization, t, }: Args) => Column[];
13
+ export declare const buildUpcomingColumns: ({ dateFormat, deleteHandler, docs, i18n, localization, supportedTimezones, t, }: Args) => Column[];
13
14
  export {};
14
15
  //# sourceMappingURL=buildUpcomingColumns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildUpcomingColumns.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAG1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/C,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,aAAa,EAAE,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,CAAA;IAC1C,CAAC,EAAE,SAAS,CAAA;CACb,CAAA;AAED,eAAO,MAAM,oBAAoB,gEAO9B,IAAI,KAAG,MAAM,EAsGf,CAAA"}
1
+ {"version":3,"file":"buildUpcomingColumns.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,SAAS,CAAA;AAEnD,OAAO,EAAkB,KAAK,UAAU,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAA;AAG1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAM/C,KAAK,IAAI,GAAG;IACV,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAA;IAC5C,IAAI,EAAE,aAAa,EAAE,CAAA;IACrB,IAAI,EAAE,UAAU,CAAA;IAChB,YAAY,EAAE,YAAY,CAAC,cAAc,CAAC,CAAA;IAC1C,kBAAkB,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,CAAC,oBAAoB,CAAC,CAAA;IAC5E,CAAC,EAAE,SAAS,CAAA;CACb,CAAA;AAED,eAAO,MAAM,oBAAoB,oFAQ9B,IAAI,KAAG,MAAM,EA4Gf,CAAA"}
@@ -1,7 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getTranslation } from '@payloadcms/translations';
3
3
  import React from 'react';
4
- import { formatDate } from '../../../utilities/formatDate.js';
4
+ import { formatDate } from '../../../utilities/formatDocTitle/formatDateTitle.js';
5
5
  import { Button } from '../../Button/index.js';
6
6
  import { Pill } from '../../Pill/index.js';
7
7
  export const buildUpcomingColumns = ({
@@ -10,6 +10,7 @@ export const buildUpcomingColumns = ({
10
10
  docs,
11
11
  i18n,
12
12
  localization,
13
+ supportedTimezones,
13
14
  t
14
15
  }) => {
15
16
  const columns = [{
@@ -58,8 +59,10 @@ export const buildUpcomingColumns = ({
58
59
  children: t('general:timezone')
59
60
  }),
60
61
  renderedCells: docs.map(doc => {
62
+ const matchedTimezone = supportedTimezones.find(timezone => timezone.value === doc.input.timezone);
63
+ const timezone = matchedTimezone?.label || doc.input.timezone;
61
64
  return /*#__PURE__*/_jsx("span", {
62
- children: doc.input.timezone || t('general:noValue')
65
+ children: timezone || t('general:noValue')
63
66
  }, doc.id);
64
67
  })
65
68
  }];
@@ -1 +1 @@
1
- {"version":3,"file":"buildUpcomingColumns.js","names":["getTranslation","React","formatDate","Button","Pill","buildUpcomingColumns","dateFormat","deleteHandler","docs","i18n","localization","t","columns","accessor","active","field","name","type","Heading","_jsx","renderedCells","map","doc","input","_jsxs","pillStyle","id","date","waitUntil","pattern","timezone","push","locale","matchedLocale","locales","find","code","label","buttonStyle","className","icon","onClick","e","preventDefault","tooltip"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"sourcesContent":["import type { ClientConfig, Column } from 'payload'\n\nimport { getTranslation, type I18nClient, type TFunction } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { UpcomingEvent } from './types.js'\n\nimport { formatDate } from '../../../utilities/formatDate.js'\nimport { Button } from '../../Button/index.js'\nimport { Pill } from '../../Pill/index.js'\n\ntype Args = {\n dateFormat: string\n deleteHandler: (id: number | string) => void\n docs: UpcomingEvent[]\n i18n: I18nClient\n localization: ClientConfig['localization']\n t: TFunction\n}\n\nexport const buildUpcomingColumns = ({\n dateFormat,\n deleteHandler,\n docs,\n i18n,\n localization,\n t,\n}: Args): Column[] => {\n const columns: Column[] = [\n {\n accessor: 'input.type',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('version:type')}</span>,\n renderedCells: docs.map((doc) => {\n const type = doc.input?.type\n\n return (\n <Pill key={doc.id} pillStyle={type === 'publish' ? 'success' : 'warning'}>\n {type === 'publish' && t('version:publish')}\n {type === 'unpublish' && t('version:unpublish')}\n </Pill>\n )\n }),\n },\n {\n accessor: 'waitUntil',\n active: true,\n field: {\n name: '',\n type: 'date',\n },\n Heading: <span>{t('general:time')}</span>,\n renderedCells: docs.map((doc) => (\n <span key={doc.id}>\n {formatDate({\n date: doc.waitUntil,\n i18n,\n pattern: dateFormat,\n timezone: doc.input.timezone,\n })}\n </span>\n )),\n },\n {\n accessor: 'input.timezone',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('general:timezone')}</span>,\n renderedCells: docs.map((doc) => {\n return <span key={doc.id}>{doc.input.timezone || t('general:noValue')}</span>\n }),\n },\n ]\n\n if (localization) {\n columns.push({\n accessor: 'input.locale',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('general:locale')}</span>,\n renderedCells: docs.map((doc) => {\n if (doc.input.locale) {\n const matchedLocale = localization.locales.find(\n (locale) => locale.code === doc.input.locale,\n )\n if (matchedLocale) {\n return <span key={doc.id}>{getTranslation(matchedLocale.label, i18n)}</span>\n }\n }\n\n return <span key={doc.id}>{t('general:all')}</span>\n }),\n })\n }\n\n columns.push({\n accessor: 'delete',\n active: true,\n field: {\n name: 'delete',\n type: 'text',\n },\n Heading: <span>{t('general:delete')}</span>,\n renderedCells: docs.map((doc) => (\n <Button\n buttonStyle=\"icon-label\"\n className=\"schedule-publish__delete\"\n icon=\"x\"\n key={doc.id}\n onClick={(e) => {\n e.preventDefault()\n deleteHandler(doc.id)\n }}\n tooltip={t('general:delete')}\n />\n )),\n })\n\n return columns\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"buildUpcomingColumns.js","names":["getTranslation","React","formatDate","Button","Pill","buildUpcomingColumns","dateFormat","deleteHandler","docs","i18n","localization","supportedTimezones","t","columns","accessor","active","field","name","type","Heading","_jsx","renderedCells","map","doc","input","_jsxs","pillStyle","id","date","waitUntil","pattern","timezone","matchedTimezone","find","value","label","push","locale","matchedLocale","locales","code","buttonStyle","className","icon","onClick","e","preventDefault","tooltip"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/buildUpcomingColumns.tsx"],"sourcesContent":["import type { ClientConfig, Column } from 'payload'\n\nimport { getTranslation, type I18nClient, type TFunction } from '@payloadcms/translations'\nimport React from 'react'\n\nimport type { UpcomingEvent } from './types.js'\n\nimport { formatDate } from '../../../utilities/formatDocTitle/formatDateTitle.js'\nimport { Button } from '../../Button/index.js'\nimport { Pill } from '../../Pill/index.js'\n\ntype Args = {\n dateFormat: string\n deleteHandler: (id: number | string) => void\n docs: UpcomingEvent[]\n i18n: I18nClient\n localization: ClientConfig['localization']\n supportedTimezones: ClientConfig['admin']['timezones']['supportedTimezones']\n t: TFunction\n}\n\nexport const buildUpcomingColumns = ({\n dateFormat,\n deleteHandler,\n docs,\n i18n,\n localization,\n supportedTimezones,\n t,\n}: Args): Column[] => {\n const columns: Column[] = [\n {\n accessor: 'input.type',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('version:type')}</span>,\n renderedCells: docs.map((doc) => {\n const type = doc.input?.type\n\n return (\n <Pill key={doc.id} pillStyle={type === 'publish' ? 'success' : 'warning'}>\n {type === 'publish' && t('version:publish')}\n {type === 'unpublish' && t('version:unpublish')}\n </Pill>\n )\n }),\n },\n {\n accessor: 'waitUntil',\n active: true,\n field: {\n name: '',\n type: 'date',\n },\n Heading: <span>{t('general:time')}</span>,\n renderedCells: docs.map((doc) => (\n <span key={doc.id}>\n {formatDate({\n date: doc.waitUntil,\n i18n,\n pattern: dateFormat,\n timezone: doc.input.timezone,\n })}\n </span>\n )),\n },\n {\n accessor: 'input.timezone',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('general:timezone')}</span>,\n renderedCells: docs.map((doc) => {\n const matchedTimezone = supportedTimezones.find(\n (timezone) => timezone.value === doc.input.timezone,\n )\n\n const timezone = matchedTimezone?.label || doc.input.timezone\n\n return <span key={doc.id}>{timezone || t('general:noValue')}</span>\n }),\n },\n ]\n\n if (localization) {\n columns.push({\n accessor: 'input.locale',\n active: true,\n field: {\n name: '',\n type: 'text',\n },\n Heading: <span>{t('general:locale')}</span>,\n renderedCells: docs.map((doc) => {\n if (doc.input.locale) {\n const matchedLocale = localization.locales.find(\n (locale) => locale.code === doc.input.locale,\n )\n if (matchedLocale) {\n return <span key={doc.id}>{getTranslation(matchedLocale.label, i18n)}</span>\n }\n }\n\n return <span key={doc.id}>{t('general:all')}</span>\n }),\n })\n }\n\n columns.push({\n accessor: 'delete',\n active: true,\n field: {\n name: 'delete',\n type: 'text',\n },\n Heading: <span>{t('general:delete')}</span>,\n renderedCells: docs.map((doc) => (\n <Button\n buttonStyle=\"icon-label\"\n className=\"schedule-publish__delete\"\n icon=\"x\"\n key={doc.id}\n onClick={(e) => {\n e.preventDefault()\n deleteHandler(doc.id)\n }}\n tooltip={t('general:delete')}\n />\n )),\n })\n\n return columns\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAA;AAkB5D,OAAO,cAAc,CAAA;AAMrB,KAAK,KAAK,GAAG;IACX,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAoU1C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAA+B,MAAM,OAAO,CAAA;AAGnD,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,YAAY,CAAA;AAkB5D,OAAO,cAAc,CAAA;AAMrB,KAAK,KAAK,GAAG;IACX,WAAW,CAAC,EAAE,WAAW,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAOD,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CA8U1C,CAAA"}
@@ -146,10 +146,11 @@ export const ScheduleDrawer = ({
146
146
  docs,
147
147
  i18n,
148
148
  localization,
149
+ supportedTimezones,
149
150
  t
150
151
  }));
151
152
  setUpcoming(docs);
152
- }, [collectionSlug, globalSlug, serverURL, api, dateFormat, id, t, i18n, localization]);
153
+ }, [collectionSlug, globalSlug, serverURL, api, i18n, dateFormat, localization, supportedTimezones, t, id]);
153
154
  const deleteHandler = React.useCallback(async id_0 => {
154
155
  try {
155
156
  await schedulePublish({
@@ -186,7 +187,6 @@ export const ScheduleDrawer = ({
186
187
  locale: publishSpecificLocale,
187
188
  timezone
188
189
  });
189
- setTimezone(defaultTimezone);
190
190
  setDate(undefined);
191
191
  toast.success(t('version:scheduledSuccessfully'));
192
192
  void fetchUpcoming();
@@ -195,7 +195,7 @@ export const ScheduleDrawer = ({
195
195
  toast.error(err_0.message);
196
196
  }
197
197
  setProcessing(false);
198
- }, [date, locale, type, t, schedulePublish, collectionSlug, id, globalSlug, timezone, defaultTimezone, fetchUpcoming]);
198
+ }, [date, locale, type, t, schedulePublish, collectionSlug, id, globalSlug, timezone, fetchUpcoming]);
199
199
  const displayedValue = useMemo(() => {
200
200
  if (timezone && userTimezone && date) {
201
201
  // Create TZDate instances for the selected timezone and the user's timezone
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TZDateMini","TZDate","useModal","getTranslation","transpose","qs","React","useCallback","useMemo","toast","FieldLabel","Radio","useConfig","useDocumentInfo","useServerFunctions","useTranslation","requests","Banner","DrawerCloseButton","Button","DatePickerField","Drawer","Gutter","ReactSelect","ShimmerEffect","Table","TimezonePicker","buildUpcomingColumns","baseClass","defaultLocaleOption","label","value","ScheduleDrawer","slug","defaultType","toggleModal","config","admin","dateFormat","timezones","defaultTimezone","supportedTimezones","localization","routes","api","serverURL","id","collectionSlug","globalSlug","title","i18n","t","schedulePublish","type","setType","useState","date","setDate","timezone","setTimezone","locale","setLocale","processing","setProcessing","modalTitle","upcoming","setUpcoming","upcomingColumns","setUpcomingColumns","deleteHandlerRef","useRef","userTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","localeOptions","options","locales","map","code","unshift","fetchUpcoming","query","sort","where","and","taskSlug","equals","waitUntil","greater_than","Date","push","String","docs","post","body","stringify","headers","language","then","res","json","deleteHandler","current","deleteID","success","err","console","error","message","useEffect","handleSave","publishSpecificLocale","doc","relationTo","undefined","global","displayedValue","DateWithOriginalTz","tz","DateWithUserTz","modifiedDate","withTimeZone","dateWithTimezone","dateWithUserTimezone","toISOString","onChangeDate","incomingDate","tzDateWithUTC","dateToUserTz","fetchInitialUpcoming","_jsxs","className","gutter","Header","_jsx","onClick","required","isSelected","onChange","option","path","readOnly","minDate","e","pickerAppearance","timeIntervals","length","selectedTimezone","Fragment","buttonStyle","disabled","appearance","columns","data"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\n'use client'\n\nimport type { Column, Where } from 'payload'\n\nimport { TZDateMini as TZDate } from '@date-fns/tz/date/mini'\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { transpose } from 'date-fns/transpose'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport type { PublishType, UpcomingEvent } from './types.js'\n\nimport { FieldLabel } from '../../../fields/FieldLabel/index.js'\nimport { Radio } from '../../../fields/RadioGroup/Radio/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Banner } from '../../Banner/index.js'\nimport { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DatePickerField } from '../../DatePicker/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { Gutter } from '../../Gutter/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Table } from '../../Table/index.js'\nimport './index.scss'\nimport { TimezonePicker } from '../../TimezonePicker/index.js'\nimport { buildUpcomingColumns } from './buildUpcomingColumns.js'\n\nconst baseClass = 'schedule-publish'\n\ntype Props = {\n defaultType?: PublishType\n slug: string\n}\n\nconst defaultLocaleOption = {\n label: 'All',\n value: 'all',\n}\n\nexport const ScheduleDrawer: React.FC<Props> = ({ slug, defaultType }) => {\n const { toggleModal } = useModal()\n const {\n config: {\n admin: {\n dateFormat,\n timezones: { defaultTimezone, supportedTimezones },\n },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, title } = useDocumentInfo()\n const { i18n, t } = useTranslation()\n const { schedulePublish } = useServerFunctions()\n const [type, setType] = React.useState<PublishType>(defaultType || 'publish')\n const [date, setDate] = React.useState<Date>()\n const [timezone, setTimezone] = React.useState<string>(defaultTimezone)\n const [locale, setLocale] = React.useState<{ label: string; value: string }>(defaultLocaleOption)\n const [processing, setProcessing] = React.useState(false)\n const modalTitle = t('general:schedulePublishFor', { title })\n const [upcoming, setUpcoming] = React.useState<UpcomingEvent[]>()\n const [upcomingColumns, setUpcomingColumns] = React.useState<Column[]>()\n const deleteHandlerRef = React.useRef<((id: number | string) => Promise<void>) | null>(() => null)\n\n // Get the user timezone so we can adjust the displayed value against it\n const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone\n\n const localeOptions = React.useMemo(() => {\n if (localization) {\n const options = localization.locales.map(({ code, label }) => ({\n label: getTranslation(label, i18n),\n value: code,\n }))\n\n options.unshift(defaultLocaleOption)\n\n return options\n }\n\n return []\n }, [localization, i18n])\n\n const fetchUpcoming = React.useCallback(async () => {\n const query: { sort: string; where: Where } = {\n sort: 'waitUntil',\n where: {\n and: [\n {\n taskSlug: {\n equals: 'schedulePublish',\n },\n },\n {\n waitUntil: {\n greater_than: new Date(),\n },\n },\n ],\n },\n }\n\n if (collectionSlug) {\n query.where.and.push({\n 'input.doc.value': {\n equals: String(id),\n },\n })\n query.where.and.push({\n 'input.doc.relationTo': {\n equals: collectionSlug,\n },\n })\n }\n\n if (globalSlug) {\n query.where.and.push({\n 'input.global': {\n equals: globalSlug,\n },\n })\n }\n\n const { docs } = await requests\n .post(`${serverURL}${api}/payload-jobs`, {\n body: qs.stringify(query),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n })\n .then((res) => res.json())\n\n setUpcomingColumns(\n buildUpcomingColumns({\n dateFormat,\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n deleteHandler: deleteHandlerRef.current,\n docs,\n i18n,\n localization,\n t,\n }),\n )\n setUpcoming(docs)\n }, [collectionSlug, globalSlug, serverURL, api, dateFormat, id, t, i18n, localization])\n\n const deleteHandler = React.useCallback(\n async (id: number | string) => {\n try {\n await schedulePublish({\n deleteID: id,\n })\n await fetchUpcoming()\n toast.success(t('general:deletedSuccessfully'))\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n },\n [fetchUpcoming, schedulePublish, t],\n )\n\n React.useEffect(() => {\n deleteHandlerRef.current = deleteHandler\n }, [deleteHandler])\n\n const handleSave = React.useCallback(async () => {\n if (!date) {\n return toast.error(t('general:noDateSelected'))\n }\n\n setProcessing(true)\n\n let publishSpecificLocale: string\n\n if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {\n publishSpecificLocale = locale.value\n }\n\n try {\n await schedulePublish({\n type,\n date,\n doc: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: String(id),\n }\n : undefined,\n global: globalSlug || undefined,\n locale: publishSpecificLocale,\n timezone,\n })\n\n setTimezone(defaultTimezone)\n setDate(undefined)\n toast.success(t('version:scheduledSuccessfully'))\n void fetchUpcoming()\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n\n setProcessing(false)\n }, [\n date,\n locale,\n type,\n t,\n schedulePublish,\n collectionSlug,\n id,\n globalSlug,\n timezone,\n defaultTimezone,\n fetchUpcoming,\n ])\n\n const displayedValue = useMemo(() => {\n if (timezone && userTimezone && date) {\n // Create TZDate instances for the selected timezone and the user's timezone\n // These instances allow us to transpose the date between timezones while keeping the same time value\n const DateWithOriginalTz = TZDate.tz(timezone)\n const DateWithUserTz = TZDate.tz(userTimezone)\n\n const modifiedDate = new TZDate(date).withTimeZone(timezone)\n\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(modifiedDate, DateWithOriginalTz)\n\n // Transpose the date to the user's timezone - this is necessary because the react-datepicker component insists on displaying the date in the user's timezone\n const dateWithUserTimezone = transpose(dateWithTimezone, DateWithUserTz)\n\n return dateWithUserTimezone.toISOString()\n }\n\n return date\n }, [timezone, date, userTimezone])\n\n const onChangeDate = useCallback(\n (incomingDate: Date) => {\n if (timezone && incomingDate) {\n // Create TZDate instances for the selected timezone\n const tzDateWithUTC = TZDate.tz(timezone)\n\n // Creates a TZDate instance for the user's timezone — this is default behaviour of TZDate as it wraps the Date constructor\n const dateToUserTz = new TZDate(incomingDate)\n\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(dateToUserTz, tzDateWithUTC)\n\n setDate(dateWithTimezone || null)\n } else {\n setDate(incomingDate || null)\n }\n },\n [setDate, timezone],\n )\n\n React.useEffect(() => {\n if (!upcoming) {\n const fetchInitialUpcoming = async () => {\n await fetchUpcoming()\n }\n\n void fetchInitialUpcoming()\n }\n }, [upcoming, fetchUpcoming])\n\n return (\n <Drawer\n className={baseClass}\n gutter={false}\n Header={\n <div className={`${baseClass}__drawer-header`}>\n <h2 title={modalTitle}>{modalTitle}</h2>\n <DrawerCloseButton onClick={() => toggleModal(slug)} />\n </div>\n }\n slug={slug}\n >\n <Gutter className={`${baseClass}__scheduler`}>\n <FieldLabel label={t('version:type')} required />\n <ul className={`${baseClass}__type`}>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'publish'}\n onChange={() => setType('publish')}\n option={{ label: t('version:publish'), value: 'publish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'unpublish'}\n onChange={() => setType('unpublish')}\n option={{ label: t('version:unpublish'), value: 'unpublish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n </ul>\n <br />\n <FieldLabel label={t('general:time')} path={'time'} required />\n <DatePickerField\n id=\"time\"\n minDate={new Date()}\n onChange={(e) => onChangeDate(e)}\n pickerAppearance=\"dayAndTime\"\n readOnly={processing}\n timeIntervals={5}\n value={displayedValue}\n />\n {supportedTimezones.length > 0 && (\n <TimezonePicker\n id={`timezone-picker`}\n onChange={setTimezone}\n options={supportedTimezones}\n selectedTimezone={timezone}\n />\n )}\n <br />\n {localeOptions.length > 0 && type === 'publish' && (\n <React.Fragment>\n <FieldLabel label={t('localization:localeToPublish')} />\n <ReactSelect\n onChange={(e) => setLocale(e as { label: string; value: string })}\n options={localeOptions}\n value={locale}\n />\n <br />\n </React.Fragment>\n )}\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"primary\"\n disabled={processing}\n id=\"scheduled-publish-save\"\n onClick={handleSave}\n type=\"button\"\n >\n {t('general:save')}\n </Button>\n {processing ? <span>{t('general:saving')}</span> : null}\n </div>\n </Gutter>\n <Gutter className={`${baseClass}__upcoming`}>\n <h4>{t('general:upcomingEvents')}</h4>\n {!upcoming && <ShimmerEffect />}\n {upcoming?.length === 0 && (\n <Banner type=\"info\">{t('general:noUpcomingEventsScheduled')}</Banner>\n )}\n {upcoming?.length > 0 && (\n <Table appearance=\"condensed\" columns={upcomingColumns} data={upcoming} />\n )}\n </Gutter>\n </Drawer>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["TZDateMini","TZDate","useModal","getTranslation","transpose","qs","React","useCallback","useMemo","toast","FieldLabel","Radio","useConfig","useDocumentInfo","useServerFunctions","useTranslation","requests","Banner","DrawerCloseButton","Button","DatePickerField","Drawer","Gutter","ReactSelect","ShimmerEffect","Table","TimezonePicker","buildUpcomingColumns","baseClass","defaultLocaleOption","label","value","ScheduleDrawer","slug","defaultType","toggleModal","config","admin","dateFormat","timezones","defaultTimezone","supportedTimezones","localization","routes","api","serverURL","id","collectionSlug","globalSlug","title","i18n","t","schedulePublish","type","setType","useState","date","setDate","timezone","setTimezone","locale","setLocale","processing","setProcessing","modalTitle","upcoming","setUpcoming","upcomingColumns","setUpcomingColumns","deleteHandlerRef","useRef","userTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","localeOptions","options","locales","map","code","unshift","fetchUpcoming","query","sort","where","and","taskSlug","equals","waitUntil","greater_than","Date","push","String","docs","post","body","stringify","headers","language","then","res","json","deleteHandler","current","deleteID","success","err","console","error","message","useEffect","handleSave","publishSpecificLocale","doc","relationTo","undefined","global","displayedValue","DateWithOriginalTz","tz","DateWithUserTz","modifiedDate","withTimeZone","dateWithTimezone","dateWithUserTimezone","toISOString","onChangeDate","incomingDate","tzDateWithUTC","dateToUserTz","fetchInitialUpcoming","_jsxs","className","gutter","Header","_jsx","onClick","required","isSelected","onChange","option","path","readOnly","minDate","e","pickerAppearance","timeIntervals","length","selectedTimezone","Fragment","buttonStyle","disabled","appearance","columns","data"],"sources":["../../../../src/elements/PublishButton/ScheduleDrawer/index.tsx"],"sourcesContent":["/* eslint-disable no-console */\n'use client'\n\nimport type { Column, Where } from 'payload'\n\nimport { TZDateMini as TZDate } from '@date-fns/tz/date/mini'\nimport { useModal } from '@faceless-ui/modal'\nimport { getTranslation } from '@payloadcms/translations'\nimport { transpose } from 'date-fns/transpose'\nimport * as qs from 'qs-esm'\nimport React, { useCallback, useMemo } from 'react'\nimport { toast } from 'sonner'\n\nimport type { PublishType, UpcomingEvent } from './types.js'\n\nimport { FieldLabel } from '../../../fields/FieldLabel/index.js'\nimport { Radio } from '../../../fields/RadioGroup/Radio/index.js'\nimport { useConfig } from '../../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../../providers/DocumentInfo/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { requests } from '../../../utilities/api.js'\nimport { Banner } from '../../Banner/index.js'\nimport { DrawerCloseButton } from '../../BulkUpload/DrawerCloseButton/index.js'\nimport { Button } from '../../Button/index.js'\nimport { DatePickerField } from '../../DatePicker/index.js'\nimport { Drawer } from '../../Drawer/index.js'\nimport { Gutter } from '../../Gutter/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { ShimmerEffect } from '../../ShimmerEffect/index.js'\nimport { Table } from '../../Table/index.js'\nimport './index.scss'\nimport { TimezonePicker } from '../../TimezonePicker/index.js'\nimport { buildUpcomingColumns } from './buildUpcomingColumns.js'\n\nconst baseClass = 'schedule-publish'\n\ntype Props = {\n defaultType?: PublishType\n slug: string\n}\n\nconst defaultLocaleOption = {\n label: 'All',\n value: 'all',\n}\n\nexport const ScheduleDrawer: React.FC<Props> = ({ slug, defaultType }) => {\n const { toggleModal } = useModal()\n const {\n config: {\n admin: {\n dateFormat,\n timezones: { defaultTimezone, supportedTimezones },\n },\n localization,\n routes: { api },\n serverURL,\n },\n } = useConfig()\n const { id, collectionSlug, globalSlug, title } = useDocumentInfo()\n const { i18n, t } = useTranslation()\n const { schedulePublish } = useServerFunctions()\n const [type, setType] = React.useState<PublishType>(defaultType || 'publish')\n const [date, setDate] = React.useState<Date>()\n const [timezone, setTimezone] = React.useState<string>(defaultTimezone)\n const [locale, setLocale] = React.useState<{ label: string; value: string }>(defaultLocaleOption)\n const [processing, setProcessing] = React.useState(false)\n const modalTitle = t('general:schedulePublishFor', { title })\n const [upcoming, setUpcoming] = React.useState<UpcomingEvent[]>()\n const [upcomingColumns, setUpcomingColumns] = React.useState<Column[]>()\n const deleteHandlerRef = React.useRef<((id: number | string) => Promise<void>) | null>(() => null)\n\n // Get the user timezone so we can adjust the displayed value against it\n const userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone\n\n const localeOptions = React.useMemo(() => {\n if (localization) {\n const options = localization.locales.map(({ code, label }) => ({\n label: getTranslation(label, i18n),\n value: code,\n }))\n\n options.unshift(defaultLocaleOption)\n\n return options\n }\n\n return []\n }, [localization, i18n])\n\n const fetchUpcoming = React.useCallback(async () => {\n const query: { sort: string; where: Where } = {\n sort: 'waitUntil',\n where: {\n and: [\n {\n taskSlug: {\n equals: 'schedulePublish',\n },\n },\n {\n waitUntil: {\n greater_than: new Date(),\n },\n },\n ],\n },\n }\n\n if (collectionSlug) {\n query.where.and.push({\n 'input.doc.value': {\n equals: String(id),\n },\n })\n query.where.and.push({\n 'input.doc.relationTo': {\n equals: collectionSlug,\n },\n })\n }\n\n if (globalSlug) {\n query.where.and.push({\n 'input.global': {\n equals: globalSlug,\n },\n })\n }\n\n const { docs } = await requests\n .post(`${serverURL}${api}/payload-jobs`, {\n body: qs.stringify(query),\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'X-HTTP-Method-Override': 'GET',\n },\n })\n .then((res) => res.json())\n\n setUpcomingColumns(\n buildUpcomingColumns({\n dateFormat,\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n deleteHandler: deleteHandlerRef.current,\n docs,\n i18n,\n localization,\n supportedTimezones,\n t,\n }),\n )\n setUpcoming(docs)\n }, [\n collectionSlug,\n globalSlug,\n serverURL,\n api,\n i18n,\n dateFormat,\n localization,\n supportedTimezones,\n t,\n id,\n ])\n\n const deleteHandler = React.useCallback(\n async (id: number | string) => {\n try {\n await schedulePublish({\n deleteID: id,\n })\n await fetchUpcoming()\n toast.success(t('general:deletedSuccessfully'))\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n },\n [fetchUpcoming, schedulePublish, t],\n )\n\n React.useEffect(() => {\n deleteHandlerRef.current = deleteHandler\n }, [deleteHandler])\n\n const handleSave = React.useCallback(async () => {\n if (!date) {\n return toast.error(t('general:noDateSelected'))\n }\n\n setProcessing(true)\n\n let publishSpecificLocale: string\n\n if (typeof locale === 'object' && locale.value !== 'all' && type === 'publish') {\n publishSpecificLocale = locale.value\n }\n\n try {\n await schedulePublish({\n type,\n date,\n doc: collectionSlug\n ? {\n relationTo: collectionSlug,\n value: String(id),\n }\n : undefined,\n global: globalSlug || undefined,\n locale: publishSpecificLocale,\n timezone,\n })\n\n setDate(undefined)\n toast.success(t('version:scheduledSuccessfully'))\n void fetchUpcoming()\n } catch (err) {\n console.error(err)\n toast.error(err.message)\n }\n\n setProcessing(false)\n }, [\n date,\n locale,\n type,\n t,\n schedulePublish,\n collectionSlug,\n id,\n globalSlug,\n timezone,\n fetchUpcoming,\n ])\n\n const displayedValue = useMemo(() => {\n if (timezone && userTimezone && date) {\n // Create TZDate instances for the selected timezone and the user's timezone\n // These instances allow us to transpose the date between timezones while keeping the same time value\n const DateWithOriginalTz = TZDate.tz(timezone)\n const DateWithUserTz = TZDate.tz(userTimezone)\n\n const modifiedDate = new TZDate(date).withTimeZone(timezone)\n\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(modifiedDate, DateWithOriginalTz)\n\n // Transpose the date to the user's timezone - this is necessary because the react-datepicker component insists on displaying the date in the user's timezone\n const dateWithUserTimezone = transpose(dateWithTimezone, DateWithUserTz)\n\n return dateWithUserTimezone.toISOString()\n }\n\n return date\n }, [timezone, date, userTimezone])\n\n const onChangeDate = useCallback(\n (incomingDate: Date) => {\n if (timezone && incomingDate) {\n // Create TZDate instances for the selected timezone\n const tzDateWithUTC = TZDate.tz(timezone)\n\n // Creates a TZDate instance for the user's timezone — this is default behaviour of TZDate as it wraps the Date constructor\n const dateToUserTz = new TZDate(incomingDate)\n\n // Transpose the date to the selected timezone\n const dateWithTimezone = transpose(dateToUserTz, tzDateWithUTC)\n\n setDate(dateWithTimezone || null)\n } else {\n setDate(incomingDate || null)\n }\n },\n [setDate, timezone],\n )\n\n React.useEffect(() => {\n if (!upcoming) {\n const fetchInitialUpcoming = async () => {\n await fetchUpcoming()\n }\n\n void fetchInitialUpcoming()\n }\n }, [upcoming, fetchUpcoming])\n\n return (\n <Drawer\n className={baseClass}\n gutter={false}\n Header={\n <div className={`${baseClass}__drawer-header`}>\n <h2 title={modalTitle}>{modalTitle}</h2>\n <DrawerCloseButton onClick={() => toggleModal(slug)} />\n </div>\n }\n slug={slug}\n >\n <Gutter className={`${baseClass}__scheduler`}>\n <FieldLabel label={t('version:type')} required />\n <ul className={`${baseClass}__type`}>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'publish'}\n onChange={() => setType('publish')}\n option={{ label: t('version:publish'), value: 'publish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n <li>\n <Radio\n id={`${slug}-type`}\n isSelected={type === 'unpublish'}\n onChange={() => setType('unpublish')}\n option={{ label: t('version:unpublish'), value: 'unpublish' }}\n path={`${slug}-type`}\n readOnly={processing}\n />\n </li>\n </ul>\n <br />\n <FieldLabel label={t('general:time')} path={'time'} required />\n <DatePickerField\n id=\"time\"\n minDate={new Date()}\n onChange={(e) => onChangeDate(e)}\n pickerAppearance=\"dayAndTime\"\n readOnly={processing}\n timeIntervals={5}\n value={displayedValue}\n />\n {supportedTimezones.length > 0 && (\n <TimezonePicker\n id={`timezone-picker`}\n onChange={setTimezone}\n options={supportedTimezones}\n selectedTimezone={timezone}\n />\n )}\n <br />\n {localeOptions.length > 0 && type === 'publish' && (\n <React.Fragment>\n <FieldLabel label={t('localization:localeToPublish')} />\n <ReactSelect\n onChange={(e) => setLocale(e as { label: string; value: string })}\n options={localeOptions}\n value={locale}\n />\n <br />\n </React.Fragment>\n )}\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"primary\"\n disabled={processing}\n id=\"scheduled-publish-save\"\n onClick={handleSave}\n type=\"button\"\n >\n {t('general:save')}\n </Button>\n {processing ? <span>{t('general:saving')}</span> : null}\n </div>\n </Gutter>\n <Gutter className={`${baseClass}__upcoming`}>\n <h4>{t('general:upcomingEvents')}</h4>\n {!upcoming && <ShimmerEffect />}\n {upcoming?.length === 0 && (\n <Banner type=\"info\">{t('general:noUpcomingEventsScheduled')}</Banner>\n )}\n {upcoming?.length > 0 && (\n <Table appearance=\"condensed\" columns={upcomingColumns} data={upcoming} />\n )}\n </Gutter>\n </Drawer>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,7 @@ import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import React from 'react';
6
6
  import { useConfig } from '../../../../../providers/Config/index.js';
7
7
  import { useTranslation } from '../../../../../providers/Translation/index.js';
8
- import { formatDate } from '../../../../../utilities/formatDate.js';
8
+ import { formatDate } from '../../../../../utilities/formatDocTitle/formatDateTitle.js';
9
9
  export const DateCell = t0 => {
10
10
  const $ = _c(8);
11
11
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useConfig","useTranslation","formatDate","DateCell","t0","$","cellData","field","t1","admin","t2","t3","undefined","date","config","t4","t5","dateFormat","dateFormatFromRoot","displayFormat","i18n","t6","pattern","t7","_jsx","children"],"sources":["../../../../../../src/elements/Table/DefaultCell/fields/Date/index.tsx"],"sourcesContent":["'use client'\nimport type { DateFieldClient, DefaultCellComponentProps } from 'payload'\n\nimport React from 'react'\n\nimport { useConfig } from '../../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../../providers/Translation/index.js'\nimport { formatDate } from '../../../../../utilities/formatDate.js'\n\nexport const DateCell: React.FC<DefaultCellComponentProps<DateFieldClient>> = ({\n cellData,\n field: { admin: { date } = {} },\n}) => {\n const {\n config: {\n admin: { dateFormat: dateFormatFromRoot },\n },\n } = useConfig()\n\n const dateFormat = date?.displayFormat || dateFormatFromRoot\n\n const { i18n } = useTranslation()\n\n return <span>{cellData && formatDate({ date: cellData, i18n, pattern: dateFormat })}</span>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,MAAW;AAElB,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,UAAU,QAAQ;AAE3B,OAAO,MAAMC,QAAA,GAAiEC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ,QAAA;IAAAC,KAAA,EAAAC;EAAA,IAAAJ,EAG9E;EADQ;IAAAK,KAAA,EAAAC;EAAA,IAAAF,EAAwB;EAAA,IAAAG,EAAA;EAAA,IAAAN,CAAA,QAAAK,EAAA;IAAfC,EAAA,GAAAD,EAAa,KAAAE,SAAA,QAAbF,EAAa;IAAAL,CAAA,MAAAK,EAAA;IAAAL,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAAb;IAAAQ;EAAA,IAAAF,EAAa;EAE7B;IAAAG,MAAA,EAAAC;EAAA,IAIIf,SAAA;EAHM;IAAAS,KAAA,EAAAO;EAAA,IAAAD,EAEP;EADQ;IAAAE,UAAA,EAAAC;EAAA,IAAAF,EAAkC;EAI7C,MAAAC,UAAA,GAAmBJ,IAAA,EAAAM,aAAA,IAAuBD,kBAAA;EAE1C;IAAAE;EAAA,IAAiBnB,cAAA;EAAA,IAAAoB,EAAA;EAAA,IAAAhB,CAAA,QAAAC,QAAA,IAAAD,CAAA,QAAAY,UAAA,IAAAZ,CAAA,QAAAe,IAAA;IAEHC,EAAA,GAAAf,QAAA,IAAYJ,UAAA;MAAAW,IAAA,EAAmBP,QAAA;MAAAc,IAAA;MAAAE,OAAA,EAAyBL;IAAA,CAAW;IAAAZ,CAAA,MAAAC,QAAA;IAAAD,CAAA,MAAAY,UAAA;IAAAZ,CAAA,MAAAe,IAAA;IAAAf,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAAA,IAAAkB,EAAA;EAAA,IAAAlB,CAAA,QAAAgB,EAAA;IAA1EE,EAAA,GAAAC,IAAA,CAAC;MAAAC,QAAA,EAAMJ;IAAmE,C;;;;;;SAA1EE,E;CACT","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","useConfig","useTranslation","formatDate","DateCell","t0","$","cellData","field","t1","admin","t2","t3","undefined","date","config","t4","t5","dateFormat","dateFormatFromRoot","displayFormat","i18n","t6","pattern","t7","_jsx","children"],"sources":["../../../../../../src/elements/Table/DefaultCell/fields/Date/index.tsx"],"sourcesContent":["'use client'\nimport type { DateFieldClient, DefaultCellComponentProps } from 'payload'\n\nimport React from 'react'\n\nimport { useConfig } from '../../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../../providers/Translation/index.js'\nimport { formatDate } from '../../../../../utilities/formatDocTitle/formatDateTitle.js'\n\nexport const DateCell: React.FC<DefaultCellComponentProps<DateFieldClient>> = ({\n cellData,\n field: { admin: { date } = {} },\n}) => {\n const {\n config: {\n admin: { dateFormat: dateFormatFromRoot },\n },\n } = useConfig()\n\n const dateFormat = date?.displayFormat || dateFormatFromRoot\n\n const { i18n } = useTranslation()\n\n return <span>{cellData && formatDate({ date: cellData, i18n, pattern: dateFormat })}</span>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,MAAW;AAElB,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,UAAU,QAAQ;AAE3B,OAAO,MAAMC,QAAA,GAAiEC,EAAA;EAAA,MAAAC,CAAA,GAAAP,EAAA;EAAC;IAAAQ,QAAA;IAAAC,KAAA,EAAAC;EAAA,IAAAJ,EAG9E;EADQ;IAAAK,KAAA,EAAAC;EAAA,IAAAF,EAAwB;EAAA,IAAAG,EAAA;EAAA,IAAAN,CAAA,QAAAK,EAAA;IAAfC,EAAA,GAAAD,EAAa,KAAAE,SAAA,QAAbF,EAAa;IAAAL,CAAA,MAAAK,EAAA;IAAAL,CAAA,MAAAM,EAAA;EAAA;IAAAA,EAAA,GAAAN,CAAA;EAAA;EAAb;IAAAQ;EAAA,IAAAF,EAAa;EAE7B;IAAAG,MAAA,EAAAC;EAAA,IAIIf,SAAA;EAHM;IAAAS,KAAA,EAAAO;EAAA,IAAAD,EAEP;EADQ;IAAAE,UAAA,EAAAC;EAAA,IAAAF,EAAkC;EAI7C,MAAAC,UAAA,GAAmBJ,IAAA,EAAAM,aAAA,IAAuBD,kBAAA;EAE1C;IAAAE;EAAA,IAAiBnB,cAAA;EAAA,IAAAoB,EAAA;EAAA,IAAAhB,CAAA,QAAAC,QAAA,IAAAD,CAAA,QAAAY,UAAA,IAAAZ,CAAA,QAAAe,IAAA;IAEHC,EAAA,GAAAf,QAAA,IAAYJ,UAAA;MAAAW,IAAA,EAAmBP,QAAA;MAAAc,IAAA;MAAAE,OAAA,EAAyBL;IAAA,CAAW;IAAAZ,CAAA,MAAAC,QAAA;IAAAD,CAAA,MAAAY,UAAA;IAAAZ,CAAA,MAAAe,IAAA;IAAAf,CAAA,MAAAgB,EAAA;EAAA;IAAAA,EAAA,GAAAhB,CAAA;EAAA;EAAA,IAAAkB,EAAA;EAAA,IAAAlB,CAAA,QAAAgB,EAAA;IAA1EE,EAAA,GAAAC,IAAA,CAAC;MAAAC,QAAA,EAAMJ;IAAmE,C;;;;;;SAA1EE,E;CACT","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/elements/Table/DefaultCell/fields/File/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EAClB,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,cAAc,CAAA;AAIrB,MAAM,WAAW,aACf,SAAQ,yBAAyB,CAAC,eAAe,GAAG,iBAAiB,CAAC;IACtE,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;CAClD;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA6B5C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/elements/Table/DefaultCell/fields/File/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EAClB,MAAM,SAAS,CAAA;AAEhB,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,cAAc,CAAA;AAOrB,MAAM,WAAW,aACf,SAAQ,yBAAyB,CAAC,eAAe,GAAG,iBAAiB,CAAC;IACtE,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAA;CAClD;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAyE5C,CAAA"}
@@ -5,6 +5,8 @@ import React from 'react';
5
5
  import { Thumbnail } from '../../../../Thumbnail/index.js';
6
6
  import './index.scss';
7
7
  const baseClass = 'file';
8
+ const targetThumbnailSizeMin = 40;
9
+ const targetThumbnailSizeMax = 180;
8
10
  export const FileCell = ({
9
11
  cellData: filename,
10
12
  collectionConfig,
@@ -14,6 +16,27 @@ export const FileCell = ({
14
16
  const fieldPreviewAllowed = 'displayPreview' in field ? field.displayPreview : undefined;
15
17
  const previewAllowed = fieldPreviewAllowed ?? collectionConfig.upload?.displayPreview ?? true;
16
18
  if (previewAllowed) {
19
+ let fileSrc = rowData?.thumbnailURL ?? rowData?.url;
20
+ if (rowData?.url && !rowData?.thumbnailURL && typeof rowData?.mimeType === 'string' && rowData?.mimeType.startsWith('image') && rowData?.sizes) {
21
+ const sizes = Object.values(rowData.sizes);
22
+ const bestFit = sizes.reduce((closest, current) => {
23
+ if (!current.width || current.width < targetThumbnailSizeMin) {
24
+ return closest;
25
+ }
26
+ if (current.width >= targetThumbnailSizeMin && current.width <= targetThumbnailSizeMax) {
27
+ return !closest.width || current.width < closest.width || closest.width < targetThumbnailSizeMin || closest.width > targetThumbnailSizeMax ? current : closest;
28
+ }
29
+ if (!closest.width || !closest.original && closest.width < targetThumbnailSizeMin && current.width > closest.width || closest.width > targetThumbnailSizeMax && current.width < closest.width) {
30
+ return current;
31
+ }
32
+ return closest;
33
+ }, {
34
+ original: true,
35
+ url: rowData?.url,
36
+ width: rowData?.width
37
+ });
38
+ fileSrc = bestFit.url || fileSrc;
39
+ }
17
40
  return /*#__PURE__*/_jsxs("div", {
18
41
  className: baseClass,
19
42
  children: [/*#__PURE__*/_jsx(Thumbnail, {
@@ -23,7 +46,7 @@ export const FileCell = ({
23
46
  ...rowData,
24
47
  filename
25
48
  },
26
- fileSrc: rowData?.thumbnailURL || rowData?.url,
49
+ fileSrc: fileSrc,
27
50
  size: "small",
28
51
  uploadConfig: collectionConfig?.upload
29
52
  }), /*#__PURE__*/_jsx("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","Thumbnail","baseClass","FileCell","cellData","filename","collectionConfig","field","rowData","fieldPreviewAllowed","displayPreview","undefined","previewAllowed","upload","_jsxs","className","_jsx","collectionSlug","slug","doc","fileSrc","thumbnailURL","url","size","uploadConfig","String","_Fragment"],"sources":["../../../../../../src/elements/Table/DefaultCell/fields/File/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientCollectionConfig,\n DefaultCellComponentProps,\n TextFieldClient,\n UploadFieldClient,\n} from 'payload'\n\nimport React from 'react'\n\nimport { Thumbnail } from '../../../../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'file'\n\nexport interface FileCellProps\n extends DefaultCellComponentProps<TextFieldClient | UploadFieldClient> {\n readonly collectionConfig: ClientCollectionConfig\n}\n\nexport const FileCell: React.FC<FileCellProps> = ({\n cellData: filename,\n collectionConfig,\n field,\n rowData,\n}) => {\n const fieldPreviewAllowed = 'displayPreview' in field ? field.displayPreview : undefined\n const previewAllowed = fieldPreviewAllowed ?? collectionConfig.upload?.displayPreview ?? true\n\n if (previewAllowed) {\n return (\n <div className={baseClass}>\n <Thumbnail\n className={`${baseClass}__thumbnail`}\n collectionSlug={collectionConfig?.slug}\n doc={{\n ...rowData,\n filename,\n }}\n fileSrc={rowData?.thumbnailURL || rowData?.url}\n size=\"small\"\n uploadConfig={collectionConfig?.upload}\n />\n <span className={`${baseClass}__filename`}>{String(filename)}</span>\n </div>\n )\n } else {\n return <>{String(filename)}</>\n }\n}\n"],"mappings":"AAAA;;;AAQA,OAAOA,KAAA,MAAW;AAElB,SAASC,SAAS,QAAQ;AAC1B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAOlB,OAAO,MAAMC,QAAA,GAAoCA,CAAC;EAChDC,QAAA,EAAUC,QAAQ;EAClBC,gBAAgB;EAChBC,KAAK;EACLC;AAAO,CACR;EACC,MAAMC,mBAAA,GAAsB,oBAAoBF,KAAA,GAAQA,KAAA,CAAMG,cAAc,GAAGC,SAAA;EAC/E,MAAMC,cAAA,GAAiBH,mBAAA,IAAuBH,gBAAA,CAAiBO,MAAM,EAAEH,cAAA,IAAkB;EAEzF,IAAIE,cAAA,EAAgB;IAClB,oBACEE,KAAA,CAAC;MAAIC,SAAA,EAAWb,SAAA;8BACdc,IAAA,CAACf,SAAA;QACCc,SAAA,EAAW,GAAGb,SAAA,aAAsB;QACpCe,cAAA,EAAgBX,gBAAA,EAAkBY,IAAA;QAClCC,GAAA,EAAK;UACH,GAAGX,OAAO;UACVH;QACF;QACAe,OAAA,EAASZ,OAAA,EAASa,YAAA,IAAgBb,OAAA,EAASc,GAAA;QAC3CC,IAAA,EAAK;QACLC,YAAA,EAAclB,gBAAA,EAAkBO;uBAElCG,IAAA,CAAC;QAAKD,SAAA,EAAW,GAAGb,SAAA,YAAqB;kBAAGuB,MAAA,CAAOpB,QAAA;;;EAGzD,OAAO;IACL,oBAAOW,IAAA,CAAAU,SAAA;gBAAGD,MAAA,CAAOpB,QAAA;;EACnB;AACF","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","Thumbnail","baseClass","targetThumbnailSizeMin","targetThumbnailSizeMax","FileCell","cellData","filename","collectionConfig","field","rowData","fieldPreviewAllowed","displayPreview","undefined","previewAllowed","upload","fileSrc","thumbnailURL","url","mimeType","startsWith","sizes","Object","values","bestFit","reduce","closest","current","width","original","_jsxs","className","_jsx","collectionSlug","slug","doc","size","uploadConfig","String","_Fragment"],"sources":["../../../../../../src/elements/Table/DefaultCell/fields/File/index.tsx"],"sourcesContent":["'use client'\nimport type {\n ClientCollectionConfig,\n DefaultCellComponentProps,\n TextFieldClient,\n UploadFieldClient,\n} from 'payload'\n\nimport React from 'react'\n\nimport { Thumbnail } from '../../../../Thumbnail/index.js'\nimport './index.scss'\n\nconst baseClass = 'file'\n\nconst targetThumbnailSizeMin = 40\nconst targetThumbnailSizeMax = 180\n\nexport interface FileCellProps\n extends DefaultCellComponentProps<TextFieldClient | UploadFieldClient> {\n readonly collectionConfig: ClientCollectionConfig\n}\n\nexport const FileCell: React.FC<FileCellProps> = ({\n cellData: filename,\n collectionConfig,\n field,\n rowData,\n}) => {\n const fieldPreviewAllowed = 'displayPreview' in field ? field.displayPreview : undefined\n const previewAllowed = fieldPreviewAllowed ?? collectionConfig.upload?.displayPreview ?? true\n\n if (previewAllowed) {\n let fileSrc: string | undefined = rowData?.thumbnailURL ?? rowData?.url\n\n if (\n rowData?.url &&\n !rowData?.thumbnailURL &&\n typeof rowData?.mimeType === 'string' &&\n rowData?.mimeType.startsWith('image') &&\n rowData?.sizes\n ) {\n const sizes = Object.values<{ url?: string; width?: number }>(rowData.sizes)\n\n const bestFit = sizes.reduce(\n (closest, current) => {\n if (!current.width || current.width < targetThumbnailSizeMin) {\n return closest\n }\n\n if (current.width >= targetThumbnailSizeMin && current.width <= targetThumbnailSizeMax) {\n return !closest.width ||\n current.width < closest.width ||\n closest.width < targetThumbnailSizeMin ||\n closest.width > targetThumbnailSizeMax\n ? current\n : closest\n }\n\n if (\n !closest.width ||\n (!closest.original &&\n closest.width < targetThumbnailSizeMin &&\n current.width > closest.width) ||\n (closest.width > targetThumbnailSizeMax && current.width < closest.width)\n ) {\n return current\n }\n\n return closest\n },\n { original: true, url: rowData?.url, width: rowData?.width },\n )\n\n fileSrc = bestFit.url || fileSrc\n }\n\n return (\n <div className={baseClass}>\n <Thumbnail\n className={`${baseClass}__thumbnail`}\n collectionSlug={collectionConfig?.slug}\n doc={{\n ...rowData,\n filename,\n }}\n fileSrc={fileSrc}\n size=\"small\"\n uploadConfig={collectionConfig?.upload}\n />\n <span className={`${baseClass}__filename`}>{String(filename)}</span>\n </div>\n )\n } else {\n return <>{String(filename)}</>\n }\n}\n"],"mappings":"AAAA;;;AAQA,OAAOA,KAAA,MAAW;AAElB,SAASC,SAAS,QAAQ;AAC1B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,MAAMC,sBAAA,GAAyB;AAC/B,MAAMC,sBAAA,GAAyB;AAO/B,OAAO,MAAMC,QAAA,GAAoCA,CAAC;EAChDC,QAAA,EAAUC,QAAQ;EAClBC,gBAAgB;EAChBC,KAAK;EACLC;AAAO,CACR;EACC,MAAMC,mBAAA,GAAsB,oBAAoBF,KAAA,GAAQA,KAAA,CAAMG,cAAc,GAAGC,SAAA;EAC/E,MAAMC,cAAA,GAAiBH,mBAAA,IAAuBH,gBAAA,CAAiBO,MAAM,EAAEH,cAAA,IAAkB;EAEzF,IAAIE,cAAA,EAAgB;IAClB,IAAIE,OAAA,GAA8BN,OAAA,EAASO,YAAA,IAAgBP,OAAA,EAASQ,GAAA;IAEpE,IACER,OAAA,EAASQ,GAAA,IACT,CAACR,OAAA,EAASO,YAAA,IACV,OAAOP,OAAA,EAASS,QAAA,KAAa,YAC7BT,OAAA,EAASS,QAAA,CAASC,UAAA,CAAW,YAC7BV,OAAA,EAASW,KAAA,EACT;MACA,MAAMA,KAAA,GAAQC,MAAA,CAAOC,MAAM,CAAmCb,OAAA,CAAQW,KAAK;MAE3E,MAAMG,OAAA,GAAUH,KAAA,CAAMI,MAAM,CAC1B,CAACC,OAAA,EAASC,OAAA;QACR,IAAI,CAACA,OAAA,CAAQC,KAAK,IAAID,OAAA,CAAQC,KAAK,GAAGzB,sBAAA,EAAwB;UAC5D,OAAOuB,OAAA;QACT;QAEA,IAAIC,OAAA,CAAQC,KAAK,IAAIzB,sBAAA,IAA0BwB,OAAA,CAAQC,KAAK,IAAIxB,sBAAA,EAAwB;UACtF,OAAO,CAACsB,OAAA,CAAQE,KAAK,IACnBD,OAAA,CAAQC,KAAK,GAAGF,OAAA,CAAQE,KAAK,IAC7BF,OAAA,CAAQE,KAAK,GAAGzB,sBAAA,IAChBuB,OAAA,CAAQE,KAAK,GAAGxB,sBAAA,GACduB,OAAA,GACAD,OAAA;QACN;QAEA,IACE,CAACA,OAAA,CAAQE,KAAK,IACb,CAACF,OAAA,CAAQG,QAAQ,IAChBH,OAAA,CAAQE,KAAK,GAAGzB,sBAAA,IAChBwB,OAAA,CAAQC,KAAK,GAAGF,OAAA,CAAQE,KAAK,IAC9BF,OAAA,CAAQE,KAAK,GAAGxB,sBAAA,IAA0BuB,OAAA,CAAQC,KAAK,GAAGF,OAAA,CAAQE,KAAK,EACxE;UACA,OAAOD,OAAA;QACT;QAEA,OAAOD,OAAA;MACT,GACA;QAAEG,QAAA,EAAU;QAAMX,GAAA,EAAKR,OAAA,EAASQ,GAAA;QAAKU,KAAA,EAAOlB,OAAA,EAASkB;MAAM;MAG7DZ,OAAA,GAAUQ,OAAA,CAAQN,GAAG,IAAIF,OAAA;IAC3B;IAEA,oBACEc,KAAA,CAAC;MAAIC,SAAA,EAAW7B,SAAA;8BACd8B,IAAA,CAAC/B,SAAA;QACC8B,SAAA,EAAW,GAAG7B,SAAA,aAAsB;QACpC+B,cAAA,EAAgBzB,gBAAA,EAAkB0B,IAAA;QAClCC,GAAA,EAAK;UACH,GAAGzB,OAAO;UACVH;QACF;QACAS,OAAA,EAASA,OAAA;QACToB,IAAA,EAAK;QACLC,YAAA,EAAc7B,gBAAA,EAAkBO;uBAElCiB,IAAA,CAAC;QAAKD,SAAA,EAAW,GAAG7B,SAAA,YAAqB;kBAAGoC,MAAA,CAAO/B,QAAA;;;EAGzD,OAAO;IACL,oBAAOyB,IAAA,CAAAO,SAAA;gBAAGD,MAAA,CAAO/B,QAAA;;EACnB;AACF","ignoreList":[]}
@@ -8,7 +8,7 @@ import { useIntersect } from '../../../../../hooks/useIntersect.js';
8
8
  import { useConfig } from '../../../../../providers/Config/index.js';
9
9
  import { useTranslation } from '../../../../../providers/Translation/index.js';
10
10
  import { canUseDOM } from '../../../../../utilities/canUseDOM.js';
11
- import { formatDocTitle } from '../../../../../utilities/formatDocTitle.js';
11
+ import { formatDocTitle } from '../../../../../utilities/formatDocTitle/index.js';
12
12
  import { useListRelationships } from '../../../RelationshipProvider/index.js';
13
13
  import { FileCell } from '../File/index.js';
14
14
  import './index.scss';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","getTranslation","React","useEffect","useMemo","useState","useIntersect","useConfig","useTranslation","canUseDOM","formatDocTitle","useListRelationships","FileCell","baseClass","totalToShow","RelationshipCell","t0","$","cellData","cellDataFromProps","customCellProps","customCellContext","field","t1","label","relationTo","collection","t2","docs","config","getEntityConfig","collections","routes","intersectionRef","entry","t3","Symbol","for","values","setValues","documents","getRelationships","hasRequested","setHasRequested","i18n","t","isAboveViewport","boundingClientRect","top","window","innerHeight","t4","formattedValues","arrayCellData","Array","isArray","slice","length","forEach","cell","push","value","t5","api","t6","t7","t8","admin","dateFormat","t9","t10","i","relationTo_0","document","relatedCollection","collectionSlug","label_0","collectionConfig","data","fallback","fileField","type","fieldPreviewAllowed","displayPreview","undefined","previewAllowed","upload","slug","rowData","_jsxs","Fragment","children","className","ref","map","count","items"],"sources":["../../../../../../src/elements/Table/DefaultCell/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type {\n DefaultCellComponentProps,\n JoinFieldClient,\n RelationshipFieldClient,\n UploadFieldClient,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { useIntersect } from '../../../../../hooks/useIntersect.js'\nimport { useConfig } from '../../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../../providers/Translation/index.js'\nimport { canUseDOM } from '../../../../../utilities/canUseDOM.js'\nimport { formatDocTitle } from '../../../../../utilities/formatDocTitle.js'\nimport { useListRelationships } from '../../../RelationshipProvider/index.js'\nimport { FileCell } from '../File/index.js'\nimport './index.scss'\n\ntype Value = { relationTo: string; value: number | string }\nconst baseClass = 'relationship-cell'\nconst totalToShow = 3\n\nexport type RelationshipCellProps = DefaultCellComponentProps<\n JoinFieldClient | RelationshipFieldClient | UploadFieldClient\n>\n\nexport const RelationshipCell: React.FC<RelationshipCellProps> = ({\n cellData: cellDataFromProps,\n customCellProps: customCellContext,\n field,\n field: { label },\n}) => {\n // conditionally extract relationTo both both relationship and join fields\n const relationTo =\n ('relationTo' in field && field.relationTo) || ('collection' in field && field.collection)\n\n // conditionally extract docs from join fields\n const cellData = useMemo(() => {\n return 'collection' in field ? cellDataFromProps?.docs : cellDataFromProps\n }, [cellDataFromProps, field])\n\n const { config, getEntityConfig } = useConfig()\n const { collections, routes } = config\n const [intersectionRef, entry] = useIntersect()\n const [values, setValues] = useState<Value[]>([])\n const { documents, getRelationships } = useListRelationships()\n const [hasRequested, setHasRequested] = useState(false)\n const { i18n, t } = useTranslation()\n\n const isAboveViewport = canUseDOM ? entry?.boundingClientRect?.top < window.innerHeight : false\n\n useEffect(() => {\n if ((cellData || typeof cellData === 'number') && isAboveViewport && !hasRequested) {\n const formattedValues: Value[] = []\n const arrayCellData = Array.isArray(cellData) ? cellData : [cellData]\n arrayCellData\n .slice(0, arrayCellData.length < totalToShow ? arrayCellData.length : totalToShow)\n .forEach((cell) => {\n if (typeof cell === 'object' && 'relationTo' in cell && 'value' in cell) {\n formattedValues.push(cell)\n }\n if (\n (typeof cell === 'number' || typeof cell === 'string') &&\n typeof relationTo === 'string'\n ) {\n formattedValues.push({\n relationTo,\n value: cell,\n })\n }\n })\n getRelationships(formattedValues)\n setHasRequested(true)\n setValues(formattedValues)\n }\n }, [\n cellData,\n relationTo,\n collections,\n isAboveViewport,\n routes.api,\n hasRequested,\n getRelationships,\n ])\n\n useEffect(() => {\n if (hasRequested) {\n setHasRequested(false)\n }\n }, [cellData])\n\n return (\n <div className={baseClass} ref={intersectionRef}>\n {values.map(({ relationTo, value }, i) => {\n const document = documents[relationTo][value]\n const relatedCollection = getEntityConfig({\n collectionSlug: relationTo,\n })\n\n const label = formatDocTitle({\n collectionConfig: relatedCollection,\n data: document || null,\n dateFormat: config.admin.dateFormat,\n fallback: `${t('general:untitled')} - ID: ${value}`,\n i18n,\n })\n\n let fileField = null\n\n if (field.type === 'upload') {\n const fieldPreviewAllowed = 'displayPreview' in field ? field.displayPreview : undefined\n const previewAllowed =\n fieldPreviewAllowed ?? relatedCollection.upload?.displayPreview ?? true\n\n if (previewAllowed && document) {\n fileField = (\n <FileCell\n cellData={label}\n collectionConfig={relatedCollection}\n collectionSlug={relatedCollection.slug}\n customCellProps={customCellContext}\n field={field}\n rowData={document}\n />\n )\n }\n }\n\n return (\n <React.Fragment key={i}>\n {document === false && `${t('general:untitled')} - ID: ${value}`}\n {document === null && `${t('general:loading')}...`}\n {document ? fileField || label : null}\n {values.length > i + 1 && ', '}\n </React.Fragment>\n )\n })}\n {Array.isArray(cellData) &&\n cellData.length > totalToShow &&\n t('fields:itemsAndMore', { count: cellData.length - totalToShow, items: '' })}\n {values.length === 0 && t('general:noLabel', { label: getTranslation(label || '', i18n) })}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","getTranslation","React","useEffect","useMemo","useState","useIntersect","useConfig","useTranslation","canUseDOM","formatDocTitle","useListRelationships","FileCell","baseClass","totalToShow","RelationshipCell","t0","$","cellData","cellDataFromProps","customCellProps","customCellContext","field","t1","label","relationTo","collection","t2","docs","config","getEntityConfig","collections","routes","intersectionRef","entry","t3","Symbol","for","values","setValues","documents","getRelationships","hasRequested","setHasRequested","i18n","t","isAboveViewport","boundingClientRect","top","window","innerHeight","t4","formattedValues","arrayCellData","Array","isArray","slice","length","forEach","cell","push","value","t5","api","t6","t7","t8","admin","dateFormat","t9","t10","i","relationTo_0","document","relatedCollection","collectionSlug","label_0","collectionConfig","data","fallback","fileField","type","fieldPreviewAllowed","displayPreview","undefined","previewAllowed","upload","slug","rowData","_jsxs","Fragment","children","className","ref","map","count","items"],"sources":["../../../../../../src/elements/Table/DefaultCell/fields/Relationship/index.tsx"],"sourcesContent":["'use client'\nimport type {\n DefaultCellComponentProps,\n JoinFieldClient,\n RelationshipFieldClient,\n UploadFieldClient,\n} from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { useIntersect } from '../../../../../hooks/useIntersect.js'\nimport { useConfig } from '../../../../../providers/Config/index.js'\nimport { useTranslation } from '../../../../../providers/Translation/index.js'\nimport { canUseDOM } from '../../../../../utilities/canUseDOM.js'\nimport { formatDocTitle } from '../../../../../utilities/formatDocTitle/index.js'\nimport { useListRelationships } from '../../../RelationshipProvider/index.js'\nimport { FileCell } from '../File/index.js'\nimport './index.scss'\n\ntype Value = { relationTo: string; value: number | string }\nconst baseClass = 'relationship-cell'\nconst totalToShow = 3\n\nexport type RelationshipCellProps = DefaultCellComponentProps<\n JoinFieldClient | RelationshipFieldClient | UploadFieldClient\n>\n\nexport const RelationshipCell: React.FC<RelationshipCellProps> = ({\n cellData: cellDataFromProps,\n customCellProps: customCellContext,\n field,\n field: { label },\n}) => {\n // conditionally extract relationTo both both relationship and join fields\n const relationTo =\n ('relationTo' in field && field.relationTo) || ('collection' in field && field.collection)\n\n // conditionally extract docs from join fields\n const cellData = useMemo(() => {\n return 'collection' in field ? cellDataFromProps?.docs : cellDataFromProps\n }, [cellDataFromProps, field])\n\n const { config, getEntityConfig } = useConfig()\n const { collections, routes } = config\n const [intersectionRef, entry] = useIntersect()\n const [values, setValues] = useState<Value[]>([])\n const { documents, getRelationships } = useListRelationships()\n const [hasRequested, setHasRequested] = useState(false)\n const { i18n, t } = useTranslation()\n\n const isAboveViewport = canUseDOM ? entry?.boundingClientRect?.top < window.innerHeight : false\n\n useEffect(() => {\n if ((cellData || typeof cellData === 'number') && isAboveViewport && !hasRequested) {\n const formattedValues: Value[] = []\n const arrayCellData = Array.isArray(cellData) ? cellData : [cellData]\n arrayCellData\n .slice(0, arrayCellData.length < totalToShow ? arrayCellData.length : totalToShow)\n .forEach((cell) => {\n if (typeof cell === 'object' && 'relationTo' in cell && 'value' in cell) {\n formattedValues.push(cell)\n }\n if (\n (typeof cell === 'number' || typeof cell === 'string') &&\n typeof relationTo === 'string'\n ) {\n formattedValues.push({\n relationTo,\n value: cell,\n })\n }\n })\n getRelationships(formattedValues)\n setHasRequested(true)\n setValues(formattedValues)\n }\n }, [\n cellData,\n relationTo,\n collections,\n isAboveViewport,\n routes.api,\n hasRequested,\n getRelationships,\n ])\n\n useEffect(() => {\n if (hasRequested) {\n setHasRequested(false)\n }\n }, [cellData])\n\n return (\n <div className={baseClass} ref={intersectionRef}>\n {values.map(({ relationTo, value }, i) => {\n const document = documents[relationTo][value]\n const relatedCollection = getEntityConfig({\n collectionSlug: relationTo,\n })\n\n const label = formatDocTitle({\n collectionConfig: relatedCollection,\n data: document || null,\n dateFormat: config.admin.dateFormat,\n fallback: `${t('general:untitled')} - ID: ${value}`,\n i18n,\n })\n\n let fileField = null\n\n if (field.type === 'upload') {\n const fieldPreviewAllowed = 'displayPreview' in field ? field.displayPreview : undefined\n const previewAllowed =\n fieldPreviewAllowed ?? relatedCollection.upload?.displayPreview ?? true\n\n if (previewAllowed && document) {\n fileField = (\n <FileCell\n cellData={label}\n collectionConfig={relatedCollection}\n collectionSlug={relatedCollection.slug}\n customCellProps={customCellContext}\n field={field}\n rowData={document}\n />\n )\n }\n }\n\n return (\n <React.Fragment key={i}>\n {document === false && `${t('general:untitled')} - ID: ${value}`}\n {document === null && `${t('general:loading')}...`}\n {document ? fileField || label : null}\n {values.length > i + 1 && ', '}\n </React.Fragment>\n )\n })}\n {Array.isArray(cellData) &&\n cellData.length > totalToShow &&\n t('fields:itemsAndMore', { count: cellData.length - totalToShow, items: '' })}\n {values.length === 0 && t('general:noLabel', { label: getTranslation(label || '', i18n) })}\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}