@nascentdigital/funnel-editor 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 (155) hide show
  1. package/dist/EditorApp.js +1 -1
  2. package/dist/EditorRoutes.js +7 -5
  3. package/dist/changesets/screens/ChangeSetViewer.js +1 -1
  4. package/dist/changesets/screens/ChangeSetsExplorer.js +1 -2
  5. package/dist/collection/hooks/CollectionController.d.ts +5 -16
  6. package/dist/collection/hooks/CollectionController.js +18 -37
  7. package/dist/collection/hooks/ICollectionController.d.ts +24 -0
  8. package/dist/collection/hooks/ICollectionController.js +20 -0
  9. package/dist/collection/hooks/index.d.ts +1 -0
  10. package/dist/collection/hooks/index.js +1 -0
  11. package/dist/collection/hooks/useCollectionController.d.ts +3 -3
  12. package/dist/collection/screens/CollectionEditor.js +2 -2
  13. package/dist/components.d.ts +14 -3
  14. package/dist/components.js +17 -3
  15. package/dist/core/components/feedback/dialog/MinimalDialogLayout.js +1 -1
  16. package/dist/core/components/fields/BooleanField.d.ts +2 -1
  17. package/dist/core/components/fields/BooleanField.js +2 -2
  18. package/dist/core/components/fields/DateField.d.ts +2 -1
  19. package/dist/core/components/fields/DateField.js +2 -2
  20. package/dist/core/components/fields/DynamicPagesEditor.d.ts +2 -1
  21. package/dist/core/components/fields/DynamicPagesEditor.js +1 -1
  22. package/dist/core/components/fields/EnumField.d.ts +2 -1
  23. package/dist/core/components/fields/EnumField.js +2 -2
  24. package/dist/core/components/fields/FieldCard.d.ts +1 -0
  25. package/dist/core/components/fields/FieldCard.js +8 -1
  26. package/dist/core/components/fields/FieldEditor.d.ts +2 -1
  27. package/dist/core/components/fields/FieldEditor.js +11 -11
  28. package/dist/core/components/fields/FieldLayout.d.ts +2 -1
  29. package/dist/core/components/fields/FieldLayout.js +3 -3
  30. package/dist/core/components/fields/ListEditor.d.ts +2 -1
  31. package/dist/core/components/fields/ListEditor.js +5 -6
  32. package/dist/core/components/fields/OptInField.d.ts +2 -1
  33. package/dist/core/components/fields/OptInField.js +2 -2
  34. package/dist/core/components/fields/RichTextEditor.js +1 -1
  35. package/dist/core/components/fields/RichTextField.d.ts +2 -1
  36. package/dist/core/components/fields/RichTextField.js +3 -5
  37. package/dist/core/components/fields/TextField.d.ts +2 -0
  38. package/dist/core/components/fields/TextField.js +2 -2
  39. package/dist/core/components/fields/TimestampField.d.ts +2 -1
  40. package/dist/core/components/fields/TimestampField.js +3 -3
  41. package/dist/core/components/fields/asset/AssetEditor.js +12 -44
  42. package/dist/core/components/fields/asset/AssetPicker.js +6 -6
  43. package/dist/core/components/fields/asset/AssetUploader.js +23 -31
  44. package/dist/core/components/fields/asset/preview/VideoPreview.js +16 -11
  45. package/dist/core/components/fields/asset/useAssetFields.d.ts +2 -17
  46. package/dist/core/components/fields/asset/useAssetFields.js +0 -21
  47. package/dist/core/components/fields/collection/CollectionEditor.js +1 -1
  48. package/dist/core/components/fields/collection/CollectionPicker.d.ts +2 -2
  49. package/dist/core/components/fields/collection/CollectionPicker.js +3 -4
  50. package/dist/core/components/fields/dynamicPages/PagePriorityDialog.js +1 -1
  51. package/dist/core/components/fields/embed/EmbeddedVideoEditor.js +34 -27
  52. package/dist/core/components/fields/factories/FieldValueFactory.js +11 -4
  53. package/dist/core/components/fields/factories/MediaFactory.d.ts +13 -0
  54. package/dist/core/components/fields/factories/MediaFactory.js +256 -0
  55. package/dist/core/components/fields/list/CreateFieldButton.js +1 -1
  56. package/dist/core/components/fields/media/MediaCard.d.ts +7 -0
  57. package/dist/core/components/fields/media/MediaCard.js +92 -0
  58. package/dist/core/components/fields/media/MediaEditor.d.ts +37 -0
  59. package/dist/core/components/fields/media/MediaEditor.js +235 -0
  60. package/dist/core/components/fields/media/MediaPicker.d.ts +15 -0
  61. package/dist/core/components/fields/media/MediaPicker.js +251 -0
  62. package/dist/core/components/fields/media/index.d.ts +3 -0
  63. package/dist/core/components/fields/media/index.js +19 -0
  64. package/dist/core/components/fields/object/ObjectEditor.js +1 -1
  65. package/dist/core/components/fields/page/PagePicker.js +1 -1
  66. package/dist/core/components/interaction/Combobox.js +1 -1
  67. package/dist/core/components/interaction/MultiSelectControls.js +2 -5
  68. package/dist/core/components/interaction/QuickEditor.js +1 -1
  69. package/dist/core/components/interaction/QuickPicker.js +1 -1
  70. package/dist/core/components/interaction/SideSheet.js +1 -1
  71. package/dist/core/components/interaction/centersheet/CenterSheet.js +7 -1
  72. package/dist/core/components/interaction/centersheet/CenterSheetContainer.js +3 -1
  73. package/dist/core/components/transitions/FadeIn.js +1 -1
  74. package/dist/core/components/visuals/Icon.d.ts +1 -1
  75. package/dist/core/components/visuals/Icon.js +3 -0
  76. package/dist/core/containers/AssetRepositoryContainer.d.ts +2 -0
  77. package/dist/core/containers/AssetRepositoryContainer.js +18 -0
  78. package/dist/core/containers/CollectionRepositoryContainer.d.ts +2 -0
  79. package/dist/core/containers/CollectionRepositoryContainer.js +18 -0
  80. package/dist/core/containers/PageRepositoryContainer.d.ts +2 -0
  81. package/dist/core/containers/PageRepositoryContainer.js +18 -0
  82. package/dist/core/containers/index.d.ts +3 -0
  83. package/dist/core/containers/index.js +19 -0
  84. package/dist/core/domain/Block.js +2 -1
  85. package/dist/core/domain/BlockConfiguration.d.ts +4 -1
  86. package/dist/core/domain/BlockConfiguration.js +59 -3
  87. package/dist/core/domain/Collection.d.ts +7 -25
  88. package/dist/core/domain/Collection.js +2 -16
  89. package/dist/core/domain/CollectionBrowser.d.ts +3 -2
  90. package/dist/core/domain/CollectionBrowser.js +3 -3
  91. package/dist/core/domain/CollectionFieldProxy.d.ts +12 -8
  92. package/dist/core/domain/CollectionFieldProxy.js +14 -8
  93. package/dist/core/domain/CollectionGroup.d.ts +0 -5
  94. package/dist/core/domain/CollectionGroup.js +0 -7
  95. package/dist/core/domain/CollectionSummary.d.ts +2 -2
  96. package/dist/core/domain/Collections.d.ts +3 -3
  97. package/dist/core/domain/Collections.js +4 -4
  98. package/dist/core/domain/ICollection.d.ts +71 -0
  99. package/dist/core/domain/ICollection.js +20 -0
  100. package/dist/core/domain/IPage.d.ts +14 -0
  101. package/dist/core/domain/Page.js +2 -2
  102. package/dist/core/domain/Pages.js +4 -6
  103. package/dist/core/domain/SectionBlock.js +2 -1
  104. package/dist/core/domain/Site.d.ts +4 -4
  105. package/dist/core/domain/Site.js +3 -3
  106. package/dist/core/domain/index.d.ts +1 -1
  107. package/dist/core/domain/index.js +1 -1
  108. package/dist/core/hooks/index.d.ts +4 -3
  109. package/dist/core/hooks/index.js +4 -3
  110. package/dist/core/hooks/useAssetRepository.d.ts +3 -0
  111. package/dist/core/hooks/useAssetRepository.js +11 -0
  112. package/dist/core/hooks/useCollection.d.ts +4 -4
  113. package/dist/core/hooks/useCollectionRepository.d.ts +3 -2
  114. package/dist/core/hooks/useCollectionRepository.js +4 -4
  115. package/dist/core/hooks/usePageRepository.d.ts +3 -2
  116. package/dist/core/hooks/usePageRepository.js +4 -4
  117. package/dist/core/hooks/useTempFields.d.ts +2 -3
  118. package/dist/core/index.d.ts +1 -0
  119. package/dist/core/index.js +1 -0
  120. package/dist/core/repository/AssetRepository.d.ts +10 -0
  121. package/dist/core/repository/AssetRepository.js +22 -0
  122. package/dist/core/repository/CollectionRepository.d.ts +21 -20
  123. package/dist/core/repository/CollectionRepository.js +23 -161
  124. package/dist/core/repository/CollectionSerializer.d.ts +4 -1
  125. package/dist/core/repository/CollectionSerializer.js +3 -3
  126. package/dist/core/repository/IAssetRepository.d.ts +25 -0
  127. package/dist/core/repository/ICollectionRepository.d.ts +62 -0
  128. package/dist/core/repository/ICollectionRepository.js +2 -0
  129. package/dist/core/repository/IPageRepository.d.ts +40 -0
  130. package/dist/core/repository/IPageRepository.js +2 -0
  131. package/dist/core/repository/PageRepository.d.ts +5 -8
  132. package/dist/core/repository/PageRepository.js +7 -280
  133. package/dist/core/repository/SerializeCollectionUpdate.d.ts +8 -0
  134. package/dist/core/repository/SerializeCollectionUpdate.js +168 -0
  135. package/dist/core/repository/SerializePageUpdate.d.ts +11 -0
  136. package/dist/core/repository/SerializePageUpdate.js +292 -0
  137. package/dist/core/repository/index.d.ts +4 -0
  138. package/dist/core/repository/index.js +4 -0
  139. package/dist/dashboard/screens/Dashboard.js +1 -1
  140. package/dist/devtools/screens/Devtools.js +1 -1
  141. package/dist/explore/components/CreatePageDialog.d.ts +2 -2
  142. package/dist/explore/screens/CollectionExplorer.js +1 -1
  143. package/dist/explore/screens/CollectionsExplorer.js +1 -1
  144. package/dist/explore/screens/PageExplorer.js +1 -1
  145. package/dist/explore/screens/SiteExplorer.js +1 -1
  146. package/dist/page/components/BlockEditor.js +1 -1
  147. package/dist/page/components/SettingsEditor.js +0 -7
  148. package/dist/page/components/config/BlockConfigButton.js +71 -14
  149. package/dist/page/screens/PageEditor.js +1 -1
  150. package/dist/styles/index.css +24 -20
  151. package/dist/styles/tailwind.js +1 -0
  152. package/dist/users/screens/UserExplorer.js +1 -1
  153. package/package.json +2 -2
  154. package/dist/core/domain/TranslateSchema.d.ts +0 -7
  155. /package/dist/core/{domain/TranslateSchema.js → repository/IAssetRepository.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  import { BrandConfig, EventBus, Language, RegionsConfig, Schema } from '@nascentdigital/funnel-core';
2
2
  import { Observable } from 'rxjs';
3
3
  import { AppState } from '../app';
4
- import { EditorApiClient } from '../client';
4
+ import { IPageRepository } from '../repository';
5
5
  import { PageOverview } from './PageOverview';
6
6
  import { Pages } from './Pages';
7
7
  export declare class Site {
@@ -10,7 +10,7 @@ export declare class Site {
10
10
  readonly brand: BrandConfig.WithId;
11
11
  readonly region: RegionsConfig.RegionConfig.WithId;
12
12
  readonly appState: AppState;
13
- readonly editorApi: EditorApiClient;
13
+ readonly repository: IPageRepository;
14
14
  private readonly _eventBus;
15
15
  private _state;
16
16
  private _overviews;
@@ -18,7 +18,7 @@ export declare class Site {
18
18
  private readonly _pagesToSync;
19
19
  private _syncPromise?;
20
20
  private readonly _subscription;
21
- constructor({ appState, editorApi, region }: Site.ConstructorArgs);
21
+ constructor({ appState, repository, region }: Site.ConstructorArgs);
22
22
  get events$(): Observable<Site.Event>;
23
23
  get state(): Site.State;
24
24
  private set state(value);
@@ -38,7 +38,7 @@ export declare namespace Site {
38
38
  type State = 'uninitialized' | 'initializing' | 'ready' | 'syncing' | 'error';
39
39
  type ConstructorArgs = {
40
40
  appState: AppState;
41
- editorApi: EditorApiClient;
41
+ repository: IPageRepository;
42
42
  region: string;
43
43
  };
44
44
  interface Event extends EventBus.Event<'Site', Event.Type> {
@@ -5,7 +5,7 @@ const funnel_core_1 = require("@nascentdigital/funnel-core");
5
5
  const Pages_1 = require("./Pages");
6
6
  // model
7
7
  class Site {
8
- constructor({ appState, editorApi, region }) {
8
+ constructor({ appState, repository, region }) {
9
9
  // initialize instance variables
10
10
  const site = funnel_core_1.Schema.Site.current();
11
11
  const brand = funnel_core_1.AppConfig.brand();
@@ -15,7 +15,7 @@ class Site {
15
15
  this.brand = Object.assign(Object.assign({}, brandConfig), { id: brand });
16
16
  this.region = Object.assign(Object.assign({}, brandConfig.regionalization.regions[region]), { id: region });
17
17
  this.appState = appState;
18
- this.editorApi = editorApi;
18
+ this.repository = repository;
19
19
  this._eventBus = new funnel_core_1.EventBus();
20
20
  this._state = 'uninitialized';
21
21
  this._overviews = [];
@@ -118,7 +118,7 @@ class Site {
118
118
  ? 'initializing'
119
119
  : 'syncing';
120
120
  // load overview
121
- this._overviews = await this.editorApi.getPagesOverview({ region: this.region.id, version: 'draft' });
121
+ this._overviews = await this.repository.getOverview({ region: this.region.id });
122
122
  // mark as ready
123
123
  this.state = 'ready';
124
124
  }
@@ -9,6 +9,7 @@ export * from './CollectionGroup';
9
9
  export * from './CollectionSummary';
10
10
  export * from './Collections';
11
11
  export * from './IAssetStore';
12
+ export * from './ICollection';
12
13
  export * from './ICollectionStore';
13
14
  export * from './IPage';
14
15
  export * from './IPageRefStore';
@@ -24,6 +25,5 @@ export * from './Pages';
24
25
  export * from './Section';
25
26
  export * from './SectionBlock';
26
27
  export * from './Site';
27
- export * from './TranslateSchema';
28
28
  export * from './UserBrowser';
29
29
  export * from './UserValidation';
@@ -25,6 +25,7 @@ __exportStar(require("./CollectionGroup"), exports);
25
25
  __exportStar(require("./CollectionSummary"), exports);
26
26
  __exportStar(require("./Collections"), exports);
27
27
  __exportStar(require("./IAssetStore"), exports);
28
+ __exportStar(require("./ICollection"), exports);
28
29
  __exportStar(require("./ICollectionStore"), exports);
29
30
  __exportStar(require("./IPage"), exports);
30
31
  __exportStar(require("./IPageRefStore"), exports);
@@ -40,6 +41,5 @@ __exportStar(require("./Pages"), exports);
40
41
  __exportStar(require("./Section"), exports);
41
42
  __exportStar(require("./SectionBlock"), exports);
42
43
  __exportStar(require("./Site"), exports);
43
- __exportStar(require("./TranslateSchema"), exports);
44
44
  __exportStar(require("./UserBrowser"), exports);
45
45
  __exportStar(require("./UserValidation"), exports);
@@ -1,3 +1,4 @@
1
+ export * from './useAssetRepository';
1
2
  export * from './useAssetStore';
2
3
  export * from './useBlock';
3
4
  export * from './useBlockConfiguration';
@@ -5,19 +6,19 @@ export * from './useChangeSet';
5
6
  export * from './useChangeSetBrowser';
6
7
  export * from './useCollection';
7
8
  export * from './useCollectionBrowser';
9
+ export * from './useCollectionData';
8
10
  export * from './useCollectionFieldProxy';
9
11
  export * from './useCollectionRepository';
10
- export * from './useCollections';
11
12
  export * from './useCollectionStore';
12
- export * from './useCollectionData';
13
+ export * from './useCollections';
13
14
  export * from './useField';
14
15
  export * from './useHotkeyScopeLock';
15
16
  export * from './usePage';
16
17
  export * from './usePageCollection';
17
18
  export * from './usePageRef';
19
+ export * from './usePageRefStore';
18
20
  export * from './usePageRepository';
19
21
  export * from './usePages';
20
- export * from './usePageRefStore';
21
22
  export * from './useSite';
22
23
  export * from './useTempFields';
23
24
  export * from './useUserBrowser';
@@ -14,6 +14,7 @@ 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("./useAssetRepository"), exports);
17
18
  __exportStar(require("./useAssetStore"), exports);
18
19
  __exportStar(require("./useBlock"), exports);
19
20
  __exportStar(require("./useBlockConfiguration"), exports);
@@ -21,19 +22,19 @@ __exportStar(require("./useChangeSet"), exports);
21
22
  __exportStar(require("./useChangeSetBrowser"), exports);
22
23
  __exportStar(require("./useCollection"), exports);
23
24
  __exportStar(require("./useCollectionBrowser"), exports);
25
+ __exportStar(require("./useCollectionData"), exports);
24
26
  __exportStar(require("./useCollectionFieldProxy"), exports);
25
27
  __exportStar(require("./useCollectionRepository"), exports);
26
- __exportStar(require("./useCollections"), exports);
27
28
  __exportStar(require("./useCollectionStore"), exports);
28
- __exportStar(require("./useCollectionData"), exports);
29
+ __exportStar(require("./useCollections"), exports);
29
30
  __exportStar(require("./useField"), exports);
30
31
  __exportStar(require("./useHotkeyScopeLock"), exports);
31
32
  __exportStar(require("./usePage"), exports);
32
33
  __exportStar(require("./usePageCollection"), exports);
33
34
  __exportStar(require("./usePageRef"), exports);
35
+ __exportStar(require("./usePageRefStore"), exports);
34
36
  __exportStar(require("./usePageRepository"), exports);
35
37
  __exportStar(require("./usePages"), exports);
36
- __exportStar(require("./usePageRefStore"), exports);
37
38
  __exportStar(require("./useSite"), exports);
38
39
  __exportStar(require("./useTempFields"), exports);
39
40
  __exportStar(require("./useUserBrowser"), exports);
@@ -0,0 +1,3 @@
1
+ import { IAssetRepository } from '../repository';
2
+ export declare function useAssetRepository(): IAssetRepository;
3
+ export declare const AssetRepositoryContext: import("react").Context<IAssetRepository>;
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssetRepositoryContext = void 0;
4
+ exports.useAssetRepository = useAssetRepository;
5
+ const react_1 = require("react");
6
+ // hook
7
+ function useAssetRepository() {
8
+ return (0, react_1.useContext)(exports.AssetRepositoryContext);
9
+ }
10
+ // context
11
+ exports.AssetRepositoryContext = (0, react_1.createContext)({});
@@ -1,9 +1,9 @@
1
- import { Collection } from '../domain';
2
- export declare function usePossibleCollection(): Collection | undefined;
3
- export declare function useCollection(): Collection;
1
+ import { ICollection } from '../domain';
2
+ export declare function usePossibleCollection(): ICollection | undefined;
3
+ export declare function useCollection(): ICollection;
4
4
  export declare const CollectionContext: import("react").Context<CollectionContext.Data>;
5
5
  export declare namespace CollectionContext {
6
6
  type Data = {
7
- collection?: Collection;
7
+ collection?: ICollection;
8
8
  };
9
9
  }
@@ -1,2 +1,3 @@
1
- import { CollectionRepository } from '../repository';
2
- export declare function useCollectionRepository(): CollectionRepository;
1
+ import { ICollectionRepository } from '../repository';
2
+ export declare function useCollectionRepository(): ICollectionRepository;
3
+ export declare const CollectionRepositoryContext: import("react").Context<ICollectionRepository>;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CollectionRepositoryContext = void 0;
3
4
  exports.useCollectionRepository = useCollectionRepository;
4
5
  const react_1 = require("react");
5
- const client_1 = require("../client");
6
- const repository_1 = require("../repository");
7
6
  // hook
8
7
  function useCollectionRepository() {
9
- const editorApi = (0, client_1.useEditorApi)();
10
- return (0, react_1.useMemo)(() => new repository_1.CollectionRepository(editorApi), [editorApi]);
8
+ return (0, react_1.useContext)(exports.CollectionRepositoryContext);
11
9
  }
10
+ // context
11
+ exports.CollectionRepositoryContext = (0, react_1.createContext)({});
@@ -1,2 +1,3 @@
1
- import { PageRepository } from '../repository';
2
- export declare function usePageRepository(): PageRepository;
1
+ import { IPageRepository } from '../repository';
2
+ export declare function usePageRepository(): IPageRepository;
3
+ export declare const PageRepositoryContext: import("react").Context<IPageRepository>;
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PageRepositoryContext = void 0;
3
4
  exports.usePageRepository = usePageRepository;
4
5
  const react_1 = require("react");
5
- const client_1 = require("../client");
6
- const repository_1 = require("../repository");
7
6
  // hook
8
7
  function usePageRepository() {
9
- const editorApi = (0, client_1.useEditorApi)();
10
- return (0, react_1.useMemo)(() => new repository_1.PageRepository(editorApi), [editorApi]);
8
+ return (0, react_1.useContext)(exports.PageRepositoryContext);
11
9
  }
10
+ // context
11
+ exports.PageRepositoryContext = (0, react_1.createContext)({});
@@ -1,6 +1,5 @@
1
- import { Schema } from '@nascentdigital/funnel-core';
2
- import { TranslateSchema } from '../domain';
3
- export declare function useTempFields<TFields extends Record<string, Schema.Optional.Maybe<Schema.Field.Type>>>(schemasRaw: TFields, dependencies?: any[]): TranslateSchema.Fields<TFields>;
1
+ import { Schema, SchemaToFields } from '@nascentdigital/funnel-core';
2
+ export declare function useTempFields<TFields extends Record<string, Schema.Optional.Maybe<Schema.Field.Type>>>(schemasRaw: TFields, dependencies?: any[]): SchemaToFields<TFields>;
4
3
  export declare namespace useTempFields {
5
4
  type Args = {
6
5
  schemas: Record<string, Schema.Field.Type>;
@@ -2,6 +2,7 @@ export * from './app';
2
2
  export * from './auth';
3
3
  export * from './client';
4
4
  export * from './components';
5
+ export * from './containers';
5
6
  export * from './domain';
6
7
  export * from './hooks';
7
8
  export * from './repository';
@@ -18,6 +18,7 @@ __exportStar(require("./app"), exports);
18
18
  __exportStar(require("./auth"), exports);
19
19
  __exportStar(require("./client"), exports);
20
20
  __exportStar(require("./components"), exports);
21
+ __exportStar(require("./containers"), exports);
21
22
  __exportStar(require("./domain"), exports);
22
23
  __exportStar(require("./hooks"), exports);
23
24
  __exportStar(require("./repository"), exports);
@@ -0,0 +1,10 @@
1
+ import { EditorApiClient } from '../client';
2
+ import { IAssetRepository } from './IAssetRepository';
3
+ export declare class AssetRepository implements IAssetRepository {
4
+ editorApi: EditorApiClient;
5
+ constructor(editorApi: EditorApiClient);
6
+ search(args: IAssetRepository.Search.Args): Promise<IAssetRepository.Search.Result>;
7
+ get(args: IAssetRepository.Get.Args): Promise<IAssetRepository.Get.Result>;
8
+ update(args: IAssetRepository.Update.Args): Promise<IAssetRepository.Update.Result>;
9
+ uploadFile(args: IAssetRepository.UploadFile.Args): Promise<IAssetRepository.UploadFile.Result>;
10
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AssetRepository = void 0;
4
+ // class
5
+ class AssetRepository {
6
+ constructor(editorApi) {
7
+ this.editorApi = editorApi;
8
+ }
9
+ async search(args) {
10
+ return this.editorApi.getAssets(args);
11
+ }
12
+ async get(args) {
13
+ return this.editorApi.getAsset(args);
14
+ }
15
+ async update(args) {
16
+ return this.editorApi.updateAsset(args);
17
+ }
18
+ async uploadFile(args) {
19
+ return this.editorApi.uploadFile(args);
20
+ }
21
+ }
22
+ exports.AssetRepository = AssetRepository;
@@ -1,29 +1,30 @@
1
- import { CollectionClient } from '@nascentdigital/funnel-cms';
2
- import { EventBus, FieldModel } from '@nascentdigital/funnel-core';
1
+ import { Schema } from '@nascentdigital/funnel-core';
3
2
  import { UpdateCollectionCommand } from '../../api/collections';
4
3
  import { EditorApiClient } from '../client';
5
4
  import { Collection, CollectionFieldProxy } from '../domain';
6
5
  import { CollectionTarget } from './CollectionTarget';
7
- export declare class CollectionRepository {
6
+ import { ICollectionRepository } from './ICollectionRepository';
7
+ export declare class CollectionRepository implements ICollectionRepository {
8
8
  readonly editorApi: EditorApiClient;
9
9
  constructor(editorApi: EditorApiClient);
10
- load(args: CollectionTarget.WithEventBus): Promise<import("../domain").CollectionGroup | undefined>;
11
- create({ eventBus, ...args }: CollectionRepository.CreateNewArgs): Promise<import("../domain").CollectionGroup>;
12
- createLanguage(args: CollectionRepository.CreateLanguageArgs): Promise<import("../domain").CollectionGroup>;
10
+ load(args: CollectionTarget.WithEventBus): Promise<{
11
+ collection: Collection | undefined;
12
+ group: import("../domain").CollectionGroup;
13
+ } | undefined>;
14
+ createRaw(args: ICollectionRepository.CreateRaw.Args): Promise<Schema.Collection.Data.AsGroup>;
15
+ create({ eventBus, ...args }: ICollectionRepository.Create.Args): Promise<{
16
+ collection: Collection | undefined;
17
+ group: import("../domain").CollectionGroup;
18
+ }>;
19
+ createLanguage(args: ICollectionRepository.CreateLang.Args): Promise<{
20
+ collection: Collection | undefined;
21
+ group: import("../domain").CollectionGroup;
22
+ }>;
13
23
  save(collection: Collection): Promise<Collection>;
14
24
  unpublish(collection: Collection): Promise<void>;
15
- serializeCollectionUpdate(collection: Collection | CollectionFieldProxy, savables: CollectionRepository.Savable[]): UpdateCollectionCommand.Data;
16
- private serializeFieldsUpdate;
17
- private serializeObjectFieldUpdate;
18
- private serializeFieldUpdate;
19
- private serializeListUpdate;
20
- }
21
- export declare namespace CollectionRepository {
22
- type CreateNewArgs = Omit<CollectionClient.Create.NewArgs, 'brand' | 'type' | 'version'> & Pick<Collection.ConstructorArgs, 'template'> & {
23
- eventBus?: EventBus;
24
- };
25
- type CreateLanguageArgs = Omit<CollectionClient.Create.NewLanguageArgs, 'brand'> & Pick<Collection.ConstructorArgs, 'template'> & {
26
- eventBus: EventBus;
27
- };
28
- type Savable = FieldModel;
25
+ getOverview(args: ICollectionRepository.GetOverview.Args): Promise<ICollectionRepository.GetOverview.Result>;
26
+ getItems(args: ICollectionRepository.GetItems.Args): Promise<ICollectionRepository.GetItems.Result>;
27
+ get(args: ICollectionRepository.Get.Args): Promise<ICollectionRepository.Get.Result>;
28
+ update(args: ICollectionRepository.Update.Args): Promise<ICollectionRepository.Update.Result>;
29
+ serializeUpdate(collection: Collection | CollectionFieldProxy, savables: ICollectionRepository.Savable[]): UpdateCollectionCommand.Data;
29
30
  }
@@ -14,6 +14,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
14
14
  exports.CollectionRepository = void 0;
15
15
  const funnel_core_1 = require("@nascentdigital/funnel-core");
16
16
  const CollectionSerializer_1 = require("./CollectionSerializer");
17
+ const SerializeCollectionUpdate_1 = require("./SerializeCollectionUpdate");
17
18
  // class
18
19
  class CollectionRepository {
19
20
  constructor(editorApi) {
@@ -29,11 +30,15 @@ class CollectionRepository {
29
30
  // deserialize collection (if any)
30
31
  return CollectionSerializer_1.CollectionSerializer.deserializeCollectionGroup(Object.assign(Object.assign({}, args), data));
31
32
  }
32
- async create(_a) {
33
- var { eventBus } = _a, args = __rest(_a, ["eventBus"]);
33
+ async createRaw(args) {
34
34
  // resolve collection (get or create)
35
35
  const { template } = args, query = __rest(args, ["template"]);
36
- const data = await this.editorApi.createCollection(Object.assign(Object.assign({}, query), { type: template.type, version: template.version }));
36
+ return this.editorApi.createCollection(Object.assign(Object.assign({}, query), { type: template.type, version: template.version }));
37
+ }
38
+ async create(_a) {
39
+ var { eventBus } = _a, args = __rest(_a, ["eventBus"]);
40
+ // create
41
+ const data = await this.createRaw(args);
37
42
  // return collection
38
43
  return CollectionSerializer_1.CollectionSerializer.deserializeCollectionGroup(Object.assign(Object.assign({ eventBus: eventBus !== null && eventBus !== void 0 ? eventBus : new funnel_core_1.EventBus() }, args), data));
39
44
  }
@@ -46,7 +51,7 @@ class CollectionRepository {
46
51
  async save(collection) {
47
52
  // get collection update
48
53
  const savables = [];
49
- const update = this.serializeCollectionUpdate(collection, savables);
54
+ const update = this.serializeUpdate(collection, savables);
50
55
  console.debug('[CollectionRepository/save] created update', update);
51
56
  // start all updates
52
57
  collection.onSaveStart();
@@ -77,7 +82,19 @@ class CollectionRepository {
77
82
  // unpublish collection
78
83
  await this.editorApi.unpublishCollection(collection.id);
79
84
  }
80
- serializeCollectionUpdate(collection, savables) {
85
+ getOverview(args) {
86
+ return this.editorApi.getCollectionsOverview(args);
87
+ }
88
+ getItems(args) {
89
+ return this.editorApi.getCollectionItems(args);
90
+ }
91
+ get(args) {
92
+ return this.editorApi.getCollection(args);
93
+ }
94
+ async update(args) {
95
+ return this.editorApi.updateCollection(args);
96
+ }
97
+ serializeUpdate(collection, savables) {
81
98
  // add name updates
82
99
  const { id, nameField, name, initialTags, tags, fields, initialErrors, valid } = collection;
83
100
  const updates = [];
@@ -107,7 +124,7 @@ class CollectionRepository {
107
124
  });
108
125
  }
109
126
  // add fields
110
- this.serializeFieldsUpdate(updates, fields, ['fields'], savables);
127
+ SerializeCollectionUpdate_1.SerializeCollectionUpdate.serializeFieldsUpdate(updates, fields, ['fields'], savables);
111
128
  // return update data
112
129
  return {
113
130
  id,
@@ -115,160 +132,5 @@ class CollectionRepository {
115
132
  updates
116
133
  };
117
134
  }
118
- serializeFieldsUpdate(updates, fields, parentPath, savables) {
119
- // handle fields in block
120
- fields.forEach(field => {
121
- if (field instanceof funnel_core_1.Field) {
122
- this.serializeFieldUpdate(updates, field, parentPath, savables);
123
- }
124
- else if (field instanceof funnel_core_1.ObjectField) {
125
- this.serializeObjectFieldUpdate(updates, field, parentPath, savables);
126
- }
127
- else {
128
- this.serializeListUpdate(updates, field, parentPath, savables);
129
- }
130
- });
131
- // return changes (for chaining)
132
- return updates;
133
- }
134
- serializeObjectFieldUpdate(updates, field, parentPath, savables) {
135
- var _a;
136
- // create object if it's new
137
- if (field.isNew) {
138
- updates.push({
139
- type: 'object.insert',
140
- path: [...parentPath, field.id],
141
- value: (_a = field.value) !== null && _a !== void 0 ? _a : null
142
- });
143
- // track save
144
- savables.push(field);
145
- }
146
- // or process subfields
147
- else if (field.exists) {
148
- // save fields
149
- this.serializeFieldsUpdate(updates, field.fields, [...parentPath, field.id], savables);
150
- // track save
151
- savables.push(field);
152
- }
153
- // or process opted out field
154
- else if (field.optedOut) {
155
- updates.push({
156
- type: 'value',
157
- path: [...parentPath, field.id],
158
- value: null
159
- });
160
- // track save
161
- savables.push(field);
162
- }
163
- }
164
- serializeFieldUpdate(updates, field, parentPath, savables) {
165
- var _a;
166
- // track change if modified (ignore if field is sandboxed)
167
- if (field.modified && !field.sandboxed) {
168
- // set field
169
- updates.push({
170
- type: 'value',
171
- path: [...parentPath, field.id],
172
- value: ((_a = field.value) !== null && _a !== void 0 ? _a : null)
173
- });
174
- // track save
175
- savables.push(field);
176
- }
177
- }
178
- serializeListUpdate(updates, list, parentPath, savables) {
179
- var _a, _b;
180
- // create list if it's new
181
- if (list.isNew) {
182
- // add new list
183
- updates.push({
184
- type: 'value',
185
- path: [...parentPath, list.id],
186
- value: funnel_core_1.Schema.Field.Data.newValue('list')
187
- });
188
- // track save
189
- savables.push(list);
190
- }
191
- // or drop list on opt-out
192
- else if (list.optedOut) {
193
- // drop list
194
- updates.push({
195
- type: 'value',
196
- path: [...parentPath, list.id],
197
- value: null
198
- });
199
- // track save
200
- savables.push(list);
201
- }
202
- // or skip if not modified
203
- else if (list.modified) {
204
- // track insert/update
205
- const path = [...parentPath, list.id];
206
- const { value: currentValue, items: fields, initialValue } = list;
207
- const currentItems = (_a = currentValue === null || currentValue === void 0 ? void 0 : currentValue.value) !== null && _a !== void 0 ? _a : [];
208
- const initialItems = (_b = initialValue === null || initialValue === void 0 ? void 0 : initialValue.value) !== null && _b !== void 0 ? _b : [];
209
- const fieldIds = [];
210
- currentItems.forEach((item, index) => {
211
- // track id
212
- const { id, field } = fields[index];
213
- fieldIds.push(item.id);
214
- // track insert
215
- const originalIndex = initialItems.findIndex(initialItem => initialItem.id === id);
216
- if (originalIndex < 0) {
217
- updates.push({
218
- type: 'array.insert',
219
- path,
220
- index,
221
- id,
222
- value: item
223
- });
224
- }
225
- // track update
226
- else if (field.modified) {
227
- // object field updates should be recursed and indexed
228
- if (field instanceof funnel_core_1.ObjectField) {
229
- this.serializeFieldsUpdate(updates, field.fields, [...path, id], savables);
230
- }
231
- // basic field updates can be done inline
232
- else {
233
- updates.push({
234
- type: 'value',
235
- path: [...path, id],
236
- value: item
237
- });
238
- }
239
- }
240
- });
241
- // track delete/reorder
242
- let reordered = false;
243
- let deleted = 0;
244
- initialItems.forEach(({ id }, index) => {
245
- // add to deleted list if the original doesn't exist anymore
246
- const fieldIndex = fieldIds.findIndex(fieldId => fieldId === id) + deleted;
247
- if (fieldIndex < 0) {
248
- updates.push({
249
- type: 'array.delete',
250
- path,
251
- id
252
- });
253
- // track deletion
254
- ++deleted;
255
- }
256
- // or mark reorder if index isn't the same
257
- else if (fieldIndex !== index) {
258
- reordered = true;
259
- }
260
- });
261
- // track reorder
262
- if (reordered) {
263
- updates.push({
264
- type: 'array.reorder',
265
- path,
266
- ids: fieldIds
267
- });
268
- }
269
- // track save
270
- savables.push(list);
271
- }
272
- }
273
135
  }
274
136
  exports.CollectionRepository = CollectionRepository;
@@ -5,7 +5,10 @@ export declare namespace CollectionSerializer {
5
5
  template: Schema.Collection;
6
6
  eventBus: EventBus;
7
7
  };
8
- function deserializeCollectionGroup({ template, eventBus, group: groupData, collection: collectionData }: DeserializeCollectionGroupArgs): CollectionGroup;
8
+ function deserializeCollectionGroup({ template, eventBus, group: groupData, collection: collectionData }: DeserializeCollectionGroupArgs): {
9
+ collection: Collection | undefined;
10
+ group: CollectionGroup;
11
+ };
9
12
  type DeserializeCollectionArgs = {
10
13
  flattenedCollection: Schema.Collection.FlattenedData;
11
14
  template: Schema.Collection;
@@ -27,14 +27,14 @@ var CollectionSerializer;
27
27
  });
28
28
  // deserialize summary
29
29
  const { groupId, brand, name, instances } = groupData;
30
- return new domain_1.CollectionGroup({
30
+ const group = new domain_1.CollectionGroup({
31
31
  template,
32
32
  groupId,
33
33
  brand,
34
34
  name,
35
- collections: instances,
36
- collection
35
+ collections: instances
37
36
  });
37
+ return { collection, group };
38
38
  }
39
39
  CollectionSerializer.deserializeCollectionGroup = deserializeCollectionGroup;
40
40
  function deserializeCollection({ eventBus, template, flattenedCollection }) {
@@ -0,0 +1,25 @@
1
+ import { AssetClient, AssetUploadClient } from '@nascentdigital/funnel-cms';
2
+ export interface IAssetRepository {
3
+ search(args: IAssetRepository.Search.Args): Promise<IAssetRepository.Search.Result>;
4
+ get(args: IAssetRepository.Get.Args): Promise<IAssetRepository.Get.Result>;
5
+ update(args: IAssetRepository.Update.Args): Promise<IAssetRepository.Update.Result>;
6
+ uploadFile(args: IAssetRepository.UploadFile.Args): Promise<IAssetRepository.UploadFile.Result>;
7
+ }
8
+ export declare namespace IAssetRepository {
9
+ namespace Search {
10
+ type Args = AssetClient.GetAssets.Args;
11
+ type Result = AssetClient.GetAssets.Result;
12
+ }
13
+ namespace Get {
14
+ type Args = AssetClient.GetAsset.Args;
15
+ type Result = AssetClient.GetAsset.Result;
16
+ }
17
+ namespace Update {
18
+ type Args = AssetClient.UpdateAsset.Args;
19
+ type Result = AssetClient.UpdateAsset.Result;
20
+ }
21
+ namespace UploadFile {
22
+ type Args = Omit<AssetUploadClient.OnUpload.Args, 'api'>;
23
+ type Result = AssetUploadClient.OnUpload.Result;
24
+ }
25
+ }