@webiny/app-website-builder 6.4.2 → 6.4.3-beta.1

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.
@@ -26,13 +26,18 @@ describe("PublishPage", ()=>{
26
26
  },
27
27
  bindings: {
28
28
  data: "any-data"
29
+ },
30
+ extensions: {
31
+ ext1: "ext-data"
29
32
  }
30
33
  })
31
34
  };
32
35
  const pagesCache = pageListCache;
36
+ const detailsCache = fullPageCache;
33
37
  beforeEach(()=>{
34
38
  vi.clearAllMocks();
35
39
  pagesCache.clear();
40
+ detailsCache.clear();
36
41
  pagesCache.addItems([
37
42
  Page.create({
38
43
  id: "page-1#0001",
@@ -55,6 +60,31 @@ describe("PublishPage", ()=>{
55
60
  }
56
61
  })
57
62
  ]);
63
+ detailsCache.addItems([
64
+ Page.create({
65
+ id: "page-1#0001",
66
+ entryId: "page-1",
67
+ status: WbPageStatus.Draft,
68
+ location: {
69
+ folderId: "folder-1"
70
+ },
71
+ properties: {
72
+ title: "Page 1"
73
+ },
74
+ metadata: {
75
+ metadata: "data-1"
76
+ },
77
+ elements: {
78
+ element1: "element"
79
+ },
80
+ bindings: {
81
+ data: "any-data"
82
+ },
83
+ extensions: {
84
+ ext1: "ext-data"
85
+ }
86
+ })
87
+ ]);
58
88
  });
59
89
  it("should be able to publish a page", async ()=>{
60
90
  const container = new Container();
@@ -76,6 +106,19 @@ describe("PublishPage", ()=>{
76
106
  const publishedItem = pagesCache.getItem((page)=>"page-1" === page.entryId);
77
107
  expect(publishedItem?.id).toEqual("page-1#0001");
78
108
  expect(publishedItem?.status).toEqual(WbPageStatus.Published);
109
+ const detailItem = detailsCache.getItem((page)=>"page-1" === page.entryId);
110
+ expect(detailItem).toBeDefined();
111
+ expect(detailItem?.id).toEqual("page-1#0001");
112
+ expect(detailItem?.status).toEqual(WbPageStatus.Published);
113
+ expect(detailItem?.elements).toMatchObject({
114
+ element1: "element"
115
+ });
116
+ expect(detailItem?.bindings).toMatchObject({
117
+ data: "any-data"
118
+ });
119
+ expect(detailItem?.extensions).toMatchObject({
120
+ ext1: "ext-data"
121
+ });
79
122
  });
80
123
  it("should not publish a page if id is missing", async ()=>{
81
124
  const container = new Container();
@@ -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 })\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 metadata: \"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 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\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","beforeEach","Page","it","container","Container","PageListCache","FullPageCache","fullPageCache","GatewayAbstraction","PublishPageRepository","PublishPageUseCase","publishPage","UseCaseAbstraction","expect","item","page","publishedItem"],"mappings":";;;;;;;;AAYAA,SAAS,eAAe;IACpB,MAAMC,UAAU;QACZ,SAASC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC/B,IAAI;YACJ,SAAS;YACT,QAAQC,aAAa,SAAS;YAC9B,UAAU;gBACN,UAAU;YACd;YACA,YAAY;gBACR,OAAO;YACX;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,MAAM;YACV;QACJ;IACJ;IAEA,MAAMC,aAAaC;IAEnBC,WAAW;QACPJ,GAAG,aAAa;QAChBE,WAAW,KAAK;QAChBA,WAAW,QAAQ,CAAC;YAChBG,KAAK,MAAM,CAAC;gBACR,IAAI;gBACJ,SAAS;gBACT,QAAQJ,aAAa,KAAK;gBAC1B,UAAU;oBACN,UAAU;gBACd;gBACA,YAAY;oBACR,OAAO;gBACX;gBACA,UAAU;oBACN,UAAU;gBACd;gBACA,UAAU;oBACN,UAAU;gBACd;gBACA,UAAU;oBACN,MAAM;gBACV;YACJ;SACH;IACL;IAEAK,GAAG,oCAAoC;QACnC,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeP;QAC1CK,UAAU,gBAAgB,CAACG,eAAeC;QAC1CJ,UAAU,gBAAgB,CAACK,oBAAoBb;QAC/CQ,UAAU,QAAQ,CAACM,uBAAuB,gBAAgB;QAC1DN,UAAU,QAAQ,CAACO;QAEnB,MAAMC,cAAcR,UAAU,OAAO,CAACS;QAEtCC,OAAOf,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMgB,OAAOhB,WAAW,OAAO,CAACiB,CAAAA,OAAQA,AAAY,kBAAZA,KAAK,EAAE;QAC/CF,OAAOC,MAAM,IAAI,OAAO,CAAC;QAEzB,MAAMH,YAAY,OAAO,CAAC;YACtB,IAAI;QACR;QAEAE,OAAOlB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAC9CkB,OAAOlB,QAAQ,OAAO,EAAE,wBAAwB,CAAC;QAEjDkB,OAAOf,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMkB,gBAAgBlB,WAAW,OAAO,CAACiB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE7DF,OAAOG,eAAe,IAAI,OAAO,CAAC;QAClCH,OAAOG,eAAe,QAAQ,OAAO,CAACnB,aAAa,SAAS;IAChE;IAEAK,GAAG,8CAA8C;QAC7C,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeP;QAC1CK,UAAU,gBAAgB,CAACG,eAAeC;QAC1CJ,UAAU,gBAAgB,CAACK,oBAAoBb;QAC/CQ,UAAU,QAAQ,CAACM,uBAAuB,gBAAgB;QAC1DN,UAAU,QAAQ,CAACO;QAEnB,MAAMC,cAAcR,UAAU,OAAO,CAACS;QAEtC,MAAMD,YAAY,OAAO,CAAC;YACtB,IAAI;QACR;QAEAE,OAAOlB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAE9C,MAAMqB,gBAAgBlB,WAAW,OAAO,CAACiB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE7DF,OAAOG,eAAe,IAAI,OAAO,CAAC;QAClCH,OAAOG,eAAe,QAAQ,OAAO,CAACnB,aAAa,KAAK;IAC5D;AACJ"}
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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"}
@@ -8,7 +8,10 @@ const PUBLISH_PAGE = `
8
8
  data {
9
9
  ${getPageGraphQLFields([
10
10
  "properties",
11
- "metadata"
11
+ "metadata",
12
+ "bindings",
13
+ "elements",
14
+ "extensions"
12
15
  ]).join("\n")}
13
16
  }
14
17
  error {
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/publishPage/PublishPageGateway.js","sources":["../../../../src/features/pages/publishPage/PublishPageGateway.ts"],"sourcesContent":["import { PublishPageGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { PageGatewayDto } from \"~/features/pages/getPage/PageGatewayDto.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { getPageGraphQLFields } from \"~/features/pages/shared/pageGraphQLFields.js\";\n\nconst PUBLISH_PAGE = /* GraphQL */ `\n mutation PublishPage($id: ID!) {\n websiteBuilder {\n publishPage(id: $id) {\n data {\n ${getPageGraphQLFields([\"properties\", \"metadata\"]).join(\"\\n\")}\n }\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype PublishPageResponse = {\n websiteBuilder: {\n publishPage:\n | { data: PageGatewayDto; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass PublishPageGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string): Promise<PageGatewayDto> {\n const response = await this.client.execute<PublishPageResponse>({\n query: PUBLISH_PAGE,\n variables: { id }\n });\n\n const envelope = response.websiteBuilder.publishPage;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not publish page.\");\n }\n\n return envelope.data;\n }\n}\n\nexport const PublishPageGateway = GatewayAbstraction.createImplementation({\n implementation: PublishPageGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["PUBLISH_PAGE","getPageGraphQLFields","PublishPageGatewayImpl","client","id","response","envelope","Error","PublishPageGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,eAA6B,CAAC;;;;;oBAKhB,EAAEC,qBAAqB;IAAC;IAAc;CAAW,EAAE,IAAI,CAAC,MAAM;;;;;;;;;;AAUlF,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,EAAU,EAA2B;QAC/C,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB;YAC5D,OAAOL;YACP,WAAW;gBAAEI;YAAG;QACpB;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,WAAW;QACpD,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;QAG9C,OAAOA,SAAS,IAAI;IACxB;AACJ;AAEO,MAAME,wCAAqBC,mBAAAA,oBAAuC,CAAC;IACtE,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
1
+ {"version":3,"file":"features/pages/publishPage/PublishPageGateway.js","sources":["../../../../src/features/pages/publishPage/PublishPageGateway.ts"],"sourcesContent":["import { PublishPageGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { PageGatewayDto } from \"~/features/pages/getPage/PageGatewayDto.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { getPageGraphQLFields } from \"~/features/pages/shared/pageGraphQLFields.js\";\n\nconst PUBLISH_PAGE = /* GraphQL */ `\n mutation PublishPage($id: ID!) {\n websiteBuilder {\n publishPage(id: $id) {\n data {\n ${getPageGraphQLFields([\"properties\", \"metadata\", \"bindings\", \"elements\", \"extensions\"]).join(\"\\n\")}\n }\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype PublishPageResponse = {\n websiteBuilder: {\n publishPage:\n | { data: PageGatewayDto; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass PublishPageGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string): Promise<PageGatewayDto> {\n const response = await this.client.execute<PublishPageResponse>({\n query: PUBLISH_PAGE,\n variables: { id }\n });\n\n const envelope = response.websiteBuilder.publishPage;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not publish page.\");\n }\n\n return envelope.data;\n }\n}\n\nexport const PublishPageGateway = GatewayAbstraction.createImplementation({\n implementation: PublishPageGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["PUBLISH_PAGE","getPageGraphQLFields","PublishPageGatewayImpl","client","id","response","envelope","Error","PublishPageGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,eAA6B,CAAC;;;;;oBAKhB,EAAEC,qBAAqB;IAAC;IAAc;IAAY;IAAY;IAAY;CAAa,EAAE,IAAI,CAAC,MAAM;;;;;;;;;;AAUxH,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,EAAU,EAA2B;QAC/C,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAsB;YAC5D,OAAOL;YACP,WAAW;gBAAEI;YAAG;QACpB;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,WAAW;QACpD,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;QAG9C,OAAOA,SAAS,IAAI;IACxB;AACJ;AAEO,MAAME,wCAAqBC,mBAAAA,oBAAuC,CAAC;IACtE,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
@@ -14,11 +14,7 @@ class PublishPageRepositoryImpl {
14
14
  return existingPage;
15
15
  });
16
16
  this.detailsCache.updateItems((existingPage)=>{
17
- if (existingPage.id === page.id) return Page.create({
18
- ...result,
19
- elements: page.elements,
20
- bindings: page.bindings
21
- });
17
+ if (existingPage.id === page.id) return Page.create(result);
22
18
  return existingPage;
23
19
  });
24
20
  }
@@ -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 { PageListCache, FullPageCache } 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 gateway: PublishPageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create({\n ...result,\n elements: page.elements,\n bindings: page.bindings\n });\n }\n return existingPage;\n });\n }\n}\n\nexport const PublishPageRepository = RepositoryAbstraction.createImplementation({\n implementation: PublishPageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, PublishPageGateway]\n});\n"],"names":["PublishPageRepositoryImpl","listCache","detailsCache","gateway","page","result","existingPage","Page","PublishPageRepository","RepositoryAbstraction","PageListCache","FullPageCache","PublishPageGateway"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,OAAqC,CAC/C;aAHUF,SAAS,GAATA;aACAC,YAAY,GAAZA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE;QAEjD,IAAI,CAAC,SAAS,CAAC,WAAW,CAACE,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAAC;gBACf,GAAGF,MAAM;gBACT,UAAUD,KAAK,QAAQ;gBACvB,UAAUA,KAAK,QAAQ;YAC3B;YAEJ,OAAOE;QACX;IACJ;AACJ;AAEO,MAAME,8CAAwBC,sBAAAA,oBAA0C,CAAC;IAC5E,gBAAgBT;IAChB,cAAc;QAACU;QAAeC;QAAeC;KAAmB;AACpE"}
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 { PageListCache, FullPageCache } 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 gateway: PublishPageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n }\n}\n\nexport const PublishPageRepository = RepositoryAbstraction.createImplementation({\n implementation: PublishPageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, PublishPageGateway]\n});\n"],"names":["PublishPageRepositoryImpl","listCache","detailsCache","gateway","page","result","existingPage","Page","PublishPageRepository","RepositoryAbstraction","PageListCache","FullPageCache","PublishPageGateway"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,OAAqC,CAC/C;aAHUF,SAAS,GAATA;aACAC,YAAY,GAAZA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE;QAEjD,IAAI,CAAC,SAAS,CAAC,WAAW,CAACE,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;IACJ;AACJ;AAEO,MAAME,8CAAwBC,sBAAAA,oBAA0C,CAAC;IAC5E,gBAAgBT;IAChB,cAAc;QAACU;QAAeC;QAAeC;KAAmB;AACpE"}
@@ -26,6 +26,9 @@ describe("UnpublishPage", ()=>{
26
26
  },
27
27
  bindings: {
28
28
  data: "any-data"
29
+ },
30
+ extensions: {
31
+ ext1: "ext-data"
29
32
  }
30
33
  })
31
34
  };
@@ -54,6 +57,28 @@ describe("UnpublishPage", ()=>{
54
57
  }
55
58
  })
56
59
  ]);
60
+ detailsCache.addItems([
61
+ Page.create({
62
+ id: "page-1#0001",
63
+ entryId: "page-1",
64
+ status: WbPageStatus.Published,
65
+ location: {
66
+ folderId: "folder-1"
67
+ },
68
+ properties: {
69
+ title: "Page 1"
70
+ },
71
+ elements: {
72
+ element1: "element"
73
+ },
74
+ bindings: {
75
+ data: "any-data"
76
+ },
77
+ extensions: {
78
+ ext1: "ext-data"
79
+ }
80
+ })
81
+ ]);
57
82
  });
58
83
  it("should be able to unpublish a page", async ()=>{
59
84
  const container = new Container();
@@ -75,6 +100,19 @@ describe("UnpublishPage", ()=>{
75
100
  const publishedItem = pagesCache.getItem((page)=>"page-1" === page.entryId);
76
101
  expect(publishedItem?.id).toEqual("page-1#0001");
77
102
  expect(publishedItem?.status).toEqual(WbPageStatus.Unpublished);
103
+ const detailItem = detailsCache.getItem((page)=>"page-1" === page.entryId);
104
+ expect(detailItem).toBeDefined();
105
+ expect(detailItem?.id).toEqual("page-1#0001");
106
+ expect(detailItem?.status).toEqual(WbPageStatus.Unpublished);
107
+ expect(detailItem?.elements).toMatchObject({
108
+ element1: "element"
109
+ });
110
+ expect(detailItem?.bindings).toMatchObject({
111
+ data: "any-data"
112
+ });
113
+ expect(detailItem?.extensions).toMatchObject({
114
+ ext1: "ext-data"
115
+ });
78
116
  });
79
117
  it("should not unpublish a page if id is missing", async ()=>{
80
118
  const container = new Container();
@@ -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 { PageListCache, FullPageCache } 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 })\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 });\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(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\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(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","GatewayAbstraction","UnpublishPageRepository","UnpublishPageUseCase","unpublishPage","UseCaseAbstraction","expect","item","page","publishedItem"],"mappings":";;;;;;;;AAYAA,SAAS,iBAAiB;IACtB,MAAMC,UAAU;QACZ,SAASC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC/B,IAAI;YACJ,SAAS;YACT,QAAQC,aAAa,WAAW;YAChC,UAAU;gBACN,UAAU;YACd;YACA,YAAY;gBACR,OAAO;YACX;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,MAAM;YACV;QACJ;IACJ;IAEA,MAAMC,aAAaC;IACnB,MAAMC,eAAeC;IAErBC,WAAW;QACPN,GAAG,aAAa;QAChBE,WAAW,KAAK;QAChBE,aAAa,KAAK;QAClBF,WAAW,QAAQ,CAAC;YAChBK,KAAK,MAAM,CAAC;gBACR,IAAI;gBACJ,SAAS;gBACT,QAAQN,aAAa,SAAS;gBAC9B,UAAU;oBACN,UAAU;gBACd;gBACA,YAAY;oBACR,OAAO;gBACX;gBACA,UAAU;oBACN,UAAU;gBACd;gBACA,UAAU;oBACN,MAAM;gBACV;YACJ;SACH;IACL;IAEAO,GAAG,sCAAsC;QACrC,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeT;QAC1CO,UAAU,gBAAgB,CAACG,eAAeR;QAC1CK,UAAU,gBAAgB,CAACI,sBAAoBd;QAC/CU,UAAU,QAAQ,CAACK,yBAAyB,gBAAgB;QAC5DL,UAAU,QAAQ,CAACM;QAEnB,MAAMC,gBAAgBP,UAAU,OAAO,CAACQ;QAExCC,OAAOhB,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMiB,OAAOjB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAY,kBAAZA,KAAK,EAAE;QAC/CF,OAAOC,MAAM,IAAI,OAAO,CAAC;QAEzB,MAAMH,cAAc,OAAO,CAAC;YACxB,IAAI;QACR;QAEAE,OAAOnB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAC9CmB,OAAOnB,QAAQ,OAAO,EAAE,wBAAwB,CAAC;QAEjDmB,OAAOhB,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMmB,gBAAgBnB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE7DF,OAAOG,eAAe,IAAI,OAAO,CAAC;QAClCH,OAAOG,eAAe,QAAQ,OAAO,CAACpB,aAAa,WAAW;IAClE;IAEAO,GAAG,gDAAgD;QAC/C,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeT;QAC1CO,UAAU,gBAAgB,CAACG,eAAeR;QAC1CK,UAAU,gBAAgB,CAACI,sBAAoBd;QAC/CU,UAAU,QAAQ,CAACK,yBAAyB,gBAAgB;QAC5DL,UAAU,QAAQ,CAACM;QAEnB,MAAMC,gBAAgBP,UAAU,OAAO,CAACQ;QAExC,MAAMD,cAAc,OAAO,CAAC;YACxB,IAAI;QACR;QAEAE,OAAOnB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAE9C,MAAMsB,gBAAgBnB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE7DF,OAAOG,eAAe,IAAI,OAAO,CAAC;QAClCH,OAAOG,eAAe,QAAQ,OAAO,CAACpB,aAAa,SAAS;IAChE;AACJ"}
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 { PageListCache, FullPageCache } 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(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(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","GatewayAbstraction","UnpublishPageRepository","UnpublishPageUseCase","unpublishPage","UseCaseAbstraction","expect","item","page","publishedItem","detailItem"],"mappings":";;;;;;;;AAYAA,SAAS,iBAAiB;IACtB,MAAMC,UAAU;QACZ,SAASC,GAAG,EAAE,GAAG,iBAAiB,CAAC;YAC/B,IAAI;YACJ,SAAS;YACT,QAAQC,aAAa,WAAW;YAChC,UAAU;gBACN,UAAU;YACd;YACA,YAAY;gBACR,OAAO;YACX;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,UAAU;YACd;YACA,UAAU;gBACN,MAAM;YACV;YACA,YAAY;gBACR,MAAM;YACV;QACJ;IACJ;IAEA,MAAMC,aAAaC;IACnB,MAAMC,eAAeC;IAErBC,WAAW;QACPN,GAAG,aAAa;QAChBE,WAAW,KAAK;QAChBE,aAAa,KAAK;QAClBF,WAAW,QAAQ,CAAC;YAChBK,KAAK,MAAM,CAAC;gBACR,IAAI;gBACJ,SAAS;gBACT,QAAQN,aAAa,SAAS;gBAC9B,UAAU;oBACN,UAAU;gBACd;gBACA,YAAY;oBACR,OAAO;gBACX;gBACA,UAAU;oBACN,UAAU;gBACd;gBACA,UAAU;oBACN,MAAM;gBACV;YACJ;SACH;QACDG,aAAa,QAAQ,CAAC;YAClBG,KAAK,MAAM,CAAC;gBACR,IAAI;gBACJ,SAAS;gBACT,QAAQN,aAAa,SAAS;gBAC9B,UAAU;oBACN,UAAU;gBACd;gBACA,YAAY;oBACR,OAAO;gBACX;gBACA,UAAU;oBACN,UAAU;gBACd;gBACA,UAAU;oBACN,MAAM;gBACV;gBACA,YAAY;oBACR,MAAM;gBACV;YACJ;SACH;IACL;IAEAO,GAAG,sCAAsC;QACrC,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeT;QAC1CO,UAAU,gBAAgB,CAACG,eAAeR;QAC1CK,UAAU,gBAAgB,CAACI,sBAAoBd;QAC/CU,UAAU,QAAQ,CAACK,yBAAyB,gBAAgB;QAC5DL,UAAU,QAAQ,CAACM;QAEnB,MAAMC,gBAAgBP,UAAU,OAAO,CAACQ;QAExCC,OAAOhB,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMiB,OAAOjB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAY,kBAAZA,KAAK,EAAE;QAC/CF,OAAOC,MAAM,IAAI,OAAO,CAAC;QAEzB,MAAMH,cAAc,OAAO,CAAC;YACxB,IAAI;QACR;QAEAE,OAAOnB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAC9CmB,OAAOnB,QAAQ,OAAO,EAAE,wBAAwB,CAAC;QAEjDmB,OAAOhB,WAAW,QAAQ,IAAI,QAAQ;QACtC,MAAMmB,gBAAgBnB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE7DF,OAAOG,eAAe,IAAI,OAAO,CAAC;QAClCH,OAAOG,eAAe,QAAQ,OAAO,CAACpB,aAAa,WAAW;QAG9D,MAAMqB,aAAalB,aAAa,OAAO,CAACgB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAC5DF,OAAOI,YAAY,WAAW;QAC9BJ,OAAOI,YAAY,IAAI,OAAO,CAAC;QAC/BJ,OAAOI,YAAY,QAAQ,OAAO,CAACrB,aAAa,WAAW;QAC3DiB,OAAOI,YAAY,UAAU,aAAa,CAAC;YAAE,UAAU;QAAU;QACjEJ,OAAOI,YAAY,UAAU,aAAa,CAAC;YAAE,MAAM;QAAW;QAC9DJ,OAAOI,YAAY,YAAY,aAAa,CAAC;YAAE,MAAM;QAAW;IACpE;IAEAd,GAAG,gDAAgD;QAC/C,MAAMC,YAAY,IAAIC;QACtBD,UAAU,gBAAgB,CAACE,eAAeT;QAC1CO,UAAU,gBAAgB,CAACG,eAAeR;QAC1CK,UAAU,gBAAgB,CAACI,sBAAoBd;QAC/CU,UAAU,QAAQ,CAACK,yBAAyB,gBAAgB;QAC5DL,UAAU,QAAQ,CAACM;QAEnB,MAAMC,gBAAgBP,UAAU,OAAO,CAACQ;QAExC,MAAMD,cAAc,OAAO,CAAC;YACxB,IAAI;QACR;QAEAE,OAAOnB,QAAQ,OAAO,EAAE,qBAAqB,CAAC;QAE9C,MAAMsB,gBAAgBnB,WAAW,OAAO,CAACkB,CAAAA,OAAQA,AAAiB,aAAjBA,KAAK,OAAO;QAE7DF,OAAOG,eAAe,IAAI,OAAO,CAAC;QAClCH,OAAOG,eAAe,QAAQ,OAAO,CAACpB,aAAa,SAAS;IAChE;AACJ"}
@@ -8,7 +8,10 @@ const UNPUBLISH_PAGE = `
8
8
  data {
9
9
  ${getPageGraphQLFields([
10
10
  "properties",
11
- "metadata"
11
+ "metadata",
12
+ "bindings",
13
+ "elements",
14
+ "extensions"
12
15
  ]).join("\n")}
13
16
  }
14
17
  error {
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/unpublishPage/UnpublishPageGateway.js","sources":["../../../../src/features/pages/unpublishPage/UnpublishPageGateway.ts"],"sourcesContent":["import { UnpublishPageGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { PageGatewayDto } from \"~/features/pages/getPage/PageGatewayDto.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { getPageGraphQLFields } from \"~/features/pages/shared/pageGraphQLFields.js\";\n\nconst UNPUBLISH_PAGE = /* GraphQL */ `\n mutation UnpublishPage($id: ID!) {\n websiteBuilder {\n unpublishPage(id: $id) {\n data {\n ${getPageGraphQLFields([\"properties\", \"metadata\"]).join(\"\\n\")}\n }\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype UnpublishPageResponse = {\n websiteBuilder: {\n unpublishPage:\n | { data: PageGatewayDto; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass UnpublishPageGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string): Promise<PageGatewayDto> {\n const response = await this.client.execute<UnpublishPageResponse>({\n query: UNPUBLISH_PAGE,\n variables: { id }\n });\n\n const envelope = response.websiteBuilder.unpublishPage;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not unpublish page.\");\n }\n\n return envelope.data;\n }\n}\n\nexport const UnpublishPageGateway = GatewayAbstraction.createImplementation({\n implementation: UnpublishPageGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["UNPUBLISH_PAGE","getPageGraphQLFields","UnpublishPageGatewayImpl","client","id","response","envelope","Error","UnpublishPageGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,iBAA+B,CAAC;;;;;oBAKlB,EAAEC,qBAAqB;IAAC;IAAc;CAAW,EAAE,IAAI,CAAC,MAAM;;;;;;;;;;AAUlF,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,EAAU,EAA2B;QAC/C,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAC9D,OAAOL;YACP,WAAW;gBAAEI;YAAG;QACpB;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,aAAa;QACtD,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;QAG9C,OAAOA,SAAS,IAAI;IACxB;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAAuC,CAAC;IACxE,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
1
+ {"version":3,"file":"features/pages/unpublishPage/UnpublishPageGateway.js","sources":["../../../../src/features/pages/unpublishPage/UnpublishPageGateway.ts"],"sourcesContent":["import { UnpublishPageGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { PageGatewayDto } from \"~/features/pages/getPage/PageGatewayDto.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { getPageGraphQLFields } from \"~/features/pages/shared/pageGraphQLFields.js\";\n\nconst UNPUBLISH_PAGE = /* GraphQL */ `\n mutation UnpublishPage($id: ID!) {\n websiteBuilder {\n unpublishPage(id: $id) {\n data {\n ${getPageGraphQLFields([\"properties\", \"metadata\", \"bindings\", \"elements\", \"extensions\"]).join(\"\\n\")}\n }\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype UnpublishPageResponse = {\n websiteBuilder: {\n unpublishPage:\n | { data: PageGatewayDto; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass UnpublishPageGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(id: string): Promise<PageGatewayDto> {\n const response = await this.client.execute<UnpublishPageResponse>({\n query: UNPUBLISH_PAGE,\n variables: { id }\n });\n\n const envelope = response.websiteBuilder.unpublishPage;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not unpublish page.\");\n }\n\n return envelope.data;\n }\n}\n\nexport const UnpublishPageGateway = GatewayAbstraction.createImplementation({\n implementation: UnpublishPageGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["UNPUBLISH_PAGE","getPageGraphQLFields","UnpublishPageGatewayImpl","client","id","response","envelope","Error","UnpublishPageGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAKA,MAAMA,iBAA+B,CAAC;;;;;oBAKlB,EAAEC,qBAAqB;IAAC;IAAc;IAAY;IAAY;IAAY;CAAa,EAAE,IAAI,CAAC,MAAM;;;;;;;;;;AAUxH,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,EAAU,EAA2B;QAC/C,MAAMC,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAwB;YAC9D,OAAOL;YACP,WAAW;gBAAEI;YAAG;QACpB;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,aAAa;QACtD,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;QAG9C,OAAOA,SAAS,IAAI;IACxB;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAAuC,CAAC;IACxE,gBAAgBP;IAChB,cAAc;QAACQ;KAAkB;AACrC"}
@@ -14,11 +14,7 @@ class UnpublishPageRepositoryImpl {
14
14
  return existingPage;
15
15
  });
16
16
  this.detailsCache.updateItems((existingPage)=>{
17
- if (existingPage.id === page.id) return Page.create({
18
- ...result,
19
- elements: page.elements,
20
- bindings: page.bindings
21
- });
17
+ if (existingPage.id === page.id) return Page.create(result);
22
18
  return existingPage;
23
19
  });
24
20
  }
@@ -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, FullPageCache } 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 gateway: UnpublishPageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create({\n ...result,\n elements: page.elements,\n bindings: page.bindings\n });\n }\n return existingPage;\n });\n }\n}\n\nexport const UnpublishPageRepository = RepositoryAbstraction.createImplementation({\n implementation: UnpublishPageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, UnpublishPageGateway]\n});\n"],"names":["UnpublishPageRepositoryImpl","listCache","detailsCache","gateway","page","result","existingPage","Page","UnpublishPageRepository","RepositoryAbstraction","PageListCache","FullPageCache","UnpublishPageGateway"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,OAAuC,CACjD;aAHUF,SAAS,GAATA;aACAC,YAAY,GAAZA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE;QAEjD,IAAI,CAAC,SAAS,CAAC,WAAW,CAACE,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAAC;gBACf,GAAGF,MAAM;gBACT,UAAUD,KAAK,QAAQ;gBACvB,UAAUA,KAAK,QAAQ;YAC3B;YAEJ,OAAOE;QACX;IACJ;AACJ;AAEO,MAAME,kDAA0BC,wBAAAA,oBAA0C,CAAC;IAC9E,gBAAgBT;IAChB,cAAc;QAACU;QAAeC;QAAeC;KAAqB;AACtE"}
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, FullPageCache } 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 gateway: UnpublishPageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const result = await this.gateway.execute(page.id);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n }\n}\n\nexport const UnpublishPageRepository = RepositoryAbstraction.createImplementation({\n implementation: UnpublishPageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, UnpublishPageGateway]\n});\n"],"names":["UnpublishPageRepositoryImpl","listCache","detailsCache","gateway","page","result","existingPage","Page","UnpublishPageRepository","RepositoryAbstraction","PageListCache","FullPageCache","UnpublishPageGateway"],"mappings":";;;AAOA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,OAAuC,CACjD;aAHUF,SAAS,GAATA;aACAC,YAAY,GAAZA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD,KAAK,EAAE;QAEjD,IAAI,CAAC,SAAS,CAAC,WAAW,CAACE,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKF,KAAK,EAAE,EAC3B,OAAOG,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;IACJ;AACJ;AAEO,MAAME,kDAA0BC,wBAAAA,oBAA0C,CAAC;IAC9E,gBAAgBT;IAChB,cAAc;QAACU;QAAeC;QAAeC;KAAqB;AACtE"}
@@ -80,6 +80,9 @@ describe("UpdatePage", ()=>{
80
80
  },
81
81
  bindings: {
82
82
  data: "any-data-updated"
83
+ },
84
+ extensions: {
85
+ ext1: "ext-data-updated"
83
86
  }
84
87
  })
85
88
  };
@@ -135,8 +138,15 @@ describe("UpdatePage", ()=>{
135
138
  expect(detailItem?.metadata).toMatchObject({
136
139
  data: "metadata-1-updated"
137
140
  });
138
- expect(detailItem?.elements).toMatchObject({});
139
- expect(detailItem?.bindings).toMatchObject({});
141
+ expect(detailItem?.elements).toMatchObject({
142
+ element1: "element-updated"
143
+ });
144
+ expect(detailItem?.bindings).toMatchObject({
145
+ data: "any-data-updated"
146
+ });
147
+ expect(detailItem?.extensions).toMatchObject({
148
+ ext1: "ext-data-updated"
149
+ });
140
150
  });
141
151
  it("should not update a page if id is missing", async ()=>{
142
152
  const gateway = {
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/updatePage/UpdatePage.test.js","sources":["../../../../src/features/pages/updatePage/UpdatePage.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 UpdatePageUseCase as UseCaseAbstraction,\n UpdatePageGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { UpdatePageUseCase } from \"./UpdatePageUseCase.js\";\nimport { UpdatePageRepository } from \"./UpdatePageRepository.js\";\nimport { PageListCache, FullPageCache } from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"UpdatePage\", () => {\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 data: \"metadata-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n revisionDescription: undefined\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 data: \"metadata-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n revisionDescription: undefined\n })\n ]);\n });\n\n it(\"should be able to update a page\", async () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\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 - Updated\"\n },\n metadata: {\n data: \"metadata-1-updated\"\n },\n elements: {\n element1: \"element-updated\"\n },\n bindings: {\n data: \"any-data-updated\"\n }\n })\n };\n\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UpdatePageRepository).inSingletonScope();\n container.register(UpdatePageUseCase);\n\n const updatePage = container.resolve(UseCaseAbstraction);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const item = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(item?.id).toEqual(\"page-1#0001\");\n expect(item?.entryId).toEqual(\"page-1\");\n expect(item?.properties).toMatchObject({\n title: \"Page 1\"\n });\n expect(item?.elements).toMatchObject({\n element1: \"element\"\n });\n expect(item?.metadata).toMatchObject({\n data: \"metadata-1\"\n });\n expect(item?.bindings).toMatchObject({\n data: \"any-data\"\n });\n\n await updatePage.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n // List cache gets full replacement from gateway result\n const updatedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n expect(updatedItem).toBeDefined();\n expect(updatedItem?.id).toEqual(\"page-1#0001\");\n expect(updatedItem?.entryId).toEqual(\"page-1\");\n expect(updatedItem?.properties).toMatchObject({\n title: \"Page 1 - Updated\"\n });\n expect(updatedItem?.elements).toMatchObject({\n element1: \"element-updated\"\n });\n expect(updatedItem?.metadata).toMatchObject({\n data: \"metadata-1-updated\"\n });\n expect(updatedItem?.bindings).toMatchObject({\n data: \"any-data-updated\"\n });\n\n // Details cache preserves elements and bindings from the DTO (sent data)\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?.properties).toMatchObject({\n title: \"Page 1 - Updated\"\n });\n expect(detailItem?.metadata).toMatchObject({\n data: \"metadata-1-updated\"\n });\n // elements and bindings come from the DTO (sent data), not the gateway result\n expect(detailItem?.elements).toMatchObject({});\n expect(detailItem?.bindings).toMatchObject({});\n });\n\n it(\"should not update a page if id is missing\", async () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue(null)\n };\n\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UpdatePageRepository).inSingletonScope();\n container.register(UpdatePageUseCase);\n\n const updatePage = container.resolve(UseCaseAbstraction);\n\n await updatePage.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n const updatedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(updatedItem).toBeDefined();\n expect(updatedItem?.id).toEqual(\"page-1#0001\");\n expect(updatedItem?.entryId).toEqual(\"page-1\");\n expect(updatedItem?.properties).toMatchObject({\n title: \"Page 1\"\n });\n expect(updatedItem?.elements).toMatchObject({\n element1: \"element\"\n });\n expect(updatedItem?.metadata).toMatchObject({\n data: \"metadata-1\"\n });\n expect(updatedItem?.bindings).toMatchObject({\n data: \"any-data\"\n });\n });\n\n it(\"should handle gateway errors gracefully\", async () => {\n const gateway = {\n execute: vi.fn().mockRejectedValue(new Error(\"Gateway error\"))\n };\n\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UpdatePageRepository).inSingletonScope();\n container.register(UpdatePageUseCase);\n\n const updatePage = container.resolve(UseCaseAbstraction);\n\n await expect(\n updatePage.execute({\n id: \"page-1#0001\"\n })\n ).rejects.toThrow(\"Gateway error\");\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n });\n});\n"],"names":["describe","pagesCache","pageListCache","detailsCache","fullPageCache","beforeEach","vi","Page","WbPageStatus","undefined","it","gateway","container","Container","PageListCache","FullPageCache","GatewayAbstraction","UpdatePageRepository","UpdatePageUseCase","updatePage","UseCaseAbstraction","expect","item","page","updatedItem","detailItem","Error"],"mappings":"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"}
1
+ {"version":3,"file":"features/pages/updatePage/UpdatePage.test.js","sources":["../../../../src/features/pages/updatePage/UpdatePage.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 UpdatePageUseCase as UseCaseAbstraction,\n UpdatePageGateway as GatewayAbstraction\n} from \"./abstractions.js\";\nimport { UpdatePageUseCase } from \"./UpdatePageUseCase.js\";\nimport { UpdatePageRepository } from \"./UpdatePageRepository.js\";\nimport { PageListCache, FullPageCache } from \"~/features/pages/shared/abstractions.js\";\n\ndescribe(\"UpdatePage\", () => {\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 data: \"metadata-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n revisionDescription: undefined\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 data: \"metadata-1\"\n },\n elements: {\n element1: \"element\"\n },\n bindings: {\n data: \"any-data\"\n },\n revisionDescription: undefined\n })\n ]);\n });\n\n it(\"should be able to update a page\", async () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue({\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 - Updated\"\n },\n metadata: {\n data: \"metadata-1-updated\"\n },\n elements: {\n element1: \"element-updated\"\n },\n bindings: {\n data: \"any-data-updated\"\n },\n extensions: {\n ext1: \"ext-data-updated\"\n }\n })\n };\n\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UpdatePageRepository).inSingletonScope();\n container.register(UpdatePageUseCase);\n\n const updatePage = container.resolve(UseCaseAbstraction);\n\n expect(pagesCache.hasItems()).toBeTrue();\n const item = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(item?.id).toEqual(\"page-1#0001\");\n expect(item?.entryId).toEqual(\"page-1\");\n expect(item?.properties).toMatchObject({\n title: \"Page 1\"\n });\n expect(item?.elements).toMatchObject({\n element1: \"element\"\n });\n expect(item?.metadata).toMatchObject({\n data: \"metadata-1\"\n });\n expect(item?.bindings).toMatchObject({\n data: \"any-data\"\n });\n\n await updatePage.execute({\n id: \"page-1#0001\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n\n // List cache gets full replacement from gateway result\n const updatedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n expect(updatedItem).toBeDefined();\n expect(updatedItem?.id).toEqual(\"page-1#0001\");\n expect(updatedItem?.entryId).toEqual(\"page-1\");\n expect(updatedItem?.properties).toMatchObject({\n title: \"Page 1 - Updated\"\n });\n expect(updatedItem?.elements).toMatchObject({\n element1: \"element-updated\"\n });\n expect(updatedItem?.metadata).toMatchObject({\n data: \"metadata-1-updated\"\n });\n expect(updatedItem?.bindings).toMatchObject({\n data: \"any-data-updated\"\n });\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?.properties).toMatchObject({\n title: \"Page 1 - Updated\"\n });\n expect(detailItem?.metadata).toMatchObject({\n data: \"metadata-1-updated\"\n });\n expect(detailItem?.elements).toMatchObject({\n element1: \"element-updated\"\n });\n expect(detailItem?.bindings).toMatchObject({\n data: \"any-data-updated\"\n });\n expect(detailItem?.extensions).toMatchObject({\n ext1: \"ext-data-updated\"\n });\n });\n\n it(\"should not update a page if id is missing\", async () => {\n const gateway = {\n execute: vi.fn().mockResolvedValue(null)\n };\n\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UpdatePageRepository).inSingletonScope();\n container.register(UpdatePageUseCase);\n\n const updatePage = container.resolve(UseCaseAbstraction);\n\n await updatePage.execute({\n id: \"\"\n });\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n const updatedItem = pagesCache.getItem(page => page.entryId === \"page-1\");\n\n expect(updatedItem).toBeDefined();\n expect(updatedItem?.id).toEqual(\"page-1#0001\");\n expect(updatedItem?.entryId).toEqual(\"page-1\");\n expect(updatedItem?.properties).toMatchObject({\n title: \"Page 1\"\n });\n expect(updatedItem?.elements).toMatchObject({\n element1: \"element\"\n });\n expect(updatedItem?.metadata).toMatchObject({\n data: \"metadata-1\"\n });\n expect(updatedItem?.bindings).toMatchObject({\n data: \"any-data\"\n });\n });\n\n it(\"should handle gateway errors gracefully\", async () => {\n const gateway = {\n execute: vi.fn().mockRejectedValue(new Error(\"Gateway error\"))\n };\n\n const container = new Container();\n container.registerInstance(PageListCache, pagesCache);\n container.registerInstance(FullPageCache, detailsCache);\n container.registerInstance(GatewayAbstraction, gateway);\n container.register(UpdatePageRepository).inSingletonScope();\n container.register(UpdatePageUseCase);\n\n const updatePage = container.resolve(UseCaseAbstraction);\n\n await expect(\n updatePage.execute({\n id: \"page-1#0001\"\n })\n ).rejects.toThrow(\"Gateway error\");\n\n expect(gateway.execute).toHaveBeenCalledTimes(1);\n });\n});\n"],"names":["describe","pagesCache","pageListCache","detailsCache","fullPageCache","beforeEach","vi","Page","WbPageStatus","undefined","it","gateway","container","Container","PageListCache","FullPageCache","GatewayAbstraction","UpdatePageRepository","UpdatePageUseCase","updatePage","UseCaseAbstraction","expect","item","page","updatedItem","detailItem","Error"],"mappings":"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"}
@@ -8,7 +8,10 @@ const UPDATE_PAGE = `
8
8
  data {
9
9
  ${getPageGraphQLFields([
10
10
  "properties",
11
- "metadata"
11
+ "metadata",
12
+ "bindings",
13
+ "elements",
14
+ "extensions"
12
15
  ]).join("\n")}
13
16
  }
14
17
  error {
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/updatePage/UpdatePageGateway.js","sources":["../../../../src/features/pages/updatePage/UpdatePageGateway.ts"],"sourcesContent":["import { UpdatePageGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { PageDto } from \"./PageDto.js\";\nimport type { PageGqlDto } from \"./PageGqlDto.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { getPageGraphQLFields } from \"~/features/pages/shared/pageGraphQLFields.js\";\n\nconst UPDATE_PAGE = /* GraphQL */ `\n mutation UpdatePage($id: ID!, $data: WbPageUpdateInput!) {\n websiteBuilder {\n updatePage(id: $id, data: $data) {\n data {\n ${getPageGraphQLFields([\"properties\", \"metadata\"]).join(\"\\n\")}\n }\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype UpdatePageResponse = {\n websiteBuilder: {\n updatePage:\n | { data: PageGqlDto; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass UpdatePageGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(page: PageDto): Promise<PageGqlDto> {\n const { id, properties, metadata, elements, bindings, extensions } = page;\n\n const response = await this.client.execute<UpdatePageResponse>({\n query: UPDATE_PAGE,\n variables: {\n id,\n data: {\n properties,\n metadata,\n elements,\n bindings,\n extensions\n }\n }\n });\n\n const envelope = response.websiteBuilder.updatePage;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not update page.\");\n }\n\n return envelope.data;\n }\n}\n\nexport const UpdatePageGateway = GatewayAbstraction.createImplementation({\n implementation: UpdatePageGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["UPDATE_PAGE","getPageGraphQLFields","UpdatePageGatewayImpl","client","page","id","properties","metadata","elements","bindings","extensions","response","envelope","Error","UpdatePageGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAMA,MAAMA,cAA4B,CAAC;;;;;oBAKf,EAAEC,qBAAqB;IAAC;IAAc;CAAW,EAAE,IAAI,CAAC,MAAM;;;;;;;;;;AAUlF,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,IAAa,EAAuB;QAC9C,MAAM,EAAEC,EAAE,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGN;QAErE,MAAMO,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB;YAC3D,OAAOX;YACP,WAAW;gBACPK;gBACA,MAAM;oBACFC;oBACAC;oBACAC;oBACAC;oBACAC;gBACJ;YACJ;QACJ;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,UAAU;QACnD,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;QAG9C,OAAOA,SAAS,IAAI;IACxB;AACJ;AAEO,MAAME,sCAAoBC,kBAAAA,oBAAuC,CAAC;IACrE,gBAAgBb;IAChB,cAAc;QAACc;KAAkB;AACrC"}
1
+ {"version":3,"file":"features/pages/updatePage/UpdatePageGateway.js","sources":["../../../../src/features/pages/updatePage/UpdatePageGateway.ts"],"sourcesContent":["import { UpdatePageGateway as GatewayAbstraction } from \"./abstractions.js\";\nimport type { PageDto } from \"./PageDto.js\";\nimport type { PageGqlDto } from \"./PageGqlDto.js\";\nimport { MainGraphQLClient } from \"@webiny/app/features/mainGraphQLClient\";\nimport { getPageGraphQLFields } from \"~/features/pages/shared/pageGraphQLFields.js\";\n\nconst UPDATE_PAGE = /* GraphQL */ `\n mutation UpdatePage($id: ID!, $data: WbPageUpdateInput!) {\n websiteBuilder {\n updatePage(id: $id, data: $data) {\n data {\n ${getPageGraphQLFields([\"properties\", \"metadata\", \"bindings\", \"elements\", \"extensions\"]).join(\"\\n\")}\n }\n error {\n code\n data\n message\n }\n }\n }\n }\n`;\n\ntype UpdatePageResponse = {\n websiteBuilder: {\n updatePage:\n | { data: PageGqlDto; error: null }\n | { data: null; error: { code: string; message: string; data: any } };\n };\n};\n\nclass UpdatePageGatewayImpl implements GatewayAbstraction.Interface {\n constructor(private client: MainGraphQLClient.Interface) {}\n\n async execute(page: PageDto): Promise<PageGqlDto> {\n const { id, properties, metadata, elements, bindings, extensions } = page;\n\n const response = await this.client.execute<UpdatePageResponse>({\n query: UPDATE_PAGE,\n variables: {\n id,\n data: {\n properties,\n metadata,\n elements,\n bindings,\n extensions\n }\n }\n });\n\n const envelope = response.websiteBuilder.updatePage;\n if (envelope.error) {\n throw new Error(envelope.error.message || \"Could not update page.\");\n }\n\n return envelope.data;\n }\n}\n\nexport const UpdatePageGateway = GatewayAbstraction.createImplementation({\n implementation: UpdatePageGatewayImpl,\n dependencies: [MainGraphQLClient]\n});\n"],"names":["UPDATE_PAGE","getPageGraphQLFields","UpdatePageGatewayImpl","client","page","id","properties","metadata","elements","bindings","extensions","response","envelope","Error","UpdatePageGateway","GatewayAbstraction","MainGraphQLClient"],"mappings":";;;AAMA,MAAMA,cAA4B,CAAC;;;;;oBAKf,EAAEC,qBAAqB;IAAC;IAAc;IAAY;IAAY;IAAY;CAAa,EAAE,IAAI,CAAC,MAAM;;;;;;;;;;AAUxH,CAAC;AAUD,MAAMC;IACF,YAAoBC,MAAmC,CAAE;aAArCA,MAAM,GAANA;IAAsC;IAE1D,MAAM,QAAQC,IAAa,EAAuB;QAC9C,MAAM,EAAEC,EAAE,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,QAAQ,EAAEC,UAAU,EAAE,GAAGN;QAErE,MAAMO,WAAW,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB;YAC3D,OAAOX;YACP,WAAW;gBACPK;gBACA,MAAM;oBACFC;oBACAC;oBACAC;oBACAC;oBACAC;gBACJ;YACJ;QACJ;QAEA,MAAME,WAAWD,SAAS,cAAc,CAAC,UAAU;QACnD,IAAIC,SAAS,KAAK,EACd,MAAM,IAAIC,MAAMD,SAAS,KAAK,CAAC,OAAO,IAAI;QAG9C,OAAOA,SAAS,IAAI;IACxB;AACJ;AAEO,MAAME,sCAAoBC,kBAAAA,oBAAuC,CAAC;IACrE,gBAAgBb;IAChB,cAAc;QAACc;KAAkB;AACrC"}
@@ -22,11 +22,7 @@ class UpdatePageRepositoryImpl {
22
22
  return existingPage;
23
23
  });
24
24
  this.detailsCache.updateItems((existingPage)=>{
25
- if (existingPage.id === page.id) return Page.create({
26
- ...result,
27
- elements: dto.elements,
28
- bindings: dto.bindings
29
- });
25
+ if (existingPage.id === page.id) return Page.create(result);
30
26
  return existingPage;
31
27
  });
32
28
  }
@@ -1 +1 @@
1
- {"version":3,"file":"features/pages/updatePage/UpdatePageRepository.js","sources":["../../../../src/features/pages/updatePage/UpdatePageRepository.ts"],"sourcesContent":["import {\n UpdatePageRepository as RepositoryAbstraction,\n UpdatePageGateway\n} from \"./abstractions.js\";\nimport type { PageDto } from \"./PageDto.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageListCache, FullPageCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass UpdatePageRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private listCache: PageListCache.Interface,\n private detailsCache: FullPageCache.Interface,\n private gateway: UpdatePageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const dto: PageDto = {\n id: page.id,\n properties: page.properties,\n metadata: page.metadata,\n elements: page.elements,\n bindings: page.bindings,\n extensions: page.extensions\n };\n\n const result = await this.gateway.execute(dto);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create({\n ...result,\n elements: dto.elements,\n bindings: dto.bindings\n });\n }\n return existingPage;\n });\n }\n}\n\nexport const UpdatePageRepository = RepositoryAbstraction.createImplementation({\n implementation: UpdatePageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, UpdatePageGateway]\n});\n"],"names":["UpdatePageRepositoryImpl","listCache","detailsCache","gateway","page","dto","result","existingPage","Page","UpdatePageRepository","RepositoryAbstraction","PageListCache","FullPageCache","UpdatePageGateway"],"mappings":";;;AAQA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,OAAoC,CAC9C;aAHUF,SAAS,GAATA;aACAC,YAAY,GAAZA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,MAAe;YACjB,IAAID,KAAK,EAAE;YACX,YAAYA,KAAK,UAAU;YAC3B,UAAUA,KAAK,QAAQ;YACvB,UAAUA,KAAK,QAAQ;YACvB,UAAUA,KAAK,QAAQ;YACvB,YAAYA,KAAK,UAAU;QAC/B;QAEA,MAAME,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD;QAE1C,IAAI,CAAC,SAAS,CAAC,WAAW,CAACE,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKH,KAAK,EAAE,EAC3B,OAAOI,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKH,KAAK,EAAE,EAC3B,OAAOI,KAAK,MAAM,CAAC;gBACf,GAAGF,MAAM;gBACT,UAAUD,IAAI,QAAQ;gBACtB,UAAUA,IAAI,QAAQ;YAC1B;YAEJ,OAAOE;QACX;IACJ;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBV;IAChB,cAAc;QAACW;QAAeC;QAAeC;KAAkB;AACnE"}
1
+ {"version":3,"file":"features/pages/updatePage/UpdatePageRepository.js","sources":["../../../../src/features/pages/updatePage/UpdatePageRepository.ts"],"sourcesContent":["import {\n UpdatePageRepository as RepositoryAbstraction,\n UpdatePageGateway\n} from \"./abstractions.js\";\nimport type { PageDto } from \"./PageDto.js\";\nimport { Page } from \"~/domain/Page/Page.js\";\nimport { PageListCache, FullPageCache } from \"~/features/pages/shared/abstractions.js\";\n\nclass UpdatePageRepositoryImpl implements RepositoryAbstraction.Interface {\n constructor(\n private listCache: PageListCache.Interface,\n private detailsCache: FullPageCache.Interface,\n private gateway: UpdatePageGateway.Interface\n ) {}\n\n async execute(page: Page) {\n const dto: PageDto = {\n id: page.id,\n properties: page.properties,\n metadata: page.metadata,\n elements: page.elements,\n bindings: page.bindings,\n extensions: page.extensions\n };\n\n const result = await this.gateway.execute(dto);\n\n this.listCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n\n this.detailsCache.updateItems(existingPage => {\n if (existingPage.id === page.id) {\n return Page.create(result);\n }\n return existingPage;\n });\n }\n}\n\nexport const UpdatePageRepository = RepositoryAbstraction.createImplementation({\n implementation: UpdatePageRepositoryImpl,\n dependencies: [PageListCache, FullPageCache, UpdatePageGateway]\n});\n"],"names":["UpdatePageRepositoryImpl","listCache","detailsCache","gateway","page","dto","result","existingPage","Page","UpdatePageRepository","RepositoryAbstraction","PageListCache","FullPageCache","UpdatePageGateway"],"mappings":";;;AAQA,MAAMA;IACF,YACYC,SAAkC,EAClCC,YAAqC,EACrCC,OAAoC,CAC9C;aAHUF,SAAS,GAATA;aACAC,YAAY,GAAZA;aACAC,OAAO,GAAPA;IACT;IAEH,MAAM,QAAQC,IAAU,EAAE;QACtB,MAAMC,MAAe;YACjB,IAAID,KAAK,EAAE;YACX,YAAYA,KAAK,UAAU;YAC3B,UAAUA,KAAK,QAAQ;YACvB,UAAUA,KAAK,QAAQ;YACvB,UAAUA,KAAK,QAAQ;YACvB,YAAYA,KAAK,UAAU;QAC/B;QAEA,MAAME,SAAS,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAACD;QAE1C,IAAI,CAAC,SAAS,CAAC,WAAW,CAACE,CAAAA;YACvB,IAAIA,aAAa,EAAE,KAAKH,KAAK,EAAE,EAC3B,OAAOI,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;QAEA,IAAI,CAAC,YAAY,CAAC,WAAW,CAACA,CAAAA;YAC1B,IAAIA,aAAa,EAAE,KAAKH,KAAK,EAAE,EAC3B,OAAOI,KAAK,MAAM,CAACF;YAEvB,OAAOC;QACX;IACJ;AACJ;AAEO,MAAME,4CAAuBC,qBAAAA,oBAA0C,CAAC;IAC3E,gBAAgBV;IAChB,cAAc;QAACW;QAAeC;QAAeC;KAAkB;AACnE"}
@@ -1,12 +1,10 @@
1
- import react, { useCallback, useState } from "react";
2
- import { Input, Text } from "@webiny/admin-ui";
1
+ import react, { useCallback } from "react";
2
+ import { EditableTitle } from "@webiny/admin-ui";
3
3
  import { useDocumentEditor } from "../../../../DocumentEditor/index.js";
4
4
  import { useSelectFromDocument } from "../../../../BaseEditor/hooks/useSelectFromDocument.js";
5
5
  import { useSelectFromEditor } from "../../../../BaseEditor/hooks/useSelectFromEditor.js";
6
6
  import { LanguageCodeTag } from "../../../../presentation/components/LanguageCodeTag.js";
7
7
  function Title() {
8
- const [localValue, setLocalValue] = useState();
9
- const [isEditing, setIsEditing] = useState(false);
10
8
  const isEditorReadOnly = useSelectFromEditor((state)=>state.isReadOnly);
11
9
  const editor = useDocumentEditor();
12
10
  const { title, language } = useSelectFromDocument((document)=>({
@@ -17,39 +15,15 @@ function Title() {
17
15
  editor.updateDocument((document)=>{
18
16
  document.properties.title = value;
19
17
  });
20
- setLocalValue(void 0);
21
- setIsEditing(false);
22
18
  }, []);
23
- const cancelEditing = useCallback(()=>{
24
- setIsEditing(false);
25
- setLocalValue(void 0);
26
- }, []);
27
- if (isEditorReadOnly) return /*#__PURE__*/ react.createElement("div", {
28
- className: "flex flex-col min-w-0"
29
- }, /*#__PURE__*/ react.createElement(Text, {
30
- className: "text-accent-primary font-bold mx-sm truncate",
31
- size: "lg"
32
- }, title));
33
- return /*#__PURE__*/ react.createElement("div", {
34
- className: "flex flex-row min-w-0"
35
- }, /*#__PURE__*/ react.createElement(LanguageCodeTag, {
36
- code: language
37
- }), isEditing ? null : /*#__PURE__*/ react.createElement(Text, {
38
- onClick: ()=>setIsEditing(true),
39
- className: "cursor-pointer text-accent-primary font-bold mx-sm truncate",
40
- size: "lg"
41
- }, title), isEditing ? /*#__PURE__*/ react.createElement(Input, {
42
- autoFocus: true,
43
- autoSelect: true,
44
- size: "md",
45
- variant: "secondary",
46
- className: "mx-sm",
47
- value: localValue ?? title,
48
- onChange: setLocalValue,
49
- onBlur: (e)=>commitValue(e.currentTarget.value),
50
- onEnter: (e)=>commitValue(e.currentTarget.value),
51
- onEscape: cancelEditing
52
- }) : null);
19
+ return /*#__PURE__*/ react.createElement(EditableTitle, {
20
+ value: title,
21
+ onCommit: commitValue,
22
+ readOnly: isEditorReadOnly,
23
+ startContent: /*#__PURE__*/ react.createElement(LanguageCodeTag, {
24
+ code: language
25
+ })
26
+ });
53
27
  }
54
28
  export { Title };
55
29
 
@@ -1 +1 @@
1
- {"version":3,"file":"modules/pages/PageEditor/TopBar/Title.js","sources":["../../../../../src/modules/pages/PageEditor/TopBar/Title.tsx"],"sourcesContent":["import React, { useCallback, useState } from \"react\";\nimport { Input, Text } from \"@webiny/admin-ui\";\nimport { useDocumentEditor } from \"~/DocumentEditor/index.js\";\nimport { useSelectFromDocument } from \"~/BaseEditor/hooks/useSelectFromDocument.js\";\nimport { useSelectFromEditor } from \"~/BaseEditor/hooks/useSelectFromEditor.js\";\nimport { LanguageCodeTag } from \"~/presentation/components/LanguageCodeTag.js\";\n\nexport function Title() {\n const [localValue, setLocalValue] = useState<string | undefined>();\n const [isEditing, setIsEditing] = useState<boolean>(false);\n const isEditorReadOnly = useSelectFromEditor(state => state.isReadOnly);\n\n const editor = useDocumentEditor();\n\n const { title, language } = useSelectFromDocument(document => {\n return {\n title: document.properties.title ?? \"Untitled\",\n language: document.properties.language ?? undefined\n };\n });\n\n const commitValue = useCallback((value: string) => {\n editor.updateDocument(document => {\n document.properties.title = value;\n });\n setLocalValue(undefined);\n setIsEditing(false);\n }, []);\n\n const cancelEditing = useCallback(() => {\n setIsEditing(false);\n setLocalValue(undefined);\n }, []);\n\n if (isEditorReadOnly) {\n return (\n <div className={\"flex flex-col min-w-0\"}>\n <Text className={\"text-accent-primary font-bold mx-sm truncate\"} size={\"lg\"}>\n {title}\n </Text>\n </div>\n );\n }\n\n return (\n <div className={\"flex flex-row min-w-0\"}>\n <LanguageCodeTag code={language} />\n {!isEditing ? (\n <Text\n onClick={() => setIsEditing(true)}\n className={\"cursor-pointer text-accent-primary font-bold mx-sm truncate\"}\n size={\"lg\"}\n >\n {title}\n </Text>\n ) : null}\n {isEditing ? (\n <Input\n autoFocus\n autoSelect\n size={\"md\"}\n variant={\"secondary\"}\n className={\"mx-sm\"}\n value={localValue ?? title}\n onChange={setLocalValue}\n onBlur={e => commitValue(e.currentTarget.value)}\n onEnter={e => commitValue(e.currentTarget.value)}\n onEscape={cancelEditing}\n />\n ) : null}\n </div>\n );\n}\n"],"names":["Title","localValue","setLocalValue","useState","isEditing","setIsEditing","isEditorReadOnly","useSelectFromEditor","state","editor","useDocumentEditor","title","language","useSelectFromDocument","document","undefined","commitValue","useCallback","value","cancelEditing","Text","LanguageCodeTag","Input","e"],"mappings":";;;;;;AAOO,SAASA;IACZ,MAAM,CAACC,YAAYC,cAAc,GAAGC;IACpC,MAAM,CAACC,WAAWC,aAAa,GAAGF,SAAkB;IACpD,MAAMG,mBAAmBC,oBAAoBC,CAAAA,QAASA,MAAM,UAAU;IAEtE,MAAMC,SAASC;IAEf,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,sBAAsBC,CAAAA,WACvC;YACH,OAAOA,SAAS,UAAU,CAAC,KAAK,IAAI;YACpC,UAAUA,SAAS,UAAU,CAAC,QAAQ,IAAIC;QAC9C;IAGJ,MAAMC,cAAcC,YAAY,CAACC;QAC7BT,OAAO,cAAc,CAACK,CAAAA;YAClBA,SAAS,UAAU,CAAC,KAAK,GAAGI;QAChC;QACAhB,cAAca;QACdV,aAAa;IACjB,GAAG,EAAE;IAEL,MAAMc,gBAAgBF,YAAY;QAC9BZ,aAAa;QACbH,cAAca;IAClB,GAAG,EAAE;IAEL,IAAIT,kBACA,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACc,MAAIA;QAAC,WAAW;QAAgD,MAAM;OAClET;IAMjB,OAAO,WAAP,GACI,oBAAC;QAAI,WAAW;qBACZ,oBAACU,iBAAeA;QAAC,MAAMT;QACtB,AAACR,YAQE,OARU,WAAZA,GACE,oBAACgB,MAAIA;QACD,SAAS,IAAMf,aAAa;QAC5B,WAAW;QACX,MAAM;OAELM,QAGRP,YAAY,WAAZA,GACG,oBAACkB,OAAKA;QACF;QACA;QACA,MAAM;QACN,SAAS;QACT,WAAW;QACX,OAAOrB,cAAcU;QACrB,UAAUT;QACV,QAAQqB,CAAAA,IAAKP,YAAYO,EAAE,aAAa,CAAC,KAAK;QAC9C,SAASA,CAAAA,IAAKP,YAAYO,EAAE,aAAa,CAAC,KAAK;QAC/C,UAAUJ;SAEd;AAGhB"}
1
+ {"version":3,"file":"modules/pages/PageEditor/TopBar/Title.js","sources":["../../../../../src/modules/pages/PageEditor/TopBar/Title.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { EditableTitle } from \"@webiny/admin-ui\";\nimport { useDocumentEditor } from \"~/DocumentEditor/index.js\";\nimport { useSelectFromDocument } from \"~/BaseEditor/hooks/useSelectFromDocument.js\";\nimport { useSelectFromEditor } from \"~/BaseEditor/hooks/useSelectFromEditor.js\";\nimport { LanguageCodeTag } from \"~/presentation/components/LanguageCodeTag.js\";\n\nexport function Title() {\n const isEditorReadOnly = useSelectFromEditor(state => state.isReadOnly);\n const editor = useDocumentEditor();\n\n const { title, language } = useSelectFromDocument(document => {\n return {\n title: document.properties.title ?? \"Untitled\",\n language: document.properties.language ?? undefined\n };\n });\n\n const commitValue = useCallback((value: string) => {\n editor.updateDocument(document => {\n document.properties.title = value;\n });\n }, []);\n\n return (\n <EditableTitle\n value={title}\n onCommit={commitValue}\n readOnly={isEditorReadOnly}\n startContent={<LanguageCodeTag code={language} />}\n />\n );\n}\n"],"names":["Title","isEditorReadOnly","useSelectFromEditor","state","editor","useDocumentEditor","title","language","useSelectFromDocument","document","undefined","commitValue","useCallback","value","EditableTitle","LanguageCodeTag"],"mappings":";;;;;;AAOO,SAASA;IACZ,MAAMC,mBAAmBC,oBAAoBC,CAAAA,QAASA,MAAM,UAAU;IACtE,MAAMC,SAASC;IAEf,MAAM,EAAEC,KAAK,EAAEC,QAAQ,EAAE,GAAGC,sBAAsBC,CAAAA,WACvC;YACH,OAAOA,SAAS,UAAU,CAAC,KAAK,IAAI;YACpC,UAAUA,SAAS,UAAU,CAAC,QAAQ,IAAIC;QAC9C;IAGJ,MAAMC,cAAcC,YAAY,CAACC;QAC7BT,OAAO,cAAc,CAACK,CAAAA;YAClBA,SAAS,UAAU,CAAC,KAAK,GAAGI;QAChC;IACJ,GAAG,EAAE;IAEL,OAAO,WAAP,GACI,oBAACC,eAAaA;QACV,OAAOR;QACP,UAAUK;QACV,UAAUV;QACV,4BAAc,oBAACc,iBAAeA;YAAC,MAAMR;;;AAGjD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@webiny/app-website-builder",
3
- "version": "6.4.2",
3
+ "version": "6.4.3-beta.1",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
@@ -21,44 +21,44 @@
21
21
  "@monaco-editor/react": "4.7.0",
22
22
  "@svgr/webpack": "8.1.0",
23
23
  "@types/react": "18.3.29",
24
- "@webiny/admin-ui": "6.4.2",
25
- "@webiny/app": "6.4.2",
26
- "@webiny/app-aco": "6.4.2",
27
- "@webiny/app-admin": "6.4.2",
28
- "@webiny/app-headless-cms-common": "6.4.2",
29
- "@webiny/app-trash-bin": "6.4.2",
30
- "@webiny/app-utils": "6.4.2",
24
+ "@webiny/admin-ui": "6.4.3-beta.1",
25
+ "@webiny/app": "6.4.3-beta.1",
26
+ "@webiny/app-aco": "6.4.3-beta.1",
27
+ "@webiny/app-admin": "6.4.3-beta.1",
28
+ "@webiny/app-headless-cms-common": "6.4.3-beta.1",
29
+ "@webiny/app-trash-bin": "6.4.3-beta.1",
30
+ "@webiny/app-utils": "6.4.3-beta.1",
31
31
  "@webiny/di": "1.0.1",
32
- "@webiny/error": "6.4.2",
33
- "@webiny/feature": "6.4.2",
34
- "@webiny/form": "6.4.2",
35
- "@webiny/icons": "6.4.2",
36
- "@webiny/languages": "6.4.2",
37
- "@webiny/lexical-converter": "6.4.2",
38
- "@webiny/lexical-editor": "6.4.2",
39
- "@webiny/lexical-nodes": "6.4.2",
40
- "@webiny/lexical-theme": "6.4.2",
41
- "@webiny/react-composition": "6.4.2",
42
- "@webiny/react-properties": "6.4.2",
43
- "@webiny/utils": "6.4.2",
44
- "@webiny/validation": "6.4.2",
45
- "@webiny/website-builder-sdk": "6.4.2",
32
+ "@webiny/error": "6.4.3-beta.1",
33
+ "@webiny/feature": "6.4.3-beta.1",
34
+ "@webiny/form": "6.4.3-beta.1",
35
+ "@webiny/icons": "6.4.3-beta.1",
36
+ "@webiny/languages": "6.4.3-beta.1",
37
+ "@webiny/lexical-converter": "6.4.3-beta.1",
38
+ "@webiny/lexical-editor": "6.4.3-beta.1",
39
+ "@webiny/lexical-nodes": "6.4.3-beta.1",
40
+ "@webiny/lexical-theme": "6.4.3-beta.1",
41
+ "@webiny/react-composition": "6.4.3-beta.1",
42
+ "@webiny/react-properties": "6.4.3-beta.1",
43
+ "@webiny/utils": "6.4.3-beta.1",
44
+ "@webiny/validation": "6.4.3-beta.1",
45
+ "@webiny/website-builder-sdk": "6.4.3-beta.1",
46
46
  "apollo-cache": "1.3.5",
47
47
  "apollo-client": "2.6.10",
48
48
  "apollo-link": "1.2.14",
49
49
  "apollo-utilities": "1.3.4",
50
50
  "classnames": "2.5.1",
51
51
  "deep-equal": "2.2.3",
52
- "graphql": "16.14.0",
52
+ "graphql": "16.14.2",
53
53
  "graphql-tag": "2.12.6",
54
54
  "is-hotkey": "0.2.0",
55
55
  "lodash": "4.18.1",
56
- "markdown-to-jsx": "9.8.1",
56
+ "markdown-to-jsx": "9.8.2",
57
57
  "matcher": "6.0.0",
58
- "mobx": "6.15.3",
58
+ "mobx": "6.16.1",
59
59
  "mobx-react-lite": "4.1.1",
60
60
  "pluralize": "8.0.0",
61
- "radix-ui": "1.4.3",
61
+ "radix-ui": "1.5.0",
62
62
  "react": "18.3.1",
63
63
  "react-dnd": "16.0.1",
64
64
  "react-dnd-html5-backend": "16.0.1",
@@ -69,11 +69,11 @@
69
69
  "devDependencies": {
70
70
  "@types/deep-equal": "1.0.4",
71
71
  "@types/is-hotkey": "0.1.10",
72
- "@webiny/build-tools": "6.4.2",
72
+ "@webiny/build-tools": "6.4.3-beta.1",
73
73
  "execa": "5.1.1",
74
74
  "rimraf": "6.1.3",
75
75
  "typescript": "6.0.3",
76
- "vitest": "4.1.7"
76
+ "vitest": "4.1.8"
77
77
  },
78
78
  "publishConfig": {
79
79
  "access": "public"