@nascentdigital/funnel-editor 4.6.7 → 5.0.2
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 +15 -3
- package/dist/components.js +18 -3
- 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 +43 -3
- 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.d.ts +1 -2
- package/dist/core/components/fields/asset/AssetEditor.js +29 -49
- package/dist/core/components/fields/asset/AssetPicker.js +6 -6
- package/dist/core/components/fields/asset/AssetUploader.d.ts +1 -2
- package/dist/core/components/fields/asset/AssetUploader.js +39 -35
- 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.d.ts +2 -1
- package/dist/core/components/fields/collection/CollectionEditor.js +18 -4
- 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.d.ts +2 -2
- package/dist/core/components/fields/embed/EmbeddedVideoEditor.js +50 -31
- package/dist/core/components/fields/factories/AssetFactory.d.ts +3 -3
- package/dist/core/components/fields/factories/AssetFactory.js +18 -13
- package/dist/core/components/fields/factories/CollectionFactory.d.ts +3 -3
- package/dist/core/components/fields/factories/CollectionFactory.js +20 -13
- package/dist/core/components/fields/factories/EmbeddedVideoFactory.d.ts +3 -3
- package/dist/core/components/fields/factories/EmbeddedVideoFactory.js +17 -8
- package/dist/core/components/fields/factories/FieldValueFactory.d.ts +7 -5
- package/dist/core/components/fields/factories/FieldValueFactory.js +57 -13
- package/dist/core/components/fields/factories/LinkFactory.d.ts +3 -3
- package/dist/core/components/fields/factories/LinkFactory.js +17 -8
- package/dist/core/components/fields/factories/MediaFactory.d.ts +13 -0
- package/dist/core/components/fields/factories/MediaFactory.js +212 -0
- package/dist/core/components/fields/factories/ObjectFactory.d.ts +3 -2
- package/dist/core/components/fields/factories/ObjectFactory.js +16 -2
- package/dist/core/components/fields/factories/TextFactory.d.ts +3 -3
- package/dist/core/components/fields/factories/TextFactory.js +16 -10
- package/dist/core/components/fields/link/LinkEditor.d.ts +2 -2
- package/dist/core/components/fields/link/LinkEditor.js +18 -6
- 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 +36 -0
- package/dist/core/components/fields/media/MediaEditor.js +264 -0
- package/dist/core/components/fields/media/index.d.ts +2 -0
- package/dist/core/components/fields/media/index.js +18 -0
- package/dist/core/components/fields/object/ObjectEditor.d.ts +2 -1
- package/dist/core/components/fields/object/ObjectEditor.js +16 -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/MultiSelectControls.js +2 -5
- package/dist/core/components/interaction/Popup.d.ts +11 -7
- package/dist/core/components/interaction/Popup.js +8 -6
- package/dist/core/components/interaction/QuickEditor.js +1 -1
- package/dist/core/components/interaction/QuickInput.d.ts +2 -4
- package/dist/core/components/interaction/QuickInput.js +6 -2
- 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/interaction/menu/Menu.d.ts +8 -19
- package/dist/core/components/interaction/menu/Menu.js +26 -60
- package/dist/core/components/interaction/menu/useMenuController.d.ts +4 -2
- package/dist/core/components/interaction/menu/useMenuController.js +4 -1
- package/dist/core/components/transitions/FadeIn.js +1 -1
- 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.js +2 -1
- package/dist/core/domain/BlockConfiguration.d.ts +4 -1
- package/dist/core/domain/BlockConfiguration.js +59 -3
- package/dist/core/domain/Collection.d.ts +7 -25
- 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 +15 -9
- 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 -6
- package/dist/core/domain/ICollection.d.ts +72 -0
- package/dist/core/domain/ICollection.js +20 -0
- package/dist/core/domain/IPage.d.ts +16 -1
- package/dist/core/domain/Page.js +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 -5
- package/dist/core/domain/index.d.ts +1 -1
- package/dist/core/domain/index.js +1 -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/useCollections.js +4 -0
- package/dist/core/hooks/usePageRepository.d.ts +3 -2
- package/dist/core/hooks/usePageRepository.js +4 -4
- package/dist/core/hooks/useSite.js +4 -0
- 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 +22 -21
- 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 +61 -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 +5 -8
- package/dist/core/repository/PageRepository.js +7 -280
- package/dist/core/repository/SerializeCollectionUpdate.d.ts +8 -0
- package/dist/core/repository/SerializeCollectionUpdate.js +168 -0
- package/dist/core/repository/SerializePageUpdate.d.ts +10 -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/core/splash/SplashContainer.d.ts +4 -2
- package/dist/core/splash/SplashContainer.js +3 -3
- 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/SettingsEditor.js +0 -7
- package/dist/page/components/config/BlockConfigButton.js +71 -14
- package/dist/page/screens/PageEditor.js +1 -1
- package/dist/styles/index.css +24 -20
- package/dist/styles/tailwind.js +1 -0
- package/dist/users/screens/UserExplorer.js +1 -1
- package/package.json +2 -2
- package/dist/core/domain/TranslateSchema.d.ts +0 -7
- /package/dist/core/{domain/TranslateSchema.js → repository/IAssetRepository.js} +0 -0
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.AssetFactory = AssetFactory;
|
|
4
15
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
@@ -8,14 +19,15 @@ const hooks_1 = require("../../../hooks");
|
|
|
8
19
|
const interaction_1 = require("../../interaction");
|
|
9
20
|
const asset_1 = require("../asset");
|
|
10
21
|
// component
|
|
11
|
-
function AssetFactory(
|
|
22
|
+
function AssetFactory(_a) {
|
|
23
|
+
var { schema, assetId, onCommit, onCancel: onCancelRaw } = _a, popupProps = __rest(_a, ["schema", "assetId", "onCommit", "onCancel"]);
|
|
12
24
|
// bind refs
|
|
13
25
|
const menu = (0, interaction_1.useMenuController)();
|
|
14
26
|
const pickerRef = (0, react_1.useRef)(null);
|
|
15
27
|
const uploaderRef = (0, react_1.useRef)(null);
|
|
16
28
|
const editorRef = (0, react_1.useRef)(null);
|
|
17
|
-
const
|
|
18
|
-
|
|
29
|
+
const popupPropsRef = (0, react_1.useRef)(popupProps);
|
|
30
|
+
popupPropsRef.current = popupProps;
|
|
19
31
|
const onCommitRef = (0, react_1.useRef)(onCommit);
|
|
20
32
|
onCommitRef.current = onCommit;
|
|
21
33
|
const onCancelRef = (0, react_1.useRef)(onCancelRaw);
|
|
@@ -35,7 +47,7 @@ function AssetFactory({ schema, assetId, anchor, onCommit, onCancel: onCancelRaw
|
|
|
35
47
|
menu.items = createMenuItems;
|
|
36
48
|
}
|
|
37
49
|
// open menu
|
|
38
|
-
menu.open(
|
|
50
|
+
menu.open(popupPropsRef.current.anchor);
|
|
39
51
|
}, [menu, assetId]);
|
|
40
52
|
// helpers
|
|
41
53
|
const onPick = async () => {
|
|
@@ -60,10 +72,7 @@ function AssetFactory({ schema, assetId, anchor, onCommit, onCancel: onCancelRaw
|
|
|
60
72
|
const onUpload = async () => {
|
|
61
73
|
var _a;
|
|
62
74
|
// launch uploader
|
|
63
|
-
const asset = await ((_a = uploaderRef.current) === null || _a === void 0 ? void 0 : _a.upload({
|
|
64
|
-
schema,
|
|
65
|
-
anchor
|
|
66
|
-
}));
|
|
75
|
+
const asset = await ((_a = uploaderRef.current) === null || _a === void 0 ? void 0 : _a.upload(Object.assign({ schema }, (popupPropsRef.current))));
|
|
67
76
|
// cancel if no visual was selected
|
|
68
77
|
if (!asset) {
|
|
69
78
|
onCancel();
|
|
@@ -85,11 +94,7 @@ function AssetFactory({ schema, assetId, anchor, onCommit, onCancel: onCancelRaw
|
|
|
85
94
|
return;
|
|
86
95
|
}
|
|
87
96
|
// perform edit
|
|
88
|
-
const updatedAsset = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit({
|
|
89
|
-
schema,
|
|
90
|
-
asset: asset.value,
|
|
91
|
-
anchor
|
|
92
|
-
}));
|
|
97
|
+
const updatedAsset = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit(Object.assign({ schema, asset: asset.value }, (popupPropsRef.current))));
|
|
93
98
|
// always cancel
|
|
94
99
|
onCancel();
|
|
95
100
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Callback, Language, Schema } from '@nascentdigital/funnel-core';
|
|
2
|
-
|
|
2
|
+
import { Popup } from '../../interaction';
|
|
3
|
+
export declare function CollectionFactory({ schema, language, collection: initialValue, onCommit, onCancel: onCancelRaw, ...popupProps }: CollectionFactory.Props): import("react/jsx-runtime").JSX.Element;
|
|
3
4
|
export declare namespace CollectionFactory {
|
|
4
|
-
type Props = {
|
|
5
|
+
type Props = Popup.Props.Delegated & {
|
|
5
6
|
schema: Schema.CollectionField;
|
|
6
7
|
language: Language;
|
|
7
8
|
collection?: Schema.CollectionField.Value;
|
|
8
|
-
anchor: string;
|
|
9
9
|
onCommit: Callback<Schema.Field.Data<Schema.CollectionField>>;
|
|
10
10
|
onCancel: Callback.Void;
|
|
11
11
|
};
|
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.CollectionFactory = CollectionFactory;
|
|
4
15
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
@@ -7,13 +18,14 @@ const react_1 = require("react");
|
|
|
7
18
|
const interaction_1 = require("../../interaction");
|
|
8
19
|
const collection_1 = require("../collection");
|
|
9
20
|
// component
|
|
10
|
-
function CollectionFactory(
|
|
21
|
+
function CollectionFactory(_a) {
|
|
22
|
+
var { schema, language, collection: initialValue, onCommit, onCancel: onCancelRaw } = _a, popupProps = __rest(_a, ["schema", "language", "collection", "onCommit", "onCancel"]);
|
|
11
23
|
// bind refs
|
|
12
24
|
const menu = (0, interaction_1.useMenuController)();
|
|
13
25
|
const pickerRef = (0, react_1.useRef)(null);
|
|
14
26
|
const editorRef = (0, react_1.useRef)(null);
|
|
15
|
-
const
|
|
16
|
-
|
|
27
|
+
const popupPropsRef = (0, react_1.useRef)(popupProps);
|
|
28
|
+
popupPropsRef.current = popupProps;
|
|
17
29
|
const onCommitRef = (0, react_1.useRef)(onCommit);
|
|
18
30
|
onCommitRef.current = onCommit;
|
|
19
31
|
const onCancelRef = (0, react_1.useRef)(onCancelRaw);
|
|
@@ -55,7 +67,7 @@ function CollectionFactory({ schema, language, collection: initialValue, anchor,
|
|
|
55
67
|
];
|
|
56
68
|
}
|
|
57
69
|
// open menu
|
|
58
|
-
menu.open(
|
|
70
|
+
menu.open(popupPropsRef.current.anchor);
|
|
59
71
|
}, [menu, collectionOptions, initialValue]);
|
|
60
72
|
// helpers
|
|
61
73
|
const onPick = async () => {
|
|
@@ -76,10 +88,8 @@ function CollectionFactory({ schema, language, collection: initialValue, anchor,
|
|
|
76
88
|
const onCreate = async (collectionSchema) => {
|
|
77
89
|
var _a;
|
|
78
90
|
// start picker (cancel if nothing was picked
|
|
79
|
-
const collection = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit({
|
|
80
|
-
|
|
81
|
-
collectionSchema
|
|
82
|
-
}));
|
|
91
|
+
const collection = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit(Object.assign({ schema,
|
|
92
|
+
collectionSchema }, (popupPropsRef.current))));
|
|
83
93
|
if (!collection) {
|
|
84
94
|
onCancel();
|
|
85
95
|
}
|
|
@@ -98,11 +108,8 @@ function CollectionFactory({ schema, language, collection: initialValue, anchor,
|
|
|
98
108
|
throw new funnel_core_1.IllegalStateError(`Unable to resolve "${collectionType}" Collection`);
|
|
99
109
|
}
|
|
100
110
|
// start picker (cancel if nothing was picked
|
|
101
|
-
const collection = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit({
|
|
102
|
-
|
|
103
|
-
collectionSchema,
|
|
104
|
-
value: initialValue
|
|
105
|
-
}));
|
|
111
|
+
const collection = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit(Object.assign({ schema,
|
|
112
|
+
collectionSchema, value: initialValue }, (popupPropsRef.current))));
|
|
106
113
|
if (!collection) {
|
|
107
114
|
onCancel();
|
|
108
115
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Callback, Language, Schema } from '@nascentdigital/funnel-core';
|
|
2
|
-
|
|
2
|
+
import { Popup } from '../../interaction';
|
|
3
|
+
export declare function EmbeddedVideoFactory({ schema, initialValue, language, onCommit, onCancel, ...popupProps }: EmbeddedVideoFactory.Props): import("react/jsx-runtime").JSX.Element;
|
|
3
4
|
export declare namespace EmbeddedVideoFactory {
|
|
4
|
-
type Props = {
|
|
5
|
+
type Props = Popup.Props.Delegated & {
|
|
5
6
|
schema: Schema.EmbeddedVideoField;
|
|
6
7
|
initialValue?: Schema.Field.Data<Schema.EmbeddedVideoField>;
|
|
7
8
|
language: Language;
|
|
8
|
-
anchor: string;
|
|
9
9
|
onCommit: Callback<Schema.Field.Data<Schema.EmbeddedVideoField>>;
|
|
10
10
|
onCancel: Callback.Void;
|
|
11
11
|
};
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.EmbeddedVideoFactory = EmbeddedVideoFactory;
|
|
4
15
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
16
|
const react_1 = require("react");
|
|
6
17
|
const embed_1 = require("../embed");
|
|
7
18
|
// component
|
|
8
|
-
function EmbeddedVideoFactory(
|
|
19
|
+
function EmbeddedVideoFactory(_a) {
|
|
20
|
+
var { schema, initialValue, language, onCommit, onCancel } = _a, popupProps = __rest(_a, ["schema", "initialValue", "language", "onCommit", "onCancel"]);
|
|
9
21
|
// bind refs
|
|
10
22
|
const editorRef = (0, react_1.useRef)(null);
|
|
11
|
-
const
|
|
12
|
-
|
|
23
|
+
const popupPropsRef = (0, react_1.useRef)(popupProps);
|
|
24
|
+
popupPropsRef.current = popupProps;
|
|
13
25
|
const onCommitRef = (0, react_1.useRef)(onCommit);
|
|
14
26
|
onCommitRef.current = onCommit;
|
|
15
27
|
const onCancelRef = (0, react_1.useRef)(onCancel);
|
|
@@ -20,11 +32,8 @@ function EmbeddedVideoFactory({ schema, initialValue, language, anchor, onCommit
|
|
|
20
32
|
const onEdit = async () => {
|
|
21
33
|
var _a;
|
|
22
34
|
// start editor (cancel if dismissed)
|
|
23
|
-
const value = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit({
|
|
24
|
-
|
|
25
|
-
initialValue,
|
|
26
|
-
anchor: anchorRef.current
|
|
27
|
-
}));
|
|
35
|
+
const value = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit(Object.assign({ schema,
|
|
36
|
+
initialValue }, (popupPropsRef.current))));
|
|
28
37
|
if (!value) {
|
|
29
38
|
onCancelRef.current();
|
|
30
39
|
}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import { Callback, Field, ObjectField, Schema } from '@nascentdigital/funnel-core';
|
|
2
|
-
|
|
1
|
+
import { Callback, Field, FieldModel, ObjectField, Schema } from '@nascentdigital/funnel-core';
|
|
2
|
+
import { Popup } from '../../interaction';
|
|
3
|
+
export declare function FieldValueFactory<T extends Schema.Field.Type>({ itemSchema, field, onCommit, onCancel, ...popupProps }: FieldValueFactory.Props<T>): import("react/jsx-runtime").JSX.Element | null;
|
|
3
4
|
export declare namespace FieldValueFactory {
|
|
4
|
-
type Props<T extends Schema.Field.Type = Schema.Field.Type> = {
|
|
5
|
-
|
|
5
|
+
type Props<T extends Schema.Field.Type = Schema.Field.Type> = Popup.Props.Delegated & {
|
|
6
|
+
field?: CompatibleField<T>;
|
|
6
7
|
itemSchema: T;
|
|
7
|
-
field?: Field<T> | ObjectField;
|
|
8
8
|
onCommit?: Callback<Schema.Field.Data<T>>;
|
|
9
9
|
onCancel?: Callback.Void;
|
|
10
10
|
};
|
|
11
|
+
type CompatibleField<T extends Schema.Field.Type = Schema.Field.Type> = Field<T> | ObjectField;
|
|
12
|
+
function isCompatibleField(field: FieldModel | undefined): field is CompatibleField;
|
|
11
13
|
}
|
|
@@ -1,52 +1,96 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.FieldValueFactory = FieldValueFactory;
|
|
4
15
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
16
|
const funnel_core_1 = require("@nascentdigital/funnel-core");
|
|
17
|
+
const funnel_ui_1 = require("@nascentdigital/funnel-ui");
|
|
6
18
|
const hooks_1 = require("../../../hooks");
|
|
7
19
|
const AssetFactory_1 = require("./AssetFactory");
|
|
8
20
|
const CollectionFactory_1 = require("./CollectionFactory");
|
|
9
21
|
const EmbeddedVideoFactory_1 = require("./EmbeddedVideoFactory");
|
|
10
22
|
const LinkFactory_1 = require("./LinkFactory");
|
|
23
|
+
const MediaFactory_1 = require("./MediaFactory");
|
|
11
24
|
const ObjectFactory_1 = require("./ObjectFactory");
|
|
12
25
|
const PageFactory_1 = require("./PageFactory");
|
|
13
26
|
const TextFactory_1 = require("./TextFactory");
|
|
14
27
|
// factory
|
|
15
|
-
function FieldValueFactory(
|
|
16
|
-
var
|
|
28
|
+
function FieldValueFactory(_a) {
|
|
29
|
+
var _b, _c, _d, _e, _f, _g, _h;
|
|
30
|
+
var { itemSchema, field, onCommit = funnel_core_1.Fn.NoOp, onCancel = funnel_core_1.Fn.NoOp } = _a, popupProps = __rest(_a, ["itemSchema", "field", "onCommit", "onCancel"]);
|
|
17
31
|
// bind language
|
|
18
32
|
const brandConfig = funnel_core_1.AppConfig.brandConfig();
|
|
19
33
|
const page = (0, hooks_1.usePossiblePage)();
|
|
20
34
|
const collection = (0, hooks_1.usePossibleCollection)();
|
|
21
|
-
const region = (
|
|
22
|
-
const language = (
|
|
35
|
+
const region = (_b = page === null || page === void 0 ? void 0 : page.region) !== null && _b !== void 0 ? _b : funnel_core_1.RegionsConfig.getDefaultRegion(brandConfig.regionalization);
|
|
36
|
+
const language = (_d = (_c = page === null || page === void 0 ? void 0 : page.language) !== null && _c !== void 0 ? _c : collection === null || collection === void 0 ? void 0 : collection.language) !== null && _d !== void 0 ? _d : funnel_core_1.RegionsConfig.getDefaultLanguage(brandConfig.regionalization);
|
|
23
37
|
const commit = (item) => {
|
|
24
|
-
console.debug(`[FieldValueFactory/commit] creating value for "${itemSchema.name}"`, item);
|
|
25
38
|
onCommit(item);
|
|
26
39
|
};
|
|
27
40
|
const cancel = () => {
|
|
28
|
-
console.debug(`[FieldValueFactory/cancel] cancelling "${itemSchema.name}"`);
|
|
29
41
|
onCancel();
|
|
30
42
|
};
|
|
43
|
+
console.debug('[FieldValueFactory] creating field', { field, itemSchema });
|
|
31
44
|
// handle based on item type
|
|
32
45
|
switch (itemSchema.type) {
|
|
33
46
|
case 'text':
|
|
34
|
-
return ((0, jsx_runtime_1.jsx)(TextFactory_1.TextFactory, { schema: itemSchema, initialValue: field === null || field === void 0 ? void 0 : field.value,
|
|
47
|
+
return ((0, jsx_runtime_1.jsx)(TextFactory_1.TextFactory, Object.assign({ schema: itemSchema, initialValue: field === null || field === void 0 ? void 0 : field.value, onCommit: item => commit(item), onCancel: cancel }, popupProps)));
|
|
35
48
|
case 'link':
|
|
36
|
-
return ((0, jsx_runtime_1.jsx)(LinkFactory_1.LinkFactory, { schema: itemSchema, initialValue: field === null || field === void 0 ? void 0 : field.value, region: region, language: language,
|
|
49
|
+
return ((0, jsx_runtime_1.jsx)(LinkFactory_1.LinkFactory, Object.assign({ schema: itemSchema, initialValue: field === null || field === void 0 ? void 0 : field.value, region: region, language: language, onCommit: item => commit(item), onCancel: cancel }, popupProps)));
|
|
37
50
|
case 'embedded.video':
|
|
38
|
-
return ((0, jsx_runtime_1.jsx)(EmbeddedVideoFactory_1.EmbeddedVideoFactory, { schema: itemSchema, initialValue: field === null || field === void 0 ? void 0 : field.value, language: language,
|
|
51
|
+
return ((0, jsx_runtime_1.jsx)(EmbeddedVideoFactory_1.EmbeddedVideoFactory, Object.assign({ schema: itemSchema, initialValue: field === null || field === void 0 ? void 0 : field.value, language: language, onCommit: item => commit(item), onCancel: cancel }, popupProps)));
|
|
39
52
|
case 'asset': {
|
|
40
|
-
return ((0, jsx_runtime_1.jsx)(AssetFactory_1.AssetFactory, { schema: itemSchema, assetId: (
|
|
53
|
+
return ((0, jsx_runtime_1.jsx)(AssetFactory_1.AssetFactory, Object.assign({ schema: itemSchema, assetId: (_f = (_e = field === null || field === void 0 ? void 0 : field.value) === null || _e === void 0 ? void 0 : _e.value) === null || _f === void 0 ? void 0 : _f.id, onCommit: item => commit(item), onCancel: cancel }, popupProps)));
|
|
41
54
|
}
|
|
42
55
|
case 'page':
|
|
43
|
-
return ((0, jsx_runtime_1.jsx)(PageFactory_1.PageFactory, { schema: itemSchema, region: region, language: language, onCommit: item => commit(item), onCancel: cancel }));
|
|
56
|
+
return ((0, jsx_runtime_1.jsx)(PageFactory_1.PageFactory, Object.assign({ schema: itemSchema, region: region, language: language, onCommit: item => commit(item), onCancel: cancel }, popupProps)));
|
|
44
57
|
case 'collection':
|
|
45
|
-
|
|
58
|
+
// custom handling for media
|
|
59
|
+
if (funnel_ui_1.Media.Schema.filter(itemSchema)) {
|
|
60
|
+
console.debug('[FieldValueFactory] creating factory for MediaFactory');
|
|
61
|
+
return ((0, jsx_runtime_1.jsx)(MediaFactory_1.MediaFactory, Object.assign({ schema: itemSchema, language: language, media: (_g = field === null || field === void 0 ? void 0 : field.value) === null || _g === void 0 ? void 0 : _g.value, onCommit: item => commit(funnel_core_1.Schema.CollectionField.Value.toData(item)), onCancel: cancel }, popupProps)));
|
|
62
|
+
}
|
|
63
|
+
// or generic collection
|
|
64
|
+
else {
|
|
65
|
+
return ((0, jsx_runtime_1.jsx)(CollectionFactory_1.CollectionFactory, Object.assign({ schema: itemSchema, language: language, collection: (_h = field === null || field === void 0 ? void 0 : field.value) === null || _h === void 0 ? void 0 : _h.value, onCommit: item => commit(item), onCancel: cancel }, popupProps)));
|
|
66
|
+
}
|
|
46
67
|
case 'object':
|
|
47
|
-
return ((0, jsx_runtime_1.jsx)(ObjectFactory_1.ObjectFactory, { schema: itemSchema, field: field, onCommit: item => commit(item), onCancel: cancel }));
|
|
68
|
+
return ((0, jsx_runtime_1.jsx)(ObjectFactory_1.ObjectFactory, Object.assign({ schema: itemSchema, field: field, onCommit: item => commit(item), onCancel: cancel }, popupProps)));
|
|
48
69
|
default:
|
|
49
70
|
console.debug('[FieldValueFactory] no support for ', itemSchema);
|
|
50
71
|
return null;
|
|
51
72
|
}
|
|
52
73
|
}
|
|
74
|
+
// extension
|
|
75
|
+
(function (FieldValueFactory) {
|
|
76
|
+
// helpers
|
|
77
|
+
function isCompatibleField(field) {
|
|
78
|
+
// skip if field isn't there
|
|
79
|
+
if (!field) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
// or accept if it's an object
|
|
83
|
+
switch (field.schema.type) {
|
|
84
|
+
case 'link':
|
|
85
|
+
case 'embedded.video':
|
|
86
|
+
case 'asset':
|
|
87
|
+
case 'page':
|
|
88
|
+
case 'collection':
|
|
89
|
+
case 'object':
|
|
90
|
+
return true;
|
|
91
|
+
default:
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
FieldValueFactory.isCompatibleField = isCompatibleField;
|
|
96
|
+
})(FieldValueFactory || (exports.FieldValueFactory = FieldValueFactory = {}));
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Callback, Language, Schema } from '@nascentdigital/funnel-core';
|
|
2
|
-
|
|
2
|
+
import { Popup } from '../../interaction';
|
|
3
|
+
export declare function LinkFactory({ schema, initialValue, region, language, onCommit, onCancel, ...popupProps }: LinkFactory.Props): import("react/jsx-runtime").JSX.Element;
|
|
3
4
|
export declare namespace LinkFactory {
|
|
4
|
-
type Props = {
|
|
5
|
+
type Props = Popup.Props.Delegated & {
|
|
5
6
|
schema: Schema.LinkField;
|
|
6
7
|
initialValue?: Schema.Field.Data<Schema.LinkField>;
|
|
7
8
|
region: string;
|
|
8
9
|
language: Language;
|
|
9
|
-
anchor: string;
|
|
10
10
|
onCommit: Callback<Schema.Field.Data<Schema.LinkField>>;
|
|
11
11
|
onCancel: Callback.Void;
|
|
12
12
|
};
|
|
@@ -1,15 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
2
13
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
14
|
exports.LinkFactory = LinkFactory;
|
|
4
15
|
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
16
|
const react_1 = require("react");
|
|
6
17
|
const link_1 = require("../link");
|
|
7
18
|
// component
|
|
8
|
-
function LinkFactory(
|
|
19
|
+
function LinkFactory(_a) {
|
|
20
|
+
var { schema, initialValue, region, language, onCommit, onCancel } = _a, popupProps = __rest(_a, ["schema", "initialValue", "region", "language", "onCommit", "onCancel"]);
|
|
9
21
|
// bind refs
|
|
10
22
|
const editorRef = (0, react_1.useRef)(null);
|
|
11
|
-
const
|
|
12
|
-
|
|
23
|
+
const popupPropsRef = (0, react_1.useRef)(popupProps);
|
|
24
|
+
popupPropsRef.current = popupProps;
|
|
13
25
|
const onCommitRef = (0, react_1.useRef)(onCommit);
|
|
14
26
|
onCommitRef.current = onCommit;
|
|
15
27
|
const onCancelRef = (0, react_1.useRef)(onCancel);
|
|
@@ -20,11 +32,8 @@ function LinkFactory({ schema, initialValue, region, language, anchor, onCommit,
|
|
|
20
32
|
const onEdit = async () => {
|
|
21
33
|
var _a;
|
|
22
34
|
// start editor (cancel if dismissed)
|
|
23
|
-
const value = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit({
|
|
24
|
-
|
|
25
|
-
initialValue,
|
|
26
|
-
anchor: anchorRef.current
|
|
27
|
-
}));
|
|
35
|
+
const value = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit(Object.assign({ schema,
|
|
36
|
+
initialValue }, (popupPropsRef.current))));
|
|
28
37
|
if (!value) {
|
|
29
38
|
onCancelRef.current();
|
|
30
39
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Callback, Language } from '@nascentdigital/funnel-core';
|
|
2
|
+
import { Media } from '@nascentdigital/funnel-ui';
|
|
3
|
+
import { Popup } from '../../interaction';
|
|
4
|
+
export declare function MediaFactory({ schema, language, media: initialValue, onCommit: onCommitRaw, onCancel: onCancelRaw, ...popupProps }: MediaFactory.Props): import("react/jsx-runtime").JSX.Element;
|
|
5
|
+
export declare namespace MediaFactory {
|
|
6
|
+
type Props = Popup.Props.Delegated & {
|
|
7
|
+
schema: Media.Schema;
|
|
8
|
+
language: Language;
|
|
9
|
+
media?: Media.Value;
|
|
10
|
+
onCommit: Callback<Media.Value>;
|
|
11
|
+
onCancel: Callback.Void;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.MediaFactory = MediaFactory;
|
|
15
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
16
|
+
const funnel_core_1 = require("@nascentdigital/funnel-core");
|
|
17
|
+
const funnel_ui_1 = require("@nascentdigital/funnel-ui");
|
|
18
|
+
const react_1 = require("react");
|
|
19
|
+
const interaction_1 = require("../../interaction");
|
|
20
|
+
const asset_1 = require("../asset");
|
|
21
|
+
const embed_1 = require("../embed");
|
|
22
|
+
const media_1 = require("../media");
|
|
23
|
+
// component
|
|
24
|
+
function MediaFactory(_a) {
|
|
25
|
+
var { schema, language, media: initialValue, onCommit: onCommitRaw, onCancel: onCancelRaw } = _a, popupProps = __rest(_a, ["schema", "language", "media", "onCommit", "onCancel"]);
|
|
26
|
+
// bind refs
|
|
27
|
+
const menu = (0, interaction_1.useMenuController)();
|
|
28
|
+
const editorRef = (0, react_1.useRef)(null);
|
|
29
|
+
const assetPickerRef = (0, react_1.useRef)(null);
|
|
30
|
+
const assetUploaderRef = (0, react_1.useRef)(null);
|
|
31
|
+
const embeddedVideoEditorRef = (0, react_1.useRef)(null);
|
|
32
|
+
const popupPropsRef = (0, react_1.useRef)(popupProps);
|
|
33
|
+
popupPropsRef.current = popupProps;
|
|
34
|
+
const onCommitRef = (0, react_1.useRef)(onCommitRaw);
|
|
35
|
+
onCommitRef.current = onCommitRaw;
|
|
36
|
+
const onCancelRef = (0, react_1.useRef)(onCancelRaw);
|
|
37
|
+
onCancelRef.current = onCancelRaw;
|
|
38
|
+
const collectionOptions = schema.collections;
|
|
39
|
+
const getPickerArgs = (0, react_1.useCallback)(() => {
|
|
40
|
+
var _a, _b, _c;
|
|
41
|
+
return ({
|
|
42
|
+
assetPicker: (_a = assetPickerRef.current) !== null && _a !== void 0 ? _a : undefined,
|
|
43
|
+
assetUploader: (_b = assetUploaderRef.current) !== null && _b !== void 0 ? _b : undefined,
|
|
44
|
+
embeddedVideoEditor: (_c = embeddedVideoEditorRef.current) !== null && _c !== void 0 ? _c : undefined,
|
|
45
|
+
popupProps: popupPropsRef.current
|
|
46
|
+
});
|
|
47
|
+
}, []);
|
|
48
|
+
// open menu when bound
|
|
49
|
+
(0, react_1.useEffect)(() => {
|
|
50
|
+
console.debug('[MediaFactory] mounting media factory for', { schema, collectionOptions, initialValue });
|
|
51
|
+
// open menu if new
|
|
52
|
+
const popupProps = popupPropsRef.current;
|
|
53
|
+
if (!initialValue) {
|
|
54
|
+
menu.items = mediaMenuOption;
|
|
55
|
+
menu.open(popupProps.anchor);
|
|
56
|
+
}
|
|
57
|
+
// or open editor
|
|
58
|
+
else {
|
|
59
|
+
// blow up if editor isn't available (shouldn't happen)
|
|
60
|
+
const editor = editorRef.current;
|
|
61
|
+
if (!editor) {
|
|
62
|
+
throw new funnel_core_1.IllegalStateError('Unable to resolve reference to MediaEditor');
|
|
63
|
+
}
|
|
64
|
+
// start picker (cancel if nothing was picked
|
|
65
|
+
editor.edit(Object.assign({ schema, target: { type: 'media', media: initialValue } }, popupProps))
|
|
66
|
+
.then(async (media) => {
|
|
67
|
+
console.debug('[MediaFactory/onEdit] editing completed', media);
|
|
68
|
+
// cancel if there's no media
|
|
69
|
+
if (!media) {
|
|
70
|
+
onCancelRef.current();
|
|
71
|
+
}
|
|
72
|
+
// or commit change
|
|
73
|
+
else {
|
|
74
|
+
onCommitRef.current(media);
|
|
75
|
+
}
|
|
76
|
+
})
|
|
77
|
+
.catch(console.error);
|
|
78
|
+
}
|
|
79
|
+
}, [menu, schema, collectionOptions, initialValue]);
|
|
80
|
+
// helpers
|
|
81
|
+
const onEdit = async (target) => {
|
|
82
|
+
var _a;
|
|
83
|
+
// start picker (cancel if nothing was picked
|
|
84
|
+
const media = await ((_a = editorRef.current) === null || _a === void 0 ? void 0 : _a.edit(Object.assign({ schema,
|
|
85
|
+
target }, (popupPropsRef.current))));
|
|
86
|
+
// stop if cancelled
|
|
87
|
+
if (!media) {
|
|
88
|
+
onCancel();
|
|
89
|
+
}
|
|
90
|
+
// otherwise, return result
|
|
91
|
+
else {
|
|
92
|
+
onCommit(media);
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
const onMenuSelect = async (option) => {
|
|
96
|
+
// process based on option
|
|
97
|
+
const pickerArgs = getPickerArgs();
|
|
98
|
+
switch (option) {
|
|
99
|
+
case 'pick.asset':
|
|
100
|
+
case 'add.asset': {
|
|
101
|
+
// get visual (or cancel)
|
|
102
|
+
const asset = option === 'pick.asset'
|
|
103
|
+
? await pickAsset(pickerArgs)
|
|
104
|
+
: await uploadAsset(pickerArgs);
|
|
105
|
+
if (!asset) {
|
|
106
|
+
onCancel();
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
// open editor with asset
|
|
110
|
+
await onEdit(funnel_core_1.Schema.AssetField.LinkedValue.Image.filter(asset)
|
|
111
|
+
? { type: 'image', image: asset }
|
|
112
|
+
: { type: 'video.local', video: asset });
|
|
113
|
+
// stop processing
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
case 'add.url': {
|
|
117
|
+
// link video (or cancel)
|
|
118
|
+
const video = await linkVideo(pickerArgs);
|
|
119
|
+
if (!video) {
|
|
120
|
+
onCancel();
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
// open editor with video
|
|
124
|
+
await onEdit({ type: 'video.remote', video });
|
|
125
|
+
// stop processing
|
|
126
|
+
break;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
const onCommit = (media) => onCommitRef.current(media);
|
|
131
|
+
const onCancel = () => onCancelRef.current();
|
|
132
|
+
// render
|
|
133
|
+
return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(interaction_1.Menu, Object.assign({ controller: menu, onItemClick: onMenuSelect, onClose: onCancel }, popupProps)), (0, jsx_runtime_1.jsx)(media_1.MediaEditor, { ref: editorRef, language: language }), (0, jsx_runtime_1.jsx)(asset_1.AssetUploader, { ref: assetUploaderRef }), (0, jsx_runtime_1.jsx)(asset_1.AssetPicker, { ref: assetPickerRef }), (0, jsx_runtime_1.jsx)(embed_1.EmbeddedVideoEditor, { ref: embeddedVideoEditorRef, language: language })] }));
|
|
134
|
+
}
|
|
135
|
+
const mediaMenuOption = [
|
|
136
|
+
{
|
|
137
|
+
id: 'pick.asset',
|
|
138
|
+
label: 'Select from library',
|
|
139
|
+
icon: 'Image'
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
id: 'add.asset',
|
|
143
|
+
label: 'Upload asset',
|
|
144
|
+
icon: 'Upload'
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
id: 'add.url',
|
|
148
|
+
label: 'Add video link',
|
|
149
|
+
icon: 'Link'
|
|
150
|
+
}
|
|
151
|
+
];
|
|
152
|
+
const mediaAssetSchema = funnel_core_1.Schema.Field.visual({ name: 'Image or Video' });
|
|
153
|
+
async function uploadAsset(args) {
|
|
154
|
+
// launch uploader (or skip if there's no result)
|
|
155
|
+
const { assetUploader, popupProps = {} } = args;
|
|
156
|
+
const result = await (assetUploader === null || assetUploader === void 0 ? void 0 : assetUploader.upload(Object.assign({ schema: mediaAssetSchema }, popupProps)));
|
|
157
|
+
if (!result) {
|
|
158
|
+
return undefined;
|
|
159
|
+
}
|
|
160
|
+
// or switch to picking
|
|
161
|
+
else if (result === 'pick') {
|
|
162
|
+
return pickAsset(args);
|
|
163
|
+
}
|
|
164
|
+
// create new image media
|
|
165
|
+
const { value: asset } = result;
|
|
166
|
+
if (funnel_core_1.Schema.AssetField.LinkedValue.Image.filter(asset)) {
|
|
167
|
+
console.debug('[MediaFactory] creating new image media');
|
|
168
|
+
return asset;
|
|
169
|
+
}
|
|
170
|
+
// or create new video media
|
|
171
|
+
else if (funnel_core_1.Schema.AssetField.LinkedValue.Video.filter(asset)) {
|
|
172
|
+
console.debug('[MediaFactory] creating new video media');
|
|
173
|
+
return asset;
|
|
174
|
+
}
|
|
175
|
+
// or abort
|
|
176
|
+
else {
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
async function pickAsset(args) {
|
|
181
|
+
// launch picker (or cancel if nothing is selected)
|
|
182
|
+
const { assetPicker, popupProps = {} } = args;
|
|
183
|
+
const result = await (assetPicker === null || assetPicker === void 0 ? void 0 : assetPicker.pick(Object.assign({ schema: mediaAssetSchema }, popupProps)));
|
|
184
|
+
if (!result) {
|
|
185
|
+
return undefined;
|
|
186
|
+
}
|
|
187
|
+
// or launch uploader if the directive was received
|
|
188
|
+
else if (result === 'upload') {
|
|
189
|
+
return uploadAsset(args);
|
|
190
|
+
}
|
|
191
|
+
// create new image media
|
|
192
|
+
const { value: asset } = result;
|
|
193
|
+
if (funnel_core_1.Schema.AssetField.LinkedValue.Image.filter(asset)) {
|
|
194
|
+
console.debug('[MediaFactory] creating new image media');
|
|
195
|
+
return asset;
|
|
196
|
+
}
|
|
197
|
+
// or create new video media
|
|
198
|
+
else if (funnel_core_1.Schema.AssetField.LinkedValue.Video.filter(asset)) {
|
|
199
|
+
console.debug('[MediaFactory] creating new video media');
|
|
200
|
+
return asset;
|
|
201
|
+
}
|
|
202
|
+
// or abort
|
|
203
|
+
else {
|
|
204
|
+
return undefined;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
async function linkVideo({ embeddedVideoEditor, popupProps = {} }) {
|
|
208
|
+
var _a;
|
|
209
|
+
// start editor (cancel if dismissed)
|
|
210
|
+
const value = await (embeddedVideoEditor === null || embeddedVideoEditor === void 0 ? void 0 : embeddedVideoEditor.edit(Object.assign({ schema: funnel_ui_1.Media.Video.Source.schema.content.remote.schema }, popupProps)));
|
|
211
|
+
return (_a = value === null || value === void 0 ? void 0 : value.value) !== null && _a !== void 0 ? _a : undefined;
|
|
212
|
+
}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Callback, ObjectField, Schema } from '@nascentdigital/funnel-core';
|
|
2
|
-
|
|
2
|
+
import { Popup } from '../../interaction';
|
|
3
|
+
export declare function ObjectFactory({ schema, fieldId, field, onCommit, onCancel, ...popupProps }: ObjectFactory.Props): import("react/jsx-runtime").JSX.Element;
|
|
3
4
|
export declare namespace ObjectFactory {
|
|
4
|
-
type Props = {
|
|
5
|
+
type Props = Popup.Props.Delegated & {
|
|
5
6
|
schema: Schema.ObjectField;
|
|
6
7
|
fieldId?: string;
|
|
7
8
|
field?: ObjectField;
|