@webiny/app-website-builder 6.5.0-beta.0 → 6.5.0-beta.2
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/Extension.js +3 -0
- package/Extension.js.map +1 -1
- package/domain/Page/Page.d.ts +2 -0
- package/domain/Page/Page.js +1 -0
- package/domain/Page/Page.js.map +1 -1
- package/domain/PageRevision/PageRevision.d.ts +11 -0
- package/domain/PageRevision/PageRevision.js +20 -0
- package/domain/PageRevision/PageRevision.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js +41 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js.map +1 -1
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.d.ts +3 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js +8 -2
- package/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevision.test.d.ts +1 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js +67 -0
- package/features/pages/deletePageRevision/DeletePageRevision.test.js.map +1 -0
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.d.ts +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js +2 -3
- package/features/pages/deletePageRevision/DeletePageRevisionGateway.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.d.ts +4 -2
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js +7 -3
- package/features/pages/deletePageRevision/DeletePageRevisionRepository.js.map +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js +1 -1
- package/features/pages/deletePageRevision/DeletePageRevisionUseCase.js.map +1 -1
- package/features/pages/deletePageRevision/abstractions.d.ts +2 -3
- package/features/pages/deletePageRevision/abstractions.js.map +1 -1
- package/features/pages/getPage/PageGatewayDto.d.ts +2 -0
- package/features/pages/publishPage/PublishPage.test.js +41 -1
- package/features/pages/publishPage/PublishPage.test.js.map +1 -1
- package/features/pages/publishPage/PublishPageRepository.d.ts +3 -2
- package/features/pages/publishPage/PublishPageRepository.js +15 -4
- package/features/pages/publishPage/PublishPageRepository.js.map +1 -1
- package/features/pages/shared/pageGraphQLFields.js +1 -0
- package/features/pages/shared/pageGraphQLFields.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js +4 -1
- package/features/pages/unpublishPage/UnpublishPage.test.js.map +1 -1
- package/features/pages/unpublishPage/UnpublishPageRepository.d.ts +3 -2
- package/features/pages/unpublishPage/UnpublishPageRepository.js +12 -4
- package/features/pages/unpublishPage/UnpublishPageRepository.js.map +1 -1
- package/inputRenderers/FileInput.js +1 -1
- package/inputRenderers/FileInput.js.map +1 -1
- package/package.json +23 -23
- package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js +4 -0
- package/presentation/pages/PageEditor/Revisions/RevisionListDrawer.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.d.ts +3 -3
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.js +9 -20
- package/presentation/pages/PageEditor/Revisions/RevisionListItem.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/RevisionsList.js +7 -19
- package/presentation/pages/PageEditor/Revisions/RevisionsList.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevision.d.ts +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevision.js +84 -14
- package/presentation/pages/PageEditor/Revisions/useRevision.js.map +1 -1
- package/presentation/pages/PageEditor/Revisions/useRevisionList.d.ts +3 -0
- package/presentation/pages/PageEditor/Revisions/useRevisionList.js +31 -0
- package/presentation/pages/PageEditor/Revisions/useRevisionList.js.map +1 -0
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js +7 -19
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js.map +1 -1
- package/presentation/pages/PageList/PageListDataSource.js +1 -1
- package/presentation/pages/PageList/PageListDataSource.js.map +1 -1
- package/presentation/pages/PageList/PageListPresenter.test.d.ts +1 -0
- package/presentation/pages/PageList/PageListPresenter.test.js +293 -0
- package/presentation/pages/PageList/PageListPresenter.test.js.map +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.d.ts +27 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js +73 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.js.map +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.d.ts +1 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js +219 -0
- package/presentation/pages/RevisionList/RevisionListPresenter.test.js.map +1 -0
- package/presentation/pages/RevisionList/abstractions.d.ts +34 -0
- package/presentation/pages/RevisionList/abstractions.js +5 -0
- package/presentation/pages/RevisionList/abstractions.js.map +1 -0
- package/presentation/pages/RevisionList/feature.d.ts +3 -0
- package/presentation/pages/RevisionList/feature.js +17 -0
- package/presentation/pages/RevisionList/feature.js.map +1 -0
- package/presentation/pages/RevisionList/index.d.ts +2 -0
- package/presentation/pages/RevisionList/index.js +1 -0
- package/presentation/redirects/RedirectList/RedirectListDataSource.js +1 -1
- package/presentation/redirects/RedirectList/RedirectListDataSource.js.map +1 -1
- package/presentation/redirects/RedirectList/RedirectListPresenter.test.d.ts +1 -0
- package/presentation/redirects/RedirectList/RedirectListPresenter.test.js +273 -0
- package/presentation/redirects/RedirectList/RedirectListPresenter.test.js.map +1 -0
- package/shared/fileManagerItemToValue.js +3 -1
- package/shared/fileManagerItemToValue.js.map +1 -1
- package/shared/fileManagerItemToValue.test.d.ts +1 -0
- package/shared/fileManagerItemToValue.test.js +73 -0
- package/shared/fileManagerItemToValue.test.js.map +1 -0
package/Extension.js
CHANGED
|
@@ -24,6 +24,7 @@ import { UpdatePageRevisionDescriptionFeature } from "./features/pages/updatePag
|
|
|
24
24
|
import { CreatePageFeature } from "./features/pages/createPage/index.js";
|
|
25
25
|
import { GetPageFeature } from "./features/pages/getPage/index.js";
|
|
26
26
|
import { GetPageRevisionsFeature } from "./features/pages/getPageRevisions/index.js";
|
|
27
|
+
import { RevisionListFeature } from "./presentation/pages/RevisionList/feature.js";
|
|
27
28
|
import { SharedPageInfrastructureFeature } from "./features/pages/shared/feature.js";
|
|
28
29
|
import { CreatePageConfig } from "./presentation/pages/CreatePage/CreatePageConfig.js";
|
|
29
30
|
import { TranslatePageConfig } from "./presentation/pages/TranslatePage/TranslatePageConfig.js";
|
|
@@ -66,6 +67,8 @@ const Extension = ()=>{
|
|
|
66
67
|
feature: GetPageFeature
|
|
67
68
|
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
68
69
|
feature: GetPageRevisionsFeature
|
|
70
|
+
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
71
|
+
feature: RevisionListFeature
|
|
69
72
|
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
|
70
73
|
feature: feature_js_CreatePageFeature
|
|
71
74
|
}), /*#__PURE__*/ react.createElement(RegisterFeature, {
|
package/Extension.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Extension.js","sources":["../src/Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, RegisterFeature, useRouter } from \"@webiny/app-admin\";\nimport {\n ReactComponent as PagesIcon,\n ReactComponent as PermissionsIcon\n} from \"@webiny/icons/table_chart.svg\";\nimport { PageEditor } from \"~/presentation/pages/PageEditor/PageEditor.js\";\nimport { PagesList } from \"~/presentation/pages/PageList/components/PagesList.js\";\nimport { useIntegrationsDialog } from \"./modules/integrations/useIntegrationsDialog.js\";\nimport { PagesListConfig } from \"~/presentation/pages/PageList/components/PagesListConfig.js\";\nimport { RedirectsList } from \"~/presentation/redirects/RedirectList/components/RedirectsList.js\";\nimport { RedirectsListConfig } from \"~/presentation/redirects/RedirectList/components/RedirectsListConfig.js\";\nimport { Routes } from \"~/routes.js\";\nimport { PagesWidget } from \"~/modules/widgets/PagesWidget.js\";\nimport { WB_PERMISSIONS_SCHEMA } from \"~/constants.js\";\nimport { WbPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { HasPermission } from \"~/presentation/security/HasPermission.js\";\nimport { TranslatePageFeature } from \"~/features/pages/translatePage/index.js\";\nimport { DeletePageFeature } from \"~/features/pages/deletePage/index.js\";\nimport { MovePageFeature } from \"~/features/pages/movePage/index.js\";\nimport { PublishPageFeature } from \"~/features/pages/publishPage/index.js\";\nimport { UnpublishPageFeature } from \"~/features/pages/unpublishPage/index.js\";\nimport { DuplicatePageFeature } from \"~/features/pages/duplicatePage/index.js\";\nimport { CreatePageRevisionFromFeature } from \"~/features/pages/createPageRevisionFrom/index.js\";\nimport { UpdatePageFeature } from \"~/features/pages/updatePage/index.js\";\nimport { UpdatePageRevisionDescriptionFeature } from \"~/features/pages/updatePageRevisionDescription/index.js\";\nimport { CreatePageFeature as CreatePageHeadlessFeature } from \"~/features/pages/createPage/index.js\";\nimport { GetPageFeature } from \"~/features/pages/getPage/index.js\";\nimport { GetPageRevisionsFeature } from \"~/features/pages/getPageRevisions/index.js\";\nimport { SharedPageInfrastructureFeature } from \"~/features/pages/shared/feature.js\";\nimport { CreatePageConfig } from \"./presentation/pages/CreatePage/CreatePageConfig.js\";\nimport { TranslatePageConfig } from \"./presentation/pages/TranslatePage/TranslatePageConfig.js\";\nimport { CreatePageFeature } from \"~/presentation/pages/CreatePage/feature.js\";\nimport { PageSettingsFeature } from \"~/presentation/pages/PageEditor/PageSettings/feature.js\";\nimport { DeletePageRevisionFeature } from \"~/features/pages/deletePageRevision/index.js\";\nimport { GetSettingsFeature } from \"~/features/settings/getSettings/index.js\";\nimport { GetEcommerceSettingsFeature } from \"~/features/ecommerce/settings/getSettings/index.js\";\nimport { UpdateEcommerceSettingsFeature } from \"~/features/ecommerce/settings/updateSettings/index.js\";\n\nconst { Security, Menu, Route, Dashboard } = AdminConfig;\n\nexport const Extension = () => {\n const router = useRouter();\n\n return (\n <>\n <RegisterFeature feature={SharedPageInfrastructureFeature} />\n <RegisterFeature feature={WbPermissionsFeature} />\n <RegisterFeature feature={TranslatePageFeature} />\n <RegisterFeature feature={DeletePageFeature} />\n <RegisterFeature feature={DeletePageRevisionFeature} />\n <RegisterFeature feature={MovePageFeature} />\n <RegisterFeature feature={PublishPageFeature} />\n <RegisterFeature feature={UnpublishPageFeature} />\n <RegisterFeature feature={DuplicatePageFeature} />\n <RegisterFeature feature={CreatePageRevisionFromFeature} />\n <RegisterFeature feature={UpdatePageFeature} />\n <RegisterFeature feature={UpdatePageRevisionDescriptionFeature} />\n <RegisterFeature feature={CreatePageHeadlessFeature} />\n <RegisterFeature feature={GetPageFeature} />\n <RegisterFeature feature={GetPageRevisionsFeature} />\n <RegisterFeature feature={CreatePageFeature} />\n <RegisterFeature feature={PageSettingsFeature} />\n <RegisterFeature feature={GetSettingsFeature} />\n <RegisterFeature feature={GetEcommerceSettingsFeature} />\n <RegisterFeature feature={UpdateEcommerceSettingsFeature} />\n <AdminConfig>\n <Security.Permissions\n name=\"website-builder\"\n title=\"Website Builder\"\n description=\"Manage Website Builder permissions.\"\n icon={<PermissionsIcon />}\n schema={WB_PERMISSIONS_SCHEMA}\n />\n <HasPermission any={[\"page\", \"redirect\"]}>\n <Menu\n name=\"wb\"\n element={\n <Menu.Item\n text={\"Website Builder\"}\n icon={\n <Menu.Link.Icon\n label={\"Website Builder\"}\n element={<PagesIcon />}\n />\n }\n />\n }\n />\n </HasPermission>\n\n <HasPermission entity={\"page\"}>\n <Route route={Routes.Pages.List} element={<PagesList />} />\n <Route route={Routes.Pages.Editor} element={<PageEditor />} />\n <Menu\n name=\"wb.pages\"\n parent={\"wb\"}\n element={\n <Menu.Link\n text={\"Pages\"}\n to={router.getLink(Routes.Pages.List)}\n pinnable={true}\n />\n }\n />\n <Dashboard.Widget name=\"wb.pages\" column={\"left\"} element={<PagesWidget />} />\n </HasPermission>\n\n <HasPermission entity={\"redirect\"}>\n <Route route={Routes.Redirects.List} element={<RedirectsList />} />\n <Menu\n name=\"wb.redirects\"\n parent={\"wb\"}\n element={\n <Menu.Link\n text={\"Redirects\"}\n to={router.getLink(Routes.Redirects.List)}\n pinnable={true}\n />\n }\n />\n </HasPermission>\n <HasPermission entity={\"integrations\"}>\n <Menu name=\"wb.integrations\" parent=\"wb\" element={<IntegrationsMenuItem />} />\n </HasPermission>\n </AdminConfig>\n <PagesListConfig />\n <RedirectsListConfig />\n <CreatePageConfig />\n <TranslatePageConfig />\n </>\n );\n};\n\nExtension.displayName = \"WbExtension\";\n\nconst IntegrationsMenuItem = () => {\n const { showIntegrationsDialog } = useIntegrationsDialog();\n return <Menu.Item text={\"Integrations\"} onClick={showIntegrationsDialog} pinnable={true} />;\n};\n"],"names":["Security","Menu","Route","Dashboard","AdminConfig","Extension","router","useRouter","RegisterFeature","SharedPageInfrastructureFeature","WbPermissionsFeature","TranslatePageFeature","DeletePageFeature","DeletePageRevisionFeature","MovePageFeature","PublishPageFeature","UnpublishPageFeature","DuplicatePageFeature","CreatePageRevisionFromFeature","UpdatePageFeature","UpdatePageRevisionDescriptionFeature","CreatePageHeadlessFeature","GetPageFeature","GetPageRevisionsFeature","CreatePageFeature","PageSettingsFeature","GetSettingsFeature","GetEcommerceSettingsFeature","UpdateEcommerceSettingsFeature","PermissionsIcon","WB_PERMISSIONS_SCHEMA","HasPermission","PagesIcon","Routes","PagesList","PageEditor","PagesWidget","RedirectsList","IntegrationsMenuItem","PagesListConfig","RedirectsListConfig","CreatePageConfig","TranslatePageConfig","showIntegrationsDialog","useIntegrationsDialog"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Extension.js","sources":["../src/Extension.tsx"],"sourcesContent":["import React from \"react\";\nimport { AdminConfig, RegisterFeature, useRouter } from \"@webiny/app-admin\";\nimport {\n ReactComponent as PagesIcon,\n ReactComponent as PermissionsIcon\n} from \"@webiny/icons/table_chart.svg\";\nimport { PageEditor } from \"~/presentation/pages/PageEditor/PageEditor.js\";\nimport { PagesList } from \"~/presentation/pages/PageList/components/PagesList.js\";\nimport { useIntegrationsDialog } from \"./modules/integrations/useIntegrationsDialog.js\";\nimport { PagesListConfig } from \"~/presentation/pages/PageList/components/PagesListConfig.js\";\nimport { RedirectsList } from \"~/presentation/redirects/RedirectList/components/RedirectsList.js\";\nimport { RedirectsListConfig } from \"~/presentation/redirects/RedirectList/components/RedirectsListConfig.js\";\nimport { Routes } from \"~/routes.js\";\nimport { PagesWidget } from \"~/modules/widgets/PagesWidget.js\";\nimport { WB_PERMISSIONS_SCHEMA } from \"~/constants.js\";\nimport { WbPermissionsFeature } from \"~/features/permissions/feature.js\";\nimport { HasPermission } from \"~/presentation/security/HasPermission.js\";\nimport { TranslatePageFeature } from \"~/features/pages/translatePage/index.js\";\nimport { DeletePageFeature } from \"~/features/pages/deletePage/index.js\";\nimport { MovePageFeature } from \"~/features/pages/movePage/index.js\";\nimport { PublishPageFeature } from \"~/features/pages/publishPage/index.js\";\nimport { UnpublishPageFeature } from \"~/features/pages/unpublishPage/index.js\";\nimport { DuplicatePageFeature } from \"~/features/pages/duplicatePage/index.js\";\nimport { CreatePageRevisionFromFeature } from \"~/features/pages/createPageRevisionFrom/index.js\";\nimport { UpdatePageFeature } from \"~/features/pages/updatePage/index.js\";\nimport { UpdatePageRevisionDescriptionFeature } from \"~/features/pages/updatePageRevisionDescription/index.js\";\nimport { CreatePageFeature as CreatePageHeadlessFeature } from \"~/features/pages/createPage/index.js\";\nimport { GetPageFeature } from \"~/features/pages/getPage/index.js\";\nimport { GetPageRevisionsFeature } from \"~/features/pages/getPageRevisions/index.js\";\nimport { RevisionListFeature } from \"~/presentation/pages/RevisionList/feature.js\";\nimport { SharedPageInfrastructureFeature } from \"~/features/pages/shared/feature.js\";\nimport { CreatePageConfig } from \"./presentation/pages/CreatePage/CreatePageConfig.js\";\nimport { TranslatePageConfig } from \"./presentation/pages/TranslatePage/TranslatePageConfig.js\";\nimport { CreatePageFeature } from \"~/presentation/pages/CreatePage/feature.js\";\nimport { PageSettingsFeature } from \"~/presentation/pages/PageEditor/PageSettings/feature.js\";\nimport { DeletePageRevisionFeature } from \"~/features/pages/deletePageRevision/index.js\";\nimport { GetSettingsFeature } from \"~/features/settings/getSettings/index.js\";\nimport { GetEcommerceSettingsFeature } from \"~/features/ecommerce/settings/getSettings/index.js\";\nimport { UpdateEcommerceSettingsFeature } from \"~/features/ecommerce/settings/updateSettings/index.js\";\n\nconst { Security, Menu, Route, Dashboard } = AdminConfig;\n\nexport const Extension = () => {\n const router = useRouter();\n\n return (\n <>\n <RegisterFeature feature={SharedPageInfrastructureFeature} />\n <RegisterFeature feature={WbPermissionsFeature} />\n <RegisterFeature feature={TranslatePageFeature} />\n <RegisterFeature feature={DeletePageFeature} />\n <RegisterFeature feature={DeletePageRevisionFeature} />\n <RegisterFeature feature={MovePageFeature} />\n <RegisterFeature feature={PublishPageFeature} />\n <RegisterFeature feature={UnpublishPageFeature} />\n <RegisterFeature feature={DuplicatePageFeature} />\n <RegisterFeature feature={CreatePageRevisionFromFeature} />\n <RegisterFeature feature={UpdatePageFeature} />\n <RegisterFeature feature={UpdatePageRevisionDescriptionFeature} />\n <RegisterFeature feature={CreatePageHeadlessFeature} />\n <RegisterFeature feature={GetPageFeature} />\n <RegisterFeature feature={GetPageRevisionsFeature} />\n <RegisterFeature feature={RevisionListFeature} />\n <RegisterFeature feature={CreatePageFeature} />\n <RegisterFeature feature={PageSettingsFeature} />\n <RegisterFeature feature={GetSettingsFeature} />\n <RegisterFeature feature={GetEcommerceSettingsFeature} />\n <RegisterFeature feature={UpdateEcommerceSettingsFeature} />\n <AdminConfig>\n <Security.Permissions\n name=\"website-builder\"\n title=\"Website Builder\"\n description=\"Manage Website Builder permissions.\"\n icon={<PermissionsIcon />}\n schema={WB_PERMISSIONS_SCHEMA}\n />\n <HasPermission any={[\"page\", \"redirect\"]}>\n <Menu\n name=\"wb\"\n element={\n <Menu.Item\n text={\"Website Builder\"}\n icon={\n <Menu.Link.Icon\n label={\"Website Builder\"}\n element={<PagesIcon />}\n />\n }\n />\n }\n />\n </HasPermission>\n\n <HasPermission entity={\"page\"}>\n <Route route={Routes.Pages.List} element={<PagesList />} />\n <Route route={Routes.Pages.Editor} element={<PageEditor />} />\n <Menu\n name=\"wb.pages\"\n parent={\"wb\"}\n element={\n <Menu.Link\n text={\"Pages\"}\n to={router.getLink(Routes.Pages.List)}\n pinnable={true}\n />\n }\n />\n <Dashboard.Widget name=\"wb.pages\" column={\"left\"} element={<PagesWidget />} />\n </HasPermission>\n\n <HasPermission entity={\"redirect\"}>\n <Route route={Routes.Redirects.List} element={<RedirectsList />} />\n <Menu\n name=\"wb.redirects\"\n parent={\"wb\"}\n element={\n <Menu.Link\n text={\"Redirects\"}\n to={router.getLink(Routes.Redirects.List)}\n pinnable={true}\n />\n }\n />\n </HasPermission>\n <HasPermission entity={\"integrations\"}>\n <Menu name=\"wb.integrations\" parent=\"wb\" element={<IntegrationsMenuItem />} />\n </HasPermission>\n </AdminConfig>\n <PagesListConfig />\n <RedirectsListConfig />\n <CreatePageConfig />\n <TranslatePageConfig />\n </>\n );\n};\n\nExtension.displayName = \"WbExtension\";\n\nconst IntegrationsMenuItem = () => {\n const { showIntegrationsDialog } = useIntegrationsDialog();\n return <Menu.Item text={\"Integrations\"} onClick={showIntegrationsDialog} pinnable={true} />;\n};\n"],"names":["Security","Menu","Route","Dashboard","AdminConfig","Extension","router","useRouter","RegisterFeature","SharedPageInfrastructureFeature","WbPermissionsFeature","TranslatePageFeature","DeletePageFeature","DeletePageRevisionFeature","MovePageFeature","PublishPageFeature","UnpublishPageFeature","DuplicatePageFeature","CreatePageRevisionFromFeature","UpdatePageFeature","UpdatePageRevisionDescriptionFeature","CreatePageHeadlessFeature","GetPageFeature","GetPageRevisionsFeature","RevisionListFeature","CreatePageFeature","PageSettingsFeature","GetSettingsFeature","GetEcommerceSettingsFeature","UpdateEcommerceSettingsFeature","PermissionsIcon","WB_PERMISSIONS_SCHEMA","HasPermission","PagesIcon","Routes","PagesList","PageEditor","PagesWidget","RedirectsList","IntegrationsMenuItem","PagesListConfig","RedirectsListConfig","CreatePageConfig","TranslatePageConfig","showIntegrationsDialog","useIntegrationsDialog"],"mappings":"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"}
|
package/domain/Page/Page.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ export interface PageData {
|
|
|
5
5
|
entryId?: string;
|
|
6
6
|
status?: WbStatus;
|
|
7
7
|
version?: number;
|
|
8
|
+
locked?: boolean;
|
|
8
9
|
location?: WbLocation;
|
|
9
10
|
properties?: Record<string, any>;
|
|
10
11
|
metadata?: Record<string, any>;
|
|
@@ -26,6 +27,7 @@ export declare class Page {
|
|
|
26
27
|
entryId: string;
|
|
27
28
|
status: WbStatus;
|
|
28
29
|
version: number;
|
|
30
|
+
locked: boolean;
|
|
29
31
|
location: WbLocation;
|
|
30
32
|
properties: Record<string, any>;
|
|
31
33
|
metadata: Record<string, any>;
|
package/domain/Page/Page.js
CHANGED
|
@@ -6,6 +6,7 @@ class Page {
|
|
|
6
6
|
this.entryId = data.entryId ?? "";
|
|
7
7
|
this.status = data.status ?? WbPageStatus.Draft;
|
|
8
8
|
this.version = data.version ?? 1;
|
|
9
|
+
this.locked = data.locked ?? false;
|
|
9
10
|
this.location = this.createLocation(data);
|
|
10
11
|
this.properties = data.properties ?? {};
|
|
11
12
|
this.metadata = data.metadata ?? {};
|
package/domain/Page/Page.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain/Page/Page.js","sources":["../../../src/domain/Page/Page.ts"],"sourcesContent":["import type { WbIdentity, WbLive, WbLocation, WbPageSystem } from \"~/types.js\";\nimport { ROOT_FOLDER, WbPageStatus, type WbStatus } from \"~/constants.js\";\n\nexport interface PageData {\n id?: string;\n entryId?: string;\n status?: WbStatus;\n version?: number;\n location?: WbLocation;\n properties?: Record<string, any>;\n metadata?: Record<string, any>;\n bindings?: Record<string, any>;\n elements?: Record<string, any>;\n extensions?: Record<string, any>;\n createdBy?: WbIdentity;\n createdOn?: string;\n savedBy?: WbIdentity;\n savedOn?: string;\n modifiedBy?: WbIdentity | null;\n modifiedOn?: string | null;\n system?: WbPageSystem | null;\n live?: WbLive | null;\n revisionDescription?: string;\n}\n\nexport class Page {\n public id: string;\n public entryId: string;\n public status: WbStatus;\n public version: number;\n public location: WbLocation;\n public properties: Record<string, any>;\n public metadata: Record<string, any>;\n public bindings: Record<string, any>;\n public elements: Record<string, any>;\n public extensions: Record<string, any>;\n public createdBy: WbIdentity;\n public createdOn: string;\n public savedBy: WbIdentity;\n public savedOn: string;\n public modifiedBy: WbIdentity;\n public modifiedOn: string;\n public system: WbPageSystem | null;\n public live: WbLive | null = null;\n public revisionDescription?: string | undefined;\n\n protected constructor(data: PageData) {\n this.id = data.id ?? \"\";\n this.entryId = data.entryId ?? \"\";\n this.status = data.status ?? WbPageStatus.Draft;\n this.version = data.version ?? 1;\n this.location = this.createLocation(data);\n this.properties = data.properties ?? {};\n this.metadata = data.metadata ?? {};\n this.bindings = data.bindings ?? {};\n this.elements = data.elements ?? {};\n this.extensions = data.extensions ?? {};\n this.createdBy = this.createIdentity(data.createdBy);\n this.createdOn = data.createdOn ?? \"\";\n this.savedBy = this.createIdentity(data.savedBy);\n this.savedOn = data.savedOn ?? \"\";\n this.modifiedBy = this.createIdentity(data.modifiedBy);\n this.modifiedOn = data.modifiedOn ?? \"\";\n this.system = data.system || null;\n this.live = data.live || null;\n this.revisionDescription = data.revisionDescription;\n }\n\n static create(data: PageData) {\n return new Page(data);\n }\n\n private createLocation(data: PageData): WbLocation {\n if (data.location) {\n return {\n folderId: data.location.folderId\n };\n }\n\n return {\n folderId: ROOT_FOLDER\n };\n }\n\n private createIdentity(identity?: WbIdentity | null): WbIdentity {\n return {\n id: identity?.id || \"\",\n displayName: identity?.displayName || \"\",\n type: identity?.type || \"\"\n };\n }\n}\n"],"names":["Page","data","WbPageStatus","ROOT_FOLDER","identity"],"mappings":";
|
|
1
|
+
{"version":3,"file":"domain/Page/Page.js","sources":["../../../src/domain/Page/Page.ts"],"sourcesContent":["import type { WbIdentity, WbLive, WbLocation, WbPageSystem } from \"~/types.js\";\nimport { ROOT_FOLDER, WbPageStatus, type WbStatus } from \"~/constants.js\";\n\nexport interface PageData {\n id?: string;\n entryId?: string;\n status?: WbStatus;\n version?: number;\n locked?: boolean;\n location?: WbLocation;\n properties?: Record<string, any>;\n metadata?: Record<string, any>;\n bindings?: Record<string, any>;\n elements?: Record<string, any>;\n extensions?: Record<string, any>;\n createdBy?: WbIdentity;\n createdOn?: string;\n savedBy?: WbIdentity;\n savedOn?: string;\n modifiedBy?: WbIdentity | null;\n modifiedOn?: string | null;\n system?: WbPageSystem | null;\n live?: WbLive | null;\n revisionDescription?: string;\n}\n\nexport class Page {\n public id: string;\n public entryId: string;\n public status: WbStatus;\n public version: number;\n public locked: boolean;\n public location: WbLocation;\n public properties: Record<string, any>;\n public metadata: Record<string, any>;\n public bindings: Record<string, any>;\n public elements: Record<string, any>;\n public extensions: Record<string, any>;\n public createdBy: WbIdentity;\n public createdOn: string;\n public savedBy: WbIdentity;\n public savedOn: string;\n public modifiedBy: WbIdentity;\n public modifiedOn: string;\n public system: WbPageSystem | null;\n public live: WbLive | null = null;\n public revisionDescription?: string | undefined;\n\n protected constructor(data: PageData) {\n this.id = data.id ?? \"\";\n this.entryId = data.entryId ?? \"\";\n this.status = data.status ?? WbPageStatus.Draft;\n this.version = data.version ?? 1;\n this.locked = data.locked ?? false;\n this.location = this.createLocation(data);\n this.properties = data.properties ?? {};\n this.metadata = data.metadata ?? {};\n this.bindings = data.bindings ?? {};\n this.elements = data.elements ?? {};\n this.extensions = data.extensions ?? {};\n this.createdBy = this.createIdentity(data.createdBy);\n this.createdOn = data.createdOn ?? \"\";\n this.savedBy = this.createIdentity(data.savedBy);\n this.savedOn = data.savedOn ?? \"\";\n this.modifiedBy = this.createIdentity(data.modifiedBy);\n this.modifiedOn = data.modifiedOn ?? \"\";\n this.system = data.system || null;\n this.live = data.live || null;\n this.revisionDescription = data.revisionDescription;\n }\n\n static create(data: PageData) {\n return new Page(data);\n }\n\n private createLocation(data: PageData): WbLocation {\n if (data.location) {\n return {\n folderId: data.location.folderId\n };\n }\n\n return {\n folderId: ROOT_FOLDER\n };\n }\n\n private createIdentity(identity?: WbIdentity | null): WbIdentity {\n return {\n id: identity?.id || \"\",\n displayName: identity?.displayName || \"\",\n type: identity?.type || \"\"\n };\n }\n}\n"],"names":["Page","data","WbPageStatus","ROOT_FOLDER","identity"],"mappings":";AA0BO,MAAMA;IAsBT,YAAsBC,IAAc,CAAE;aAH/B,IAAI,GAAkB;QAIzB,IAAI,CAAC,EAAE,GAAGA,KAAK,EAAE,IAAI;QACrB,IAAI,CAAC,OAAO,GAAGA,KAAK,OAAO,IAAI;QAC/B,IAAI,CAAC,MAAM,GAAGA,KAAK,MAAM,IAAIC,aAAa,KAAK;QAC/C,IAAI,CAAC,OAAO,GAAGD,KAAK,OAAO,IAAI;QAC/B,IAAI,CAAC,MAAM,GAAGA,KAAK,MAAM,IAAI;QAC7B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,cAAc,CAACA;QACpC,IAAI,CAAC,UAAU,GAAGA,KAAK,UAAU,IAAI,CAAC;QACtC,IAAI,CAAC,QAAQ,GAAGA,KAAK,QAAQ,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAGA,KAAK,QAAQ,IAAI,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAGA,KAAK,QAAQ,IAAI,CAAC;QAClC,IAAI,CAAC,UAAU,GAAGA,KAAK,UAAU,IAAI,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,cAAc,CAACA,KAAK,SAAS;QACnD,IAAI,CAAC,SAAS,GAAGA,KAAK,SAAS,IAAI;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,cAAc,CAACA,KAAK,OAAO;QAC/C,IAAI,CAAC,OAAO,GAAGA,KAAK,OAAO,IAAI;QAC/B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAACA,KAAK,UAAU;QACrD,IAAI,CAAC,UAAU,GAAGA,KAAK,UAAU,IAAI;QACrC,IAAI,CAAC,MAAM,GAAGA,KAAK,MAAM,IAAI;QAC7B,IAAI,CAAC,IAAI,GAAGA,KAAK,IAAI,IAAI;QACzB,IAAI,CAAC,mBAAmB,GAAGA,KAAK,mBAAmB;IACvD;IAEA,OAAO,OAAOA,IAAc,EAAE;QAC1B,OAAO,IAAID,KAAKC;IACpB;IAEQ,eAAeA,IAAc,EAAc;QAC/C,IAAIA,KAAK,QAAQ,EACb,OAAO;YACH,UAAUA,KAAK,QAAQ,CAAC,QAAQ;QACpC;QAGJ,OAAO;YACH,UAAUE;QACd;IACJ;IAEQ,eAAeC,QAA4B,EAAc;QAC7D,OAAO;YACH,IAAIA,UAAU,MAAM;YACpB,aAAaA,UAAU,eAAe;YACtC,MAAMA,UAAU,QAAQ;QAC5B;IACJ;AACJ"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type WbStatus } from "../../constants.js";
|
|
2
|
+
import type { Page } from "../../domain/Page/Page.js";
|
|
2
3
|
import type { WbIdentity } from "../../types.js";
|
|
3
4
|
export interface PageRevisionData {
|
|
4
5
|
id: string;
|
|
@@ -25,5 +26,15 @@ export declare class PageRevision {
|
|
|
25
26
|
readonly revisionDescription: string | undefined;
|
|
26
27
|
protected constructor(data: PageRevisionData);
|
|
27
28
|
getLabel(): string;
|
|
29
|
+
/**
|
|
30
|
+
* Publishing a revision unpublishes the one that was published before it, so the list needs
|
|
31
|
+
* to reflect the new status without refetching.
|
|
32
|
+
*/
|
|
33
|
+
withStatus(status: WbStatus): PageRevision;
|
|
28
34
|
static create(data: PageRevisionData): PageRevision;
|
|
35
|
+
/**
|
|
36
|
+
* A page revision is a projection of a page, so mutations that return a `Page` (for example,
|
|
37
|
+
* creating a new revision) can be reflected in the revisions cache without an extra round trip.
|
|
38
|
+
*/
|
|
39
|
+
static createFromPage(page: Page): PageRevision;
|
|
29
40
|
}
|
|
@@ -15,9 +15,29 @@ class PageRevision {
|
|
|
15
15
|
getLabel() {
|
|
16
16
|
return `v${this.version} (${toTitleCaseLabel(this.status)})`;
|
|
17
17
|
}
|
|
18
|
+
withStatus(status) {
|
|
19
|
+
return new PageRevision({
|
|
20
|
+
...this,
|
|
21
|
+
status
|
|
22
|
+
});
|
|
23
|
+
}
|
|
18
24
|
static create(data) {
|
|
19
25
|
return new PageRevision(data);
|
|
20
26
|
}
|
|
27
|
+
static createFromPage(page) {
|
|
28
|
+
return new PageRevision({
|
|
29
|
+
id: page.id,
|
|
30
|
+
entryId: page.entryId,
|
|
31
|
+
status: page.status,
|
|
32
|
+
version: page.version,
|
|
33
|
+
savedOn: page.savedOn,
|
|
34
|
+
title: page.properties.title,
|
|
35
|
+
locked: page.locked,
|
|
36
|
+
createdBy: page.createdBy,
|
|
37
|
+
createdOn: page.createdOn,
|
|
38
|
+
revisionDescription: page.revisionDescription
|
|
39
|
+
});
|
|
40
|
+
}
|
|
21
41
|
}
|
|
22
42
|
export { PageRevision };
|
|
23
43
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"domain/PageRevision/PageRevision.js","sources":["../../../src/domain/PageRevision/PageRevision.ts"],"sourcesContent":["import { type WbStatus } from \"~/constants.js\";\nimport { toTitleCaseLabel } from \"~/shared/toTitleCaseLabel.js\";\nimport type { WbIdentity } from \"~/types.js\";\n\nexport interface PageRevisionData {\n id: string;\n entryId: string;\n status: WbStatus;\n version: number;\n savedOn: string;\n title: string;\n locked: boolean;\n createdBy: WbIdentity;\n createdOn: string;\n revisionDescription: string | undefined;\n}\n\nexport class PageRevision {\n public readonly id: string;\n public readonly entryId: string;\n public readonly status: WbStatus;\n public readonly version: number;\n public readonly savedOn: string;\n public readonly title: string;\n public readonly locked: boolean;\n public readonly createdBy: WbIdentity;\n public readonly createdOn: string;\n public readonly revisionDescription: string | undefined;\n\n protected constructor(data: PageRevisionData) {\n this.id = data.id;\n this.entryId = data.entryId;\n this.status = data.status;\n this.version = data.version;\n this.savedOn = data.savedOn;\n this.title = data.title;\n this.locked = data.locked;\n this.createdBy = data.createdBy;\n this.createdOn = data.createdOn;\n this.revisionDescription = data.revisionDescription;\n }\n\n getLabel() {\n return `v${this.version} (${toTitleCaseLabel(this.status)})`;\n }\n\n static create(data: PageRevisionData) {\n return new PageRevision(data);\n }\n}\n"],"names":["PageRevision","data","toTitleCaseLabel"],"mappings":";
|
|
1
|
+
{"version":3,"file":"domain/PageRevision/PageRevision.js","sources":["../../../src/domain/PageRevision/PageRevision.ts"],"sourcesContent":["import { type WbStatus } from \"~/constants.js\";\nimport { toTitleCaseLabel } from \"~/shared/toTitleCaseLabel.js\";\nimport type { Page } from \"~/domain/Page/Page.js\";\nimport type { WbIdentity } from \"~/types.js\";\n\nexport interface PageRevisionData {\n id: string;\n entryId: string;\n status: WbStatus;\n version: number;\n savedOn: string;\n title: string;\n locked: boolean;\n createdBy: WbIdentity;\n createdOn: string;\n revisionDescription: string | undefined;\n}\n\nexport class PageRevision {\n public readonly id: string;\n public readonly entryId: string;\n public readonly status: WbStatus;\n public readonly version: number;\n public readonly savedOn: string;\n public readonly title: string;\n public readonly locked: boolean;\n public readonly createdBy: WbIdentity;\n public readonly createdOn: string;\n public readonly revisionDescription: string | undefined;\n\n protected constructor(data: PageRevisionData) {\n this.id = data.id;\n this.entryId = data.entryId;\n this.status = data.status;\n this.version = data.version;\n this.savedOn = data.savedOn;\n this.title = data.title;\n this.locked = data.locked;\n this.createdBy = data.createdBy;\n this.createdOn = data.createdOn;\n this.revisionDescription = data.revisionDescription;\n }\n\n getLabel() {\n return `v${this.version} (${toTitleCaseLabel(this.status)})`;\n }\n\n /**\n * Publishing a revision unpublishes the one that was published before it, so the list needs\n * to reflect the new status without refetching.\n */\n withStatus(status: WbStatus) {\n return new PageRevision({ ...this, status });\n }\n\n static create(data: PageRevisionData) {\n return new PageRevision(data);\n }\n\n /**\n * A page revision is a projection of a page, so mutations that return a `Page` (for example,\n * creating a new revision) can be reflected in the revisions cache without an extra round trip.\n */\n static createFromPage(page: Page) {\n return new PageRevision({\n id: page.id,\n entryId: page.entryId,\n status: page.status,\n version: page.version,\n savedOn: page.savedOn,\n title: page.properties.title,\n locked: page.locked,\n createdBy: page.createdBy,\n createdOn: page.createdOn,\n revisionDescription: page.revisionDescription\n });\n }\n}\n"],"names":["PageRevision","data","toTitleCaseLabel","status","page"],"mappings":";AAkBO,MAAMA;IAYT,YAAsBC,IAAsB,CAAE;QAC1C,IAAI,CAAC,EAAE,GAAGA,KAAK,EAAE;QACjB,IAAI,CAAC,OAAO,GAAGA,KAAK,OAAO;QAC3B,IAAI,CAAC,MAAM,GAAGA,KAAK,MAAM;QACzB,IAAI,CAAC,OAAO,GAAGA,KAAK,OAAO;QAC3B,IAAI,CAAC,OAAO,GAAGA,KAAK,OAAO;QAC3B,IAAI,CAAC,KAAK,GAAGA,KAAK,KAAK;QACvB,IAAI,CAAC,MAAM,GAAGA,KAAK,MAAM;QACzB,IAAI,CAAC,SAAS,GAAGA,KAAK,SAAS;QAC/B,IAAI,CAAC,SAAS,GAAGA,KAAK,SAAS;QAC/B,IAAI,CAAC,mBAAmB,GAAGA,KAAK,mBAAmB;IACvD;IAEA,WAAW;QACP,OAAO,CAAC,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAEC,iBAAiB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE;IAMA,WAAWC,MAAgB,EAAE;QACzB,OAAO,IAAIH,aAAa;YAAE,GAAG,IAAI;YAAEG;QAAO;IAC9C;IAEA,OAAO,OAAOF,IAAsB,EAAE;QAClC,OAAO,IAAID,aAAaC;IAC5B;IAMA,OAAO,eAAeG,IAAU,EAAE;QAC9B,OAAO,IAAIJ,aAAa;YACpB,IAAII,KAAK,EAAE;YACX,SAASA,KAAK,OAAO;YACrB,QAAQA,KAAK,MAAM;YACnB,SAASA,KAAK,OAAO;YACrB,SAASA,KAAK,OAAO;YACrB,OAAOA,KAAK,UAAU,CAAC,KAAK;YAC5B,QAAQA,KAAK,MAAM;YACnB,WAAWA,KAAK,SAAS;YACzB,WAAWA,KAAK,SAAS;YACzB,qBAAqBA,KAAK,mBAAmB;QACjD;IACJ;AACJ"}
|
|
@@ -2,10 +2,11 @@ import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
2
2
|
import { Container } from "@webiny/di";
|
|
3
3
|
import { WbPageStatus } from "../../../constants.js";
|
|
4
4
|
import { Page, pageListCache } from "../../../domain/Page/index.js";
|
|
5
|
+
import { PageRevision, pageRevisionsCacheFactory } from "../../../domain/PageRevision/index.js";
|
|
5
6
|
import { CreatePageRevisionFromGateway, CreatePageRevisionFromUseCase } from "./abstractions.js";
|
|
6
7
|
import { CreatePageRevisionFromUseCase as external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase } from "./CreatePageRevisionFromUseCase.js";
|
|
7
8
|
import { CreatePageRevisionFromRepository } from "./CreatePageRevisionFromRepository.js";
|
|
8
|
-
import { PageListCache } from "../shared/abstractions.js";
|
|
9
|
+
import { PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
|
|
9
10
|
describe("CreatePageRevisionFrom", ()=>{
|
|
10
11
|
const gateway = {
|
|
11
12
|
execute: vi.fn().mockResolvedValue({
|
|
@@ -31,9 +32,11 @@ describe("CreatePageRevisionFrom", ()=>{
|
|
|
31
32
|
})
|
|
32
33
|
};
|
|
33
34
|
const pagesCache = pageListCache;
|
|
35
|
+
const revisionsCache = pageRevisionsCacheFactory.getCache();
|
|
34
36
|
beforeEach(()=>{
|
|
35
37
|
vi.clearAllMocks();
|
|
36
38
|
pagesCache.clear();
|
|
39
|
+
revisionsCache.clear();
|
|
37
40
|
pagesCache.addItems([
|
|
38
41
|
Page.create({
|
|
39
42
|
id: "page-1#0001",
|
|
@@ -60,6 +63,7 @@ describe("CreatePageRevisionFrom", ()=>{
|
|
|
60
63
|
it("should be able to create a page revision from another revision", async ()=>{
|
|
61
64
|
const container = new Container();
|
|
62
65
|
container.registerInstance(PageListCache, pagesCache);
|
|
66
|
+
container.registerInstance(PageRevisionsCache, revisionsCache);
|
|
63
67
|
container.registerInstance(CreatePageRevisionFromGateway, gateway);
|
|
64
68
|
container.register(CreatePageRevisionFromRepository).inSingletonScope();
|
|
65
69
|
container.register(external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase);
|
|
@@ -79,6 +83,7 @@ describe("CreatePageRevisionFrom", ()=>{
|
|
|
79
83
|
it("should not publish a page if id is missing", async ()=>{
|
|
80
84
|
const container = new Container();
|
|
81
85
|
container.registerInstance(PageListCache, pagesCache);
|
|
86
|
+
container.registerInstance(PageRevisionsCache, revisionsCache);
|
|
82
87
|
container.registerInstance(CreatePageRevisionFromGateway, gateway);
|
|
83
88
|
container.register(CreatePageRevisionFromRepository).inSingletonScope();
|
|
84
89
|
container.register(external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase);
|
|
@@ -92,6 +97,41 @@ describe("CreatePageRevisionFrom", ()=>{
|
|
|
92
97
|
expect(newRevision?.id).toEqual("page-1#0001");
|
|
93
98
|
expect(newRevision?.version).toEqual(1);
|
|
94
99
|
});
|
|
100
|
+
it("should add the new revision to the revisions cache", async ()=>{
|
|
101
|
+
const container = new Container();
|
|
102
|
+
container.registerInstance(PageListCache, pagesCache);
|
|
103
|
+
container.registerInstance(PageRevisionsCache, revisionsCache);
|
|
104
|
+
container.registerInstance(CreatePageRevisionFromGateway, gateway);
|
|
105
|
+
container.register(CreatePageRevisionFromRepository).inSingletonScope();
|
|
106
|
+
container.register(external_CreatePageRevisionFromUseCase_js_CreatePageRevisionFromUseCase);
|
|
107
|
+
const createPageRevisionFrom = container.resolve(CreatePageRevisionFromUseCase);
|
|
108
|
+
revisionsCache.addItems([
|
|
109
|
+
PageRevision.create({
|
|
110
|
+
id: "page-1#0001",
|
|
111
|
+
entryId: "page-1",
|
|
112
|
+
status: WbPageStatus.Draft,
|
|
113
|
+
version: 1,
|
|
114
|
+
savedOn: "2026-09-21T00:00:00.000Z",
|
|
115
|
+
title: "Page 1",
|
|
116
|
+
locked: false,
|
|
117
|
+
createdBy: {
|
|
118
|
+
id: "admin",
|
|
119
|
+
displayName: "Admin",
|
|
120
|
+
type: "admin"
|
|
121
|
+
},
|
|
122
|
+
createdOn: "2026-09-21T00:00:00.000Z",
|
|
123
|
+
revisionDescription: void 0
|
|
124
|
+
})
|
|
125
|
+
]);
|
|
126
|
+
await createPageRevisionFrom.execute({
|
|
127
|
+
id: "page-1#0001"
|
|
128
|
+
});
|
|
129
|
+
expect(revisionsCache.count()).toEqual(2);
|
|
130
|
+
const newRevision = revisionsCache.getItem((revision)=>"page-1#0002" === revision.id);
|
|
131
|
+
expect(newRevision?.version).toEqual(2);
|
|
132
|
+
expect(newRevision?.entryId).toEqual("page-1");
|
|
133
|
+
expect(newRevision?.title).toEqual("Page 1");
|
|
134
|
+
});
|
|
95
135
|
});
|
|
96
136
|
|
|
97
137
|
//# sourceMappingURL=CreatePageRevisionFrom.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { Page, pageListCache } from \"~/domain/Page/index.js\";\nimport {\n CreatePageRevisionFromUseCase as UseCaseAbstraction,\n CreatePageRevisionFromGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { CreatePageRevisionFromUseCase } from \"./CreatePageRevisionFromUseCase.js\";\nimport { CreatePageRevisionFromRepository } from \"./CreatePageRevisionFromRepository.js\";\nimport { PageListCache } from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"CreatePageRevisionFrom\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\n id: \"page-1#0002\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n version: 2,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n };\n\n const pagesCache = pageListCache;\n\n beforeEach(() => {\n vi.clearAllMocks();\n pagesCache.clear();\n pagesCache.addItems([\n Page.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n ]);\n });\n\n it(\"should be able to create a page revision from another revision\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createPageRevisionFrom = container.resolve(UseCaseAbstraction);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const item = pagesCache.getItem(page => page.id === \"page-1#0001\");\n expect(item?.id).toEqual(\"page-1#0001\");\n\n await createPageRevisionFrom.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n expect(newRevision?.id).toEqual(\"page-1#0002\");\n expect(newRevision?.version).toEqual(2);\n });\n\n it(\"should not publish a page if id is missing\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createRevisionFrom = container.resolve(UseCaseAbstraction);\n\n await createRevisionFrom.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.version).toEqual(1);\n });\n});\n"],"names":["describe","gateway","vi","WbPageStatus","pagesCache","pageListCache","beforeEach","Page","it","container","Container","PageListCache","GatewayAbstraction","CreatePageRevisionFromRepository","CreatePageRevisionFromUseCase","createPageRevisionFrom","UseCaseAbstraction","expect","item","page","newRevision","createRevisionFrom"],"mappings":"
|
|
1
|
+
{"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFrom.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { Page, pageListCache } from \"~/domain/Page/index.js\";\nimport { PageRevision, pageRevisionsCacheFactory } from \"~/domain/PageRevision/index.js\";\nimport {\n CreatePageRevisionFromUseCase as UseCaseAbstraction,\n CreatePageRevisionFromGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { CreatePageRevisionFromUseCase } from \"./CreatePageRevisionFromUseCase.js\";\nimport { CreatePageRevisionFromRepository } from \"./CreatePageRevisionFromRepository.js\";\nimport { PageListCache, PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"CreatePageRevisionFrom\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\n id: \"page-1#0002\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n version: 2,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n };\n\n const pagesCache = pageListCache;\n const revisionsCache = pageRevisionsCacheFactory.getCache();\n\n beforeEach(() => {\n vi.clearAllMocks();\n pagesCache.clear();\n revisionsCache.clear();\n pagesCache.addItems([\n Page.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n data: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n ]);\n });\n\n it(\"should be able to create a page revision from another revision\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createPageRevisionFrom = container.resolve(UseCaseAbstraction);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const item = pagesCache.getItem(page => page.id === \"page-1#0001\");\n expect(item?.id).toEqual(\"page-1#0001\");\n\n await createPageRevisionFrom.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n expect(newRevision?.id).toEqual(\"page-1#0002\");\n expect(newRevision?.version).toEqual(2);\n });\n\n it(\"should not publish a page if id is missing\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createRevisionFrom = container.resolve(UseCaseAbstraction);\n\n await createRevisionFrom.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n const newRevision = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.id).toEqual(\"page-1#0001\");\n expect(newRevision?.version).toEqual(1);\n });\n\n it(\"should add the new revision to the revisions cache\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(CreatePageRevisionFromRepository).inSingletonScope();\n container.register(CreatePageRevisionFromUseCase);\n\n const createPageRevisionFrom = container.resolve(UseCaseAbstraction);\n\n revisionsCache.addItems([\n PageRevision.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Draft,\n version: 1,\n savedOn: \"2026-09-21T00:00:00.000Z\",\n title: \"Page 1\",\n locked: false,\n createdBy: { id: \"admin\", displayName: \"Admin\", type: \"admin\" },\n createdOn: \"2026-09-21T00:00:00.000Z\",\n revisionDescription: undefined\n })\n ]);\n\n await createPageRevisionFrom.execute({\n id: \"page-1#0001\"\n });\n\n // The source revision must be kept: the revisions list shows every revision.\n expect(revisionsCache.count()).toEqual(2);\n\n const newRevision = revisionsCache.getItem(revision => revision.id === \"page-1#0002\");\n expect(newRevision?.version).toEqual(2);\n expect(newRevision?.entryId).toEqual(\"page-1\");\n expect(newRevision?.title).toEqual(\"Page 1\");\n });\n});\n"],"names":["describe","gateway","vi","WbPageStatus","pagesCache","pageListCache","revisionsCache","pageRevisionsCacheFactory","beforeEach","Page","it","container","Container","PageListCache","PageRevisionsCache","GatewayAbstraction","CreatePageRevisionFromRepository","CreatePageRevisionFromUseCase","createPageRevisionFrom","UseCaseAbstraction","expect","item","page","newRevision","createRevisionFrom","PageRevision","undefined","revision"],"mappings":"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"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { CreatePageRevisionFromRepository as RepositoryAbstraction, CreatePageRevisionFromGateway } from "./abstractions.js";
|
|
2
2
|
import { Page } from "../../../domain/Page/Page.js";
|
|
3
|
-
import { PageListCache } from "../../../features/pages/shared/abstractions.js";
|
|
3
|
+
import { PageListCache, PageRevisionsCache } from "../../../features/pages/shared/abstractions.js";
|
|
4
4
|
declare class CreatePageRevisionFromRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
5
5
|
private cache;
|
|
6
|
+
private revisionsCache;
|
|
6
7
|
private gateway;
|
|
7
|
-
constructor(cache: PageListCache.Interface, gateway: CreatePageRevisionFromGateway.Interface);
|
|
8
|
+
constructor(cache: PageListCache.Interface, revisionsCache: PageRevisionsCache.Interface, gateway: CreatePageRevisionFromGateway.Interface);
|
|
8
9
|
execute(page: Page): Promise<Page>;
|
|
9
10
|
}
|
|
10
11
|
export declare const CreatePageRevisionFromRepository: typeof CreatePageRevisionFromRepositoryImpl & {
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { CreatePageRevisionFromGateway, CreatePageRevisionFromRepository } from "./abstractions.js";
|
|
2
2
|
import { Page } from "../../../domain/Page/Page.js";
|
|
3
|
-
import {
|
|
3
|
+
import { PageRevision } from "../../../domain/PageRevision/PageRevision.js";
|
|
4
|
+
import { PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
|
|
4
5
|
class CreatePageRevisionFromRepositoryImpl {
|
|
5
|
-
constructor(cache, gateway){
|
|
6
|
+
constructor(cache, revisionsCache, gateway){
|
|
6
7
|
this.cache = cache;
|
|
8
|
+
this.revisionsCache = revisionsCache;
|
|
7
9
|
this.gateway = gateway;
|
|
8
10
|
}
|
|
9
11
|
async execute(page) {
|
|
@@ -13,6 +15,9 @@ class CreatePageRevisionFromRepositoryImpl {
|
|
|
13
15
|
if (p.id === page.id) return newPage;
|
|
14
16
|
return p;
|
|
15
17
|
});
|
|
18
|
+
this.revisionsCache.addItems([
|
|
19
|
+
PageRevision.createFromPage(newPage)
|
|
20
|
+
]);
|
|
16
21
|
return newPage;
|
|
17
22
|
}
|
|
18
23
|
}
|
|
@@ -20,6 +25,7 @@ const CreatePageRevisionFromRepository_CreatePageRevisionFromRepository = Create
|
|
|
20
25
|
implementation: CreatePageRevisionFromRepositoryImpl,
|
|
21
26
|
dependencies: [
|
|
22
27
|
PageListCache,
|
|
28
|
+
PageRevisionsCache,
|
|
23
29
|
CreatePageRevisionFromGateway
|
|
24
30
|
]
|
|
25
31
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.ts"],"sourcesContent":["import {\n CreatePageRevisionFromRepository as RepositoryAbstraction,\n CreatePageRevisionFromGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageListCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass CreatePageRevisionFromRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private cache: PageListCache.Interface,\n private gateway: CreatePageRevisionFromGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n const newPage = Page.create(result);\n\n this.cache.updateItems(p => {\n if (p.id === page.id) {\n return newPage;\n }\n return p;\n });\n\n return newPage;\n }\n}\n\nexport const CreatePageRevisionFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreatePageRevisionFromRepositoryImpl,\n dependencies: [PageListCache, CreatePageRevisionFromGateway]\n});\n"],"names":["CreatePageRevisionFromRepositoryImpl","cache","gateway","page","result","newPage","Page","p","CreatePageRevisionFromRepository","RepositoryAbstraction","PageListCache","CreatePageRevisionFromGateway"],"mappings":"
|
|
1
|
+
{"version":3,"file":"features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.js","sources":["../../../../src/features/pages/createPageRevisionFrom/CreatePageRevisionFromRepository.ts"],"sourcesContent":["import {\n CreatePageRevisionFromRepository as RepositoryAbstraction,\n CreatePageRevisionFromGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageRevision } from \"~/domain/PageRevision/PageRevision.js\";\nimport { PageListCache, PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass CreatePageRevisionFromRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private cache: PageListCache.Interface,\n private revisionsCache: PageRevisionsCache.Interface,\n private gateway: CreatePageRevisionFromGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n const newPage = Page.create(result);\n\n // The page list only ever shows the latest revision, so the source revision is replaced.\n this.cache.updateItems(p => {\n if (p.id === page.id) {\n return newPage;\n }\n return p;\n });\n\n // The revisions list, on the other hand, shows every revision, so this is an insert.\n this.revisionsCache.addItems([PageRevision.createFromPage(newPage)]);\n\n return newPage;\n }\n}\n\nexport const CreatePageRevisionFromRepository = RepositoryAbstraction.createImplementation({\n implementation: CreatePageRevisionFromRepositoryImpl,\n dependencies: [PageListCache, PageRevisionsCache, CreatePageRevisionFromGateway]\n});\n"],"names":["CreatePageRevisionFromRepositoryImpl","cache","revisionsCache","gateway","page","result","newPage","Page","p","PageRevision","CreatePageRevisionFromRepository","RepositoryAbstraction","PageListCache","PageRevisionsCache","CreatePageRevisionFromGateway"],"mappings":";;;;AAQA,MAAMA;IACF,YACYC,KAA8B,EAC9BC,cAA4C,EAC5CC,OAAgD,CAC1D;aAHUF,KAAK,GAALA;aACAC,cAAc,GAAdA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE;QACjD,MAAME,UAAUC,KAAK,MAAM,CAACF;QAG5B,IAAI,CAAC,KAAK,CAAC,WAAW,CAACG,CAAAA;YACnB,IAAIA,EAAE,EAAE,KAAKJ,KAAK,EAAE,EAChB,OAAOE;YAEX,OAAOE;QACX;QAGA,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAACC,aAAa,cAAc,CAACH;SAAS;QAEnE,OAAOA;IACX;AACJ;AAEO,MAAMI,oEAAmCC,iCAAAA,oBAA0C,CAAC;IACvF,gBAAgBX;IAChB,cAAc;QAACY;QAAeC;QAAoBC;KAA8B;AACpF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
2
|
+
import { Container } from "@webiny/di";
|
|
3
|
+
import { WbPageStatus } from "../../../constants.js";
|
|
4
|
+
import { PageRevision, pageRevisionsCacheFactory } from "../../../domain/PageRevision/index.js";
|
|
5
|
+
import { DeletePageRevisionGateway, DeletePageRevisionUseCase } from "./abstractions.js";
|
|
6
|
+
import { DeletePageRevisionUseCase as external_DeletePageRevisionUseCase_js_DeletePageRevisionUseCase } from "./DeletePageRevisionUseCase.js";
|
|
7
|
+
import { DeletePageRevisionRepository } from "./DeletePageRevisionRepository.js";
|
|
8
|
+
import { PageRevisionsCache } from "../shared/abstractions.js";
|
|
9
|
+
const createRevision = (id, version)=>PageRevision.create({
|
|
10
|
+
id,
|
|
11
|
+
entryId: "page-1",
|
|
12
|
+
version,
|
|
13
|
+
status: WbPageStatus.Draft,
|
|
14
|
+
savedOn: "2026-09-21T00:00:00.000Z",
|
|
15
|
+
title: "Page 1",
|
|
16
|
+
locked: false,
|
|
17
|
+
createdBy: {
|
|
18
|
+
id: "admin",
|
|
19
|
+
displayName: "Admin",
|
|
20
|
+
type: "admin"
|
|
21
|
+
},
|
|
22
|
+
createdOn: "2026-09-21T00:00:00.000Z",
|
|
23
|
+
revisionDescription: void 0
|
|
24
|
+
});
|
|
25
|
+
describe("DeletePageRevision", ()=>{
|
|
26
|
+
const gateway = {
|
|
27
|
+
execute: vi.fn().mockResolvedValue(void 0)
|
|
28
|
+
};
|
|
29
|
+
const revisionsCache = pageRevisionsCacheFactory.getCache();
|
|
30
|
+
const createUseCase = ()=>{
|
|
31
|
+
const container = new Container();
|
|
32
|
+
container.registerInstance(PageRevisionsCache, revisionsCache);
|
|
33
|
+
container.registerInstance(DeletePageRevisionGateway, gateway);
|
|
34
|
+
container.register(DeletePageRevisionRepository).inSingletonScope();
|
|
35
|
+
container.register(external_DeletePageRevisionUseCase_js_DeletePageRevisionUseCase);
|
|
36
|
+
return container.resolve(DeletePageRevisionUseCase);
|
|
37
|
+
};
|
|
38
|
+
beforeEach(()=>{
|
|
39
|
+
vi.clearAllMocks();
|
|
40
|
+
revisionsCache.clear();
|
|
41
|
+
revisionsCache.addItems([
|
|
42
|
+
createRevision("page-1#0001", 1),
|
|
43
|
+
createRevision("page-1#0002", 2)
|
|
44
|
+
]);
|
|
45
|
+
});
|
|
46
|
+
it("should remove the deleted revision from the revisions cache", async ()=>{
|
|
47
|
+
const deletePageRevision = createUseCase();
|
|
48
|
+
await deletePageRevision.execute({
|
|
49
|
+
id: "page-1#0001"
|
|
50
|
+
});
|
|
51
|
+
expect(gateway.execute).toHaveBeenCalledTimes(1);
|
|
52
|
+
expect(gateway.execute).toHaveBeenCalledWith("page-1#0001");
|
|
53
|
+
expect(revisionsCache.count()).toEqual(1);
|
|
54
|
+
expect(revisionsCache.getItem((r)=>"page-1#0001" === r.id)).toBeUndefined();
|
|
55
|
+
expect(revisionsCache.getItem((r)=>"page-1#0002" === r.id)).toBeDefined();
|
|
56
|
+
});
|
|
57
|
+
it("should keep the cache untouched if the deletion fails", async ()=>{
|
|
58
|
+
gateway.execute.mockRejectedValueOnce(new Error("Could not delete page revision."));
|
|
59
|
+
const deletePageRevision = createUseCase();
|
|
60
|
+
await expect(deletePageRevision.execute({
|
|
61
|
+
id: "page-1#0001"
|
|
62
|
+
})).rejects.toThrow("Could not delete page revision.");
|
|
63
|
+
expect(revisionsCache.count()).toEqual(2);
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
//# sourceMappingURL=DeletePageRevision.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features/pages/deletePageRevision/DeletePageRevision.test.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevision.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { PageRevision, pageRevisionsCacheFactory } from \"~/domain/PageRevision/index.js\";\nimport {\n DeletePageRevisionUseCase as UseCaseAbstraction,\n DeletePageRevisionGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { DeletePageRevisionUseCase } from \"./DeletePageRevisionUseCase.js\";\nimport { DeletePageRevisionRepository } from \"./DeletePageRevisionRepository.js\";\nimport { PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\nconst createRevision = (id: string, version: number) => {\n return PageRevision.create({\n id,\n entryId: \"page-1\",\n version,\n status: WbPageStatus.Draft,\n savedOn: \"2026-09-21T00:00:00.000Z\",\n title: \"Page 1\",\n locked: false,\n createdBy: { id: \"admin\", displayName: \"Admin\", type: \"admin\" },\n createdOn: \"2026-09-21T00:00:00.000Z\",\n revisionDescription: undefined\n });\n};\n\ndescribe(\"DeletePageRevision\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue(undefined)\n };\n\n const revisionsCache = pageRevisionsCacheFactory.getCache();\n\n const createUseCase = () => {\n const container = new Container();\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(DeletePageRevisionRepository).inSingletonScope();\n container.register(DeletePageRevisionUseCase);\n\n return container.resolve(UseCaseAbstraction);\n };\n\n beforeEach(() => {\n vi.clearAllMocks();\n revisionsCache.clear();\n revisionsCache.addItems([\n createRevision(\"page-1#0001\", 1),\n createRevision(\"page-1#0002\", 2)\n ]);\n });\n\n it(\"should remove the deleted revision from the revisions cache\", async () => {\n const deletePageRevision = createUseCase();\n\n await deletePageRevision.execute({ id: \"page-1#0001\" });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n expect(gateway.execute).toHaveBeenCalledWith(\"page-1#0001\");\n\n expect(revisionsCache.count()).toEqual(1);\n expect(revisionsCache.getItem(r => r.id === \"page-1#0001\")).toBeUndefined();\n expect(revisionsCache.getItem(r => r.id === \"page-1#0002\")).toBeDefined();\n });\n\n it(\"should keep the cache untouched if the deletion fails\", async () => {\n gateway.execute.mockRejectedValueOnce(new Error(\"Could not delete page revision.\"));\n const deletePageRevision = createUseCase();\n\n await expect(deletePageRevision.execute({ id: \"page-1#0001\" })).rejects.toThrow(\n \"Could not delete page revision.\"\n );\n\n expect(revisionsCache.count()).toEqual(2);\n });\n});\n"],"names":["createRevision","id","version","PageRevision","WbPageStatus","undefined","describe","gateway","vi","revisionsCache","pageRevisionsCacheFactory","createUseCase","container","Container","PageRevisionsCache","GatewayAbstraction","DeletePageRevisionRepository","DeletePageRevisionUseCase","UseCaseAbstraction","beforeEach","it","deletePageRevision","expect","r","Error"],"mappings":";;;;;;;;AAYA,MAAMA,iBAAiB,CAACC,IAAYC,UACzBC,aAAa,MAAM,CAAC;QACvBF;QACA,SAAS;QACTC;QACA,QAAQE,aAAa,KAAK;QAC1B,SAAS;QACT,OAAO;QACP,QAAQ;QACR,WAAW;YAAE,IAAI;YAAS,aAAa;YAAS,MAAM;QAAQ;QAC9D,WAAW;QACX,qBAAqBC;IACzB;AAGJC,SAAS,sBAAsB;IAC3B,MAAMC,UAAU;QACZ,SAASC,GAAG,EAAE,GAAG,iBAAiB,CAACH;IACvC;IAEA,MAAMI,iBAAiBC,0BAA0B,QAAQ;IAEzD,MAAMC,gBAAgB;QAClB,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,oBAAoBL;QAC/CG,UAAU,gBAAgB,CAACG,2BAAoBR;QAC/CK,UAAU,QAAQ,CAACI,8BAA8B,gBAAgB;QACjEJ,UAAU,QAAQ,CAACK;QAEnB,OAAOL,UAAU,OAAO,CAACM;IAC7B;IAEAC,WAAW;QACPX,GAAG,aAAa;QAChBC,eAAe,KAAK;QACpBA,eAAe,QAAQ,CAAC;YACpBT,eAAe,eAAe;YAC9BA,eAAe,eAAe;SACjC;IACL;IAEAoB,GAAG,+DAA+D;QAC9D,MAAMC,qBAAqBV;QAE3B,MAAMU,mBAAmB,OAAO,CAAC;YAAE,IAAI;QAAc;QAErDC,OAAOf,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAC9Ce,OAAOf,QAAQ,OAAO,EAAE,oBAAoB,CAAC;QAE7Ce,OAAOb,eAAe,KAAK,IAAI,OAAO,CAAC;QACvCa,OAAOb,eAAe,OAAO,CAACc,CAAAA,IAAKA,AAAS,kBAATA,EAAE,EAAE,GAAqB,aAAa;QACzED,OAAOb,eAAe,OAAO,CAACc,CAAAA,IAAKA,AAAS,kBAATA,EAAE,EAAE,GAAqB,WAAW;IAC3E;IAEAH,GAAG,yDAAyD;QACxDb,QAAQ,OAAO,CAAC,qBAAqB,CAAC,IAAIiB,MAAM;QAChD,MAAMH,qBAAqBV;QAE3B,MAAMW,OAAOD,mBAAmB,OAAO,CAAC;YAAE,IAAI;QAAc,IAAI,OAAO,CAAC,OAAO,CAC3E;QAGJC,OAAOb,eAAe,KAAK,IAAI,OAAO,CAAC;IAC3C;AACJ"}
|
|
@@ -3,7 +3,7 @@ import { MainGraphQLClient } from "@webiny/app/features/mainGraphQLClient";
|
|
|
3
3
|
declare class DeletePageRevisionGatewayImpl implements GatewayAbstraction.Interface {
|
|
4
4
|
private client;
|
|
5
5
|
constructor(client: MainGraphQLClient.Interface);
|
|
6
|
-
execute(id: string
|
|
6
|
+
execute(id: string): Promise<void>;
|
|
7
7
|
}
|
|
8
8
|
export declare const DeletePageRevisionGateway: typeof DeletePageRevisionGatewayImpl & {
|
|
9
9
|
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IDeletePageRevisionGateway>;
|
|
@@ -18,12 +18,11 @@ class DeletePageRevisionGatewayImpl {
|
|
|
18
18
|
constructor(client){
|
|
19
19
|
this.client = client;
|
|
20
20
|
}
|
|
21
|
-
async execute(id
|
|
21
|
+
async execute(id) {
|
|
22
22
|
const response = await this.client.execute({
|
|
23
23
|
query: DELETE_PAGE_REVISION,
|
|
24
24
|
variables: {
|
|
25
|
-
id
|
|
26
|
-
permanently
|
|
25
|
+
id
|
|
27
26
|
}
|
|
28
27
|
});
|
|
29
28
|
const envelope = response.websiteBuilder.deletePageRevision;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionGateway.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionGateway.ts"],"sourcesContent":["import { DeletePageRevisionGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\n\nconst DELETE_PAGE_REVISION = /* GraphQL */ `\n mutation DeletePageRevision($id: ID!) {\n websiteBuilder {\n deletePageRevision(id: $id) {\n data\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype DeletePageRevisionResponse = {\n websiteBuilder: {\n deletePageRevision:\n | { data: boolean; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass DeletePageRevisionGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string
|
|
1
|
+
{"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionGateway.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionGateway.ts"],"sourcesContent":["import { DeletePageRevisionGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\n\nconst DELETE_PAGE_REVISION = /* GraphQL */ `\n mutation DeletePageRevision($id: ID!) {\n websiteBuilder {\n deletePageRevision(id: $id) {\n data\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype DeletePageRevisionResponse = {\n websiteBuilder: {\n deletePageRevision:\n | { data: boolean; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass DeletePageRevisionGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string) {\n const response = await this.client.execute<DeletePageRevisionResponse>({\n query: DELETE_PAGE_REVISION,\n variables: {\n id\n }\n });\n\n const envelope = response.websiteBuilder.deletePageRevision;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not delete page revision.\");\n }\n }\n}\n\nexport const DeletePageRevisionGateway = GatewayAbstraction.createImplementation({\n implementation: DeletePageRevisionGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["DELETE_PAGE_REVISION","DeletePageRevisionGatewayImpl","client","id","response","envelope","Error","DeletePageRevisionGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;AAGA,MAAMA,uBAAqC,CAAC;;;;;;;;;;;;;AAa5C,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,EAAU,EAAE;QACtB,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAA6B;YACnE,OAAOJ;YACP,WAAW;gBACPG;YACJ;QACJ;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,kBAAkB;QAC3D,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;IAElD;AACJ;AAEO,MAAME,sDAA4BC,0BAAAA,oBAAuC,CAAC;IAC7E,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { DeletePageRevisionGateway, DeletePageRevisionRepository as RepositoryAbstraction } from "./abstractions.js";
|
|
2
2
|
import type { Page } from "../../../domain/Page/Page.js";
|
|
3
|
+
import { PageRevisionsCache } from "../../../features/pages/shared/abstractions.js";
|
|
3
4
|
declare class DeletePageRevisionRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
5
|
+
private readonly revisionsCache;
|
|
4
6
|
private readonly gateway;
|
|
5
|
-
constructor(gateway: DeletePageRevisionGateway.Interface);
|
|
6
|
-
execute(page: Page
|
|
7
|
+
constructor(revisionsCache: PageRevisionsCache.Interface, gateway: DeletePageRevisionGateway.Interface);
|
|
8
|
+
execute(page: Page): Promise<void>;
|
|
7
9
|
}
|
|
8
10
|
export declare const DeletePageRevisionRepository: typeof DeletePageRevisionRepositoryImpl & {
|
|
9
11
|
__abstraction: import("@webiny/di").Abstraction<import("./abstractions.js").IDeletePageRevisionRepository>;
|
|
@@ -1,15 +1,19 @@
|
|
|
1
1
|
import { DeletePageRevisionGateway, DeletePageRevisionRepository } from "./abstractions.js";
|
|
2
|
+
import { PageRevisionsCache } from "../shared/abstractions.js";
|
|
2
3
|
class DeletePageRevisionRepositoryImpl {
|
|
3
|
-
constructor(gateway){
|
|
4
|
+
constructor(revisionsCache, gateway){
|
|
5
|
+
this.revisionsCache = revisionsCache;
|
|
4
6
|
this.gateway = gateway;
|
|
5
7
|
}
|
|
6
|
-
async execute(page
|
|
7
|
-
await this.gateway.execute(page.id
|
|
8
|
+
async execute(page) {
|
|
9
|
+
await this.gateway.execute(page.id);
|
|
10
|
+
this.revisionsCache.removeItems((revision)=>revision.id === page.id);
|
|
8
11
|
}
|
|
9
12
|
}
|
|
10
13
|
const DeletePageRevisionRepository_DeletePageRevisionRepository = DeletePageRevisionRepository.createImplementation({
|
|
11
14
|
implementation: DeletePageRevisionRepositoryImpl,
|
|
12
15
|
dependencies: [
|
|
16
|
+
PageRevisionsCache,
|
|
13
17
|
DeletePageRevisionGateway
|
|
14
18
|
]
|
|
15
19
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionRepository.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionRepository.ts"],"sourcesContent":["import {\n DeletePageRevisionGateway,\n DeletePageRevisionRepository as RepositoryAbstraction\n} from \"./abstractions.js\";\nimport type { Page } from \"~/domain/Page/Page.js\";\n\nclass DeletePageRevisionRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(private readonly gateway: DeletePageRevisionGateway.Interface) {}\n\n async execute(page: Page
|
|
1
|
+
{"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionRepository.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionRepository.ts"],"sourcesContent":["import {\n DeletePageRevisionGateway,\n DeletePageRevisionRepository as RepositoryAbstraction\n} from \"./abstractions.js\";\nimport type { Page } from \"~/domain/Page/Page.js\";\nimport { PageRevisionsCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass DeletePageRevisionRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private readonly revisionsCache: PageRevisionsCache.Interface,\n private readonly gateway: DeletePageRevisionGateway.Interface\n ) {}\n\n async execute(page: Page) {\n await this.gateway.execute(page.id);\n\n this.revisionsCache.removeItems(revision => revision.id === page.id);\n }\n}\n\nexport const DeletePageRevisionRepository = RepositoryAbstraction.createImplementation({\n implementation: DeletePageRevisionRepositoryImpl,\n dependencies: [PageRevisionsCache, DeletePageRevisionGateway]\n});\n"],"names":["DeletePageRevisionRepositoryImpl","revisionsCache","gateway","page","revision","DeletePageRevisionRepository","RepositoryAbstraction","PageRevisionsCache","DeletePageRevisionGateway"],"mappings":";;AAOA,MAAMA;IACF,YACqBC,cAA4C,EAC5CC,OAA4C,CAC/D;aAFmBD,cAAc,GAAdA;aACAC,OAAO,GAAPA;IAClB;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACA,KAAK,EAAE;QAElC,IAAI,CAAC,cAAc,CAAC,WAAW,CAACC,CAAAA,WAAYA,SAAS,EAAE,KAAKD,KAAK,EAAE;IACvE;AACJ;AAEO,MAAME,4DAA+BC,6BAAAA,oBAA0C,CAAC;IACnF,gBAAgBN;IAChB,cAAc;QAACO;QAAoBC;KAA0B;AACjE"}
|
|
@@ -7,7 +7,7 @@ class DeletePageRevisionUseCaseImpl {
|
|
|
7
7
|
async execute(params) {
|
|
8
8
|
await this.repository.execute(Page.create({
|
|
9
9
|
id: params.id
|
|
10
|
-
})
|
|
10
|
+
}));
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
const DeletePageRevisionUseCase_DeletePageRevisionUseCase = DeletePageRevisionUseCase.createImplementation({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionUseCase.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionUseCase.ts"],"sourcesContent":["import {\n DeletePageRevisionUseCase as UseCaseAbstraction,\n DeletePageRevisionRepository\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\n\nclass DeletePageRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: DeletePageRevisionRepository.Interface) {}\n\n async execute(params: UseCaseAbstraction.Params) {\n await this.repository.execute(Page.create({ id: params.id })
|
|
1
|
+
{"version":3,"file":"features/pages/deletePageRevision/DeletePageRevisionUseCase.js","sources":["../../../../src/features/pages/deletePageRevision/DeletePageRevisionUseCase.ts"],"sourcesContent":["import {\n DeletePageRevisionUseCase as UseCaseAbstraction,\n DeletePageRevisionRepository\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\n\nclass DeletePageRevisionUseCaseImpl implements UseCaseAbstraction.Interface {\n constructor(private repository: DeletePageRevisionRepository.Interface) {}\n\n async execute(params: UseCaseAbstraction.Params) {\n await this.repository.execute(Page.create({ id: params.id }));\n }\n}\n\nexport const DeletePageRevisionUseCase = UseCaseAbstraction.createImplementation({\n implementation: DeletePageRevisionUseCaseImpl,\n dependencies: [DeletePageRevisionRepository]\n});\n"],"names":["DeletePageRevisionUseCaseImpl","repository","params","Page","DeletePageRevisionUseCase","UseCaseAbstraction","DeletePageRevisionRepository"],"mappings":";;AAMA,MAAMA;IACF,YAAoBC,UAAkD,CAAE;aAApDA,UAAU,GAAVA;IAAqD;IAEzE,MAAM,QAAQC,MAAiC,EAAE;QAC7C,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAACC,KAAK,MAAM,CAAC;YAAE,IAAID,OAAO,EAAE;QAAC;IAC9D;AACJ;AAEO,MAAME,sDAA4BC,0BAAAA,oBAAuC,CAAC;IAC7E,gBAAgBL;IAChB,cAAc;QAACM;KAA6B;AAChD"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Page } from "../../../domain/Page/Page.js";
|
|
2
2
|
export interface DeletePageRevisionParams {
|
|
3
3
|
id: string;
|
|
4
|
-
permanently: boolean;
|
|
5
4
|
}
|
|
6
5
|
export interface IDeletePageRevisionUseCase {
|
|
7
6
|
execute(params: DeletePageRevisionParams): Promise<void>;
|
|
@@ -12,14 +11,14 @@ export declare namespace DeletePageRevisionUseCase {
|
|
|
12
11
|
type Params = DeletePageRevisionParams;
|
|
13
12
|
}
|
|
14
13
|
export interface IDeletePageRevisionRepository {
|
|
15
|
-
execute(page: Page
|
|
14
|
+
execute(page: Page): Promise<void>;
|
|
16
15
|
}
|
|
17
16
|
export declare const DeletePageRevisionRepository: import("@webiny/di").Abstraction<IDeletePageRevisionRepository>;
|
|
18
17
|
export declare namespace DeletePageRevisionRepository {
|
|
19
18
|
type Interface = IDeletePageRevisionRepository;
|
|
20
19
|
}
|
|
21
20
|
export interface IDeletePageRevisionGateway {
|
|
22
|
-
execute(id: string
|
|
21
|
+
execute(id: string): Promise<void>;
|
|
23
22
|
}
|
|
24
23
|
export declare const DeletePageRevisionGateway: import("@webiny/di").Abstraction<IDeletePageRevisionGateway>;
|
|
25
24
|
export declare namespace DeletePageRevisionGateway {
|