@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.
- package/dist/elements/ArrayAction/index.d.ts +1 -0
- package/dist/elements/ArrayAction/index.d.ts.map +1 -1
- package/dist/elements/ArrayAction/index.js +3 -3
- package/dist/elements/ArrayAction/index.js.map +1 -1
- package/dist/elements/Autosave/index.d.ts.map +1 -1
- package/dist/elements/Autosave/index.js +15 -3
- package/dist/elements/Autosave/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.js +1 -1
- package/dist/elements/DocumentControls/index.js.map +1 -1
- package/dist/elements/DocumentControls/index.scss +2 -2
- package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
- package/dist/elements/DocumentDrawer/DrawerContent.js +7 -7
- package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
- package/dist/elements/DocumentFields/index.js +1 -1
- package/dist/elements/DocumentFields/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js +3 -2
- package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.d.ts +2 -0
- package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/index.js +3 -2
- package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/tabs/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js +1 -1
- package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
- package/dist/elements/DocumentHeader/index.d.ts +2 -0
- package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
- package/dist/elements/DocumentHeader/index.js +3 -2
- package/dist/elements/DocumentHeader/index.js.map +1 -1
- package/dist/elements/EditMany/index.js +2 -2
- package/dist/elements/EditMany/index.js.map +1 -1
- package/dist/elements/EditUpload/index.d.ts +12 -0
- package/dist/elements/EditUpload/index.d.ts.map +1 -1
- package/dist/elements/EditUpload/index.js +25 -25
- package/dist/elements/EditUpload/index.js.map +1 -1
- package/dist/elements/FieldSelect/index.d.ts.map +1 -1
- package/dist/elements/FieldSelect/index.js +4 -1
- package/dist/elements/FieldSelect/index.js.map +1 -1
- package/dist/elements/HydrateClientUser/index.d.ts +2 -2
- package/dist/elements/HydrateClientUser/index.d.ts.map +1 -1
- package/dist/elements/HydrateClientUser/index.js.map +1 -1
- package/dist/elements/ListControls/index.d.ts.map +1 -1
- package/dist/elements/ListControls/index.js +16 -3
- package/dist/elements/ListControls/index.js.map +1 -1
- package/dist/elements/PublishMany/index.js +1 -1
- package/dist/elements/PublishMany/index.js.map +1 -1
- package/dist/elements/Save/index.d.ts.map +1 -1
- package/dist/elements/Save/index.js +7 -1
- package/dist/elements/Save/index.js.map +1 -1
- package/dist/elements/SaveDraft/index.d.ts.map +1 -1
- package/dist/elements/SaveDraft/index.js +8 -5
- package/dist/elements/SaveDraft/index.js.map +1 -1
- package/dist/elements/StayLoggedIn/index.d.ts +2 -4
- package/dist/elements/StayLoggedIn/index.d.ts.map +1 -1
- package/dist/elements/StayLoggedIn/index.js +7 -6
- package/dist/elements/StayLoggedIn/index.js.map +1 -1
- package/dist/elements/StayLoggedIn/index.scss +1 -1
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js +6 -2
- package/dist/elements/Table/DefaultCell/fields/Checkbox/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/fields/JSON/index.js +1 -1
- package/dist/elements/Table/DefaultCell/fields/JSON/index.js.map +1 -1
- package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
- package/dist/elements/Table/DefaultCell/index.js +1 -1
- package/dist/elements/Table/DefaultCell/index.js.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.d.ts.map +1 -1
- package/dist/elements/TableColumns/buildColumnState.js +3 -1
- package/dist/elements/TableColumns/buildColumnState.js.map +1 -1
- package/dist/elements/Upload/index.d.ts.map +1 -1
- package/dist/elements/Upload/index.js +37 -1
- package/dist/elements/Upload/index.js.map +1 -1
- package/dist/elements/Upload/index.scss +12 -1
- package/dist/{providers/ComponentMap/buildComponentMap/WithServerSideProps.d.ts → elements/WithServerSideProps/index.d.ts} +1 -1
- package/dist/elements/WithServerSideProps/index.d.ts.map +1 -0
- package/dist/{providers/ComponentMap/buildComponentMap/WithServerSideProps.js → elements/WithServerSideProps/index.js} +3 -3
- package/dist/elements/WithServerSideProps/index.js.map +1 -0
- package/dist/exports/elements.d.ts +3 -2
- package/dist/exports/elements.d.ts.map +1 -1
- package/dist/exports/elements.js +5 -2
- package/dist/exports/elements.js.map +1 -1
- package/dist/exports/fields.d.ts +2 -0
- package/dist/exports/fields.d.ts.map +1 -0
- package/dist/exports/fields.js +3 -0
- package/dist/exports/fields.js.map +1 -0
- package/dist/exports/providers.d.ts +2 -0
- package/dist/exports/providers.d.ts.map +1 -0
- package/dist/exports/providers.js +3 -0
- package/dist/exports/providers.js.map +1 -0
- package/dist/fields/Array/ArrayRow.d.ts +1 -0
- package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
- package/dist/fields/Array/ArrayRow.js +4 -3
- package/dist/fields/Array/ArrayRow.js.map +1 -1
- package/dist/fields/Array/index.d.ts +1 -2
- package/dist/fields/Array/index.d.ts.map +1 -1
- package/dist/fields/Array/index.js +4 -3
- package/dist/fields/Array/index.js.map +1 -1
- package/dist/fields/Blocks/BlockRow.d.ts +1 -0
- package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
- package/dist/fields/Blocks/BlockRow.js +4 -3
- package/dist/fields/Blocks/BlockRow.js.map +1 -1
- package/dist/fields/Blocks/RowActions.d.ts +1 -0
- package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
- package/dist/fields/Blocks/RowActions.js +2 -1
- package/dist/fields/Blocks/RowActions.js.map +1 -1
- package/dist/fields/Blocks/index.d.ts +2 -2
- package/dist/fields/Blocks/index.d.ts.map +1 -1
- package/dist/fields/Blocks/index.js +3 -2
- package/dist/fields/Blocks/index.js.map +1 -1
- package/dist/fields/Checkbox/Input.d.ts +3 -3
- package/dist/fields/Checkbox/Input.d.ts.map +1 -1
- package/dist/fields/Checkbox/Input.js.map +1 -1
- package/dist/fields/Checkbox/types.d.ts +0 -2
- package/dist/fields/Checkbox/types.d.ts.map +1 -1
- package/dist/fields/Checkbox/types.js.map +1 -1
- package/dist/fields/Code/index.d.ts +1 -2
- package/dist/fields/Code/index.d.ts.map +1 -1
- package/dist/fields/Code/index.js.map +1 -1
- package/dist/fields/Collapsible/index.d.ts +0 -2
- package/dist/fields/Collapsible/index.d.ts.map +1 -1
- package/dist/fields/Collapsible/index.js +2 -2
- package/dist/fields/Collapsible/index.js.map +1 -1
- package/dist/fields/ConfirmPassword/index.js +1 -1
- package/dist/fields/ConfirmPassword/index.js.map +1 -1
- package/dist/fields/DateTime/index.d.ts +1 -2
- package/dist/fields/DateTime/index.d.ts.map +1 -1
- package/dist/fields/DateTime/index.js.map +1 -1
- package/dist/fields/Email/index.d.ts +1 -2
- package/dist/fields/Email/index.d.ts.map +1 -1
- package/dist/fields/Email/index.js.map +1 -1
- package/dist/fields/Group/index.d.ts +0 -2
- package/dist/fields/Group/index.d.ts.map +1 -1
- package/dist/fields/Group/index.js +3 -3
- package/dist/fields/Group/index.js.map +1 -1
- package/dist/fields/JSON/index.d.ts +2 -2
- package/dist/fields/JSON/index.d.ts.map +1 -1
- package/dist/fields/JSON/index.js +20 -1
- package/dist/fields/JSON/index.js.map +1 -1
- package/dist/fields/Number/index.d.ts +1 -2
- package/dist/fields/Number/index.d.ts.map +1 -1
- package/dist/fields/Number/index.js.map +1 -1
- package/dist/fields/Password/index.d.ts +0 -1
- package/dist/fields/Password/index.d.ts.map +1 -1
- package/dist/fields/Password/index.js.map +1 -1
- package/dist/fields/Point/index.d.ts +0 -2
- package/dist/fields/Point/index.d.ts.map +1 -1
- package/dist/fields/Point/index.js +2 -2
- package/dist/fields/Point/index.js.map +1 -1
- package/dist/fields/RadioGroup/index.d.ts +1 -2
- package/dist/fields/RadioGroup/index.d.ts.map +1 -1
- package/dist/fields/RadioGroup/index.js.map +1 -1
- package/dist/fields/Relationship/types.d.ts +1 -2
- package/dist/fields/Relationship/types.d.ts.map +1 -1
- package/dist/fields/Relationship/types.js.map +1 -1
- package/dist/fields/RichText/index.d.ts +0 -2
- package/dist/fields/RichText/index.d.ts.map +1 -1
- package/dist/fields/RichText/index.js.map +1 -1
- package/dist/fields/Select/index.d.ts +1 -2
- package/dist/fields/Select/index.d.ts.map +1 -1
- package/dist/fields/Select/index.js.map +1 -1
- package/dist/fields/Text/index.d.ts.map +1 -1
- package/dist/fields/Text/index.js +2 -1
- package/dist/fields/Text/index.js.map +1 -1
- package/dist/fields/Text/types.d.ts +1 -2
- package/dist/fields/Text/types.d.ts.map +1 -1
- package/dist/fields/Text/types.js.map +1 -1
- package/dist/fields/Textarea/index.d.ts.map +1 -1
- package/dist/fields/Textarea/index.js +2 -1
- package/dist/fields/Textarea/index.js.map +1 -1
- package/dist/fields/Textarea/types.d.ts +1 -2
- package/dist/fields/Textarea/types.d.ts.map +1 -1
- package/dist/fields/Textarea/types.js.map +1 -1
- package/dist/fields/Upload/types.d.ts +0 -1
- package/dist/fields/Upload/types.d.ts.map +1 -1
- package/dist/fields/Upload/types.js.map +1 -1
- package/dist/fields/shared/index.d.ts +4 -2
- package/dist/fields/shared/index.d.ts.map +1 -1
- package/dist/fields/shared/index.js.map +1 -1
- package/dist/forms/FieldPropsProvider/index.d.ts +2 -0
- package/dist/forms/FieldPropsProvider/index.d.ts.map +1 -1
- package/dist/forms/FieldPropsProvider/index.js +5 -3
- package/dist/forms/FieldPropsProvider/index.js.map +1 -1
- package/dist/forms/RenderFields/RenderField.d.ts +1 -0
- package/dist/forms/RenderFields/RenderField.d.ts.map +1 -1
- package/dist/forms/RenderFields/RenderField.js +2 -1
- package/dist/forms/RenderFields/RenderField.js.map +1 -1
- package/dist/forms/RenderFields/index.d.ts.map +1 -1
- package/dist/forms/RenderFields/index.js +2 -1
- package/dist/forms/RenderFields/index.js.map +1 -1
- package/dist/forms/RowLabel/types.d.ts +2 -3
- package/dist/forms/RowLabel/types.d.ts.map +1 -1
- package/dist/forms/RowLabel/types.js +1 -4
- package/dist/forms/RowLabel/types.js.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts +3 -5
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js +2 -1
- package/dist/forms/buildStateFromSchema/addFieldStatePromise.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts +2 -2
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/index.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts +2 -2
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/iterateFields.js.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts +2 -2
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js +1 -0
- package/dist/forms/buildStateFromSchema/calculateDefaultValues/promise.js.map +1 -1
- package/dist/forms/buildStateFromSchema/index.d.ts +3 -5
- package/dist/forms/buildStateFromSchema/index.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/index.js.map +1 -1
- package/dist/forms/buildStateFromSchema/iterateFields.d.ts +3 -5
- package/dist/forms/buildStateFromSchema/iterateFields.d.ts.map +1 -1
- package/dist/forms/buildStateFromSchema/iterateFields.js.map +1 -1
- package/dist/forms/useField/index.d.ts.map +1 -1
- package/dist/forms/useField/index.js +3 -1
- package/dist/forms/useField/index.js.map +1 -1
- package/dist/graphics/Account/index.js +0 -9
- package/dist/graphics/Account/index.js.map +1 -1
- package/dist/providers/Auth/index.d.ts.map +1 -1
- package/dist/providers/Auth/index.js +2 -1
- package/dist/providers/Auth/index.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/collections.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/collections.js +16 -4
- package/dist/providers/ComponentMap/buildComponentMap/collections.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/fields.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/fields.js +50 -36
- package/dist/providers/ComponentMap/buildComponentMap/fields.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/globals.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/globals.js +16 -4
- package/dist/providers/ComponentMap/buildComponentMap/globals.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/index.js +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/index.js.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/types.d.ts +2 -0
- package/dist/providers/ComponentMap/buildComponentMap/types.d.ts.map +1 -1
- package/dist/providers/ComponentMap/buildComponentMap/types.js.map +1 -1
- package/dist/providers/ComponentMap/index.d.ts +0 -1
- package/dist/providers/ComponentMap/index.d.ts.map +1 -1
- package/dist/providers/ComponentMap/index.js +0 -1
- package/dist/providers/ComponentMap/index.js.map +1 -1
- package/dist/providers/DocumentInfo/index.js +8 -7
- package/dist/providers/DocumentInfo/index.js.map +1 -1
- package/dist/providers/EntityVisibility/index.d.ts +1 -1
- package/dist/providers/EntityVisibility/index.d.ts.map +1 -1
- package/dist/providers/EntityVisibility/index.js.map +1 -1
- package/dist/providers/Root/index.d.ts.map +1 -1
- package/dist/providers/Root/index.js +2 -1
- package/dist/providers/Root/index.js.map +1 -1
- package/package.json +32 -31
- package/dist/providers/ComponentMap/buildComponentMap/WithServerSideProps.d.ts.map +0 -1
- package/dist/providers/ComponentMap/buildComponentMap/WithServerSideProps.js.map +0 -1
|
@@ -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,
|
|
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;
|
|
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;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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}/${
|
|
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')}: </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')}: </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')}: </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')}: </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:
|
|
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:
|
|
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,
|
|
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 [
|
|
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(
|
|
33
|
-
const apiURL =
|
|
34
|
-
const action = `${serverURL}${apiRoute}/${collectionSlug}${isEditing ? `/${
|
|
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
|
-
|
|
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:
|
|
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 [
|
|
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?.
|
|
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?.
|
|
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,
|
|
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
|
|
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 \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;
|
|
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
|
|
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,
|
|
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
|