@alpaca-headless/alpaca-headless-nextjs 1.0.21 → 1.0.26

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 (106) hide show
  1. package/dist/cjs/components/Error.js +15 -0
  2. package/dist/cjs/components/Link.js +5 -0
  3. package/dist/cjs/components/Picture.js +3 -0
  4. package/dist/cjs/components/PictureEditor.js +4 -1
  5. package/dist/cjs/components/Placeholder.js +9 -2
  6. package/dist/cjs/components/RichText.js +4 -1
  7. package/dist/cjs/components/RichTextEditor.js +1 -4
  8. package/dist/cjs/components/Text.js +3 -2
  9. package/dist/cjs/components/TextEditor.js +1 -4
  10. package/dist/cjs/editor/AiTerminal.js +1 -1
  11. package/dist/cjs/editor/ComponentPalette.js +20 -19
  12. package/dist/cjs/editor/EditorClient.js +32 -8
  13. package/dist/cjs/editor/FieldList.js +10 -5
  14. package/dist/cjs/editor/GraphQL.js +1 -2
  15. package/dist/cjs/editor/MediaSelector.js +2 -2
  16. package/dist/editor.css +18 -9
  17. package/dist/esm/components/Error.js +10 -0
  18. package/dist/esm/components/Link.js +5 -0
  19. package/dist/esm/components/Picture.js +3 -0
  20. package/dist/esm/components/PictureEditor.js +4 -1
  21. package/dist/esm/components/Placeholder.js +9 -2
  22. package/dist/esm/components/RichText.js +4 -1
  23. package/dist/esm/components/RichTextEditor.js +1 -4
  24. package/dist/esm/components/Text.js +3 -2
  25. package/dist/esm/components/TextEditor.js +1 -4
  26. package/dist/esm/editor/AiTerminal.js +1 -1
  27. package/dist/esm/editor/ComponentPalette.js +21 -20
  28. package/dist/esm/editor/EditorClient.js +32 -8
  29. package/dist/esm/editor/FieldList.js +10 -5
  30. package/dist/esm/editor/GraphQL.js +1 -2
  31. package/dist/esm/editor/MediaSelector.js +2 -2
  32. package/dist/primereact/resources/primereact.css +3 -6301
  33. package/dist/primereact/resources/primereact.min.css +3 -1
  34. package/dist/primereact/resources/themes/arya-blue/theme.css +5554 -5814
  35. package/dist/primereact/resources/themes/arya-green/theme.css +5554 -5814
  36. package/dist/primereact/resources/themes/arya-orange/theme.css +5554 -5814
  37. package/dist/primereact/resources/themes/arya-purple/theme.css +5554 -5814
  38. package/dist/primereact/resources/themes/bootstrap4-dark-blue/theme.css +5555 -5816
  39. package/dist/primereact/resources/themes/bootstrap4-dark-purple/theme.css +5555 -5816
  40. package/dist/primereact/resources/themes/bootstrap4-light-blue/theme.css +5539 -5800
  41. package/dist/primereact/resources/themes/bootstrap4-light-purple/theme.css +5539 -5800
  42. package/dist/primereact/resources/themes/fluent-light/theme.css +5662 -5922
  43. package/dist/primereact/resources/themes/lara-dark-blue/fonts/Inter-italic.var.woff2 +0 -0
  44. package/dist/primereact/resources/themes/lara-dark-blue/fonts/Inter-roman.var.woff2 +0 -0
  45. package/dist/primereact/resources/themes/lara-dark-blue/theme.css +5568 -5809
  46. package/dist/primereact/resources/themes/lara-dark-indigo/fonts/Inter-italic.var.woff2 +0 -0
  47. package/dist/primereact/resources/themes/lara-dark-indigo/fonts/Inter-roman.var.woff2 +0 -0
  48. package/dist/primereact/resources/themes/lara-dark-indigo/theme.css +5572 -5813
  49. package/dist/primereact/resources/themes/lara-dark-purple/fonts/Inter-italic.var.woff2 +0 -0
  50. package/dist/primereact/resources/themes/lara-dark-purple/fonts/Inter-roman.var.woff2 +0 -0
  51. package/dist/primereact/resources/themes/lara-dark-purple/theme.css +5572 -5813
  52. package/dist/primereact/resources/themes/lara-dark-teal/fonts/Inter-italic.var.woff2 +0 -0
  53. package/dist/primereact/resources/themes/lara-dark-teal/fonts/Inter-roman.var.woff2 +0 -0
  54. package/dist/primereact/resources/themes/lara-dark-teal/theme.css +5572 -5813
  55. package/dist/primereact/resources/themes/lara-light-blue/fonts/Inter-italic.var.woff2 +0 -0
  56. package/dist/primereact/resources/themes/lara-light-blue/fonts/Inter-roman.var.woff2 +0 -0
  57. package/dist/primereact/resources/themes/lara-light-blue/theme.css +5567 -5808
  58. package/dist/primereact/resources/themes/lara-light-indigo/fonts/Inter-italic.var.woff2 +0 -0
  59. package/dist/primereact/resources/themes/lara-light-indigo/fonts/Inter-roman.var.woff2 +0 -0
  60. package/dist/primereact/resources/themes/lara-light-indigo/theme.css +5562 -5803
  61. package/dist/primereact/resources/themes/lara-light-purple/fonts/Inter-italic.var.woff2 +0 -0
  62. package/dist/primereact/resources/themes/lara-light-purple/fonts/Inter-roman.var.woff2 +0 -0
  63. package/dist/primereact/resources/themes/lara-light-purple/theme.css +5562 -5803
  64. package/dist/primereact/resources/themes/lara-light-teal/fonts/Inter-italic.var.woff2 +0 -0
  65. package/dist/primereact/resources/themes/lara-light-teal/fonts/Inter-roman.var.woff2 +0 -0
  66. package/dist/primereact/resources/themes/lara-light-teal/theme.css +5562 -5803
  67. package/dist/primereact/resources/themes/luna-amber/theme.css +5508 -5770
  68. package/dist/primereact/resources/themes/luna-blue/theme.css +5508 -5770
  69. package/dist/primereact/resources/themes/luna-green/theme.css +5508 -5770
  70. package/dist/primereact/resources/themes/luna-pink/theme.css +5508 -5770
  71. package/dist/primereact/resources/themes/md-dark-deeppurple/theme.css +6906 -7209
  72. package/dist/primereact/resources/themes/md-dark-indigo/theme.css +6905 -7208
  73. package/dist/primereact/resources/themes/md-light-deeppurple/theme.css +6905 -7208
  74. package/dist/primereact/resources/themes/md-light-indigo/theme.css +6905 -7208
  75. package/dist/primereact/resources/themes/mdc-dark-deeppurple/theme.css +6907 -7210
  76. package/dist/primereact/resources/themes/mdc-dark-indigo/theme.css +6904 -7207
  77. package/dist/primereact/resources/themes/mdc-light-deeppurple/theme.css +6905 -7208
  78. package/dist/primereact/resources/themes/mdc-light-indigo/theme.css +6905 -7208
  79. package/dist/primereact/resources/themes/mira/theme.css +5723 -5979
  80. package/dist/primereact/resources/themes/nano/theme.css +5544 -5805
  81. package/dist/primereact/resources/themes/nova/theme.css +5497 -5758
  82. package/dist/primereact/resources/themes/nova-accent/theme.css +5529 -5790
  83. package/dist/primereact/resources/themes/nova-alt/theme.css +5514 -5775
  84. package/dist/primereact/resources/themes/rhea/theme.css +5526 -5787
  85. package/dist/primereact/resources/themes/saga-blue/theme.css +5554 -5814
  86. package/dist/primereact/resources/themes/saga-green/theme.css +5554 -5814
  87. package/dist/primereact/resources/themes/saga-orange/theme.css +5554 -5814
  88. package/dist/primereact/resources/themes/saga-purple/theme.css +5559 -5819
  89. package/dist/primereact/resources/themes/soho-dark/theme.css +5513 -5770
  90. package/dist/primereact/resources/themes/soho-light/theme.css +5565 -5822
  91. package/dist/primereact/resources/themes/tailwind-light/theme.css +5613 -5868
  92. package/dist/primereact/resources/themes/vela-blue/theme.css +5556 -5816
  93. package/dist/primereact/resources/themes/vela-green/theme.css +5556 -5816
  94. package/dist/primereact/resources/themes/vela-orange/theme.css +5556 -5816
  95. package/dist/primereact/resources/themes/vela-purple/theme.css +5556 -5816
  96. package/dist/primereact/resources/themes/viva-dark/theme.css +5669 -5925
  97. package/dist/primereact/resources/themes/viva-light/theme.css +5668 -5924
  98. package/package.json +3 -2
  99. package/types/components/Error.d.ts +2 -0
  100. package/types/components/RichTextEditor.d.ts +1 -1
  101. package/types/components/TextEditor.d.ts +1 -1
  102. package/types/editor/AiTerminal.d.ts +1 -1
  103. package/types/editor/editContext.d.ts +2 -0
  104. package/types/layoutData.d.ts +1 -0
  105. package/dist/primereact/resources/images/color.png +0 -0
  106. package/dist/primereact/resources/images/hue.png +0 -0
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ "use client";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.ErrorFallbackWithDetails = exports.ErrorFallback = void 0;
5
+ const jsx_runtime_1 = require("react/jsx-runtime");
6
+ function ErrorFallback() {
7
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
8
+ return ((0, jsx_runtime_1.jsx)("div", { role: "alert", children: (0, jsx_runtime_1.jsx)("p", { children: "Something went wrong." }) }));
9
+ }
10
+ exports.ErrorFallback = ErrorFallback;
11
+ function ErrorFallbackWithDetails({ error }) {
12
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
13
+ return ((0, jsx_runtime_1.jsxs)("div", { role: "alert", children: [(0, jsx_runtime_1.jsx)("p", { children: "Something went wrong:" }), (0, jsx_runtime_1.jsxs)("pre", { style: { color: "red" }, children: [error.message, " ", error.stack] })] }));
14
+ }
15
+ exports.ErrorFallbackWithDetails = ErrorFallbackWithDetails;
@@ -23,6 +23,11 @@ function Link(_a) {
23
23
  var { field, children } = _a, props = __rest(_a, ["field", "children"]);
24
24
  if (!field)
25
25
  return;
26
+ if (field.jsonValue) {
27
+ field = field.jsonValue;
28
+ }
29
+ if (!field.value)
30
+ return;
26
31
  const editing = (_b = (0, __1.useAlpacaContext)().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing;
27
32
  if (editing)
28
33
  return ((0, jsx_runtime_1.jsx)(LinkEditor_1.default, Object.assign({ field: field, children: children }, props)));
@@ -34,6 +34,9 @@ const Picture = (_a) => {
34
34
  var { field, imageParams, sources, defaultVariant, renderJsonLinkedData } = _a, otherProps = __rest(_a, ["field", "imageParams", "sources", "defaultVariant", "renderJsonLinkedData"]);
35
35
  if (!field)
36
36
  return null;
37
+ if (field.jsonValue) {
38
+ field = field.jsonValue;
39
+ }
37
40
  if ((_b = (0, __1.useAlpacaContext)().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing)
38
41
  return (0, jsx_runtime_1.jsx)(PictureEditor_1.PictureEditor, Object.assign({ field: field }, otherProps));
39
42
  const variants = (_c = field.value) === null || _c === void 0 ? void 0 : _c.variants;
@@ -30,8 +30,11 @@ const PictureEditor = (_a) => {
30
30
  return;
31
31
  function imageSelected(imageId) {
32
32
  const value = (field === null || field === void 0 ? void 0 : field.value) || {};
33
- //value.variants[0].mediaId = imageId;
33
+ if (!selectedVariant)
34
+ return;
35
+ selectedVariant.mediaId = imageId;
34
36
  console.log(imageId);
37
+ console.log(JSON.stringify(value));
35
38
  if (field)
36
39
  editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, JSON.stringify(value), false);
37
40
  }
@@ -18,6 +18,8 @@ const EditFrame_1 = require("../editor/EditFrame");
18
18
  const __1 = require("..");
19
19
  const PlaceholderDropZoneHost_1 = require("../editor/PlaceholderDropZoneHost");
20
20
  const Slot_1 = __importDefault(require("./Slot"));
21
+ const react_error_boundary_1 = require("react-error-boundary");
22
+ const Error_1 = require("./Error");
21
23
  function Placeholder({ name, content, }) {
22
24
  return __awaiter(this, void 0, void 0, function* () {
23
25
  const data = yield content;
@@ -50,11 +52,16 @@ function Placeholder({ name, content, }) {
50
52
  const components = yield Promise.all(promises);
51
53
  if (context.pageContext.pageEditing) {
52
54
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [components.map(({ Component, data, parent }, index) => {
53
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(PlaceholderDropZoneHost_1.PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), (0, jsx_runtime_1.jsx)(EditFrame_1.EditFrame, { componentId: data.id, children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }, data.id)] }));
55
+ try {
56
+ return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(PlaceholderDropZoneHost_1.PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), (0, jsx_runtime_1.jsx)(EditFrame_1.EditFrame, { componentId: data.id, children: (0, jsx_runtime_1.jsx)(react_error_boundary_1.ErrorBoundary, { FallbackComponent: Error_1.ErrorFallbackWithDetails, children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }) }, data.id)] }));
57
+ }
58
+ catch (e) {
59
+ return ((0, jsx_runtime_1.jsxs)("div", { children: ["Error rendering component ", data.name, ": ", e.message] }));
60
+ }
54
61
  }), (0, jsx_runtime_1.jsx)(PlaceholderDropZoneHost_1.PlaceholderDropZoneHost, { parentName: data === null || data === void 0 ? void 0 : data.name, placeholder: placeholderData, index: components.length + 1 })] }));
55
62
  }
56
63
  else
57
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: components.map(({ Component, data }) => ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }))) }));
64
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: components.map(({ Component, data }) => ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: (0, jsx_runtime_1.jsx)(react_error_boundary_1.ErrorBoundary, { FallbackComponent: Error_1.ErrorFallback, children: (0, jsx_runtime_1.jsx)(Component, { component: data }) }) }))) }));
58
65
  });
59
66
  }
60
67
  exports.Placeholder = Placeholder;
@@ -33,9 +33,12 @@ function RichText(_a) {
33
33
  return __awaiter(this, void 0, void 0, function* () {
34
34
  if (!field)
35
35
  return;
36
+ if (field.jsonValue) {
37
+ field = field.jsonValue;
38
+ }
36
39
  const internalProps = Object.assign(Object.assign({}, props), { dangerouslySetInnerHTML: {
37
40
  __html: field.value,
38
- }, editable: editable, contentEditable: true, "data-test": "test", placeholder: '[' + field.name + ']' });
41
+ }, editable: editable, contentEditable: true, "data-test": "test", placeholder: "[" + field.name + "]" });
39
42
  if ((0, __1.useAlpacaContext)().pageContext.pageEditing)
40
43
  return (0, jsx_runtime_1.jsx)(RichTextEditor_1.RichTextEditor, Object.assign({ field: field, tag: tag }, props));
41
44
  return react_1.default.createElement(tag || "div", Object.assign(props, internalProps));
@@ -46,10 +46,7 @@ function RichTextEditor(_a) {
46
46
  if (!editContext)
47
47
  return;
48
48
  const { updateContentEditingFields } = editContext;
49
- const component = editContext.getComponentById(field.itemId);
50
- if (!component)
51
- return;
52
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
49
+ const liveField = editContext.getLiveField(field);
53
50
  (0, react_1.useEffect)(() => {
54
51
  if (editedValue != liveField.value &&
55
52
  "<p>" + editedValue + "</p>" != liveField.value) {
@@ -36,8 +36,9 @@ function Text(_a) {
36
36
  if (field.jsonValue) {
37
37
  field = field.jsonValue;
38
38
  }
39
- if ((0, __1.useAlpacaContext)().pageContext.pageEditing)
40
- return (0, jsx_runtime_1.jsx)(TextEditor_1.TextEditor, Object.assign({ field: field, tag: tag }, props));
39
+ if ((0, __1.useAlpacaContext)().pageContext.pageEditing) {
40
+ return ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(TextEditor_1.TextEditor, Object.assign({ field: field, tag: tag }, props)) }));
41
+ }
41
42
  else
42
43
  return react_1.default.createElement(tag || "div", props, field.value);
43
44
  });
@@ -46,10 +46,7 @@ function TextEditor(_a) {
46
46
  if (!editContext)
47
47
  return;
48
48
  const { updateContentEditingFields } = editContext;
49
- const component = editContext.getComponentById(field.itemId);
50
- if (!component)
51
- return;
52
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
49
+ const liveField = editContext.getLiveField(field);
53
50
  (0, react_1.useEffect)(() => {
54
51
  if (editedValue != liveField.value)
55
52
  setValue(liveField.value);
@@ -45,7 +45,7 @@ function AiTerminal({ requestRefresh, selection, }) {
45
45
  handleResponse(response, callback, false);
46
46
  if (response.editOperations.length) {
47
47
  if (new Date().getTime() - lastRefresh > 500) {
48
- requestRefresh(false);
48
+ requestRefresh("delayed");
49
49
  router.refresh();
50
50
  lastRefresh = new Date().getTime();
51
51
  }
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.ComponentPalette = void 0;
7
7
  const jsx_runtime_1 = require("react/jsx-runtime");
8
+ const tabview_1 = require("primereact/tabview");
8
9
  const __1 = require("..");
9
10
  const ContentTree_1 = __importDefault(require("./ContentTree"));
10
11
  function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
@@ -34,25 +35,25 @@ function ComponentPalette({ selection, page, dragStart, dragEnd, }) {
34
35
  // editContext!.droppedInPlaceholder(key, parseInt(index));
35
36
  // }
36
37
  // }
37
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h2", { className: "a-text-xl a-font-bold a-mb-8", children: "New" }), (0, jsx_runtime_1.jsx)("div", { className: "a-grid a-grid-cols-4 a-gap-1", children: insertOptions.map((option) => {
38
- function handleDragStart(event) {
39
- dragStart({ type: "template", templateId: option.id });
40
- event.stopPropagation();
41
- }
42
- function handleDragEnd() {
43
- dragEnd();
44
- }
45
- return ((0, jsx_runtime_1.jsxs)("div", {
46
- // onClick={directInsert}
47
- draggable: true, onDragStart: handleDragStart, onDragEnd: handleDragEnd, className: "a-p-3 a-shadow-md a-flex a-items-center a-flex-col a-gap-1 a-cursor-grab", children: [(0, jsx_runtime_1.jsx)("img", { src: option.icon, width: "32", height: "32" }), option.name] }, option.id));
48
- }) }), (0, jsx_runtime_1.jsx)("h2", { className: "a-text-xl a-font-bold a-my-8", children: "Existing" }), (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", dragStart: (itemNode) => {
49
- dragStart({
50
- type: "link-component",
51
- templateId: itemNode.templateId,
52
- componentId: itemNode.id,
53
- });
54
- }, expandIdPath: page.idPath, dragEnd: dragEnd, isDraggable: (x) => x.isComponent &&
55
- (insertOptions === null || insertOptions === void 0 ? void 0 : insertOptions.find((insertOption) => insertOption.id == x.templateId)) != undefined })] }));
38
+ return ((0, jsx_runtime_1.jsxs)(tabview_1.TabView, { children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "New", children: (0, jsx_runtime_1.jsx)("div", { className: "a-grid a-grid-cols-4 a-gap-1", children: insertOptions.map((option) => {
39
+ function handleDragStart(event) {
40
+ dragStart({ type: "template", templateId: option.id });
41
+ event.stopPropagation();
42
+ }
43
+ function handleDragEnd() {
44
+ dragEnd();
45
+ }
46
+ return ((0, jsx_runtime_1.jsxs)("div", {
47
+ // onClick={directInsert}
48
+ draggable: true, onDragStart: handleDragStart, onDragEnd: handleDragEnd, className: "a-p-3 a-shadow-md a-flex a-items-center a-flex-col a-gap-1 a-cursor-grab", children: [(0, jsx_runtime_1.jsx)("img", { src: option.icon, width: "32", height: "32" }), option.name] }, option.id));
49
+ }) }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Existing", children: (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "0DE95AE4-41AB-4D01-9EB0-67441B7C2450", dragStart: (itemNode) => {
50
+ dragStart({
51
+ type: "link-component",
52
+ templateId: itemNode.templateId,
53
+ componentId: itemNode.id,
54
+ });
55
+ }, expandIdPath: page.idPath, dragEnd: dragEnd, isDraggable: (x) => x.isComponent &&
56
+ (insertOptions === null || insertOptions === void 0 ? void 0 : insertOptions.find((insertOption) => insertOption.id == x.templateId)) != undefined }) })] }));
56
57
  }
57
58
  exports.ComponentPalette = ComponentPalette;
58
59
  function collectInsertOptions(page, placeholderKeys) {
@@ -80,6 +80,7 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
80
80
  const searchParams = (0, navigation_1.useSearchParams)();
81
81
  const [selection, setSelection] = (0, react_1.useState)([]);
82
82
  const [selectedForInsertion, setSelectedForInsertion] = (0, react_1.useState)("");
83
+ const [liveUpdatingFields, setLiveUpdatingFields] = (0, react_1.useState)([]);
83
84
  const [currentEditOperation, setCurrentEditOperation] = (0, react_1.useState)();
84
85
  const [dictionary, setDictionary] = (0, react_1.useState)(dictionaryObject);
85
86
  const [unresolvedDictionaryKeys, setUnresolvedDictionaryKeys] = (0, react_1.useState)([]);
@@ -147,23 +148,33 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
147
148
  setSelection([result.componentId]);
148
149
  }
149
150
  if (!currentEditOperation.noRefresh)
150
- requestRefresh(currentEditOperation.refreshAfterQuietPeriod);
151
+ requestRefresh(currentEditOperation.refreshAfterQuietPeriod
152
+ ? "waitForQuietPeriod"
153
+ : "delayed");
151
154
  }
152
155
  });
153
156
  sync();
154
157
  }, [currentEditOperation]);
155
- const requestRefresh = (waitForQuietPeriod) => {
156
- console.log("request refresh with " + waitForQuietPeriod);
157
- if (waitForQuietPeriod && refreshTimer) {
158
+ const requestRefresh = (mode) => {
159
+ if (mode === "immediate") {
160
+ console.log("Immediate refresh requested");
161
+ clearTimeout(refreshTimer);
162
+ router.refresh();
163
+ setRefreshCompletedFlag(!refreshCompletedFlag);
164
+ setRefreshTimer(undefined);
165
+ return;
166
+ }
167
+ console.log("request refresh with mode: " + mode);
168
+ if (mode === "waitForQuietPeriod" && refreshTimer) {
158
169
  clearTimeout(refreshTimer);
159
170
  }
160
- if (!refreshTimer || waitForQuietPeriod) {
171
+ if (!refreshTimer || mode === "waitForQuietPeriod") {
161
172
  setRefreshTimer(setTimeout(() => {
162
173
  console.log("refreshing");
163
174
  router.refresh();
164
175
  setRefreshCompletedFlag(!refreshCompletedFlag);
165
176
  setRefreshTimer(undefined);
166
- }, waitForQuietPeriod ? 2000 : 1000));
177
+ }, mode === "waitForQuietPeriod" ? 2000 : 1000));
167
178
  }
168
179
  };
169
180
  const saveAndRefresh = (callback) => __awaiter(this, void 0, void 0, function* () {
@@ -268,6 +279,16 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
268
279
  }
269
280
  });
270
281
  }
282
+ const getLiveField = (field) => {
283
+ const existingField = liveUpdatingFields.find((f) => f.id === field.id &&
284
+ f.language === field.language &&
285
+ f.version === field.version &&
286
+ f.itemId === field.itemId);
287
+ if (existingField)
288
+ return existingField;
289
+ setLiveUpdatingFields([...liveUpdatingFields, field]);
290
+ return field;
291
+ };
271
292
  const selectedComponent = selection.length === 1 && page ? getComponentById(selection[0]) : null;
272
293
  const editField = (field, value, noRefresh = true) => {
273
294
  var _a;
@@ -300,6 +321,7 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
300
321
  op.noRefresh = noRefresh;
301
322
  op.refreshAfterQuietPeriod = !noRefresh;
302
323
  op.value = value;
324
+ getLiveField(field).value = value;
303
325
  function getField(fields, id) {
304
326
  return Object.values(fields).find((f) => f.id === id);
305
327
  }
@@ -349,10 +371,12 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
349
371
  dragObject,
350
372
  dictionary,
351
373
  setDictionary,
374
+ requestRefresh,
352
375
  refreshCompletedFlag,
353
376
  unresolvedDictionaryKeys,
354
377
  setUnresolvedDictionaryKeys,
355
378
  updateContentEditingFields,
379
+ getLiveField,
356
380
  showToast: () => { },
357
381
  removeComponent: (componentId, callback) => {
358
382
  (0, confirmdialog_1.confirmDialog)({
@@ -438,7 +462,7 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
438
462
  setCurrentEditOperation(op);
439
463
  setDragObject(undefined);
440
464
  }),
441
- }, children: [(0, jsx_runtime_1.jsx)(toast_1.Toast, { ref: toast }), (0, jsx_runtime_1.jsxs)(api_1.PrimeReactProvider, { children: [(0, jsx_runtime_1.jsx)(confirmdialog_1.ConfirmDialog, {}), (0, jsx_runtime_1.jsx)(sidebar_1.Sidebar, { style: { width: "40%" }, visible: componentsPaletteVisible, position: "right", onHide: () => setComponentsPaletteVisible(false), pt: {
465
+ }, children: [(0, jsx_runtime_1.jsx)(toast_1.Toast, { ref: toast }), (0, jsx_runtime_1.jsxs)(api_1.PrimeReactProvider, { children: [(0, jsx_runtime_1.jsx)(confirmdialog_1.ConfirmDialog, {}), (0, jsx_runtime_1.jsx)(sidebar_1.Sidebar, { style: { width: "40%" }, visible: componentsPaletteVisible, position: "right", onHide: () => setComponentsPaletteVisible(false), header: "Insert component", pt: {
442
466
  mask: {
443
467
  onDragOver: () => setHidePalette(true),
444
468
  style: {
@@ -455,6 +479,6 @@ function EditorClient({ content, dictionaryObject, edit, children, }) {
455
479
  setHidePalette(false);
456
480
  }
457
481
  setSelectedForInsertion("");
458
- } })) }), (0, jsx_runtime_1.jsxs)(blockui_1.BlockUI, { blocked: uiBlocked, template: spinner, children: [(0, jsx_runtime_1.jsx)(menubar_1.Menubar, { model: menuItems, end: endContent }), (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 25, className: "alpaca-overflow-scroll", children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "a-overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: (0, jsx_runtime_1.jsx)(ComponentTree_1.ComponentTree, { page: page, selection: selection }) }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "alpaca-editor-tabs", children: (0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "a-inset-0 a-absolute", scrollable: true, children: [selectedComponent && ((0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Fields", children: [(0, jsx_runtime_1.jsx)(ComponentInfo_1.ComponentInfo, { component: selectedComponent }), (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: selectedComponent.fields })] })), selectedComponent && ((0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "GraphQL", style: { height: "100%" }, children: (0, jsx_runtime_1.jsx)(GraphQL_1.GraphQL, { component: selectedComponent }) })), (0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Page", children: [page && (0, jsx_runtime_1.jsx)(PageInfo_1.PageInfo, { page: page }), page && (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: page.fields })] }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Dictionary", children: (0, jsx_runtime_1.jsx)(DictionaryEditor_1.DictionaryEditor, { dictionary: dictionary }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Debug", children: (0, jsx_runtime_1.jsx)(Debug_1.Debug, { component: selectedComponent, page: page }) })] }) })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 55, className: "alpaca-overflow-scroll alpaca-editor-content", children: (0, jsx_runtime_1.jsx)("div", { onDragEndCapture: () => setDragObject(undefined), className: "alpaca-editor-container", children: children }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 20, children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", className: "alpaca-editor", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(EditHistory_1.EditHistory, { operations: editData === null || editData === void 0 ? void 0 : editData.operations }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(AiTerminal_1.AiTerminal, { selection: selection, requestRefresh: requestRefresh }) })] }) })] })] })] })] }));
482
+ } })) }), (0, jsx_runtime_1.jsxs)(blockui_1.BlockUI, { blocked: uiBlocked, template: spinner, children: [(0, jsx_runtime_1.jsx)(menubar_1.Menubar, { model: menuItems, end: endContent }), (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 30, className: "alpaca-overflow-scroll", children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 30, className: "a-overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: (0, jsx_runtime_1.jsx)(ComponentTree_1.ComponentTree, { page: page, selection: selection }) }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "alpaca-editor-tabs", children: (0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "a-inset-0 a-absolute", scrollable: true, children: [selectedComponent && ((0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Fields", children: [(0, jsx_runtime_1.jsx)(ComponentInfo_1.ComponentInfo, { component: selectedComponent }), (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: selectedComponent.fields })] })), selectedComponent && ((0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "GraphQL", style: { height: "100%" }, children: (0, jsx_runtime_1.jsx)(GraphQL_1.GraphQL, { component: selectedComponent }) })), (0, jsx_runtime_1.jsxs)(tabview_1.TabPanel, { header: "Page", children: [page && (0, jsx_runtime_1.jsx)(PageInfo_1.PageInfo, { page: page }), page && (0, jsx_runtime_1.jsx)(FieldList_1.FieldList, { fields: page.fields })] }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Dictionary", children: (0, jsx_runtime_1.jsx)(DictionaryEditor_1.DictionaryEditor, { dictionary: dictionary }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Debug", children: (0, jsx_runtime_1.jsx)(Debug_1.Debug, { component: selectedComponent, page: page }) })] }) })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 55, className: "alpaca-overflow-scroll alpaca-editor-content", children: (0, jsx_runtime_1.jsx)("div", { onDragEndCapture: () => setDragObject(undefined), className: "alpaca-editor-container", children: children }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 15, children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", className: "alpaca-editor", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(EditHistory_1.EditHistory, { operations: editData === null || editData === void 0 ? void 0 : editData.operations }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "overflow-hidden a-relative", children: (0, jsx_runtime_1.jsx)(AiTerminal_1.AiTerminal, { selection: selection, requestRefresh: requestRefresh }) })] }) })] })] })] })] }));
459
483
  }
460
484
  exports.EditorClient = EditorClient;
@@ -3,13 +3,16 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.FieldList = void 0;
5
5
  const jsx_runtime_1 = require("react/jsx-runtime");
6
+ const __1 = require("..");
6
7
  const inputtext_1 = require("primereact/inputtext");
7
8
  const checkbox_1 = require("primereact/checkbox");
8
9
  const SingleLineText_1 = require("./fieldTypes/SingleLineText");
9
10
  const RichTextEditor_1 = require("./fieldTypes/RichTextEditor");
10
11
  function FieldList({ fields }) {
11
- if (!fields)
12
- return;
12
+ const editContext = (0, __1.useEditContext)();
13
+ if (!editContext)
14
+ if (!fields)
15
+ return;
13
16
  if (!Array.isArray(fields))
14
17
  fields = Object.values(fields);
15
18
  const sections = fields.reduce((acc, value) => {
@@ -23,11 +26,13 @@ function FieldList({ fields }) {
23
26
  }, {});
24
27
  const sectionList = Object.values(sections);
25
28
  sectionList.sort((a, b) => b[0].sortOrder - a[0].sortOrder);
26
- return ((0, jsx_runtime_1.jsx)("div", { className: "a-p-1", children: Object.keys(sections).map((section) => ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "alpaca-fields-section-headline", children: section }), getSectionFields(sections[section])] }, section))) }));
29
+ return ((0, jsx_runtime_1.jsx)("div", { className: "a-p-1", children: Object.keys(sections).map((section) => ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("div", { className: "alpaca-fields-section-headline", children: section }), getSectionFields(sections[section], editContext)] }, section))) }));
27
30
  }
28
31
  exports.FieldList = FieldList;
29
- function getSectionFields(fields) {
30
- return fields.map((field) => ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "alpaca-field-label", children: field.name }), !field.containsFallbackValue ? ((0, jsx_runtime_1.jsx)("button", { className: "a-text-xs a-p-0 a-m-1", children: "Reset " })) : ((0, jsx_runtime_1.jsx)("button", { children: "Fallback" })), (0, jsx_runtime_1.jsx)("div", { children: getFieldEditor(field) })] }, field.id)));
32
+ function getSectionFields(fields, editContext) {
33
+ return fields
34
+ .map((field) => editContext.getLiveField(field))
35
+ .map((field) => ((0, jsx_runtime_1.jsxs)("div", { children: [(0, jsx_runtime_1.jsx)("label", { className: "alpaca-field-label", children: field.name }), !field.containsFallbackValue ? ((0, jsx_runtime_1.jsx)("button", { className: "a-text-xs a-p-0 a-m-1", children: "Reset " })) : ((0, jsx_runtime_1.jsx)("button", { children: "Fallback" })), (0, jsx_runtime_1.jsx)("div", { children: getFieldEditor(field) })] }, field.id)));
31
36
  }
32
37
  function getFieldEditor(field) {
33
38
  switch (field.type) {
@@ -79,11 +79,10 @@ function GraphQL({ component }) {
79
79
  type: "jsonValue",
80
80
  };
81
81
  const prettyQuery = (0, graphql_formatter_1.format)(query);
82
- console.log(query);
83
- console.log(prettyQuery);
84
82
  setQuery(prettyQuery);
85
83
  editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, prettyQuery, false);
86
84
  setShowSpinner(true);
85
+ editContext === null || editContext === void 0 ? void 0 : editContext.requestRefresh("immediate");
87
86
  }
88
87
  return ((0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", style: { height: "100%" }, children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 50, className: "a-relative", children: (0, jsx_runtime_1.jsxs)("div", { className: "a-absolute a-inset-0 a-flex", children: [(0, jsx_runtime_1.jsx)(inputtextarea_1.InputTextarea, { value: query, onChange: (e) => setQuery(e.target.value), className: "a-flex-1", style: { height: "100%" } }), (0, jsx_runtime_1.jsx)(button_1.Button, { icon: "pi pi-refresh" + (showSpinner ? " pi-spin" : ""), onClick: refresh, disabled: showSpinner })] }) }), (0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { className: "alpaca-editor-tabs", children: (0, jsx_runtime_1.jsxs)(tabview_1.TabView, { className: "a-inset-0 a-absolute", children: [(0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "Data", style: { height: "100%" }, className: "a-relative", children: (0, jsx_runtime_1.jsx)("div", { className: "a-m-1", children: Object.values(fieldsjsonValues).map((x) => renderItem(x)) }) }), (0, jsx_runtime_1.jsx)(tabview_1.TabPanel, { header: "JSON", className: "a-relative", style: { height: "100%" }, children: (0, jsx_runtime_1.jsx)("div", { className: "a-inset-0 a-absolute a-overflow-y-auto", children: (0, jsx_runtime_1.jsx)(react_json_pretty_1.default, { data: component.graphql }) }) })] }) })] }));
89
88
  }
@@ -43,7 +43,7 @@ const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
43
43
  }
44
44
  });
45
45
  }
46
- return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { style: { width: "60%" }, visible: visible, onHide: onHide, children: (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-flex-col a-h-full", children: [(0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { className: "a-flex-1 a-border-0", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 35, className: "alpaca-overflow-scroll", children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 70, children: (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", selectionMode: "single", selectedItemIds: selection, templateIds: ["FE5DD826-48C6-436D-B87A-7C4210C7413B"], expandIdPath: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
46
+ return ((0, jsx_runtime_1.jsx)(dialog_1.Dialog, { style: { width: "80%", height: "80%" }, visible: visible, onHide: onHide, children: (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-flex-col a-h-full", children: [(0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { className: "a-flex-1 a-border-0", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 35, className: "alpaca-overflow-scroll", children: (0, jsx_runtime_1.jsxs)(splitter_1.Splitter, { layout: "vertical", children: [(0, jsx_runtime_1.jsx)(splitter_1.SplitterPanel, { size: 70, children: (0, jsx_runtime_1.jsx)(ContentTree_1.default, { rootItemId: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", selectionMode: "single", selectedItemIds: selection, templateIds: ["FE5DD826-48C6-436D-B87A-7C4210C7413B"], expandIdPath: "3D6658D8-A0BF-4E75-B3E2-D050FABCF4E1", onSelectionChange: (selection) => {
47
47
  if (selection.length)
48
48
  setSelectedFolderId(selection[0]);
49
49
  else
@@ -53,7 +53,7 @@ const MediaSelector = ({ visible, onHide, onMediaSelected, }) => {
53
53
  onMediaSelected(t.id);
54
54
  onHide();
55
55
  }, onClick: () => setSelectedImage(t), children: [(0, jsx_runtime_1.jsx)("img", { src: t.imageUrl }), (0, jsx_runtime_1.jsx)("div", { className: "a-text-xs a-break-all", children: t.name })] }));
56
- }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-justify-end a-gap-3", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { onClick: () => onHide(), children: "Cancel" }), (0, jsx_runtime_1.jsx)(button_1.Button, { disabled: !selectedImage, onClick: () => {
56
+ }) }) })] }), (0, jsx_runtime_1.jsxs)("div", { className: "a-flex a-justify-end a-gap-3 a-mt-3", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { onClick: () => onHide(), children: "Cancel" }), (0, jsx_runtime_1.jsx)(button_1.Button, { disabled: !selectedImage, onClick: () => {
57
57
  onMediaSelected(selectedImage.id);
58
58
  onHide();
59
59
  }, children: "Select" })] })] }) }));
package/dist/editor.css CHANGED
@@ -32,15 +32,6 @@
32
32
  margin-bottom: 0.5rem;
33
33
  }
34
34
 
35
- .a-my-8 {
36
- margin-top: 2rem;
37
- margin-bottom: 2rem;
38
- }
39
-
40
- .a-mb-8 {
41
- margin-bottom: 2rem;
42
- }
43
-
44
35
  .a-ml-1 {
45
36
  margin-left: 0.25rem;
46
37
  }
@@ -49,6 +40,10 @@
49
40
  margin-left: 0.75rem;
50
41
  }
51
42
 
43
+ .a-mt-3 {
44
+ margin-top: 0.75rem;
45
+ }
46
+
52
47
  .a-flex {
53
48
  display: flex;
54
49
  }
@@ -445,6 +440,20 @@ div.p-tree .p-treenode-droppoint {
445
440
  opacity: 0;
446
441
  }
447
442
 
443
+ .p-dropdown-label.p-inputtext {
444
+ padding: 8px;
445
+ }
446
+
447
+ div.p-tabview .p-tabview-nav li .p-tabview-nav-link {
448
+ padding: 1rem;
449
+ }
450
+
451
+ .p-sidebar-header.p-sidebar-custom-header {
452
+ justify-content: space-between;
453
+ font-weight: bold;
454
+ font-size: 18px;
455
+ }
456
+
448
457
  .hover\:a-underline:hover {
449
458
  text-decoration-line: underline;
450
459
  }
@@ -0,0 +1,10 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ export function ErrorFallback() {
4
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
5
+ return (_jsx("div", { role: "alert", children: _jsx("p", { children: "Something went wrong." }) }));
6
+ }
7
+ export function ErrorFallbackWithDetails({ error }) {
8
+ // Call resetErrorBoundary() to reset the error boundary and retry the render.
9
+ return (_jsxs("div", { role: "alert", children: [_jsx("p", { children: "Something went wrong:" }), _jsxs("pre", { style: { color: "red" }, children: [error.message, " ", error.stack] })] }));
10
+ }
@@ -17,6 +17,11 @@ export function Link(_a) {
17
17
  var { field, children } = _a, props = __rest(_a, ["field", "children"]);
18
18
  if (!field)
19
19
  return;
20
+ if (field.jsonValue) {
21
+ field = field.jsonValue;
22
+ }
23
+ if (!field.value)
24
+ return;
20
25
  const editing = (_b = useAlpacaContext().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing;
21
26
  if (editing)
22
27
  return (_jsx(LinkEditor, Object.assign({ field: field, children: children }, props)));
@@ -31,6 +31,9 @@ export const Picture = (_a) => {
31
31
  var { field, imageParams, sources, defaultVariant, renderJsonLinkedData } = _a, otherProps = __rest(_a, ["field", "imageParams", "sources", "defaultVariant", "renderJsonLinkedData"]);
32
32
  if (!field)
33
33
  return null;
34
+ if (field.jsonValue) {
35
+ field = field.jsonValue;
36
+ }
34
37
  if ((_b = useAlpacaContext().pageContext) === null || _b === void 0 ? void 0 : _b.pageEditing)
35
38
  return _jsx(PictureEditor, Object.assign({ field: field }, otherProps));
36
39
  const variants = (_c = field.value) === null || _c === void 0 ? void 0 : _c.variants;
@@ -27,8 +27,11 @@ export const PictureEditor = (_a) => {
27
27
  return;
28
28
  function imageSelected(imageId) {
29
29
  const value = (field === null || field === void 0 ? void 0 : field.value) || {};
30
- //value.variants[0].mediaId = imageId;
30
+ if (!selectedVariant)
31
+ return;
32
+ selectedVariant.mediaId = imageId;
31
33
  console.log(imageId);
34
+ console.log(JSON.stringify(value));
32
35
  if (field)
33
36
  editContext === null || editContext === void 0 ? void 0 : editContext.editField(field, JSON.stringify(value), false);
34
37
  }
@@ -12,6 +12,8 @@ import { EditFrame } from "../editor/EditFrame";
12
12
  import { useAlpacaContext, } from "..";
13
13
  import { PlaceholderDropZoneHost } from "../editor/PlaceholderDropZoneHost";
14
14
  import Slot from "./Slot";
15
+ import { ErrorBoundary } from "react-error-boundary";
16
+ import { ErrorFallbackWithDetails, ErrorFallback } from "./Error";
15
17
  export function Placeholder({ name, content, }) {
16
18
  return __awaiter(this, void 0, void 0, function* () {
17
19
  const data = yield content;
@@ -44,11 +46,16 @@ export function Placeholder({ name, content, }) {
44
46
  const components = yield Promise.all(promises);
45
47
  if (context.pageContext.pageEditing) {
46
48
  return (_jsxs(_Fragment, { children: [components.map(({ Component, data, parent }, index) => {
47
- return (_jsxs(_Fragment, { children: [_jsx(PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), _jsx(EditFrame, { componentId: data.id, children: _jsx(Component, { component: data }) }, data.id)] }));
49
+ try {
50
+ return (_jsxs(_Fragment, { children: [_jsx(PlaceholderDropZoneHost, { parentName: parent === null || parent === void 0 ? void 0 : parent.name, placeholder: placeholderData, index: index + 1 }), _jsx(EditFrame, { componentId: data.id, children: _jsx(ErrorBoundary, { FallbackComponent: ErrorFallbackWithDetails, children: _jsx(Component, { component: data }) }) }, data.id)] }));
51
+ }
52
+ catch (e) {
53
+ return (_jsxs("div", { children: ["Error rendering component ", data.name, ": ", e.message] }));
54
+ }
48
55
  }), _jsx(PlaceholderDropZoneHost, { parentName: data === null || data === void 0 ? void 0 : data.name, placeholder: placeholderData, index: components.length + 1 })] }));
49
56
  }
50
57
  else
51
- return (_jsx(_Fragment, { children: components.map(({ Component, data }) => (_jsx(_Fragment, { children: _jsx(Component, { component: data }) }))) }));
58
+ return (_jsx(_Fragment, { children: components.map(({ Component, data }) => (_jsx(_Fragment, { children: _jsx(ErrorBoundary, { FallbackComponent: ErrorFallback, children: _jsx(Component, { component: data }) }) }))) }));
52
59
  });
53
60
  }
54
61
  function ComponentNotFound({ component }) {
@@ -27,9 +27,12 @@ export function RichText(_a) {
27
27
  return __awaiter(this, void 0, void 0, function* () {
28
28
  if (!field)
29
29
  return;
30
+ if (field.jsonValue) {
31
+ field = field.jsonValue;
32
+ }
30
33
  const internalProps = Object.assign(Object.assign({}, props), { dangerouslySetInnerHTML: {
31
34
  __html: field.value,
32
- }, editable: editable, contentEditable: true, "data-test": "test", placeholder: '[' + field.name + ']' });
35
+ }, editable: editable, contentEditable: true, "data-test": "test", placeholder: "[" + field.name + "]" });
33
36
  if (useAlpacaContext().pageContext.pageEditing)
34
37
  return _jsx(RichTextEditor, Object.assign({ field: field, tag: tag }, props));
35
38
  return React.createElement(tag || "div", Object.assign(props, internalProps));
@@ -20,10 +20,7 @@ export function RichTextEditor(_a) {
20
20
  if (!editContext)
21
21
  return;
22
22
  const { updateContentEditingFields } = editContext;
23
- const component = editContext.getComponentById(field.itemId);
24
- if (!component)
25
- return;
26
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
23
+ const liveField = editContext.getLiveField(field);
27
24
  useEffect(() => {
28
25
  if (editedValue != liveField.value &&
29
26
  "<p>" + editedValue + "</p>" != liveField.value) {
@@ -30,8 +30,9 @@ export function Text(_a) {
30
30
  if (field.jsonValue) {
31
31
  field = field.jsonValue;
32
32
  }
33
- if (useAlpacaContext().pageContext.pageEditing)
34
- return _jsx(TextEditor, Object.assign({ field: field, tag: tag }, props));
33
+ if (useAlpacaContext().pageContext.pageEditing) {
34
+ return (_jsx("div", { children: _jsx(TextEditor, Object.assign({ field: field, tag: tag }, props)) }));
35
+ }
35
36
  else
36
37
  return React.createElement(tag || "div", props, field.value);
37
38
  });
@@ -20,10 +20,7 @@ export function TextEditor(_a) {
20
20
  if (!editContext)
21
21
  return;
22
22
  const { updateContentEditingFields } = editContext;
23
- const component = editContext.getComponentById(field.itemId);
24
- if (!component)
25
- return;
26
- const liveField = Object.values(component.fields).find((f) => f.id == field.id);
23
+ const liveField = editContext.getLiveField(field);
27
24
  useEffect(() => {
28
25
  if (editedValue != liveField.value)
29
26
  setValue(liveField.value);
@@ -42,7 +42,7 @@ export function AiTerminal({ requestRefresh, selection, }) {
42
42
  handleResponse(response, callback, false);
43
43
  if (response.editOperations.length) {
44
44
  if (new Date().getTime() - lastRefresh > 500) {
45
- requestRefresh(false);
45
+ requestRefresh("delayed");
46
46
  router.refresh();
47
47
  lastRefresh = new Date().getTime();
48
48
  }