@nascentdigital/funnel-editor 4.6.1 → 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.
- package/dist/EditorApp.js +1 -1
- package/dist/EditorRoutes.js +7 -5
- package/dist/changesets/screens/ChangeSetViewer.js +1 -1
- package/dist/changesets/screens/ChangeSetsExplorer.js +1 -2
- package/dist/collection/hooks/CollectionController.d.ts +5 -16
- package/dist/collection/hooks/CollectionController.js +18 -37
- package/dist/collection/hooks/ICollectionController.d.ts +24 -0
- package/dist/collection/hooks/ICollectionController.js +20 -0
- package/dist/collection/hooks/index.d.ts +1 -0
- package/dist/collection/hooks/index.js +1 -0
- package/dist/collection/hooks/useCollectionController.d.ts +3 -3
- package/dist/collection/screens/CollectionEditor.js +2 -2
- package/dist/components.d.ts +20 -0
- package/dist/components.js +41 -0
- package/dist/core/components/feedback/dialog/MinimalDialogLayout.js +1 -1
- package/dist/core/components/fields/BooleanField.d.ts +2 -1
- package/dist/core/components/fields/BooleanField.js +2 -2
- package/dist/core/components/fields/DateField.d.ts +2 -1
- package/dist/core/components/fields/DateField.js +2 -2
- package/dist/core/components/fields/DynamicPagesEditor.d.ts +2 -1
- package/dist/core/components/fields/DynamicPagesEditor.js +1 -1
- package/dist/core/components/fields/EnumField.d.ts +2 -1
- package/dist/core/components/fields/EnumField.js +2 -2
- package/dist/core/components/fields/FieldCard.d.ts +1 -0
- package/dist/core/components/fields/FieldCard.js +8 -1
- package/dist/core/components/fields/FieldEditor.d.ts +2 -1
- package/dist/core/components/fields/FieldEditor.js +11 -11
- package/dist/core/components/fields/FieldLayout.d.ts +2 -1
- package/dist/core/components/fields/FieldLayout.js +3 -3
- package/dist/core/components/fields/ListEditor.d.ts +2 -1
- package/dist/core/components/fields/ListEditor.js +5 -6
- package/dist/core/components/fields/OptInField.d.ts +2 -1
- package/dist/core/components/fields/OptInField.js +2 -2
- package/dist/core/components/fields/RichTextEditor.js +1 -1
- package/dist/core/components/fields/RichTextField.d.ts +2 -1
- package/dist/core/components/fields/RichTextField.js +3 -5
- package/dist/core/components/fields/TextField.d.ts +2 -0
- package/dist/core/components/fields/TextField.js +2 -2
- package/dist/core/components/fields/TimestampField.d.ts +2 -1
- package/dist/core/components/fields/TimestampField.js +3 -3
- package/dist/core/components/fields/asset/AssetEditor.js +12 -44
- package/dist/core/components/fields/asset/AssetPicker.js +6 -6
- package/dist/core/components/fields/asset/AssetUploader.js +23 -31
- package/dist/core/components/fields/asset/preview/VideoPreview.js +16 -11
- package/dist/core/components/fields/asset/useAssetFields.d.ts +2 -17
- package/dist/core/components/fields/asset/useAssetFields.js +0 -21
- package/dist/core/components/fields/collection/CollectionEditor.js +1 -1
- package/dist/core/components/fields/collection/CollectionPicker.d.ts +2 -2
- package/dist/core/components/fields/collection/CollectionPicker.js +3 -4
- package/dist/core/components/fields/dynamicPages/PagePriorityDialog.js +1 -1
- package/dist/core/components/fields/embed/EmbeddedVideoEditor.js +34 -27
- package/dist/core/components/fields/factories/FieldValueFactory.js +11 -4
- package/dist/core/components/fields/factories/MediaFactory.d.ts +13 -0
- package/dist/core/components/fields/factories/MediaFactory.js +256 -0
- package/dist/core/components/fields/list/CreateFieldButton.js +1 -1
- package/dist/core/components/fields/media/MediaCard.d.ts +7 -0
- package/dist/core/components/fields/media/MediaCard.js +92 -0
- package/dist/core/components/fields/media/MediaEditor.d.ts +37 -0
- package/dist/core/components/fields/media/MediaEditor.js +235 -0
- package/dist/core/components/fields/media/MediaPicker.d.ts +15 -0
- package/dist/core/components/fields/media/MediaPicker.js +251 -0
- package/dist/core/components/fields/media/index.d.ts +3 -0
- package/dist/core/components/fields/media/index.js +19 -0
- package/dist/core/components/fields/object/ObjectEditor.js +1 -1
- package/dist/core/components/fields/page/PagePicker.d.ts +2 -2
- package/dist/core/components/fields/page/PagePicker.js +1 -1
- package/dist/core/components/interaction/Combobox.js +1 -1
- package/dist/core/components/interaction/DateTimePicker.d.ts +0 -1
- package/dist/core/components/interaction/DateTimePicker.js +0 -2
- package/dist/core/components/interaction/MultiSelectControls.js +2 -5
- package/dist/core/components/interaction/Popup.js +1 -0
- package/dist/core/components/interaction/QuickEditor.js +1 -1
- package/dist/core/components/interaction/QuickPicker.js +1 -1
- package/dist/core/components/interaction/SideSheet.js +1 -1
- package/dist/core/components/interaction/centersheet/CenterSheet.js +7 -1
- package/dist/core/components/interaction/centersheet/CenterSheetContainer.js +3 -1
- package/dist/core/components/transitions/FadeIn.js +2 -14
- package/dist/core/components/visuals/Icon.d.ts +1 -1
- package/dist/core/components/visuals/Icon.js +3 -0
- package/dist/core/containers/AssetRepositoryContainer.d.ts +2 -0
- package/dist/core/containers/AssetRepositoryContainer.js +18 -0
- package/dist/core/containers/CollectionRepositoryContainer.d.ts +2 -0
- package/dist/core/containers/CollectionRepositoryContainer.js +18 -0
- package/dist/core/containers/PageRepositoryContainer.d.ts +2 -0
- package/dist/core/containers/PageRepositoryContainer.js +18 -0
- package/dist/core/containers/index.d.ts +3 -0
- package/dist/core/containers/index.js +19 -0
- package/dist/core/domain/Block.d.ts +1 -0
- package/dist/core/domain/Block.js +8 -5
- package/dist/core/domain/BlockConfiguration.d.ts +4 -1
- package/dist/core/domain/BlockConfiguration.js +64 -3
- package/dist/core/domain/Collection.d.ts +10 -28
- package/dist/core/domain/Collection.js +2 -16
- package/dist/core/domain/CollectionBrowser.d.ts +3 -2
- package/dist/core/domain/CollectionBrowser.js +3 -3
- package/dist/core/domain/CollectionFieldProxy.d.ts +12 -8
- package/dist/core/domain/CollectionFieldProxy.js +14 -8
- package/dist/core/domain/CollectionGroup.d.ts +0 -5
- package/dist/core/domain/CollectionGroup.js +0 -7
- package/dist/core/domain/CollectionSummary.d.ts +2 -2
- package/dist/core/domain/Collections.d.ts +3 -3
- package/dist/core/domain/Collections.js +4 -4
- package/dist/core/domain/ICollection.d.ts +71 -0
- package/dist/core/domain/ICollection.js +20 -0
- package/dist/core/domain/IPage.d.ts +72 -0
- package/dist/core/domain/IPage.js +20 -0
- package/dist/core/domain/IPageRefStore.d.ts +3 -3
- package/dist/core/domain/ItemBase.d.ts +6 -6
- package/dist/core/domain/ItemBase.js +5 -5
- package/dist/core/domain/Page.d.ts +9 -22
- package/dist/core/domain/Page.js +3 -18
- package/dist/core/domain/PageOverview.d.ts +2 -2
- package/dist/core/domain/PageRefStoreProxy.d.ts +4 -4
- package/dist/core/domain/PageSettings.d.ts +3 -3
- package/dist/core/domain/PageSummary.d.ts +2 -2
- package/dist/core/domain/Pages.js +4 -6
- package/dist/core/domain/SectionBlock.js +2 -1
- package/dist/core/domain/Site.d.ts +4 -4
- package/dist/core/domain/Site.js +3 -3
- package/dist/core/domain/index.d.ts +2 -1
- package/dist/core/domain/index.js +2 -1
- package/dist/core/hooks/index.d.ts +4 -3
- package/dist/core/hooks/index.js +4 -3
- package/dist/core/hooks/useAssetRepository.d.ts +3 -0
- package/dist/core/hooks/useAssetRepository.js +11 -0
- package/dist/core/hooks/useCollection.d.ts +4 -4
- package/dist/core/hooks/useCollectionRepository.d.ts +3 -2
- package/dist/core/hooks/useCollectionRepository.js +4 -4
- package/dist/core/hooks/usePage.d.ts +4 -4
- package/dist/core/hooks/usePageRef.d.ts +1 -1
- package/dist/core/hooks/usePageRepository.d.ts +3 -2
- package/dist/core/hooks/usePageRepository.js +4 -4
- package/dist/core/hooks/useTempFields.d.ts +2 -3
- package/dist/core/index.d.ts +1 -0
- package/dist/core/index.js +1 -0
- package/dist/core/repository/AssetRepository.d.ts +10 -0
- package/dist/core/repository/AssetRepository.js +22 -0
- package/dist/core/repository/CollectionRepository.d.ts +21 -20
- package/dist/core/repository/CollectionRepository.js +23 -161
- package/dist/core/repository/CollectionSerializer.d.ts +4 -1
- package/dist/core/repository/CollectionSerializer.js +3 -3
- package/dist/core/repository/IAssetRepository.d.ts +25 -0
- package/dist/core/repository/ICollectionRepository.d.ts +62 -0
- package/dist/core/repository/ICollectionRepository.js +2 -0
- package/dist/core/repository/IPageRepository.d.ts +40 -0
- package/dist/core/repository/IPageRepository.js +2 -0
- package/dist/core/repository/PageRepository.d.ts +6 -9
- package/dist/core/repository/PageRepository.js +7 -280
- package/dist/core/repository/PageSerializer.d.ts +34 -1
- package/dist/core/repository/PageSerializer.js +4 -0
- package/dist/core/repository/SerializeCollectionUpdate.d.ts +8 -0
- package/dist/core/repository/SerializeCollectionUpdate.js +168 -0
- package/dist/core/repository/SerializePageUpdate.d.ts +11 -0
- package/dist/core/repository/SerializePageUpdate.js +292 -0
- package/dist/core/repository/index.d.ts +4 -0
- package/dist/core/repository/index.js +4 -0
- package/dist/dashboard/screens/Dashboard.js +1 -1
- package/dist/devtools/screens/Devtools.js +1 -1
- package/dist/explore/components/CreatePageDialog.d.ts +2 -2
- package/dist/explore/screens/CollectionExplorer.js +1 -1
- package/dist/explore/screens/CollectionsExplorer.js +1 -1
- package/dist/explore/screens/PageExplorer.js +1 -1
- package/dist/explore/screens/SiteExplorer.js +1 -1
- package/dist/page/components/BlockEditor.js +1 -1
- package/dist/page/components/PageHeader.d.ts +2 -2
- package/dist/page/components/PageNotCreated.d.ts +2 -2
- package/dist/page/components/PageNotFound.d.ts +2 -2
- package/dist/page/components/SettingsEditor.js +0 -7
- package/dist/page/components/config/BlockConfigButton.d.ts +2 -1
- package/dist/page/components/config/BlockConfigButton.js +84 -24
- package/dist/page/components/config/BlockPreview.d.ts +8 -0
- package/dist/page/components/config/BlockPreview.js +53 -0
- package/dist/page/components/config/index.d.ts +1 -1
- package/dist/page/components/config/index.js +1 -1
- package/dist/page/components/config/preview/ColumnLayout.d.ts +10 -0
- package/dist/page/components/config/preview/ColumnLayout.js +15 -0
- package/dist/page/components/config/preview/ItemLayout.d.ts +12 -0
- package/dist/page/components/config/preview/ItemLayout.js +45 -0
- package/dist/page/components/config/preview/ListPanel.d.ts +12 -0
- package/dist/page/components/config/preview/ListPanel.js +14 -0
- package/dist/page/components/config/preview/MessagePanel.d.ts +12 -0
- package/dist/page/components/config/preview/MessagePanel.js +21 -0
- package/dist/page/components/config/preview/Panel.d.ts +15 -0
- package/dist/page/components/config/preview/Panel.js +74 -0
- package/dist/page/components/config/preview/RowLayout.d.ts +10 -0
- package/dist/page/components/config/preview/RowLayout.js +26 -0
- package/dist/page/components/config/preview/StackLayout.d.ts +10 -0
- package/dist/page/components/config/preview/StackLayout.js +15 -0
- package/dist/page/components/config/preview/VisualPanel.d.ts +12 -0
- package/dist/page/components/config/preview/VisualPanel.js +27 -0
- package/dist/page/components/config/preview/index.d.ts +3 -0
- package/dist/page/components/config/preview/index.js +19 -0
- package/dist/page/components/panels/BlockConfigPanel.js +4 -4
- package/dist/page/hooks/IPageController.d.ts +42 -0
- package/dist/page/hooks/IPageController.js +32 -0
- package/dist/page/hooks/PageController.d.ts +11 -36
- package/dist/page/hooks/PageController.js +7 -33
- package/dist/page/hooks/index.d.ts +1 -0
- package/dist/page/hooks/index.js +1 -0
- package/dist/page/hooks/usePageController.d.ts +3 -3
- package/dist/page/screens/PageEditor.js +1 -1
- package/dist/styles/index.css +809 -60
- package/dist/styles/tailwind.js +1 -0
- package/dist/users/screens/UserExplorer.js +1 -1
- package/package.json +3 -2
- package/dist/core/domain/TranslateSchema.d.ts +0 -7
- package/dist/page/components/config/LegacyBlockPreview.d.ts +0 -8
- package/dist/page/components/config/LegacyBlockPreview.js +0 -452
- /package/dist/core/{domain/TranslateSchema.js → repository/IAssetRepository.js} +0 -0
|
@@ -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
|
-
|
|
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
|
-
|
|
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>;
|
package/dist/core/index.d.ts
CHANGED
package/dist/core/index.js
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
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<
|
|
11
|
-
|
|
12
|
-
|
|
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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
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
|
-
|
|
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):
|
|
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
|
-
|
|
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
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { CollectionClient } from '@nascentdigital/funnel-cms';
|
|
2
|
+
import { EventBus, FieldModel, Schema } from '@nascentdigital/funnel-core';
|
|
3
|
+
import { CollectionFieldProxy, ICollection } from '../domain';
|
|
4
|
+
export interface ICollectionRepository {
|
|
5
|
+
create(args: ICollectionRepository.Create.Args): Promise<ICollectionRepository.Create.Result>;
|
|
6
|
+
createRaw(args: ICollectionRepository.CreateRaw.Args): Promise<ICollectionRepository.CreateRaw.Result>;
|
|
7
|
+
createLanguage(args: ICollectionRepository.CreateLang.Args): Promise<ICollectionRepository.CreateLang.Result>;
|
|
8
|
+
save(collection: ICollection): Promise<ICollection>;
|
|
9
|
+
unpublish(collection: ICollection): Promise<void>;
|
|
10
|
+
getOverview(args: ICollectionRepository.GetOverview.Args): Promise<ICollectionRepository.GetOverview.Result>;
|
|
11
|
+
getItems(args: ICollectionRepository.GetItems.Args): Promise<ICollectionRepository.GetItems.Result>;
|
|
12
|
+
get(args: ICollectionRepository.Get.Args): Promise<ICollectionRepository.Get.Result>;
|
|
13
|
+
update(args: ICollectionRepository.Update.Args): Promise<ICollectionRepository.Update.Result>;
|
|
14
|
+
serializeUpdate(collection: ICollection | CollectionFieldProxy, savables: ICollectionRepository.Savable[]): ICollectionRepository.SerializeUpdates.Result;
|
|
15
|
+
}
|
|
16
|
+
export declare namespace ICollectionRepository {
|
|
17
|
+
type Savable = FieldModel;
|
|
18
|
+
namespace Create {
|
|
19
|
+
type Args = Omit<CollectionClient.Create.NewArgs, 'brand' | 'type' | 'version'> & {
|
|
20
|
+
template: Schema.Collection;
|
|
21
|
+
eventBus?: EventBus;
|
|
22
|
+
};
|
|
23
|
+
type Result = ICollection.WithGroup;
|
|
24
|
+
}
|
|
25
|
+
namespace CreateRaw {
|
|
26
|
+
type Args = Omit<CollectionClient.Create.NewArgs, 'brand' | 'type' | 'version'> & {
|
|
27
|
+
template: Schema.Collection;
|
|
28
|
+
};
|
|
29
|
+
type Result = Schema.Collection.Data.AsGroup;
|
|
30
|
+
}
|
|
31
|
+
namespace CreateLang {
|
|
32
|
+
type Args = Omit<CollectionClient.Create.NewLanguageArgs, 'brand'> & {
|
|
33
|
+
template: Schema.Collection;
|
|
34
|
+
eventBus: EventBus;
|
|
35
|
+
};
|
|
36
|
+
type Result = ICollection.WithGroup;
|
|
37
|
+
}
|
|
38
|
+
namespace GetOverview {
|
|
39
|
+
type Args = Omit<CollectionClient.GetOverview.Args, 'brand'>;
|
|
40
|
+
type Item = {
|
|
41
|
+
template: Schema.Collection;
|
|
42
|
+
type: Schema.Collection.Type;
|
|
43
|
+
count: number;
|
|
44
|
+
};
|
|
45
|
+
type Result = Item[];
|
|
46
|
+
}
|
|
47
|
+
namespace GetItems {
|
|
48
|
+
type Args = Omit<CollectionClient.GetItems.Args, 'brand'>;
|
|
49
|
+
type Result = CollectionClient.GetItems.Result;
|
|
50
|
+
}
|
|
51
|
+
namespace Get {
|
|
52
|
+
type Args = Omit<CollectionClient.Get.Args, 'brand'>;
|
|
53
|
+
type Result = CollectionClient.Get.Result;
|
|
54
|
+
}
|
|
55
|
+
namespace Update {
|
|
56
|
+
type Args = CollectionClient.Update.Args;
|
|
57
|
+
type Result = CollectionClient.Update.Result;
|
|
58
|
+
}
|
|
59
|
+
namespace SerializeUpdates {
|
|
60
|
+
type Result = CollectionClient.Update.Args;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { PageClient, Pagination } from '@nascentdigital/funnel-cms';
|
|
2
|
+
import { EventBus, PartialBy, Schema } from '@nascentdigital/funnel-core';
|
|
3
|
+
import { IPage, PageOverview } from '../domain';
|
|
4
|
+
export interface IPageRepository {
|
|
5
|
+
search(args: IPageRepository.Search.Args): Promise<IPageRepository.Search.Result>;
|
|
6
|
+
create(args: IPageRepository.Create.Args): Promise<IPageRepository.Create.Result>;
|
|
7
|
+
createLanguage(args: IPageRepository.CreateLang.Args): Promise<IPageRepository.CreateLang.Result>;
|
|
8
|
+
save(page: IPage): Promise<IPage>;
|
|
9
|
+
unpublish(page: IPage): Promise<void>;
|
|
10
|
+
getOverview(args: IPageRepository.GetOverview.Args): Promise<IPageRepository.GetOverview.Result>;
|
|
11
|
+
}
|
|
12
|
+
export declare namespace IPageRepository {
|
|
13
|
+
namespace Search {
|
|
14
|
+
type Args = Omit<PageClient.Search.Args, 'version' | 'brand' | 'type' | 'region'> & {
|
|
15
|
+
template: Schema.Page;
|
|
16
|
+
region: string;
|
|
17
|
+
};
|
|
18
|
+
type Result = Pagination.Paginated<IPage.Ref>;
|
|
19
|
+
}
|
|
20
|
+
namespace Create {
|
|
21
|
+
type Args = PartialBy<Omit<PageClient.Create.NewArgs, 'brand' | 'type' | 'route'>, 'name'> & {
|
|
22
|
+
template: Schema.Page;
|
|
23
|
+
eventBus?: EventBus;
|
|
24
|
+
};
|
|
25
|
+
type Result = IPage.WithSummary;
|
|
26
|
+
}
|
|
27
|
+
namespace CreateLang {
|
|
28
|
+
type Args = Omit<PageClient.Create.NewLanguageArgs, 'brand' | 'route'> & {
|
|
29
|
+
template: Schema.Page;
|
|
30
|
+
eventBus: EventBus;
|
|
31
|
+
};
|
|
32
|
+
type Result = IPage.WithSummary;
|
|
33
|
+
}
|
|
34
|
+
namespace GetOverview {
|
|
35
|
+
type Args = {
|
|
36
|
+
region: string;
|
|
37
|
+
};
|
|
38
|
+
type Result = PageOverview[];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -1,24 +1,20 @@
|
|
|
1
1
|
import { PageClient, Pagination } from '@nascentdigital/funnel-cms';
|
|
2
2
|
import { EventBus, PartialBy } from '@nascentdigital/funnel-core';
|
|
3
3
|
import { EditorApiClient } from '../client';
|
|
4
|
-
import { Page } from '../domain';
|
|
4
|
+
import { IPage, Page } from '../domain';
|
|
5
|
+
import { IPageRepository } from './IPageRepository';
|
|
5
6
|
import { PageTarget } from './PageTarget';
|
|
6
|
-
export declare class PageRepository {
|
|
7
|
+
export declare class PageRepository implements IPageRepository {
|
|
7
8
|
readonly editorApi: EditorApiClient;
|
|
8
9
|
constructor(editorApi: EditorApiClient);
|
|
9
|
-
search(args: PageRepository.SearchArgs): Promise<Pagination.Paginated<
|
|
10
|
+
search(args: PageRepository.SearchArgs): Promise<Pagination.Paginated<IPage.Ref>>;
|
|
10
11
|
load(args: PageRepository.LoadArgs): Promise<Page.WithSummary | undefined>;
|
|
11
12
|
create({ eventBus, name, ...args }: PageRepository.CreateNewArgs): Promise<Page.WithSummary>;
|
|
12
13
|
createLanguage(args: PageRepository.CreateLanguageArgs): Promise<Page.WithSummary>;
|
|
13
14
|
save(page: Page): Promise<Page>;
|
|
14
15
|
unpublish(page: Page): Promise<void>;
|
|
16
|
+
getOverview(args: IPageRepository.GetOverview.Args): Promise<IPageRepository.GetOverview.Result>;
|
|
15
17
|
private serializePageUpdate;
|
|
16
|
-
private serializeSectionUpdate;
|
|
17
|
-
private serializeBlockUpdate;
|
|
18
|
-
private serializeFieldsUpdate;
|
|
19
|
-
private serializeObjectFieldUpdate;
|
|
20
|
-
private serializeFieldUpdate;
|
|
21
|
-
private serializeListUpdate;
|
|
22
18
|
}
|
|
23
19
|
export declare namespace PageRepository {
|
|
24
20
|
type SearchArgs = Omit<PageClient.Search.Args, 'version' | 'brand' | 'type' | 'region'> & Pick<Page.ConstructorArgs, 'template' | 'region'>;
|
|
@@ -29,4 +25,5 @@ export declare namespace PageRepository {
|
|
|
29
25
|
type CreateLanguageArgs = Omit<PageClient.Create.NewLanguageArgs, 'brand' | 'route'> & Pick<Page.ConstructorArgs, 'template'> & {
|
|
30
26
|
eventBus: EventBus;
|
|
31
27
|
};
|
|
28
|
+
type GetOverviewArgs = Omit<PageClient.GetOverview.Args, 'brand'>;
|
|
32
29
|
}
|