@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
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.VisualPanel = VisualPanel;
|
|
7
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
8
|
+
const classnames_1 = __importDefault(require("classnames"));
|
|
9
|
+
const core_1 = require("../../../../core");
|
|
10
|
+
const Panel_1 = require("./Panel");
|
|
11
|
+
// components
|
|
12
|
+
function VisualPanel({ className, parentType, itemOffset, panel, mobile, nested }) {
|
|
13
|
+
// render
|
|
14
|
+
const { aspectRatio: { mobile: aspectRatioMobile, desktop: aspectRatioDesktop } } = panel;
|
|
15
|
+
const aspectRatio = mobile ? aspectRatioMobile : aspectRatioDesktop;
|
|
16
|
+
return ((0, jsx_runtime_1.jsx)(Panel_1.Panel, { className: className, parentType: parentType, itemOffset: itemOffset, panel: panel, mobile: mobile, nested: nested, disableSizing: mobile, children: (0, jsx_runtime_1.jsx)("div", { className: (0, classnames_1.default)('flex justify-center items-center bg-draft/tint3 rounded-xxs overflow-hidden', {
|
|
17
|
+
'aspect-square': aspectRatio === 'square' || aspectRatio === 'auto',
|
|
18
|
+
'aspect-phone': aspectRatio === 'phone',
|
|
19
|
+
'aspects-tv': aspectRatio === 'tv',
|
|
20
|
+
'aspect-widescreen': aspectRatio === 'widescreen',
|
|
21
|
+
'aspect-cinema': aspectRatio === 'cinema'
|
|
22
|
+
}), children: (0, jsx_runtime_1.jsx)(core_1.Icon, { className: "text-content-tertiary", variant: "Image", size: {
|
|
23
|
+
size: 20,
|
|
24
|
+
strokeWidth: 1.5,
|
|
25
|
+
absoluteStrokeWidth: false
|
|
26
|
+
} }) }) }));
|
|
27
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./ColumnLayout"), exports);
|
|
18
|
+
__exportStar(require("./RowLayout"), exports);
|
|
19
|
+
__exportStar(require("./StackLayout"), exports);
|
|
@@ -2,12 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.BlockConfigPanel = BlockConfigPanel;
|
|
4
4
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
-
const react_1 = require("
|
|
5
|
+
const react_1 = require("react");
|
|
6
6
|
const core_1 = require("../../../core");
|
|
7
7
|
const config_1 = require("../config");
|
|
8
8
|
// panel
|
|
9
9
|
function BlockConfigPanel() {
|
|
10
|
-
// bind
|
|
10
|
+
// bind hooks
|
|
11
|
+
const id = (0, react_1.useId)();
|
|
11
12
|
const configuration = (0, core_1.useBlockConfiguration)();
|
|
12
13
|
// skip if there's no config (shouldn't happen)
|
|
13
14
|
if (!configuration || !configuration.hasPanels) {
|
|
@@ -15,8 +16,7 @@ function BlockConfigPanel() {
|
|
|
15
16
|
}
|
|
16
17
|
// render
|
|
17
18
|
const { scope } = configuration;
|
|
18
|
-
return ((0, jsx_runtime_1.jsx)(core_1.FadeIn, {
|
|
19
|
-
(0, jsx_runtime_1.jsx)(config_1.LegacyBlockPreview, { configuration: configuration }) }), (0, jsx_runtime_1.jsx)(config_1.BlockConfigButton, { target: "block" })] }) }, "block.config"));
|
|
19
|
+
return ((0, jsx_runtime_1.jsx)(core_1.FadeIn, { children: (0, jsx_runtime_1.jsxs)(core_1.Popup.AnchorElement, { tag: "div", anchorId: id, className: "h-full flex flex-col gap-l6 py-l7 bg-surface1 rounded-xxl interpolate-all", children: [(0, jsx_runtime_1.jsx)(core_1.Tabs, { className: "mx-l7", variant: "highlighted", size: "sm", items: blockScopes, selectedItem: scope, onSelect: scope => configuration.scope = scope }), (0, jsx_runtime_1.jsx)(config_1.BlockPreview, { className: "self-center", configuration: configuration }), (0, jsx_runtime_1.jsx)("div", { className: "px-l7", children: (0, jsx_runtime_1.jsx)(config_1.BlockConfigButton, { anchorId: id, target: "block" }) })] }) }, "block.config"));
|
|
20
20
|
}
|
|
21
21
|
// helpers
|
|
22
22
|
const blockScopes = [
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { EventBus, Language, Schema } from '@nascentdigital/funnel-core';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { IPage, PageSummary } from '../../core';
|
|
4
|
+
export interface IPageController {
|
|
5
|
+
readonly state: IPageController.State;
|
|
6
|
+
readonly events$: Observable<IPageController.Event | IPage.Event>;
|
|
7
|
+
readonly saved$: Observable<[IPageController.StateChangedEvent, IPageController.StateChangedEvent]>;
|
|
8
|
+
readonly page: IPage | undefined;
|
|
9
|
+
readonly pageSummary: PageSummary | undefined;
|
|
10
|
+
readonly languages: ReadonlyArray<Language>;
|
|
11
|
+
unpublish(): Promise<void>;
|
|
12
|
+
create(target: IPageController.Target): Promise<void>;
|
|
13
|
+
reload(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
export declare namespace IPageController {
|
|
16
|
+
type State = 'uninitialized' | 'initializing' | 'loading' | 'ready' | 'saving' | 'unpublishing' | 'error';
|
|
17
|
+
type Target = {
|
|
18
|
+
brand: string;
|
|
19
|
+
templates: Schema.Site.Pages;
|
|
20
|
+
template: Schema.Page;
|
|
21
|
+
region: string;
|
|
22
|
+
slug?: string;
|
|
23
|
+
language: Language;
|
|
24
|
+
};
|
|
25
|
+
interface Event extends EventBus.Event<'PageController', Event.Type> {
|
|
26
|
+
controller: IPageController;
|
|
27
|
+
}
|
|
28
|
+
namespace Event {
|
|
29
|
+
type Type = 'pageSummary.changed' | 'page.changed';
|
|
30
|
+
function filter(event: EventBus.Event): event is Event;
|
|
31
|
+
function create(event: EventBus.Args<Event>): Event;
|
|
32
|
+
}
|
|
33
|
+
interface StateChangedEvent extends EventBus.Event<'PageController', StateChangedEvent.Type> {
|
|
34
|
+
controller: IPageController;
|
|
35
|
+
state: State;
|
|
36
|
+
}
|
|
37
|
+
namespace StateChangedEvent {
|
|
38
|
+
type Type = 'state.changed';
|
|
39
|
+
function filter(event: EventBus.Event): event is StateChangedEvent;
|
|
40
|
+
function create(event: Omit<EventBus.Args<StateChangedEvent>, 'type'>): StateChangedEvent;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.IPageController = void 0;
|
|
4
|
+
const funnel_core_1 = require("@nascentdigital/funnel-core");
|
|
5
|
+
// extension
|
|
6
|
+
var IPageController;
|
|
7
|
+
(function (IPageController) {
|
|
8
|
+
let Event;
|
|
9
|
+
(function (Event) {
|
|
10
|
+
// methods
|
|
11
|
+
function filter(event) {
|
|
12
|
+
return event.domain === 'PageController';
|
|
13
|
+
}
|
|
14
|
+
Event.filter = filter;
|
|
15
|
+
function create(event) {
|
|
16
|
+
return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController' }, event));
|
|
17
|
+
}
|
|
18
|
+
Event.create = create;
|
|
19
|
+
})(Event = IPageController.Event || (IPageController.Event = {}));
|
|
20
|
+
let StateChangedEvent;
|
|
21
|
+
(function (StateChangedEvent) {
|
|
22
|
+
// methods
|
|
23
|
+
function filter(event) {
|
|
24
|
+
return event.domain === 'PageController' && event.type === 'state.changed';
|
|
25
|
+
}
|
|
26
|
+
StateChangedEvent.filter = filter;
|
|
27
|
+
function create(event) {
|
|
28
|
+
return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController', type: 'state.changed' }, event));
|
|
29
|
+
}
|
|
30
|
+
StateChangedEvent.create = create;
|
|
31
|
+
})(StateChangedEvent = IPageController.StateChangedEvent || (IPageController.StateChangedEvent = {}));
|
|
32
|
+
})(IPageController || (exports.IPageController = IPageController = {}));
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { AppState, EditorApiClient, Page, PageRepository, PageSummary } from '../../core';
|
|
3
|
-
|
|
1
|
+
import { Schema } from '@nascentdigital/funnel-core';
|
|
2
|
+
import { AppState, EditorApiClient, IPage, Page, PageRepository, PageSummary } from '../../core';
|
|
3
|
+
import { IPageController } from './IPageController';
|
|
4
|
+
export declare class PageController implements IPageController {
|
|
4
5
|
private readonly _eventBus;
|
|
5
6
|
readonly appState: AppState;
|
|
6
7
|
readonly repository: PageRepository;
|
|
@@ -11,58 +12,32 @@ export declare class PageController {
|
|
|
11
12
|
private _pageSubscription?;
|
|
12
13
|
private _saveQueuedFor?;
|
|
13
14
|
constructor({ appState, editorApi }: PageController.ConstructorArgs);
|
|
14
|
-
get events$(): import("rxjs").Observable<
|
|
15
|
-
get saved$(): import("rxjs").Observable<[
|
|
16
|
-
get state():
|
|
15
|
+
get events$(): import("rxjs").Observable<IPage.Event | IPageController.Event>;
|
|
16
|
+
get saved$(): import("rxjs").Observable<[IPageController.StateChangedEvent, IPageController.StateChangedEvent]>;
|
|
17
|
+
get state(): IPageController.State;
|
|
17
18
|
private set state(value);
|
|
18
19
|
get ready(): boolean;
|
|
19
|
-
get target():
|
|
20
|
+
get target(): IPageController.Target;
|
|
20
21
|
get region(): string;
|
|
21
22
|
get language(): "cy" | "fr" | "fy" | "to" | "br" | "hr" | "li" | "th" | "tr" | "id" | "is" | "tw" | "no" | "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "ht" | "hu" | "hy" | "hz" | "ia" | "ie" | "ig" | "ii" | "ik" | "io" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "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" | "ti" | "tk" | "tl" | "tn" | "ts" | "tt" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu";
|
|
22
23
|
get languages(): ("cy" | "fr" | "fy" | "to" | "br" | "hr" | "li" | "th" | "tr" | "id" | "is" | "tw" | "no" | "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "ht" | "hu" | "hy" | "hz" | "ia" | "ie" | "ig" | "ii" | "ik" | "io" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "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" | "ti" | "tk" | "tl" | "tn" | "ts" | "tt" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu")[];
|
|
23
24
|
get templates(): Schema.Site.Pages;
|
|
24
25
|
get currentTemplate(): Schema.Page<Schema.Page.Content, string>;
|
|
25
|
-
get pageTarget():
|
|
26
|
+
get pageTarget(): IPageController.Target | undefined;
|
|
26
27
|
get pageSummary(): PageSummary | undefined;
|
|
27
28
|
private set pageSummary(value);
|
|
28
29
|
get page(): Page | undefined;
|
|
29
30
|
private set page(value);
|
|
30
|
-
load(target:
|
|
31
|
+
load(target: IPageController.Target): Promise<void>;
|
|
31
32
|
reload(): Promise<void>;
|
|
32
|
-
create(target:
|
|
33
|
+
create(target: IPageController.Target): Promise<void>;
|
|
33
34
|
save(): Promise<void>;
|
|
34
35
|
unpublish(): Promise<void>;
|
|
35
36
|
private raiseEvent;
|
|
36
37
|
}
|
|
37
38
|
export declare namespace PageController {
|
|
38
|
-
type State = 'uninitialized' | 'initializing' | 'loading' | 'ready' | 'saving' | 'unpublishing' | 'error';
|
|
39
|
-
type Target = {
|
|
40
|
-
brand: string;
|
|
41
|
-
templates: Schema.Site.Pages;
|
|
42
|
-
template: Schema.Page;
|
|
43
|
-
region: string;
|
|
44
|
-
slug?: string;
|
|
45
|
-
language: Language;
|
|
46
|
-
};
|
|
47
39
|
type ConstructorArgs = {
|
|
48
40
|
appState: AppState;
|
|
49
41
|
editorApi: EditorApiClient;
|
|
50
42
|
};
|
|
51
|
-
interface Event extends EventBus.Event<'PageController', Event.Type> {
|
|
52
|
-
controller: PageController;
|
|
53
|
-
}
|
|
54
|
-
namespace Event {
|
|
55
|
-
type Type = 'pageSummary.changed' | 'page.changed';
|
|
56
|
-
function filter(event: EventBus.Event): event is Event;
|
|
57
|
-
function create(event: EventBus.Args<Event>): Event;
|
|
58
|
-
}
|
|
59
|
-
interface StateChangedEvent extends EventBus.Event<'PageController', StateChangedEvent.Type> {
|
|
60
|
-
controller: PageController;
|
|
61
|
-
state: State;
|
|
62
|
-
}
|
|
63
|
-
namespace StateChangedEvent {
|
|
64
|
-
type Type = 'state.changed';
|
|
65
|
-
function filter(event: EventBus.Event): event is StateChangedEvent;
|
|
66
|
-
function create(event: Omit<EventBus.Args<StateChangedEvent>, 'type'>): StateChangedEvent;
|
|
67
|
-
}
|
|
68
43
|
}
|
|
@@ -4,6 +4,7 @@ exports.PageController = void 0;
|
|
|
4
4
|
const funnel_core_1 = require("@nascentdigital/funnel-core");
|
|
5
5
|
const rxjs_1 = require("rxjs");
|
|
6
6
|
const core_1 = require("../../core");
|
|
7
|
+
const IPageController_1 = require("./IPageController");
|
|
7
8
|
// class
|
|
8
9
|
class PageController {
|
|
9
10
|
constructor({ appState, editorApi }) {
|
|
@@ -15,10 +16,10 @@ class PageController {
|
|
|
15
16
|
}
|
|
16
17
|
get events$() {
|
|
17
18
|
return this._eventBus.events$
|
|
18
|
-
.pipe((0, rxjs_1.filter)(e =>
|
|
19
|
+
.pipe((0, rxjs_1.filter)(e => IPageController_1.IPageController.Event.filter(e) || core_1.IPage.Event.filter(e)));
|
|
19
20
|
}
|
|
20
21
|
get saved$() {
|
|
21
|
-
return this._eventBus.events$.pipe((0, rxjs_1.filter)(
|
|
22
|
+
return this._eventBus.events$.pipe((0, rxjs_1.filter)(IPageController_1.IPageController.StateChangedEvent.filter), (0, rxjs_1.pairwise)(), (0, rxjs_1.filter)(([previous, current]) => previous.state === 'saving' && current.state === 'ready'));
|
|
22
23
|
}
|
|
23
24
|
get state() {
|
|
24
25
|
return this._state;
|
|
@@ -31,7 +32,7 @@ class PageController {
|
|
|
31
32
|
// or update
|
|
32
33
|
this._state = value;
|
|
33
34
|
// raise event
|
|
34
|
-
this._eventBus.publish(
|
|
35
|
+
this._eventBus.publish(IPageController_1.IPageController.StateChangedEvent.create({
|
|
35
36
|
state: value,
|
|
36
37
|
controller: this
|
|
37
38
|
}));
|
|
@@ -113,7 +114,7 @@ class PageController {
|
|
|
113
114
|
this._pageSubscription = page.events$
|
|
114
115
|
.pipe((0, rxjs_1.filter)(e => {
|
|
115
116
|
// handle page events
|
|
116
|
-
if (core_1.
|
|
117
|
+
if (core_1.IPage.Event.filter(e)) {
|
|
117
118
|
return e.type === 'modified';
|
|
118
119
|
}
|
|
119
120
|
// or item/object/list events
|
|
@@ -128,7 +129,7 @@ class PageController {
|
|
|
128
129
|
return funnel_core_1.Field.Event.filter(e) && (e.type === 'changed' || e.type === 'reset');
|
|
129
130
|
}
|
|
130
131
|
}), (0, rxjs_1.debounce)(e => {
|
|
131
|
-
if ((core_1.
|
|
132
|
+
if ((core_1.IPage.Event.filter(e) && e.type === 'modified')
|
|
132
133
|
|| core_1.Item.Event.filter(e)
|
|
133
134
|
|| funnel_core_1.FieldList.Event.filter(e)
|
|
134
135
|
|| (funnel_core_1.Field.Event.filter(e) && e.field.isComposite)) {
|
|
@@ -326,34 +327,7 @@ class PageController {
|
|
|
326
327
|
}
|
|
327
328
|
}
|
|
328
329
|
raiseEvent(type) {
|
|
329
|
-
this._eventBus.publish(
|
|
330
|
+
this._eventBus.publish(IPageController_1.IPageController.Event.create({ type, controller: this }));
|
|
330
331
|
}
|
|
331
332
|
}
|
|
332
333
|
exports.PageController = PageController;
|
|
333
|
-
// extensions
|
|
334
|
-
(function (PageController) {
|
|
335
|
-
let Event;
|
|
336
|
-
(function (Event) {
|
|
337
|
-
// methods
|
|
338
|
-
function filter(event) {
|
|
339
|
-
return event.domain === 'PageController';
|
|
340
|
-
}
|
|
341
|
-
Event.filter = filter;
|
|
342
|
-
function create(event) {
|
|
343
|
-
return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController' }, event));
|
|
344
|
-
}
|
|
345
|
-
Event.create = create;
|
|
346
|
-
})(Event = PageController.Event || (PageController.Event = {}));
|
|
347
|
-
let StateChangedEvent;
|
|
348
|
-
(function (StateChangedEvent) {
|
|
349
|
-
// methods
|
|
350
|
-
function filter(event) {
|
|
351
|
-
return event.domain === 'PageController' && event.type === 'state.changed';
|
|
352
|
-
}
|
|
353
|
-
StateChangedEvent.filter = filter;
|
|
354
|
-
function create(event) {
|
|
355
|
-
return funnel_core_1.EventBus.createEvent(Object.assign({ domain: 'PageController', type: 'state.changed' }, event));
|
|
356
|
-
}
|
|
357
|
-
StateChangedEvent.create = create;
|
|
358
|
-
})(StateChangedEvent = PageController.StateChangedEvent || (PageController.StateChangedEvent = {}));
|
|
359
|
-
})(PageController || (exports.PageController = PageController = {}));
|
package/dist/page/hooks/index.js
CHANGED
|
@@ -15,4 +15,5 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./PageController"), exports);
|
|
18
|
+
__exportStar(require("./IPageController"), exports);
|
|
18
19
|
__exportStar(require("./usePageController"), exports);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function usePageController(pageController?:
|
|
1
|
+
import { IPageController } from './IPageController';
|
|
2
|
+
export declare function usePageController(pageController?: IPageController): IPageController;
|
|
3
3
|
export declare const PageControllerContext: import("react").Context<PageControllerContext.Type>;
|
|
4
4
|
export declare namespace PageControllerContext {
|
|
5
5
|
type Type = {
|
|
6
|
-
controller:
|
|
6
|
+
controller: IPageController;
|
|
7
7
|
};
|
|
8
8
|
}
|
|
@@ -76,7 +76,7 @@ function PageEditor({ templateId, region, language, slug }) {
|
|
|
76
76
|
};
|
|
77
77
|
const onSelectItem = (item) => setItemId(item.identifier);
|
|
78
78
|
// render
|
|
79
|
-
return ((0, jsx_runtime_1.jsx)(hooks_1.PageControllerContext.Provider, { value: controllerContext, children: (0, jsx_runtime_1.jsx)(core_1.PageContext.Provider, { value: pageContext, children: (0, jsx_runtime_1.jsx)(core_1.AssetStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.CollectionStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.PageRefStoreContext.Provider, { value: pageRefStoreProxy, children: (0, jsx_runtime_1.jsx)(config_1.BlockConfigurationProvider, { item: selectedItem, children: (0, jsx_runtime_1.jsxs)("div", { className: "w-dvw h-dvh flex flex-col bg-background", children: [(0, jsx_runtime_1.jsx)(components_1.PageHeader, { target: target, selectedItem: selectedItem, onBack: onHeaderBack }), (0, jsx_runtime_1.jsx)("div", { className: "relative flex-1", children: (0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-0 flex", children: [(0, jsx_runtime_1.jsx)("section", { className: "w-[220px] lg:w-[240px] xl:w-[280px] shrink-0 overflow-y-scroll scrollbar-thin", children: (0, jsx_runtime_1.jsx)(components_1.PageNav, { selectedItem: selectedItem, onSelectItem: onSelectItem }) }), (0, jsx_runtime_1.jsx)("section", { className: "flex-1 h-full max-h-full max-w-[1000px] mx-auto", children: (0, jsx_runtime_1.jsx)(react_1.AnimatePresence, { mode: "wait", initial: false, children: renderContent({ target, controller, page, selectedItem, onSelectItem }) }) }), (0, jsx_runtime_1.jsxs)(react_1.motion.section, { className: (0, classnames_1.default)('hidden lg:flex lg:w-[320px] shrink-0 overflow-y-scroll scrollbar-thin', 'flex-col gap-l8 pt-l9 px-l8 pb-l8'), layout: true, children: [(0, jsx_runtime_1.jsx)("h2", { className: "label-sm text-content-tertiary uppercase", children: "Inspector" }), (0, jsx_runtime_1.jsxs)(react_1.AnimatePresence, { mode: "popLayout", children: [page && selectedItem && (selectedItem instanceof core_1.Block || selectedItem instanceof core_1.SectionBlock) &&
|
|
79
|
+
return ((0, jsx_runtime_1.jsx)(hooks_1.PageControllerContext.Provider, { value: controllerContext, children: (0, jsx_runtime_1.jsx)(core_1.PageContext.Provider, { value: pageContext, children: (0, jsx_runtime_1.jsx)(core_1.AssetStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.CollectionStoreContext.Provider, { value: page, children: (0, jsx_runtime_1.jsx)(core_1.PageRefStoreContext.Provider, { value: pageRefStoreProxy, children: (0, jsx_runtime_1.jsx)(config_1.BlockConfigurationProvider, { item: selectedItem, children: (0, jsx_runtime_1.jsxs)("div", { className: "w-dvw h-dvh flex flex-col bg-background", children: [(0, jsx_runtime_1.jsx)(components_1.PageHeader, { target: target, selectedItem: selectedItem, onBack: onHeaderBack }), (0, jsx_runtime_1.jsx)("div", { className: "relative flex-1", children: (0, jsx_runtime_1.jsxs)("div", { className: "absolute inset-0 flex z-default", children: [(0, jsx_runtime_1.jsx)("section", { className: "w-[220px] lg:w-[240px] xl:w-[280px] shrink-0 overflow-y-scroll scrollbar-thin", tabIndex: -1, children: (0, jsx_runtime_1.jsx)(components_1.PageNav, { selectedItem: selectedItem, onSelectItem: onSelectItem }) }), (0, jsx_runtime_1.jsx)("section", { className: "flex-1 h-full max-h-full max-w-[1000px] mx-auto", tabIndex: -1, children: (0, jsx_runtime_1.jsx)(react_1.AnimatePresence, { mode: "wait", initial: false, children: renderContent({ target, controller, page, selectedItem, onSelectItem }) }) }), (0, jsx_runtime_1.jsxs)(react_1.motion.section, { className: (0, classnames_1.default)('hidden lg:flex lg:w-[320px] shrink-0 overflow-y-scroll scrollbar-thin', 'flex-col gap-l8 pt-l9 px-l8 pb-l8'), layout: true, tabIndex: -1, children: [(0, jsx_runtime_1.jsx)("h2", { className: "label-sm text-content-tertiary uppercase", children: "Inspector" }), (0, jsx_runtime_1.jsxs)(react_1.AnimatePresence, { mode: "popLayout", children: [page && selectedItem && (selectedItem instanceof core_1.Block || selectedItem instanceof core_1.SectionBlock) &&
|
|
80
80
|
(0, jsx_runtime_1.jsx)(components_1.BlockConfigPanel, {}, "block.config"), page && selectedItem &&
|
|
81
81
|
(0, jsx_runtime_1.jsx)(components_1.PageStatus, { page: page, selectedItem: selectedItem, onSelectItem: onSelectItem }, "status")] })] })] }) })] }) }) }) }) }) }) }));
|
|
82
82
|
}
|