@contentstack/live-preview-utils 3.1.2 → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +6 -2
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs.map +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.js +6 -2
- package/dist/legacy/preview/contentstack-live-preview-HOC.js.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +26 -17
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.js +26 -17
- package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/legacy/visualBuilder/components/addInstanceButton.cjs +39 -11
- package/dist/legacy/visualBuilder/components/addInstanceButton.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/addInstanceButton.d.cts +5 -0
- package/dist/legacy/visualBuilder/components/addInstanceButton.d.ts +5 -0
- package/dist/legacy/visualBuilder/components/addInstanceButton.js +39 -11
- package/dist/legacy/visualBuilder/components/addInstanceButton.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.cjs +8 -2
- package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.d.cts +9 -3
- package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.d.ts +9 -3
- package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.js +8 -2
- package/dist/legacy/visualBuilder/generators/generateAddInstanceButtons.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +7 -0
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.js +7 -0
- package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/enableInlineEditing.cjs +94 -0
- package/dist/legacy/visualBuilder/utils/enableInlineEditing.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/enableInlineEditing.d.cts +11 -0
- package/dist/legacy/visualBuilder/utils/enableInlineEditing.d.ts +11 -0
- package/dist/legacy/visualBuilder/utils/enableInlineEditing.js +74 -0
- package/dist/legacy/visualBuilder/utils/enableInlineEditing.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +20 -110
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.d.cts +3 -5
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.d.ts +3 -5
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +18 -114
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleInlineEditableField.cjs +81 -0
- package/dist/legacy/visualBuilder/utils/handleInlineEditableField.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/handleInlineEditableField.d.cts +16 -0
- package/dist/legacy/visualBuilder/utils/handleInlineEditableField.d.ts +16 -0
- package/dist/legacy/visualBuilder/utils/handleInlineEditableField.js +58 -0
- package/dist/legacy/visualBuilder/utils/handleInlineEditableField.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/isFieldMultiple.cjs +35 -0
- package/dist/legacy/visualBuilder/utils/isFieldMultiple.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/isFieldMultiple.d.cts +6 -0
- package/dist/legacy/visualBuilder/utils/isFieldMultiple.d.ts +6 -0
- package/dist/legacy/visualBuilder/utils/isFieldMultiple.js +12 -0
- package/dist/legacy/visualBuilder/utils/isFieldMultiple.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/multipleElementAddButton.cjs +14 -20
- package/dist/legacy/visualBuilder/utils/multipleElementAddButton.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/multipleElementAddButton.d.cts +1 -1
- package/dist/legacy/visualBuilder/utils/multipleElementAddButton.d.ts +1 -1
- package/dist/legacy/visualBuilder/utils/multipleElementAddButton.js +14 -20
- package/dist/legacy/visualBuilder/utils/multipleElementAddButton.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/pasteAsPlainText.cjs +44 -0
- package/dist/legacy/visualBuilder/utils/pasteAsPlainText.cjs.map +1 -0
- package/dist/legacy/visualBuilder/utils/pasteAsPlainText.d.cts +5 -0
- package/dist/legacy/visualBuilder/utils/pasteAsPlainText.d.ts +5 -0
- package/dist/legacy/visualBuilder/utils/pasteAsPlainText.js +21 -0
- package/dist/legacy/visualBuilder/utils/pasteAsPlainText.js.map +1 -0
- package/dist/legacy/visualBuilder/utils/types/index.types.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/types/index.types.d.cts +6 -1
- package/dist/legacy/visualBuilder/utils/types/index.types.d.ts +6 -1
- package/dist/legacy/visualBuilder/utils/types/index.types.js.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs +9 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +2 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +2 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.js +9 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs +6 -2
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs.map +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.js +6 -2
- package/dist/modern/preview/contentstack-live-preview-HOC.js.map +1 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs +26 -16
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.js +26 -16
- package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/modern/visualBuilder/components/addInstanceButton.cjs +38 -11
- package/dist/modern/visualBuilder/components/addInstanceButton.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/addInstanceButton.d.cts +5 -0
- package/dist/modern/visualBuilder/components/addInstanceButton.d.ts +5 -0
- package/dist/modern/visualBuilder/components/addInstanceButton.js +38 -11
- package/dist/modern/visualBuilder/components/addInstanceButton.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.cjs +8 -2
- package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.d.cts +9 -3
- package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.d.ts +9 -3
- package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.js +8 -2
- package/dist/modern/visualBuilder/generators/generateAddInstanceButtons.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs +7 -0
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.js +7 -0
- package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/modern/visualBuilder/utils/enableInlineEditing.cjs +94 -0
- package/dist/modern/visualBuilder/utils/enableInlineEditing.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/enableInlineEditing.d.cts +11 -0
- package/dist/modern/visualBuilder/utils/enableInlineEditing.d.ts +11 -0
- package/dist/modern/visualBuilder/utils/enableInlineEditing.js +74 -0
- package/dist/modern/visualBuilder/utils/enableInlineEditing.js.map +1 -0
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +20 -110
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.d.cts +3 -5
- package/dist/modern/visualBuilder/utils/handleIndividualFields.d.ts +3 -5
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js +18 -114
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/modern/visualBuilder/utils/handleInlineEditableField.cjs +81 -0
- package/dist/modern/visualBuilder/utils/handleInlineEditableField.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/handleInlineEditableField.d.cts +16 -0
- package/dist/modern/visualBuilder/utils/handleInlineEditableField.d.ts +16 -0
- package/dist/modern/visualBuilder/utils/handleInlineEditableField.js +58 -0
- package/dist/modern/visualBuilder/utils/handleInlineEditableField.js.map +1 -0
- package/dist/modern/visualBuilder/utils/isFieldMultiple.cjs +35 -0
- package/dist/modern/visualBuilder/utils/isFieldMultiple.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/isFieldMultiple.d.cts +6 -0
- package/dist/modern/visualBuilder/utils/isFieldMultiple.d.ts +6 -0
- package/dist/modern/visualBuilder/utils/isFieldMultiple.js +12 -0
- package/dist/modern/visualBuilder/utils/isFieldMultiple.js.map +1 -0
- package/dist/modern/visualBuilder/utils/multipleElementAddButton.cjs +14 -18
- package/dist/modern/visualBuilder/utils/multipleElementAddButton.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/multipleElementAddButton.d.cts +1 -1
- package/dist/modern/visualBuilder/utils/multipleElementAddButton.d.ts +1 -1
- package/dist/modern/visualBuilder/utils/multipleElementAddButton.js +14 -18
- package/dist/modern/visualBuilder/utils/multipleElementAddButton.js.map +1 -1
- package/dist/modern/visualBuilder/utils/pasteAsPlainText.cjs +44 -0
- package/dist/modern/visualBuilder/utils/pasteAsPlainText.cjs.map +1 -0
- package/dist/modern/visualBuilder/utils/pasteAsPlainText.d.cts +5 -0
- package/dist/modern/visualBuilder/utils/pasteAsPlainText.d.ts +5 -0
- package/dist/modern/visualBuilder/utils/pasteAsPlainText.js +21 -0
- package/dist/modern/visualBuilder/utils/pasteAsPlainText.js.map +1 -0
- package/dist/modern/visualBuilder/utils/types/index.types.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/types/index.types.d.cts +6 -1
- package/dist/modern/visualBuilder/utils/types/index.types.d.ts +6 -1
- package/dist/modern/visualBuilder/utils/types/index.types.js.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.cjs +9 -1
- package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.d.cts +2 -1
- package/dist/modern/visualBuilder/visualBuilder.style.d.ts +2 -1
- package/dist/modern/visualBuilder/visualBuilder.style.js +9 -1
- package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { VisualBuilderCslpEventDetails } from '../types/visualBuilder.types.cjs';
|
|
2
|
+
import { VisualBuilderEditContext } from './types/index.types.cjs';
|
|
2
3
|
import '../../cslp/types/cslp.types.cjs';
|
|
4
|
+
import '../../cms/types/contentTypeSchema.types.cjs';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* It handles all the fields based on their data type and its "multiple" property.
|
|
6
8
|
* @param eventDetails The event details object that contain cslp and field metadata.
|
|
7
9
|
* @param elements The elements object that contain the visual builder wrapper.
|
|
8
10
|
*/
|
|
9
|
-
declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements:
|
|
10
|
-
visualBuilderContainer: HTMLDivElement;
|
|
11
|
-
resizeObserver: ResizeObserver;
|
|
12
|
-
lastEditedField: Element | null;
|
|
13
|
-
}): Promise<void>;
|
|
11
|
+
declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements: VisualBuilderEditContext): Promise<void>;
|
|
14
12
|
declare function cleanIndividualFieldResidual(elements: {
|
|
15
13
|
overlayWrapper: HTMLDivElement;
|
|
16
14
|
visualBuilderContainer: HTMLDivElement | null;
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
import { VisualBuilderCslpEventDetails } from '../types/visualBuilder.types.js';
|
|
2
|
+
import { VisualBuilderEditContext } from './types/index.types.js';
|
|
2
3
|
import '../../cslp/types/cslp.types.js';
|
|
4
|
+
import '../../cms/types/contentTypeSchema.types.js';
|
|
3
5
|
|
|
4
6
|
/**
|
|
5
7
|
* It handles all the fields based on their data type and its "multiple" property.
|
|
6
8
|
* @param eventDetails The event details object that contain cslp and field metadata.
|
|
7
9
|
* @param elements The elements object that contain the visual builder wrapper.
|
|
8
10
|
*/
|
|
9
|
-
declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements:
|
|
10
|
-
visualBuilderContainer: HTMLDivElement;
|
|
11
|
-
resizeObserver: ResizeObserver;
|
|
12
|
-
lastEditedField: Element | null;
|
|
13
|
-
}): Promise<void>;
|
|
11
|
+
declare function handleIndividualFields(eventDetails: VisualBuilderCslpEventDetails, elements: VisualBuilderEditContext): Promise<void>;
|
|
14
12
|
declare function cleanIndividualFieldResidual(elements: {
|
|
15
13
|
overlayWrapper: HTMLDivElement;
|
|
16
14
|
visualBuilderContainer: HTMLDivElement | null;
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
import "../../chunk-5WRI5ZAA.js";
|
|
2
2
|
|
|
3
3
|
// src/visualBuilder/utils/handleIndividualFields.ts
|
|
4
|
-
import { debounce, throttle } from "lodash-es";
|
|
5
4
|
import { VisualBuilder } from "../index.js";
|
|
6
|
-
import {
|
|
7
|
-
generatePseudoEditableElement,
|
|
8
|
-
isEllipsisActive
|
|
9
|
-
} from "../generators/generatePseudoEditableField.js";
|
|
10
|
-
import {
|
|
11
|
-
ALLOWED_INLINE_EDITABLE_FIELD,
|
|
12
|
-
VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY
|
|
13
|
-
} from "./constants.js";
|
|
5
|
+
import { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from "./constants.js";
|
|
14
6
|
import { FieldSchemaMap } from "./fieldSchemaMap.js";
|
|
15
7
|
import { getFieldData } from "./getFieldData.js";
|
|
16
8
|
import { getFieldType } from "./getFieldType.js";
|
|
@@ -20,11 +12,11 @@ import {
|
|
|
20
12
|
handleAddButtonsForMultiple,
|
|
21
13
|
removeAddInstanceButtons
|
|
22
14
|
} from "./multipleElementAddButton.js";
|
|
23
|
-
import { updateFocussedState } from "./updateFocussedState.js";
|
|
24
|
-
import { FieldDataType } from "./types/index.types.js";
|
|
25
|
-
import { getMultilinePlaintext } from "./getMultilinePlaintext.js";
|
|
26
15
|
import { VisualBuilderPostMessageEvents } from "./types/postMessage.types.js";
|
|
27
16
|
import visualBuilderPostMessage from "./visualBuilderPostMessage.js";
|
|
17
|
+
import { isFieldMultiple } from "./isFieldMultiple.js";
|
|
18
|
+
import { handleInlineEditableField } from "./handleInlineEditableField.js";
|
|
19
|
+
import { pasteAsPlainText } from "./pasteAsPlainText.js";
|
|
28
20
|
async function handleIndividualFields(eventDetails, elements) {
|
|
29
21
|
const { fieldMetadata, editableElement } = eventDetails;
|
|
30
22
|
const { visualBuilderContainer, lastEditedField, resizeObserver } = elements;
|
|
@@ -70,95 +62,17 @@ async function handleIndividualFields(eventDetails, elements) {
|
|
|
70
62
|
);
|
|
71
63
|
}
|
|
72
64
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;
|
|
76
|
-
const index = Number(fieldMetadata.instance.fieldPathWithIndex.split(".").at(-1));
|
|
77
|
-
const isInstance = Number.isFinite(index);
|
|
78
|
-
if (isFieldMultiple(fieldSchema)) {
|
|
79
|
-
let expectedFieldInstanceData = null;
|
|
80
|
-
if (Array.isArray(expectedFieldData)) {
|
|
81
|
-
if (!isInstance) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (index >= expectedFieldData.length) {
|
|
85
|
-
} else {
|
|
86
|
-
expectedFieldInstanceData = expectedFieldData.at(index);
|
|
87
|
-
}
|
|
88
|
-
} else {
|
|
89
|
-
expectedFieldInstanceData = expectedFieldData;
|
|
90
|
-
}
|
|
91
|
-
enableInlineEditing(expectedFieldInstanceData);
|
|
92
|
-
} else {
|
|
93
|
-
let expectedFieldInstanceData = null;
|
|
94
|
-
if (isInstance) {
|
|
95
|
-
if (index !== 0) {
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;
|
|
99
|
-
}
|
|
100
|
-
enableInlineEditing(expectedFieldInstanceData ?? expectedFieldData);
|
|
101
|
-
}
|
|
102
|
-
function enableInlineEditing(expectedFieldData2) {
|
|
103
|
-
let actualEditableField = editableElement;
|
|
104
|
-
VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue = actualEditableField?.innerText;
|
|
105
|
-
const elementComputedDisplay = window.getComputedStyle(actualEditableField).display;
|
|
106
|
-
let textContent = editableElement.innerText || editableElement.textContent || "";
|
|
107
|
-
if (fieldType === FieldDataType.MULTILINE) {
|
|
108
|
-
textContent = getMultilinePlaintext(actualEditableField);
|
|
109
|
-
actualEditableField.addEventListener("paste", pasteAsPlainText);
|
|
110
|
-
}
|
|
111
|
-
const expectedTextContent = expectedFieldData2;
|
|
112
|
-
if (expectedTextContent && textContent !== expectedTextContent || isEllipsisActive(editableElement)) {
|
|
113
|
-
const pseudoEditableField = generatePseudoEditableElement(
|
|
114
|
-
{ editableElement },
|
|
115
|
-
{ textContent: expectedFieldData2 }
|
|
116
|
-
);
|
|
117
|
-
editableElement.style.visibility = "hidden";
|
|
118
|
-
pseudoEditableField.setAttribute(
|
|
119
|
-
VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,
|
|
120
|
-
fieldType
|
|
121
|
-
);
|
|
122
|
-
visualBuilderContainer.appendChild(pseudoEditableField);
|
|
123
|
-
actualEditableField = pseudoEditableField;
|
|
124
|
-
if (fieldType === FieldDataType.MULTILINE)
|
|
125
|
-
actualEditableField.addEventListener(
|
|
126
|
-
"paste",
|
|
127
|
-
pasteAsPlainText
|
|
128
|
-
);
|
|
129
|
-
elements.resizeObserver.observe(pseudoEditableField);
|
|
130
|
-
} else if (elementComputedDisplay === "inline") {
|
|
131
|
-
const onInlineElementInput = throttle(() => {
|
|
132
|
-
const overlayWrapper = visualBuilderContainer.querySelector(
|
|
133
|
-
".visual-builder__overlay__wrapper"
|
|
134
|
-
);
|
|
135
|
-
const focusedToolbar = visualBuilderContainer.querySelector(
|
|
136
|
-
".visual-builder__focused-toolbar"
|
|
137
|
-
);
|
|
138
|
-
updateFocussedState({
|
|
139
|
-
editableElement: actualEditableField,
|
|
140
|
-
visualBuilderContainer,
|
|
141
|
-
overlayWrapper,
|
|
142
|
-
focusedToolbar,
|
|
143
|
-
resizeObserver
|
|
144
|
-
});
|
|
145
|
-
}, 200);
|
|
146
|
-
actualEditableField.addEventListener(
|
|
147
|
-
"input",
|
|
148
|
-
onInlineElementInput
|
|
149
|
-
);
|
|
150
|
-
}
|
|
151
|
-
actualEditableField.setAttribute("contenteditable", "true");
|
|
152
|
-
actualEditableField.addEventListener("input", handleFieldInput);
|
|
153
|
-
actualEditableField.addEventListener("keydown", handleFieldKeyDown);
|
|
154
|
-
actualEditableField.focus();
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
65
|
+
if (disabled) {
|
|
66
|
+
return;
|
|
157
67
|
}
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
68
|
+
handleInlineEditableField({
|
|
69
|
+
fieldType,
|
|
70
|
+
fieldSchema,
|
|
71
|
+
fieldMetadata,
|
|
72
|
+
expectedFieldData,
|
|
73
|
+
editableElement,
|
|
74
|
+
elements
|
|
75
|
+
});
|
|
162
76
|
}
|
|
163
77
|
function cleanIndividualFieldResidual(elements) {
|
|
164
78
|
const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;
|
|
@@ -205,7 +119,10 @@ function cleanIndividualFieldResidual(elements) {
|
|
|
205
119
|
}
|
|
206
120
|
if (focusedToolbar) {
|
|
207
121
|
focusedToolbar.innerHTML = "";
|
|
208
|
-
const toolbarEvents = [
|
|
122
|
+
const toolbarEvents = [
|
|
123
|
+
VisualBuilderPostMessageEvents.DELETE_INSTANCE,
|
|
124
|
+
VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID
|
|
125
|
+
];
|
|
209
126
|
toolbarEvents.forEach((event) => {
|
|
210
127
|
if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {
|
|
211
128
|
visualBuilderPostMessage?.unregisterEvent?.(event);
|
|
@@ -213,19 +130,6 @@ function cleanIndividualFieldResidual(elements) {
|
|
|
213
130
|
});
|
|
214
131
|
}
|
|
215
132
|
}
|
|
216
|
-
var pasteAsPlainText = debounce(
|
|
217
|
-
(e) => {
|
|
218
|
-
e.preventDefault();
|
|
219
|
-
const clipboardData = e.clipboardData;
|
|
220
|
-
document.execCommand(
|
|
221
|
-
"inserttext",
|
|
222
|
-
false,
|
|
223
|
-
clipboardData?.getData("text/plain")
|
|
224
|
-
);
|
|
225
|
-
},
|
|
226
|
-
100,
|
|
227
|
-
{ leading: true }
|
|
228
|
-
);
|
|
229
133
|
export {
|
|
230
134
|
cleanIndividualFieldResidual,
|
|
231
135
|
handleIndividualFields
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { debounce, throttle } from \"lodash-es\";\nimport { VisualBuilder } from \"..\";\nimport {\n generatePseudoEditableElement,\n isEllipsisActive,\n} from \"../generators/generatePseudoEditableField\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport {\n ALLOWED_INLINE_EDITABLE_FIELD,\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n} from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { updateFocussedState } from \"./updateFocussedState\";\nimport { FieldDataType, ISchemaFieldMap } from \"./types/index.types\";\nimport { getMultilinePlaintext } from \"./getMultilinePlaintext\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: {\n visualBuilderContainer: HTMLDivElement;\n resizeObserver: ResizeObserver;\n lastEditedField: Element | null;\n }\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { isDisabled: disabled } = isFieldDisabled(fieldSchema, eventDetails);\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n } \n\n !disabled && handleInlineEditing();\n\n /**\n * Handles inline editing for supported fields.\n */\n function handleInlineEditing() {\n\n if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;\n\n // Instances of ALLOWED_INLINE_EDITABLE_FIELD will always have index at last\n const index = Number(fieldMetadata.instance.fieldPathWithIndex.split('.').at(-1));\n const isInstance = Number.isFinite(index);\n\n // CASE 1: Handle inline editing for multiple field\n if(isFieldMultiple(fieldSchema)) {\n let expectedFieldInstanceData = null;\n if(Array.isArray(expectedFieldData)) {\n // CASE: Selected element is the multiple field itself.\n // Inline Editing not allowed on field, only allowed on instance.\n // (We recieve unreliable `multipleFieldMetadata` in this case)\n if(!isInstance) {\n return;\n }\n\n // CASE: Value does not exist for the provided instance's index\n if(index >= expectedFieldData.length) {\n // TODO: What should be the behavior here?\n }\n else {\n expectedFieldInstanceData = expectedFieldData.at(index);\n }\n }\n // CASE: ContentType's Field changed from single to multiple, while Entry's Field still single.\n else {\n expectedFieldInstanceData = expectedFieldData;\n }\n\n enableInlineEditing(expectedFieldInstanceData); \n }\n // CASE 2: Handle inline editing for a single field\n else {\n let expectedFieldInstanceData = null;\n // CASE: ContentType's Field changed from multiple to single, while Entry's Field still multiple.\n if(isInstance) {\n if(index !== 0) {\n // TODO: Handle this with UX\n // Let user know, CSLP is invalid due to change in Content Type\n return;\n }\n expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;\n }\n enableInlineEditing(expectedFieldInstanceData ?? expectedFieldData);\n }\n\n function enableInlineEditing(expectedFieldData: any) {\n\n let actualEditableField = editableElement as HTMLElement;\n\n VisualBuilder.VisualBuilderGlobalState.value.focusFieldValue =\n actualEditableField?.innerText;\n\n const elementComputedDisplay =\n window.getComputedStyle(actualEditableField).display;\n\n let textContent =\n (editableElement as HTMLElement).innerText ||\n editableElement.textContent ||\n \"\";\n\n if (fieldType === FieldDataType.MULTILINE) {\n textContent = getMultilinePlaintext(actualEditableField);\n actualEditableField.addEventListener(\"paste\", pasteAsPlainText);\n }\n const expectedTextContent = expectedFieldData;\n if (\n (expectedTextContent && textContent !== expectedTextContent) ||\n isEllipsisActive(editableElement as HTMLElement)\n ) {\n \n // TODO: Testing will be done in the E2E.\n const pseudoEditableField = generatePseudoEditableElement(\n { editableElement: editableElement as HTMLElement },\n { textContent: expectedFieldData }\n );\n\n (editableElement as HTMLElement).style.visibility = \"hidden\";\n\n // set field type attribute to the pseudo editable field\n // ensures proper keydown handling similar to the actual editable field\n pseudoEditableField.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n visualBuilderContainer.appendChild(pseudoEditableField);\n actualEditableField = pseudoEditableField;\n\n if (fieldType === FieldDataType.MULTILINE)\n actualEditableField.addEventListener(\n \"paste\",\n pasteAsPlainText\n );\n\n // we will unobserve this in hideOverlay\n elements.resizeObserver.observe(pseudoEditableField);\n } else if (elementComputedDisplay === \"inline\") {\n // if the editable field is inline\n const onInlineElementInput = throttle(() => {\n const overlayWrapper = visualBuilderContainer.querySelector(\n \".visual-builder__overlay__wrapper\"\n ) as HTMLDivElement;\n const focusedToolbar = visualBuilderContainer.querySelector(\n \".visual-builder__focused-toolbar\"\n ) as HTMLDivElement;\n updateFocussedState({\n editableElement: actualEditableField,\n visualBuilderContainer,\n overlayWrapper,\n focusedToolbar,\n resizeObserver,\n });\n }, 200);\n actualEditableField.addEventListener(\n \"input\",\n onInlineElementInput\n );\n }\n\n actualEditableField.setAttribute(\"contenteditable\", \"true\");\n actualEditableField.addEventListener(\"input\", handleFieldInput);\n actualEditableField.addEventListener(\"keydown\", handleFieldKeyDown);\n // focus on the contenteditable element to start accepting input\n actualEditableField.focus();\n\n return;\n }\n }\n}\n\nfunction isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean {\n return fieldSchema &&\n (fieldSchema.multiple ||\n (fieldSchema.data_type === \"reference\" &&\n // @ts-ignore\n fieldSchema.field_metadata.ref_multiple));\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [VisualBuilderPostMessageEvents.DELETE_INSTANCE, VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID]\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\n }\n}\n\nconst pasteAsPlainText = debounce(\n (e: Event) => {\n e.preventDefault();\n const clipboardData = (e as ClipboardEvent).clipboardData;\n document.execCommand(\n \"inserttext\",\n false,\n clipboardData?.getData(\"text/plain\")\n );\n },\n 100,\n { leading: true }\n);\n"],"mappings":"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","names":["expectedFieldData"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleIndividualFields.ts"],"sourcesContent":["import { VisualBuilder } from \"..\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY } from \"./constants\";\nimport { FieldSchemaMap } from \"./fieldSchemaMap\";\nimport { getFieldData } from \"./getFieldData\";\nimport { getFieldType } from \"./getFieldType\";\nimport { handleFieldInput, handleFieldKeyDown } from \"./handleFieldMouseDown\";\nimport { isFieldDisabled } from \"./isFieldDisabled\";\nimport {\n handleAddButtonsForMultiple,\n removeAddInstanceButtons,\n} from \"./multipleElementAddButton\";\nimport { VisualBuilderPostMessageEvents } from \"./types/postMessage.types\";\nimport visualBuilderPostMessage from \"./visualBuilderPostMessage\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { handleInlineEditableField } from \"./handleInlineEditableField\";\nimport { VisualBuilderEditContext } from \"./types/index.types\";\nimport { pasteAsPlainText } from \"./pasteAsPlainText\";\n\n/**\n * It handles all the fields based on their data type and its \"multiple\" property.\n * @param eventDetails The event details object that contain cslp and field metadata.\n * @param elements The elements object that contain the visual builder wrapper.\n */\nexport async function handleIndividualFields(\n eventDetails: VisualBuilderCslpEventDetails,\n elements: VisualBuilderEditContext\n): Promise<void> {\n const { fieldMetadata, editableElement } = eventDetails;\n const { visualBuilderContainer, lastEditedField, resizeObserver } =\n elements;\n const {\n content_type_uid,\n entry_uid,\n locale,\n fieldPath,\n fieldPathWithIndex,\n } = fieldMetadata;\n\n const [fieldSchema, expectedFieldData] = await Promise.all([\n FieldSchemaMap.getFieldSchema(content_type_uid, fieldPath),\n getFieldData(\n { content_type_uid, entry_uid, locale },\n fieldPathWithIndex\n ),\n ]);\n\n const fieldType = getFieldType(fieldSchema);\n\n const { isDisabled: disabled } = isFieldDisabled(fieldSchema, eventDetails);\n\n editableElement.setAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY,\n fieldType\n );\n\n if (isFieldMultiple(fieldSchema)) {\n if (lastEditedField !== editableElement) {\n const addButtonLabel =\n fieldSchema.data_type === \"blocks\"\n ? // ? `Add ${fieldSchema.display_name ?? \"Modular Block\"}`\n \"Add Section\"\n : undefined;\n\n handleAddButtonsForMultiple(\n eventDetails,\n {\n editableElement: eventDetails.editableElement,\n visualBuilderContainer: visualBuilderContainer,\n resizeObserver: resizeObserver,\n },\n {\n fieldSchema,\n expectedFieldData,\n disabled,\n label: addButtonLabel,\n }\n );\n }\n }\n\n if (disabled) {\n return;\n }\n handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement: editableElement as HTMLElement,\n elements,\n });\n}\n\nexport function cleanIndividualFieldResidual(elements: {\n overlayWrapper: HTMLDivElement;\n visualBuilderContainer: HTMLDivElement | null;\n focusedToolbar: HTMLDivElement | null;\n resizeObserver: ResizeObserver;\n}): void {\n const { overlayWrapper, visualBuilderContainer, focusedToolbar } = elements;\n\n removeAddInstanceButtons(\n {\n eventTarget: null,\n visualBuilderContainer: visualBuilderContainer,\n overlayWrapper: overlayWrapper,\n },\n true\n );\n\n const previousSelectedEditableDOM =\n VisualBuilder.VisualBuilderGlobalState.value\n .previousSelectedEditableDOM;\n if (previousSelectedEditableDOM) {\n previousSelectedEditableDOM.removeAttribute(\n VISUAL_BUILDER_FIELD_TYPE_ATTRIBUTE_KEY\n );\n previousSelectedEditableDOM.removeAttribute(\"contenteditable\");\n previousSelectedEditableDOM.removeEventListener(\n \"input\",\n handleFieldInput\n );\n previousSelectedEditableDOM.removeEventListener(\n \"keydown\",\n handleFieldKeyDown\n );\n\n previousSelectedEditableDOM.removeEventListener(\n \"paste\",\n pasteAsPlainText\n );\n // Note - this happens in two places, 1. hideOverlay and 2. here\n // TODO maybe see all usages of both functions and try to do it in one place\n elements.resizeObserver.unobserve(previousSelectedEditableDOM);\n }\n\n const pseudoEditableElement = visualBuilderContainer?.querySelector(\n \".visual-builder__pseudo-editable-element\"\n );\n if (pseudoEditableElement) {\n elements.resizeObserver.unobserve(pseudoEditableElement);\n pseudoEditableElement.removeEventListener(\"paste\", pasteAsPlainText);\n pseudoEditableElement.remove();\n if (previousSelectedEditableDOM) {\n (previousSelectedEditableDOM as HTMLElement).style.removeProperty(\n \"visibility\"\n );\n }\n }\n\n if (focusedToolbar) {\n focusedToolbar.innerHTML = \"\";\n const toolbarEvents = [\n VisualBuilderPostMessageEvents.DELETE_INSTANCE,\n VisualBuilderPostMessageEvents.UPDATE_DISCUSSION_ID,\n ];\n toolbarEvents.forEach((event) => {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n if (visualBuilderPostMessage?.requestMessageHandlers?.has(event)) {\n //@ts-expect-error - We are accessing private method here, but it is necessary to clean up the event listeners.\n visualBuilderPostMessage?.unregisterEvent?.(event);\n }\n });\n }\n}\n"],"mappings":";;;AAAA,SAAS,qBAAqB;AAE9B,SAAS,+CAA+C;AACxD,SAAS,sBAAsB;AAC/B,SAAS,oBAAoB;AAC7B,SAAS,oBAAoB;AAC7B,SAAS,kBAAkB,0BAA0B;AACrD,SAAS,uBAAuB;AAChC;AAAA,EACI;AAAA,EACA;AAAA,OACG;AACP,SAAS,sCAAsC;AAC/C,OAAO,8BAA8B;AACrC,SAAS,uBAAuB;AAChC,SAAS,iCAAiC;AAE1C,SAAS,wBAAwB;AAOjC,eAAsB,uBAClB,cACA,UACa;AACb,QAAM,EAAE,eAAe,gBAAgB,IAAI;AAC3C,QAAM,EAAE,wBAAwB,iBAAiB,eAAe,IAC5D;AACJ,QAAM;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,IAAI;AAEJ,QAAM,CAAC,aAAa,iBAAiB,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,eAAe,eAAe,kBAAkB,SAAS;AAAA,IACzD;AAAA,MACI,EAAE,kBAAkB,WAAW,OAAO;AAAA,MACtC;AAAA,IACJ;AAAA,EACJ,CAAC;AAED,QAAM,YAAY,aAAa,WAAW;AAE1C,QAAM,EAAE,YAAY,SAAS,IAAI,gBAAgB,aAAa,YAAY;AAE1E,kBAAgB;AAAA,IACZ;AAAA,IACA;AAAA,EACJ;AAEA,MAAI,gBAAgB,WAAW,GAAG;AAC9B,QAAI,oBAAoB,iBAAiB;AACrC,YAAM,iBACF,YAAY,cAAc;AAAA;AAAA,QAEpB;AAAA,UACA;AAEV;AAAA,QACI;AAAA,QACA;AAAA,UACI,iBAAiB,aAAa;AAAA,UAC9B;AAAA,UACA;AAAA,QACJ;AAAA,QACA;AAAA,UACI;AAAA,UACA;AAAA,UACA;AAAA,UACA,OAAO;AAAA,QACX;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,UAAU;AACV;AAAA,EACJ;AACA,4BAA0B;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACJ,CAAC;AACL;AAEO,SAAS,6BAA6B,UAKpC;AACL,QAAM,EAAE,gBAAgB,wBAAwB,eAAe,IAAI;AAEnE;AAAA,IACI;AAAA,MACI,aAAa;AAAA,MACb;AAAA,MACA;AAAA,IACJ;AAAA,IACA;AAAA,EACJ;AAEA,QAAM,8BACF,cAAc,yBAAyB,MAClC;AACT,MAAI,6BAA6B;AAC7B,gCAA4B;AAAA,MACxB;AAAA,IACJ;AACA,gCAA4B,gBAAgB,iBAAiB;AAC7D,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AACA,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAEA,gCAA4B;AAAA,MACxB;AAAA,MACA;AAAA,IACJ;AAGA,aAAS,eAAe,UAAU,2BAA2B;AAAA,EACjE;AAEA,QAAM,wBAAwB,wBAAwB;AAAA,IAClD;AAAA,EACJ;AACA,MAAI,uBAAuB;AACvB,aAAS,eAAe,UAAU,qBAAqB;AACvD,0BAAsB,oBAAoB,SAAS,gBAAgB;AACnE,0BAAsB,OAAO;AAC7B,QAAI,6BAA6B;AAC7B,MAAC,4BAA4C,MAAM;AAAA,QAC/C;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAEA,MAAI,gBAAgB;AAChB,mBAAe,YAAY;AAC3B,UAAM,gBAAgB;AAAA,MAClB,+BAA+B;AAAA,MAC/B,+BAA+B;AAAA,IACnC;AACA,kBAAc,QAAQ,CAAC,UAAU;AAE7B,UAAI,0BAA0B,wBAAwB,IAAI,KAAK,GAAG;AAE9D,kCAA0B,kBAAkB,KAAK;AAAA,MACrD;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;","names":[]}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/visualBuilder/utils/handleInlineEditableField.ts
|
|
21
|
+
var handleInlineEditableField_exports = {};
|
|
22
|
+
__export(handleInlineEditableField_exports, {
|
|
23
|
+
handleInlineEditableField: () => handleInlineEditableField
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(handleInlineEditableField_exports);
|
|
26
|
+
var import_constants = require("./constants.cjs");
|
|
27
|
+
var import_isFieldMultiple = require("./isFieldMultiple.cjs");
|
|
28
|
+
var import_enableInlineEditing = require("./enableInlineEditing.cjs");
|
|
29
|
+
function handleInlineEditableField({
|
|
30
|
+
fieldType,
|
|
31
|
+
fieldSchema,
|
|
32
|
+
fieldMetadata,
|
|
33
|
+
expectedFieldData,
|
|
34
|
+
editableElement,
|
|
35
|
+
elements
|
|
36
|
+
}) {
|
|
37
|
+
if (!import_constants.ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;
|
|
38
|
+
const index = Number(
|
|
39
|
+
fieldMetadata.instance.fieldPathWithIndex.split(".").at(-1)
|
|
40
|
+
);
|
|
41
|
+
const isInstance = Number.isFinite(index);
|
|
42
|
+
if ((0, import_isFieldMultiple.isFieldMultiple)(fieldSchema)) {
|
|
43
|
+
let expectedFieldInstanceData = null;
|
|
44
|
+
if (Array.isArray(expectedFieldData)) {
|
|
45
|
+
if (!isInstance) {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (index >= expectedFieldData.length) {
|
|
49
|
+
} else {
|
|
50
|
+
expectedFieldInstanceData = expectedFieldData.at(index);
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
expectedFieldInstanceData = expectedFieldData;
|
|
54
|
+
}
|
|
55
|
+
(0, import_enableInlineEditing.enableInlineEditing)({
|
|
56
|
+
fieldType,
|
|
57
|
+
expectedFieldData: expectedFieldInstanceData,
|
|
58
|
+
editableElement,
|
|
59
|
+
elements
|
|
60
|
+
});
|
|
61
|
+
} else {
|
|
62
|
+
let expectedFieldInstanceData = null;
|
|
63
|
+
if (isInstance) {
|
|
64
|
+
if (index !== 0) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;
|
|
68
|
+
}
|
|
69
|
+
(0, import_enableInlineEditing.enableInlineEditing)({
|
|
70
|
+
fieldType,
|
|
71
|
+
expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,
|
|
72
|
+
editableElement,
|
|
73
|
+
elements
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
78
|
+
0 && (module.exports = {
|
|
79
|
+
handleInlineEditableField
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=handleInlineEditableField.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleInlineEditableField.ts"],"sourcesContent":["import { ALLOWED_INLINE_EDITABLE_FIELD } from \"./constants\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { FieldDataType, VisualBuilderEditContext } from \"./types/index.types\";\nimport { enableInlineEditing } from \"./enableInlineEditing\";\n\n/**\n * Handles inline editing for supported fields.\n */\nexport function handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement,\n elements,\n}: {\n fieldType: FieldDataType;\n fieldSchema: any;\n fieldMetadata: any;\n expectedFieldData: any;\n editableElement: HTMLElement;\n elements: VisualBuilderEditContext;\n}) {\n if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;\n\n // Instances of ALLOWED_INLINE_EDITABLE_FIELD will always have index at last\n const index = Number(\n fieldMetadata.instance.fieldPathWithIndex.split(\".\").at(-1)\n );\n const isInstance = Number.isFinite(index);\n\n // CASE 1: Handle inline editing for multiple field\n if (isFieldMultiple(fieldSchema)) {\n let expectedFieldInstanceData = null;\n if (Array.isArray(expectedFieldData)) {\n // CASE: Selected element is the multiple field itself.\n // Inline Editing not allowed on field, only allowed on instance.\n // (We receive unreliable `multipleFieldMetadata` in this case)\n if (!isInstance) {\n return;\n }\n\n // CASE: Value does not exist for the provided instance's index\n if (index >= expectedFieldData.length) {\n // TODO: What should be the behavior here?\n } else {\n expectedFieldInstanceData = expectedFieldData.at(index);\n }\n }\n // CASE: ContentType's Field changed from single to multiple, while Entry's Field still single.\n else {\n expectedFieldInstanceData = expectedFieldData;\n }\n\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData,\n editableElement,\n elements,\n });\n }\n // CASE 2: Handle inline editing for a single field\n else {\n let expectedFieldInstanceData = null;\n // CASE: ContentType's Field changed from multiple to single, while Entry's Field still multiple.\n if (isInstance) {\n if (index !== 0) {\n // TODO: Handle this with UX\n // Let user know, CSLP is invalid due to change in Content Type\n return;\n }\n expectedFieldInstanceData = Array.isArray(expectedFieldData)\n ? expectedFieldData.at(0)\n : expectedFieldData;\n }\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,\n editableElement,\n elements,\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBAA8C;AAC9C,6BAAgC;AAEhC,iCAAoC;AAK7B,SAAS,0BAA0B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAOG;AACC,MAAI,CAAC,+CAA8B,SAAS,SAAS,EAAG;AAGxD,QAAM,QAAQ;AAAA,IACV,cAAc,SAAS,mBAAmB,MAAM,GAAG,EAAE,GAAG,EAAE;AAAA,EAC9D;AACA,QAAM,aAAa,OAAO,SAAS,KAAK;AAGxC,UAAI,wCAAgB,WAAW,GAAG;AAC9B,QAAI,4BAA4B;AAChC,QAAI,MAAM,QAAQ,iBAAiB,GAAG;AAIlC,UAAI,CAAC,YAAY;AACb;AAAA,MACJ;AAGA,UAAI,SAAS,kBAAkB,QAAQ;AAAA,MAEvC,OAAO;AACH,oCAA4B,kBAAkB,GAAG,KAAK;AAAA,MAC1D;AAAA,IACJ,OAEK;AACD,kCAA4B;AAAA,IAChC;AAEA,wDAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL,OAEK;AACD,QAAI,4BAA4B;AAEhC,QAAI,YAAY;AACZ,UAAI,UAAU,GAAG;AAGb;AAAA,MACJ;AACA,kCAA4B,MAAM,QAAQ,iBAAiB,IACrD,kBAAkB,GAAG,CAAC,IACtB;AAAA,IACV;AACA,wDAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB,6BAA6B;AAAA,MAChD;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;","names":[]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FieldDataType, VisualBuilderEditContext } from './types/index.types.cjs';
|
|
2
|
+
import '../../cms/types/contentTypeSchema.types.cjs';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Handles inline editing for supported fields.
|
|
6
|
+
*/
|
|
7
|
+
declare function handleInlineEditableField({ fieldType, fieldSchema, fieldMetadata, expectedFieldData, editableElement, elements, }: {
|
|
8
|
+
fieldType: FieldDataType;
|
|
9
|
+
fieldSchema: any;
|
|
10
|
+
fieldMetadata: any;
|
|
11
|
+
expectedFieldData: any;
|
|
12
|
+
editableElement: HTMLElement;
|
|
13
|
+
elements: VisualBuilderEditContext;
|
|
14
|
+
}): void;
|
|
15
|
+
|
|
16
|
+
export { handleInlineEditableField };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FieldDataType, VisualBuilderEditContext } from './types/index.types.js';
|
|
2
|
+
import '../../cms/types/contentTypeSchema.types.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Handles inline editing for supported fields.
|
|
6
|
+
*/
|
|
7
|
+
declare function handleInlineEditableField({ fieldType, fieldSchema, fieldMetadata, expectedFieldData, editableElement, elements, }: {
|
|
8
|
+
fieldType: FieldDataType;
|
|
9
|
+
fieldSchema: any;
|
|
10
|
+
fieldMetadata: any;
|
|
11
|
+
expectedFieldData: any;
|
|
12
|
+
editableElement: HTMLElement;
|
|
13
|
+
elements: VisualBuilderEditContext;
|
|
14
|
+
}): void;
|
|
15
|
+
|
|
16
|
+
export { handleInlineEditableField };
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import "../../chunk-5WRI5ZAA.js";
|
|
2
|
+
|
|
3
|
+
// src/visualBuilder/utils/handleInlineEditableField.ts
|
|
4
|
+
import { ALLOWED_INLINE_EDITABLE_FIELD } from "./constants.js";
|
|
5
|
+
import { isFieldMultiple } from "./isFieldMultiple.js";
|
|
6
|
+
import { enableInlineEditing } from "./enableInlineEditing.js";
|
|
7
|
+
function handleInlineEditableField({
|
|
8
|
+
fieldType,
|
|
9
|
+
fieldSchema,
|
|
10
|
+
fieldMetadata,
|
|
11
|
+
expectedFieldData,
|
|
12
|
+
editableElement,
|
|
13
|
+
elements
|
|
14
|
+
}) {
|
|
15
|
+
if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;
|
|
16
|
+
const index = Number(
|
|
17
|
+
fieldMetadata.instance.fieldPathWithIndex.split(".").at(-1)
|
|
18
|
+
);
|
|
19
|
+
const isInstance = Number.isFinite(index);
|
|
20
|
+
if (isFieldMultiple(fieldSchema)) {
|
|
21
|
+
let expectedFieldInstanceData = null;
|
|
22
|
+
if (Array.isArray(expectedFieldData)) {
|
|
23
|
+
if (!isInstance) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (index >= expectedFieldData.length) {
|
|
27
|
+
} else {
|
|
28
|
+
expectedFieldInstanceData = expectedFieldData.at(index);
|
|
29
|
+
}
|
|
30
|
+
} else {
|
|
31
|
+
expectedFieldInstanceData = expectedFieldData;
|
|
32
|
+
}
|
|
33
|
+
enableInlineEditing({
|
|
34
|
+
fieldType,
|
|
35
|
+
expectedFieldData: expectedFieldInstanceData,
|
|
36
|
+
editableElement,
|
|
37
|
+
elements
|
|
38
|
+
});
|
|
39
|
+
} else {
|
|
40
|
+
let expectedFieldInstanceData = null;
|
|
41
|
+
if (isInstance) {
|
|
42
|
+
if (index !== 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
expectedFieldInstanceData = Array.isArray(expectedFieldData) ? expectedFieldData.at(0) : expectedFieldData;
|
|
46
|
+
}
|
|
47
|
+
enableInlineEditing({
|
|
48
|
+
fieldType,
|
|
49
|
+
expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,
|
|
50
|
+
editableElement,
|
|
51
|
+
elements
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export {
|
|
56
|
+
handleInlineEditableField
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=handleInlineEditableField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/handleInlineEditableField.ts"],"sourcesContent":["import { ALLOWED_INLINE_EDITABLE_FIELD } from \"./constants\";\nimport { isFieldMultiple } from \"./isFieldMultiple\";\nimport { FieldDataType, VisualBuilderEditContext } from \"./types/index.types\";\nimport { enableInlineEditing } from \"./enableInlineEditing\";\n\n/**\n * Handles inline editing for supported fields.\n */\nexport function handleInlineEditableField({\n fieldType,\n fieldSchema,\n fieldMetadata,\n expectedFieldData,\n editableElement,\n elements,\n}: {\n fieldType: FieldDataType;\n fieldSchema: any;\n fieldMetadata: any;\n expectedFieldData: any;\n editableElement: HTMLElement;\n elements: VisualBuilderEditContext;\n}) {\n if (!ALLOWED_INLINE_EDITABLE_FIELD.includes(fieldType)) return;\n\n // Instances of ALLOWED_INLINE_EDITABLE_FIELD will always have index at last\n const index = Number(\n fieldMetadata.instance.fieldPathWithIndex.split(\".\").at(-1)\n );\n const isInstance = Number.isFinite(index);\n\n // CASE 1: Handle inline editing for multiple field\n if (isFieldMultiple(fieldSchema)) {\n let expectedFieldInstanceData = null;\n if (Array.isArray(expectedFieldData)) {\n // CASE: Selected element is the multiple field itself.\n // Inline Editing not allowed on field, only allowed on instance.\n // (We receive unreliable `multipleFieldMetadata` in this case)\n if (!isInstance) {\n return;\n }\n\n // CASE: Value does not exist for the provided instance's index\n if (index >= expectedFieldData.length) {\n // TODO: What should be the behavior here?\n } else {\n expectedFieldInstanceData = expectedFieldData.at(index);\n }\n }\n // CASE: ContentType's Field changed from single to multiple, while Entry's Field still single.\n else {\n expectedFieldInstanceData = expectedFieldData;\n }\n\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData,\n editableElement,\n elements,\n });\n }\n // CASE 2: Handle inline editing for a single field\n else {\n let expectedFieldInstanceData = null;\n // CASE: ContentType's Field changed from multiple to single, while Entry's Field still multiple.\n if (isInstance) {\n if (index !== 0) {\n // TODO: Handle this with UX\n // Let user know, CSLP is invalid due to change in Content Type\n return;\n }\n expectedFieldInstanceData = Array.isArray(expectedFieldData)\n ? expectedFieldData.at(0)\n : expectedFieldData;\n }\n enableInlineEditing({\n fieldType,\n expectedFieldData: expectedFieldInstanceData ?? expectedFieldData,\n editableElement,\n elements,\n });\n }\n}\n"],"mappings":";;;AAAA,SAAS,qCAAqC;AAC9C,SAAS,uBAAuB;AAEhC,SAAS,2BAA2B;AAK7B,SAAS,0BAA0B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ,GAOG;AACC,MAAI,CAAC,8BAA8B,SAAS,SAAS,EAAG;AAGxD,QAAM,QAAQ;AAAA,IACV,cAAc,SAAS,mBAAmB,MAAM,GAAG,EAAE,GAAG,EAAE;AAAA,EAC9D;AACA,QAAM,aAAa,OAAO,SAAS,KAAK;AAGxC,MAAI,gBAAgB,WAAW,GAAG;AAC9B,QAAI,4BAA4B;AAChC,QAAI,MAAM,QAAQ,iBAAiB,GAAG;AAIlC,UAAI,CAAC,YAAY;AACb;AAAA,MACJ;AAGA,UAAI,SAAS,kBAAkB,QAAQ;AAAA,MAEvC,OAAO;AACH,oCAA4B,kBAAkB,GAAG,KAAK;AAAA,MAC1D;AAAA,IACJ,OAEK;AACD,kCAA4B;AAAA,IAChC;AAEA,wBAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB;AAAA,MACnB;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL,OAEK;AACD,QAAI,4BAA4B;AAEhC,QAAI,YAAY;AACZ,UAAI,UAAU,GAAG;AAGb;AAAA,MACJ;AACA,kCAA4B,MAAM,QAAQ,iBAAiB,IACrD,kBAAkB,GAAG,CAAC,IACtB;AAAA,IACV;AACA,wBAAoB;AAAA,MAChB;AAAA,MACA,mBAAmB,6BAA6B;AAAA,MAChD;AAAA,MACA;AAAA,IACJ,CAAC;AAAA,EACL;AACJ;","names":[]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/visualBuilder/utils/isFieldMultiple.ts
|
|
21
|
+
var isFieldMultiple_exports = {};
|
|
22
|
+
__export(isFieldMultiple_exports, {
|
|
23
|
+
isFieldMultiple: () => isFieldMultiple
|
|
24
|
+
});
|
|
25
|
+
module.exports = __toCommonJS(isFieldMultiple_exports);
|
|
26
|
+
function isFieldMultiple(fieldSchema) {
|
|
27
|
+
return fieldSchema && (fieldSchema.multiple || fieldSchema.data_type === "reference" && // @ts-expect-error field_metadata will contain ref_multiple
|
|
28
|
+
// for reference fields
|
|
29
|
+
fieldSchema.field_metadata.ref_multiple);
|
|
30
|
+
}
|
|
31
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
32
|
+
0 && (module.exports = {
|
|
33
|
+
isFieldMultiple
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=isFieldMultiple.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldMultiple.ts"],"sourcesContent":["import { ISchemaFieldMap } from \"./types/index.types\";\n\nexport function isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean {\n return (\n fieldSchema &&\n (fieldSchema.multiple ||\n (fieldSchema.data_type === \"reference\" &&\n // @ts-expect-error field_metadata will contain ref_multiple\n // for reference fields\n fieldSchema.field_metadata.ref_multiple))\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAEO,SAAS,gBAAgB,aAAuC;AACnE,SACI,gBACC,YAAY,YACR,YAAY,cAAc;AAAA;AAAA,EAGvB,YAAY,eAAe;AAE3C;","names":[]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import "../../chunk-5WRI5ZAA.js";
|
|
2
|
+
|
|
3
|
+
// src/visualBuilder/utils/isFieldMultiple.ts
|
|
4
|
+
function isFieldMultiple(fieldSchema) {
|
|
5
|
+
return fieldSchema && (fieldSchema.multiple || fieldSchema.data_type === "reference" && // @ts-expect-error field_metadata will contain ref_multiple
|
|
6
|
+
// for reference fields
|
|
7
|
+
fieldSchema.field_metadata.ref_multiple);
|
|
8
|
+
}
|
|
9
|
+
export {
|
|
10
|
+
isFieldMultiple
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=isFieldMultiple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/utils/isFieldMultiple.ts"],"sourcesContent":["import { ISchemaFieldMap } from \"./types/index.types\";\n\nexport function isFieldMultiple(fieldSchema: ISchemaFieldMap): boolean {\n return (\n fieldSchema &&\n (fieldSchema.multiple ||\n (fieldSchema.data_type === \"reference\" &&\n // @ts-expect-error field_metadata will contain ref_multiple\n // for reference fields\n fieldSchema.field_metadata.ref_multiple))\n );\n}\n"],"mappings":";;;AAEO,SAAS,gBAAgB,aAAuC;AACnE,SACI,gBACC,YAAY,YACR,YAAY,cAAc;AAAA;AAAA,EAGvB,YAAY,eAAe;AAE3C;","names":[]}
|
|
@@ -36,11 +36,10 @@ __export(multipleElementAddButton_exports, {
|
|
|
36
36
|
});
|
|
37
37
|
module.exports = __toCommonJS(multipleElementAddButton_exports);
|
|
38
38
|
var import_generateAddInstanceButtons = require("../generators/generateAddInstanceButtons.cjs");
|
|
39
|
-
var import_visualBuilderPostMessage = __toESM(require("./visualBuilderPostMessage.cjs"), 1);
|
|
40
|
-
var import_postMessage = require("./types/postMessage.types.cjs");
|
|
41
39
|
var import_getChildrenDirection = __toESM(require("./getChildrenDirection.cjs"), 1);
|
|
42
40
|
var import_generateOverlay = require("../generators/generateOverlay.cjs");
|
|
43
41
|
var import_mouseHover = require("../listeners/mouseHover.cjs");
|
|
42
|
+
var import_signals = require("@preact/signals");
|
|
44
43
|
var WAIT_FOR_NEW_INSTANCE_TIMEOUT = 4e3;
|
|
45
44
|
function handleAddButtonsForMultiple(eventDetails, elements, config) {
|
|
46
45
|
const { editableElement, visualBuilderContainer, resizeObserver } = elements;
|
|
@@ -91,27 +90,24 @@ function handleAddButtonsForMultiple(eventDetails, elements, config) {
|
|
|
91
90
|
index
|
|
92
91
|
});
|
|
93
92
|
};
|
|
93
|
+
const loading = (0, import_signals.signal)(false);
|
|
94
94
|
const previousButton = (0, import_generateAddInstanceButtons.generateAddInstanceButton)({
|
|
95
|
-
onClick: () => {
|
|
96
|
-
import_visualBuilderPostMessage.default?.send(import_postMessage.VisualBuilderPostMessageEvents.ADD_INSTANCE, {
|
|
97
|
-
fieldMetadata: eventDetails.fieldMetadata,
|
|
98
|
-
index: prevIndex
|
|
99
|
-
}).then(onMessageSent.bind(null, prevIndex));
|
|
100
|
-
},
|
|
101
|
-
label,
|
|
102
95
|
fieldSchema,
|
|
103
|
-
value: expectedFieldData
|
|
96
|
+
value: expectedFieldData,
|
|
97
|
+
fieldMetadata: eventDetails.fieldMetadata,
|
|
98
|
+
index: prevIndex,
|
|
99
|
+
onClick: onMessageSent.bind(null, prevIndex),
|
|
100
|
+
loading,
|
|
101
|
+
label
|
|
104
102
|
});
|
|
105
103
|
const nextButton = (0, import_generateAddInstanceButtons.generateAddInstanceButton)({
|
|
106
|
-
onClick: () => {
|
|
107
|
-
import_visualBuilderPostMessage.default?.send(import_postMessage.VisualBuilderPostMessageEvents.ADD_INSTANCE, {
|
|
108
|
-
fieldMetadata: eventDetails.fieldMetadata,
|
|
109
|
-
index: nextIndex
|
|
110
|
-
}).then(onMessageSent.bind(null, nextIndex));
|
|
111
|
-
},
|
|
112
|
-
label,
|
|
113
104
|
fieldSchema,
|
|
114
|
-
value: expectedFieldData
|
|
105
|
+
value: expectedFieldData,
|
|
106
|
+
fieldMetadata: eventDetails.fieldMetadata,
|
|
107
|
+
index: nextIndex,
|
|
108
|
+
onClick: onMessageSent.bind(null, nextIndex),
|
|
109
|
+
loading,
|
|
110
|
+
label
|
|
115
111
|
});
|
|
116
112
|
if (!visualBuilderContainer.contains(previousButton)) {
|
|
117
113
|
visualBuilderContainer.appendChild(previousButton);
|