@webiny/app-headless-cms 0.0.0-unstable.9f53ea597d → 0.0.0-unstable.a4f3e4ea8b
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/ContentEntriesModule.js +6 -1
- package/ContentEntriesModule.js.map +1 -1
- package/admin/components/ContentEntries/Table/Cells/CellLive.js +9 -2
- package/admin/components/ContentEntries/Table/Cells/CellLive.js.map +1 -1
- package/admin/components/Dialogs/EditRevisionNoteDialog.d.ts +2 -0
- package/admin/components/Dialogs/EditRevisionNoteDialog.js +33 -0
- package/admin/components/Dialogs/EditRevisionNoteDialog.js.map +1 -0
- package/admin/components/LexicalCmsEditor/LexicalEditor.js +10 -6
- package/admin/components/LexicalCmsEditor/LexicalEditor.js.map +1 -1
- package/admin/components/LexicalCmsEditor/TypographyDropDown.js +3 -2
- package/admin/components/LexicalCmsEditor/TypographyDropDown.js.map +1 -1
- package/admin/plugins/editor/formSettings/components/GeneralSettings.js +0 -16
- package/admin/plugins/editor/formSettings/components/GeneralSettings.js.map +1 -1
- package/features/contentEntry/valueTransformers/DynamicZoneValueTransformer.js +7 -2
- package/features/contentEntry/valueTransformers/DynamicZoneValueTransformer.js.map +1 -1
- package/features/contentEntry/valueTransformers/ObjectValueTransformer.js +16 -2
- package/features/contentEntry/valueTransformers/ObjectValueTransformer.js.map +1 -1
- package/features/formModel/mappers/DynamicZoneFieldMapper.js +4 -2
- package/features/formModel/mappers/DynamicZoneFieldMapper.js.map +1 -1
- package/features/formModel/mappers/ObjectFieldMapper.js +2 -0
- package/features/formModel/mappers/ObjectFieldMapper.js.map +1 -1
- package/package.json +20 -19
- package/presentation/contentEntries/form/ContentEntryFormPresenter.d.ts +2 -0
- package/presentation/contentEntries/form/ContentEntryFormPresenter.js +10 -0
- package/presentation/contentEntries/form/ContentEntryFormPresenter.js.map +1 -1
- package/presentation/contentEntries/form/abstractions.d.ts +1 -0
- package/presentation/contentEntries/form/abstractions.js.map +1 -1
- package/presentation/contentEntries/form/getFieldBuilders.test.js +2 -2
- package/presentation/contentEntries/form/getFieldBuilders.test.js.map +1 -1
- package/presentation/contentEntries/list/ContentEntriesDataSource.js +5 -2
- package/presentation/contentEntries/list/ContentEntriesDataSource.js.map +1 -1
- package/presentation/contentEntries/preview/ComponentDiscoveryIframe.d.ts +3 -2
- package/presentation/contentEntries/preview/ComponentDiscoveryIframe.js +2 -2
- package/presentation/contentEntries/preview/ComponentDiscoveryIframe.js.map +1 -1
- package/presentation/contentEntries/preview/ModelEditorComponentDiscovery.js +8 -5
- package/presentation/contentEntries/preview/ModelEditorComponentDiscovery.js.map +1 -1
- package/presentation/contentEntries/preview/PreviewDecorator.js +6 -5
- package/presentation/contentEntries/preview/PreviewDecorator.js.map +1 -1
- package/presentation/contentEntries/preview/PreviewPane.d.ts +3 -3
- package/presentation/contentEntries/preview/PreviewPane.js +3 -3
- package/presentation/contentEntries/preview/PreviewPane.js.map +1 -1
- package/presentation/contentEntries/preview/resolvePreviewUrl.d.ts +2 -2
- package/presentation/contentEntries/preview/resolvePreviewUrl.js +12 -9
- package/presentation/contentEntries/preview/resolvePreviewUrl.js.map +1 -1
- package/presentation/contentEntries/revisionsList/RevisionsListPresenter.d.ts +15 -1
- package/presentation/contentEntries/revisionsList/RevisionsListPresenter.js +117 -4
- package/presentation/contentEntries/revisionsList/RevisionsListPresenter.js.map +1 -1
- package/presentation/contentEntries/revisionsList/RevisionsListPresenter.test.d.ts +1 -0
- package/presentation/contentEntries/revisionsList/RevisionsListPresenter.test.js +257 -0
- package/presentation/contentEntries/revisionsList/RevisionsListPresenter.test.js.map +1 -0
- package/presentation/contentEntries/revisionsList/abstractions.d.ts +3 -0
- package/presentation/contentEntries/revisionsList/abstractions.js.map +1 -1
- package/presentation/contentEntries/views/ContentEntriesListLayout.js +1 -0
- package/presentation/contentEntries/views/ContentEntriesListLayout.js.map +1 -1
- package/presentation/contentEntries/views/ContentEntryFormView.js +2 -1
- package/presentation/contentEntries/views/ContentEntryFormView.js.map +1 -1
- package/presentation/contentEntries/views/OlderRevisionAlert.d.ts +4 -0
- package/presentation/contentEntries/views/OlderRevisionAlert.js +43 -0
- package/presentation/contentEntries/views/OlderRevisionAlert.js.map +1 -0
- package/presentation/contentEntries/views/RevisionDrawer.js +4 -0
- package/presentation/contentEntries/views/RevisionDrawer.js.map +1 -1
- package/presentation/contentEntries/views/RevisionListItem.js +80 -13
- package/presentation/contentEntries/views/RevisionListItem.js.map +1 -1
- package/presentation/contentEntries/views/actions/CreateNewRevisionButton.js +11 -0
- package/presentation/contentEntries/views/actions/CreateNewRevisionButton.js.map +1 -1
- package/presentation/fieldRenderers/ref/components/EntryCard.js +10 -8
- package/presentation/fieldRenderers/ref/components/EntryCard.js.map +1 -1
package/ContentEntriesModule.js
CHANGED
|
@@ -14,7 +14,8 @@ import { TrashEntryConfirmDialog } from "./admin/components/Dialogs/TrashEntryCo
|
|
|
14
14
|
import { PublishEntryConfirmDialog } from "./admin/components/Dialogs/PublishEntryConfirmDialog.js";
|
|
15
15
|
import { UnpublishEntryConfirmDialog } from "./admin/components/Dialogs/UnpublishEntryConfirmDialog.js";
|
|
16
16
|
import { DeleteRevisionConfirmDialog } from "./admin/components/Dialogs/DeleteRevisionConfirmDialog.js";
|
|
17
|
-
import {
|
|
17
|
+
import { EditRevisionNoteDialog } from "./admin/components/Dialogs/EditRevisionNoteDialog.js";
|
|
18
|
+
import { DELETE_REVISION_DIALOG, EDIT_REVISION_NOTE_DIALOG } from "./presentation/contentEntries/revisionsList/RevisionsListPresenter.js";
|
|
18
19
|
import { RevisionSelector } from "./presentation/contentEntries/views/actions/RevisionSelector.js";
|
|
19
20
|
import { ContentFormOptionsMenu } from "./presentation/contentEntries/views/actions/ContentFormOptionsMenu.js";
|
|
20
21
|
import { SaveContentButton } from "./presentation/contentEntries/views/actions/SaveContentButton.js";
|
|
@@ -37,6 +38,9 @@ const ContentEntriesModule = ()=>/*#__PURE__*/ react.createElement(react.Fragmen
|
|
|
37
38
|
}), /*#__PURE__*/ react.createElement(AdminConfig.Dialog, {
|
|
38
39
|
name: DELETE_REVISION_DIALOG,
|
|
39
40
|
element: /*#__PURE__*/ react.createElement(DeleteRevisionConfirmDialog, null)
|
|
41
|
+
}), /*#__PURE__*/ react.createElement(AdminConfig.Dialog, {
|
|
42
|
+
name: EDIT_REVISION_NOTE_DIALOG,
|
|
43
|
+
element: /*#__PURE__*/ react.createElement(EditRevisionNoteDialog, null)
|
|
40
44
|
})), /*#__PURE__*/ react.createElement(InternalContentEntryListConfig, null, /*#__PURE__*/ react.createElement(AdvancedSearchConfigs, null), /*#__PURE__*/ react.createElement(IsModelPublishable, null, /*#__PURE__*/ react.createElement(Browser.Filter, {
|
|
41
45
|
name: "status",
|
|
42
46
|
element: /*#__PURE__*/ react.createElement(FilterByStatus, null)
|
|
@@ -107,6 +111,7 @@ const ContentEntriesModule = ()=>/*#__PURE__*/ react.createElement(react.Fragmen
|
|
|
107
111
|
name: "live",
|
|
108
112
|
header: "Live",
|
|
109
113
|
truncate: false,
|
|
114
|
+
sortable: true,
|
|
110
115
|
cell: /*#__PURE__*/ react.createElement(CellLive, null)
|
|
111
116
|
})), /*#__PURE__*/ react.createElement(Browser.Table.Column, {
|
|
112
117
|
name: "actions",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentEntriesModule.js","sources":["../src/ContentEntriesModule.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { AdvancedSearchConfigs } from \"@webiny/app-aco/components/AdvancedSearch/AdvancedSearchConfigs\";\nimport {\n InternalContentEntryEditorConfig,\n InternalContentEntryListConfig\n} from \"~/admin/config/contentEntries/index.js\";\n\nimport {\n ActionDelete,\n ActionMove,\n ActionPublish,\n ActionUnpublish\n} from \"~/admin/components/ContentEntries/BulkActions/index.js\";\n\nimport {\n TRASH_ENTRY_DIALOG,\n PUBLISH_ENTRY_DIALOG,\n UNPUBLISH_ENTRY_DIALOG\n} from \"~/presentation/contentEntries/list/ContentEntriesPresenter.js\";\nimport { DeleteFolder, EditFolder, SetFolderPermissions } from \"@webiny/app-aco\";\nimport {\n ChangeEntryStatus,\n DeleteEntry,\n EditEntry,\n MoveEntry\n} from \"~/admin/components/ContentEntries/Table/Actions/index.js\";\nimport {\n CellActions,\n CellAuthor,\n CellCreated,\n CellLive,\n CellModified,\n CellName,\n CellStatus\n} from \"~/admin/components/ContentEntries/Table/Cells/index.js\";\nimport { IsModelPublishable } from \"~/admin/components/IsModelPublishable.js\";\nimport { FilterByStatus } from \"~/admin/components/ContentEntries/FilterByStatus.js\";\nimport { CmsTrashBin } from \"~/presentation/contentEntries/trashBin/CmsTrashBin.js\";\nimport { TrashEntryConfirmDialog } from \"~/admin/components/Dialogs/TrashEntryConfirmDialog.js\";\nimport { PublishEntryConfirmDialog } from \"~/admin/components/Dialogs/PublishEntryConfirmDialog.js\";\nimport { UnpublishEntryConfirmDialog } from \"~/admin/components/Dialogs/UnpublishEntryConfirmDialog.js\";\nimport { DeleteRevisionConfirmDialog } from \"~/admin/components/Dialogs/DeleteRevisionConfirmDialog.js\";\nimport { DELETE_REVISION_DIALOG } from \"~/presentation/contentEntries/revisionsList/RevisionsListPresenter.js\";\nimport { RevisionSelector } from \"~/presentation/contentEntries/views/actions/RevisionSelector.js\";\nimport { ContentFormOptionsMenu } from \"~/presentation/contentEntries/views/actions/ContentFormOptionsMenu.js\";\nimport { SaveContentButton } from \"~/presentation/contentEntries/views/actions/SaveContentButton.js\";\nimport { SaveAndPublishButton } from \"~/presentation/contentEntries/views/actions/SaveAndPublishButton.js\";\nimport { DeleteEntryMenuItem } from \"~/presentation/contentEntries/views/actions/DeleteEntryMenuItem.js\";\nimport { ShowRevisionListMenuItem } from \"~/presentation/contentEntries/views/actions/ShowRevisionListMenuItem.js\";\nimport { CreateNewRevisionButton } from \"~/presentation/contentEntries/views/actions/CreateNewRevisionButton.js\";\nimport { PublishOnlyButton } from \"~/presentation/contentEntries/views/actions/PublishOnlyButton.js\";\n\nconst { Browser } = InternalContentEntryListConfig;\nconst { Actions } = InternalContentEntryEditorConfig;\n\nexport const ContentEntriesModule = () => {\n return (\n <>\n <AdminConfig>\n <AdminConfig.Dialog\n name={TRASH_ENTRY_DIALOG}\n element={<TrashEntryConfirmDialog />}\n />\n <AdminConfig.Dialog\n name={PUBLISH_ENTRY_DIALOG}\n element={<PublishEntryConfirmDialog />}\n />\n <AdminConfig.Dialog\n name={UNPUBLISH_ENTRY_DIALOG}\n element={<UnpublishEntryConfirmDialog />}\n />\n <AdminConfig.Dialog\n name={DELETE_REVISION_DIALOG}\n element={<DeleteRevisionConfirmDialog />}\n />\n </AdminConfig>\n <InternalContentEntryListConfig>\n <AdvancedSearchConfigs />\n <IsModelPublishable>\n <Browser.Filter name={\"status\"} element={<FilterByStatus />} />\n <Browser.BulkAction name={\"publish\"} element={<ActionPublish />} />\n <Browser.BulkAction name={\"unpublish\"} element={<ActionUnpublish />} />\n </IsModelPublishable>\n <Browser.Sidebar.Footer name={\"trashBin\"} element={<CmsTrashBin />} />\n <Browser.BulkAction name={\"move\"} element={<ActionMove />} />\n <Browser.BulkAction name={\"delete\"} element={<ActionDelete />} />\n <Browser.Folder.Action name={\"edit\"} element={<EditFolder />} />\n <Browser.Folder.Action name={\"permissions\"} element={<SetFolderPermissions />} />\n <Browser.Folder.Action name={\"delete\"} element={<DeleteFolder />} />\n <Browser.Entry.Action name={\"edit\"} element={<EditEntry />} />\n <IsModelPublishable>\n <Browser.Entry.Action name={\"status\"} element={<ChangeEntryStatus />} />\n </IsModelPublishable>\n <Browser.Entry.Action name={\"move\"} element={<MoveEntry />} />\n <Browser.Entry.Action name={\"delete\"} element={<DeleteEntry />} after={\"$last\"} />\n <Browser.Table.Column\n name={\"name\"}\n header={\"Name\"}\n cell={<CellName />}\n sortable={true}\n hideable={false}\n size={200}\n />\n <Browser.Table.Column name={\"createdBy\"} header={\"Author\"} cell={<CellAuthor />} />\n <Browser.Table.Column\n name={\"createdOn\"}\n header={\"Created\"}\n cell={<CellCreated />}\n sortable={true}\n />\n <Browser.Table.Column\n name={\"savedOn\"}\n header={\"Modified\"}\n cell={<CellModified />}\n sortable={true}\n />\n <IsModelPublishable>\n <Browser.Table.Column\n name={\"status\"}\n header={\"Status\"}\n cell={<CellStatus />}\n truncate={false}\n />\n <Browser.Table.Column\n name={\"live\"}\n header={\"Live\"}\n truncate={false}\n cell={<CellLive />}\n />\n </IsModelPublishable>\n <Browser.Table.Column\n name={\"actions\"}\n header={\"\"}\n cell={<CellActions />}\n size={56}\n resizable={false}\n hideable={false}\n truncate={false}\n className={\"flex justify-center\"}\n />\n </InternalContentEntryListConfig>\n <InternalContentEntryEditorConfig>\n <IsModelPublishable>\n <Actions.ButtonAction\n name={\"revisionSelector\"}\n element={<RevisionSelector />}\n />\n </IsModelPublishable>\n <Actions.ButtonAction name={\"optionsMenu\"} element={<ContentFormOptionsMenu />} />\n <Actions.ButtonAction name={\"save\"} element={<SaveContentButton />} />\n <IsModelPublishable>\n <Actions.ButtonAction\n name={\"cms/createNewRevision\"}\n element={<CreateNewRevisionButton />}\n />\n <Actions.ButtonAction name={\"publish\"} element={<SaveAndPublishButton />} />\n <Actions.ButtonAction name={\"publishOnly\"} element={<PublishOnlyButton />} />\n </IsModelPublishable>\n <Actions.MenuItemAction\n name={\"delete\"}\n element={<DeleteEntryMenuItem />}\n after={\"$last\"}\n />\n <IsModelPublishable>\n <Actions.MenuItemAction\n name={\"showRevisionsList\"}\n element={<ShowRevisionListMenuItem />}\n />\n </IsModelPublishable>\n </InternalContentEntryEditorConfig>\n </>\n );\n};\n"],"names":["Browser","InternalContentEntryListConfig","Actions","InternalContentEntryEditorConfig","ContentEntriesModule","AdminConfig","TRASH_ENTRY_DIALOG","TrashEntryConfirmDialog","PUBLISH_ENTRY_DIALOG","PublishEntryConfirmDialog","UNPUBLISH_ENTRY_DIALOG","UnpublishEntryConfirmDialog","DELETE_REVISION_DIALOG","DeleteRevisionConfirmDialog","AdvancedSearchConfigs","IsModelPublishable","FilterByStatus","ActionPublish","ActionUnpublish","CmsTrashBin","ActionMove","ActionDelete","EditFolder","SetFolderPermissions","DeleteFolder","EditEntry","ChangeEntryStatus","MoveEntry","DeleteEntry","CellName","CellAuthor","CellCreated","CellModified","CellStatus","CellLive","CellActions","RevisionSelector","ContentFormOptionsMenu","SaveContentButton","CreateNewRevisionButton","SaveAndPublishButton","PublishOnlyButton","DeleteEntryMenuItem","ShowRevisionListMenuItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ContentEntriesModule.js","sources":["../src/ContentEntriesModule.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig } from \"@webiny/app-admin\";\nimport { AdvancedSearchConfigs } from \"@webiny/app-aco/components/AdvancedSearch/AdvancedSearchConfigs\";\nimport {\n InternalContentEntryEditorConfig,\n InternalContentEntryListConfig\n} from \"~/admin/config/contentEntries/index.js\";\n\nimport {\n ActionDelete,\n ActionMove,\n ActionPublish,\n ActionUnpublish\n} from \"~/admin/components/ContentEntries/BulkActions/index.js\";\n\nimport {\n TRASH_ENTRY_DIALOG,\n PUBLISH_ENTRY_DIALOG,\n UNPUBLISH_ENTRY_DIALOG\n} from \"~/presentation/contentEntries/list/ContentEntriesPresenter.js\";\nimport { DeleteFolder, EditFolder, SetFolderPermissions } from \"@webiny/app-aco\";\nimport {\n ChangeEntryStatus,\n DeleteEntry,\n EditEntry,\n MoveEntry\n} from \"~/admin/components/ContentEntries/Table/Actions/index.js\";\nimport {\n CellActions,\n CellAuthor,\n CellCreated,\n CellLive,\n CellModified,\n CellName,\n CellStatus\n} from \"~/admin/components/ContentEntries/Table/Cells/index.js\";\nimport { IsModelPublishable } from \"~/admin/components/IsModelPublishable.js\";\nimport { FilterByStatus } from \"~/admin/components/ContentEntries/FilterByStatus.js\";\nimport { CmsTrashBin } from \"~/presentation/contentEntries/trashBin/CmsTrashBin.js\";\nimport { TrashEntryConfirmDialog } from \"~/admin/components/Dialogs/TrashEntryConfirmDialog.js\";\nimport { PublishEntryConfirmDialog } from \"~/admin/components/Dialogs/PublishEntryConfirmDialog.js\";\nimport { UnpublishEntryConfirmDialog } from \"~/admin/components/Dialogs/UnpublishEntryConfirmDialog.js\";\nimport { DeleteRevisionConfirmDialog } from \"~/admin/components/Dialogs/DeleteRevisionConfirmDialog.js\";\nimport { EditRevisionNoteDialog } from \"~/admin/components/Dialogs/EditRevisionNoteDialog.js\";\nimport {\n DELETE_REVISION_DIALOG,\n EDIT_REVISION_NOTE_DIALOG\n} from \"~/presentation/contentEntries/revisionsList/RevisionsListPresenter.js\";\nimport { RevisionSelector } from \"~/presentation/contentEntries/views/actions/RevisionSelector.js\";\nimport { ContentFormOptionsMenu } from \"~/presentation/contentEntries/views/actions/ContentFormOptionsMenu.js\";\nimport { SaveContentButton } from \"~/presentation/contentEntries/views/actions/SaveContentButton.js\";\nimport { SaveAndPublishButton } from \"~/presentation/contentEntries/views/actions/SaveAndPublishButton.js\";\nimport { DeleteEntryMenuItem } from \"~/presentation/contentEntries/views/actions/DeleteEntryMenuItem.js\";\nimport { ShowRevisionListMenuItem } from \"~/presentation/contentEntries/views/actions/ShowRevisionListMenuItem.js\";\nimport { CreateNewRevisionButton } from \"~/presentation/contentEntries/views/actions/CreateNewRevisionButton.js\";\nimport { PublishOnlyButton } from \"~/presentation/contentEntries/views/actions/PublishOnlyButton.js\";\n\nconst { Browser } = InternalContentEntryListConfig;\nconst { Actions } = InternalContentEntryEditorConfig;\n\nexport const ContentEntriesModule = () => {\n return (\n <>\n <AdminConfig>\n <AdminConfig.Dialog\n name={TRASH_ENTRY_DIALOG}\n element={<TrashEntryConfirmDialog />}\n />\n <AdminConfig.Dialog\n name={PUBLISH_ENTRY_DIALOG}\n element={<PublishEntryConfirmDialog />}\n />\n <AdminConfig.Dialog\n name={UNPUBLISH_ENTRY_DIALOG}\n element={<UnpublishEntryConfirmDialog />}\n />\n <AdminConfig.Dialog\n name={DELETE_REVISION_DIALOG}\n element={<DeleteRevisionConfirmDialog />}\n />\n <AdminConfig.Dialog\n name={EDIT_REVISION_NOTE_DIALOG}\n element={<EditRevisionNoteDialog />}\n />\n </AdminConfig>\n <InternalContentEntryListConfig>\n <AdvancedSearchConfigs />\n <IsModelPublishable>\n <Browser.Filter name={\"status\"} element={<FilterByStatus />} />\n <Browser.BulkAction name={\"publish\"} element={<ActionPublish />} />\n <Browser.BulkAction name={\"unpublish\"} element={<ActionUnpublish />} />\n </IsModelPublishable>\n <Browser.Sidebar.Footer name={\"trashBin\"} element={<CmsTrashBin />} />\n <Browser.BulkAction name={\"move\"} element={<ActionMove />} />\n <Browser.BulkAction name={\"delete\"} element={<ActionDelete />} />\n <Browser.Folder.Action name={\"edit\"} element={<EditFolder />} />\n <Browser.Folder.Action name={\"permissions\"} element={<SetFolderPermissions />} />\n <Browser.Folder.Action name={\"delete\"} element={<DeleteFolder />} />\n <Browser.Entry.Action name={\"edit\"} element={<EditEntry />} />\n <IsModelPublishable>\n <Browser.Entry.Action name={\"status\"} element={<ChangeEntryStatus />} />\n </IsModelPublishable>\n <Browser.Entry.Action name={\"move\"} element={<MoveEntry />} />\n <Browser.Entry.Action name={\"delete\"} element={<DeleteEntry />} after={\"$last\"} />\n <Browser.Table.Column\n name={\"name\"}\n header={\"Name\"}\n cell={<CellName />}\n sortable={true}\n hideable={false}\n size={200}\n />\n <Browser.Table.Column name={\"createdBy\"} header={\"Author\"} cell={<CellAuthor />} />\n <Browser.Table.Column\n name={\"createdOn\"}\n header={\"Created\"}\n cell={<CellCreated />}\n sortable={true}\n />\n <Browser.Table.Column\n name={\"savedOn\"}\n header={\"Modified\"}\n cell={<CellModified />}\n sortable={true}\n />\n <IsModelPublishable>\n <Browser.Table.Column\n name={\"status\"}\n header={\"Status\"}\n cell={<CellStatus />}\n truncate={false}\n />\n <Browser.Table.Column\n name={\"live\"}\n header={\"Live\"}\n truncate={false}\n sortable={true}\n cell={<CellLive />}\n />\n </IsModelPublishable>\n <Browser.Table.Column\n name={\"actions\"}\n header={\"\"}\n cell={<CellActions />}\n size={56}\n resizable={false}\n hideable={false}\n truncate={false}\n className={\"flex justify-center\"}\n />\n </InternalContentEntryListConfig>\n <InternalContentEntryEditorConfig>\n <IsModelPublishable>\n <Actions.ButtonAction\n name={\"revisionSelector\"}\n element={<RevisionSelector />}\n />\n </IsModelPublishable>\n <Actions.ButtonAction name={\"optionsMenu\"} element={<ContentFormOptionsMenu />} />\n <Actions.ButtonAction name={\"save\"} element={<SaveContentButton />} />\n <IsModelPublishable>\n <Actions.ButtonAction\n name={\"cms/createNewRevision\"}\n element={<CreateNewRevisionButton />}\n />\n <Actions.ButtonAction name={\"publish\"} element={<SaveAndPublishButton />} />\n <Actions.ButtonAction name={\"publishOnly\"} element={<PublishOnlyButton />} />\n </IsModelPublishable>\n <Actions.MenuItemAction\n name={\"delete\"}\n element={<DeleteEntryMenuItem />}\n after={\"$last\"}\n />\n <IsModelPublishable>\n <Actions.MenuItemAction\n name={\"showRevisionsList\"}\n element={<ShowRevisionListMenuItem />}\n />\n </IsModelPublishable>\n </InternalContentEntryEditorConfig>\n </>\n );\n};\n"],"names":["Browser","InternalContentEntryListConfig","Actions","InternalContentEntryEditorConfig","ContentEntriesModule","AdminConfig","TRASH_ENTRY_DIALOG","TrashEntryConfirmDialog","PUBLISH_ENTRY_DIALOG","PublishEntryConfirmDialog","UNPUBLISH_ENTRY_DIALOG","UnpublishEntryConfirmDialog","DELETE_REVISION_DIALOG","DeleteRevisionConfirmDialog","EDIT_REVISION_NOTE_DIALOG","EditRevisionNoteDialog","AdvancedSearchConfigs","IsModelPublishable","FilterByStatus","ActionPublish","ActionUnpublish","CmsTrashBin","ActionMove","ActionDelete","EditFolder","SetFolderPermissions","DeleteFolder","EditEntry","ChangeEntryStatus","MoveEntry","DeleteEntry","CellName","CellAuthor","CellCreated","CellModified","CellStatus","CellLive","CellActions","RevisionSelector","ContentFormOptionsMenu","SaveContentButton","CreateNewRevisionButton","SaveAndPublishButton","PublishOnlyButton","DeleteEntryMenuItem","ShowRevisionListMenuItem"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAM,EAAEA,SAAAA,OAAO,EAAE,GAAGC;AACpB,MAAM,EAAEC,SAAAA,OAAO,EAAE,GAAGC;AAEb,MAAMC,uBAAuB,IACzB,WAAP,GACI,wDACI,oBAACC,aAAWA,MAAAA,WAAAA,GACR,oBAACA,YAAY,MAAM;QACf,MAAMC;QACN,uBAAS,oBAACC,yBAAuBA;sBAErC,oBAACF,YAAY,MAAM;QACf,MAAMG;QACN,uBAAS,oBAACC,2BAAyBA;sBAEvC,oBAACJ,YAAY,MAAM;QACf,MAAMK;QACN,uBAAS,oBAACC,6BAA2BA;sBAEzC,oBAACN,YAAY,MAAM;QACf,MAAMO;QACN,uBAAS,oBAACC,6BAA2BA;sBAEzC,oBAACR,YAAY,MAAM;QACf,MAAMS;QACN,uBAAS,oBAACC,wBAAsBA;uBAGxC,oBAACd,gCAA8BA,MAAAA,WAAAA,GAC3B,oBAACe,uBAAqBA,OAAAA,WAAAA,GACtB,oBAACC,oBAAkBA,MAAAA,WAAAA,GACf,oBAACjB,QAAQ,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAACkB,gBAAcA;sBACxD,oBAAClB,QAAQ,UAAU;QAAC,MAAM;QAAW,uBAAS,oBAACmB,eAAaA;sBAC5D,oBAACnB,QAAQ,UAAU;QAAC,MAAM;QAAa,uBAAS,oBAACoB,iBAAeA;uBAEpE,oBAACpB,QAAQ,OAAO,CAAC,MAAM;QAAC,MAAM;QAAY,uBAAS,oBAACqB,aAAWA;sBAC/D,oBAACrB,QAAQ,UAAU;QAAC,MAAM;QAAQ,uBAAS,oBAACsB,YAAUA;sBACtD,oBAACtB,QAAQ,UAAU;QAAC,MAAM;QAAU,uBAAS,oBAACuB,cAAYA;sBAC1D,oBAACvB,QAAQ,MAAM,CAAC,MAAM;QAAC,MAAM;QAAQ,uBAAS,oBAACwB,YAAUA;sBACzD,oBAACxB,QAAQ,MAAM,CAAC,MAAM;QAAC,MAAM;QAAe,uBAAS,oBAACyB,sBAAoBA;sBAC1E,oBAACzB,QAAQ,MAAM,CAAC,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAAC0B,cAAYA;sBAC7D,oBAAC1B,QAAQ,KAAK,CAAC,MAAM;QAAC,MAAM;QAAQ,uBAAS,oBAAC2B,WAASA;sBACvD,oBAACV,oBAAkBA,MAAAA,WAAAA,GACf,oBAACjB,QAAQ,KAAK,CAAC,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAAC4B,mBAAiBA;uBAErE,oBAAC5B,QAAQ,KAAK,CAAC,MAAM;QAAC,MAAM;QAAQ,uBAAS,oBAAC6B,WAASA;sBACvD,oBAAC7B,QAAQ,KAAK,CAAC,MAAM;QAAC,MAAM;QAAU,uBAAS,oBAAC8B,aAAWA;QAAK,OAAO;sBACvE,oBAAC9B,QAAQ,KAAK,CAAC,MAAM;QACjB,MAAM;QACN,QAAQ;QACR,oBAAM,oBAAC+B,UAAQA;QACf,UAAU;QACV,UAAU;QACV,MAAM;sBAEV,oBAAC/B,QAAQ,KAAK,CAAC,MAAM;QAAC,MAAM;QAAa,QAAQ;QAAU,oBAAM,oBAACgC,YAAUA;sBAC5E,oBAAChC,QAAQ,KAAK,CAAC,MAAM;QACjB,MAAM;QACN,QAAQ;QACR,oBAAM,oBAACiC,aAAWA;QAClB,UAAU;sBAEd,oBAACjC,QAAQ,KAAK,CAAC,MAAM;QACjB,MAAM;QACN,QAAQ;QACR,oBAAM,oBAACkC,cAAYA;QACnB,UAAU;sBAEd,oBAACjB,oBAAkBA,MAAAA,WAAAA,GACf,oBAACjB,QAAQ,KAAK,CAAC,MAAM;QACjB,MAAM;QACN,QAAQ;QACR,oBAAM,oBAACmC,YAAUA;QACjB,UAAU;sBAEd,oBAACnC,QAAQ,KAAK,CAAC,MAAM;QACjB,MAAM;QACN,QAAQ;QACR,UAAU;QACV,UAAU;QACV,oBAAM,oBAACoC,UAAQA;uBAGvB,oBAACpC,QAAQ,KAAK,CAAC,MAAM;QACjB,MAAM;QACN,QAAQ;QACR,oBAAM,oBAACqC,aAAWA;QAClB,MAAM;QACN,WAAW;QACX,UAAU;QACV,UAAU;QACV,WAAW;uBAGnB,oBAAClC,kCAAgCA,MAAAA,WAAAA,GAC7B,oBAACc,oBAAkBA,MAAAA,WAAAA,GACf,oBAACf,QAAQ,YAAY;QACjB,MAAM;QACN,uBAAS,oBAACoC,kBAAgBA;uBAGlC,oBAACpC,QAAQ,YAAY;QAAC,MAAM;QAAe,uBAAS,oBAACqC,wBAAsBA;sBAC3E,oBAACrC,QAAQ,YAAY;QAAC,MAAM;QAAQ,uBAAS,oBAACsC,mBAAiBA;sBAC/D,oBAACvB,oBAAkBA,MAAAA,WAAAA,GACf,oBAACf,QAAQ,YAAY;QACjB,MAAM;QACN,uBAAS,oBAACuC,yBAAuBA;sBAErC,oBAACvC,QAAQ,YAAY;QAAC,MAAM;QAAW,uBAAS,oBAACwC,sBAAoBA;sBACrE,oBAACxC,QAAQ,YAAY;QAAC,MAAM;QAAe,uBAAS,oBAACyC,mBAAiBA;uBAE1E,oBAACzC,QAAQ,cAAc;QACnB,MAAM;QACN,uBAAS,oBAAC0C,qBAAmBA;QAC7B,OAAO;sBAEX,oBAAC3B,oBAAkBA,MAAAA,WAAAA,GACf,oBAACf,QAAQ,cAAc;QACnB,MAAM;QACN,uBAAS,oBAAC2C,0BAAwBA"}
|
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import react from "react";
|
|
2
2
|
import { ContentEntryListConfig } from "../../../../config/contentEntries/index.js";
|
|
3
|
-
import { Tag } from "@webiny/admin-ui";
|
|
3
|
+
import { Tag, Tooltip } from "@webiny/admin-ui";
|
|
4
|
+
import { formatUtcOffset, useDateFormatter } from "@webiny/app-admin";
|
|
4
5
|
const CellLive = ()=>{
|
|
5
6
|
const { useTableRow, isFolderRow } = ContentEntryListConfig.Browser.Table.Column;
|
|
6
7
|
const { row } = useTableRow();
|
|
8
|
+
const dateFormatter = useDateFormatter();
|
|
7
9
|
if (isFolderRow(row)) return /*#__PURE__*/ react.createElement(react.Fragment, null, "-");
|
|
8
10
|
const entry = row.data;
|
|
9
11
|
if (!entry.live?.version) return /*#__PURE__*/ react.createElement(react.Fragment, null, "No");
|
|
10
|
-
|
|
12
|
+
const tag = /*#__PURE__*/ react.createElement(Tag, {
|
|
11
13
|
swatchColor: "#5AC84C",
|
|
12
14
|
variant: "success-light",
|
|
13
15
|
content: `Live (v${entry.live.version})`
|
|
14
16
|
});
|
|
17
|
+
if (entry.lastPublishedOn) return /*#__PURE__*/ react.createElement(Tooltip, {
|
|
18
|
+
content: `Published ${dateFormatter.format(entry.lastPublishedOn)} (${formatUtcOffset()})`,
|
|
19
|
+
trigger: tag
|
|
20
|
+
});
|
|
21
|
+
return tag;
|
|
15
22
|
};
|
|
16
23
|
export { CellLive };
|
|
17
24
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/components/ContentEntries/Table/Cells/CellLive.js","sources":["../../../../../../src/admin/components/ContentEntries/Table/Cells/CellLive.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryListConfig } from \"~/admin/config/contentEntries/index.js\";\nimport { Tag } from \"@webiny/admin-ui\";\n\nexport const CellLive = () => {\n const { useTableRow, isFolderRow } = ContentEntryListConfig.Browser.Table.Column;\n const { row } = useTableRow();\n\n if (isFolderRow(row)) {\n return <>{\"-\"}</>;\n }\n\n const entry = row.data;\n if (!entry.live?.version) {\n return <>No</>;\n }\n\n
|
|
1
|
+
{"version":3,"file":"admin/components/ContentEntries/Table/Cells/CellLive.js","sources":["../../../../../../src/admin/components/ContentEntries/Table/Cells/CellLive.tsx"],"sourcesContent":["import React from \"react\";\nimport { ContentEntryListConfig } from \"~/admin/config/contentEntries/index.js\";\nimport { Tag, Tooltip } from \"@webiny/admin-ui\";\nimport { formatUtcOffset, useDateFormatter } from \"@webiny/app-admin\";\n\nexport const CellLive = () => {\n const { useTableRow, isFolderRow } = ContentEntryListConfig.Browser.Table.Column;\n const { row } = useTableRow();\n const dateFormatter = useDateFormatter();\n\n if (isFolderRow(row)) {\n return <>{\"-\"}</>;\n }\n\n const entry = row.data;\n if (!entry.live?.version) {\n return <>No</>;\n }\n\n const tag = (\n <Tag\n swatchColor={\"#5AC84C\"}\n variant={\"success-light\"}\n content={`Live (v${entry.live.version})`}\n />\n );\n\n if (entry.lastPublishedOn) {\n return (\n <Tooltip\n content={`Published ${dateFormatter.format(entry.lastPublishedOn)} (${formatUtcOffset()})`}\n trigger={tag}\n />\n );\n }\n\n return tag;\n};\n"],"names":["CellLive","useTableRow","isFolderRow","ContentEntryListConfig","row","dateFormatter","useDateFormatter","entry","tag","Tag","Tooltip","formatUtcOffset"],"mappings":";;;;AAKO,MAAMA,WAAW;IACpB,MAAM,EAAEC,WAAW,EAAEC,WAAW,EAAE,GAAGC,uBAAuB,OAAO,CAAC,KAAK,CAAC,MAAM;IAChF,MAAM,EAAEC,GAAG,EAAE,GAAGH;IAChB,MAAMI,gBAAgBC;IAEtB,IAAIJ,YAAYE,MACZ,OAAO,WAAP,GAAO,0CAAG;IAGd,MAAMG,QAAQH,IAAI,IAAI;IACtB,IAAI,CAACG,MAAM,IAAI,EAAE,SACb,OAAO,WAAP,GAAO,0CAAE;IAGb,MAAMC,MAAM,WAANA,GACF,oBAACC,KAAGA;QACA,aAAa;QACb,SAAS;QACT,SAAS,CAAC,OAAO,EAAEF,MAAM,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;;IAIhD,IAAIA,MAAM,eAAe,EACrB,OAAO,WAAP,GACI,oBAACG,SAAOA;QACJ,SAAS,CAAC,UAAU,EAAEL,cAAc,MAAM,CAACE,MAAM,eAAe,EAAE,EAAE,EAAEI,kBAAkB,CAAC,CAAC;QAC1F,SAASH;;IAKrB,OAAOA;AACX"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import react, { useCallback, useState } from "react";
|
|
2
|
+
import { Textarea } from "@webiny/admin-ui";
|
|
3
|
+
import { ConfirmationDialog } from "@webiny/app-admin/components/ConfirmationDialog/index.js";
|
|
4
|
+
import { useNamedConfirmationDialog } from "@webiny/app-admin";
|
|
5
|
+
const EditRevisionNoteDialog = ()=>{
|
|
6
|
+
const { onConfirm, onCancel, closeDialog, params } = useNamedConfirmationDialog();
|
|
7
|
+
const [description, setDescription] = useState(params.revisionDescription ?? "");
|
|
8
|
+
const handleChange = useCallback((value)=>{
|
|
9
|
+
setDescription(value);
|
|
10
|
+
}, []);
|
|
11
|
+
return /*#__PURE__*/ react.createElement(ConfirmationDialog, {
|
|
12
|
+
title: "Revision note",
|
|
13
|
+
confirmLabel: "Save",
|
|
14
|
+
loadingLabel: "Saving...",
|
|
15
|
+
onConfirm: async ()=>{
|
|
16
|
+
await onConfirm({
|
|
17
|
+
revisionDescription: description
|
|
18
|
+
});
|
|
19
|
+
closeDialog();
|
|
20
|
+
},
|
|
21
|
+
onCancel: ()=>{
|
|
22
|
+
onCancel();
|
|
23
|
+
closeDialog();
|
|
24
|
+
}
|
|
25
|
+
}, /*#__PURE__*/ react.createElement(Textarea, {
|
|
26
|
+
description: "Add or update the note for this revision:",
|
|
27
|
+
onChange: handleChange,
|
|
28
|
+
value: description
|
|
29
|
+
}));
|
|
30
|
+
};
|
|
31
|
+
export { EditRevisionNoteDialog };
|
|
32
|
+
|
|
33
|
+
//# sourceMappingURL=EditRevisionNoteDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin/components/Dialogs/EditRevisionNoteDialog.js","sources":["../../../../src/admin/components/Dialogs/EditRevisionNoteDialog.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport { Textarea } from \"@webiny/admin-ui\";\nimport { ConfirmationDialog } from \"@webiny/app-admin/components/ConfirmationDialog/index.js\";\nimport { useNamedConfirmationDialog } from \"@webiny/app-admin\";\n\nexport const EditRevisionNoteDialog = () => {\n const { onConfirm, onCancel, closeDialog, params } = useNamedConfirmationDialog<\n { revisionDescription: string },\n { revisionDescription: string }\n >();\n\n const [description, setDescription] = useState(params.revisionDescription ?? \"\");\n\n const handleChange = useCallback((value: string) => {\n setDescription(value);\n }, []);\n\n return (\n <ConfirmationDialog\n title=\"Revision note\"\n confirmLabel=\"Save\"\n loadingLabel=\"Saving...\"\n onConfirm={async () => {\n await onConfirm({ revisionDescription: description });\n closeDialog();\n }}\n onCancel={() => {\n onCancel();\n closeDialog();\n }}\n >\n <Textarea\n description={\"Add or update the note for this revision:\"}\n onChange={handleChange}\n value={description}\n />\n </ConfirmationDialog>\n );\n};\n"],"names":["EditRevisionNoteDialog","onConfirm","onCancel","closeDialog","params","useNamedConfirmationDialog","description","setDescription","useState","handleChange","useCallback","value","ConfirmationDialog","Textarea"],"mappings":";;;;AAKO,MAAMA,yBAAyB;IAClC,MAAM,EAAEC,SAAS,EAAEC,QAAQ,EAAEC,WAAW,EAAEC,MAAM,EAAE,GAAGC;IAKrD,MAAM,CAACC,aAAaC,eAAe,GAAGC,SAASJ,OAAO,mBAAmB,IAAI;IAE7E,MAAMK,eAAeC,YAAY,CAACC;QAC9BJ,eAAeI;IACnB,GAAG,EAAE;IAEL,OAAO,WAAP,GACI,oBAACC,oBAAkBA;QACf,OAAM;QACN,cAAa;QACb,cAAa;QACb,WAAW;YACP,MAAMX,UAAU;gBAAE,qBAAqBK;YAAY;YACnDH;QACJ;QACA,UAAU;YACND;YACAC;QACJ;qBAEA,oBAACU,UAAQA;QACL,aAAa;QACb,UAAUJ;QACV,OAAOH;;AAIvB"}
|
|
@@ -3,18 +3,22 @@ import { StaticToolbar } from "@webiny/lexical-editor";
|
|
|
3
3
|
import { LexicalEditor } from "@webiny/app-admin";
|
|
4
4
|
const placeholderStyles = {
|
|
5
5
|
position: "absolute",
|
|
6
|
-
top:
|
|
7
|
-
left:
|
|
6
|
+
top: 0,
|
|
7
|
+
left: 0,
|
|
8
|
+
padding: "8px 12px",
|
|
9
|
+
marginTop: 0,
|
|
10
|
+
color: "var(--text-color-neutral-muted)"
|
|
8
11
|
};
|
|
9
12
|
const contentEditableStyles = {
|
|
10
13
|
minHeight: 200,
|
|
11
14
|
display: "block",
|
|
12
|
-
padding:
|
|
15
|
+
padding: "8px 12px"
|
|
13
16
|
};
|
|
14
17
|
const styles = {
|
|
15
|
-
backgroundColor: "
|
|
16
|
-
border: "1px solid
|
|
17
|
-
|
|
18
|
+
backgroundColor: "var(--color-neutral-base)",
|
|
19
|
+
border: "1px solid var(--border-color-neutral-muted)",
|
|
20
|
+
borderTop: "none",
|
|
21
|
+
borderRadius: "0 0 var(--radius-md) var(--radius-md)",
|
|
18
22
|
minHeight: 200,
|
|
19
23
|
maxHeight: 350
|
|
20
24
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/components/LexicalCmsEditor/LexicalEditor.js","sources":["../../../../src/admin/components/LexicalCmsEditor/LexicalEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { StaticToolbar } from \"@webiny/lexical-editor\";\nimport { LexicalEditor as BaseLexicalEditor } from \"@webiny/app-admin\";\n\nconst placeholderStyles: React.CSSProperties = {
|
|
1
|
+
{"version":3,"file":"admin/components/LexicalCmsEditor/LexicalEditor.js","sources":["../../../../src/admin/components/LexicalCmsEditor/LexicalEditor.tsx"],"sourcesContent":["import React from \"react\";\nimport { StaticToolbar } from \"@webiny/lexical-editor\";\nimport { LexicalEditor as BaseLexicalEditor } from \"@webiny/app-admin\";\n\n// Overlay the contentEditable: same origin + same padding as `contentEditableStyles`, and\n// neutralize the Placeholder component's default -20px margin. This makes the placeholder's\n// first line land exactly on the editor's text start.\nconst placeholderStyles: React.CSSProperties = {\n position: \"absolute\",\n top: 0,\n left: 0,\n padding: \"8px 12px\",\n marginTop: 0,\n // Font size/family come from the paragraph typography class (applied by RichTextEditor);\n // keep the placeholder muted.\n color: \"var(--text-color-neutral-muted)\"\n};\n\nconst contentEditableStyles: React.CSSProperties = {\n minHeight: 200,\n display: \"block\",\n padding: \"8px 12px\"\n};\n\nconst styles: React.CSSProperties = {\n backgroundColor: \"var(--color-neutral-base)\",\n border: \"1px solid var(--border-color-neutral-muted)\",\n // The static toolbar sits directly above and carries the top border, so the body\n // drops its top border and rounds only the bottom corners — together one seamless\n // rounded container, no internal divider (matches Figma).\n borderTop: \"none\",\n borderRadius: \"0 0 var(--radius-md) var(--radius-md)\",\n // Padding lives on the contentEditable only (avoids doubled inset).\n minHeight: 200,\n maxHeight: 350\n};\n\nconst toolbar = <StaticToolbar />;\n\nexport type LexicalEditorProps = Omit<BaseLexicalEditor.Props, \"theme\">;\n\nexport const LexicalEditor = (props: LexicalEditorProps) => {\n return (\n <BaseLexicalEditor\n {...props}\n focus={true}\n staticToolbar={toolbar}\n tag={\"p\"}\n placeholder={props?.placeholder || \"Enter your text here...\"}\n placeholderStyles={placeholderStyles}\n contentEditableStyles={contentEditableStyles}\n styles={styles}\n />\n );\n};\n"],"names":["placeholderStyles","contentEditableStyles","styles","toolbar","StaticToolbar","LexicalEditor","props","BaseLexicalEditor"],"mappings":";;;AAOA,MAAMA,oBAAyC;IAC3C,UAAU;IACV,KAAK;IACL,MAAM;IACN,SAAS;IACT,WAAW;IAGX,OAAO;AACX;AAEA,MAAMC,wBAA6C;IAC/C,WAAW;IACX,SAAS;IACT,SAAS;AACb;AAEA,MAAMC,SAA8B;IAChC,iBAAiB;IACjB,QAAQ;IAIR,WAAW;IACX,cAAc;IAEd,WAAW;IACX,WAAW;AACf;AAEA,MAAMC,UAAU,WAAHA,GAAG,oBAACC,eAAaA;AAIvB,MAAMC,8BAAgB,CAACC,QACnB,WAAP,GACI,oBAACC,eAAiBA;QACb,GAAGD,KAAK;QACT,OAAO;QACP,eAAeH;QACf,KAAK;QACL,aAAaG,OAAO,eAAe;QACnC,mBAAmBN;QACnB,uBAAuBC;QACvB,QAAQC"}
|
|
@@ -41,14 +41,15 @@ const TypographyDropDown = ()=>{
|
|
|
41
41
|
element
|
|
42
42
|
]);
|
|
43
43
|
return /*#__PURE__*/ react.createElement(react.Fragment, null, styles?.length ? /*#__PURE__*/ react.createElement(DropDown, {
|
|
44
|
-
buttonClassName: "toolbar-item typography-dropdown",
|
|
44
|
+
buttonClassName: "toolbar-item typography-dropdown block-type-dropdown",
|
|
45
45
|
buttonAriaLabel: "Typography formatting options",
|
|
46
46
|
buttonLabel: value?.label || "Typography",
|
|
47
47
|
stopCloseOnClickSelf: true,
|
|
48
48
|
disabled: false,
|
|
49
49
|
showScroll: true
|
|
50
50
|
}, styles?.map((option)=>/*#__PURE__*/ react.createElement(DropDownItem, {
|
|
51
|
-
className:
|
|
51
|
+
className: "item typography-item",
|
|
52
|
+
selected: value?.id === option.id,
|
|
52
53
|
onClick: ()=>applyTypography(option),
|
|
53
54
|
key: option.id
|
|
54
55
|
}, /*#__PURE__*/ react.createElement("span", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/components/LexicalCmsEditor/TypographyDropDown.js","sources":["../../../../src/admin/components/LexicalCmsEditor/TypographyDropDown.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { $getNearestNodeOfType } from \"@lexical/utils\";\nimport {\n DropDown,\n DropDownItem,\n useCurrentSelection,\n useCurrentElement,\n useTypographyAction\n} from \"@webiny/lexical-editor\";\nimport {\n $isHeadingNode,\n $isParagraphNode,\n $isQuoteNode,\n $isListNode,\n ListNode\n} from \"@webiny/lexical-nodes\";\nimport { useAdminConfig } from \"@webiny/app-admin\";\n\nexport type TypographyStyle = {\n id: string;\n label: string;\n tag: string;\n className: string;\n};\n\nexport const TypographyDropDown = () => {\n const { value, applyTypography } = useTypographyAction();\n const { lexicalTheme } = useAdminConfig();\n\n const [styles, setStyles] = useState<TypographyStyle[]>([]);\n const { element } = useCurrentElement();\n const { rangeSelection } = useCurrentSelection();\n\n const getAllTextStyles = (): TypographyStyle[] => {\n const headingsStyles = lexicalTheme.typography.headings || [];\n const paragraphStyles = lexicalTheme.typography.paragraphs || [];\n\n return [...headingsStyles, ...paragraphStyles];\n };\n\n const getListStyles = (tag: string): TypographyStyle[] => {\n const listStyles = lexicalTheme.typography.lists?.filter(x => x.tag === tag) || [];\n if (listStyles.length > 0) {\n return listStyles;\n }\n\n const fallbackTag = tag === \"ul\" ? \"ol\" : \"ul\";\n return lexicalTheme.typography.lists?.filter(x => x.tag === fallbackTag) || [];\n };\n\n useEffect(() => {\n if (!element || !rangeSelection) {\n return;\n }\n\n if ($isParagraphNode(element) || $isHeadingNode(element)) {\n setStyles(getAllTextStyles());\n } else if ($isListNode(element)) {\n let type;\n try {\n const anchorNode = rangeSelection.anchor.getNode();\n const parentList = $getNearestNodeOfType<ListNode>(anchorNode, ListNode);\n if (parentList) {\n type = parentList.getListType();\n }\n } catch {\n type = element.getListType();\n }\n\n if (type === \"bullet\") {\n setStyles(getListStyles(\"ul\"));\n } else {\n setStyles(getListStyles(\"ol\"));\n }\n } else if ($isQuoteNode(element)) {\n setStyles(lexicalTheme.typography.quotes || []);\n } else {\n setStyles([]);\n }\n }, [element]);\n\n return (\n <>\n {!!styles?.length ? (\n <DropDown\n buttonClassName=\"toolbar-item typography-dropdown\"\n buttonAriaLabel={\"Typography formatting options\"}\n buttonLabel={value?.label || \"Typography\"}\n stopCloseOnClickSelf={true}\n disabled={false}\n showScroll={true}\n >\n {styles?.map(option => (\n <DropDownItem\n className
|
|
1
|
+
{"version":3,"file":"admin/components/LexicalCmsEditor/TypographyDropDown.js","sources":["../../../../src/admin/components/LexicalCmsEditor/TypographyDropDown.tsx"],"sourcesContent":["import React, { useEffect, useState } from \"react\";\nimport { $getNearestNodeOfType } from \"@lexical/utils\";\nimport {\n DropDown,\n DropDownItem,\n useCurrentSelection,\n useCurrentElement,\n useTypographyAction\n} from \"@webiny/lexical-editor\";\nimport {\n $isHeadingNode,\n $isParagraphNode,\n $isQuoteNode,\n $isListNode,\n ListNode\n} from \"@webiny/lexical-nodes\";\nimport { useAdminConfig } from \"@webiny/app-admin\";\n\nexport type TypographyStyle = {\n id: string;\n label: string;\n tag: string;\n className: string;\n};\n\nexport const TypographyDropDown = () => {\n const { value, applyTypography } = useTypographyAction();\n const { lexicalTheme } = useAdminConfig();\n\n const [styles, setStyles] = useState<TypographyStyle[]>([]);\n const { element } = useCurrentElement();\n const { rangeSelection } = useCurrentSelection();\n\n const getAllTextStyles = (): TypographyStyle[] => {\n const headingsStyles = lexicalTheme.typography.headings || [];\n const paragraphStyles = lexicalTheme.typography.paragraphs || [];\n\n return [...headingsStyles, ...paragraphStyles];\n };\n\n const getListStyles = (tag: string): TypographyStyle[] => {\n const listStyles = lexicalTheme.typography.lists?.filter(x => x.tag === tag) || [];\n if (listStyles.length > 0) {\n return listStyles;\n }\n\n const fallbackTag = tag === \"ul\" ? \"ol\" : \"ul\";\n return lexicalTheme.typography.lists?.filter(x => x.tag === fallbackTag) || [];\n };\n\n useEffect(() => {\n if (!element || !rangeSelection) {\n return;\n }\n\n if ($isParagraphNode(element) || $isHeadingNode(element)) {\n setStyles(getAllTextStyles());\n } else if ($isListNode(element)) {\n let type;\n try {\n const anchorNode = rangeSelection.anchor.getNode();\n const parentList = $getNearestNodeOfType<ListNode>(anchorNode, ListNode);\n if (parentList) {\n type = parentList.getListType();\n }\n } catch {\n type = element.getListType();\n }\n\n if (type === \"bullet\") {\n setStyles(getListStyles(\"ul\"));\n } else {\n setStyles(getListStyles(\"ol\"));\n }\n } else if ($isQuoteNode(element)) {\n setStyles(lexicalTheme.typography.quotes || []);\n } else {\n setStyles([]);\n }\n }, [element]);\n\n return (\n <>\n {!!styles?.length ? (\n <DropDown\n buttonClassName=\"toolbar-item typography-dropdown block-type-dropdown\"\n buttonAriaLabel={\"Typography formatting options\"}\n buttonLabel={value?.label || \"Typography\"}\n stopCloseOnClickSelf={true}\n disabled={false}\n showScroll={true}\n >\n {styles?.map(option => (\n <DropDownItem\n className=\"item typography-item\"\n selected={value?.id === option.id}\n onClick={() => applyTypography(option)}\n key={option.id}\n >\n <span className=\"text\">{option.label}</span>\n </DropDownItem>\n ))}\n </DropDown>\n ) : null}\n </>\n );\n};\n"],"names":["TypographyDropDown","value","applyTypography","useTypographyAction","lexicalTheme","useAdminConfig","styles","setStyles","useState","element","useCurrentElement","rangeSelection","useCurrentSelection","getAllTextStyles","headingsStyles","paragraphStyles","getListStyles","tag","listStyles","x","fallbackTag","useEffect","$isParagraphNode","$isHeadingNode","$isListNode","type","anchorNode","parentList","$getNearestNodeOfType","ListNode","$isQuoteNode","DropDown","option","DropDownItem"],"mappings":";;;;;AAyBO,MAAMA,qBAAqB;IAC9B,MAAM,EAAEC,KAAK,EAAEC,eAAe,EAAE,GAAGC;IACnC,MAAM,EAAEC,YAAY,EAAE,GAAGC;IAEzB,MAAM,CAACC,QAAQC,UAAU,GAAGC,SAA4B,EAAE;IAC1D,MAAM,EAAEC,OAAO,EAAE,GAAGC;IACpB,MAAM,EAAEC,cAAc,EAAE,GAAGC;IAE3B,MAAMC,mBAAmB;QACrB,MAAMC,iBAAiBV,aAAa,UAAU,CAAC,QAAQ,IAAI,EAAE;QAC7D,MAAMW,kBAAkBX,aAAa,UAAU,CAAC,UAAU,IAAI,EAAE;QAEhE,OAAO;eAAIU;eAAmBC;SAAgB;IAClD;IAEA,MAAMC,gBAAgB,CAACC;QACnB,MAAMC,aAAad,aAAa,UAAU,CAAC,KAAK,EAAE,OAAOe,CAAAA,IAAKA,EAAE,GAAG,KAAKF,QAAQ,EAAE;QAClF,IAAIC,WAAW,MAAM,GAAG,GACpB,OAAOA;QAGX,MAAME,cAAcH,AAAQ,SAARA,MAAe,OAAO;QAC1C,OAAOb,aAAa,UAAU,CAAC,KAAK,EAAE,OAAOe,CAAAA,IAAKA,EAAE,GAAG,KAAKC,gBAAgB,EAAE;IAClF;IAEAC,UAAU;QACN,IAAI,CAACZ,WAAW,CAACE,gBACb;QAGJ,IAAIW,iBAAiBb,YAAYc,eAAed,UAC5CF,UAAUM;aACP,IAAIW,YAAYf,UAAU;YAC7B,IAAIgB;YACJ,IAAI;gBACA,MAAMC,aAAaf,eAAe,MAAM,CAAC,OAAO;gBAChD,MAAMgB,aAAaC,sBAAgCF,YAAYG;gBAC/D,IAAIF,YACAF,OAAOE,WAAW,WAAW;YAErC,EAAE,OAAM;gBACJF,OAAOhB,QAAQ,WAAW;YAC9B;YAEa,aAATgB,OACAlB,UAAUS,cAAc,SAExBT,UAAUS,cAAc;QAEhC,OAAWc,aAAarB,WACpBF,UAAUH,aAAa,UAAU,CAAC,MAAM,IAAI,EAAE,IAE9CG,UAAU,EAAE;IAEpB,GAAG;QAACE;KAAQ;IAEZ,OAAO,WAAP,GACI,0CACK,AAAEH,QAAQ,SAAS,WAAT,GACP,oBAACyB,UAAQA;QACL,iBAAgB;QAChB,iBAAiB;QACjB,aAAa9B,OAAO,SAAS;QAC7B,sBAAsB;QACtB,UAAU;QACV,YAAY;OAEXK,QAAQ,IAAI0B,CAAAA,SAAAA,WAAAA,GACT,oBAACC,cAAYA;YACT,WAAU;YACV,UAAUhC,OAAO,OAAO+B,OAAO,EAAE;YACjC,SAAS,IAAM9B,gBAAgB8B;YAC/B,KAAKA,OAAO,EAAE;yBAEd,oBAAC;YAAK,WAAU;WAAQA,OAAO,KAAK,OAIhD;AAGhB"}
|
|
@@ -65,22 +65,6 @@ const GeneralSettings = ({ Bind })=>/*#__PURE__*/ react.createElement(react.Frag
|
|
|
65
65
|
}, /*#__PURE__*/ react.createElement(Switch, {
|
|
66
66
|
label: "Generate with AI",
|
|
67
67
|
note: "Show an AI-powered wizard that generates content before opening the editor."
|
|
68
|
-
}))), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
69
|
-
span: 6
|
|
70
|
-
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
71
|
-
name: "settings.previewPrefix"
|
|
72
|
-
}, /*#__PURE__*/ react.createElement(Input, {
|
|
73
|
-
label: "Preview URL Prefix",
|
|
74
|
-
placeholder: "http://localhost:3000/articles",
|
|
75
|
-
description: "Base URL for live preview."
|
|
76
|
-
}))), /*#__PURE__*/ react.createElement(Grid.Column, {
|
|
77
|
-
span: 6
|
|
78
|
-
}, /*#__PURE__*/ react.createElement(Bind, {
|
|
79
|
-
name: "settings.previewSlug"
|
|
80
|
-
}, /*#__PURE__*/ react.createElement(Input, {
|
|
81
|
-
label: "Preview Slug",
|
|
82
|
-
placeholder: "{values.slug}",
|
|
83
|
-
description: "Entry field pattern for the URL slug. Use {values.<fieldId>}."
|
|
84
68
|
})))));
|
|
85
69
|
const components_GeneralSettings = GeneralSettings;
|
|
86
70
|
export default components_GeneralSettings;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin/plugins/editor/formSettings/components/GeneralSettings.js","sources":["../../../../../../src/admin/plugins/editor/formSettings/components/GeneralSettings.tsx"],"sourcesContent":["import React from \"react\";\nimport { Grid, Input, Switch, Textarea, Tags } from \"@webiny/admin-ui\";\nimport { validation } from \"@webiny/validation\";\nimport type { BindComponent } from \"@webiny/form\";\nimport GroupSelect from \"./GroupSelect.js\";\nimport { IconPicker } from \"~/admin/components/IconPicker.js\";\n\ninterface GeneralSettingsProps {\n Bind: BindComponent;\n}\n\nconst GeneralSettings = ({ Bind }: GeneralSettingsProps) => {\n return (\n <React.Fragment>\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"name\"}>\n <Input label={\"Content model name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"modelId\"}>\n <Input disabled={true} label={\"Content model ID\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"singularApiName\"}>\n <Input disabled={true} label={\"Singular API Name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"pluralApiName\"}>\n <Input disabled={true} label={\"Plural API Name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"description\"}>\n <Textarea rows={5} label={\"Content model description\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"group\"} validators={validation.create(\"required\")}>\n <GroupSelect />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"icon\">\n <IconPicker\n label={`Icon`}\n description={`Choose an icon to represent the model.`}\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"tags\"}>\n <Tags label={\"Tags\"} protectedValues={[\"type:model\"]} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"settings.aiEntryWizard\"}>\n <Switch\n label={\"Generate with AI\"}\n note={\n \"Show an AI-powered wizard that generates content before opening the editor.\"\n }\n />\n </Bind>\n </Grid.Column>\n
|
|
1
|
+
{"version":3,"file":"admin/plugins/editor/formSettings/components/GeneralSettings.js","sources":["../../../../../../src/admin/plugins/editor/formSettings/components/GeneralSettings.tsx"],"sourcesContent":["import React from \"react\";\nimport { Grid, Input, Switch, Textarea, Tags } from \"@webiny/admin-ui\";\nimport { validation } from \"@webiny/validation\";\nimport type { BindComponent } from \"@webiny/form\";\nimport GroupSelect from \"./GroupSelect.js\";\nimport { IconPicker } from \"~/admin/components/IconPicker.js\";\n\ninterface GeneralSettingsProps {\n Bind: BindComponent;\n}\n\nconst GeneralSettings = ({ Bind }: GeneralSettingsProps) => {\n return (\n <React.Fragment>\n <Grid>\n <Grid.Column span={12}>\n <Bind name={\"name\"}>\n <Input label={\"Content model name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"modelId\"}>\n <Input disabled={true} label={\"Content model ID\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"singularApiName\"}>\n <Input disabled={true} label={\"Singular API Name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"pluralApiName\"}>\n <Input disabled={true} label={\"Plural API Name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"description\"}>\n <Textarea rows={5} label={\"Content model description\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"group\"} validators={validation.create(\"required\")}>\n <GroupSelect />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name=\"icon\">\n <IconPicker\n label={`Icon`}\n description={`Choose an icon to represent the model.`}\n />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"tags\"}>\n <Tags label={\"Tags\"} protectedValues={[\"type:model\"]} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind name={\"settings.aiEntryWizard\"}>\n <Switch\n label={\"Generate with AI\"}\n note={\n \"Show an AI-powered wizard that generates content before opening the editor.\"\n }\n />\n </Bind>\n </Grid.Column>\n </Grid>\n </React.Fragment>\n );\n};\n\nexport default GeneralSettings;\n"],"names":["GeneralSettings","Bind","React","Grid","Input","Textarea","validation","GroupSelect","IconPicker","Tags","Switch"],"mappings":";;;;;AAWA,MAAMA,kBAAkB,CAAC,EAAEC,IAAI,EAAwB,GAC5C,WAAP,GACI,oBAACC,MAAAA,QAAc,sBACX,oBAACC,MAAIA,MAAAA,WAAAA,GACD,oBAACA,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;qBACR,oBAACG,OAAKA;QAAC,OAAO;wBAGtB,oBAACD,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;qBACR,oBAACG,OAAKA;QAAC,UAAU;QAAM,OAAO;wBAGtC,oBAACD,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;qBACR,oBAACG,OAAKA;QAAC,UAAU;QAAM,OAAO;wBAGtC,oBAACD,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;qBACR,oBAACG,OAAKA;QAAC,UAAU;QAAM,OAAO;wBAGtC,oBAACD,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;qBACR,oBAACI,UAAQA;QAAC,MAAM;QAAG,OAAO;wBAGlC,oBAACF,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;QAAS,YAAYK,WAAW,MAAM,CAAC;qBAC/C,oBAACC,aAAWA,SAAAA,WAAAA,GAGpB,oBAACJ,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAK;qBACP,oBAACO,YAAUA;QACP,OAAO;QACP,aAAa;wBAIzB,oBAACL,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;qBACR,oBAACQ,MAAIA;QAAC,OAAO;QAAQ,iBAAiB;YAAC;SAAa;wBAG5D,oBAACN,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACF,MAAAA;QAAK,MAAM;qBACR,oBAACS,QAAMA;QACH,OAAO;QACP,MACI;;AAUhC,mCAAeV"}
|
|
@@ -12,11 +12,16 @@ class DynamicZoneValueTransformerImpl {
|
|
|
12
12
|
return value;
|
|
13
13
|
}
|
|
14
14
|
convertItem(item, templates) {
|
|
15
|
-
const { _templateId, ...values } = item;
|
|
15
|
+
const { _templateId, _id, ...values } = item;
|
|
16
16
|
const template = templates.find((tpl)=>tpl.id === _templateId);
|
|
17
17
|
if (!template) return;
|
|
18
18
|
return {
|
|
19
|
-
[template.gqlTypeName]:
|
|
19
|
+
[template.gqlTypeName]: {
|
|
20
|
+
...this.preparer.prepare(values, template.fields || []),
|
|
21
|
+
...void 0 !== _id ? {
|
|
22
|
+
_id
|
|
23
|
+
} : {}
|
|
24
|
+
}
|
|
20
25
|
};
|
|
21
26
|
}
|
|
22
27
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/contentEntry/valueTransformers/DynamicZoneValueTransformer.js","sources":["../../../../src/features/contentEntry/valueTransformers/DynamicZoneValueTransformer.ts"],"sourcesContent":["import { CmsEntryValueTransformer, type ICmsEntryValueTransformer } from \"./abstractions.js\";\nimport { EntryDataPreparer, type IEntryDataPreparer } from \"./EntryDataPreparer.js\";\nimport type { CmsModelField, CmsDynamicZoneTemplate } from \"~/types.js\";\n\ninterface TemplateValue {\n _templateId: string;\n [key: string]: unknown;\n}\n\nclass DynamicZoneValueTransformerImpl implements ICmsEntryValueTransformer {\n readonly fieldType = \"dynamicZone\";\n\n constructor(private preparer: IEntryDataPreparer) {}\n\n transform(value: unknown, field: CmsModelField): unknown {\n const templates: CmsDynamicZoneTemplate[] = field.settings?.templates || [];\n\n if (field.list && Array.isArray(value)) {\n return value\n .map(item => this.convertItem(item as TemplateValue, templates))\n .filter(Boolean);\n }\n\n if (value && typeof value === \"object\" && \"_templateId\" in value) {\n return this.convertItem(value as TemplateValue, templates);\n }\n\n return value;\n }\n\n private convertItem(\n item: TemplateValue,\n templates: CmsDynamicZoneTemplate[]\n ): Record<string, unknown> | undefined {\n const { _templateId, ...values } = item;\n const template = templates.find(tpl => tpl.id === _templateId);\n if (!template) {\n return undefined;\n }\n\n return {\n [template.gqlTypeName]: this.preparer.prepare(values, template.fields || [])\n };\n }\n}\n\nexport const DynamicZoneValueTransformer = CmsEntryValueTransformer.createImplementation({\n implementation: DynamicZoneValueTransformerImpl,\n dependencies: [EntryDataPreparer]\n});\n"],"names":["DynamicZoneValueTransformerImpl","preparer","value","field","templates","Array","item","Boolean","_templateId","values","template","tpl","DynamicZoneValueTransformer","CmsEntryValueTransformer","EntryDataPreparer"],"mappings":";;
|
|
1
|
+
{"version":3,"file":"features/contentEntry/valueTransformers/DynamicZoneValueTransformer.js","sources":["../../../../src/features/contentEntry/valueTransformers/DynamicZoneValueTransformer.ts"],"sourcesContent":["import { CmsEntryValueTransformer, type ICmsEntryValueTransformer } from \"./abstractions.js\";\nimport { EntryDataPreparer, type IEntryDataPreparer } from \"./EntryDataPreparer.js\";\nimport type { CmsModelField, CmsDynamicZoneTemplate } from \"~/types.js\";\n\ninterface TemplateValue {\n _templateId: string;\n _id?: string;\n [key: string]: unknown;\n}\n\nclass DynamicZoneValueTransformerImpl implements ICmsEntryValueTransformer {\n readonly fieldType = \"dynamicZone\";\n\n constructor(private preparer: IEntryDataPreparer) {}\n\n transform(value: unknown, field: CmsModelField): unknown {\n const templates: CmsDynamicZoneTemplate[] = field.settings?.templates || [];\n\n if (field.list && Array.isArray(value)) {\n return value\n .map(item => this.convertItem(item as TemplateValue, templates))\n .filter(Boolean);\n }\n\n if (value && typeof value === \"object\" && \"_templateId\" in value) {\n return this.convertItem(value as TemplateValue, templates);\n }\n\n return value;\n }\n\n private convertItem(\n item: TemplateValue,\n templates: CmsDynamicZoneTemplate[]\n ): Record<string, unknown> | undefined {\n const { _templateId, _id, ...values } = item;\n const template = templates.find(tpl => tpl.id === _templateId);\n if (!template) {\n return undefined;\n }\n\n return {\n [template.gqlTypeName]: {\n ...this.preparer.prepare(values, template.fields || []),\n ...(_id !== undefined ? { _id } : {})\n }\n };\n }\n}\n\nexport const DynamicZoneValueTransformer = CmsEntryValueTransformer.createImplementation({\n implementation: DynamicZoneValueTransformerImpl,\n dependencies: [EntryDataPreparer]\n});\n"],"names":["DynamicZoneValueTransformerImpl","preparer","value","field","templates","Array","item","Boolean","_templateId","_id","values","template","tpl","undefined","DynamicZoneValueTransformer","CmsEntryValueTransformer","EntryDataPreparer"],"mappings":";;AAUA,MAAMA;IAGF,YAAoBC,QAA4B,CAAE;aAA9BA,QAAQ,GAARA;aAFX,SAAS,GAAG;IAE8B;IAEnD,UAAUC,KAAc,EAAEC,KAAoB,EAAW;QACrD,MAAMC,YAAsCD,MAAM,QAAQ,EAAE,aAAa,EAAE;QAE3E,IAAIA,MAAM,IAAI,IAAIE,MAAM,OAAO,CAACH,QAC5B,OAAOA,MACF,GAAG,CAACI,CAAAA,OAAQ,IAAI,CAAC,WAAW,CAACA,MAAuBF,YACpD,MAAM,CAACG;QAGhB,IAAIL,SAAS,AAAiB,YAAjB,OAAOA,SAAsB,iBAAiBA,OACvD,OAAO,IAAI,CAAC,WAAW,CAACA,OAAwBE;QAGpD,OAAOF;IACX;IAEQ,YACJI,IAAmB,EACnBF,SAAmC,EACA;QACnC,MAAM,EAAEI,WAAW,EAAEC,GAAG,EAAE,GAAGC,QAAQ,GAAGJ;QACxC,MAAMK,WAAWP,UAAU,IAAI,CAACQ,CAAAA,MAAOA,IAAI,EAAE,KAAKJ;QAClD,IAAI,CAACG,UACD;QAGJ,OAAO;YACH,CAACA,SAAS,WAAW,CAAC,EAAE;gBACpB,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACD,QAAQC,SAAS,MAAM,IAAI,EAAE,CAAC;gBACvD,GAAIF,AAAQI,WAARJ,MAAoB;oBAAEA;gBAAI,IAAI,CAAC,CAAC;YACxC;QACJ;IACJ;AACJ;AAEO,MAAMK,8BAA8BC,yBAAyB,oBAAoB,CAAC;IACrF,gBAAgBf;IAChB,cAAc;QAACgB;KAAkB;AACrC"}
|
|
@@ -9,10 +9,24 @@ class ObjectValueTransformerImpl {
|
|
|
9
9
|
const childFields = field.settings?.fields || [];
|
|
10
10
|
if (!value || 0 === childFields.length) return value;
|
|
11
11
|
if (field.list && Array.isArray(value)) return value.map((item)=>{
|
|
12
|
-
if (item && "object" == typeof item)
|
|
12
|
+
if (item && "object" == typeof item) {
|
|
13
|
+
const { _id, ...rest } = item;
|
|
14
|
+
const prepared = this.preparer.prepare(rest, childFields);
|
|
15
|
+
return void 0 !== _id ? {
|
|
16
|
+
_id,
|
|
17
|
+
...prepared
|
|
18
|
+
} : prepared;
|
|
19
|
+
}
|
|
13
20
|
return item;
|
|
14
21
|
});
|
|
15
|
-
if ("object" == typeof value)
|
|
22
|
+
if ("object" == typeof value) {
|
|
23
|
+
const { _id, ...rest } = value;
|
|
24
|
+
const prepared = this.preparer.prepare(rest, childFields);
|
|
25
|
+
return void 0 !== _id ? {
|
|
26
|
+
_id,
|
|
27
|
+
...prepared
|
|
28
|
+
} : prepared;
|
|
29
|
+
}
|
|
16
30
|
return value;
|
|
17
31
|
}
|
|
18
32
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/contentEntry/valueTransformers/ObjectValueTransformer.js","sources":["../../../../src/features/contentEntry/valueTransformers/ObjectValueTransformer.ts"],"sourcesContent":["import { CmsEntryValueTransformer, type ICmsEntryValueTransformer } from \"./abstractions.js\";\nimport { EntryDataPreparer, type IEntryDataPreparer } from \"./EntryDataPreparer.js\";\nimport type { CmsModelField } from \"~/types.js\";\n\nclass ObjectValueTransformerImpl implements ICmsEntryValueTransformer {\n readonly fieldType = \"object\";\n\n constructor(private preparer: IEntryDataPreparer) {}\n\n transform(value: unknown, field: CmsModelField): unknown {\n const childFields: CmsModelField[] = field.settings?.fields || [];\n\n if (!value || childFields.length === 0) {\n return value;\n }\n\n if (field.list && Array.isArray(value)) {\n return value.map(item => {\n if (item && typeof item === \"object\") {\n
|
|
1
|
+
{"version":3,"file":"features/contentEntry/valueTransformers/ObjectValueTransformer.js","sources":["../../../../src/features/contentEntry/valueTransformers/ObjectValueTransformer.ts"],"sourcesContent":["import { CmsEntryValueTransformer, type ICmsEntryValueTransformer } from \"./abstractions.js\";\nimport { EntryDataPreparer, type IEntryDataPreparer } from \"./EntryDataPreparer.js\";\nimport type { CmsModelField } from \"~/types.js\";\n\nclass ObjectValueTransformerImpl implements ICmsEntryValueTransformer {\n readonly fieldType = \"object\";\n\n constructor(private preparer: IEntryDataPreparer) {}\n\n transform(value: unknown, field: CmsModelField): unknown {\n const childFields: CmsModelField[] = field.settings?.fields || [];\n\n if (!value || childFields.length === 0) {\n return value;\n }\n\n if (field.list && Array.isArray(value)) {\n return value.map(item => {\n if (item && typeof item === \"object\") {\n const { _id, ...rest } = item as Record<string, unknown>;\n const prepared = this.preparer.prepare(rest, childFields);\n return _id !== undefined ? { _id, ...prepared } : prepared;\n }\n return item;\n });\n }\n\n if (typeof value === \"object\") {\n const { _id, ...rest } = value as Record<string, unknown>;\n const prepared = this.preparer.prepare(rest, childFields);\n return _id !== undefined ? { _id, ...prepared } : prepared;\n }\n\n return value;\n }\n}\n\nexport const ObjectValueTransformer = CmsEntryValueTransformer.createImplementation({\n implementation: ObjectValueTransformerImpl,\n dependencies: [EntryDataPreparer]\n});\n"],"names":["ObjectValueTransformerImpl","preparer","value","field","childFields","Array","item","_id","rest","prepared","undefined","ObjectValueTransformer","CmsEntryValueTransformer","EntryDataPreparer"],"mappings":";;AAIA,MAAMA;IAGF,YAAoBC,QAA4B,CAAE;aAA9BA,QAAQ,GAARA;aAFX,SAAS,GAAG;IAE8B;IAEnD,UAAUC,KAAc,EAAEC,KAAoB,EAAW;QACrD,MAAMC,cAA+BD,MAAM,QAAQ,EAAE,UAAU,EAAE;QAEjE,IAAI,CAACD,SAASE,AAAuB,MAAvBA,YAAY,MAAM,EAC5B,OAAOF;QAGX,IAAIC,MAAM,IAAI,IAAIE,MAAM,OAAO,CAACH,QAC5B,OAAOA,MAAM,GAAG,CAACI,CAAAA;YACb,IAAIA,QAAQ,AAAgB,YAAhB,OAAOA,MAAmB;gBAClC,MAAM,EAAEC,GAAG,EAAE,GAAGC,MAAM,GAAGF;gBACzB,MAAMG,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACD,MAAMJ;gBAC7C,OAAOG,AAAQG,WAARH,MAAoB;oBAAEA;oBAAK,GAAGE,QAAQ;gBAAC,IAAIA;YACtD;YACA,OAAOH;QACX;QAGJ,IAAI,AAAiB,YAAjB,OAAOJ,OAAoB;YAC3B,MAAM,EAAEK,GAAG,EAAE,GAAGC,MAAM,GAAGN;YACzB,MAAMO,WAAW,IAAI,CAAC,QAAQ,CAAC,OAAO,CAACD,MAAMJ;YAC7C,OAAOG,AAAQG,WAARH,MAAoB;gBAAEA;gBAAK,GAAGE,QAAQ;YAAC,IAAIA;QACtD;QAEA,OAAOP;IACX;AACJ;AAEO,MAAMS,yBAAyBC,yBAAyB,oBAAoB,CAAC;IAChF,gBAAgBZ;IAChB,cAAc;QAACa;KAAkB;AACrC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { applyFieldProps } from "./applyFieldProps.js";
|
|
2
|
+
import { generateAlphaNumericLowerCaseId } from "@webiny/utils/generateId";
|
|
2
3
|
class DynamicZoneFieldMapper {
|
|
3
4
|
map(field, registry, context) {
|
|
4
5
|
const builder = registry.object();
|
|
@@ -13,9 +14,10 @@ class DynamicZoneFieldMapper {
|
|
|
13
14
|
name: icon
|
|
14
15
|
});
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
+
t.fields((childRegistry)=>{
|
|
17
18
|
const result = {};
|
|
18
|
-
|
|
19
|
+
result["_id"] = childRegistry.text().hidden().defaultValue(()=>generateAlphaNumericLowerCaseId(12)).cloneValue(()=>generateAlphaNumericLowerCaseId(12));
|
|
20
|
+
if (template.fields && template.fields.length > 0) for (const child of template.fields)result[child.fieldId] = context.mapField(child, childRegistry);
|
|
19
21
|
return result;
|
|
20
22
|
});
|
|
21
23
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/mappers/DynamicZoneFieldMapper.js","sources":["../../../../src/features/formModel/mappers/DynamicZoneFieldMapper.ts"],"sourcesContent":["import type { ICmsFieldTypeMapper, ICmsFieldMapperContext } from \"../abstractions.js\";\nimport type {\n IFieldBuilder,\n IFieldBuilderRegistry,\n IObjectFieldBuilder\n} from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport type { CmsModelField, CmsDynamicZoneTemplate } from \"~/types.js\";\nimport { applyFieldProps } from \"./applyFieldProps.js\";\nimport type { ITemplateIcon } from \"@webiny/app-admin/features/formModel/index.js\";\n\nexport class DynamicZoneFieldMapper implements ICmsFieldTypeMapper {\n readonly type = \"dynamicZone\";\n\n map(\n field: CmsModelField,\n registry: IFieldBuilderRegistry,\n context: ICmsFieldMapperContext\n ): IFieldBuilder {\n const builder = registry.object() as IObjectFieldBuilder;\n\n const templates = field.settings?.templates as CmsDynamicZoneTemplate[] | undefined;\n if (templates) {\n for (const template of templates) {\n builder.template(template.id, t => {\n t.label(template.name);\n if (template.icon) {\n const icon = template.icon;\n if (typeof icon === \"object\" && \"name\" in icon) {\n t.icon(icon as ITemplateIcon);\n } else if (typeof icon === \"string\") {\n t.icon({ type: \"icon\", name: icon });\n }\n }\n
|
|
1
|
+
{"version":3,"file":"features/formModel/mappers/DynamicZoneFieldMapper.js","sources":["../../../../src/features/formModel/mappers/DynamicZoneFieldMapper.ts"],"sourcesContent":["import type { ICmsFieldTypeMapper, ICmsFieldMapperContext } from \"../abstractions.js\";\nimport type {\n IFieldBuilder,\n IFieldBuilderRegistry,\n IObjectFieldBuilder\n} from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport type { CmsModelField, CmsDynamicZoneTemplate } from \"~/types.js\";\nimport { applyFieldProps } from \"./applyFieldProps.js\";\nimport type { ITemplateIcon } from \"@webiny/app-admin/features/formModel/index.js\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils/generateId\";\n\nexport class DynamicZoneFieldMapper implements ICmsFieldTypeMapper {\n readonly type = \"dynamicZone\";\n\n map(\n field: CmsModelField,\n registry: IFieldBuilderRegistry,\n context: ICmsFieldMapperContext\n ): IFieldBuilder {\n const builder = registry.object() as IObjectFieldBuilder;\n\n const templates = field.settings?.templates as CmsDynamicZoneTemplate[] | undefined;\n if (templates) {\n for (const template of templates) {\n builder.template(template.id, t => {\n t.label(template.name);\n if (template.icon) {\n const icon = template.icon;\n if (typeof icon === \"object\" && \"name\" in icon) {\n t.icon(icon as ITemplateIcon);\n } else if (typeof icon === \"string\") {\n t.icon({ type: \"icon\", name: icon });\n }\n }\n t.fields(childRegistry => {\n const result: Record<string, IFieldBuilder> = {};\n result[\"_id\"] = childRegistry\n .text()\n .hidden()\n .defaultValue(() => generateAlphaNumericLowerCaseId(12))\n .cloneValue(() => generateAlphaNumericLowerCaseId(12));\n if (template.fields && template.fields.length > 0) {\n for (const child of template.fields) {\n result[child.fieldId] = context.mapField(child, childRegistry);\n }\n }\n return result;\n });\n });\n }\n }\n\n return applyFieldProps(builder, field, context.rendererMap);\n }\n}\n"],"names":["DynamicZoneFieldMapper","field","registry","context","builder","templates","template","t","icon","childRegistry","result","generateAlphaNumericLowerCaseId","child","applyFieldProps"],"mappings":";;AAWO,MAAMA;IAGT,IACIC,KAAoB,EACpBC,QAA+B,EAC/BC,OAA+B,EAClB;QACb,MAAMC,UAAUF,SAAS,MAAM;QAE/B,MAAMG,YAAYJ,MAAM,QAAQ,EAAE;QAClC,IAAII,WACA,KAAK,MAAMC,YAAYD,UACnBD,QAAQ,QAAQ,CAACE,SAAS,EAAE,EAAEC,CAAAA;YAC1BA,EAAE,KAAK,CAACD,SAAS,IAAI;YACrB,IAAIA,SAAS,IAAI,EAAE;gBACf,MAAME,OAAOF,SAAS,IAAI;gBAC1B,IAAI,AAAgB,YAAhB,OAAOE,QAAqB,UAAUA,MACtCD,EAAE,IAAI,CAACC;qBACJ,IAAI,AAAgB,YAAhB,OAAOA,MACdD,EAAE,IAAI,CAAC;oBAAE,MAAM;oBAAQ,MAAMC;gBAAK;YAE1C;YACAD,EAAE,MAAM,CAACE,CAAAA;gBACL,MAAMC,SAAwC,CAAC;gBAC/CA,MAAM,CAAC,MAAM,GAAGD,cACX,IAAI,GACJ,MAAM,GACN,YAAY,CAAC,IAAME,gCAAgC,KACnD,UAAU,CAAC,IAAMA,gCAAgC;gBACtD,IAAIL,SAAS,MAAM,IAAIA,SAAS,MAAM,CAAC,MAAM,GAAG,GAC5C,KAAK,MAAMM,SAASN,SAAS,MAAM,CAC/BI,MAAM,CAACE,MAAM,OAAO,CAAC,GAAGT,QAAQ,QAAQ,CAACS,OAAOH;gBAGxD,OAAOC;YACX;QACJ;QAIR,OAAOG,gBAAgBT,SAASH,OAAOE,QAAQ,WAAW;IAC9D;;aAzCS,IAAI,GAAG;;AA0CpB"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { applyFieldProps } from "./applyFieldProps.js";
|
|
2
|
+
import { generateAlphaNumericLowerCaseId } from "@webiny/utils/generateId";
|
|
2
3
|
class ObjectFieldMapper {
|
|
3
4
|
map(field, registry, context) {
|
|
4
5
|
const builder = registry.object();
|
|
5
6
|
const childFields = field.settings?.fields;
|
|
6
7
|
if (childFields && childFields.length > 0) builder.fields((childRegistry)=>{
|
|
7
8
|
const result = {};
|
|
9
|
+
result["_id"] = childRegistry.text().hidden().defaultValue(()=>generateAlphaNumericLowerCaseId(12)).cloneValue(()=>generateAlphaNumericLowerCaseId(12));
|
|
8
10
|
for (const child of childFields)result[child.fieldId] = context.mapField(child, childRegistry);
|
|
9
11
|
return result;
|
|
10
12
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/formModel/mappers/ObjectFieldMapper.js","sources":["../../../../src/features/formModel/mappers/ObjectFieldMapper.ts"],"sourcesContent":["import type { ICmsFieldTypeMapper, ICmsFieldMapperContext } from \"../abstractions.js\";\nimport type {\n IFieldBuilder,\n IFieldBuilderRegistry,\n IObjectFieldBuilder\n} from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport type { CmsModelField } from \"~/types.js\";\nimport { applyFieldProps } from \"./applyFieldProps.js\";\n\nexport class ObjectFieldMapper implements ICmsFieldTypeMapper {\n readonly type = \"object\";\n\n map(\n field: CmsModelField,\n registry: IFieldBuilderRegistry,\n context: ICmsFieldMapperContext\n ): IFieldBuilder {\n const builder = registry.object() as IObjectFieldBuilder;\n\n const childFields = field.settings?.fields;\n if (childFields && childFields.length > 0) {\n builder.fields(childRegistry => {\n const result: Record<string, IFieldBuilder> = {};\n for (const child of childFields) {\n result[child.fieldId] = context.mapField(child, childRegistry);\n }\n return result;\n });\n }\n\n return applyFieldProps(builder, field, context.rendererMap);\n }\n}\n"],"names":["ObjectFieldMapper","field","registry","context","builder","childFields","childRegistry","result","child","applyFieldProps"],"mappings":"
|
|
1
|
+
{"version":3,"file":"features/formModel/mappers/ObjectFieldMapper.js","sources":["../../../../src/features/formModel/mappers/ObjectFieldMapper.ts"],"sourcesContent":["import type { ICmsFieldTypeMapper, ICmsFieldMapperContext } from \"../abstractions.js\";\nimport type {\n IFieldBuilder,\n IFieldBuilderRegistry,\n IObjectFieldBuilder\n} from \"@webiny/app-admin/features/formModel/abstractions.js\";\nimport type { CmsModelField } from \"~/types.js\";\nimport { applyFieldProps } from \"./applyFieldProps.js\";\nimport { generateAlphaNumericLowerCaseId } from \"@webiny/utils/generateId\";\n\nexport class ObjectFieldMapper implements ICmsFieldTypeMapper {\n readonly type = \"object\";\n\n map(\n field: CmsModelField,\n registry: IFieldBuilderRegistry,\n context: ICmsFieldMapperContext\n ): IFieldBuilder {\n const builder = registry.object() as IObjectFieldBuilder;\n\n const childFields = field.settings?.fields;\n if (childFields && childFields.length > 0) {\n builder.fields(childRegistry => {\n const result: Record<string, IFieldBuilder> = {};\n result[\"_id\"] = childRegistry\n .text()\n .hidden()\n .defaultValue(() => generateAlphaNumericLowerCaseId(12))\n .cloneValue(() => generateAlphaNumericLowerCaseId(12));\n for (const child of childFields) {\n result[child.fieldId] = context.mapField(child, childRegistry);\n }\n return result;\n });\n }\n\n return applyFieldProps(builder, field, context.rendererMap);\n }\n}\n"],"names":["ObjectFieldMapper","field","registry","context","builder","childFields","childRegistry","result","generateAlphaNumericLowerCaseId","child","applyFieldProps"],"mappings":";;AAUO,MAAMA;IAGT,IACIC,KAAoB,EACpBC,QAA+B,EAC/BC,OAA+B,EAClB;QACb,MAAMC,UAAUF,SAAS,MAAM;QAE/B,MAAMG,cAAcJ,MAAM,QAAQ,EAAE;QACpC,IAAII,eAAeA,YAAY,MAAM,GAAG,GACpCD,QAAQ,MAAM,CAACE,CAAAA;YACX,MAAMC,SAAwC,CAAC;YAC/CA,MAAM,CAAC,MAAM,GAAGD,cACX,IAAI,GACJ,MAAM,GACN,YAAY,CAAC,IAAME,gCAAgC,KACnD,UAAU,CAAC,IAAMA,gCAAgC;YACtD,KAAK,MAAMC,SAASJ,YAChBE,MAAM,CAACE,MAAM,OAAO,CAAC,GAAGN,QAAQ,QAAQ,CAACM,OAAOH;YAEpD,OAAOC;QACX;QAGJ,OAAOG,gBAAgBN,SAASH,OAAOE,QAAQ,WAAW;IAC9D;;aA1BS,IAAI,GAAG;;AA2BpB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-headless-cms",
|
|
3
|
-
"version": "0.0.0-unstable.
|
|
3
|
+
"version": "0.0.0-unstable.a4f3e4ea8b",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -28,24 +28,25 @@
|
|
|
28
28
|
"@fortawesome/react-fontawesome": "3.5.0",
|
|
29
29
|
"@lexical/utils": "0.48.0",
|
|
30
30
|
"@types/react": "18.3.31",
|
|
31
|
-
"@webiny/admin-ui": "0.0.0-unstable.
|
|
32
|
-
"@webiny/app": "0.0.0-unstable.
|
|
33
|
-
"@webiny/app-aco": "0.0.0-unstable.
|
|
34
|
-
"@webiny/app-admin": "0.0.0-unstable.
|
|
35
|
-
"@webiny/app-graphql-playground": "0.0.0-unstable.
|
|
36
|
-
"@webiny/app-headless-cms-common": "0.0.0-unstable.
|
|
37
|
-
"@webiny/cms-sdk": "0.0.0-unstable.
|
|
31
|
+
"@webiny/admin-ui": "0.0.0-unstable.a4f3e4ea8b",
|
|
32
|
+
"@webiny/app": "0.0.0-unstable.a4f3e4ea8b",
|
|
33
|
+
"@webiny/app-aco": "0.0.0-unstable.a4f3e4ea8b",
|
|
34
|
+
"@webiny/app-admin": "0.0.0-unstable.a4f3e4ea8b",
|
|
35
|
+
"@webiny/app-graphql-playground": "0.0.0-unstable.a4f3e4ea8b",
|
|
36
|
+
"@webiny/app-headless-cms-common": "0.0.0-unstable.a4f3e4ea8b",
|
|
37
|
+
"@webiny/cms-sdk": "0.0.0-unstable.a4f3e4ea8b",
|
|
38
38
|
"@webiny/di": "1.0.2",
|
|
39
|
-
"@webiny/feature": "0.0.0-unstable.
|
|
40
|
-
"@webiny/form": "0.0.0-unstable.
|
|
41
|
-
"@webiny/
|
|
42
|
-
"@webiny/
|
|
43
|
-
"@webiny/lexical-
|
|
44
|
-
"@webiny/
|
|
45
|
-
"@webiny/
|
|
46
|
-
"@webiny/react-
|
|
47
|
-
"@webiny/
|
|
48
|
-
"@webiny/
|
|
39
|
+
"@webiny/feature": "0.0.0-unstable.a4f3e4ea8b",
|
|
40
|
+
"@webiny/form": "0.0.0-unstable.a4f3e4ea8b",
|
|
41
|
+
"@webiny/frontend-settings": "0.0.0-unstable.a4f3e4ea8b",
|
|
42
|
+
"@webiny/icons": "0.0.0-unstable.a4f3e4ea8b",
|
|
43
|
+
"@webiny/lexical-editor": "0.0.0-unstable.a4f3e4ea8b",
|
|
44
|
+
"@webiny/lexical-nodes": "0.0.0-unstable.a4f3e4ea8b",
|
|
45
|
+
"@webiny/plugins": "0.0.0-unstable.a4f3e4ea8b",
|
|
46
|
+
"@webiny/react-composition": "0.0.0-unstable.a4f3e4ea8b",
|
|
47
|
+
"@webiny/react-properties": "0.0.0-unstable.a4f3e4ea8b",
|
|
48
|
+
"@webiny/utils": "0.0.0-unstable.a4f3e4ea8b",
|
|
49
|
+
"@webiny/validation": "0.0.0-unstable.a4f3e4ea8b",
|
|
49
50
|
"dot-prop-immutable": "2.1.1",
|
|
50
51
|
"graphql": "16.14.2",
|
|
51
52
|
"graphql-tag": "2.12.7",
|
|
@@ -62,7 +63,7 @@
|
|
|
62
63
|
"zod": "4.4.3"
|
|
63
64
|
},
|
|
64
65
|
"devDependencies": {
|
|
65
|
-
"@webiny/build-tools": "0.0.0-unstable.
|
|
66
|
+
"@webiny/build-tools": "0.0.0-unstable.a4f3e4ea8b",
|
|
66
67
|
"rimraf": "6.1.3",
|
|
67
68
|
"typescript": "7.0.2",
|
|
68
69
|
"vitest": "4.1.10"
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { FormModelFactory } from "@webiny/app-admin/features/formModel/abstractions.js";
|
|
2
2
|
import { Confirmation } from "@webiny/app-admin/features/confirmation/abstractions.js";
|
|
3
|
+
import type { CmsContentEntry } from "../../../types.js";
|
|
3
4
|
import { GetEntryUseCase } from "../../../features/contentEntry/getEntry/abstractions.js";
|
|
4
5
|
import { CreateEntryUseCase } from "../../../features/contentEntry/createEntry/abstractions.js";
|
|
5
6
|
import { UpdateEntryUseCase } from "../../../features/contentEntry/updateEntry/abstractions.js";
|
|
@@ -42,6 +43,7 @@ declare class ContentEntryFormPresenterImpl implements Abstraction.Interface {
|
|
|
42
43
|
loadRevision(id: string): Promise<void>;
|
|
43
44
|
setFolderId(folderId: string | null): void;
|
|
44
45
|
newEntry(initialValues?: Record<string, unknown>): void;
|
|
46
|
+
patchEntryMeta(meta: Partial<CmsContentEntry["meta"]>): void;
|
|
45
47
|
reset(): void;
|
|
46
48
|
private buildForm;
|
|
47
49
|
private buildAndPopulateForm;
|
|
@@ -227,6 +227,16 @@ class ContentEntryFormPresenterImpl {
|
|
|
227
227
|
dirty: true
|
|
228
228
|
});
|
|
229
229
|
}
|
|
230
|
+
patchEntryMeta(meta) {
|
|
231
|
+
if (!this.entry) return;
|
|
232
|
+
this.entry = {
|
|
233
|
+
...this.entry,
|
|
234
|
+
meta: {
|
|
235
|
+
...this.entry.meta,
|
|
236
|
+
...meta
|
|
237
|
+
}
|
|
238
|
+
};
|
|
239
|
+
}
|
|
230
240
|
reset() {
|
|
231
241
|
this.form = null;
|
|
232
242
|
this.entry = null;
|