@payloadcms/ui 3.0.0-beta.9 → 3.0.0-canary.f6e77b8

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 (251) hide show
  1. package/dist/elements/ArrayAction/index.d.ts +1 -0
  2. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  3. package/dist/elements/ArrayAction/index.js +3 -3
  4. package/dist/elements/ArrayAction/index.js.map +1 -1
  5. package/dist/elements/Autosave/index.d.ts.map +1 -1
  6. package/dist/elements/Autosave/index.js +15 -3
  7. package/dist/elements/Autosave/index.js.map +1 -1
  8. package/dist/elements/DocumentControls/index.js +1 -1
  9. package/dist/elements/DocumentControls/index.js.map +1 -1
  10. package/dist/elements/DocumentControls/index.scss +2 -2
  11. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  12. package/dist/elements/DocumentDrawer/DrawerContent.js +7 -7
  13. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  14. package/dist/elements/DocumentFields/index.js +1 -1
  15. package/dist/elements/DocumentFields/index.js.map +1 -1
  16. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
  17. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +3 -2
  18. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  19. package/dist/elements/DocumentHeader/Tabs/index.d.ts +2 -0
  20. package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  21. package/dist/elements/DocumentHeader/Tabs/index.js +3 -2
  22. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  23. package/dist/elements/DocumentHeader/Tabs/tabs/index.d.ts.map +1 -1
  24. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +1 -1
  25. package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
  26. package/dist/elements/DocumentHeader/index.d.ts +2 -0
  27. package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
  28. package/dist/elements/DocumentHeader/index.js +3 -2
  29. package/dist/elements/DocumentHeader/index.js.map +1 -1
  30. package/dist/elements/EditMany/index.js +2 -2
  31. package/dist/elements/EditMany/index.js.map +1 -1
  32. package/dist/elements/EditUpload/index.d.ts +12 -0
  33. package/dist/elements/EditUpload/index.d.ts.map +1 -1
  34. package/dist/elements/EditUpload/index.js +25 -25
  35. package/dist/elements/EditUpload/index.js.map +1 -1
  36. package/dist/elements/FieldSelect/index.d.ts.map +1 -1
  37. package/dist/elements/FieldSelect/index.js +4 -1
  38. package/dist/elements/FieldSelect/index.js.map +1 -1
  39. package/dist/elements/HydrateClientUser/index.d.ts +2 -2
  40. package/dist/elements/HydrateClientUser/index.d.ts.map +1 -1
  41. package/dist/elements/HydrateClientUser/index.js.map +1 -1
  42. package/dist/elements/ListControls/index.d.ts.map +1 -1
  43. package/dist/elements/ListControls/index.js +16 -3
  44. package/dist/elements/ListControls/index.js.map +1 -1
  45. package/dist/elements/PublishMany/index.js +1 -1
  46. package/dist/elements/PublishMany/index.js.map +1 -1
  47. package/dist/elements/Save/index.d.ts.map +1 -1
  48. package/dist/elements/Save/index.js +7 -1
  49. package/dist/elements/Save/index.js.map +1 -1
  50. package/dist/elements/SaveDraft/index.d.ts.map +1 -1
  51. package/dist/elements/SaveDraft/index.js +8 -5
  52. package/dist/elements/SaveDraft/index.js.map +1 -1
  53. package/dist/elements/StayLoggedIn/index.d.ts +2 -4
  54. package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
  55. package/dist/elements/StayLoggedIn/index.js +7 -6
  56. package/dist/elements/StayLoggedIn/index.js.map +1 -1
  57. package/dist/elements/StayLoggedIn/index.scss +1 -1
  58. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.d.ts.map +1 -1
  59. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js +6 -2
  60. package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js.map +1 -1
  61. package/dist/elements/Table/DefaultCell/fields/JSON/index.js +1 -1
  62. package/dist/elements/Table/DefaultCell/fields/JSON/index.js.map +1 -1
  63. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  64. package/dist/elements/Table/DefaultCell/index.js +1 -1
  65. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  66. package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
  67. package/dist/elements/TableColumns/buildColumnState.js +3 -1
  68. package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
  69. package/dist/elements/Upload/index.d.ts.map +1 -1
  70. package/dist/elements/Upload/index.js +37 -1
  71. package/dist/elements/Upload/index.js.map +1 -1
  72. package/dist/elements/Upload/index.scss +12 -1
  73. package/dist/{providers/ComponentMap/buildComponentMap/WithServerSideProps.d.ts → elements/WithServerSideProps/index.d.ts} +1 -1
  74. package/dist/elements/WithServerSideProps/index.d.ts.map +1 -0
  75. package/dist/{providers/ComponentMap/buildComponentMap/WithServerSideProps.js → elements/WithServerSideProps/index.js} +3 -3
  76. package/dist/elements/WithServerSideProps/index.js.map +1 -0
  77. package/dist/exports/elements.d.ts +3 -2
  78. package/dist/exports/elements.d.ts.map +1 -1
  79. package/dist/exports/elements.js +5 -2
  80. package/dist/exports/elements.js.map +1 -1
  81. package/dist/exports/fields.d.ts +2 -0
  82. package/dist/exports/fields.d.ts.map +1 -0
  83. package/dist/exports/fields.js +3 -0
  84. package/dist/exports/fields.js.map +1 -0
  85. package/dist/exports/providers.d.ts +2 -0
  86. package/dist/exports/providers.d.ts.map +1 -0
  87. package/dist/exports/providers.js +3 -0
  88. package/dist/exports/providers.js.map +1 -0
  89. package/dist/fields/Array/ArrayRow.d.ts +1 -0
  90. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  91. package/dist/fields/Array/ArrayRow.js +4 -3
  92. package/dist/fields/Array/ArrayRow.js.map +1 -1
  93. package/dist/fields/Array/index.d.ts +1 -2
  94. package/dist/fields/Array/index.d.ts.map +1 -1
  95. package/dist/fields/Array/index.js +4 -3
  96. package/dist/fields/Array/index.js.map +1 -1
  97. package/dist/fields/Blocks/BlockRow.d.ts +1 -0
  98. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  99. package/dist/fields/Blocks/BlockRow.js +4 -3
  100. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  101. package/dist/fields/Blocks/RowActions.d.ts +1 -0
  102. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  103. package/dist/fields/Blocks/RowActions.js +2 -1
  104. package/dist/fields/Blocks/RowActions.js.map +1 -1
  105. package/dist/fields/Blocks/index.d.ts +2 -2
  106. package/dist/fields/Blocks/index.d.ts.map +1 -1
  107. package/dist/fields/Blocks/index.js +3 -2
  108. package/dist/fields/Blocks/index.js.map +1 -1
  109. package/dist/fields/Checkbox/Input.d.ts +3 -3
  110. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  111. package/dist/fields/Checkbox/Input.js.map +1 -1
  112. package/dist/fields/Checkbox/types.d.ts +0 -2
  113. package/dist/fields/Checkbox/types.d.ts.map +1 -1
  114. package/dist/fields/Checkbox/types.js.map +1 -1
  115. package/dist/fields/Code/index.d.ts +1 -2
  116. package/dist/fields/Code/index.d.ts.map +1 -1
  117. package/dist/fields/Code/index.js.map +1 -1
  118. package/dist/fields/Collapsible/index.d.ts +0 -2
  119. package/dist/fields/Collapsible/index.d.ts.map +1 -1
  120. package/dist/fields/Collapsible/index.js +2 -2
  121. package/dist/fields/Collapsible/index.js.map +1 -1
  122. package/dist/fields/ConfirmPassword/index.js +1 -1
  123. package/dist/fields/ConfirmPassword/index.js.map +1 -1
  124. package/dist/fields/DateTime/index.d.ts +1 -2
  125. package/dist/fields/DateTime/index.d.ts.map +1 -1
  126. package/dist/fields/DateTime/index.js.map +1 -1
  127. package/dist/fields/Email/index.d.ts +1 -2
  128. package/dist/fields/Email/index.d.ts.map +1 -1
  129. package/dist/fields/Email/index.js.map +1 -1
  130. package/dist/fields/Group/index.d.ts +0 -2
  131. package/dist/fields/Group/index.d.ts.map +1 -1
  132. package/dist/fields/Group/index.js +3 -3
  133. package/dist/fields/Group/index.js.map +1 -1
  134. package/dist/fields/JSON/index.d.ts +2 -2
  135. package/dist/fields/JSON/index.d.ts.map +1 -1
  136. package/dist/fields/JSON/index.js +20 -1
  137. package/dist/fields/JSON/index.js.map +1 -1
  138. package/dist/fields/Number/index.d.ts +1 -2
  139. package/dist/fields/Number/index.d.ts.map +1 -1
  140. package/dist/fields/Number/index.js.map +1 -1
  141. package/dist/fields/Password/index.d.ts +0 -1
  142. package/dist/fields/Password/index.d.ts.map +1 -1
  143. package/dist/fields/Password/index.js.map +1 -1
  144. package/dist/fields/Point/index.d.ts +0 -2
  145. package/dist/fields/Point/index.d.ts.map +1 -1
  146. package/dist/fields/Point/index.js +2 -2
  147. package/dist/fields/Point/index.js.map +1 -1
  148. package/dist/fields/RadioGroup/index.d.ts +1 -2
  149. package/dist/fields/RadioGroup/index.d.ts.map +1 -1
  150. package/dist/fields/RadioGroup/index.js.map +1 -1
  151. package/dist/fields/Relationship/types.d.ts +1 -2
  152. package/dist/fields/Relationship/types.d.ts.map +1 -1
  153. package/dist/fields/Relationship/types.js.map +1 -1
  154. package/dist/fields/RichText/index.d.ts +0 -2
  155. package/dist/fields/RichText/index.d.ts.map +1 -1
  156. package/dist/fields/RichText/index.js.map +1 -1
  157. package/dist/fields/Select/index.d.ts +1 -2
  158. package/dist/fields/Select/index.d.ts.map +1 -1
  159. package/dist/fields/Select/index.js.map +1 -1
  160. package/dist/fields/Text/index.d.ts.map +1 -1
  161. package/dist/fields/Text/index.js +2 -1
  162. package/dist/fields/Text/index.js.map +1 -1
  163. package/dist/fields/Text/types.d.ts +1 -2
  164. package/dist/fields/Text/types.d.ts.map +1 -1
  165. package/dist/fields/Text/types.js.map +1 -1
  166. package/dist/fields/Textarea/index.d.ts.map +1 -1
  167. package/dist/fields/Textarea/index.js +2 -1
  168. package/dist/fields/Textarea/index.js.map +1 -1
  169. package/dist/fields/Textarea/types.d.ts +1 -2
  170. package/dist/fields/Textarea/types.d.ts.map +1 -1
  171. package/dist/fields/Textarea/types.js.map +1 -1
  172. package/dist/fields/Upload/types.d.ts +0 -1
  173. package/dist/fields/Upload/types.d.ts.map +1 -1
  174. package/dist/fields/Upload/types.js.map +1 -1
  175. package/dist/fields/shared/index.d.ts +4 -2
  176. package/dist/fields/shared/index.d.ts.map +1 -1
  177. package/dist/fields/shared/index.js.map +1 -1
  178. package/dist/forms/FieldPropsProvider/index.d.ts +2 -0
  179. package/dist/forms/FieldPropsProvider/index.d.ts.map +1 -1
  180. package/dist/forms/FieldPropsProvider/index.js +5 -3
  181. package/dist/forms/FieldPropsProvider/index.js.map +1 -1
  182. package/dist/forms/RenderFields/RenderField.d.ts +1 -0
  183. package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
  184. package/dist/forms/RenderFields/RenderField.js +2 -1
  185. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  186. package/dist/forms/RenderFields/index.d.ts.map +1 -1
  187. package/dist/forms/RenderFields/index.js +2 -1
  188. package/dist/forms/RenderFields/index.js.map +1 -1
  189. package/dist/forms/RowLabel/types.d.ts +2 -3
  190. package/dist/forms/RowLabel/types.d.ts.map +1 -1
  191. package/dist/forms/RowLabel/types.js +1 -4
  192. package/dist/forms/RowLabel/types.js.map +1 -1
  193. package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts +3 -5
  194. package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
  195. package/dist/forms/buildStateFromSchema/addFieldStatePromise.js +2 -1
  196. package/dist/forms/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
  197. package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts +2 -2
  198. package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts.map +1 -1
  199. package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.js.map +1 -1
  200. package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts +2 -2
  201. package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts.map +1 -1
  202. package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.js.map +1 -1
  203. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts +2 -2
  204. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts.map +1 -1
  205. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js +1 -0
  206. package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js.map +1 -1
  207. package/dist/forms/buildStateFromSchema/index.d.ts +3 -5
  208. package/dist/forms/buildStateFromSchema/index.d.ts.map +1 -1
  209. package/dist/forms/buildStateFromSchema/index.js.map +1 -1
  210. package/dist/forms/buildStateFromSchema/iterateFields.d.ts +3 -5
  211. package/dist/forms/buildStateFromSchema/iterateFields.d.ts.map +1 -1
  212. package/dist/forms/buildStateFromSchema/iterateFields.js.map +1 -1
  213. package/dist/forms/useField/index.d.ts.map +1 -1
  214. package/dist/forms/useField/index.js +3 -1
  215. package/dist/forms/useField/index.js.map +1 -1
  216. package/dist/graphics/Account/index.js +0 -9
  217. package/dist/graphics/Account/index.js.map +1 -1
  218. package/dist/providers/Auth/index.d.ts.map +1 -1
  219. package/dist/providers/Auth/index.js +2 -1
  220. package/dist/providers/Auth/index.js.map +1 -1
  221. package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts +1 -1
  222. package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts.map +1 -1
  223. package/dist/providers/ComponentMap/buildComponentMap/collections.js +16 -4
  224. package/dist/providers/ComponentMap/buildComponentMap/collections.js.map +1 -1
  225. package/dist/providers/ComponentMap/buildComponentMap/fields.d.ts.map +1 -1
  226. package/dist/providers/ComponentMap/buildComponentMap/fields.js +50 -36
  227. package/dist/providers/ComponentMap/buildComponentMap/fields.js.map +1 -1
  228. package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts +1 -1
  229. package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts.map +1 -1
  230. package/dist/providers/ComponentMap/buildComponentMap/globals.js +16 -4
  231. package/dist/providers/ComponentMap/buildComponentMap/globals.js.map +1 -1
  232. package/dist/providers/ComponentMap/buildComponentMap/index.js +1 -1
  233. package/dist/providers/ComponentMap/buildComponentMap/index.js.map +1 -1
  234. package/dist/providers/ComponentMap/buildComponentMap/types.d.ts +2 -0
  235. package/dist/providers/ComponentMap/buildComponentMap/types.d.ts.map +1 -1
  236. package/dist/providers/ComponentMap/buildComponentMap/types.js.map +1 -1
  237. package/dist/providers/ComponentMap/index.d.ts +0 -1
  238. package/dist/providers/ComponentMap/index.d.ts.map +1 -1
  239. package/dist/providers/ComponentMap/index.js +0 -1
  240. package/dist/providers/ComponentMap/index.js.map +1 -1
  241. package/dist/providers/DocumentInfo/index.js +8 -7
  242. package/dist/providers/DocumentInfo/index.js.map +1 -1
  243. package/dist/providers/EntityVisibility/index.d.ts +1 -1
  244. package/dist/providers/EntityVisibility/index.d.ts.map +1 -1
  245. package/dist/providers/EntityVisibility/index.js.map +1 -1
  246. package/dist/providers/Root/index.d.ts.map +1 -1
  247. package/dist/providers/Root/index.js +2 -1
  248. package/dist/providers/Root/index.js.map +1 -1
  249. package/package.json +32 -31
  250. package/dist/providers/ComponentMap/buildComponentMap/WithServerSideProps.d.ts.map +0 -1
  251. package/dist/providers/ComponentMap/buildComponentMap/WithServerSideProps.js.map +0 -1
@@ -5,6 +5,7 @@ export type Props = {
5
5
  duplicateRow: (current: number) => void;
6
6
  hasMaxRows: boolean;
7
7
  index: number;
8
+ isSortable?: boolean;
8
9
  moveRow: (from: number, to: number) => void;
9
10
  removeRow: (index: number) => void;
10
11
  rowCount: number;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ArrayAction/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAwFvC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ArrayAction/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAUzB,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IACrD,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,UAAU,EAAE,OAAO,CAAA;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IAC3C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAyFvC,CAAA"}
@@ -8,7 +8,7 @@ import { useTranslation } from '../../providers/Translation/index.js';
8
8
  import { PopupList } from '../Popup/index.js';
9
9
  import { Popup } from '../Popup/index.js';
10
10
  const baseClass = 'array-actions';
11
- export const ArrayAction = ({ addRow, duplicateRow, hasMaxRows, index, moveRow, removeRow, rowCount })=>{
11
+ export const ArrayAction = ({ addRow, duplicateRow, hasMaxRows, index, isSortable, moveRow, removeRow, rowCount })=>{
12
12
  const { t } = useTranslation();
13
13
  return /*#__PURE__*/ React.createElement(Popup, {
14
14
  button: /*#__PURE__*/ React.createElement(MoreIcon, null),
@@ -18,7 +18,7 @@ export const ArrayAction = ({ addRow, duplicateRow, hasMaxRows, index, moveRow,
18
18
  render: ({ close })=>{
19
19
  return /*#__PURE__*/ React.createElement(PopupList.ButtonGroup, {
20
20
  buttonSize: "small"
21
- }, index !== 0 && /*#__PURE__*/ React.createElement(PopupList.Button, {
21
+ }, isSortable && index !== 0 && /*#__PURE__*/ React.createElement(PopupList.Button, {
22
22
  className: `${baseClass}__action ${baseClass}__move-up`,
23
23
  onClick: ()=>{
24
24
  moveRow(index, index - 1);
@@ -28,7 +28,7 @@ export const ArrayAction = ({ addRow, duplicateRow, hasMaxRows, index, moveRow,
28
28
  className: `${baseClass}__action-chevron`
29
29
  }, /*#__PURE__*/ React.createElement(Chevron, {
30
30
  direction: "up"
31
- })), t('general:moveUp')), index < rowCount - 1 && /*#__PURE__*/ React.createElement(PopupList.Button, {
31
+ })), t('general:moveUp')), isSortable && index < rowCount - 1 && /*#__PURE__*/ React.createElement(PopupList.Button, {
32
32
  className: `${baseClass}__action`,
33
33
  onClick: ()=>{
34
34
  moveRow(index, index + 1);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/ArrayAction/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport { Chevron } from '../../icons/Chevron/index.js'\nimport { Copy } from '../../icons/Copy/index.js'\nimport { MoreIcon } from '../../icons/More/index.js'\nimport { Plus } from '../../icons/Plus/index.js'\nimport { X } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { Popup } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'array-actions'\n\nexport type Props = {\n addRow: (current: number, blockType?: string) => void\n duplicateRow: (current: number) => void\n hasMaxRows: boolean\n index: number\n moveRow: (from: number, to: number) => void\n removeRow: (index: number) => void\n rowCount: number\n}\n\nexport const ArrayAction: React.FC<Props> = ({\n addRow,\n duplicateRow,\n hasMaxRows,\n index,\n moveRow,\n removeRow,\n rowCount,\n}) => {\n const { t } = useTranslation()\n\n return (\n <Popup\n button={<MoreIcon />}\n buttonClassName={`${baseClass}__button`}\n className={baseClass}\n horizontalAlign=\"center\"\n render={({ close }) => {\n return (\n <PopupList.ButtonGroup buttonSize=\"small\">\n {index !== 0 && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__move-up`}\n onClick={() => {\n moveRow(index, index - 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <Chevron direction=\"up\" />\n </div>\n {t('general:moveUp')}\n </PopupList.Button>\n )}\n {index < rowCount - 1 && (\n <PopupList.Button\n className={`${baseClass}__action`}\n onClick={() => {\n moveRow(index, index + 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <Chevron />\n </div>\n {t('general:moveDown')}\n </PopupList.Button>\n )}\n {!hasMaxRows && (\n <React.Fragment>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__add`}\n onClick={() => {\n addRow(index + 1)\n close()\n }}\n >\n <Plus />\n {t('general:addBelow')}\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__duplicate`}\n onClick={() => {\n duplicateRow(index)\n close()\n }}\n >\n <Copy />\n {t('general:duplicate')}\n </PopupList.Button>\n </React.Fragment>\n )}\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__remove`}\n onClick={() => {\n removeRow(index)\n close()\n }}\n >\n <X />\n {t('general:remove')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n }}\n size=\"medium\"\n />\n )\n}\n"],"names":["React","Chevron","Copy","MoreIcon","Plus","X","useTranslation","PopupList","Popup","baseClass","ArrayAction","addRow","duplicateRow","hasMaxRows","index","moveRow","removeRow","rowCount","t","button","buttonClassName","className","horizontalAlign","render","close","ButtonGroup","buttonSize","Button","onClick","div","direction","Fragment","size"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,WAAW,QAAO;AAEzB,SAASC,OAAO,QAAQ,+BAA8B;AACtD,SAASC,IAAI,QAAQ,4BAA2B;AAChD,SAASC,QAAQ,QAAQ,4BAA2B;AACpD,SAASC,IAAI,QAAQ,4BAA2B;AAChD,SAASC,CAAC,QAAQ,yBAAwB;AAC1C,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,SAAS,QAAQ,oBAAmB;AAC7C,SAASC,KAAK,QAAQ,oBAAmB;AAGzC,MAAMC,YAAY;AAYlB,OAAO,MAAMC,cAA+B,CAAC,EAC3CC,MAAM,EACNC,YAAY,EACZC,UAAU,EACVC,KAAK,EACLC,OAAO,EACPC,SAAS,EACTC,QAAQ,EACT;IACC,MAAM,EAAEC,CAAC,EAAE,GAAGZ;IAEd,qBACE,oBAACE;QACCW,sBAAQ,oBAAChB;QACTiB,iBAAiB,CAAC,EAAEX,UAAU,QAAQ,CAAC;QACvCY,WAAWZ;QACXa,iBAAgB;QAChBC,QAAQ,CAAC,EAAEC,KAAK,EAAE;YAChB,qBACE,oBAACjB,UAAUkB,WAAW;gBAACC,YAAW;eAC/BZ,UAAU,mBACT,oBAACP,UAAUoB,MAAM;gBACfN,WAAW,CAAC,EAAEZ,UAAU,SAAS,EAAEA,UAAU,SAAS,CAAC;gBACvDmB,SAAS;oBACPb,QAAQD,OAAOA,QAAQ;oBACvBU;gBACF;6BAEA,oBAACK;gBAAIR,WAAW,CAAC,EAAEZ,UAAU,gBAAgB,CAAC;6BAC5C,oBAACR;gBAAQ6B,WAAU;iBAEpBZ,EAAE,oBAGNJ,QAAQG,WAAW,mBAClB,oBAACV,UAAUoB,MAAM;gBACfN,WAAW,CAAC,EAAEZ,UAAU,QAAQ,CAAC;gBACjCmB,SAAS;oBACPb,QAAQD,OAAOA,QAAQ;oBACvBU;gBACF;6BAEA,oBAACK;gBAAIR,WAAW,CAAC,EAAEZ,UAAU,gBAAgB,CAAC;6BAC5C,oBAACR,iBAEFiB,EAAE,sBAGN,CAACL,4BACA,oBAACb,MAAM+B,QAAQ,sBACb,oBAACxB,UAAUoB,MAAM;gBACfN,WAAW,CAAC,EAAEZ,UAAU,SAAS,EAAEA,UAAU,KAAK,CAAC;gBACnDmB,SAAS;oBACPjB,OAAOG,QAAQ;oBACfU;gBACF;6BAEA,oBAACpB,aACAc,EAAE,oCAEL,oBAACX,UAAUoB,MAAM;gBACfN,WAAW,CAAC,EAAEZ,UAAU,SAAS,EAAEA,UAAU,WAAW,CAAC;gBACzDmB,SAAS;oBACPhB,aAAaE;oBACbU;gBACF;6BAEA,oBAACtB,aACAgB,EAAE,sCAIT,oBAACX,UAAUoB,MAAM;gBACfN,WAAW,CAAC,EAAEZ,UAAU,SAAS,EAAEA,UAAU,QAAQ,CAAC;gBACtDmB,SAAS;oBACPZ,UAAUF;oBACVU;gBACF;6BAEA,oBAACnB,UACAa,EAAE;QAIX;QACAc,MAAK;;AAGX,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/ArrayAction/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport { Chevron } from '../../icons/Chevron/index.js'\nimport { Copy } from '../../icons/Copy/index.js'\nimport { MoreIcon } from '../../icons/More/index.js'\nimport { Plus } from '../../icons/Plus/index.js'\nimport { X } from '../../icons/X/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { PopupList } from '../Popup/index.js'\nimport { Popup } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'array-actions'\n\nexport type Props = {\n addRow: (current: number, blockType?: string) => void\n duplicateRow: (current: number) => void\n hasMaxRows: boolean\n index: number\n isSortable?: boolean\n moveRow: (from: number, to: number) => void\n removeRow: (index: number) => void\n rowCount: number\n}\n\nexport const ArrayAction: React.FC<Props> = ({\n addRow,\n duplicateRow,\n hasMaxRows,\n index,\n isSortable,\n moveRow,\n removeRow,\n rowCount,\n}) => {\n const { t } = useTranslation()\n\n return (\n <Popup\n button={<MoreIcon />}\n buttonClassName={`${baseClass}__button`}\n className={baseClass}\n horizontalAlign=\"center\"\n render={({ close }) => {\n return (\n <PopupList.ButtonGroup buttonSize=\"small\">\n {isSortable && index !== 0 && (\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__move-up`}\n onClick={() => {\n moveRow(index, index - 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <Chevron direction=\"up\" />\n </div>\n {t('general:moveUp')}\n </PopupList.Button>\n )}\n {isSortable && index < rowCount - 1 && (\n <PopupList.Button\n className={`${baseClass}__action`}\n onClick={() => {\n moveRow(index, index + 1)\n close()\n }}\n >\n <div className={`${baseClass}__action-chevron`}>\n <Chevron />\n </div>\n {t('general:moveDown')}\n </PopupList.Button>\n )}\n {!hasMaxRows && (\n <React.Fragment>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__add`}\n onClick={() => {\n addRow(index + 1)\n close()\n }}\n >\n <Plus />\n {t('general:addBelow')}\n </PopupList.Button>\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__duplicate`}\n onClick={() => {\n duplicateRow(index)\n close()\n }}\n >\n <Copy />\n {t('general:duplicate')}\n </PopupList.Button>\n </React.Fragment>\n )}\n <PopupList.Button\n className={`${baseClass}__action ${baseClass}__remove`}\n onClick={() => {\n removeRow(index)\n close()\n }}\n >\n <X />\n {t('general:remove')}\n </PopupList.Button>\n </PopupList.ButtonGroup>\n )\n }}\n size=\"medium\"\n />\n )\n}\n"],"names":["React","Chevron","Copy","MoreIcon","Plus","X","useTranslation","PopupList","Popup","baseClass","ArrayAction","addRow","duplicateRow","hasMaxRows","index","isSortable","moveRow","removeRow","rowCount","t","button","buttonClassName","className","horizontalAlign","render","close","ButtonGroup","buttonSize","Button","onClick","div","direction","Fragment","size"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA,OAAOA,WAAW,QAAO;AAEzB,SAASC,OAAO,QAAQ,+BAA8B;AACtD,SAASC,IAAI,QAAQ,4BAA2B;AAChD,SAASC,QAAQ,QAAQ,4BAA2B;AACpD,SAASC,IAAI,QAAQ,4BAA2B;AAChD,SAASC,CAAC,QAAQ,yBAAwB;AAC1C,SAASC,cAAc,QAAQ,uCAAsC;AACrE,SAASC,SAAS,QAAQ,oBAAmB;AAC7C,SAASC,KAAK,QAAQ,oBAAmB;AAGzC,MAAMC,YAAY;AAalB,OAAO,MAAMC,cAA+B,CAAC,EAC3CC,MAAM,EACNC,YAAY,EACZC,UAAU,EACVC,KAAK,EACLC,UAAU,EACVC,OAAO,EACPC,SAAS,EACTC,QAAQ,EACT;IACC,MAAM,EAAEC,CAAC,EAAE,GAAGb;IAEd,qBACE,oBAACE;QACCY,sBAAQ,oBAACjB;QACTkB,iBAAiB,CAAC,EAAEZ,UAAU,QAAQ,CAAC;QACvCa,WAAWb;QACXc,iBAAgB;QAChBC,QAAQ,CAAC,EAAEC,KAAK,EAAE;YAChB,qBACE,oBAAClB,UAAUmB,WAAW;gBAACC,YAAW;eAC/BZ,cAAcD,UAAU,mBACvB,oBAACP,UAAUqB,MAAM;gBACfN,WAAW,CAAC,EAAEb,UAAU,SAAS,EAAEA,UAAU,SAAS,CAAC;gBACvDoB,SAAS;oBACPb,QAAQF,OAAOA,QAAQ;oBACvBW;gBACF;6BAEA,oBAACK;gBAAIR,WAAW,CAAC,EAAEb,UAAU,gBAAgB,CAAC;6BAC5C,oBAACR;gBAAQ8B,WAAU;iBAEpBZ,EAAE,oBAGNJ,cAAcD,QAAQI,WAAW,mBAChC,oBAACX,UAAUqB,MAAM;gBACfN,WAAW,CAAC,EAAEb,UAAU,QAAQ,CAAC;gBACjCoB,SAAS;oBACPb,QAAQF,OAAOA,QAAQ;oBACvBW;gBACF;6BAEA,oBAACK;gBAAIR,WAAW,CAAC,EAAEb,UAAU,gBAAgB,CAAC;6BAC5C,oBAACR,iBAEFkB,EAAE,sBAGN,CAACN,4BACA,oBAACb,MAAMgC,QAAQ,sBACb,oBAACzB,UAAUqB,MAAM;gBACfN,WAAW,CAAC,EAAEb,UAAU,SAAS,EAAEA,UAAU,KAAK,CAAC;gBACnDoB,SAAS;oBACPlB,OAAOG,QAAQ;oBACfW;gBACF;6BAEA,oBAACrB,aACAe,EAAE,oCAEL,oBAACZ,UAAUqB,MAAM;gBACfN,WAAW,CAAC,EAAEb,UAAU,SAAS,EAAEA,UAAU,WAAW,CAAC;gBACzDoB,SAAS;oBACPjB,aAAaE;oBACbW;gBACF;6BAEA,oBAACvB,aACAiB,EAAE,sCAIT,oBAACZ,UAAUqB,MAAM;gBACfN,WAAW,CAAC,EAAEb,UAAU,SAAS,EAAEA,UAAU,QAAQ,CAAC;gBACtDoB,SAAS;oBACPZ,UAAUH;oBACVW;gBACF;6BAEA,oBAACpB,UACAc,EAAE;QAIX;QACAc,MAAK;;AAGX,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAE/E,OAAO,KAAsC,MAAM,OAAO,CAAA;AAU1D,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAkHpC,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Autosave/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAA;AAG/E,OAAO,KAAsC,MAAM,OAAO,CAAA;AAU1D,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,KAAK,GAAG;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAA;IACnC,MAAM,CAAC,EAAE,kBAAkB,CAAA;IAC3B,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;IACpB,qBAAqB,EAAE,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAuIpC,CAAA"}
@@ -1,4 +1,5 @@
1
1
  'use client';
2
+ import { useDocumentEvents } from '@payloadcms/ui/providers/DocumentEvents';
2
3
  import React, { useEffect, useRef, useState } from 'react';
3
4
  import { useAllFormFields, useFormModified } from '../../forms/Form/context.js';
4
5
  import { useDebounce } from '../../hooks/useDebounce.js';
@@ -12,6 +13,7 @@ const baseClass = 'autosave';
12
13
  export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdatedAt })=>{
13
14
  const { routes: { api }, serverURL } = useConfig();
14
15
  const { docConfig, getVersions, versions } = useDocumentInfo();
16
+ const { reportUpdate } = useDocumentEvents();
15
17
  const versionsConfig = docConfig?.versions;
16
18
  const [fields] = useAllFormFields();
17
19
  const modified = useFormModified();
@@ -43,12 +45,15 @@ export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdate
43
45
  setSaving(true);
44
46
  let url;
45
47
  let method;
48
+ let entitySlug;
46
49
  if (collection && id) {
47
- url = `${serverURL}${api}/${collection.slug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`;
50
+ entitySlug = collection.slug;
51
+ url = `${serverURL}${api}/${entitySlug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`;
48
52
  method = 'PATCH';
49
53
  }
50
54
  if (globalDoc) {
51
- url = `${serverURL}${api}/globals/${globalDoc.slug}?draft=true&autosave=true&locale=${localeRef.current}`;
55
+ entitySlug = globalDoc.slug;
56
+ url = `${serverURL}${api}/globals/${entitySlug}?draft=true&autosave=true&locale=${localeRef.current}`;
52
57
  method = 'POST';
53
58
  }
54
59
  if (url) {
@@ -68,7 +73,13 @@ export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdate
68
73
  method
69
74
  });
70
75
  if (res.status === 200) {
71
- setLastSaved(new Date().getTime());
76
+ const newDate = new Date();
77
+ setLastSaved(newDate.getTime());
78
+ reportUpdate({
79
+ id,
80
+ entitySlug,
81
+ updatedAt: newDate.toISOString()
82
+ });
72
83
  void getVersions();
73
84
  }
74
85
  }
@@ -86,6 +97,7 @@ export const Autosave = ({ id, collection, global: globalDoc, publishedDocUpdate
86
97
  api,
87
98
  collection,
88
99
  globalDoc,
100
+ reportUpdate,
89
101
  id,
90
102
  getVersions
91
103
  ]);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload/types'\n\nimport React, { useEffect, useRef, useState } from 'react'\n\nimport { useAllFormFields, useFormModified } from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDate.js'\nimport { reduceFieldsToValues } from '../../utilities/reduceFieldsToValues.js'\nimport './index.scss'\n\nconst baseClass = 'autosave'\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({\n id,\n collection,\n global: globalDoc,\n publishedDocUpdatedAt,\n}) => {\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n const { docConfig, getVersions, versions } = useDocumentInfo()\n const versionsConfig = docConfig?.versions\n\n const [fields] = useAllFormFields()\n const modified = useFormModified()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n let interval = 800\n if (versionsConfig.drafts && versionsConfig?.drafts?.autosave)\n interval = versionsConfig.drafts.autosave.interval\n\n const [saving, setSaving] = useState(false)\n const [lastSaved, setLastSaved] = useState<number>()\n const debouncedFields = useDebounce(fields, interval)\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n fieldRef.current = fields\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n // When debounced fields change, autosave\n useEffect(() => {\n const autosave = () => {\n if (modified) {\n setSaving(true)\n\n let url: string\n let method: string\n\n if (collection && id) {\n url = `${serverURL}${api}/${collection.slug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n url = `${serverURL}${api}/globals/${globalDoc.slug}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'POST'\n }\n\n if (url) {\n setTimeout(async () => {\n if (modifiedRef.current) {\n const body = {\n ...reduceFieldsToValues(fieldRef.current, true),\n _status: 'draft',\n }\n const res = await fetch(url, {\n body: JSON.stringify(body),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method,\n })\n\n if (res.status === 200) {\n setLastSaved(new Date().getTime())\n void getVersions()\n }\n }\n\n setSaving(false)\n }, 1000)\n }\n }\n }\n\n void autosave()\n }, [i18n, debouncedFields, modified, serverURL, api, collection, globalDoc, id, getVersions])\n\n useEffect(() => {\n if (versions?.docs?.[0]) {\n setLastSaved(new Date(versions.docs[0].updatedAt).getTime())\n } else if (publishedDocUpdatedAt) {\n setLastSaved(new Date(publishedDocUpdatedAt).getTime())\n }\n }, [publishedDocUpdatedAt, versions])\n\n return (\n <div className={baseClass}>\n {saving && t('general:saving')}\n {!saving && lastSaved && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastSaved, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"names":["React","useEffect","useRef","useState","useAllFormFields","useFormModified","useDebounce","useConfig","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValues","baseClass","Autosave","id","collection","global","globalDoc","publishedDocUpdatedAt","routes","api","serverURL","docConfig","getVersions","versions","versionsConfig","fields","modified","code","locale","i18n","t","interval","drafts","autosave","saving","setSaving","lastSaved","setLastSaved","debouncedFields","fieldRef","modifiedRef","localeRef","current","url","method","slug","setTimeout","body","_status","res","fetch","JSON","stringify","credentials","headers","language","status","Date","getTime","docs","updatedAt","div","className","Fragment","distance","date"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/Autosave/index.tsx"],"sourcesContent":["'use client'\n// TODO: abstract the `next/navigation` dependency out from this component\nimport type { ClientCollectionConfig, ClientGlobalConfig } from 'payload/types'\n\nimport { useDocumentEvents } from '@payloadcms/ui/providers/DocumentEvents'\nimport React, { useEffect, useRef, useState } from 'react'\n\nimport { useAllFormFields, useFormModified } from '../../forms/Form/context.js'\nimport { useDebounce } from '../../hooks/useDebounce.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatTimeToNow } from '../../utilities/formatDate.js'\nimport { reduceFieldsToValues } from '../../utilities/reduceFieldsToValues.js'\nimport './index.scss'\n\nconst baseClass = 'autosave'\n\nexport type Props = {\n collection?: ClientCollectionConfig\n global?: ClientGlobalConfig\n id?: number | string\n publishedDocUpdatedAt: string\n}\n\nexport const Autosave: React.FC<Props> = ({\n id,\n collection,\n global: globalDoc,\n publishedDocUpdatedAt,\n}) => {\n const {\n routes: { api },\n serverURL,\n } = useConfig()\n const { docConfig, getVersions, versions } = useDocumentInfo()\n const { reportUpdate } = useDocumentEvents()\n const versionsConfig = docConfig?.versions\n\n const [fields] = useAllFormFields()\n const modified = useFormModified()\n const { code: locale } = useLocale()\n const { i18n, t } = useTranslation()\n\n let interval = 800\n if (versionsConfig.drafts && versionsConfig?.drafts?.autosave)\n interval = versionsConfig.drafts.autosave.interval\n\n const [saving, setSaving] = useState(false)\n const [lastSaved, setLastSaved] = useState<number>()\n const debouncedFields = useDebounce(fields, interval)\n const fieldRef = useRef(fields)\n const modifiedRef = useRef(modified)\n const localeRef = useRef(locale)\n\n // Store fields in ref so the autosave func\n // can always retrieve the most to date copies\n // after the timeout has executed\n fieldRef.current = fields\n\n // Store modified in ref so the autosave func\n // can bail out if modified becomes false while\n // timing out during autosave\n modifiedRef.current = modified\n\n // Store locale in ref so the autosave func\n // can always retrieve the most to date locale\n localeRef.current = locale\n\n // When debounced fields change, autosave\n useEffect(() => {\n const autosave = () => {\n if (modified) {\n setSaving(true)\n\n let url: string\n let method: string\n let entitySlug: string\n\n if (collection && id) {\n entitySlug = collection.slug\n url = `${serverURL}${api}/${entitySlug}/${id}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'PATCH'\n }\n\n if (globalDoc) {\n entitySlug = globalDoc.slug\n url = `${serverURL}${api}/globals/${entitySlug}?draft=true&autosave=true&locale=${localeRef.current}`\n method = 'POST'\n }\n\n if (url) {\n setTimeout(async () => {\n if (modifiedRef.current) {\n const body = {\n ...reduceFieldsToValues(fieldRef.current, true),\n _status: 'draft',\n }\n const res = await fetch(url, {\n body: JSON.stringify(body),\n credentials: 'include',\n headers: {\n 'Accept-Language': i18n.language,\n 'Content-Type': 'application/json',\n },\n method,\n })\n\n if (res.status === 200) {\n const newDate = new Date()\n setLastSaved(newDate.getTime())\n reportUpdate({\n id,\n entitySlug,\n updatedAt: newDate.toISOString(),\n })\n void getVersions()\n }\n }\n\n setSaving(false)\n }, 1000)\n }\n }\n }\n\n void autosave()\n }, [\n i18n,\n debouncedFields,\n modified,\n serverURL,\n api,\n collection,\n globalDoc,\n reportUpdate,\n id,\n getVersions,\n ])\n\n useEffect(() => {\n if (versions?.docs?.[0]) {\n setLastSaved(new Date(versions.docs[0].updatedAt).getTime())\n } else if (publishedDocUpdatedAt) {\n setLastSaved(new Date(publishedDocUpdatedAt).getTime())\n }\n }, [publishedDocUpdatedAt, versions])\n\n return (\n <div className={baseClass}>\n {saving && t('general:saving')}\n {!saving && lastSaved && (\n <React.Fragment>\n {t('version:lastSavedAgo', {\n distance: formatTimeToNow({ date: lastSaved, i18n }),\n })}\n </React.Fragment>\n )}\n </div>\n )\n}\n"],"names":["useDocumentEvents","React","useEffect","useRef","useState","useAllFormFields","useFormModified","useDebounce","useConfig","useDocumentInfo","useLocale","useTranslation","formatTimeToNow","reduceFieldsToValues","baseClass","Autosave","id","collection","global","globalDoc","publishedDocUpdatedAt","routes","api","serverURL","docConfig","getVersions","versions","reportUpdate","versionsConfig","fields","modified","code","locale","i18n","t","interval","drafts","autosave","saving","setSaving","lastSaved","setLastSaved","debouncedFields","fieldRef","modifiedRef","localeRef","current","url","method","entitySlug","slug","setTimeout","body","_status","res","fetch","JSON","stringify","credentials","headers","language","status","newDate","Date","getTime","updatedAt","toISOString","docs","div","className","Fragment","distance","date"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -43,7 +43,7 @@ export const DocumentControls = (props)=>{
43
43
  }, /*#__PURE__*/ React.createElement("p", {
44
44
  className: `${baseClass}__value`
45
45
  }, i18n.t('general:creatingNewLabel', {
46
- label: typeof collectionConfig?.labels?.singular === 'string' ? collectionConfig.labels.singular : 'document'
46
+ label: typeof collectionConfig?.labels?.singular === 'string' ? collectionConfig.labels.singular : i18n.t('general:document')
47
47
  }))), (collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) && /*#__PURE__*/ React.createElement(Fragment, null, (globalConfig || collectionConfig && isEditing) && /*#__PURE__*/ React.createElement("li", {
48
48
  className: [
49
49
  `${baseClass}__status`,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DocumentControls/index.tsx"],"sourcesContent":["'use client'\nimport type { CollectionPermission, GlobalPermission } from 'payload/auth'\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport { useComponentMap } from '@payloadcms/ui/providers/ComponentMap'\nimport React, { Fragment } from 'react'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDate } from '../../utilities/formatDate.js'\nimport { Autosave } from '../Autosave/index.js'\nimport { DeleteDocument } from '../DeleteDocument/index.js'\nimport { DuplicateDocument } from '../DuplicateDocument/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { PreviewButton } from '../PreviewButton/index.js'\nimport { Publish } from '../Publish/index.js'\nimport { Save } from '../Save/index.js'\nimport { SaveDraft } from '../SaveDraft/index.js'\nimport { Status } from '../Status/index.js'\nimport './index.scss'\n\nconst baseClass = 'doc-controls'\n\nexport const DocumentControls: React.FC<{\n apiURL: string\n data?: any\n disableActions?: boolean\n hasSavePermission?: boolean\n id?: number | string\n isAccountView?: boolean\n isEditing?: boolean\n permissions: CollectionPermission | GlobalPermission | null\n slug: SanitizedCollectionConfig['slug']\n}> = (props) => {\n const {\n id,\n slug,\n data,\n disableActions,\n hasSavePermission,\n isAccountView,\n isEditing,\n permissions,\n } = props\n\n const { i18n } = useTranslation()\n\n const config = useConfig()\n const { getComponentMap } = useComponentMap()\n\n const collectionConfig = config.collections.find((coll) => coll.slug === slug)\n const globalConfig = config.globals.find((global) => global.slug === slug)\n\n const componentMap = getComponentMap({\n collectionSlug: collectionConfig?.slug,\n globalSlug: globalConfig?.slug,\n })\n\n const {\n admin: { dateFormat },\n routes: { admin: adminRoute },\n } = config\n\n const hasCreatePermission =\n permissions && 'create' in permissions && permissions.create?.permission\n\n const hasDeletePermission =\n permissions && 'delete' in permissions && permissions.delete?.permission\n\n const showDotMenu = Boolean(\n collectionConfig && id && !disableActions && (hasCreatePermission || hasDeletePermission),\n )\n\n return (\n <Gutter className={baseClass}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <ul className={`${baseClass}__meta`}>\n {collectionConfig && !isEditing && !isAccountView && (\n <li className={`${baseClass}__list-item`}>\n <p className={`${baseClass}__value`}>\n {i18n.t('general:creatingNewLabel', {\n label:\n typeof collectionConfig?.labels?.singular === 'string'\n ? collectionConfig.labels.singular\n : 'document',\n })}\n </p>\n </li>\n )}\n {(collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) && (\n <Fragment>\n {(globalConfig || (collectionConfig && isEditing)) && (\n <li\n className={[`${baseClass}__status`, `${baseClass}__list-item`]\n .filter(Boolean)\n .join(' ')}\n >\n <Status />\n </li>\n )}\n {((collectionConfig?.versions?.drafts &&\n collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave)) &&\n hasSavePermission && (\n <li className={`${baseClass}__list-item`}>\n <Autosave\n collection={collectionConfig}\n global={globalConfig}\n id={id}\n publishedDocUpdatedAt={data?.createdAt}\n />\n </li>\n )}\n </Fragment>\n )}\n {collectionConfig?.timestamps && (isEditing || isAccountView) && (\n <Fragment>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={\n data?.updatedAt\n ? formatDate({ date: data?.updatedAt, i18n, pattern: dateFormat })\n : ''\n }\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:lastModified')}:&nbsp;</p>\n {data?.updatedAt && (\n <p className={`${baseClass}__value`}>\n {formatDate({ date: data?.updatedAt, i18n, pattern: dateFormat })}\n </p>\n )}\n </li>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={\n data?.createdAt\n ? formatDate({ date: data?.createdAt, i18n, pattern: dateFormat })\n : ''\n }\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:created')}:&nbsp;</p>\n {data?.createdAt && (\n <p className={`${baseClass}__value`}>\n {formatDate({ date: data?.createdAt, i18n, pattern: dateFormat })}\n </p>\n )}\n </li>\n </Fragment>\n )}\n </ul>\n </div>\n <div className={`${baseClass}__controls-wrapper`}>\n <div className={`${baseClass}__controls`}>\n {componentMap?.isPreviewEnabled && (\n <PreviewButton CustomComponent={componentMap.PreviewButton} />\n )}\n {hasSavePermission && (\n <React.Fragment>\n {collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts ? (\n <React.Fragment>\n {((collectionConfig?.versions?.drafts &&\n !collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts &&\n !globalConfig?.versions?.drafts?.autosave)) && (\n <SaveDraft CustomComponent={componentMap.SaveDraftButton} />\n )}\n <Publish CustomComponent={componentMap.PublishButton} />\n </React.Fragment>\n ) : (\n <Save CustomComponent={componentMap.SaveButton} />\n )}\n </React.Fragment>\n )}\n </div>\n {showDotMenu && (\n <Popup\n button={\n <div className={`${baseClass}__dots`}>\n <div />\n <div />\n <div />\n </div>\n }\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {hasCreatePermission && (\n <React.Fragment>\n <PopupList.Button\n href={`${adminRoute}/collections/${collectionConfig?.slug}/create`}\n id=\"action-create\"\n >\n {i18n.t('general:createNew')}\n </PopupList.Button>\n {!collectionConfig.disableDuplicate && isEditing && (\n <DuplicateDocument\n id={id.toString()}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n )}\n </React.Fragment>\n )}\n {hasDeletePermission && (\n <DeleteDocument\n buttonId=\"action-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n singularLabel={collectionConfig?.labels?.singular}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n <div className={`${baseClass}__divider`} />\n </Gutter>\n )\n}\n"],"names":["useComponentMap","React","Fragment","useConfig","useTranslation","formatDate","Autosave","DeleteDocument","DuplicateDocument","Gutter","Popup","PopupList","PreviewButton","Publish","Save","SaveDraft","Status","baseClass","DocumentControls","props","id","slug","data","disableActions","hasSavePermission","isAccountView","isEditing","permissions","i18n","config","getComponentMap","collectionConfig","collections","find","coll","globalConfig","globals","global","componentMap","collectionSlug","globalSlug","admin","dateFormat","routes","adminRoute","hasCreatePermission","create","permission","hasDeletePermission","delete","showDotMenu","Boolean","className","div","ul","li","p","t","label","labels","singular","versions","drafts","filter","join","autosave","collection","publishedDocUpdatedAt","createdAt","timestamps","title","updatedAt","date","pattern","isPreviewEnabled","CustomComponent","SaveDraftButton","PublishButton","SaveButton","button","horizontalAlign","size","verticalAlign","ButtonGroup","Button","href","disableDuplicate","toString","singularLabel","buttonId","useAsTitle"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/DocumentControls/index.tsx"],"sourcesContent":["'use client'\nimport type { CollectionPermission, GlobalPermission } from 'payload/auth'\nimport type { SanitizedCollectionConfig } from 'payload/types'\n\nimport { useComponentMap } from '@payloadcms/ui/providers/ComponentMap'\nimport React, { Fragment } from 'react'\n\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { formatDate } from '../../utilities/formatDate.js'\nimport { Autosave } from '../Autosave/index.js'\nimport { DeleteDocument } from '../DeleteDocument/index.js'\nimport { DuplicateDocument } from '../DuplicateDocument/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { PreviewButton } from '../PreviewButton/index.js'\nimport { Publish } from '../Publish/index.js'\nimport { Save } from '../Save/index.js'\nimport { SaveDraft } from '../SaveDraft/index.js'\nimport { Status } from '../Status/index.js'\nimport './index.scss'\n\nconst baseClass = 'doc-controls'\n\nexport const DocumentControls: React.FC<{\n apiURL: string\n data?: any\n disableActions?: boolean\n hasSavePermission?: boolean\n id?: number | string\n isAccountView?: boolean\n isEditing?: boolean\n permissions: CollectionPermission | GlobalPermission | null\n slug: SanitizedCollectionConfig['slug']\n}> = (props) => {\n const {\n id,\n slug,\n data,\n disableActions,\n hasSavePermission,\n isAccountView,\n isEditing,\n permissions,\n } = props\n\n const { i18n } = useTranslation()\n\n const config = useConfig()\n const { getComponentMap } = useComponentMap()\n\n const collectionConfig = config.collections.find((coll) => coll.slug === slug)\n const globalConfig = config.globals.find((global) => global.slug === slug)\n\n const componentMap = getComponentMap({\n collectionSlug: collectionConfig?.slug,\n globalSlug: globalConfig?.slug,\n })\n\n const {\n admin: { dateFormat },\n routes: { admin: adminRoute },\n } = config\n\n const hasCreatePermission =\n permissions && 'create' in permissions && permissions.create?.permission\n\n const hasDeletePermission =\n permissions && 'delete' in permissions && permissions.delete?.permission\n\n const showDotMenu = Boolean(\n collectionConfig && id && !disableActions && (hasCreatePermission || hasDeletePermission),\n )\n\n return (\n <Gutter className={baseClass}>\n <div className={`${baseClass}__wrapper`}>\n <div className={`${baseClass}__content`}>\n <ul className={`${baseClass}__meta`}>\n {collectionConfig && !isEditing && !isAccountView && (\n <li className={`${baseClass}__list-item`}>\n <p className={`${baseClass}__value`}>\n {i18n.t('general:creatingNewLabel', {\n label:\n typeof collectionConfig?.labels?.singular === 'string'\n ? collectionConfig.labels.singular\n : i18n.t('general:document'),\n })}\n </p>\n </li>\n )}\n {(collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts) && (\n <Fragment>\n {(globalConfig || (collectionConfig && isEditing)) && (\n <li\n className={[`${baseClass}__status`, `${baseClass}__list-item`]\n .filter(Boolean)\n .join(' ')}\n >\n <Status />\n </li>\n )}\n {((collectionConfig?.versions?.drafts &&\n collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts && globalConfig?.versions?.drafts?.autosave)) &&\n hasSavePermission && (\n <li className={`${baseClass}__list-item`}>\n <Autosave\n collection={collectionConfig}\n global={globalConfig}\n id={id}\n publishedDocUpdatedAt={data?.createdAt}\n />\n </li>\n )}\n </Fragment>\n )}\n {collectionConfig?.timestamps && (isEditing || isAccountView) && (\n <Fragment>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={\n data?.updatedAt\n ? formatDate({ date: data?.updatedAt, i18n, pattern: dateFormat })\n : ''\n }\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:lastModified')}:&nbsp;</p>\n {data?.updatedAt && (\n <p className={`${baseClass}__value`}>\n {formatDate({ date: data?.updatedAt, i18n, pattern: dateFormat })}\n </p>\n )}\n </li>\n <li\n className={[`${baseClass}__list-item`, `${baseClass}__value-wrap`]\n .filter(Boolean)\n .join(' ')}\n title={\n data?.createdAt\n ? formatDate({ date: data?.createdAt, i18n, pattern: dateFormat })\n : ''\n }\n >\n <p className={`${baseClass}__label`}>{i18n.t('general:created')}:&nbsp;</p>\n {data?.createdAt && (\n <p className={`${baseClass}__value`}>\n {formatDate({ date: data?.createdAt, i18n, pattern: dateFormat })}\n </p>\n )}\n </li>\n </Fragment>\n )}\n </ul>\n </div>\n <div className={`${baseClass}__controls-wrapper`}>\n <div className={`${baseClass}__controls`}>\n {componentMap?.isPreviewEnabled && (\n <PreviewButton CustomComponent={componentMap.PreviewButton} />\n )}\n {hasSavePermission && (\n <React.Fragment>\n {collectionConfig?.versions?.drafts || globalConfig?.versions?.drafts ? (\n <React.Fragment>\n {((collectionConfig?.versions?.drafts &&\n !collectionConfig?.versions?.drafts?.autosave) ||\n (globalConfig?.versions?.drafts &&\n !globalConfig?.versions?.drafts?.autosave)) && (\n <SaveDraft CustomComponent={componentMap.SaveDraftButton} />\n )}\n <Publish CustomComponent={componentMap.PublishButton} />\n </React.Fragment>\n ) : (\n <Save CustomComponent={componentMap.SaveButton} />\n )}\n </React.Fragment>\n )}\n </div>\n {showDotMenu && (\n <Popup\n button={\n <div className={`${baseClass}__dots`}>\n <div />\n <div />\n <div />\n </div>\n }\n className={`${baseClass}__popup`}\n horizontalAlign=\"right\"\n size=\"large\"\n verticalAlign=\"bottom\"\n >\n <PopupList.ButtonGroup>\n {hasCreatePermission && (\n <React.Fragment>\n <PopupList.Button\n href={`${adminRoute}/collections/${collectionConfig?.slug}/create`}\n id=\"action-create\"\n >\n {i18n.t('general:createNew')}\n </PopupList.Button>\n {!collectionConfig.disableDuplicate && isEditing && (\n <DuplicateDocument\n id={id.toString()}\n singularLabel={collectionConfig?.labels?.singular}\n slug={collectionConfig?.slug}\n />\n )}\n </React.Fragment>\n )}\n {hasDeletePermission && (\n <DeleteDocument\n buttonId=\"action-delete\"\n collectionSlug={collectionConfig?.slug}\n id={id.toString()}\n singularLabel={collectionConfig?.labels?.singular}\n useAsTitle={collectionConfig?.admin?.useAsTitle}\n />\n )}\n </PopupList.ButtonGroup>\n </Popup>\n )}\n </div>\n </div>\n <div className={`${baseClass}__divider`} />\n </Gutter>\n )\n}\n"],"names":["useComponentMap","React","Fragment","useConfig","useTranslation","formatDate","Autosave","DeleteDocument","DuplicateDocument","Gutter","Popup","PopupList","PreviewButton","Publish","Save","SaveDraft","Status","baseClass","DocumentControls","props","id","slug","data","disableActions","hasSavePermission","isAccountView","isEditing","permissions","i18n","config","getComponentMap","collectionConfig","collections","find","coll","globalConfig","globals","global","componentMap","collectionSlug","globalSlug","admin","dateFormat","routes","adminRoute","hasCreatePermission","create","permission","hasDeletePermission","delete","showDotMenu","Boolean","className","div","ul","li","p","t","label","labels","singular","versions","drafts","filter","join","autosave","collection","publishedDocUpdatedAt","createdAt","timestamps","title","updatedAt","date","pattern","isPreviewEnabled","CustomComponent","SaveDraftButton","PublishButton","SaveButton","button","horizontalAlign","size","verticalAlign","ButtonGroup","Button","href","disableDuplicate","toString","singularLabel","buttonId","useAsTitle"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -5,7 +5,7 @@
5
5
  position: sticky;
6
6
  top: 0;
7
7
  width: 100%;
8
- z-index: 2;
8
+ z-index: 5;
9
9
  display: flex;
10
10
  align-items: center;
11
11
 
@@ -27,7 +27,7 @@
27
27
  align-items: center;
28
28
  gap: var(--base);
29
29
  padding-bottom: 1px;
30
- z-index: 1;
30
+ z-index: 4;
31
31
  height: var(--doc-controls-height);
32
32
  }
33
33
 
@@ -1 +1 @@
1
- {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAerD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAuG/D,CAAA"}
1
+ {"version":3,"file":"DrawerContent.d.ts","sourceRoot":"","sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"names":[],"mappings":"AAIA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAG/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAA;AAerD,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAyG/D,CAAA"}
@@ -15,23 +15,23 @@ import { Gutter } from '../Gutter/index.js';
15
15
  import { IDLabel } from '../IDLabel/index.js';
16
16
  import { RenderTitle } from '../RenderTitle/index.js';
17
17
  import { baseClass } from './index.js';
18
- export const DocumentDrawerContent = ({ id, Header, collectionSlug, drawerSlug, onSave: onSaveFromProps })=>{
18
+ export const DocumentDrawerContent = ({ id: existingDocID, Header, collectionSlug, drawerSlug, onSave: onSaveFromProps })=>{
19
19
  const { useModal } = facelessUIImport;
20
20
  const config = useConfig();
21
21
  const { routes: { api: apiRoute }, serverURL } = config;
22
22
  const { closeModal, modalState, toggleModal } = useModal();
23
23
  const locale = useLocale();
24
24
  const { t } = useTranslation();
25
- const [createdID, setCreatedID] = useState();
25
+ const [docID, setDocID] = useState(existingDocID);
26
26
  const [isOpen, setIsOpen] = useState(false);
27
27
  const [collectionConfig] = useRelatedCollections(collectionSlug);
28
28
  const { formQueryParams } = useFormQueryParams();
29
29
  const formattedQueryParams = queryString.stringify(formQueryParams);
30
30
  const { componentMap } = useComponentMap();
31
31
  const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug];
32
- const isEditing = Boolean(id);
33
- const apiURL = id ? `${serverURL}${apiRoute}/${collectionSlug}/${id}?locale=${locale.code}` : null;
34
- const action = `${serverURL}${apiRoute}/${collectionSlug}${isEditing ? `/${id}` : ''}?${formattedQueryParams}`;
32
+ const isEditing = Boolean(docID);
33
+ const apiURL = docID ? `${serverURL}${apiRoute}/${collectionSlug}/${docID}?locale=${locale.code}` : null;
34
+ const action = `${serverURL}${apiRoute}/${collectionSlug}${isEditing ? `/${docID}` : ''}?${formattedQueryParams}`;
35
35
  useEffect(()=>{
36
36
  setIsOpen(Boolean(modalState[drawerSlug]?.isOpen));
37
37
  }, [
@@ -50,7 +50,7 @@ export const DocumentDrawerContent = ({ id, Header, collectionSlug, drawerSlug,
50
50
  t
51
51
  ]);
52
52
  const onSave = useCallback((args)=>{
53
- setCreatedID(args.doc.id);
53
+ setDocID(args.doc.id);
54
54
  if (typeof onSaveFromProps === 'function') {
55
55
  void onSaveFromProps({
56
56
  ...args,
@@ -87,7 +87,7 @@ export const DocumentDrawerContent = ({ id, Header, collectionSlug, drawerSlug,
87
87
  // Same reason as above. We need to fully-fetch the docPreferences from the server. This is done in DocumentInfoProvider if we set it to null here.
88
88
  hasSavePermission: null,
89
89
  // isLoading,
90
- id: id || createdID,
90
+ id: docID,
91
91
  isEditing: isEditing,
92
92
  onLoadError: onLoadError,
93
93
  onSave: onSave
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport * as facelessUIImport from '@faceless-ui/modal'\nimport queryString from 'qs'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { DocumentDrawerProps } from './types.js'\n\nimport { useRelatedCollections } from '../../fields/Relationship/AddNew/useRelatedCollections.js'\nimport { X } from '../../icons/X/index.js'\nimport { useComponentMap } from '../../providers/ComponentMap/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider, useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { IDLabel } from '../IDLabel/index.js'\nimport { RenderTitle } from '../RenderTitle/index.js'\nimport { baseClass } from './index.js'\n\nexport const DocumentDrawerContent: React.FC<DocumentDrawerProps> = ({\n id,\n Header,\n collectionSlug,\n drawerSlug,\n onSave: onSaveFromProps,\n}) => {\n const { useModal } = facelessUIImport\n\n const config = useConfig()\n\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const { closeModal, modalState, toggleModal } = useModal()\n const locale = useLocale()\n const { t } = useTranslation()\n const [createdID, setCreatedID] = useState()\n const [isOpen, setIsOpen] = useState(false)\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const { formQueryParams } = useFormQueryParams()\n const formattedQueryParams = queryString.stringify(formQueryParams)\n\n const { componentMap } = useComponentMap()\n\n const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug]\n const isEditing = Boolean(id)\n const apiURL = id ? `${serverURL}${apiRoute}/${collectionSlug}/${id}?locale=${locale.code}` : null\n const action = `${serverURL}${apiRoute}/${collectionSlug}${\n isEditing ? `/${id}` : ''\n }?${formattedQueryParams}`\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n const onLoadError = React.useCallback(\n (data) => {\n if (isOpen) {\n closeModal(drawerSlug)\n toast.error(data.errors?.[0].message || t('error:unspecific'))\n }\n },\n [closeModal, drawerSlug, isOpen, t],\n )\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setCreatedID(args.doc.id)\n if (typeof onSaveFromProps === 'function') {\n void onSaveFromProps({\n ...args,\n collectionConfig,\n })\n }\n },\n [onSaveFromProps, collectionConfig],\n )\n\n return (\n <DocumentInfoProvider\n BeforeDocument={\n <Gutter className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <h2 className={`${baseClass}__header-text`}>\n {Header || <RenderTitle element=\"span\" />}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header-close`}\n onClick={() => toggleModal(drawerSlug)}\n type=\"button\"\n >\n <X />\n </button>\n </div>\n <DocumentTitle />\n </Gutter>\n }\n action={action}\n apiURL={apiURL}\n collectionSlug={collectionConfig.slug}\n disableActions\n disableLeaveWithoutSaving\n // Do NOT pass in the docPermissions we have here. This is because the permissions we have here do not have their where: { } returns resolved.\n // If we set it to null though, the DocumentInfoProvider will fully-fetch the permissions from the server, and the where: { } returns will be resolved.\n docPermissions={null}\n // Same reason as above. We need to fully-fetch the docPreferences from the server. This is done in DocumentInfoProvider if we set it to null here.\n hasSavePermission={null}\n // isLoading,\n id={id || createdID}\n isEditing={isEditing}\n onLoadError={onLoadError}\n onSave={onSave}\n >\n {Edit}\n </DocumentInfoProvider>\n )\n}\n\nconst DocumentTitle: React.FC = () => {\n const { id, title } = useDocumentInfo()\n return id && id !== title ? <IDLabel id={id.toString()} /> : null\n}\n"],"names":["facelessUIImport","queryString","React","useCallback","useEffect","useState","toast","useRelatedCollections","X","useComponentMap","useConfig","DocumentInfoProvider","useDocumentInfo","useFormQueryParams","useLocale","useTranslation","Gutter","IDLabel","RenderTitle","baseClass","DocumentDrawerContent","id","Header","collectionSlug","drawerSlug","onSave","onSaveFromProps","useModal","config","routes","api","apiRoute","serverURL","closeModal","modalState","toggleModal","locale","t","createdID","setCreatedID","isOpen","setIsOpen","collectionConfig","formQueryParams","formattedQueryParams","stringify","componentMap","Edit","isEditing","Boolean","apiURL","code","action","onLoadError","data","error","errors","message","args","doc","BeforeDocument","className","div","h2","element","button","aria-label","onClick","type","DocumentTitle","slug","disableActions","disableLeaveWithoutSaving","docPermissions","hasSavePermission","title","toString"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
1
+ {"version":3,"sources":["../../../src/elements/DocumentDrawer/DrawerContent.tsx"],"sourcesContent":["'use client'\n\nimport * as facelessUIImport from '@faceless-ui/modal'\nimport queryString from 'qs'\nimport React, { useCallback, useEffect, useState } from 'react'\nimport { toast } from 'react-toastify'\n\nimport type { DocumentDrawerProps } from './types.js'\n\nimport { useRelatedCollections } from '../../fields/Relationship/AddNew/useRelatedCollections.js'\nimport { X } from '../../icons/X/index.js'\nimport { useComponentMap } from '../../providers/ComponentMap/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { DocumentInfoProvider, useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useFormQueryParams } from '../../providers/FormQueryParams/index.js'\nimport { useLocale } from '../../providers/Locale/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport { IDLabel } from '../IDLabel/index.js'\nimport { RenderTitle } from '../RenderTitle/index.js'\nimport { baseClass } from './index.js'\n\nexport const DocumentDrawerContent: React.FC<DocumentDrawerProps> = ({\n id: existingDocID,\n Header,\n collectionSlug,\n drawerSlug,\n onSave: onSaveFromProps,\n}) => {\n const { useModal } = facelessUIImport\n\n const config = useConfig()\n\n const {\n routes: { api: apiRoute },\n serverURL,\n } = config\n\n const { closeModal, modalState, toggleModal } = useModal()\n const locale = useLocale()\n const { t } = useTranslation()\n const [docID, setDocID] = useState(existingDocID)\n const [isOpen, setIsOpen] = useState(false)\n const [collectionConfig] = useRelatedCollections(collectionSlug)\n const { formQueryParams } = useFormQueryParams()\n const formattedQueryParams = queryString.stringify(formQueryParams)\n\n const { componentMap } = useComponentMap()\n\n const { Edit } = componentMap[`${collectionSlug ? 'collections' : 'globals'}`][collectionSlug]\n const isEditing = Boolean(docID)\n const apiURL = docID\n ? `${serverURL}${apiRoute}/${collectionSlug}/${docID}?locale=${locale.code}`\n : null\n const action = `${serverURL}${apiRoute}/${collectionSlug}${\n isEditing ? `/${docID}` : ''\n }?${formattedQueryParams}`\n\n useEffect(() => {\n setIsOpen(Boolean(modalState[drawerSlug]?.isOpen))\n }, [modalState, drawerSlug])\n\n const onLoadError = React.useCallback(\n (data) => {\n if (isOpen) {\n closeModal(drawerSlug)\n toast.error(data.errors?.[0].message || t('error:unspecific'))\n }\n },\n [closeModal, drawerSlug, isOpen, t],\n )\n\n const onSave = useCallback<DocumentDrawerProps['onSave']>(\n (args) => {\n setDocID(args.doc.id)\n if (typeof onSaveFromProps === 'function') {\n void onSaveFromProps({\n ...args,\n collectionConfig,\n })\n }\n },\n [onSaveFromProps, collectionConfig],\n )\n\n return (\n <DocumentInfoProvider\n BeforeDocument={\n <Gutter className={`${baseClass}__header`}>\n <div className={`${baseClass}__header-content`}>\n <h2 className={`${baseClass}__header-text`}>\n {Header || <RenderTitle element=\"span\" />}\n </h2>\n {/* TODO: the `button` HTML element breaks CSS transitions on the drawer for some reason...\n i.e. changing to a `div` element will fix the animation issue but will break accessibility\n */}\n <button\n aria-label={t('general:close')}\n className={`${baseClass}__header-close`}\n onClick={() => toggleModal(drawerSlug)}\n type=\"button\"\n >\n <X />\n </button>\n </div>\n <DocumentTitle />\n </Gutter>\n }\n action={action}\n apiURL={apiURL}\n collectionSlug={collectionConfig.slug}\n disableActions\n disableLeaveWithoutSaving\n // Do NOT pass in the docPermissions we have here. This is because the permissions we have here do not have their where: { } returns resolved.\n // If we set it to null though, the DocumentInfoProvider will fully-fetch the permissions from the server, and the where: { } returns will be resolved.\n docPermissions={null}\n // Same reason as above. We need to fully-fetch the docPreferences from the server. This is done in DocumentInfoProvider if we set it to null here.\n hasSavePermission={null}\n // isLoading,\n id={docID}\n isEditing={isEditing}\n onLoadError={onLoadError}\n onSave={onSave}\n >\n {Edit}\n </DocumentInfoProvider>\n )\n}\n\nconst DocumentTitle: React.FC = () => {\n const { id, title } = useDocumentInfo()\n return id && id !== title ? <IDLabel id={id.toString()} /> : null\n}\n"],"names":["facelessUIImport","queryString","React","useCallback","useEffect","useState","toast","useRelatedCollections","X","useComponentMap","useConfig","DocumentInfoProvider","useDocumentInfo","useFormQueryParams","useLocale","useTranslation","Gutter","IDLabel","RenderTitle","baseClass","DocumentDrawerContent","id","existingDocID","Header","collectionSlug","drawerSlug","onSave","onSaveFromProps","useModal","config","routes","api","apiRoute","serverURL","closeModal","modalState","toggleModal","locale","t","docID","setDocID","isOpen","setIsOpen","collectionConfig","formQueryParams","formattedQueryParams","stringify","componentMap","Edit","isEditing","Boolean","apiURL","code","action","onLoadError","data","error","errors","message","args","doc","BeforeDocument","className","div","h2","element","button","aria-label","onClick","type","DocumentTitle","slug","disableActions","disableLeaveWithoutSaving","docPermissions","hasSavePermission","title","toString"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"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"}
@@ -25,7 +25,7 @@ export const DocumentFields = ({ AfterFields, BeforeFields, description, docPerm
25
25
  className: `${baseClass}__fields`,
26
26
  fieldMap: mainFields,
27
27
  path: "",
28
- permissions: docPermissions?.['fields'],
28
+ permissions: docPermissions?.fields,
29
29
  readOnly: readOnly,
30
30
  schemaPath: schemaPath
31
31
  }), AfterFields)), hasSidebarFields && /*#__PURE__*/ React.createElement("div", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/elements/DocumentFields/index.tsx"],"sourcesContent":["'use client'\nimport type { Description, DocumentPermissions } from 'payload/types'\n\nimport React from 'react'\n\nimport type { FieldMap } from '../../providers/ComponentMap/buildComponentMap/types.js'\n\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport './index.scss'\n\nconst baseClass = 'document-fields'\n\ntype Args = {\n AfterFields?: React.ReactNode\n BeforeFields?: React.ReactNode\n description?: Description\n docPermissions: DocumentPermissions\n fieldMap: FieldMap\n forceSidebarWrap?: boolean\n readOnly: boolean\n schemaPath: string\n}\n\nexport const DocumentFields: React.FC<Args> = ({\n AfterFields,\n BeforeFields,\n description,\n docPermissions,\n fieldMap,\n forceSidebarWrap,\n readOnly,\n schemaPath,\n}) => {\n const mainFields = fieldMap.filter(({ isSidebar }) => !isSidebar)\n\n const sidebarFields = fieldMap.filter(({ isSidebar }) => isSidebar)\n\n const hasSidebarFields = sidebarFields && sidebarFields.length > 0\n\n return (\n <React.Fragment>\n <div\n className={[\n baseClass,\n hasSidebarFields ? `${baseClass}--has-sidebar` : `${baseClass}--no-sidebar`,\n forceSidebarWrap && `${baseClass}--force-sidebar-wrap`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${baseClass}__main`}>\n <Gutter className={`${baseClass}__edit`}>\n <header className={`${baseClass}__header`}>\n {description && (\n <div className={`${baseClass}__sub-header`}>\n {/* <ViewDescription description={description} /> */}\n </div>\n )}\n </header>\n {BeforeFields}\n <RenderFields\n className={`${baseClass}__fields`}\n fieldMap={mainFields}\n path=\"\"\n permissions={docPermissions?.['fields']}\n readOnly={readOnly}\n schemaPath={schemaPath}\n />\n {AfterFields}\n </Gutter>\n </div>\n {hasSidebarFields && (\n <div className={`${baseClass}__sidebar-wrap`}>\n <div className={`${baseClass}__sidebar`}>\n <div className={`${baseClass}__sidebar-fields`}>\n <RenderFields\n fieldMap={sidebarFields}\n path=\"\"\n permissions={docPermissions?.fields}\n readOnly={readOnly}\n schemaPath={schemaPath}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n </React.Fragment>\n )\n}\n"],"names":["React","RenderFields","Gutter","baseClass","DocumentFields","AfterFields","BeforeFields","description","docPermissions","fieldMap","forceSidebarWrap","readOnly","schemaPath","mainFields","filter","isSidebar","sidebarFields","hasSidebarFields","length","Fragment","div","className","Boolean","join","header","path","permissions","fields"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAGA,OAAOA,WAAW,QAAO;AAIzB,SAASC,YAAY,QAAQ,oCAAmC;AAChE,SAASC,MAAM,QAAQ,qBAAoB;AAG3C,MAAMC,YAAY;AAalB,OAAO,MAAMC,iBAAiC,CAAC,EAC7CC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,cAAc,EACdC,QAAQ,EACRC,gBAAgB,EAChBC,QAAQ,EACRC,UAAU,EACX;IACC,MAAMC,aAAaJ,SAASK,MAAM,CAAC,CAAC,EAAEC,SAAS,EAAE,GAAK,CAACA;IAEvD,MAAMC,gBAAgBP,SAASK,MAAM,CAAC,CAAC,EAAEC,SAAS,EAAE,GAAKA;IAEzD,MAAME,mBAAmBD,iBAAiBA,cAAcE,MAAM,GAAG;IAEjE,qBACE,oBAAClB,MAAMmB,QAAQ,sBACb,oBAACC;QACCC,WAAW;YACTlB;YACAc,mBAAmB,CAAC,EAAEd,UAAU,aAAa,CAAC,GAAG,CAAC,EAAEA,UAAU,YAAY,CAAC;YAC3EO,oBAAoB,CAAC,EAAEP,UAAU,oBAAoB,CAAC;SACvD,CACEW,MAAM,CAACQ,SACPC,IAAI,CAAC;qBAER,oBAACH;QAAIC,WAAW,CAAC,EAAElB,UAAU,MAAM,CAAC;qBAClC,oBAACD;QAAOmB,WAAW,CAAC,EAAElB,UAAU,MAAM,CAAC;qBACrC,oBAACqB;QAAOH,WAAW,CAAC,EAAElB,UAAU,QAAQ,CAAC;OACtCI,6BACC,oBAACa;QAAIC,WAAW,CAAC,EAAElB,UAAU,YAAY,CAAC;SAK7CG,4BACD,oBAACL;QACCoB,WAAW,CAAC,EAAElB,UAAU,QAAQ,CAAC;QACjCM,UAAUI;QACVY,MAAK;QACLC,aAAalB,gBAAgB,CAAC,SAAS;QACvCG,UAAUA;QACVC,YAAYA;QAEbP,eAGJY,kCACC,oBAACG;QAAIC,WAAW,CAAC,EAAElB,UAAU,cAAc,CAAC;qBAC1C,oBAACiB;QAAIC,WAAW,CAAC,EAAElB,UAAU,SAAS,CAAC;qBACrC,oBAACiB;QAAIC,WAAW,CAAC,EAAElB,UAAU,gBAAgB,CAAC;qBAC5C,oBAACF;QACCQ,UAAUO;QACVS,MAAK;QACLC,aAAalB,gBAAgBmB;QAC7BhB,UAAUA;QACVC,YAAYA;;AAS9B,EAAC"}
1
+ {"version":3,"sources":["../../../src/elements/DocumentFields/index.tsx"],"sourcesContent":["'use client'\nimport type { Description, DocumentPermissions } from 'payload/types'\n\nimport React from 'react'\n\nimport type { FieldMap } from '../../providers/ComponentMap/buildComponentMap/types.js'\n\nimport { RenderFields } from '../../forms/RenderFields/index.js'\nimport { Gutter } from '../Gutter/index.js'\nimport './index.scss'\n\nconst baseClass = 'document-fields'\n\ntype Args = {\n AfterFields?: React.ReactNode\n BeforeFields?: React.ReactNode\n description?: Description\n docPermissions: DocumentPermissions\n fieldMap: FieldMap\n forceSidebarWrap?: boolean\n readOnly: boolean\n schemaPath: string\n}\n\nexport const DocumentFields: React.FC<Args> = ({\n AfterFields,\n BeforeFields,\n description,\n docPermissions,\n fieldMap,\n forceSidebarWrap,\n readOnly,\n schemaPath,\n}) => {\n const mainFields = fieldMap.filter(({ isSidebar }) => !isSidebar)\n\n const sidebarFields = fieldMap.filter(({ isSidebar }) => isSidebar)\n\n const hasSidebarFields = sidebarFields && sidebarFields.length > 0\n\n return (\n <React.Fragment>\n <div\n className={[\n baseClass,\n hasSidebarFields ? `${baseClass}--has-sidebar` : `${baseClass}--no-sidebar`,\n forceSidebarWrap && `${baseClass}--force-sidebar-wrap`,\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div className={`${baseClass}__main`}>\n <Gutter className={`${baseClass}__edit`}>\n <header className={`${baseClass}__header`}>\n {description && (\n <div className={`${baseClass}__sub-header`}>\n {/* <ViewDescription description={description} /> */}\n </div>\n )}\n </header>\n {BeforeFields}\n <RenderFields\n className={`${baseClass}__fields`}\n fieldMap={mainFields}\n path=\"\"\n permissions={docPermissions?.fields}\n readOnly={readOnly}\n schemaPath={schemaPath}\n />\n {AfterFields}\n </Gutter>\n </div>\n {hasSidebarFields && (\n <div className={`${baseClass}__sidebar-wrap`}>\n <div className={`${baseClass}__sidebar`}>\n <div className={`${baseClass}__sidebar-fields`}>\n <RenderFields\n fieldMap={sidebarFields}\n path=\"\"\n permissions={docPermissions?.fields}\n readOnly={readOnly}\n schemaPath={schemaPath}\n />\n </div>\n </div>\n </div>\n )}\n </div>\n </React.Fragment>\n )\n}\n"],"names":["React","RenderFields","Gutter","baseClass","DocumentFields","AfterFields","BeforeFields","description","docPermissions","fieldMap","forceSidebarWrap","readOnly","schemaPath","mainFields","filter","isSidebar","sidebarFields","hasSidebarFields","length","Fragment","div","className","Boolean","join","header","path","permissions","fields"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAAA;AAGA,OAAOA,WAAW,QAAO;AAIzB,SAASC,YAAY,QAAQ,oCAAmC;AAChE,SAASC,MAAM,QAAQ,qBAAoB;AAG3C,MAAMC,YAAY;AAalB,OAAO,MAAMC,iBAAiC,CAAC,EAC7CC,WAAW,EACXC,YAAY,EACZC,WAAW,EACXC,cAAc,EACdC,QAAQ,EACRC,gBAAgB,EAChBC,QAAQ,EACRC,UAAU,EACX;IACC,MAAMC,aAAaJ,SAASK,MAAM,CAAC,CAAC,EAAEC,SAAS,EAAE,GAAK,CAACA;IAEvD,MAAMC,gBAAgBP,SAASK,MAAM,CAAC,CAAC,EAAEC,SAAS,EAAE,GAAKA;IAEzD,MAAME,mBAAmBD,iBAAiBA,cAAcE,MAAM,GAAG;IAEjE,qBACE,oBAAClB,MAAMmB,QAAQ,sBACb,oBAACC;QACCC,WAAW;YACTlB;YACAc,mBAAmB,CAAC,EAAEd,UAAU,aAAa,CAAC,GAAG,CAAC,EAAEA,UAAU,YAAY,CAAC;YAC3EO,oBAAoB,CAAC,EAAEP,UAAU,oBAAoB,CAAC;SACvD,CACEW,MAAM,CAACQ,SACPC,IAAI,CAAC;qBAER,oBAACH;QAAIC,WAAW,CAAC,EAAElB,UAAU,MAAM,CAAC;qBAClC,oBAACD;QAAOmB,WAAW,CAAC,EAAElB,UAAU,MAAM,CAAC;qBACrC,oBAACqB;QAAOH,WAAW,CAAC,EAAElB,UAAU,QAAQ,CAAC;OACtCI,6BACC,oBAACa;QAAIC,WAAW,CAAC,EAAElB,UAAU,YAAY,CAAC;SAK7CG,4BACD,oBAACL;QACCoB,WAAW,CAAC,EAAElB,UAAU,QAAQ,CAAC;QACjCM,UAAUI;QACVY,MAAK;QACLC,aAAalB,gBAAgBmB;QAC7BhB,UAAUA;QACVC,YAAYA;QAEbP,eAGJY,kCACC,oBAACG;QAAIC,WAAW,CAAC,EAAElB,UAAU,cAAc,CAAC;qBAC1C,oBAACiB;QAAIC,WAAW,CAAC,EAAElB,UAAU,SAAS,CAAC;qBACrC,oBAACiB;QAAIC,WAAW,CAAC,EAAElB,UAAU,gBAAgB,CAAC;qBAC5C,oBAACF;QACCQ,UAAUO;QACVS,MAAK;QACLC,aAAalB,gBAAgBmB;QAC7BhB,UAAUA;QACVC,YAAYA;;AAS9B,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/DocumentHeader/Tabs/Tab/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAExE,OAAO,KAAmB,MAAM,OAAO,CAAA;AAGvC,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,YAAY,CAAA;AAElC,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,GAAG,iBAAiB,CAsEtE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/DocumentHeader/Tabs/Tab/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAExE,OAAO,KAAmB,MAAM,OAAO,CAAA;AAGvC,OAAO,cAAc,CAAA;AAErB,eAAO,MAAM,SAAS,YAAY,CAAA;AAElC,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,GAAG,iBAAiB,CAwEtE,CAAA"}
@@ -2,7 +2,7 @@ import React, { Fragment } from 'react';
2
2
  import { DocumentTabLink } from './TabLink.js';
3
3
  export const baseClass = 'doc-tab';
4
4
  export const DocumentTab = (props)=>{
5
- const { Pill, apiURL, collectionConfig, condition, config, globalConfig, href: tabHref, i18n, isActive: tabIsActive, label, newTab } = props;
5
+ const { Pill, apiURL, collectionConfig, condition, config, globalConfig, href: tabHref, i18n, isActive: tabIsActive, label, newTab, permissions } = props;
6
6
  const { routes } = config;
7
7
  let href = typeof tabHref === 'string' ? tabHref : '';
8
8
  let isActive = typeof tabIsActive === 'boolean' ? tabIsActive : false;
@@ -22,7 +22,8 @@ export const DocumentTab = (props)=>{
22
22
  const meetsCondition = !condition || condition && Boolean(condition({
23
23
  collectionConfig,
24
24
  config,
25
- globalConfig
25
+ globalConfig,
26
+ permissions
26
27
  }));
27
28
  if (meetsCondition) {
28
29
  const labelToRender = typeof label === 'function' ? label({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/elements/DocumentHeader/Tabs/Tab/index.tsx"],"sourcesContent":["import type { DocumentTabConfig, DocumentTabProps } from 'payload/types'\n\nimport React, { Fragment } from 'react'\n\nimport { DocumentTabLink } from './TabLink.js'\nimport './index.scss'\n\nexport const baseClass = 'doc-tab'\n\nexport const DocumentTab: React.FC<DocumentTabProps & DocumentTabConfig> = (props) => {\n const {\n Pill,\n apiURL,\n collectionConfig,\n condition,\n config,\n globalConfig,\n href: tabHref,\n i18n,\n isActive: tabIsActive,\n label,\n newTab,\n } = props\n\n const { routes } = config\n\n let href = typeof tabHref === 'string' ? tabHref : ''\n let isActive = typeof tabIsActive === 'boolean' ? tabIsActive : false\n\n if (typeof tabHref === 'function') {\n href = tabHref({\n apiURL,\n collection: collectionConfig,\n global: globalConfig,\n routes,\n })\n }\n\n if (typeof tabIsActive === 'function') {\n isActive = tabIsActive({\n href,\n })\n }\n\n const meetsCondition =\n !condition || (condition && Boolean(condition({ collectionConfig, config, globalConfig })))\n\n if (meetsCondition) {\n const labelToRender =\n typeof label === 'function'\n ? label({\n t: i18n.t,\n })\n : label\n\n return (\n <DocumentTabLink\n adminRoute={routes.admin}\n ariaLabel={labelToRender}\n baseClass={baseClass}\n href={href}\n isActive={isActive}\n isCollection={!!collectionConfig && !globalConfig}\n newTab={newTab}\n >\n <span className={`${baseClass}__label`}>\n {labelToRender}\n {Pill && (\n <Fragment>\n &nbsp;\n <Pill />\n </Fragment>\n )}\n </span>\n </DocumentTabLink>\n )\n }\n\n return null\n}\n"],"names":["React","Fragment","DocumentTabLink","baseClass","DocumentTab","props","Pill","apiURL","collectionConfig","condition","config","globalConfig","href","tabHref","i18n","isActive","tabIsActive","label","newTab","routes","collection","global","meetsCondition","Boolean","labelToRender","t","adminRoute","admin","ariaLabel","isCollection","span","className"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAOA,SAASC,QAAQ,QAAQ,QAAO;AAEvC,SAASC,eAAe,QAAQ,eAAc;AAG9C,OAAO,MAAMC,YAAY,UAAS;AAElC,OAAO,MAAMC,cAA8D,CAACC;IAC1E,MAAM,EACJC,IAAI,EACJC,MAAM,EACNC,gBAAgB,EAChBC,SAAS,EACTC,MAAM,EACNC,YAAY,EACZC,MAAMC,OAAO,EACbC,IAAI,EACJC,UAAUC,WAAW,EACrBC,KAAK,EACLC,MAAM,EACP,GAAGb;IAEJ,MAAM,EAAEc,MAAM,EAAE,GAAGT;IAEnB,IAAIE,OAAO,OAAOC,YAAY,WAAWA,UAAU;IACnD,IAAIE,WAAW,OAAOC,gBAAgB,YAAYA,cAAc;IAEhE,IAAI,OAAOH,YAAY,YAAY;QACjCD,OAAOC,QAAQ;YACbN;YACAa,YAAYZ;YACZa,QAAQV;YACRQ;QACF;IACF;IAEA,IAAI,OAAOH,gBAAgB,YAAY;QACrCD,WAAWC,YAAY;YACrBJ;QACF;IACF;IAEA,MAAMU,iBACJ,CAACb,aAAcA,aAAac,QAAQd,UAAU;QAAED;QAAkBE;QAAQC;IAAa;IAEzF,IAAIW,gBAAgB;QAClB,MAAME,gBACJ,OAAOP,UAAU,aACbA,MAAM;YACJQ,GAAGX,KAAKW,CAAC;QACX,KACAR;QAEN,qBACE,oBAACf;YACCwB,YAAYP,OAAOQ,KAAK;YACxBC,WAAWJ;YACXrB,WAAWA;YACXS,MAAMA;YACNG,UAAUA;YACVc,cAAc,CAAC,CAACrB,oBAAoB,CAACG;YACrCO,QAAQA;yBAER,oBAACY;YAAKC,WAAW,CAAC,EAAE5B,UAAU,OAAO,CAAC;WACnCqB,eACAlB,sBACC,oBAACL,gBAAS,mBAER,oBAACK;IAMb;IAEA,OAAO;AACT,EAAC"}
1
+ {"version":3,"sources":["../../../../../src/elements/DocumentHeader/Tabs/Tab/index.tsx"],"sourcesContent":["import type { DocumentTabConfig, DocumentTabProps } from 'payload/types'\n\nimport React, { Fragment } from 'react'\n\nimport { DocumentTabLink } from './TabLink.js'\nimport './index.scss'\n\nexport const baseClass = 'doc-tab'\n\nexport const DocumentTab: React.FC<DocumentTabProps & DocumentTabConfig> = (props) => {\n const {\n Pill,\n apiURL,\n collectionConfig,\n condition,\n config,\n globalConfig,\n href: tabHref,\n i18n,\n isActive: tabIsActive,\n label,\n newTab,\n permissions,\n } = props\n\n const { routes } = config\n\n let href = typeof tabHref === 'string' ? tabHref : ''\n let isActive = typeof tabIsActive === 'boolean' ? tabIsActive : false\n\n if (typeof tabHref === 'function') {\n href = tabHref({\n apiURL,\n collection: collectionConfig,\n global: globalConfig,\n routes,\n })\n }\n\n if (typeof tabIsActive === 'function') {\n isActive = tabIsActive({\n href,\n })\n }\n\n const meetsCondition =\n !condition ||\n (condition && Boolean(condition({ collectionConfig, config, globalConfig, permissions })))\n\n if (meetsCondition) {\n const labelToRender =\n typeof label === 'function'\n ? label({\n t: i18n.t,\n })\n : label\n\n return (\n <DocumentTabLink\n adminRoute={routes.admin}\n ariaLabel={labelToRender}\n baseClass={baseClass}\n href={href}\n isActive={isActive}\n isCollection={!!collectionConfig && !globalConfig}\n newTab={newTab}\n >\n <span className={`${baseClass}__label`}>\n {labelToRender}\n {Pill && (\n <Fragment>\n &nbsp;\n <Pill />\n </Fragment>\n )}\n </span>\n </DocumentTabLink>\n )\n }\n\n return null\n}\n"],"names":["React","Fragment","DocumentTabLink","baseClass","DocumentTab","props","Pill","apiURL","collectionConfig","condition","config","globalConfig","href","tabHref","i18n","isActive","tabIsActive","label","newTab","permissions","routes","collection","global","meetsCondition","Boolean","labelToRender","t","adminRoute","admin","ariaLabel","isCollection","span","className"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAEA,OAAOA,SAASC,QAAQ,QAAQ,QAAO;AAEvC,SAASC,eAAe,QAAQ,eAAc;AAG9C,OAAO,MAAMC,YAAY,UAAS;AAElC,OAAO,MAAMC,cAA8D,CAACC;IAC1E,MAAM,EACJC,IAAI,EACJC,MAAM,EACNC,gBAAgB,EAChBC,SAAS,EACTC,MAAM,EACNC,YAAY,EACZC,MAAMC,OAAO,EACbC,IAAI,EACJC,UAAUC,WAAW,EACrBC,KAAK,EACLC,MAAM,EACNC,WAAW,EACZ,GAAGd;IAEJ,MAAM,EAAEe,MAAM,EAAE,GAAGV;IAEnB,IAAIE,OAAO,OAAOC,YAAY,WAAWA,UAAU;IACnD,IAAIE,WAAW,OAAOC,gBAAgB,YAAYA,cAAc;IAEhE,IAAI,OAAOH,YAAY,YAAY;QACjCD,OAAOC,QAAQ;YACbN;YACAc,YAAYb;YACZc,QAAQX;YACRS;QACF;IACF;IAEA,IAAI,OAAOJ,gBAAgB,YAAY;QACrCD,WAAWC,YAAY;YACrBJ;QACF;IACF;IAEA,MAAMW,iBACJ,CAACd,aACAA,aAAae,QAAQf,UAAU;QAAED;QAAkBE;QAAQC;QAAcQ;IAAY;IAExF,IAAII,gBAAgB;QAClB,MAAME,gBACJ,OAAOR,UAAU,aACbA,MAAM;YACJS,GAAGZ,KAAKY,CAAC;QACX,KACAT;QAEN,qBACE,oBAACf;YACCyB,YAAYP,OAAOQ,KAAK;YACxBC,WAAWJ;YACXtB,WAAWA;YACXS,MAAMA;YACNG,UAAUA;YACVe,cAAc,CAAC,CAACtB,oBAAoB,CAACG;YACrCO,QAAQA;yBAER,oBAACa;YAAKC,WAAW,CAAC,EAAE7B,UAAU,OAAO,CAAC;WACnCsB,eACAnB,sBACC,oBAACL,gBAAS,mBAER,oBAACK;IAMb;IAEA,OAAO;AACT,EAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { I18n } from '@payloadcms/translations';
2
+ import type { Permissions } from 'payload/auth';
2
3
  import type { SanitizedCollectionConfig, SanitizedConfig, SanitizedGlobalConfig } from 'payload/types';
3
4
  import React from 'react';
4
5
  import './index.scss';
@@ -7,5 +8,6 @@ export declare const DocumentTabs: React.FC<{
7
8
  config: SanitizedConfig;
8
9
  globalConfig: SanitizedGlobalConfig;
9
10
  i18n: I18n;
11
+ permissions: Permissions;
10
12
  }>;
11
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DocumentHeader/Tabs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EACV,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACtB,MAAM,eAAe,CAAA;AAGtB,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,qBAAqB,CAAA;IACnC,IAAI,EAAE,IAAI,CAAA;CACX,CA6EA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elements/DocumentHeader/Tabs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,KAAK,EACV,yBAAyB,EACzB,eAAe,EACf,qBAAqB,EACtB,MAAM,eAAe,CAAA;AAGtB,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,OAAO,cAAc,CAAA;AAKrB,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC;IAClC,gBAAgB,EAAE,yBAAyB,CAAA;IAC3C,MAAM,EAAE,eAAe,CAAA;IACvB,YAAY,EAAE,qBAAqB,CAAA;IACnC,IAAI,EAAE,IAAI,CAAA;IACV,WAAW,EAAE,WAAW,CAAA;CACzB,CA8EA,CAAA"}
@@ -7,7 +7,7 @@ import { getViewConfig } from './getViewConfig.js';
7
7
  import { tabs as defaultTabs } from './tabs/index.js';
8
8
  const baseClass = 'doc-tabs';
9
9
  export const DocumentTabs = (props)=>{
10
- const { collectionConfig, config, globalConfig } = props;
10
+ const { collectionConfig, config, globalConfig, permissions } = props;
11
11
  const customViews = getCustomViews({
12
12
  collectionConfig,
13
13
  globalConfig
@@ -35,7 +35,8 @@ export const DocumentTabs = (props)=>{
35
35
  const meetsCondition = !condition || condition && Boolean(condition({
36
36
  collectionConfig,
37
37
  config,
38
- globalConfig
38
+ globalConfig,
39
+ permissions
39
40
  }));
40
41
  if (meetsCondition) {
41
42
  return /*#__PURE__*/ React.createElement(DocumentTab, {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/elements/DocumentHeader/Tabs/index.tsx"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type {\n SanitizedCollectionConfig,\n SanitizedConfig,\n SanitizedGlobalConfig,\n} from 'payload/types'\n\nimport { isPlainObject } from 'payload/utilities'\nimport React from 'react'\n\nimport { ShouldRenderTabs } from './ShouldRenderTabs.js'\nimport { DocumentTab } from './Tab/index.js'\nimport { getCustomViews } from './getCustomViews.js'\nimport { getViewConfig } from './getViewConfig.js'\nimport './index.scss'\nimport { tabs as defaultTabs } from './tabs/index.js'\n\nconst baseClass = 'doc-tabs'\n\nexport const DocumentTabs: React.FC<{\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n globalConfig: SanitizedGlobalConfig\n i18n: I18n\n}> = (props) => {\n const { collectionConfig, config, globalConfig } = props\n\n const customViews = getCustomViews({ collectionConfig, globalConfig })\n\n return (\n <ShouldRenderTabs>\n <div className={baseClass}>\n <div className={`${baseClass}__tabs-container`}>\n <ul className={`${baseClass}__tabs`}>\n {Object.entries(defaultTabs)\n // sort `defaultViews` based on `order` property from smallest to largest\n // if no `order`, append the view to the end\n // TODO: open `order` to the config and merge `defaultViews` with `customViews`\n ?.sort(([, a], [, b]) => {\n if (a.order === undefined && b.order === undefined) return 0\n else if (a.order === undefined) return 1\n else if (b.order === undefined) return -1\n return a.order - b.order\n })\n ?.map(([name, tab], index) => {\n const viewConfig = getViewConfig({ name, collectionConfig, globalConfig })\n const tabFromConfig = viewConfig && 'Tab' in viewConfig ? viewConfig.Tab : undefined\n const tabConfig = typeof tabFromConfig === 'object' ? tabFromConfig : undefined\n\n const { condition } = tabConfig || {}\n\n const meetsCondition =\n !condition ||\n (condition && Boolean(condition({ collectionConfig, config, globalConfig })))\n\n if (meetsCondition) {\n return (\n <DocumentTab\n key={`tab-${index}`}\n {...{\n ...props,\n ...(tab || {}),\n ...(tabFromConfig || {}),\n }}\n />\n )\n }\n\n return null\n })}\n {customViews?.map((CustomView, index) => {\n if ('Tab' in CustomView) {\n const { Tab, path } = CustomView\n\n if (typeof Tab === 'object' && !isPlainObject(Tab)) {\n throw new Error(\n `Custom 'Tab' Component for path: \"${path}\" must be a React Server Component. To use client-side functionality, render your Client Component within a Server Component and pass it only props that are serializable. More info: https://react.dev/reference/react/use-server#serializable-parameters-and-return-values`,\n )\n }\n\n if (typeof Tab === 'function') {\n return <Tab path={path} {...props} key={`tab-custom-${index}`} />\n }\n\n return (\n <DocumentTab\n key={`tab-custom-${index}`}\n {...{\n ...props,\n ...Tab,\n }}\n />\n )\n }\n return null\n })}\n </ul>\n </div>\n </div>\n </ShouldRenderTabs>\n )\n}\n"],"names":["isPlainObject","React","ShouldRenderTabs","DocumentTab","getCustomViews","getViewConfig","tabs","defaultTabs","baseClass","DocumentTabs","props","collectionConfig","config","globalConfig","customViews","div","className","ul","Object","entries","sort","a","b","order","undefined","map","name","tab","index","viewConfig","tabFromConfig","Tab","tabConfig","condition","meetsCondition","Boolean","key","CustomView","path","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAOA,SAASA,aAAa,QAAQ,oBAAmB;AACjD,OAAOC,WAAW,QAAO;AAEzB,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,WAAW,QAAQ,iBAAgB;AAC5C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,aAAa,QAAQ,qBAAoB;AAElD,SAASC,QAAQC,WAAW,QAAQ,kBAAiB;AAErD,MAAMC,YAAY;AAElB,OAAO,MAAMC,eAKR,CAACC;IACJ,MAAM,EAAEC,gBAAgB,EAAEC,MAAM,EAAEC,YAAY,EAAE,GAAGH;IAEnD,MAAMI,cAAcV,eAAe;QAAEO;QAAkBE;IAAa;IAEpE,qBACE,oBAACX,sCACC,oBAACa;QAAIC,WAAWR;qBACd,oBAACO;QAAIC,WAAW,CAAC,EAAER,UAAU,gBAAgB,CAAC;qBAC5C,oBAACS;QAAGD,WAAW,CAAC,EAAER,UAAU,MAAM,CAAC;OAChCU,OAAOC,OAAO,CAACZ,cAIZa,KAAK,CAAC,GAAGC,EAAE,EAAE,GAAGC,EAAE;QAClB,IAAID,EAAEE,KAAK,KAAKC,aAAaF,EAAEC,KAAK,KAAKC,WAAW,OAAO;aACtD,IAAIH,EAAEE,KAAK,KAAKC,WAAW,OAAO;aAClC,IAAIF,EAAEC,KAAK,KAAKC,WAAW,OAAO,CAAC;QACxC,OAAOH,EAAEE,KAAK,GAAGD,EAAEC,KAAK;IAC1B,IACEE,IAAI,CAAC,CAACC,MAAMC,IAAI,EAAEC;QAClB,MAAMC,aAAaxB,cAAc;YAAEqB;YAAMf;YAAkBE;QAAa;QACxE,MAAMiB,gBAAgBD,cAAc,SAASA,aAAaA,WAAWE,GAAG,GAAGP;QAC3E,MAAMQ,YAAY,OAAOF,kBAAkB,WAAWA,gBAAgBN;QAEtE,MAAM,EAAES,SAAS,EAAE,GAAGD,aAAa,CAAC;QAEpC,MAAME,iBACJ,CAACD,aACAA,aAAaE,QAAQF,UAAU;YAAEtB;YAAkBC;YAAQC;QAAa;QAE3E,IAAIqB,gBAAgB;YAClB,qBACE,oBAAC/B;gBACCiC,KAAK,CAAC,IAAI,EAAER,MAAM,CAAC;gBAEjB,GAAGlB,KAAK;gBACR,GAAIiB,OAAO,CAAC,CAAC;gBACb,GAAIG,iBAAiB,CAAC,CAAC;;QAI/B;QAEA,OAAO;IACT,IACDhB,aAAaW,IAAI,CAACY,YAAYT;QAC7B,IAAI,SAASS,YAAY;YACvB,MAAM,EAAEN,GAAG,EAAEO,IAAI,EAAE,GAAGD;YAEtB,IAAI,OAAON,QAAQ,YAAY,CAAC/B,cAAc+B,MAAM;gBAClD,MAAM,IAAIQ,MACR,CAAC,kCAAkC,EAAED,KAAK,4QAA4Q,CAAC;YAE3T;YAEA,IAAI,OAAOP,QAAQ,YAAY;gBAC7B,qBAAO,oBAACA;oBAAIO,MAAMA;oBAAO,GAAG5B,KAAK;oBAAE0B,KAAK,CAAC,WAAW,EAAER,MAAM,CAAC;;YAC/D;YAEA,qBACE,oBAACzB;gBACCiC,KAAK,CAAC,WAAW,EAAER,MAAM,CAAC;gBAExB,GAAGlB,KAAK;gBACR,GAAGqB,GAAG;;QAId;QACA,OAAO;IACT;AAMZ,EAAC"}
1
+ {"version":3,"sources":["../../../../src/elements/DocumentHeader/Tabs/index.tsx"],"sourcesContent":["import type { I18n } from '@payloadcms/translations'\nimport type { Permissions } from 'payload/auth'\nimport type {\n SanitizedCollectionConfig,\n SanitizedConfig,\n SanitizedGlobalConfig,\n} from 'payload/types'\n\nimport { isPlainObject } from 'payload/utilities'\nimport React from 'react'\n\nimport { ShouldRenderTabs } from './ShouldRenderTabs.js'\nimport { DocumentTab } from './Tab/index.js'\nimport { getCustomViews } from './getCustomViews.js'\nimport { getViewConfig } from './getViewConfig.js'\nimport './index.scss'\nimport { tabs as defaultTabs } from './tabs/index.js'\n\nconst baseClass = 'doc-tabs'\n\nexport const DocumentTabs: React.FC<{\n collectionConfig: SanitizedCollectionConfig\n config: SanitizedConfig\n globalConfig: SanitizedGlobalConfig\n i18n: I18n\n permissions: Permissions\n}> = (props) => {\n const { collectionConfig, config, globalConfig, permissions } = props\n\n const customViews = getCustomViews({ collectionConfig, globalConfig })\n\n return (\n <ShouldRenderTabs>\n <div className={baseClass}>\n <div className={`${baseClass}__tabs-container`}>\n <ul className={`${baseClass}__tabs`}>\n {Object.entries(defaultTabs)\n // sort `defaultViews` based on `order` property from smallest to largest\n // if no `order`, append the view to the end\n // TODO: open `order` to the config and merge `defaultViews` with `customViews`\n ?.sort(([, a], [, b]) => {\n if (a.order === undefined && b.order === undefined) return 0\n else if (a.order === undefined) return 1\n else if (b.order === undefined) return -1\n return a.order - b.order\n })\n ?.map(([name, tab], index) => {\n const viewConfig = getViewConfig({ name, collectionConfig, globalConfig })\n const tabFromConfig = viewConfig && 'Tab' in viewConfig ? viewConfig.Tab : undefined\n const tabConfig = typeof tabFromConfig === 'object' ? tabFromConfig : undefined\n\n const { condition } = tabConfig || {}\n\n const meetsCondition =\n !condition ||\n (condition &&\n Boolean(condition({ collectionConfig, config, globalConfig, permissions })))\n\n if (meetsCondition) {\n return (\n <DocumentTab\n key={`tab-${index}`}\n {...{\n ...props,\n ...(tab || {}),\n ...(tabFromConfig || {}),\n }}\n />\n )\n }\n\n return null\n })}\n {customViews?.map((CustomView, index) => {\n if ('Tab' in CustomView) {\n const { Tab, path } = CustomView\n\n if (typeof Tab === 'object' && !isPlainObject(Tab)) {\n throw new Error(\n `Custom 'Tab' Component for path: \"${path}\" must be a React Server Component. To use client-side functionality, render your Client Component within a Server Component and pass it only props that are serializable. More info: https://react.dev/reference/react/use-server#serializable-parameters-and-return-values`,\n )\n }\n\n if (typeof Tab === 'function') {\n return <Tab path={path} {...props} key={`tab-custom-${index}`} />\n }\n\n return (\n <DocumentTab\n key={`tab-custom-${index}`}\n {...{\n ...props,\n ...Tab,\n }}\n />\n )\n }\n return null\n })}\n </ul>\n </div>\n </div>\n </ShouldRenderTabs>\n )\n}\n"],"names":["isPlainObject","React","ShouldRenderTabs","DocumentTab","getCustomViews","getViewConfig","tabs","defaultTabs","baseClass","DocumentTabs","props","collectionConfig","config","globalConfig","permissions","customViews","div","className","ul","Object","entries","sort","a","b","order","undefined","map","name","tab","index","viewConfig","tabFromConfig","Tab","tabConfig","condition","meetsCondition","Boolean","key","CustomView","path","Error"],"rangeMappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","mappings":"AAQA,SAASA,aAAa,QAAQ,oBAAmB;AACjD,OAAOC,WAAW,QAAO;AAEzB,SAASC,gBAAgB,QAAQ,wBAAuB;AACxD,SAASC,WAAW,QAAQ,iBAAgB;AAC5C,SAASC,cAAc,QAAQ,sBAAqB;AACpD,SAASC,aAAa,QAAQ,qBAAoB;AAElD,SAASC,QAAQC,WAAW,QAAQ,kBAAiB;AAErD,MAAMC,YAAY;AAElB,OAAO,MAAMC,eAMR,CAACC;IACJ,MAAM,EAAEC,gBAAgB,EAAEC,MAAM,EAAEC,YAAY,EAAEC,WAAW,EAAE,GAAGJ;IAEhE,MAAMK,cAAcX,eAAe;QAAEO;QAAkBE;IAAa;IAEpE,qBACE,oBAACX,sCACC,oBAACc;QAAIC,WAAWT;qBACd,oBAACQ;QAAIC,WAAW,CAAC,EAAET,UAAU,gBAAgB,CAAC;qBAC5C,oBAACU;QAAGD,WAAW,CAAC,EAAET,UAAU,MAAM,CAAC;OAChCW,OAAOC,OAAO,CAACb,cAIZc,KAAK,CAAC,GAAGC,EAAE,EAAE,GAAGC,EAAE;QAClB,IAAID,EAAEE,KAAK,KAAKC,aAAaF,EAAEC,KAAK,KAAKC,WAAW,OAAO;aACtD,IAAIH,EAAEE,KAAK,KAAKC,WAAW,OAAO;aAClC,IAAIF,EAAEC,KAAK,KAAKC,WAAW,OAAO,CAAC;QACxC,OAAOH,EAAEE,KAAK,GAAGD,EAAEC,KAAK;IAC1B,IACEE,IAAI,CAAC,CAACC,MAAMC,IAAI,EAAEC;QAClB,MAAMC,aAAazB,cAAc;YAAEsB;YAAMhB;YAAkBE;QAAa;QACxE,MAAMkB,gBAAgBD,cAAc,SAASA,aAAaA,WAAWE,GAAG,GAAGP;QAC3E,MAAMQ,YAAY,OAAOF,kBAAkB,WAAWA,gBAAgBN;QAEtE,MAAM,EAAES,SAAS,EAAE,GAAGD,aAAa,CAAC;QAEpC,MAAME,iBACJ,CAACD,aACAA,aACCE,QAAQF,UAAU;YAAEvB;YAAkBC;YAAQC;YAAcC;QAAY;QAE5E,IAAIqB,gBAAgB;YAClB,qBACE,oBAAChC;gBACCkC,KAAK,CAAC,IAAI,EAAER,MAAM,CAAC;gBAEjB,GAAGnB,KAAK;gBACR,GAAIkB,OAAO,CAAC,CAAC;gBACb,GAAIG,iBAAiB,CAAC,CAAC;;QAI/B;QAEA,OAAO;IACT,IACDhB,aAAaW,IAAI,CAACY,YAAYT;QAC7B,IAAI,SAASS,YAAY;YACvB,MAAM,EAAEN,GAAG,EAAEO,IAAI,EAAE,GAAGD;YAEtB,IAAI,OAAON,QAAQ,YAAY,CAAChC,cAAcgC,MAAM;gBAClD,MAAM,IAAIQ,MACR,CAAC,kCAAkC,EAAED,KAAK,4QAA4Q,CAAC;YAE3T;YAEA,IAAI,OAAOP,QAAQ,YAAY;gBAC7B,qBAAO,oBAACA;oBAAIO,MAAMA;oBAAO,GAAG7B,KAAK;oBAAE2B,KAAK,CAAC,WAAW,EAAER,MAAM,CAAC;;YAC/D;YAEA,qBACE,oBAAC1B;gBACCkC,KAAK,CAAC,WAAW,EAAER,MAAM,CAAC;gBAExB,GAAGnB,KAAK;gBACR,GAAGsB,GAAG;;QAId;QACA,OAAO;IACT;AAMZ,EAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/DocumentHeader/Tabs/tabs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAItD,eAAO,MAAM,gBAAgB,UAQ5B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,eAAO,MAAM,IAAI,EAAE,MAAM,CACvB,eAAe,EACf,iBAAiB,GAAG;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAwDF,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/elements/DocumentHeader/Tabs/tabs/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAA;AAItD,eAAO,MAAM,gBAAgB,UAQ5B,CAAA;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAA;AAE/D,eAAO,MAAM,IAAI,EAAE,MAAM,CACvB,eAAe,EACf,iBAAiB,GAAG;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CA6DF,CAAA"}
@@ -47,7 +47,7 @@ export const tabs = {
47
47
  },
48
48
  Versions: {
49
49
  Pill: VersionsPill,
50
- condition: ({ collectionConfig, globalConfig })=>Boolean(collectionConfig?.versions || globalConfig?.versions),
50
+ condition: ({ collectionConfig, globalConfig, permissions })=>Boolean(collectionConfig?.versions && permissions?.collections?.[collectionConfig?.slug]?.readVersions?.permission || globalConfig?.versions && permissions?.globals?.[globalConfig?.slug]?.readVersions?.permission),
51
51
  href: '/versions',
52
52
  label: ({ t })=>t('version:versions'),
53
53
  order: 200