@nascentdigital/funnel-editor-contentful 5.0.1 → 5.0.3

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 (164) hide show
  1. package/dist/EditorApp.js +11 -9
  2. package/dist/EditorPageRouter.d.ts +1 -0
  3. package/dist/EditorPageRouter.js +34 -0
  4. package/dist/EditorPageRoutes.d.ts +1 -0
  5. package/dist/EditorPageRoutes.js +16 -0
  6. package/dist/EntryEditor.js +30 -29
  7. package/dist/EntrySidebar.js +26 -5
  8. package/dist/NotFound.d.ts +1 -0
  9. package/dist/NotFound.js +18 -0
  10. package/dist/asset/index.d.ts +1 -0
  11. package/dist/{core/api → asset}/index.js +1 -3
  12. package/dist/{core → asset}/repository/AssetRepository.d.ts +11 -3
  13. package/dist/{core → asset}/repository/AssetRepository.js +6 -5
  14. package/dist/asset/repository/index.d.ts +1 -0
  15. package/dist/{core → asset}/repository/index.js +0 -4
  16. package/dist/collection/controller/{LocalCollectionController.d.ts → ContentfulCollectionController.d.ts} +17 -11
  17. package/dist/collection/controller/ContentfulCollectionController.js +278 -0
  18. package/dist/collection/controller/ContentfulCollectionControllerContainer.d.ts +5 -0
  19. package/dist/collection/controller/ContentfulCollectionControllerContainer.js +28 -0
  20. package/dist/collection/controller/index.d.ts +3 -4
  21. package/dist/collection/controller/index.js +3 -4
  22. package/dist/collection/controller/useContentfulCollectionController.d.ts +2 -0
  23. package/dist/collection/controller/useContentfulCollectionController.js +8 -0
  24. package/dist/{core → collection}/domain/Collection.d.ts +11 -2
  25. package/dist/{core → collection}/domain/Collection.js +76 -0
  26. package/dist/{core → collection}/domain/index.d.ts +0 -1
  27. package/dist/{core → collection}/domain/index.js +0 -1
  28. package/dist/collection/index.d.ts +1 -0
  29. package/dist/collection/index.js +1 -0
  30. package/dist/collection/repository/CollectionRepository.d.ts +49 -0
  31. package/dist/collection/repository/CollectionRepository.js +223 -0
  32. package/dist/collection/repository/index.d.ts +1 -0
  33. package/dist/{core/contentful → collection/repository}/index.js +1 -5
  34. package/dist/collection/screens/CollectionEditor.js +23 -6
  35. package/dist/core/bridge/AppBridge.d.ts +31 -0
  36. package/dist/core/bridge/AppBridge.js +160 -0
  37. package/dist/core/bridge/AppBridgeContainer.d.ts +3 -3
  38. package/dist/core/bridge/AppBridgeContainer.js +8 -44
  39. package/dist/core/bridge/AppBridgeContext.d.ts +7 -8
  40. package/dist/core/bridge/AppBridgeContext.js +1 -6
  41. package/dist/core/bridge/BridgeLifecycleMessage.d.ts +7 -0
  42. package/dist/core/bridge/BridgeLifecycleMessage.js +12 -0
  43. package/dist/core/bridge/IAppBridgeMessage.d.ts +16 -0
  44. package/dist/core/bridge/IAppBridgeMessage.js +12 -0
  45. package/dist/core/bridge/index.d.ts +2 -1
  46. package/dist/core/bridge/index.js +2 -1
  47. package/dist/core/bridge/useAppBridge.d.ts +2 -8
  48. package/dist/core/bridge/useAppBridge.js +24 -15
  49. package/dist/core/client/ContentfulClientContainer.d.ts +8 -0
  50. package/dist/core/client/ContentfulClientContainer.js +43 -0
  51. package/dist/core/client/ContentfulClientContext.d.ts +8 -0
  52. package/dist/core/client/ContentfulClientContext.js +8 -0
  53. package/dist/core/client/index.d.ts +3 -0
  54. package/dist/core/client/index.js +19 -0
  55. package/dist/core/client/useContentfulClient.d.ts +4 -0
  56. package/dist/core/client/useContentfulClient.js +24 -0
  57. package/dist/core/index.d.ts +1 -4
  58. package/dist/core/index.js +1 -4
  59. package/dist/explore/components/header/Header.d.ts +14 -0
  60. package/dist/explore/components/header/Header.js +33 -0
  61. package/dist/explore/components/header/HeaderActions.d.ts +8 -0
  62. package/dist/explore/components/header/HeaderActions.js +37 -0
  63. package/dist/explore/components/header/HeaderContainer.d.ts +2 -0
  64. package/dist/explore/components/header/HeaderContainer.js +15 -0
  65. package/dist/explore/components/header/HeaderContext.d.ts +7 -0
  66. package/dist/{core/api/EditorApiContext.js → explore/components/header/HeaderContext.js} +2 -2
  67. package/dist/explore/components/header/HeaderController.d.ts +39 -0
  68. package/dist/explore/components/header/HeaderController.js +100 -0
  69. package/dist/explore/components/header/HeaderOptions.d.ts +10 -0
  70. package/dist/explore/components/header/HeaderOptions.js +26 -0
  71. package/dist/explore/components/header/index.d.ts +5 -0
  72. package/dist/explore/components/header/index.js +21 -0
  73. package/dist/explore/components/header/useHeader.d.ts +2 -0
  74. package/dist/explore/components/header/useHeader.js +30 -0
  75. package/dist/explore/components/index.d.ts +2 -0
  76. package/dist/explore/components/index.js +18 -0
  77. package/dist/explore/components/pages/PagesExplorerLayout.d.ts +4 -0
  78. package/dist/explore/components/pages/PagesExplorerLayout.js +28 -0
  79. package/dist/explore/components/pages/index.d.ts +1 -0
  80. package/dist/explore/components/pages/index.js +17 -0
  81. package/dist/explore/index.d.ts +2 -0
  82. package/dist/explore/index.js +18 -0
  83. package/dist/explore/screens/Dashboard.d.ts +4 -0
  84. package/dist/explore/screens/Dashboard.js +55 -0
  85. package/dist/explore/screens/PageExplorer.d.ts +11 -0
  86. package/dist/explore/screens/PageExplorer.js +129 -0
  87. package/dist/explore/screens/PagesExplorer.d.ts +7 -0
  88. package/dist/explore/screens/PagesExplorer.js +98 -0
  89. package/dist/explore/screens/index.d.ts +3 -0
  90. package/dist/explore/screens/index.js +19 -0
  91. package/dist/page/bridge/BlockChangedMessage.d.ts +25 -0
  92. package/dist/page/bridge/BlockChangedMessage.js +18 -0
  93. package/dist/page/bridge/PageBridgeHub.d.ts +8 -0
  94. package/dist/page/bridge/PageBridgeHub.js +51 -0
  95. package/dist/page/bridge/index.d.ts +2 -0
  96. package/dist/page/bridge/index.js +18 -0
  97. package/dist/page/controller/{LocalPageController.d.ts → ContentfulPageController.d.ts} +15 -9
  98. package/dist/page/controller/ContentfulPageController.js +277 -0
  99. package/dist/page/controller/ContentfulPageControllerContainer.d.ts +5 -0
  100. package/dist/page/controller/ContentfulPageControllerContainer.js +28 -0
  101. package/dist/page/controller/index.d.ts +3 -3
  102. package/dist/page/controller/index.js +3 -3
  103. package/dist/page/controller/useContentfulPageController.d.ts +2 -0
  104. package/dist/page/controller/useContentfulPageController.js +8 -0
  105. package/dist/{core → page}/domain/Page.d.ts +23 -12
  106. package/dist/{core → page}/domain/Page.js +139 -0
  107. package/dist/page/domain/index.d.ts +1 -0
  108. package/dist/page/domain/index.js +17 -0
  109. package/dist/page/index.d.ts +3 -0
  110. package/dist/page/index.js +3 -0
  111. package/dist/page/repository/PageRepository.d.ts +45 -0
  112. package/dist/page/repository/PageRepository.js +241 -0
  113. package/dist/page/repository/index.d.ts +1 -0
  114. package/dist/page/repository/index.js +17 -0
  115. package/dist/page/screens/PageEditor.js +36 -12
  116. package/package.json +9 -5
  117. package/dist/collection/controller/LocalCollectionController.js +0 -200
  118. package/dist/collection/controller/LocalCollectionControllerContainer.d.ts +0 -8
  119. package/dist/collection/controller/LocalCollectionControllerContainer.js +0 -36
  120. package/dist/collection/controller/LocalCollectionControllerContext.d.ts +0 -7
  121. package/dist/collection/controller/LocalCollectionControllerContext.js +0 -6
  122. package/dist/collection/controller/useLocalCollectionController.d.ts +0 -2
  123. package/dist/collection/controller/useLocalCollectionController.js +0 -10
  124. package/dist/core/api/EditorApiClient.d.ts +0 -7
  125. package/dist/core/api/EditorApiClient.js +0 -29
  126. package/dist/core/api/EditorApiContainer.d.ts +0 -5
  127. package/dist/core/api/EditorApiContainer.js +0 -16
  128. package/dist/core/api/EditorApiContext.d.ts +0 -7
  129. package/dist/core/api/index.d.ts +0 -3
  130. package/dist/core/api/useEditorApi.d.ts +0 -2
  131. package/dist/core/api/useEditorApi.js +0 -12
  132. package/dist/core/bridge/AppMessage.d.ts +0 -19
  133. package/dist/core/bridge/AppMessage.js +0 -19
  134. package/dist/core/contentful/Contentful.d.ts +0 -33
  135. package/dist/core/contentful/Contentful.js +0 -67
  136. package/dist/core/contentful/ContentfulAsset.d.ts +0 -23
  137. package/dist/core/contentful/ContentfulAsset.js +0 -88
  138. package/dist/core/contentful/ContentfulCollection.d.ts +0 -29
  139. package/dist/core/contentful/ContentfulCollection.js +0 -97
  140. package/dist/core/contentful/ContentfulPage.d.ts +0 -31
  141. package/dist/core/contentful/ContentfulPage.js +0 -84
  142. package/dist/core/contentful/ContentfulRefs.d.ts +0 -16
  143. package/dist/core/contentful/ContentfulRefs.js +0 -152
  144. package/dist/core/contentful/index.d.ts +0 -5
  145. package/dist/core/repository/CollectionSerializer.d.ts +0 -9
  146. package/dist/core/repository/CollectionSerializer.js +0 -41
  147. package/dist/core/repository/LocalCollectionRepository.d.ts +0 -27
  148. package/dist/core/repository/LocalCollectionRepository.js +0 -143
  149. package/dist/core/repository/LocalPageRepository.d.ts +0 -16
  150. package/dist/core/repository/LocalPageRepository.js +0 -153
  151. package/dist/core/repository/PageSerializer.d.ts +0 -9
  152. package/dist/core/repository/PageSerializer.js +0 -47
  153. package/dist/core/repository/RemoteCollectionRepository.d.ts +0 -19
  154. package/dist/core/repository/RemoteCollectionRepository.js +0 -236
  155. package/dist/core/repository/RemotePageRepository.d.ts +0 -14
  156. package/dist/core/repository/RemotePageRepository.js +0 -113
  157. package/dist/core/repository/index.d.ts +0 -5
  158. package/dist/page/controller/LocalPageController.js +0 -190
  159. package/dist/page/controller/LocalPageControllerContainer.d.ts +0 -8
  160. package/dist/page/controller/LocalPageControllerContainer.js +0 -36
  161. package/dist/page/controller/LocalPageControllerContext.d.ts +0 -7
  162. package/dist/page/controller/LocalPageControllerContext.js +0 -6
  163. package/dist/page/controller/useLocalPageController.d.ts +0 -2
  164. package/dist/page/controller/useLocalPageController.js +0 -10
package/dist/EditorApp.js CHANGED
@@ -6,25 +6,27 @@ const app_sdk_1 = require("@contentful/app-sdk");
6
6
  const react_apps_toolkit_1 = require("@contentful/react-apps-toolkit");
7
7
  const components_1 = require("@nascentdigital/funnel-editor/components");
8
8
  const core_1 = require("./core");
9
+ const EditorPageRouter_1 = require("./EditorPageRouter");
9
10
  const EntryEditor_1 = require("./EntryEditor");
10
11
  const EntrySidebar_1 = require("./EntrySidebar");
11
12
  // editor
12
13
  function EditorApp() {
13
- // hooks
14
+ // bind hooks
14
15
  const sdk = (0, react_apps_toolkit_1.useSDK)();
15
- // entry editor
16
- let content;
17
- if (sdk.location.is(app_sdk_1.locations.LOCATION_ENTRY_EDITOR)) {
18
- content = (0, jsx_runtime_1.jsx)(EntryEditor_1.EntryEditor, {});
16
+ // page
17
+ if (sdk.location.is(app_sdk_1.locations.LOCATION_PAGE)) {
18
+ return ((0, jsx_runtime_1.jsx)(components_1.AppStateContainer, { children: (0, jsx_runtime_1.jsx)(core_1.ContentfulClientContainer, { sdk: sdk, children: (0, jsx_runtime_1.jsx)(EditorPageRouter_1.EditorPageRouter, {}) }) }));
19
+ }
20
+ // entry
21
+ else if (sdk.location.is(app_sdk_1.locations.LOCATION_ENTRY_EDITOR)) {
22
+ return ((0, jsx_runtime_1.jsx)(components_1.AppStateContainer, { children: (0, jsx_runtime_1.jsx)(core_1.AppBridgeContainer, { role: "hub", children: (0, jsx_runtime_1.jsx)(core_1.ContentfulClientContainer, { sdk: sdk, children: (0, jsx_runtime_1.jsx)(EntryEditor_1.EntryEditor, {}) }) }) }));
19
23
  }
20
24
  // entry sidebar
21
25
  else if (sdk.location.is(app_sdk_1.locations.LOCATION_ENTRY_SIDEBAR)) {
22
- content = (0, jsx_runtime_1.jsx)(EntrySidebar_1.EntrySidebar, {});
26
+ return ((0, jsx_runtime_1.jsx)(components_1.AppStateContainer, { children: (0, jsx_runtime_1.jsx)(core_1.AppBridgeContainer, { role: "client", children: (0, jsx_runtime_1.jsx)(EntrySidebar_1.EntrySidebar, {}) }) }));
23
27
  }
24
28
  // fallback
25
29
  else {
26
- content = (0, jsx_runtime_1.jsx)("div", { children: "Unsupported location" });
30
+ return ((0, jsx_runtime_1.jsx)("div", { children: "Unsupported location" }));
27
31
  }
28
- // render
29
- return ((0, jsx_runtime_1.jsx)(components_1.AppStateContainer, { children: (0, jsx_runtime_1.jsx)(core_1.AppBridgeContainer, { children: (0, jsx_runtime_1.jsx)(core_1.EditorApiContainer, { children: content }) }) }));
30
32
  }
@@ -0,0 +1 @@
1
+ export declare function EditorPageRouter(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EditorPageRouter = EditorPageRouter;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_apps_toolkit_1 = require("@contentful/react-apps-toolkit");
6
+ const components_1 = require("@nascentdigital/funnel-editor/components");
7
+ const react_1 = require("react");
8
+ const react_router_1 = require("react-router");
9
+ const asset_1 = require("./asset");
10
+ const collection_1 = require("./collection");
11
+ const core_1 = require("./core");
12
+ const EditorPageRoutes_1 = require("./EditorPageRoutes");
13
+ const explore_1 = require("./explore");
14
+ const page_1 = require("./page");
15
+ // router
16
+ function EditorPageRouter() {
17
+ // bind props + hooks
18
+ const sdk = (0, react_apps_toolkit_1.useSDK)();
19
+ const contentfulClient = (0, core_1.useContentfulClient)();
20
+ const appState = (0, components_1.useAppState)();
21
+ // create repositories
22
+ const { assetRepository, collectionRepository, pageRepository } = (0, react_1.useMemo)(() => ({
23
+ assetRepository: new asset_1.AssetRepository({ sdk, contentfulClient }),
24
+ collectionRepository: new collection_1.CollectionRepository({ sdk, contentfulClient }),
25
+ pageRepository: new page_1.PageRepository({ sdk, contentfulClient })
26
+ }), [sdk, contentfulClient]);
27
+ // create contexts
28
+ const collectionsContext = (0, react_1.useMemo)(() => {
29
+ const collections = new components_1.Collections({ appState, repository: collectionRepository });
30
+ return { collections };
31
+ }, [appState, collectionRepository]);
32
+ // render
33
+ return ((0, jsx_runtime_1.jsx)(react_router_1.BrowserRouter, { basename: "/contentful", useTransitions: false, children: (0, jsx_runtime_1.jsx)(components_1.AssetRepositoryContext.Provider, { value: assetRepository, children: (0, jsx_runtime_1.jsx)(components_1.CollectionRepositoryContext.Provider, { value: collectionRepository, children: (0, jsx_runtime_1.jsx)(components_1.PageRepositoryContext.Provider, { value: pageRepository, children: (0, jsx_runtime_1.jsx)(components_1.CollectionsContext.Provider, { value: collectionsContext, children: (0, jsx_runtime_1.jsx)(components_1.DialogContainer, { children: (0, jsx_runtime_1.jsx)(components_1.CenterSheetContainer, { children: (0, jsx_runtime_1.jsx)(components_1.SplashContainer, { message: "Initializing...", children: (0, jsx_runtime_1.jsx)(explore_1.HeaderContainer, { children: (0, jsx_runtime_1.jsxs)("div", { className: "w-dvw h-dvh flex flex-col", children: [(0, jsx_runtime_1.jsx)(explore_1.Header, {}), (0, jsx_runtime_1.jsx)(EditorPageRoutes_1.EditorPageRoutes, {})] }) }) }) }) }) }) }) }) }) }));
34
+ }
@@ -0,0 +1 @@
1
+ export declare function EditorPageRoutes(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EditorPageRoutes = EditorPageRoutes;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_1 = require("motion/react");
6
+ const react_router_1 = require("react-router");
7
+ const explore_1 = require("./explore");
8
+ const NotFound_1 = require("./NotFound");
9
+ // router
10
+ function EditorPageRoutes() {
11
+ // bind props + hooks
12
+ const location = (0, react_router_1.useLocation)();
13
+ console.debug('[EditorPageRoutes] render location', location);
14
+ // render
15
+ return ((0, jsx_runtime_1.jsx)(react_1.AnimatePresence, { children: (0, jsx_runtime_1.jsxs)(react_router_1.Routes, { children: [(0, jsx_runtime_1.jsx)(react_router_1.Route, { index: true, element: (0, jsx_runtime_1.jsx)(explore_1.Dashboard, {}) }), (0, jsx_runtime_1.jsxs)(react_router_1.Route, { path: "pages/:region?", element: (0, jsx_runtime_1.jsx)(explore_1.PagesExplorerLayout, {}), children: [(0, jsx_runtime_1.jsx)(react_router_1.Route, { index: true, element: (0, jsx_runtime_1.jsx)(explore_1.PagesExplorer, {}) }), (0, jsx_runtime_1.jsx)(react_router_1.Route, { path: "page/:pageType", element: (0, jsx_runtime_1.jsx)(explore_1.PageExplorer, {}) })] }), (0, jsx_runtime_1.jsx)(react_router_1.Route, { path: "*", element: (0, jsx_runtime_1.jsx)(NotFound_1.NotFound, {}) })] }) }));
16
+ }
@@ -3,48 +3,49 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EntryEditor = EntryEditor;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_apps_toolkit_1 = require("@contentful/react-apps-toolkit");
6
+ const contentful_1 = require("@nascentdigital/funnel-cms/contentful");
7
+ const funnel_core_1 = require("@nascentdigital/funnel-core");
6
8
  const components_1 = require("@nascentdigital/funnel-editor/components");
7
9
  const react_1 = require("react");
10
+ const asset_1 = require("./asset");
8
11
  const collection_1 = require("./collection");
9
12
  const core_1 = require("./core");
10
13
  const page_1 = require("./page");
11
14
  // entry editor
12
15
  function EntryEditor() {
13
- // hooks
16
+ // bind props + hooks
14
17
  const sdk = (0, react_apps_toolkit_1.useSDK)();
18
+ const contentfulClient = (0, core_1.useContentfulClient)();
15
19
  const appState = (0, components_1.useAppState)();
16
- // create asset repository
17
- const assetRepository = (0, react_1.useMemo)(() => {
18
- return new core_1.AssetRepository(sdk);
19
- }, [sdk]);
20
- // create remote collection repository
21
- const remoteCollectionRepository = (0, react_1.useMemo)(() => {
22
- return new core_1.RemoteCollectionRepository(sdk);
23
- }, [sdk]);
24
- // create remote page repository
25
- const remotePageRepository = (0, react_1.useMemo)(() => {
26
- return new core_1.RemotePageRepository(sdk);
27
- }, [sdk]);
28
- // create collections context
29
- const collectionsContext = (0, react_1.useMemo)(() => {
30
- const collections = new components_1.Collections({ appState, repository: remoteCollectionRepository });
31
- return { collections };
32
- }, [appState, remoteCollectionRepository]);
33
- // create site context
34
- const siteContext = (0, react_1.useMemo)(() => {
35
- const site = new components_1.Site({ appState, repository: remotePageRepository, region: 'ca' });
36
- return { site };
37
- }, [appState, remotePageRepository]);
20
+ const { regionalization } = funnel_core_1.AppConfig.brandConfig();
21
+ let region = funnel_core_1.RegionsConfig.getDefaultRegion(regionalization);
22
+ // create repositories
23
+ const { assetRepository, collectionRepository, pageRepository } = (0, react_1.useMemo)(() => ({
24
+ assetRepository: new asset_1.AssetRepository({ sdk, contentfulClient }),
25
+ collectionRepository: new collection_1.CollectionRepository({ sdk, contentfulClient }),
26
+ pageRepository: new page_1.PageRepository({ sdk, contentfulClient })
27
+ }), [sdk, contentfulClient]);
38
28
  // page editor
39
29
  let content;
40
- const { contentType: { sys: { id } } } = sdk.entry.getSys();
41
- if (id === core_1.ContentfulPage.contentTypeId) {
42
- content = ((0, jsx_runtime_1.jsx)(page_1.LocalPageControllerContainer, { remoteRepository: remotePageRepository, children: (0, jsx_runtime_1.jsx)(page_1.PageEditor, {}) }));
30
+ const { entry } = sdk;
31
+ const { contentType: { sys: { id } } } = entry.getSys();
32
+ if (id === contentful_1.ContentfulPageData.contentType) {
33
+ region = entry.fields.region.getValue();
34
+ content = ((0, jsx_runtime_1.jsx)(page_1.ContentfulPageControllerContainer, { children: (0, jsx_runtime_1.jsx)(page_1.PageEditor, {}) }));
43
35
  }
44
36
  // collection editor
45
- else if (id === core_1.ContentfulCollection.contentTypeId) {
46
- content = ((0, jsx_runtime_1.jsx)(collection_1.LocalCollectionControllerContainer, { remoteRepository: remoteCollectionRepository, children: (0, jsx_runtime_1.jsx)(collection_1.CollectionEditor, {}) }));
37
+ else if (id === contentful_1.ContentfulCollectionData.contentType) {
38
+ content = ((0, jsx_runtime_1.jsx)(collection_1.ContentfulCollectionControllerContainer, { children: (0, jsx_runtime_1.jsx)(collection_1.CollectionEditor, {}) }));
47
39
  }
40
+ // create contexts
41
+ const siteContext = (0, react_1.useMemo)(() => {
42
+ const site = new components_1.Site({ appState, repository: pageRepository, region });
43
+ return { site };
44
+ }, [appState, pageRepository, region]);
45
+ const collectionsContext = (0, react_1.useMemo)(() => {
46
+ const collections = new components_1.Collections({ appState, repository: collectionRepository });
47
+ return { collections };
48
+ }, [appState, collectionRepository]);
48
49
  // render
49
- return ((0, jsx_runtime_1.jsx)(components_1.SiteContext.Provider, { value: siteContext, children: (0, jsx_runtime_1.jsx)(components_1.AssetRepositoryContext.Provider, { value: assetRepository, children: (0, jsx_runtime_1.jsx)(components_1.CollectionRepositoryContext.Provider, { value: remoteCollectionRepository, children: (0, jsx_runtime_1.jsx)(components_1.CollectionsContext.Provider, { value: collectionsContext, children: (0, jsx_runtime_1.jsx)(components_1.DialogContainer, { children: (0, jsx_runtime_1.jsx)(components_1.CenterSheetContainer, { children: content }) }) }) }) }) }));
50
+ return ((0, jsx_runtime_1.jsx)(components_1.AssetRepositoryContext.Provider, { value: assetRepository, children: (0, jsx_runtime_1.jsx)(components_1.CollectionRepositoryContext.Provider, { value: collectionRepository, children: (0, jsx_runtime_1.jsx)(components_1.PageRepositoryContext.Provider, { value: pageRepository, children: (0, jsx_runtime_1.jsx)(components_1.SiteContext.Provider, { value: siteContext, children: (0, jsx_runtime_1.jsx)(components_1.CollectionsContext.Provider, { value: collectionsContext, children: (0, jsx_runtime_1.jsx)(components_1.DialogContainer, { children: (0, jsx_runtime_1.jsx)(components_1.CenterSheetContainer, { children: (0, jsx_runtime_1.jsx)(components_1.SplashContainer, { message: "Initializing...", children: content }) }) }) }) }) }) }) }));
50
51
  }
@@ -2,23 +2,44 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.EntrySidebar = EntrySidebar;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const react_apps_toolkit_1 = require("@contentful/react-apps-toolkit");
6
+ const funnel_core_1 = require("@nascentdigital/funnel-core");
7
+ const components_1 = require("@nascentdigital/funnel-editor/components");
5
8
  const react_1 = require("react");
6
9
  const rxjs_1 = require("rxjs");
7
10
  const core_1 = require("./core");
11
+ const page_1 = require("./page");
8
12
  // component
9
13
  function EntrySidebar() {
14
+ var _a;
10
15
  // setup hooks
16
+ const id = (0, react_1.useId)();
17
+ const sdk = (0, react_apps_toolkit_1.useSDK)();
11
18
  const bridge = (0, core_1.useAppBridge)();
12
- const [itemId, setItemId] = (0, react_1.useState)();
19
+ const [block, setBlock] = (0, react_1.useState)();
20
+ // setup ui
21
+ (0, react_1.useEffect)(() => {
22
+ var _a;
23
+ // setup styling for auto-resize
24
+ (_a = funnel_core_1.Browser.getHtml()) === null || _a === void 0 ? void 0 : _a.classList.add('Editor-widget');
25
+ // start auto-resize
26
+ sdk.window.startAutoResizer();
27
+ }, [sdk]);
13
28
  // listen to bridge events
14
29
  (0, react_1.useEffect)(() => {
15
30
  // subscribe to block nav messages
16
31
  const subscription = bridge.messages$
17
- .pipe((0, rxjs_1.filter)(core_1.AppBlockNavMessage.guard))
18
- .subscribe(message => setItemId(message.itemId));
32
+ .pipe((0, rxjs_1.filter)(page_1.BlockChangedMessage.filter))
33
+ .subscribe(message => setBlock(message.block));
19
34
  // unsubscribe on unmount
20
35
  return () => subscription.unsubscribe();
21
- });
36
+ }, [bridge, sdk]);
22
37
  // render
23
- return ((0, jsx_runtime_1.jsxs)("div", { children: ["Entry sidebar ", itemId] }));
38
+ return ((0, jsx_runtime_1.jsxs)("div", { className: "w-full flex flex-col gap-l8 py-l8", children: [(0, jsx_runtime_1.jsxs)("h3", { children: ["Active Block: ", (_a = block === null || block === void 0 ? void 0 : block.name) !== null && _a !== void 0 ? _a : 'N/A'] }), sdk.entry.getSys().contentType.sys.id === 'page' && (block === null || block === void 0 ? void 0 : block.layout) && (block === null || block === void 0 ? void 0 : block.scope) &&
39
+ (0, jsx_runtime_1.jsx)(components_1.FadeIn, { children: (0, jsx_runtime_1.jsxs)("div", { className: "h-full flex flex-col gap-l6 py-l7 bg-surface1 rounded-xxl interpolate-all", children: [(0, jsx_runtime_1.jsx)(components_1.Tabs, { className: "mx-l7", variant: "highlighted", size: "sm", items: blockScopes, selectedItem: block.scope, onSelect: scope => console.debug('changing scope', scope) }), (0, jsx_runtime_1.jsx)(components_1.BlockPreview, { className: "self-center", scope: block.scope, layout: block.layout })] }) }, "block.config")] }));
24
40
  }
41
+ // helpers
42
+ const blockScopes = [
43
+ { id: 'desktop', label: 'Desktop' },
44
+ { id: 'mobile', label: 'Mobile' },
45
+ ];
@@ -0,0 +1 @@
1
+ export declare function NotFound(): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NotFound = NotFound;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const components_1 = require("@nascentdigital/funnel-editor/components");
6
+ const react_1 = require("react");
7
+ const react_router_1 = require("react-router");
8
+ function NotFound() {
9
+ // bind hooks
10
+ const navigate = (0, react_router_1.useNavigate)();
11
+ const splash = (0, components_1.useSplash)();
12
+ // dismiss splash
13
+ (0, react_1.useEffect)(() => {
14
+ splash.dismiss();
15
+ }, [splash]);
16
+ // render
17
+ return ((0, jsx_runtime_1.jsx)(components_1.FadeIn, { className: "w-full flex-1 flex flex-col", variant: "blur", children: (0, jsx_runtime_1.jsxs)(components_1.EmptyState, { variant: "missing", size: "md", children: [(0, jsx_runtime_1.jsx)("h1", { className: "heading-md", children: "Sorry! You took a wrong turn somewhere..." }), (0, jsx_runtime_1.jsx)(components_1.Button, { variant: "primary", size: "md", onClick: () => navigate('/'), children: "Go to Dashboard" })] }) }, "notFound"));
18
+ }
@@ -0,0 +1 @@
1
+ export * from './repository';
@@ -14,6 +14,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./EditorApiClient"), exports);
18
- __exportStar(require("./EditorApiContainer"), exports);
19
- __exportStar(require("./useEditorApi"), exports);
17
+ __exportStar(require("./repository"), exports);
@@ -1,10 +1,18 @@
1
- import { EditorAppSDK } from '@contentful/app-sdk';
1
+ import { EditorAppSDK, PageAppSDK } from '@contentful/app-sdk';
2
+ import { ContentfulContentClient } from '@nascentdigital/funnel-cms/contentful';
2
3
  import { IAssetRepository } from '@nascentdigital/funnel-editor/components';
3
4
  export declare class AssetRepository implements IAssetRepository {
4
- readonly sdk: EditorAppSDK;
5
- constructor(sdk: EditorAppSDK);
5
+ readonly sdk: EditorAppSDK | PageAppSDK;
6
+ readonly contentfulClient: ContentfulContentClient;
7
+ constructor(args: AssetRepository.ConstructorArgs);
6
8
  search(args: IAssetRepository.Search.Args): Promise<IAssetRepository.Search.Result>;
7
9
  get(args: IAssetRepository.Get.Args): Promise<IAssetRepository.Get.Result>;
8
10
  update(args: IAssetRepository.Update.Args): Promise<IAssetRepository.Update.Result>;
9
11
  uploadFile(args: IAssetRepository.UploadFile.Args): Promise<IAssetRepository.UploadFile.Result>;
10
12
  }
13
+ export declare namespace AssetRepository {
14
+ type ConstructorArgs = {
15
+ sdk: EditorAppSDK | PageAppSDK;
16
+ contentfulClient: ContentfulContentClient;
17
+ };
18
+ }
@@ -2,11 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.AssetRepository = void 0;
4
4
  const funnel_core_1 = require("@nascentdigital/funnel-core");
5
- const contentful_1 = require("../contentful");
6
5
  // class
7
6
  class AssetRepository {
8
- constructor(sdk) {
9
- this.sdk = sdk;
7
+ constructor(args) {
8
+ // initialize instance
9
+ this.sdk = args.sdk;
10
+ this.contentfulClient = args.contentfulClient;
10
11
  }
11
12
  async search(args) {
12
13
  // TODO: implement fetching assets
@@ -25,9 +26,9 @@ class AssetRepository {
25
26
  }
26
27
  async uploadFile(args) {
27
28
  // upload asset
28
- const asset = await contentful_1.ContentfulAsset.upload(args, this.sdk);
29
+ const asset = await this.contentfulClient.uploadAsset(args);
29
30
  // return result
30
- return contentful_1.ContentfulAsset.serialize(asset, this.sdk.locales.default);
31
+ return funnel_core_1.Schema.AssetField.LinkedValue.toData(asset);
31
32
  }
32
33
  }
33
34
  exports.AssetRepository = AssetRepository;
@@ -0,0 +1 @@
1
+ export * from './AssetRepository';
@@ -15,7 +15,3 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./AssetRepository"), exports);
18
- __exportStar(require("./LocalCollectionRepository"), exports);
19
- __exportStar(require("./LocalPageRepository"), exports);
20
- __exportStar(require("./RemoteCollectionRepository"), exports);
21
- __exportStar(require("./RemotePageRepository"), exports);
@@ -1,35 +1,41 @@
1
+ import { EntrySys } from '@contentful/app-sdk';
1
2
  import { CollectionGroup, CollectionTarget, ICollection, ICollectionController } from '@nascentdigital/funnel-editor/components';
2
3
  import { type Observable } from 'rxjs';
3
- import { Collection, LocalCollectionRepository, RemoteCollectionRepository } from '../../core';
4
- export declare class LocalCollectionController implements ICollectionController {
5
- readonly localRepository: LocalCollectionRepository;
6
- readonly remoteRepository: RemoteCollectionRepository;
4
+ import { Collection } from '../domain';
5
+ import { CollectionRepository } from '../repository';
6
+ export declare class ContentfulCollectionController implements ICollectionController {
7
+ readonly collectionRepository: CollectionRepository;
7
8
  private readonly _eventBus;
8
9
  private _state;
9
10
  private _collectionGroup?;
10
11
  private _collection?;
11
- private _subscription?;
12
- constructor({ localRepository, remoteRepository }: LocalCollectionController.ConstructorArgs);
12
+ private _collectionSys?;
13
+ private _queuedSave?;
14
+ private _queuedSync?;
15
+ private _collectionSubscription?;
16
+ constructor(args: ContentfulCollectionController.ConstructorArgs);
13
17
  get events$(): Observable<ICollectionController.Event | ICollection.Event>;
14
18
  get state(): ICollectionController.State;
15
19
  private set state(value);
16
20
  get ready(): boolean;
17
- get languages(): ("id" | "ca" | "en" | "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "br" | "bs" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "cy" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "fr" | "fy" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "hr" | "ht" | "hu" | "hy" | "hz" | "ia" | "ie" | "ig" | "ii" | "ik" | "io" | "is" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "li" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "no" | "nr" | "nv" | "ny" | "oc" | "oj" | "om" | "or" | "os" | "pa" | "pi" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "rw" | "sa" | "sc" | "sd" | "se" | "sg" | "si" | "sk" | "sl" | "sm" | "sn" | "so" | "sq" | "sr" | "ss" | "st" | "su" | "sv" | "sw" | "ta" | "te" | "tg" | "th" | "ti" | "tk" | "tl" | "tn" | "to" | "tr" | "ts" | "tt" | "tw" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu")[];
21
+ get languages(): ("id" | "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "br" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "cy" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "fr" | "fy" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "hr" | "ht" | "hu" | "hy" | "hz" | "ia" | "ie" | "ig" | "ii" | "ik" | "io" | "is" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "li" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "no" | "nr" | "nv" | "ny" | "oc" | "oj" | "om" | "or" | "os" | "pa" | "pi" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "rw" | "sa" | "sc" | "sd" | "se" | "sg" | "si" | "sk" | "sl" | "sm" | "sn" | "so" | "sq" | "sr" | "ss" | "st" | "su" | "sv" | "sw" | "ta" | "te" | "tg" | "th" | "ti" | "tk" | "tl" | "tn" | "to" | "tr" | "ts" | "tt" | "tw" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu")[];
22
+ get collectionSys(): EntrySys | undefined;
23
+ private set collectionSys(value);
18
24
  get collectionGroup(): CollectionGroup | undefined;
19
25
  private set collectionGroup(value);
20
26
  get collection(): Collection | undefined;
21
27
  set collection(collection: Collection | undefined);
22
- sync(updatedOn: number): Promise<void>;
28
+ sync(updatedSys: EntrySys): Promise<void>;
23
29
  load(): Promise<void>;
24
30
  createLanguage(target: CollectionTarget): Promise<void>;
25
31
  unpublish(): Promise<void>;
26
32
  save(collection: Collection): Promise<void>;
27
33
  reload(): Promise<void>;
34
+ private processQueues;
28
35
  private raiseEvent;
29
36
  }
30
- export declare namespace LocalCollectionController {
37
+ export declare namespace ContentfulCollectionController {
31
38
  type ConstructorArgs = {
32
- localRepository: LocalCollectionRepository;
33
- remoteRepository: RemoteCollectionRepository;
39
+ collectionRepository: CollectionRepository;
34
40
  };
35
41
  }