@nascentdigital/funnel-editor-contentful 4.6.7 → 5.0.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.
Files changed (85) hide show
  1. package/dist/Editor.d.ts +6 -1
  2. package/dist/Editor.js +17 -1
  3. package/dist/EditorApp.js +1 -1
  4. package/dist/EntryEditor.js +42 -1
  5. package/dist/EntrySidebar.js +18 -1
  6. package/dist/collection/controller/LocalCollectionController.d.ts +35 -0
  7. package/dist/collection/controller/LocalCollectionController.js +200 -0
  8. package/dist/collection/controller/LocalCollectionControllerContainer.d.ts +8 -0
  9. package/dist/collection/controller/LocalCollectionControllerContainer.js +36 -0
  10. package/dist/collection/controller/LocalCollectionControllerContext.d.ts +7 -0
  11. package/dist/collection/controller/LocalCollectionControllerContext.js +6 -0
  12. package/dist/collection/controller/index.d.ts +4 -0
  13. package/dist/collection/controller/index.js +20 -0
  14. package/dist/collection/controller/useLocalCollectionController.d.ts +2 -0
  15. package/dist/collection/controller/useLocalCollectionController.js +10 -0
  16. package/dist/collection/index.d.ts +2 -0
  17. package/dist/collection/index.js +18 -0
  18. package/dist/collection/screens/CollectionEditor.d.ts +1 -0
  19. package/dist/collection/screens/CollectionEditor.js +42 -0
  20. package/dist/collection/screens/index.d.ts +1 -0
  21. package/dist/{page/hooks → collection/screens}/index.js +1 -1
  22. package/dist/core/bridge/AppBridgeContainer.d.ts +9 -0
  23. package/dist/core/bridge/AppBridgeContainer.js +55 -0
  24. package/dist/core/bridge/AppBridgeContext.d.ts +8 -0
  25. package/dist/core/bridge/AppBridgeContext.js +11 -0
  26. package/dist/core/bridge/AppMessage.d.ts +19 -0
  27. package/dist/core/bridge/AppMessage.js +19 -0
  28. package/dist/core/bridge/index.d.ts +4 -0
  29. package/dist/core/bridge/index.js +20 -0
  30. package/dist/core/bridge/useAppBridge.d.ts +8 -0
  31. package/dist/core/bridge/useAppBridge.js +24 -0
  32. package/dist/core/contentful/Contentful.d.ts +33 -0
  33. package/dist/core/contentful/Contentful.js +67 -0
  34. package/dist/core/contentful/ContentfulAsset.d.ts +23 -0
  35. package/dist/core/contentful/ContentfulAsset.js +88 -0
  36. package/dist/core/contentful/ContentfulCollection.d.ts +29 -0
  37. package/dist/core/contentful/ContentfulCollection.js +97 -0
  38. package/dist/core/contentful/ContentfulPage.d.ts +31 -0
  39. package/dist/core/contentful/ContentfulPage.js +84 -0
  40. package/dist/core/contentful/ContentfulRefs.d.ts +16 -0
  41. package/dist/core/contentful/ContentfulRefs.js +152 -0
  42. package/dist/core/contentful/index.d.ts +5 -0
  43. package/dist/core/contentful/index.js +21 -0
  44. package/dist/core/domain/Collection.d.ts +99 -0
  45. package/dist/core/domain/Collection.js +311 -0
  46. package/dist/core/domain/Page.d.ts +58 -8
  47. package/dist/core/domain/Page.js +329 -16
  48. package/dist/core/domain/index.d.ts +1 -0
  49. package/dist/core/domain/index.js +1 -0
  50. package/dist/core/index.d.ts +2 -0
  51. package/dist/core/index.js +2 -0
  52. package/dist/core/repository/AssetRepository.d.ts +10 -0
  53. package/dist/core/repository/AssetRepository.js +33 -0
  54. package/dist/core/repository/CollectionSerializer.d.ts +9 -0
  55. package/dist/core/repository/CollectionSerializer.js +41 -0
  56. package/dist/core/repository/LocalCollectionRepository.d.ts +27 -0
  57. package/dist/core/repository/LocalCollectionRepository.js +143 -0
  58. package/dist/core/repository/LocalPageRepository.d.ts +16 -0
  59. package/dist/core/repository/LocalPageRepository.js +153 -0
  60. package/dist/core/repository/PageSerializer.d.ts +2 -2
  61. package/dist/core/repository/PageSerializer.js +16 -13
  62. package/dist/core/repository/RemoteCollectionRepository.d.ts +19 -0
  63. package/dist/core/repository/RemoteCollectionRepository.js +236 -0
  64. package/dist/core/repository/RemotePageRepository.d.ts +14 -0
  65. package/dist/core/repository/RemotePageRepository.js +113 -0
  66. package/dist/core/repository/index.d.ts +5 -1
  67. package/dist/core/repository/index.js +5 -1
  68. package/dist/page/{hooks/PageController.d.ts → controller/LocalPageController.d.ts} +11 -6
  69. package/dist/page/controller/LocalPageController.js +190 -0
  70. package/dist/page/controller/LocalPageControllerContainer.d.ts +8 -0
  71. package/dist/page/controller/LocalPageControllerContainer.js +36 -0
  72. package/dist/page/controller/LocalPageControllerContext.d.ts +7 -0
  73. package/dist/page/controller/LocalPageControllerContext.js +6 -0
  74. package/dist/page/controller/index.d.ts +3 -0
  75. package/dist/page/controller/index.js +19 -0
  76. package/dist/page/controller/useLocalPageController.d.ts +2 -0
  77. package/dist/page/controller/useLocalPageController.js +10 -0
  78. package/dist/page/index.d.ts +1 -0
  79. package/dist/page/index.js +1 -0
  80. package/dist/page/screens/PageEditor.js +9 -11
  81. package/package.json +5 -3
  82. package/dist/core/repository/PageRepository.d.ts +0 -12
  83. package/dist/core/repository/PageRepository.js +0 -23
  84. package/dist/page/hooks/PageController.js +0 -107
  85. package/dist/page/hooks/index.d.ts +0 -1
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./LocalPageController"), exports);
18
+ __exportStar(require("./LocalPageControllerContainer"), exports);
19
+ __exportStar(require("./useLocalPageController"), exports);
@@ -0,0 +1,2 @@
1
+ import { LocalPageControllerContext } from './LocalPageControllerContext';
2
+ export declare function useLocalPageController(): LocalPageControllerContext.Type;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useLocalPageController = useLocalPageController;
4
+ const react_1 = require("react");
5
+ const LocalPageControllerContext_1 = require("./LocalPageControllerContext");
6
+ // hook
7
+ function useLocalPageController() {
8
+ // bind and return context
9
+ return (0, react_1.useContext)(LocalPageControllerContext_1.LocalPageControllerContext);
10
+ }
@@ -1 +1,2 @@
1
1
  export * from './screens';
2
+ export * from './controller';
@@ -15,3 +15,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./screens"), exports);
18
+ __exportStar(require("./controller"), exports);
@@ -5,18 +5,13 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const components_1 = require("@nascentdigital/funnel-editor/components");
6
6
  const react_1 = require("react");
7
7
  const core_1 = require("../../core");
8
- const hooks_1 = require("../hooks");
8
+ const controller_1 = require("../controller");
9
9
  // component
10
10
  function PageEditor() {
11
11
  // hooks
12
- const editorApi = (0, core_1.useEditorApi)();
13
- const { controller, controllerContext } = (0, react_1.useMemo)(() => {
14
- const controller = new hooks_1.PageController({ editorApi });
15
- return {
16
- controller,
17
- controllerContext: { controller }
18
- };
19
- }, [editorApi]);
12
+ const bridge = (0, core_1.useAppBridge)();
13
+ const controllerContext = (0, controller_1.useLocalPageController)();
14
+ const { controller } = controllerContext;
20
15
  const { page } = controller;
21
16
  const pageContext = (0, react_1.useMemo)(() => ({ page }), [page]);
22
17
  const [itemId, setItemId] = (0, react_1.useState)();
@@ -27,9 +22,12 @@ function PageEditor() {
27
22
  (0, react_1.useEffect)(() => {
28
23
  controller.load().catch(console.error);
29
24
  }, [controller]);
30
- const onSelectItem = (item) => setItemId(item.identifier);
25
+ const onSelectItem = (item) => {
26
+ setItemId(item.identifier);
27
+ bridge.sendMessage(core_1.AppBlockNavMessage.create(item.identifier));
28
+ };
31
29
  // render
32
- return ((0, jsx_runtime_1.jsx)(components_1.PageControllerContext.Provider, { value: controllerContext, children: (0, jsx_runtime_1.jsx)(components_1.PageContext.Provider, { value: pageContext, children: (0, jsx_runtime_1.jsx)(components_1.AssetStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(components_1.CollectionStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(components_1.PageRefStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)("div", { className: "bg-background flex h-dvh w-dvw flex-col", children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex-1", children: (0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-0 flex", children: [(0, jsx_runtime_1.jsx)("section", { className: "scrollbar-thin w-[220px] shrink-0 overflow-y-scroll lg:w-[240px] xl:w-[280px]", children: (0, jsx_runtime_1.jsx)(components_1.PageNav, { selectedItem: selectedItem, onSelectItem: onSelectItem }) }), (0, jsx_runtime_1.jsx)("section", { className: "mx-auto h-full max-h-full max-w-[1000px] flex-1", children: renderContent({ controller, page, selectedItem, onSelectItem }) })] }) }) }) }) }) }) }) }));
30
+ return ((0, jsx_runtime_1.jsx)(components_1.PageControllerContext.Provider, { value: controllerContext, children: (0, jsx_runtime_1.jsx)(components_1.PageContext.Provider, { value: pageContext, children: (0, jsx_runtime_1.jsx)(components_1.AssetStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(components_1.CollectionStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(components_1.PageRefStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)("div", { className: "bg-background flex h-dvh w-dvw flex-col", children: (0, jsx_runtime_1.jsx)("div", { className: "relative flex-1", children: (0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-0 flex", children: [(0, jsx_runtime_1.jsx)("section", { className: "scrollbar-thin w-[220px] shrink-0 overflow-y-scroll lg:w-[240px] xl:w-[280px]", tabIndex: -1, children: (0, jsx_runtime_1.jsx)(components_1.PageNav, { selectedItem: selectedItem, onSelectItem: onSelectItem }) }), (0, jsx_runtime_1.jsx)("section", { className: "mx-auto h-full max-h-full max-w-[1000px] flex-1", children: renderContent({ controller, page, selectedItem, onSelectItem }) })] }) }) }) }) }) }) }) }));
33
31
  }
34
32
  function renderContent({ controller, page, selectedItem, onSelectItem }) {
35
33
  // show loader if not ready
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nascentdigital/funnel-editor-contentful",
3
- "version": "4.6.7",
3
+ "version": "5.0.1",
4
4
  "publishConfig": {
5
5
  "registry": "https://registry.npmjs.org/",
6
6
  "access": "restricted"
@@ -39,7 +39,9 @@
39
39
  "dependencies": {
40
40
  "@contentful/app-sdk": "^4.69.0",
41
41
  "@contentful/react-apps-toolkit": "^2.0.1",
42
- "@nascentdigital/funnel-editor": "^4.6.7"
42
+ "@nascentdigital/funnel-editor": "^5.0.1",
43
+ "rxjs": "^7",
44
+ "uuid": "^11"
43
45
  },
44
46
  "devDependencies": {
45
47
  "@types/node": "^22",
@@ -53,5 +55,5 @@
53
55
  "ts-jest": "^29",
54
56
  "type-fest": "^4"
55
57
  },
56
- "gitHead": "b17e33b4400391b3984e61225c572f097c4c26c9"
58
+ "gitHead": "6ac66e04e5d6d10b959826b84cf3827422ddf47b"
57
59
  }
@@ -1,12 +0,0 @@
1
- import { EventBus } from '@nascentdigital/funnel-core';
2
- import { EditorApiClient } from '../api';
3
- export declare class PageRepository {
4
- readonly editorApi: EditorApiClient;
5
- constructor(editorApi: EditorApiClient);
6
- load({ eventBus }: PageRepository.LoadArgs): Promise<import("..").Page | undefined>;
7
- }
8
- export declare namespace PageRepository {
9
- type LoadArgs = {
10
- eventBus: EventBus;
11
- };
12
- }
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PageRepository = void 0;
4
- const PageSerializer_1 = require("./PageSerializer");
5
- // class
6
- class PageRepository {
7
- constructor(editorApi) {
8
- this.editorApi = editorApi;
9
- }
10
- async load({ eventBus }) {
11
- // fetch current page
12
- const { page: flattenedPage } = await this.editorApi.currentPageGroup();
13
- if (!flattenedPage) {
14
- return undefined;
15
- }
16
- // deserialize page
17
- return PageSerializer_1.PageSerializer.deserializePage({
18
- eventBus,
19
- flattenedPage
20
- });
21
- }
22
- }
23
- exports.PageRepository = PageRepository;
@@ -1,107 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PageController = void 0;
4
- const funnel_core_1 = require("@nascentdigital/funnel-core");
5
- const components_1 = require("@nascentdigital/funnel-editor/components");
6
- const rxjs_1 = require("rxjs");
7
- const core_1 = require("../../core");
8
- // class
9
- class PageController {
10
- constructor({ editorApi }) {
11
- // initialize instance variables
12
- this._eventBus = new funnel_core_1.EventBus();
13
- this._state = 'uninitialized';
14
- this.repository = new core_1.PageRepository(editorApi);
15
- }
16
- get events$() {
17
- return this._eventBus.events$.pipe((0, rxjs_1.filter)((e) => components_1.IPageController.Event.filter(e) || components_1.IPage.Event.filter(e)));
18
- }
19
- get saved$() {
20
- return this._eventBus.events$.pipe((0, rxjs_1.filter)(components_1.IPageController.StateChangedEvent.filter), (0, rxjs_1.pairwise)(), (0, rxjs_1.filter)(([previous, current]) => previous.state === 'saving' && current.state === 'ready'));
21
- }
22
- get state() {
23
- return this._state;
24
- }
25
- set state(value) {
26
- // skip if unchanged
27
- if (this._state === value) {
28
- return;
29
- }
30
- // or update
31
- this._state = value;
32
- // raise event
33
- this._eventBus.publish(components_1.IPageController.StateChangedEvent.create({
34
- state: value,
35
- controller: this
36
- }));
37
- }
38
- get ready() {
39
- const { _state } = this;
40
- return _state !== 'uninitialized' && _state !== 'initializing';
41
- }
42
- get languages() {
43
- return [];
44
- }
45
- get pageSummary() {
46
- return this._pageSummary;
47
- }
48
- set pageSummary(pageSummary) {
49
- // skip if summary is the same
50
- if (this._pageSummary === pageSummary) {
51
- return;
52
- }
53
- // update summary
54
- this._pageSummary = pageSummary;
55
- // raise event
56
- this.raiseEvent('pageSummary.changed');
57
- }
58
- get page() {
59
- return this._page;
60
- }
61
- set page(page) {
62
- // skip if page is the same
63
- if (this._page === page) {
64
- return;
65
- }
66
- // update page
67
- this._page = page;
68
- // raise state change
69
- this.raiseEvent('page.changed');
70
- }
71
- async load() {
72
- // mark as loading (or initialing if loading for first time)
73
- this.state = this._state === 'uninitialized'
74
- ? 'initializing'
75
- : 'loading';
76
- // try to load page
77
- try {
78
- // load page
79
- const page = await this.repository.load({ eventBus: this._eventBus });
80
- // set page
81
- // TODO: create real page summary
82
- this.pageSummary = new components_1.PageSummary({ pages: [{ state: 'draft' }] });
83
- this.page = page;
84
- // update state
85
- this.state = 'ready';
86
- }
87
- // handle error
88
- catch (e) {
89
- console.error('[PageController] failed to load page', e);
90
- // set error state
91
- this.state = 'error';
92
- }
93
- }
94
- async create(target) {
95
- throw new funnel_core_1.NotImplementedError();
96
- }
97
- async reload() {
98
- throw new funnel_core_1.NotImplementedError();
99
- }
100
- async unpublish() {
101
- throw new funnel_core_1.NotImplementedError();
102
- }
103
- raiseEvent(type) {
104
- this._eventBus.publish(components_1.IPageController.Event.create({ type, controller: this }));
105
- }
106
- }
107
- exports.PageController = PageController;
@@ -1 +0,0 @@
1
- export * from './PageController';