@webiny/app-website-builder 6.5.0-beta.1 → 6.5.0-beta.11
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/BaseEditor/config/Sidebar/Tab.d.ts +0 -4
- package/BaseEditor/config/Sidebar/Tab.js +5 -21
- package/BaseEditor/config/Sidebar/Tab.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js +6 -66
- package/BaseEditor/defaultConfig/Content/AddressBar/PreviewDomain.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/DropZoneManager.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/Iframe.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/Preview/Overlays/ElementOverlays.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js +1 -1
- package/BaseEditor/defaultConfig/Content/Preview/PreviewContainer.js.map +1 -1
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.d.ts +1 -6
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.js +1 -26
- package/BaseEditor/defaultConfig/DocumentStateEditor/DocumentStateEditor.d.ts +2 -2
- package/BaseEditor/defaultConfig/ElementInputRenderers.js +12 -0
- package/BaseEditor/defaultConfig/ElementInputRenderers.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js +2 -5
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/ElementSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.d.ts +22 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js +17 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.d.ts +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js +64 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/PreviewedBindings.test.js.map +1 -0
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js +7 -2
- package/BaseEditor/defaultConfig/Sidebar/ElementSettings/useInputValue.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundColor.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js +8 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundImage.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundPosition.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Background/BackgroundScaling.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderColor.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderRadius.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderStyle.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Border/BorderWidth.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/Alignment.d.ts +6 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Layout/LengthWithUnitInput.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Margin.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/MarginPadding/Padding.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/Groups/Visibility/Visibility.d.ts +2 -2
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/SidebarRow.js.map +1 -1
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js +2 -5
- package/BaseEditor/defaultConfig/Sidebar/StyleSettings/StyleSettingsGroup.js.map +1 -1
- package/BaseEditor/defaultConfig/Toolbar/Navigator/Navigator.d.ts +2 -2
- package/DocumentEditor/DocumentEditor.d.ts +2 -2
- package/DocumentEditor/StateInspector.d.ts +4 -2
- 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/ecommerce/components/ResourcePage.d.ts +6 -2
- package/ecommerce/components/ResourcesList.d.ts +4 -4
- package/ecommerce/components/ResourcesPicker.d.ts +9 -4
- package/editorSdk/CommandBus.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/DateTimeInput.d.ts +9 -0
- package/inputRenderers/DateTimeInput.js +21 -0
- package/inputRenderers/DateTimeInput.js.map +1 -0
- package/inputRenderers/DateTimeInput.test.d.ts +1 -0
- package/inputRenderers/DateTimeInput.test.js +27 -0
- package/inputRenderers/DateTimeInput.test.js.map +1 -0
- package/inputRenderers/RadioInput.d.ts +3 -0
- package/inputRenderers/RadioInput.js +20 -0
- package/inputRenderers/RadioInput.js.map +1 -0
- package/inputRenderers/TagsInput.d.ts +3 -0
- package/inputRenderers/TagsInput.js +22 -0
- package/inputRenderers/TagsInput.js.map +1 -0
- package/package.json +31 -31
- package/presentation/pages/CreatePage/CreatePageDialog.d.ts +2 -2
- 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/PageSettingsDrawer.d.ts +2 -2
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js +7 -19
- package/presentation/pages/PageEditor/TopBar/RevisionsMenu.js.map +1 -1
- package/presentation/pages/PageList/PageListPresenter.test.js +3 -1
- package/presentation/pages/PageList/PageListPresenter.test.js.map +1 -1
- package/presentation/pages/PageList/components/BulkActions/BulkActionDelete.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionDuplicate.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionMovePage.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionPublish.d.ts +2 -2
- package/presentation/pages/PageList/components/BulkActions/BulkActionUnpublish.d.ts +2 -2
- package/presentation/pages/PageList/components/DocumentList.d.ts +2 -2
- package/presentation/pages/PageList/components/Table/Table.d.ts +2 -2
- 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/pages/TrashBin/WbTrashBin.d.ts +2 -2
- package/presentation/redirects/RedirectList/RedirectListPresenter.js.map +1 -1
- package/presentation/redirects/RedirectList/RedirectListPresenter.test.js.map +1 -1
- package/presentation/redirects/RedirectList/components/BulkActionDelete.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/BulkActionMove.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/CreateRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/DocumentList.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/EditRedirectDialog.d.ts +2 -2
- package/presentation/redirects/RedirectList/components/Table/Table.d.ts +2 -2
- package/BaseEditor/defaultConfig/Content/usePreviewDomain.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/publishPage/PublishPage.test.js","sources":["../../../../src/features/pages/publishPage/PublishPage.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { Page, pageListCache, fullPageCache } from \"~/domain/Page/index.js\";\nimport {\n PublishPageUseCase as UseCaseAbstraction,\n PublishPageGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { PublishPageUseCase } from \"./PublishPageUseCase.js\";\nimport { PublishPageRepository } from \"./PublishPageRepository.js\";\nimport { PageListCache, FullPageCache } from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"PublishPage\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Published,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n metadata: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n extensions: {\n ext1: \"ext-data\"\n }\n })\n };\n\n const pagesCache = pageListCache;\n const detailsCache = fullPageCache;\n\n beforeEach(() => {\n vi.clearAllMocks();\n pagesCache.clear();\n detailsCache.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 metadata: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n ]);\n detailsCache.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 metadata: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n extensions: {\n ext1: \"ext-data\"\n }\n })\n ]);\n });\n\n it(\"should be able to publish a page\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, fullPageCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(PublishPageRepository).inSingletonScope();\n container.register(PublishPageUseCase);\n\n const publishPage = 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 publishPage.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n expect(gateway.execute).toHaveBeenLastCalledWith(\"page-1#0001\");\n\n expect(pagesCache.hasItems()).toBeTrue();\n const publishedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(publishedItem?.id).toEqual(\"page-1#0001\");\n expect(publishedItem?.status).toEqual(WbPageStatus.Published);\n\n // Details cache is updated with the full gateway result including document fields\n const detailItem = detailsCache.getItem(page => page.entryId === \"page-1\");\n expect(detailItem).toBeDefined();\n expect(detailItem?.id).toEqual(\"page-1#0001\");\n expect(detailItem?.status).toEqual(WbPageStatus.Published);\n expect(detailItem?.elements).toMatchObject({ element1: \"element\" });\n expect(detailItem?.bindings).toMatchObject({ data: \"any-data\" });\n expect(detailItem?.extensions).toMatchObject({ ext1: \"ext-data\" });\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(FullPageCache, fullPageCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(PublishPageRepository).inSingletonScope();\n container.register(PublishPageUseCase);\n\n const publishPage = container.resolve(UseCaseAbstraction);\n\n await publishPage.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n const publishedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(publishedItem?.id).toEqual(\"page-1#0001\");\n expect(publishedItem?.status).toEqual(WbPageStatus.Draft);\n });\n});\n"],"names":["describe","gateway","vi","WbPageStatus","pagesCache","pageListCache","detailsCache","fullPageCache","beforeEach","Page","it","container","Container","PageListCache","FullPageCache","GatewayAbstraction","PublishPageRepository","PublishPageUseCase","publishPage","UseCaseAbstraction","expect","item","page","publishedItem","detailItem"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"features/pages/publishPage/PublishPage.test.js","sources":["../../../../src/features/pages/publishPage/PublishPage.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus, type WbStatus } from \"~/constants.js\";\nimport { Page, pageListCache, fullPageCache } from \"~/domain/Page/index.js\";\nimport { PageRevision, pageRevisionsCacheFactory } from \"~/domain/PageRevision/index.js\";\nimport {\n PublishPageUseCase as UseCaseAbstraction,\n PublishPageGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { PublishPageUseCase } from \"./PublishPageUseCase.js\";\nimport { PublishPageRepository } from \"./PublishPageRepository.js\";\nimport {\n PageListCache,\n FullPageCache,\n PageRevisionsCache\n} from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"PublishPage\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Published,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n metadata: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n extensions: {\n ext1: \"ext-data\"\n }\n })\n };\n\n const pagesCache = pageListCache;\n const detailsCache = fullPageCache;\n\n beforeEach(() => {\n vi.clearAllMocks();\n pagesCache.clear();\n detailsCache.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 metadata: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n ]);\n detailsCache.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 metadata: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n extensions: {\n ext1: \"ext-data\"\n }\n })\n ]);\n });\n\n it(\"should be able to publish a page\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, fullPageCache);\n container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(PublishPageRepository).inSingletonScope();\n container.register(PublishPageUseCase);\n\n const publishPage = 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 publishPage.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n expect(gateway.execute).toHaveBeenLastCalledWith(\"page-1#0001\");\n\n expect(pagesCache.hasItems()).toBeTrue();\n const publishedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(publishedItem?.id).toEqual(\"page-1#0001\");\n expect(publishedItem?.status).toEqual(WbPageStatus.Published);\n\n // Details cache is updated with the full gateway result including document fields\n const detailItem = detailsCache.getItem(page => page.entryId === \"page-1\");\n expect(detailItem).toBeDefined();\n expect(detailItem?.id).toEqual(\"page-1#0001\");\n expect(detailItem?.status).toEqual(WbPageStatus.Published);\n expect(detailItem?.elements).toMatchObject({ element1: \"element\" });\n expect(detailItem?.bindings).toMatchObject({ data: \"any-data\" });\n expect(detailItem?.extensions).toMatchObject({ ext1: \"ext-data\" });\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(FullPageCache, fullPageCache);\n container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(PublishPageRepository).inSingletonScope();\n container.register(PublishPageUseCase);\n\n const publishPage = container.resolve(UseCaseAbstraction);\n\n await publishPage.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n const publishedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(publishedItem?.id).toEqual(\"page-1#0001\");\n expect(publishedItem?.status).toEqual(WbPageStatus.Draft);\n });\n\n it(\"should publish the revision and unpublish the previously published one\", async () => {\n const revisionsCache = pageRevisionsCacheFactory.getCache();\n revisionsCache.clear();\n\n const makeRevision = (id: string, version: number, status: WbStatus) =>\n PageRevision.create({\n id,\n entryId: \"page-1\",\n version,\n status,\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 revisionsCache.addItems([\n makeRevision(\"page-1#0001\", 1, WbPageStatus.Draft),\n makeRevision(\"page-1#0002\", 2, WbPageStatus.Published)\n ]);\n\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, fullPageCache);\n container.registerInstance(PageRevisionsCache, revisionsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(PublishPageRepository).inSingletonScope();\n container.register(PublishPageUseCase);\n\n const publishPage = container.resolve(UseCaseAbstraction);\n\n await publishPage.execute({ id: \"page-1#0001\" });\n\n expect(revisionsCache.getItem(r => r.id === \"page-1#0001\")?.status).toEqual(\n WbPageStatus.Published\n );\n expect(revisionsCache.getItem(r => r.id === \"page-1#0002\")?.status).toEqual(\n WbPageStatus.Unpublished\n );\n });\n});\n"],"names":["describe","gateway","vi","WbPageStatus","pagesCache","pageListCache","detailsCache","fullPageCache","beforeEach","Page","it","container","Container","PageListCache","FullPageCache","PageRevisionsCache","pageRevisionsCacheFactory","GatewayAbstraction","PublishPageRepository","PublishPageUseCase","publishPage","UseCaseAbstraction","expect","item","page","publishedItem","detailItem","revisionsCache","makeRevision","id","version","status","PageRevision","undefined","r"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { PublishPageRepository as RepositoryAbstraction, PublishPageGateway } from "./abstractions.js";
|
|
2
2
|
import { Page } from "../../../domain/Page/Page.js";
|
|
3
|
-
import { PageListCache, FullPageCache } from "../../../features/pages/shared/abstractions.js";
|
|
3
|
+
import { PageListCache, FullPageCache, PageRevisionsCache } from "../../../features/pages/shared/abstractions.js";
|
|
4
4
|
declare class PublishPageRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
5
5
|
private listCache;
|
|
6
6
|
private detailsCache;
|
|
7
|
+
private revisionsCache;
|
|
7
8
|
private gateway;
|
|
8
|
-
constructor(listCache: PageListCache.Interface, detailsCache: FullPageCache.Interface, gateway: PublishPageGateway.Interface);
|
|
9
|
+
constructor(listCache: PageListCache.Interface, detailsCache: FullPageCache.Interface, revisionsCache: PageRevisionsCache.Interface, gateway: PublishPageGateway.Interface);
|
|
9
10
|
execute(page: Page): Promise<void>;
|
|
10
11
|
}
|
|
11
12
|
export declare const PublishPageRepository: typeof PublishPageRepositoryImpl & {
|
|
@@ -1,22 +1,32 @@
|
|
|
1
1
|
import { PublishPageGateway, PublishPageRepository } from "./abstractions.js";
|
|
2
2
|
import { Page } from "../../../domain/Page/Page.js";
|
|
3
|
-
import {
|
|
3
|
+
import { PageRevision } from "../../../domain/PageRevision/PageRevision.js";
|
|
4
|
+
import { WbPageStatus } from "../../../constants.js";
|
|
5
|
+
import { FullPageCache, PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
|
|
4
6
|
class PublishPageRepositoryImpl {
|
|
5
|
-
constructor(listCache, detailsCache, gateway){
|
|
7
|
+
constructor(listCache, detailsCache, revisionsCache, gateway){
|
|
6
8
|
this.listCache = listCache;
|
|
7
9
|
this.detailsCache = detailsCache;
|
|
10
|
+
this.revisionsCache = revisionsCache;
|
|
8
11
|
this.gateway = gateway;
|
|
9
12
|
}
|
|
10
13
|
async execute(page) {
|
|
11
14
|
const result = await this.gateway.execute(page.id);
|
|
15
|
+
const publishedPage = Page.create(result);
|
|
12
16
|
this.listCache.updateItems((existingPage)=>{
|
|
13
|
-
if (existingPage.id === page.id) return
|
|
17
|
+
if (existingPage.id === page.id) return publishedPage;
|
|
14
18
|
return existingPage;
|
|
15
19
|
});
|
|
16
20
|
this.detailsCache.updateItems((existingPage)=>{
|
|
17
|
-
if (existingPage.id === page.id) return
|
|
21
|
+
if (existingPage.id === page.id) return publishedPage;
|
|
18
22
|
return existingPage;
|
|
19
23
|
});
|
|
24
|
+
const publishedRevision = PageRevision.createFromPage(publishedPage);
|
|
25
|
+
this.revisionsCache.updateItems((revision)=>{
|
|
26
|
+
if (revision.id === publishedPage.id) return publishedRevision;
|
|
27
|
+
if (revision.entryId === publishedPage.entryId && revision.status === WbPageStatus.Published) return revision.withStatus(WbPageStatus.Unpublished);
|
|
28
|
+
return revision;
|
|
29
|
+
});
|
|
20
30
|
}
|
|
21
31
|
}
|
|
22
32
|
const PublishPageRepository_PublishPageRepository = PublishPageRepository.createImplementation({
|
|
@@ -24,6 +34,7 @@ const PublishPageRepository_PublishPageRepository = PublishPageRepository.create
|
|
|
24
34
|
dependencies: [
|
|
25
35
|
PageListCache,
|
|
26
36
|
FullPageCache,
|
|
37
|
+
PageRevisionsCache,
|
|
27
38
|
PublishPageGateway
|
|
28
39
|
]
|
|
29
40
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/publishPage/PublishPageRepository.js","sources":["../../../../src/features/pages/publishPage/PublishPageRepository.ts"],"sourcesContent":["import {\n PublishPageRepository as RepositoryAbstraction,\n PublishPageGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport {
|
|
1
|
+
{"version":3,"file":"features/pages/publishPage/PublishPageRepository.js","sources":["../../../../src/features/pages/publishPage/PublishPageRepository.ts"],"sourcesContent":["import {\n PublishPageRepository as RepositoryAbstraction,\n PublishPageGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageRevision } from \"~/domain/PageRevision/PageRevision.js\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport {\n PageListCache,\n FullPageCache,\n PageRevisionsCache\n} from \"~/features/pages/shared/abstractions.js\";\n\nclass PublishPageRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private listCache: PageListCache.Interface,\n private detailsCache: FullPageCache.Interface,\n private revisionsCache: PageRevisionsCache.Interface,\n private gateway: PublishPageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n const publishedPage = Page.create(result);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return publishedPage;\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return publishedPage;\n }\n return existingPage;\n });\n\n const publishedRevision = PageRevision.createFromPage(publishedPage);\n\n this.revisionsCache.updateItems(revision => {\n if (revision.id === publishedPage.id) {\n return publishedRevision;\n }\n\n // Only one revision of an entry can be published, so the previous one is now unpublished.\n if (\n revision.entryId === publishedPage.entryId &&\n revision.status === WbPageStatus.Published\n ) {\n return revision.withStatus(WbPageStatus.Unpublished);\n }\n\n return revision;\n });\n }\n}\n\nexport const PublishPageRepository = RepositoryAbstraction.createImplementation({\n implementation: PublishPageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, PageRevisionsCache, PublishPageGateway]\n});\n"],"names":["PublishPageRepositoryImpl","listCache","detailsCache","revisionsCache","gateway","page","result","publishedPage","Page","existingPage","publishedRevision","PageRevision","revision","WbPageStatus","PublishPageRepository","RepositoryAbstraction","PageListCache","FullPageCache","PageRevisionsCache","PublishPageGateway"],"mappings":";;;;;AAaA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,cAA4C,EAC5CC,OAAqC,CAC/C;aAJUH,SAAS,GAATA;aACAC,YAAY,GAAZA;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,gBAAgBC,KAAK,MAAM,CAACF;QAElC,IAAI,CAAC,SAAS,CAAC,WAAW,CAACG,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKJ,KAAK,EAAE,EAC3B,OAAOE;YAEX,OAAOE;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKJ,KAAK,EAAE,EAC3B,OAAOE;YAEX,OAAOE;QACX;QAEA,MAAMC,oBAAoBC,aAAa,cAAc,CAACJ;QAEtD,IAAI,CAAC,cAAc,CAAC,WAAW,CAACK,CAAAA;YAC5B,IAAIA,SAAS,EAAE,KAAKL,cAAc,EAAE,EAChC,OAAOG;YAIX,IACIE,SAAS,OAAO,KAAKL,cAAc,OAAO,IAC1CK,SAAS,MAAM,KAAKC,aAAa,SAAS,EAE1C,OAAOD,SAAS,UAAU,CAACC,aAAa,WAAW;YAGvD,OAAOD;QACX;IACJ;AACJ;AAEO,MAAME,8CAAwBC,sBAAAA,oBAA0C,CAAC;IAC5E,gBAAgBf;IAChB,cAAc;QAACgB;QAAeC;QAAeC;QAAoBC;KAAmB;AACxF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/shared/pageGraphQLFields.js","sources":["../../../../src/features/pages/shared/pageGraphQLFields.ts"],"sourcesContent":["export const getPageGraphQLBaseFields = (): string[] => {\n return [\n `id`,\n `entryId`,\n `status`,\n `version`,\n `location {\n folderId\n }`,\n `createdOn`,\n `createdBy {\n id\n displayName\n }`,\n `savedOn`,\n `savedBy {\n id\n displayName\n }`,\n `modifiedOn`,\n `modifiedBy {\n id\n displayName\n }`,\n `live {\n version\n }\n `,\n `revisionDescription`\n ];\n};\n\nexport const getPageGraphQLFields = (extraFields: string[]): string[] => {\n return [...getPageGraphQLBaseFields(), ...extraFields];\n};\n"],"names":["getPageGraphQLBaseFields","getPageGraphQLFields","extraFields"],"mappings":"AAAO,MAAMA,2BAA2B,IAC7B;QACH;QACA;QACA;QACA;QACA,CAAC;;SAEA,CAAC;QACF;QACA,CAAC;;;SAGA,CAAC;QACF;QACA,CAAC;;;SAGA,CAAC;QACF;QACA,CAAC;;;SAGA,CAAC;QACF,CAAC;;;QAGD,CAAC;QACD;KACH;AAGE,MAAMC,uBAAuB,CAACC,cAC1B;WAAIF;WAA+BE;KAAY"}
|
|
1
|
+
{"version":3,"file":"features/pages/shared/pageGraphQLFields.js","sources":["../../../../src/features/pages/shared/pageGraphQLFields.ts"],"sourcesContent":["export const getPageGraphQLBaseFields = (): string[] => {\n return [\n `id`,\n `entryId`,\n `status`,\n `version`,\n `locked`,\n `location {\n folderId\n }`,\n `createdOn`,\n `createdBy {\n id\n displayName\n }`,\n `savedOn`,\n `savedBy {\n id\n displayName\n }`,\n `modifiedOn`,\n `modifiedBy {\n id\n displayName\n }`,\n `live {\n version\n }\n `,\n `revisionDescription`\n ];\n};\n\nexport const getPageGraphQLFields = (extraFields: string[]): string[] => {\n return [...getPageGraphQLBaseFields(), ...extraFields];\n};\n"],"names":["getPageGraphQLBaseFields","getPageGraphQLFields","extraFields"],"mappings":"AAAO,MAAMA,2BAA2B,IAC7B;QACH;QACA;QACA;QACA;QACA;QACA,CAAC;;SAEA,CAAC;QACF;QACA,CAAC;;;SAGA,CAAC;QACF;QACA,CAAC;;;SAGA,CAAC;QACF;QACA,CAAC;;;SAGA,CAAC;QACF,CAAC;;;QAGD,CAAC;QACD;KACH;AAGE,MAAMC,uBAAuB,CAACC,cAC1B;WAAIF;WAA+BE;KAAY"}
|
|
@@ -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, fullPageCache, pageListCache } from "../../../domain/Page/index.js";
|
|
5
|
+
import { pageRevisionsCacheFactory } from "../../../domain/PageRevision/index.js";
|
|
5
6
|
import { UnpublishPageGateway, UnpublishPageUseCase } from "./abstractions.js";
|
|
6
7
|
import { UnpublishPageUseCase as external_UnpublishPageUseCase_js_UnpublishPageUseCase } from "./UnpublishPageUseCase.js";
|
|
7
8
|
import { UnpublishPageRepository } from "./UnpublishPageRepository.js";
|
|
8
|
-
import { FullPageCache, PageListCache } from "../shared/abstractions.js";
|
|
9
|
+
import { FullPageCache, PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
|
|
9
10
|
describe("UnpublishPage", ()=>{
|
|
10
11
|
const gateway = {
|
|
11
12
|
execute: vi.fn().mockResolvedValue({
|
|
@@ -84,6 +85,7 @@ describe("UnpublishPage", ()=>{
|
|
|
84
85
|
const container = new Container();
|
|
85
86
|
container.registerInstance(PageListCache, pagesCache);
|
|
86
87
|
container.registerInstance(FullPageCache, detailsCache);
|
|
88
|
+
container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());
|
|
87
89
|
container.registerInstance(UnpublishPageGateway, gateway);
|
|
88
90
|
container.register(UnpublishPageRepository).inSingletonScope();
|
|
89
91
|
container.register(external_UnpublishPageUseCase_js_UnpublishPageUseCase);
|
|
@@ -118,6 +120,7 @@ describe("UnpublishPage", ()=>{
|
|
|
118
120
|
const container = new Container();
|
|
119
121
|
container.registerInstance(PageListCache, pagesCache);
|
|
120
122
|
container.registerInstance(FullPageCache, detailsCache);
|
|
123
|
+
container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());
|
|
121
124
|
container.registerInstance(UnpublishPageGateway, gateway);
|
|
122
125
|
container.register(UnpublishPageRepository).inSingletonScope();
|
|
123
126
|
container.register(external_UnpublishPageUseCase_js_UnpublishPageUseCase);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/unpublishPage/UnpublishPage.test.js","sources":["../../../../src/features/pages/unpublishPage/UnpublishPage.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { Page, pageListCache, fullPageCache } from \"~/domain/Page/index.js\";\nimport {\n UnpublishPageUseCase as UseCaseAbstraction,\n UnpublishPageGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { UnpublishPageUseCase } from \"./UnpublishPageUseCase.js\";\nimport { UnpublishPageRepository } from \"./UnpublishPageRepository.js\";\nimport {
|
|
1
|
+
{"version":3,"file":"features/pages/unpublishPage/UnpublishPage.test.js","sources":["../../../../src/features/pages/unpublishPage/UnpublishPage.test.ts"],"sourcesContent":["import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport { Container } from \"@webiny/di\";\nimport { WbPageStatus } from \"~/constants.js\";\nimport { Page, pageListCache, fullPageCache } from \"~/domain/Page/index.js\";\nimport { pageRevisionsCacheFactory } from \"~/domain/PageRevision/index.js\";\nimport {\n UnpublishPageUseCase as UseCaseAbstraction,\n UnpublishPageGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { UnpublishPageUseCase } from \"./UnpublishPageUseCase.js\";\nimport { UnpublishPageRepository } from \"./UnpublishPageRepository.js\";\nimport {\n PageListCache,\n FullPageCache,\n PageRevisionsCache\n} from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"UnpublishPage\", () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Unpublished,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n metadata: {\n metadata: \"data-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n extensions: {\n ext1: \"ext-data\"\n }\n })\n };\n\n const pagesCache = pageListCache;\n const detailsCache = fullPageCache;\n\n beforeEach(() => {\n vi.clearAllMocks();\n pagesCache.clear();\n detailsCache.clear();\n pagesCache.addItems([\n Page.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Published,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n }\n })\n ]);\n detailsCache.addItems([\n Page.create({\n id: \"page-1#0001\",\n entryId: \"page-1\",\n status: WbPageStatus.Published,\n location: {\n folderId: \"folder-1\"\n },\n properties: {\n title: \"Page 1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n extensions: {\n ext1: \"ext-data\"\n }\n })\n ]);\n });\n\n it(\"should be able to unpublish a page\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UnpublishPageRepository).inSingletonScope();\n container.register(UnpublishPageUseCase);\n\n const unpublishPage = 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 unpublishPage.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n expect(gateway.execute).toHaveBeenLastCalledWith(\"page-1#0001\");\n\n expect(pagesCache.hasItems()).toBeTrue();\n const publishedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(publishedItem?.id).toEqual(\"page-1#0001\");\n expect(publishedItem?.status).toEqual(WbPageStatus.Unpublished);\n\n // Details cache is updated with the full gateway result including document fields\n const detailItem = detailsCache.getItem(page => page.entryId === \"page-1\");\n expect(detailItem).toBeDefined();\n expect(detailItem?.id).toEqual(\"page-1#0001\");\n expect(detailItem?.status).toEqual(WbPageStatus.Unpublished);\n expect(detailItem?.elements).toMatchObject({ element1: \"element\" });\n expect(detailItem?.bindings).toMatchObject({ data: \"any-data\" });\n expect(detailItem?.extensions).toMatchObject({ ext1: \"ext-data\" });\n });\n\n it(\"should not unpublish a page if id is missing\", async () => {\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(PageRevisionsCache, pageRevisionsCacheFactory.getCache());\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UnpublishPageRepository).inSingletonScope();\n container.register(UnpublishPageUseCase);\n\n const unpublishPage = container.resolve(UseCaseAbstraction);\n\n await unpublishPage.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n const publishedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(publishedItem?.id).toEqual(\"page-1#0001\");\n expect(publishedItem?.status).toEqual(WbPageStatus.Published);\n });\n});\n"],"names":["describe","gateway","vi","WbPageStatus","pagesCache","pageListCache","detailsCache","fullPageCache","beforeEach","Page","it","container","Container","PageListCache","FullPageCache","PageRevisionsCache","pageRevisionsCacheFactory","GatewayAbstraction","UnpublishPageRepository","UnpublishPageUseCase","unpublishPage","UseCaseAbstraction","expect","item","page","publishedItem","detailItem"],"mappings":"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"}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { UnpublishPageRepository as RepositoryAbstraction, UnpublishPageGateway } from "./abstractions.js";
|
|
2
2
|
import { Page } from "../../../domain/Page/Page.js";
|
|
3
|
-
import { PageListCache, FullPageCache } from "../../../features/pages/shared/abstractions.js";
|
|
3
|
+
import { PageListCache, FullPageCache, PageRevisionsCache } from "../../../features/pages/shared/abstractions.js";
|
|
4
4
|
declare class UnpublishPageRepositoryImpl implements RepositoryAbstraction.Interface {
|
|
5
5
|
private listCache;
|
|
6
6
|
private detailsCache;
|
|
7
|
+
private revisionsCache;
|
|
7
8
|
private gateway;
|
|
8
|
-
constructor(listCache: PageListCache.Interface, detailsCache: FullPageCache.Interface, gateway: UnpublishPageGateway.Interface);
|
|
9
|
+
constructor(listCache: PageListCache.Interface, detailsCache: FullPageCache.Interface, revisionsCache: PageRevisionsCache.Interface, gateway: UnpublishPageGateway.Interface);
|
|
9
10
|
execute(page: Page): Promise<void>;
|
|
10
11
|
}
|
|
11
12
|
export declare const UnpublishPageRepository: typeof UnpublishPageRepositoryImpl & {
|
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import { UnpublishPageGateway, UnpublishPageRepository } from "./abstractions.js";
|
|
2
2
|
import { Page } from "../../../domain/Page/Page.js";
|
|
3
|
-
import {
|
|
3
|
+
import { PageRevision } from "../../../domain/PageRevision/PageRevision.js";
|
|
4
|
+
import { FullPageCache, PageListCache, PageRevisionsCache } from "../shared/abstractions.js";
|
|
4
5
|
class UnpublishPageRepositoryImpl {
|
|
5
|
-
constructor(listCache, detailsCache, gateway){
|
|
6
|
+
constructor(listCache, detailsCache, revisionsCache, gateway){
|
|
6
7
|
this.listCache = listCache;
|
|
7
8
|
this.detailsCache = detailsCache;
|
|
9
|
+
this.revisionsCache = revisionsCache;
|
|
8
10
|
this.gateway = gateway;
|
|
9
11
|
}
|
|
10
12
|
async execute(page) {
|
|
11
13
|
const result = await this.gateway.execute(page.id);
|
|
14
|
+
const unpublishedPage = Page.create(result);
|
|
12
15
|
this.listCache.updateItems((existingPage)=>{
|
|
13
|
-
if (existingPage.id === page.id) return
|
|
16
|
+
if (existingPage.id === page.id) return unpublishedPage;
|
|
14
17
|
return existingPage;
|
|
15
18
|
});
|
|
16
19
|
this.detailsCache.updateItems((existingPage)=>{
|
|
17
|
-
if (existingPage.id === page.id) return
|
|
20
|
+
if (existingPage.id === page.id) return unpublishedPage;
|
|
18
21
|
return existingPage;
|
|
19
22
|
});
|
|
23
|
+
this.revisionsCache.updateItems((revision)=>{
|
|
24
|
+
if (revision.id === unpublishedPage.id) return PageRevision.createFromPage(unpublishedPage);
|
|
25
|
+
return revision;
|
|
26
|
+
});
|
|
20
27
|
}
|
|
21
28
|
}
|
|
22
29
|
const UnpublishPageRepository_UnpublishPageRepository = UnpublishPageRepository.createImplementation({
|
|
@@ -24,6 +31,7 @@ const UnpublishPageRepository_UnpublishPageRepository = UnpublishPageRepository.
|
|
|
24
31
|
dependencies: [
|
|
25
32
|
PageListCache,
|
|
26
33
|
FullPageCache,
|
|
34
|
+
PageRevisionsCache,
|
|
27
35
|
UnpublishPageGateway
|
|
28
36
|
]
|
|
29
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"features/pages/unpublishPage/UnpublishPageRepository.js","sources":["../../../../src/features/pages/unpublishPage/UnpublishPageRepository.ts"],"sourcesContent":["import {\n UnpublishPageRepository as RepositoryAbstraction,\n UnpublishPageGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageListCache
|
|
1
|
+
{"version":3,"file":"features/pages/unpublishPage/UnpublishPageRepository.js","sources":["../../../../src/features/pages/unpublishPage/UnpublishPageRepository.ts"],"sourcesContent":["import {\n UnpublishPageRepository as RepositoryAbstraction,\n UnpublishPageGateway\n} from \"./abstractions.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageRevision } from \"~/domain/PageRevision/PageRevision.js\";\nimport {\n PageListCache,\n FullPageCache,\n PageRevisionsCache\n} from \"~/features/pages/shared/abstractions.js\";\n\nclass UnpublishPageRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private listCache: PageListCache.Interface,\n private detailsCache: FullPageCache.Interface,\n private revisionsCache: PageRevisionsCache.Interface,\n private gateway: UnpublishPageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n const unpublishedPage = Page.create(result);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return unpublishedPage;\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return unpublishedPage;\n }\n return existingPage;\n });\n\n this.revisionsCache.updateItems(revision => {\n if (revision.id === unpublishedPage.id) {\n return PageRevision.createFromPage(unpublishedPage);\n }\n return revision;\n });\n }\n}\n\nexport const UnpublishPageRepository = RepositoryAbstraction.createImplementation({\n implementation: UnpublishPageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, PageRevisionsCache, UnpublishPageGateway]\n});\n"],"names":["UnpublishPageRepositoryImpl","listCache","detailsCache","revisionsCache","gateway","page","result","unpublishedPage","Page","existingPage","revision","PageRevision","UnpublishPageRepository","RepositoryAbstraction","PageListCache","FullPageCache","PageRevisionsCache","UnpublishPageGateway"],"mappings":";;;;AAYA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,cAA4C,EAC5CC,OAAuC,CACjD;aAJUH,SAAS,GAATA;aACAC,YAAY,GAAZA;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,kBAAkBC,KAAK,MAAM,CAACF;QAEpC,IAAI,CAAC,SAAS,CAAC,WAAW,CAACG,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKJ,KAAK,EAAE,EAC3B,OAAOE;YAEX,OAAOE;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKJ,KAAK,EAAE,EAC3B,OAAOE;YAEX,OAAOE;QACX;QAEA,IAAI,CAAC,cAAc,CAAC,WAAW,CAACC,CAAAA;YAC5B,IAAIA,SAAS,EAAE,KAAKH,gBAAgB,EAAE,EAClC,OAAOI,aAAa,cAAc,CAACJ;YAEvC,OAAOG;QACX;IACJ;AACJ;AAEO,MAAME,kDAA0BC,wBAAAA,oBAA0C,CAAC;IAC9E,gBAAgBb;IAChB,cAAc;QAACc;QAAeC;QAAeC;QAAoBC;KAAqB;AAC1F"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { ElementInputRendererProps } from "../BaseEditor/index.js";
|
|
3
|
+
/**
|
|
4
|
+
* The `dateTimeLocal` picker displays the stored ISO instant in local time, but emits the edited
|
|
5
|
+
* local wall-clock time with a `Z` suffix. Read that wall-clock time as local and convert it to a
|
|
6
|
+
* real UTC instant, so the stored value matches what the user picked.
|
|
7
|
+
*/
|
|
8
|
+
export declare const toUtcIsoString: (pickerValue: string | undefined) => string | undefined;
|
|
9
|
+
export declare const DateTimeInputRenderer: ({ value, onChange, input, label }: ElementInputRendererProps) => React.JSX.Element;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { DatePicker } from "@webiny/admin-ui";
|
|
3
|
+
const toUtcIsoString = (pickerValue)=>{
|
|
4
|
+
if (!pickerValue) return;
|
|
5
|
+
return new Date(pickerValue.replace(/Z$/, "")).toISOString();
|
|
6
|
+
};
|
|
7
|
+
const DateTimeInputRenderer = ({ value, onChange, input, label })=>/*#__PURE__*/ react.createElement(DatePicker, {
|
|
8
|
+
type: "dateTimeLocal",
|
|
9
|
+
value: value || void 0,
|
|
10
|
+
onChange: (newValue)=>{
|
|
11
|
+
onChange(({ value })=>{
|
|
12
|
+
value.set(toUtcIsoString(newValue));
|
|
13
|
+
});
|
|
14
|
+
},
|
|
15
|
+
label: label,
|
|
16
|
+
description: input.description,
|
|
17
|
+
note: input.helperText
|
|
18
|
+
});
|
|
19
|
+
export { DateTimeInputRenderer, toUtcIsoString };
|
|
20
|
+
|
|
21
|
+
//# sourceMappingURL=DateTimeInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputRenderers/DateTimeInput.js","sources":["../../src/inputRenderers/DateTimeInput.tsx"],"sourcesContent":["import React from \"react\";\nimport { DatePicker } from \"@webiny/admin-ui\";\nimport type { ElementInputRendererProps } from \"~/BaseEditor/index.js\";\n\n/**\n * The `dateTimeLocal` picker displays the stored ISO instant in local time, but emits the edited\n * local wall-clock time with a `Z` suffix. Read that wall-clock time as local and convert it to a\n * real UTC instant, so the stored value matches what the user picked.\n */\nexport const toUtcIsoString = (pickerValue: string | undefined) => {\n if (!pickerValue) {\n return undefined;\n }\n return new Date(pickerValue.replace(/Z$/, \"\")).toISOString();\n};\n\nexport const DateTimeInputRenderer = ({\n value,\n onChange,\n input,\n label\n}: ElementInputRendererProps) => {\n return (\n <DatePicker\n type={\"dateTimeLocal\"}\n value={value || undefined}\n onChange={(newValue: string | undefined) => {\n onChange(({ value }) => {\n value.set(toUtcIsoString(newValue));\n });\n }}\n label={label}\n description={input.description}\n note={input.helperText}\n />\n );\n};\n"],"names":["toUtcIsoString","pickerValue","Date","DateTimeInputRenderer","value","onChange","input","label","DatePicker","undefined","newValue"],"mappings":";;AASO,MAAMA,iBAAiB,CAACC;IAC3B,IAAI,CAACA,aACD;IAEJ,OAAO,IAAIC,KAAKD,YAAY,OAAO,CAAC,MAAM,KAAK,WAAW;AAC9D;AAEO,MAAME,wBAAwB,CAAC,EAClCC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACLC,KAAK,EACmB,GACjB,WAAP,GACI,oBAACC,YAAUA;QACP,MAAM;QACN,OAAOJ,SAASK;QAChB,UAAU,CAACC;YACPL,SAAS,CAAC,EAAED,KAAK,EAAE;gBACfA,MAAM,GAAG,CAACJ,eAAeU;YAC7B;QACJ;QACA,OAAOH;QACP,aAAaD,MAAM,WAAW;QAC9B,MAAMA,MAAM,UAAU"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { afterAll, beforeAll, describe, expect, it } from "vitest";
|
|
2
|
+
import { toUtcIsoString } from "./DateTimeInput.js";
|
|
3
|
+
describe("toUtcIsoString", ()=>{
|
|
4
|
+
const originalTz = process.env.TZ;
|
|
5
|
+
beforeAll(()=>{
|
|
6
|
+
process.env.TZ = "America/New_York";
|
|
7
|
+
});
|
|
8
|
+
afterAll(()=>{
|
|
9
|
+
process.env.TZ = originalTz;
|
|
10
|
+
});
|
|
11
|
+
it("converts the picker's local wall-clock value to the matching UTC instant", ()=>{
|
|
12
|
+
expect(toUtcIsoString("2026-10-02T09:00:00.000Z")).toBe("2026-10-02T13:00:00.000Z");
|
|
13
|
+
});
|
|
14
|
+
it("round-trips: a stored instant shown in local time is saved back unchanged", ()=>{
|
|
15
|
+
const stored = "2026-10-02T14:00:00.000Z";
|
|
16
|
+
const shown = new Date(stored);
|
|
17
|
+
const pad = (n)=>String(n).padStart(2, "0");
|
|
18
|
+
const emitted = `${shown.getFullYear()}-${pad(shown.getMonth() + 1)}-${pad(shown.getDate())}T${pad(shown.getHours())}:${pad(shown.getMinutes())}:00.000Z`;
|
|
19
|
+
expect(toUtcIsoString(emitted)).toBe(stored);
|
|
20
|
+
});
|
|
21
|
+
it("keeps an empty value empty", ()=>{
|
|
22
|
+
expect(toUtcIsoString(void 0)).toBeUndefined();
|
|
23
|
+
expect(toUtcIsoString("")).toBeUndefined();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
//# sourceMappingURL=DateTimeInput.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputRenderers/DateTimeInput.test.js","sources":["../../src/inputRenderers/DateTimeInput.test.ts"],"sourcesContent":["import { describe, it, expect, beforeAll, afterAll } from \"vitest\";\nimport { toUtcIsoString } from \"./DateTimeInput.js\";\n\ndescribe(\"toUtcIsoString\", () => {\n const originalTz = process.env.TZ;\n\n beforeAll(() => {\n // UTC-04:00 on the dates below (EDT).\n process.env.TZ = \"America/New_York\";\n });\n\n afterAll(() => {\n process.env.TZ = originalTz;\n });\n\n it(\"converts the picker's local wall-clock value to the matching UTC instant\", () => {\n // The user picks 09:00 local time; the picker emits it as \"09:00Z\".\n expect(toUtcIsoString(\"2026-10-02T09:00:00.000Z\")).toBe(\"2026-10-02T13:00:00.000Z\");\n });\n\n it(\"round-trips: a stored instant shown in local time is saved back unchanged\", () => {\n const stored = \"2026-10-02T14:00:00.000Z\";\n // What the picker displays (local) and emits back with a \"Z\" suffix.\n const shown = new Date(stored);\n const pad = (n: number) => String(n).padStart(2, \"0\");\n const emitted = `${shown.getFullYear()}-${pad(shown.getMonth() + 1)}-${pad(\n shown.getDate()\n )}T${pad(shown.getHours())}:${pad(shown.getMinutes())}:00.000Z`;\n\n expect(toUtcIsoString(emitted)).toBe(stored);\n });\n\n it(\"keeps an empty value empty\", () => {\n expect(toUtcIsoString(undefined)).toBeUndefined();\n expect(toUtcIsoString(\"\")).toBeUndefined();\n });\n});\n"],"names":["describe","originalTz","process","beforeAll","afterAll","it","expect","toUtcIsoString","stored","shown","Date","pad","n","String","emitted","undefined"],"mappings":";;AAGAA,SAAS,kBAAkB;IACvB,MAAMC,aAAaC,QAAQ,GAAG,CAAC,EAAE;IAEjCC,UAAU;QAEND,QAAQ,GAAG,CAAC,EAAE,GAAG;IACrB;IAEAE,SAAS;QACLF,QAAQ,GAAG,CAAC,EAAE,GAAGD;IACrB;IAEAI,GAAG,4EAA4E;QAE3EC,OAAOC,eAAe,6BAA6B,IAAI,CAAC;IAC5D;IAEAF,GAAG,6EAA6E;QAC5E,MAAMG,SAAS;QAEf,MAAMC,QAAQ,IAAIC,KAAKF;QACvB,MAAMG,MAAM,CAACC,IAAcC,OAAOD,GAAG,QAAQ,CAAC,GAAG;QACjD,MAAME,UAAU,GAAGL,MAAM,WAAW,GAAG,CAAC,EAAEE,IAAIF,MAAM,QAAQ,KAAK,GAAG,CAAC,EAAEE,IACnEF,MAAM,OAAO,IACf,CAAC,EAAEE,IAAIF,MAAM,QAAQ,IAAI,CAAC,EAAEE,IAAIF,MAAM,UAAU,IAAI,QAAQ,CAAC;QAE/DH,OAAOC,eAAeO,UAAU,IAAI,CAACN;IACzC;IAEAH,GAAG,8BAA8B;QAC7BC,OAAOC,eAAeQ,SAAY,aAAa;QAC/CT,OAAOC,eAAe,KAAK,aAAa;IAC5C;AACJ"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { RadioGroup } from "@webiny/admin-ui";
|
|
3
|
+
const RadioInputRenderer = ({ value, onChange, label, ...props })=>{
|
|
4
|
+
const input = props.input;
|
|
5
|
+
return /*#__PURE__*/ react.createElement(RadioGroup, {
|
|
6
|
+
value: value,
|
|
7
|
+
onChange: (newValue)=>{
|
|
8
|
+
onChange(({ value })=>{
|
|
9
|
+
value.set(newValue);
|
|
10
|
+
});
|
|
11
|
+
},
|
|
12
|
+
items: input.options,
|
|
13
|
+
label: label,
|
|
14
|
+
description: input.description,
|
|
15
|
+
note: input.helperText
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
export { RadioInputRenderer };
|
|
19
|
+
|
|
20
|
+
//# sourceMappingURL=RadioInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputRenderers/RadioInput.js","sources":["../../src/inputRenderers/RadioInput.tsx"],"sourcesContent":["import React from \"react\";\nimport { RadioGroup } from \"@webiny/admin-ui\";\nimport type { ElementInputRendererProps } from \"~/BaseEditor/index.js\";\nimport type { RadioInput } from \"@webiny/website-builder-sdk\";\n\nexport const RadioInputRenderer = ({\n value,\n onChange,\n label,\n ...props\n}: ElementInputRendererProps) => {\n const input = props.input as RadioInput;\n return (\n <RadioGroup\n value={value}\n onChange={newValue => {\n onChange(({ value }) => {\n value.set(newValue);\n });\n }}\n items={input.options}\n label={label}\n description={input.description}\n note={input.helperText}\n />\n );\n};\n"],"names":["RadioInputRenderer","value","onChange","label","props","input","RadioGroup","newValue"],"mappings":";;AAKO,MAAMA,qBAAqB,CAAC,EAC/BC,KAAK,EACLC,QAAQ,EACRC,KAAK,EACL,GAAGC,OACqB;IACxB,MAAMC,QAAQD,MAAM,KAAK;IACzB,OAAO,WAAP,GACI,oBAACE,YAAUA;QACP,OAAOL;QACP,UAAUM,CAAAA;YACNL,SAAS,CAAC,EAAED,KAAK,EAAE;gBACfA,MAAM,GAAG,CAACM;YACd;QACJ;QACA,OAAOF,MAAM,OAAO;QACpB,OAAOF;QACP,aAAaE,MAAM,WAAW;QAC9B,MAAMA,MAAM,UAAU;;AAGlC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import react from "react";
|
|
2
|
+
import { Tags } from "@webiny/admin-ui";
|
|
3
|
+
const TagsInputRenderer = ({ value, onChange, input, label })=>{
|
|
4
|
+
const commitValue = (newValue)=>{
|
|
5
|
+
onChange(({ value })=>{
|
|
6
|
+
value.set(newValue);
|
|
7
|
+
});
|
|
8
|
+
};
|
|
9
|
+
return /*#__PURE__*/ react.createElement(Tags, {
|
|
10
|
+
size: "md",
|
|
11
|
+
variant: "secondary",
|
|
12
|
+
value: Array.isArray(value) ? value : [],
|
|
13
|
+
onChange: commitValue,
|
|
14
|
+
placeholder: "Add values",
|
|
15
|
+
label: label,
|
|
16
|
+
description: input.description,
|
|
17
|
+
note: input.helperText
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
export { TagsInputRenderer };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=TagsInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inputRenderers/TagsInput.js","sources":["../../src/inputRenderers/TagsInput.tsx"],"sourcesContent":["import React from \"react\";\nimport { Tags } from \"@webiny/admin-ui\";\nimport type { ElementInputRendererProps } from \"~/BaseEditor/index.js\";\n\nexport const TagsInputRenderer = ({ value, onChange, input, label }: ElementInputRendererProps) => {\n const commitValue = (newValue: string[]) => {\n onChange(({ value }) => {\n value.set(newValue);\n });\n };\n\n return (\n <Tags\n size={\"md\"}\n variant={\"secondary\"}\n value={Array.isArray(value) ? value : []}\n onChange={commitValue}\n placeholder={\"Add values\"}\n label={label}\n description={input.description}\n note={input.helperText}\n />\n );\n};\n"],"names":["TagsInputRenderer","value","onChange","input","label","commitValue","newValue","Tags","Array"],"mappings":";;AAIO,MAAMA,oBAAoB,CAAC,EAAEC,KAAK,EAAEC,QAAQ,EAAEC,KAAK,EAAEC,KAAK,EAA6B;IAC1F,MAAMC,cAAc,CAACC;QACjBJ,SAAS,CAAC,EAAED,KAAK,EAAE;YACfA,MAAM,GAAG,CAACK;QACd;IACJ;IAEA,OAAO,WAAP,GACI,oBAACC,MAAIA;QACD,MAAM;QACN,SAAS;QACT,OAAOC,MAAM,OAAO,CAACP,SAASA,QAAQ,EAAE;QACxC,UAAUI;QACV,aAAa;QACb,OAAOD;QACP,aAAaD,MAAM,WAAW;QAC9B,MAAMA,MAAM,UAAU;;AAGlC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/app-website-builder",
|
|
3
|
-
"version": "6.5.0-beta.
|
|
3
|
+
"version": "6.5.0-beta.11",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -16,56 +16,56 @@
|
|
|
16
16
|
"@emotion/css": "11.13.5",
|
|
17
17
|
"@emotion/react": "11.14.0",
|
|
18
18
|
"@emotion/styled": "11.14.1",
|
|
19
|
-
"@lexical/utils": "0.
|
|
19
|
+
"@lexical/utils": "0.52.0",
|
|
20
20
|
"@monaco-editor/react": "4.7.0",
|
|
21
21
|
"@types/react": "18.3.31",
|
|
22
|
-
"@webiny/admin-ui": "6.5.0-beta.
|
|
23
|
-
"@webiny/app": "6.5.0-beta.
|
|
24
|
-
"@webiny/app-aco": "6.5.0-beta.
|
|
25
|
-
"@webiny/app-admin": "6.5.0-beta.
|
|
26
|
-
"@webiny/app-headless-cms": "6.5.0-beta.
|
|
27
|
-
"@webiny/app-headless-cms-common": "6.5.0-beta.
|
|
28
|
-
"@webiny/app-utils": "6.5.0-beta.
|
|
29
|
-
"@webiny/di": "1.0
|
|
30
|
-
"@webiny/feature": "6.5.0-beta.
|
|
31
|
-
"@webiny/form": "6.5.0-beta.
|
|
32
|
-
"@webiny/frontend-settings": "6.5.0-beta.
|
|
33
|
-
"@webiny/icons": "6.5.0-beta.
|
|
34
|
-
"@webiny/languages": "6.5.0-beta.
|
|
35
|
-
"@webiny/lexical-converter": "6.5.0-beta.
|
|
36
|
-
"@webiny/lexical-editor": "6.5.0-beta.
|
|
37
|
-
"@webiny/lexical-nodes": "6.5.0-beta.
|
|
38
|
-
"@webiny/lexical-theme": "6.5.0-beta.
|
|
39
|
-
"@webiny/react-composition": "6.5.0-beta.
|
|
40
|
-
"@webiny/react-properties": "6.5.0-beta.
|
|
41
|
-
"@webiny/utils": "6.5.0-beta.
|
|
42
|
-
"@webiny/validation": "6.5.0-beta.
|
|
43
|
-
"@webiny/website-builder-sdk": "6.5.0-beta.
|
|
22
|
+
"@webiny/admin-ui": "6.5.0-beta.11",
|
|
23
|
+
"@webiny/app": "6.5.0-beta.11",
|
|
24
|
+
"@webiny/app-aco": "6.5.0-beta.11",
|
|
25
|
+
"@webiny/app-admin": "6.5.0-beta.11",
|
|
26
|
+
"@webiny/app-headless-cms": "6.5.0-beta.11",
|
|
27
|
+
"@webiny/app-headless-cms-common": "6.5.0-beta.11",
|
|
28
|
+
"@webiny/app-utils": "6.5.0-beta.11",
|
|
29
|
+
"@webiny/di": "1.1.0",
|
|
30
|
+
"@webiny/feature": "6.5.0-beta.11",
|
|
31
|
+
"@webiny/form": "6.5.0-beta.11",
|
|
32
|
+
"@webiny/frontend-settings": "6.5.0-beta.11",
|
|
33
|
+
"@webiny/icons": "6.5.0-beta.11",
|
|
34
|
+
"@webiny/languages": "6.5.0-beta.11",
|
|
35
|
+
"@webiny/lexical-converter": "6.5.0-beta.11",
|
|
36
|
+
"@webiny/lexical-editor": "6.5.0-beta.11",
|
|
37
|
+
"@webiny/lexical-nodes": "6.5.0-beta.11",
|
|
38
|
+
"@webiny/lexical-theme": "6.5.0-beta.11",
|
|
39
|
+
"@webiny/react-composition": "6.5.0-beta.11",
|
|
40
|
+
"@webiny/react-properties": "6.5.0-beta.11",
|
|
41
|
+
"@webiny/utils": "6.5.0-beta.11",
|
|
42
|
+
"@webiny/validation": "6.5.0-beta.11",
|
|
43
|
+
"@webiny/website-builder-sdk": "6.5.0-beta.11",
|
|
44
44
|
"classnames": "2.5.1",
|
|
45
45
|
"deep-equal": "2.2.3",
|
|
46
46
|
"graphql": "16.14.2",
|
|
47
47
|
"is-hotkey": "0.2.0",
|
|
48
48
|
"lodash": "4.18.1",
|
|
49
|
-
"matcher": "
|
|
50
|
-
"mobx": "
|
|
51
|
-
"mobx-react-lite": "
|
|
49
|
+
"matcher": "7.0.0",
|
|
50
|
+
"mobx": "7.0.6",
|
|
51
|
+
"mobx-react-lite": "5.1.0",
|
|
52
52
|
"pluralize": "8.0.0",
|
|
53
|
-
"radix-ui": "1.6.
|
|
53
|
+
"radix-ui": "1.6.7",
|
|
54
54
|
"react": "18.3.1",
|
|
55
55
|
"react-dnd": "16.0.1",
|
|
56
56
|
"react-dnd-html5-backend": "16.0.1",
|
|
57
57
|
"react-dom": "18.3.1",
|
|
58
58
|
"slugify": "1.6.9",
|
|
59
|
-
"zod": "4.
|
|
59
|
+
"zod": "4.6.5"
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
62
|
"@types/deep-equal": "1.0.4",
|
|
63
63
|
"@types/is-hotkey": "0.1.10",
|
|
64
|
-
"@webiny/build-tools": "6.5.0-beta.
|
|
64
|
+
"@webiny/build-tools": "6.5.0-beta.11",
|
|
65
65
|
"execa": "5.1.1",
|
|
66
66
|
"rimraf": "6.1.3",
|
|
67
67
|
"typescript": "7.0.2",
|
|
68
|
-
"vitest": "
|
|
68
|
+
"vitest": "5.0.3"
|
|
69
69
|
},
|
|
70
70
|
"publishConfig": {
|
|
71
71
|
"access": "public"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from "react";
|
|
2
2
|
export declare const CREATE_PAGE_DIALOG = "createPage";
|
|
3
3
|
export declare const useCreatePageDialog: () => (folderId: string) => void;
|
|
4
|
-
export declare const CreatePageDialog: (() => React.JSX.Element) & {
|
|
5
|
-
|
|
4
|
+
export declare const CreatePageDialog: (() => React.JSX.Element) & React.NamedExoticComponent<unknown> & {
|
|
5
|
+
readonly type: () => React.JSX.Element;
|
|
6
6
|
};
|
|
@@ -17,6 +17,10 @@ const RevisionListDrawer = (props)=>{
|
|
|
17
17
|
title: "Entry revisions",
|
|
18
18
|
open: isRevisionListOpen,
|
|
19
19
|
onOpenChange: (open)=>openRevisionList(open),
|
|
20
|
+
onInteractOutside: (e)=>{
|
|
21
|
+
const target = e.target;
|
|
22
|
+
if (target.closest("[data-role='dialog']")) e.preventDefault();
|
|
23
|
+
},
|
|
20
24
|
modal: true,
|
|
21
25
|
bodyPadding: false,
|
|
22
26
|
headerSeparator: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"presentation/pages/PageEditor/Revisions/RevisionListDrawer.js","sources":["../../../../../src/presentation/pages/PageEditor/Revisions/RevisionListDrawer.tsx"],"sourcesContent":["import React from \"react\";\nimport { useHotkeys } from \"@webiny/app-admin\";\nimport { RevisionsList } from \"./RevisionsList.js\";\nimport { Drawer } from \"@webiny/admin-ui\";\nimport type { Page } from \"~/domain/Page/Page.js\";\nimport { usePageEditorDrawer } from \"./usePageEditorDrawer.js\";\n\ninterface IRevisionListDrawerProps {\n page: Pick<Page, \"id\">;\n}\n\nexport const RevisionListDrawer = (props: IRevisionListDrawerProps) => {\n const { page } = props;\n const { isRevisionListOpen, openRevisionList } = usePageEditorDrawer();\n\n useHotkeys({\n zIndex: 55,\n disabled: !isRevisionListOpen,\n keys: {\n esc: () => openRevisionList(false)\n }\n });\n\n return (\n <Drawer\n title={\"Entry revisions\"}\n open={isRevisionListOpen}\n onOpenChange={open => openRevisionList(open)}\n modal\n bodyPadding={false}\n headerSeparator={true}\n width={1000}\n >\n <RevisionsList page={page} />\n </Drawer>\n );\n};\n"],"names":["RevisionListDrawer","props","page","isRevisionListOpen","openRevisionList","usePageEditorDrawer","useHotkeys","Drawer","open","RevisionsList"],"mappings":";;;;;AAWO,MAAMA,qBAAqB,CAACC;IAC/B,MAAM,EAAEC,IAAI,EAAE,GAAGD;IACjB,MAAM,EAAEE,kBAAkB,EAAEC,gBAAgB,EAAE,GAAGC;IAEjDC,WAAW;QACP,QAAQ;QACR,UAAU,CAACH;QACX,MAAM;YACF,KAAK,IAAMC,iBAAiB;QAChC;IACJ;IAEA,OAAO,WAAP,GACI,oBAACG,QAAMA;QACH,OAAO;QACP,MAAMJ;QACN,cAAcK,CAAAA,OAAQJ,iBAAiBI;QACvC;QACA,aAAa;QACb,iBAAiB;QACjB,OAAO;qBAEP,
|
|
1
|
+
{"version":3,"file":"presentation/pages/PageEditor/Revisions/RevisionListDrawer.js","sources":["../../../../../src/presentation/pages/PageEditor/Revisions/RevisionListDrawer.tsx"],"sourcesContent":["import React from \"react\";\nimport { useHotkeys } from \"@webiny/app-admin\";\nimport { RevisionsList } from \"./RevisionsList.js\";\nimport { Drawer } from \"@webiny/admin-ui\";\nimport type { Page } from \"~/domain/Page/Page.js\";\nimport { usePageEditorDrawer } from \"./usePageEditorDrawer.js\";\n\ninterface IRevisionListDrawerProps {\n page: Pick<Page, \"id\">;\n}\n\nexport const RevisionListDrawer = (props: IRevisionListDrawerProps) => {\n const { page } = props;\n const { isRevisionListOpen, openRevisionList } = usePageEditorDrawer();\n\n useHotkeys({\n zIndex: 55,\n disabled: !isRevisionListOpen,\n keys: {\n esc: () => openRevisionList(false)\n }\n });\n\n return (\n <Drawer\n title={\"Entry revisions\"}\n open={isRevisionListOpen}\n onOpenChange={open => openRevisionList(open)}\n onInteractOutside={e => {\n // Confirmation dialogs render above the drawer; clicking their overlay must not\n // close the drawer underneath them.\n const target = e.target as HTMLElement;\n if (target.closest(\"[data-role='dialog']\")) {\n e.preventDefault();\n }\n }}\n modal\n bodyPadding={false}\n headerSeparator={true}\n width={1000}\n >\n <RevisionsList page={page} />\n </Drawer>\n );\n};\n"],"names":["RevisionListDrawer","props","page","isRevisionListOpen","openRevisionList","usePageEditorDrawer","useHotkeys","Drawer","open","e","target","RevisionsList"],"mappings":";;;;;AAWO,MAAMA,qBAAqB,CAACC;IAC/B,MAAM,EAAEC,IAAI,EAAE,GAAGD;IACjB,MAAM,EAAEE,kBAAkB,EAAEC,gBAAgB,EAAE,GAAGC;IAEjDC,WAAW;QACP,QAAQ;QACR,UAAU,CAACH;QACX,MAAM;YACF,KAAK,IAAMC,iBAAiB;QAChC;IACJ;IAEA,OAAO,WAAP,GACI,oBAACG,QAAMA;QACH,OAAO;QACP,MAAMJ;QACN,cAAcK,CAAAA,OAAQJ,iBAAiBI;QACvC,mBAAmBC,CAAAA;YAGf,MAAMC,SAASD,EAAE,MAAM;YACvB,IAAIC,OAAO,OAAO,CAAC,yBACfD,EAAE,cAAc;QAExB;QACA;QACA,aAAa;QACb,iBAAiB;QACjB,OAAO;qBAEP,oBAACE,eAAaA;QAAC,MAAMT;;AAGjC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type {
|
|
2
|
+
import type { RevisionListPresenter } from "../../../../presentation/pages/RevisionList/abstractions.js";
|
|
3
3
|
interface RevisionListItemProps {
|
|
4
|
-
|
|
4
|
+
item: RevisionListPresenter.ItemViewModel;
|
|
5
5
|
}
|
|
6
|
-
declare const RevisionListItem: ({
|
|
6
|
+
declare const RevisionListItem: ({ item }: RevisionListItemProps) => React.JSX.Element;
|
|
7
7
|
export default RevisionListItem;
|