@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.
Files changed (185) hide show
  1. package/dist/EditorApp.js +1 -1
  2. package/dist/EditorRoutes.js +7 -5
  3. package/dist/changesets/screens/ChangeSetViewer.js +1 -1
  4. package/dist/changesets/screens/ChangeSetsExplorer.js +1 -2
  5. package/dist/collection/hooks/CollectionController.d.ts +5 -16
  6. package/dist/collection/hooks/CollectionController.js +18 -37
  7. package/dist/collection/hooks/ICollectionController.d.ts +24 -0
  8. package/dist/collection/hooks/ICollectionController.js +20 -0
  9. package/dist/collection/hooks/index.d.ts +1 -0
  10. package/dist/collection/hooks/index.js +1 -0
  11. package/dist/collection/hooks/useCollectionController.d.ts +3 -3
  12. package/dist/collection/screens/CollectionEditor.js +2 -2
  13. package/dist/components.d.ts +15 -3
  14. package/dist/components.js +18 -3
  15. package/dist/core/components/feedback/dialog/MinimalDialogLayout.js +1 -1
  16. package/dist/core/components/fields/BooleanField.d.ts +2 -1
  17. package/dist/core/components/fields/BooleanField.js +2 -2
  18. package/dist/core/components/fields/DateField.d.ts +2 -1
  19. package/dist/core/components/fields/DateField.js +2 -2
  20. package/dist/core/components/fields/DynamicPagesEditor.d.ts +2 -1
  21. package/dist/core/components/fields/DynamicPagesEditor.js +1 -1
  22. package/dist/core/components/fields/EnumField.d.ts +2 -1
  23. package/dist/core/components/fields/EnumField.js +2 -2
  24. package/dist/core/components/fields/FieldCard.d.ts +1 -0
  25. package/dist/core/components/fields/FieldCard.js +8 -1
  26. package/dist/core/components/fields/FieldEditor.d.ts +2 -1
  27. package/dist/core/components/fields/FieldEditor.js +11 -11
  28. package/dist/core/components/fields/FieldLayout.d.ts +2 -1
  29. package/dist/core/components/fields/FieldLayout.js +3 -3
  30. package/dist/core/components/fields/ListEditor.d.ts +2 -1
  31. package/dist/core/components/fields/ListEditor.js +5 -6
  32. package/dist/core/components/fields/OptInField.d.ts +2 -1
  33. package/dist/core/components/fields/OptInField.js +43 -3
  34. package/dist/core/components/fields/RichTextEditor.js +1 -1
  35. package/dist/core/components/fields/RichTextField.d.ts +2 -1
  36. package/dist/core/components/fields/RichTextField.js +3 -5
  37. package/dist/core/components/fields/TextField.d.ts +2 -0
  38. package/dist/core/components/fields/TextField.js +2 -2
  39. package/dist/core/components/fields/TimestampField.d.ts +2 -1
  40. package/dist/core/components/fields/TimestampField.js +3 -3
  41. package/dist/core/components/fields/asset/AssetEditor.d.ts +1 -2
  42. package/dist/core/components/fields/asset/AssetEditor.js +29 -49
  43. package/dist/core/components/fields/asset/AssetPicker.js +6 -6
  44. package/dist/core/components/fields/asset/AssetUploader.d.ts +1 -2
  45. package/dist/core/components/fields/asset/AssetUploader.js +39 -35
  46. package/dist/core/components/fields/asset/preview/VideoPreview.js +16 -11
  47. package/dist/core/components/fields/asset/useAssetFields.d.ts +2 -17
  48. package/dist/core/components/fields/asset/useAssetFields.js +0 -21
  49. package/dist/core/components/fields/collection/CollectionEditor.d.ts +2 -1
  50. package/dist/core/components/fields/collection/CollectionEditor.js +18 -4
  51. package/dist/core/components/fields/collection/CollectionPicker.d.ts +2 -2
  52. package/dist/core/components/fields/collection/CollectionPicker.js +3 -4
  53. package/dist/core/components/fields/dynamicPages/PagePriorityDialog.js +1 -1
  54. package/dist/core/components/fields/embed/EmbeddedVideoEditor.d.ts +2 -2
  55. package/dist/core/components/fields/embed/EmbeddedVideoEditor.js +50 -31
  56. package/dist/core/components/fields/factories/AssetFactory.d.ts +3 -3
  57. package/dist/core/components/fields/factories/AssetFactory.js +18 -13
  58. package/dist/core/components/fields/factories/CollectionFactory.d.ts +3 -3
  59. package/dist/core/components/fields/factories/CollectionFactory.js +20 -13
  60. package/dist/core/components/fields/factories/EmbeddedVideoFactory.d.ts +3 -3
  61. package/dist/core/components/fields/factories/EmbeddedVideoFactory.js +17 -8
  62. package/dist/core/components/fields/factories/FieldValueFactory.d.ts +7 -5
  63. package/dist/core/components/fields/factories/FieldValueFactory.js +57 -13
  64. package/dist/core/components/fields/factories/LinkFactory.d.ts +3 -3
  65. package/dist/core/components/fields/factories/LinkFactory.js +17 -8
  66. package/dist/core/components/fields/factories/MediaFactory.d.ts +13 -0
  67. package/dist/core/components/fields/factories/MediaFactory.js +212 -0
  68. package/dist/core/components/fields/factories/ObjectFactory.d.ts +3 -2
  69. package/dist/core/components/fields/factories/ObjectFactory.js +16 -2
  70. package/dist/core/components/fields/factories/TextFactory.d.ts +3 -3
  71. package/dist/core/components/fields/factories/TextFactory.js +16 -10
  72. package/dist/core/components/fields/link/LinkEditor.d.ts +2 -2
  73. package/dist/core/components/fields/link/LinkEditor.js +18 -6
  74. package/dist/core/components/fields/list/CreateFieldButton.js +1 -1
  75. package/dist/core/components/fields/media/MediaCard.d.ts +7 -0
  76. package/dist/core/components/fields/media/MediaCard.js +92 -0
  77. package/dist/core/components/fields/media/MediaEditor.d.ts +36 -0
  78. package/dist/core/components/fields/media/MediaEditor.js +264 -0
  79. package/dist/core/components/fields/media/index.d.ts +2 -0
  80. package/dist/core/components/fields/media/index.js +18 -0
  81. package/dist/core/components/fields/object/ObjectEditor.d.ts +2 -1
  82. package/dist/core/components/fields/object/ObjectEditor.js +16 -2
  83. package/dist/core/components/fields/page/PagePicker.js +1 -1
  84. package/dist/core/components/interaction/Combobox.js +1 -1
  85. package/dist/core/components/interaction/MultiSelectControls.js +2 -5
  86. package/dist/core/components/interaction/Popup.d.ts +11 -7
  87. package/dist/core/components/interaction/Popup.js +8 -6
  88. package/dist/core/components/interaction/QuickEditor.js +1 -1
  89. package/dist/core/components/interaction/QuickInput.d.ts +2 -4
  90. package/dist/core/components/interaction/QuickInput.js +6 -2
  91. package/dist/core/components/interaction/QuickPicker.js +1 -1
  92. package/dist/core/components/interaction/SideSheet.js +1 -1
  93. package/dist/core/components/interaction/centersheet/CenterSheet.js +7 -1
  94. package/dist/core/components/interaction/centersheet/CenterSheetContainer.js +3 -1
  95. package/dist/core/components/interaction/menu/Menu.d.ts +8 -19
  96. package/dist/core/components/interaction/menu/Menu.js +26 -60
  97. package/dist/core/components/interaction/menu/useMenuController.d.ts +4 -2
  98. package/dist/core/components/interaction/menu/useMenuController.js +4 -1
  99. package/dist/core/components/transitions/FadeIn.js +1 -1
  100. package/dist/core/components/visuals/Icon.d.ts +1 -1
  101. package/dist/core/components/visuals/Icon.js +3 -0
  102. package/dist/core/containers/AssetRepositoryContainer.d.ts +2 -0
  103. package/dist/core/containers/AssetRepositoryContainer.js +18 -0
  104. package/dist/core/containers/CollectionRepositoryContainer.d.ts +2 -0
  105. package/dist/core/containers/CollectionRepositoryContainer.js +18 -0
  106. package/dist/core/containers/PageRepositoryContainer.d.ts +2 -0
  107. package/dist/core/containers/PageRepositoryContainer.js +18 -0
  108. package/dist/core/containers/index.d.ts +3 -0
  109. package/dist/core/containers/index.js +19 -0
  110. package/dist/core/domain/Block.js +2 -1
  111. package/dist/core/domain/BlockConfiguration.d.ts +4 -1
  112. package/dist/core/domain/BlockConfiguration.js +59 -3
  113. package/dist/core/domain/Collection.d.ts +7 -25
  114. package/dist/core/domain/Collection.js +2 -16
  115. package/dist/core/domain/CollectionBrowser.d.ts +3 -2
  116. package/dist/core/domain/CollectionBrowser.js +3 -3
  117. package/dist/core/domain/CollectionFieldProxy.d.ts +12 -8
  118. package/dist/core/domain/CollectionFieldProxy.js +15 -9
  119. package/dist/core/domain/CollectionGroup.d.ts +0 -5
  120. package/dist/core/domain/CollectionGroup.js +0 -7
  121. package/dist/core/domain/CollectionSummary.d.ts +2 -2
  122. package/dist/core/domain/Collections.d.ts +3 -3
  123. package/dist/core/domain/Collections.js +4 -6
  124. package/dist/core/domain/ICollection.d.ts +72 -0
  125. package/dist/core/domain/ICollection.js +20 -0
  126. package/dist/core/domain/IPage.d.ts +16 -1
  127. package/dist/core/domain/Page.js +2 -2
  128. package/dist/core/domain/Pages.js +4 -6
  129. package/dist/core/domain/SectionBlock.js +2 -1
  130. package/dist/core/domain/Site.d.ts +4 -4
  131. package/dist/core/domain/Site.js +3 -5
  132. package/dist/core/domain/index.d.ts +1 -1
  133. package/dist/core/domain/index.js +1 -1
  134. package/dist/core/hooks/index.d.ts +4 -3
  135. package/dist/core/hooks/index.js +4 -3
  136. package/dist/core/hooks/useAssetRepository.d.ts +3 -0
  137. package/dist/core/hooks/useAssetRepository.js +11 -0
  138. package/dist/core/hooks/useCollection.d.ts +4 -4
  139. package/dist/core/hooks/useCollectionRepository.d.ts +3 -2
  140. package/dist/core/hooks/useCollectionRepository.js +4 -4
  141. package/dist/core/hooks/useCollections.js +4 -0
  142. package/dist/core/hooks/usePageRepository.d.ts +3 -2
  143. package/dist/core/hooks/usePageRepository.js +4 -4
  144. package/dist/core/hooks/useSite.js +4 -0
  145. package/dist/core/hooks/useTempFields.d.ts +2 -3
  146. package/dist/core/index.d.ts +1 -0
  147. package/dist/core/index.js +1 -0
  148. package/dist/core/repository/AssetRepository.d.ts +10 -0
  149. package/dist/core/repository/AssetRepository.js +22 -0
  150. package/dist/core/repository/CollectionRepository.d.ts +22 -21
  151. package/dist/core/repository/CollectionRepository.js +23 -161
  152. package/dist/core/repository/CollectionSerializer.d.ts +4 -1
  153. package/dist/core/repository/CollectionSerializer.js +3 -3
  154. package/dist/core/repository/IAssetRepository.d.ts +25 -0
  155. package/dist/core/repository/ICollectionRepository.d.ts +61 -0
  156. package/dist/core/repository/ICollectionRepository.js +2 -0
  157. package/dist/core/repository/IPageRepository.d.ts +40 -0
  158. package/dist/core/repository/IPageRepository.js +2 -0
  159. package/dist/core/repository/PageRepository.d.ts +5 -8
  160. package/dist/core/repository/PageRepository.js +7 -280
  161. package/dist/core/repository/SerializeCollectionUpdate.d.ts +8 -0
  162. package/dist/core/repository/SerializeCollectionUpdate.js +168 -0
  163. package/dist/core/repository/SerializePageUpdate.d.ts +10 -0
  164. package/dist/core/repository/SerializePageUpdate.js +292 -0
  165. package/dist/core/repository/index.d.ts +4 -0
  166. package/dist/core/repository/index.js +4 -0
  167. package/dist/core/splash/SplashContainer.d.ts +4 -2
  168. package/dist/core/splash/SplashContainer.js +3 -3
  169. package/dist/dashboard/screens/Dashboard.js +1 -1
  170. package/dist/devtools/screens/Devtools.js +1 -1
  171. package/dist/explore/components/CreatePageDialog.d.ts +2 -2
  172. package/dist/explore/screens/CollectionExplorer.js +1 -1
  173. package/dist/explore/screens/CollectionsExplorer.js +1 -1
  174. package/dist/explore/screens/PageExplorer.js +1 -1
  175. package/dist/explore/screens/SiteExplorer.js +1 -1
  176. package/dist/page/components/BlockEditor.js +1 -1
  177. package/dist/page/components/SettingsEditor.js +0 -7
  178. package/dist/page/components/config/BlockConfigButton.js +71 -14
  179. package/dist/page/screens/PageEditor.js +1 -1
  180. package/dist/styles/index.css +24 -20
  181. package/dist/styles/tailwind.js +1 -0
  182. package/dist/users/screens/UserExplorer.js +1 -1
  183. package/package.json +2 -2
  184. package/dist/core/domain/TranslateSchema.d.ts +0 -7
  185. /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({ schema, assetId, anchor, onCommit, onCancel: onCancelRaw }) {
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 anchorRef = (0, react_1.useRef)(anchor);
18
- anchorRef.current = anchor;
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(anchorRef.current);
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
- export declare function CollectionFactory({ schema, language, collection: initialValue, anchor, onCommit, onCancel: onCancelRaw }: CollectionFactory.Props): import("react/jsx-runtime").JSX.Element;
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({ schema, language, collection: initialValue, anchor, onCommit, onCancel: onCancelRaw }) {
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 anchorRef = (0, react_1.useRef)(anchor);
16
- anchorRef.current = anchor;
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(anchorRef.current);
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
- schema,
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
- schema,
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
- export declare function EmbeddedVideoFactory({ schema, initialValue, language, anchor, onCommit, onCancel }: EmbeddedVideoFactory.Props): import("react/jsx-runtime").JSX.Element;
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({ schema, initialValue, language, anchor, onCommit, onCancel }) {
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 anchorRef = (0, react_1.useRef)(anchor);
12
- anchorRef.current = anchor;
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
- schema,
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
- export declare function FieldValueFactory<T extends Schema.Field.Type>({ anchor, itemSchema, field, onCommit, onCancel }: FieldValueFactory.Props<T>): import("react/jsx-runtime").JSX.Element | null;
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
- anchor: string;
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({ anchor, itemSchema, field, onCommit = funnel_core_1.Fn.NoOp, onCancel = funnel_core_1.Fn.NoOp }) {
16
- var _a, _b, _c, _d, _e, _f;
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 = (_a = page === null || page === void 0 ? void 0 : page.region) !== null && _a !== void 0 ? _a : funnel_core_1.RegionsConfig.getDefaultRegion(brandConfig.regionalization);
22
- const language = (_c = (_b = page === null || page === void 0 ? void 0 : page.language) !== null && _b !== void 0 ? _b : collection === null || collection === void 0 ? void 0 : collection.language) !== null && _c !== void 0 ? _c : funnel_core_1.RegionsConfig.getDefaultLanguage(brandConfig.regionalization);
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, anchor: anchor, onCommit: item => commit(item), onCancel: cancel }));
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, anchor: anchor, onCommit: item => commit(item), onCancel: cancel }));
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, anchor: anchor, onCommit: item => commit(item), onCancel: cancel }));
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: (_e = (_d = field === null || field === void 0 ? void 0 : field.value) === null || _d === void 0 ? void 0 : _d.value) === null || _e === void 0 ? void 0 : _e.id, anchor: anchor, onCommit: item => commit(item), onCancel: cancel }));
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
- return ((0, jsx_runtime_1.jsx)(CollectionFactory_1.CollectionFactory, { schema: itemSchema, language: language, collection: (_f = field === null || field === void 0 ? void 0 : field.value) === null || _f === void 0 ? void 0 : _f.value, anchor: anchor, onCommit: item => commit(item), onCancel: cancel }));
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
- export declare function LinkFactory({ schema, initialValue, region, language, anchor, onCommit, onCancel }: LinkFactory.Props): import("react/jsx-runtime").JSX.Element;
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({ schema, initialValue, region, language, anchor, onCommit, onCancel }) {
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 anchorRef = (0, react_1.useRef)(anchor);
12
- anchorRef.current = anchor;
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
- schema,
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
- export declare function ObjectFactory({ schema, field, onCommit, onCancel }: ObjectFactory.Props): import("react/jsx-runtime").JSX.Element;
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;