@contentstack/live-preview-utils 3.2.5 → 3.4.0
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/light-sdk.cjs +1 -1
- package/dist/legacy/light-sdk.js +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
- package/dist/legacy/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/legacy/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/legacy/utils/addLivePreviewQueryTags.cjs +7 -1
- package/dist/legacy/utils/addLivePreviewQueryTags.cjs.map +1 -1
- package/dist/legacy/utils/addLivePreviewQueryTags.js +7 -1
- package/dist/legacy/utils/addLivePreviewQueryTags.js.map +1 -1
- package/dist/legacy/utils/index.cjs +8 -4
- package/dist/legacy/utils/index.cjs.map +1 -1
- package/dist/legacy/utils/index.js +8 -4
- package/dist/legacy/utils/index.js.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs +186 -0
- package/dist/legacy/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
- package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
- package/dist/legacy/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
- package/dist/legacy/visualBuilder/components/FieldLocationAppList.js +153 -0
- package/dist/legacy/visualBuilder/components/FieldLocationAppList.js.map +1 -0
- package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs +125 -0
- package/dist/legacy/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
- package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
- package/dist/legacy/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
- package/dist/legacy/visualBuilder/components/FieldLocationIcon.js +92 -0
- package/dist/legacy/visualBuilder/components/FieldLocationIcon.js.map +1 -0
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs +181 -115
- package/dist/legacy/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/FieldToolbar.js +182 -116
- package/dist/legacy/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/legacy/visualBuilder/components/Tooltip.cjs +167 -0
- package/dist/legacy/visualBuilder/components/Tooltip.cjs.map +1 -0
- package/dist/legacy/visualBuilder/components/Tooltip.d.cts +26 -0
- package/dist/legacy/visualBuilder/components/Tooltip.d.ts +26 -0
- package/dist/legacy/visualBuilder/components/Tooltip.js +140 -0
- package/dist/legacy/visualBuilder/components/Tooltip.js.map +1 -0
- package/dist/legacy/visualBuilder/components/emptyBlock.cjs +26 -5
- package/dist/legacy/visualBuilder/components/emptyBlock.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/emptyBlock.js +26 -5
- package/dist/legacy/visualBuilder/components/emptyBlock.js.map +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs +115 -15
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js +117 -17
- package/dist/legacy/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
- package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
- package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
- package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
- package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
- package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
- package/dist/legacy/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
- package/dist/legacy/visualBuilder/components/icons/index.cjs +63 -0
- package/dist/legacy/visualBuilder/components/icons/index.cjs.map +1 -1
- package/dist/legacy/visualBuilder/components/icons/index.d.cts +4 -1
- package/dist/legacy/visualBuilder/components/icons/index.d.ts +4 -1
- package/dist/legacy/visualBuilder/components/icons/index.js +50 -0
- package/dist/legacy/visualBuilder/components/icons/index.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateOverlay.cjs +1 -0
- package/dist/legacy/visualBuilder/generators/generateOverlay.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateOverlay.js +1 -0
- package/dist/legacy/visualBuilder/generators/generateOverlay.js.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateToolbar.cjs +44 -10
- package/dist/legacy/visualBuilder/generators/generateToolbar.cjs.map +1 -1
- package/dist/legacy/visualBuilder/generators/generateToolbar.d.cts +11 -4
- package/dist/legacy/visualBuilder/generators/generateToolbar.d.ts +11 -4
- package/dist/legacy/visualBuilder/generators/generateToolbar.js +42 -9
- package/dist/legacy/visualBuilder/generators/generateToolbar.js.map +1 -1
- package/dist/legacy/visualBuilder/index.cjs +17 -3
- package/dist/legacy/visualBuilder/index.cjs.map +1 -1
- package/dist/legacy/visualBuilder/index.d.cts +2 -0
- package/dist/legacy/visualBuilder/index.d.ts +2 -0
- package/dist/legacy/visualBuilder/index.js +17 -3
- package/dist/legacy/visualBuilder/index.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/index.cjs +3 -1
- package/dist/legacy/visualBuilder/listeners/index.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/index.js +3 -1
- package/dist/legacy/visualBuilder/listeners/index.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs +7 -3
- package/dist/legacy/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.d.cts +4 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.d.ts +4 -1
- package/dist/legacy/visualBuilder/listeners/mouseClick.js +5 -2
- package/dist/legacy/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseHover.cjs +186 -133
- package/dist/legacy/visualBuilder/listeners/mouseHover.cjs.map +1 -1
- package/dist/legacy/visualBuilder/listeners/mouseHover.d.cts +5 -3
- package/dist/legacy/visualBuilder/listeners/mouseHover.d.ts +5 -3
- package/dist/legacy/visualBuilder/listeners/mouseHover.js +185 -133
- package/dist/legacy/visualBuilder/listeners/mouseHover.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs +2 -23
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js +2 -13
- package/dist/legacy/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs +5 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.js +5 -0
- package/dist/legacy/visualBuilder/utils/types/postMessage.types.js.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs +183 -3
- package/dist/legacy/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/legacy/visualBuilder/visualBuilder.style.d.cts +25 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.d.ts +25 -0
- package/dist/legacy/visualBuilder/visualBuilder.style.js +183 -3
- package/dist/legacy/visualBuilder/visualBuilder.style.js.map +1 -1
- package/dist/modern/light-sdk.cjs +1 -1
- package/dist/modern/light-sdk.js +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs +2 -2
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.cjs.map +1 -1
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js +3 -3
- package/dist/modern/livePreview/eventManager/postMessageEvent.hooks.js.map +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.cjs +1 -1
- package/dist/modern/preview/contentstack-live-preview-HOC.js +1 -1
- package/dist/modern/utils/addLivePreviewQueryTags.cjs +7 -1
- package/dist/modern/utils/addLivePreviewQueryTags.cjs.map +1 -1
- package/dist/modern/utils/addLivePreviewQueryTags.js +7 -1
- package/dist/modern/utils/addLivePreviewQueryTags.js.map +1 -1
- package/dist/modern/utils/index.cjs +8 -4
- package/dist/modern/utils/index.cjs.map +1 -1
- package/dist/modern/utils/index.js +8 -4
- package/dist/modern/utils/index.js.map +1 -1
- package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs +185 -0
- package/dist/modern/visualBuilder/components/FieldLocationAppList.cjs.map +1 -0
- package/dist/modern/visualBuilder/components/FieldLocationAppList.d.cts +35 -0
- package/dist/modern/visualBuilder/components/FieldLocationAppList.d.ts +35 -0
- package/dist/modern/visualBuilder/components/FieldLocationAppList.js +152 -0
- package/dist/modern/visualBuilder/components/FieldLocationAppList.js.map +1 -0
- package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs +123 -0
- package/dist/modern/visualBuilder/components/FieldLocationIcon.cjs.map +1 -0
- package/dist/modern/visualBuilder/components/FieldLocationIcon.d.cts +13 -0
- package/dist/modern/visualBuilder/components/FieldLocationIcon.d.ts +13 -0
- package/dist/modern/visualBuilder/components/FieldLocationIcon.js +90 -0
- package/dist/modern/visualBuilder/components/FieldLocationIcon.js.map +1 -0
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs +180 -115
- package/dist/modern/visualBuilder/components/FieldToolbar.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/FieldToolbar.js +181 -116
- package/dist/modern/visualBuilder/components/FieldToolbar.js.map +1 -1
- package/dist/modern/visualBuilder/components/Tooltip.cjs +167 -0
- package/dist/modern/visualBuilder/components/Tooltip.cjs.map +1 -0
- package/dist/modern/visualBuilder/components/Tooltip.d.cts +26 -0
- package/dist/modern/visualBuilder/components/Tooltip.d.ts +26 -0
- package/dist/modern/visualBuilder/components/Tooltip.js +140 -0
- package/dist/modern/visualBuilder/components/Tooltip.js.map +1 -0
- package/dist/modern/visualBuilder/components/emptyBlock.cjs +26 -5
- package/dist/modern/visualBuilder/components/emptyBlock.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/emptyBlock.js +26 -5
- package/dist/modern/visualBuilder/components/emptyBlock.js.map +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs +113 -15
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.js +115 -17
- package/dist/modern/visualBuilder/components/fieldLabelWrapper.js.map +1 -1
- package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs +78 -0
- package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.cjs.map +1 -0
- package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.cts +9 -0
- package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.d.ts +9 -0
- package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js +53 -0
- package/dist/modern/visualBuilder/components/icons/EmptyAppIcon.js.map +1 -0
- package/dist/modern/visualBuilder/components/icons/index.cjs +63 -0
- package/dist/modern/visualBuilder/components/icons/index.cjs.map +1 -1
- package/dist/modern/visualBuilder/components/icons/index.d.cts +4 -1
- package/dist/modern/visualBuilder/components/icons/index.d.ts +4 -1
- package/dist/modern/visualBuilder/components/icons/index.js +50 -0
- package/dist/modern/visualBuilder/components/icons/index.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateOverlay.cjs +1 -0
- package/dist/modern/visualBuilder/generators/generateOverlay.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateOverlay.js +1 -0
- package/dist/modern/visualBuilder/generators/generateOverlay.js.map +1 -1
- package/dist/modern/visualBuilder/generators/generateToolbar.cjs +43 -10
- package/dist/modern/visualBuilder/generators/generateToolbar.cjs.map +1 -1
- package/dist/modern/visualBuilder/generators/generateToolbar.d.cts +11 -4
- package/dist/modern/visualBuilder/generators/generateToolbar.d.ts +11 -4
- package/dist/modern/visualBuilder/generators/generateToolbar.js +41 -9
- package/dist/modern/visualBuilder/generators/generateToolbar.js.map +1 -1
- package/dist/modern/visualBuilder/index.cjs +16 -2
- package/dist/modern/visualBuilder/index.cjs.map +1 -1
- package/dist/modern/visualBuilder/index.d.cts +2 -0
- package/dist/modern/visualBuilder/index.d.ts +2 -0
- package/dist/modern/visualBuilder/index.js +16 -2
- package/dist/modern/visualBuilder/index.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/index.cjs +3 -1
- package/dist/modern/visualBuilder/listeners/index.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/index.js +3 -1
- package/dist/modern/visualBuilder/listeners/index.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs +7 -3
- package/dist/modern/visualBuilder/listeners/mouseClick.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.d.cts +4 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.d.ts +4 -1
- package/dist/modern/visualBuilder/listeners/mouseClick.js +5 -2
- package/dist/modern/visualBuilder/listeners/mouseClick.js.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseHover.cjs +186 -133
- package/dist/modern/visualBuilder/listeners/mouseHover.cjs.map +1 -1
- package/dist/modern/visualBuilder/listeners/mouseHover.d.cts +5 -3
- package/dist/modern/visualBuilder/listeners/mouseHover.d.ts +5 -3
- package/dist/modern/visualBuilder/listeners/mouseHover.js +185 -133
- package/dist/modern/visualBuilder/listeners/mouseHover.js.map +1 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs +2 -22
- package/dist/modern/visualBuilder/utils/handleIndividualFields.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js +2 -12
- package/dist/modern/visualBuilder/utils/handleIndividualFields.js.map +1 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs +5 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.cjs.map +1 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.d.cts +6 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.d.ts +6 -1
- package/dist/modern/visualBuilder/utils/types/postMessage.types.js +5 -0
- package/dist/modern/visualBuilder/utils/types/postMessage.types.js.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.cjs +183 -3
- package/dist/modern/visualBuilder/visualBuilder.style.cjs.map +1 -1
- package/dist/modern/visualBuilder/visualBuilder.style.d.cts +25 -0
- package/dist/modern/visualBuilder/visualBuilder.style.d.ts +25 -0
- package/dist/modern/visualBuilder/visualBuilder.style.js +183 -3
- package/dist/modern/visualBuilder/visualBuilder.style.js.map +1 -1
- package/package.json +2 -1
|
@@ -48,25 +48,53 @@ var import_CslpError = require("./CslpError.cjs");
|
|
|
48
48
|
var import_errorHandling = require("../utils/errorHandling.cjs");
|
|
49
49
|
var import_postMessage = require("../utils/types/postMessage.types.cjs");
|
|
50
50
|
var import_getEntryPermissionsCached = require("../utils/getEntryPermissionsCached.cjs");
|
|
51
|
+
var import_icons2 = require("./icons/index.cjs");
|
|
52
|
+
var import_Tooltip = require("./Tooltip.cjs");
|
|
51
53
|
var import_jsx_runtime = require("preact/jsx-runtime");
|
|
52
54
|
async function getFieldDisplayNames(fieldMetadata) {
|
|
53
55
|
var _a;
|
|
54
56
|
const result = await ((_a = import_visualBuilderPostMessage.default) == null ? void 0 : _a.send(import_postMessage.VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata));
|
|
55
57
|
return result;
|
|
56
58
|
}
|
|
59
|
+
async function getContentTypeName(contentTypeUid) {
|
|
60
|
+
var _a;
|
|
61
|
+
try {
|
|
62
|
+
const result = await ((_a = import_visualBuilderPostMessage.default) == null ? void 0 : _a.send(import_postMessage.VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {
|
|
63
|
+
content_type_uid: contentTypeUid
|
|
64
|
+
}));
|
|
65
|
+
return result == null ? void 0 : result.contentTypeName;
|
|
66
|
+
} catch (e) {
|
|
67
|
+
console.warn("[getFieldLabelWrapper] Error getting content type name", e);
|
|
68
|
+
return "";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function getReferenceParentMap() {
|
|
72
|
+
var _a;
|
|
73
|
+
try {
|
|
74
|
+
const result = await ((_a = import_visualBuilderPostMessage.default) == null ? void 0 : _a.send(import_postMessage.VisualBuilderPostMessageEvents.REFERENCE_MAP, {})) ?? {};
|
|
75
|
+
return result;
|
|
76
|
+
} catch (e) {
|
|
77
|
+
console.warn("[getFieldLabelWrapper] Error getting reference parent map", e);
|
|
78
|
+
return {};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
57
81
|
function FieldLabelWrapperComponent(props) {
|
|
58
82
|
const { eventDetails } = props;
|
|
59
83
|
const [currentField, setCurrentField] = (0, import_compat.useState)({
|
|
60
84
|
text: "",
|
|
85
|
+
contentTypeName: "",
|
|
61
86
|
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CaretIcon, {}),
|
|
62
87
|
prefixIcon: null,
|
|
63
88
|
disabled: false,
|
|
64
|
-
isVariant: false
|
|
89
|
+
isVariant: false,
|
|
90
|
+
isReference: false,
|
|
91
|
+
referenceFieldName: "",
|
|
92
|
+
parentContentTypeName: ""
|
|
65
93
|
});
|
|
66
94
|
const [displayNames, setDisplayNames] = (0, import_compat.useState)(
|
|
67
95
|
{}
|
|
68
96
|
);
|
|
69
|
-
const [
|
|
97
|
+
const [dataLoading, setDataLoading] = (0, import_compat.useState)(true);
|
|
70
98
|
const [error, setError] = (0, import_compat.useState)(false);
|
|
71
99
|
const [isDropdownOpen, setIsDropdownOpen] = (0, import_compat.useState)(false);
|
|
72
100
|
function calculateTopOffset(index) {
|
|
@@ -77,7 +105,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
77
105
|
(0, import_compat.useEffect)(() => {
|
|
78
106
|
const fetchData = async () => {
|
|
79
107
|
var _a, _b;
|
|
80
|
-
|
|
108
|
+
setDataLoading(true);
|
|
81
109
|
const allPaths = (0, import_lodash_es.uniqBy)(
|
|
82
110
|
[
|
|
83
111
|
props.fieldMetadata,
|
|
@@ -87,13 +115,37 @@ function FieldLabelWrapperComponent(props) {
|
|
|
87
115
|
],
|
|
88
116
|
"cslpValue"
|
|
89
117
|
);
|
|
90
|
-
const displayNames2 = await
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
118
|
+
const [displayNames2, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([
|
|
119
|
+
getFieldDisplayNames(allPaths),
|
|
120
|
+
import_fieldSchemaMap.FieldSchemaMap.getFieldSchema(
|
|
121
|
+
props.fieldMetadata.content_type_uid,
|
|
122
|
+
props.fieldMetadata.fieldPath
|
|
123
|
+
),
|
|
124
|
+
getContentTypeName(
|
|
125
|
+
props.fieldMetadata.content_type_uid
|
|
126
|
+
),
|
|
127
|
+
getReferenceParentMap()
|
|
128
|
+
]);
|
|
129
|
+
const entryUid = props.fieldMetadata.entry_uid;
|
|
130
|
+
const referenceData = referenceParentMap[entryUid];
|
|
131
|
+
const isReference = !!referenceData;
|
|
132
|
+
let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : "";
|
|
133
|
+
let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : "";
|
|
134
|
+
if (isReference) {
|
|
135
|
+
const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
|
|
136
|
+
if (domAncestor) {
|
|
137
|
+
const domAncestorCslp = domAncestor.getAttribute("data-cslp");
|
|
138
|
+
const domAncestorDetails = (0, import_cslp.extractDetailsFromCslp)(domAncestorCslp);
|
|
139
|
+
const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
|
|
140
|
+
const domAncestorContentParent = referenceData == null ? void 0 : referenceData.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
|
|
141
|
+
if (domAncestorContentParent) {
|
|
142
|
+
referenceFieldName = domAncestorContentParent.referenceFieldName;
|
|
143
|
+
parentContentTypeName = domAncestorContentParent.contentTypeTitle;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
95
147
|
if ((0, import_errorHandling.hasPostMessageError)(displayNames2) || !fieldSchema) {
|
|
96
|
-
|
|
148
|
+
setDataLoading(false);
|
|
97
149
|
setError(true);
|
|
98
150
|
return;
|
|
99
151
|
}
|
|
@@ -112,6 +164,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
112
164
|
const isVariant = props.fieldMetadata.variant ? true : false;
|
|
113
165
|
setCurrentField({
|
|
114
166
|
text: currentFieldDisplayName,
|
|
167
|
+
contentTypeName: contentTypeName ?? "",
|
|
115
168
|
icon: fieldDisabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
116
169
|
"div",
|
|
117
170
|
{
|
|
@@ -122,18 +175,25 @@ function FieldLabelWrapperComponent(props) {
|
|
|
122
175
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.InfoIcon, {})
|
|
123
176
|
}
|
|
124
177
|
) : hasParentPaths ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CaretIcon, {}) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}),
|
|
178
|
+
isReference,
|
|
125
179
|
prefixIcon: (0, import_generateCustomCursor.getFieldIcon)(fieldSchema),
|
|
126
180
|
disabled: fieldDisabled,
|
|
181
|
+
referenceFieldName,
|
|
182
|
+
parentContentTypeName,
|
|
127
183
|
isVariant
|
|
128
184
|
});
|
|
129
185
|
if (displayNames2) {
|
|
130
186
|
setDisplayNames(displayNames2);
|
|
131
187
|
}
|
|
132
188
|
if (((_b = Object.keys(displayNames2 || {})) == null ? void 0 : _b.length) === allPaths.length) {
|
|
133
|
-
|
|
189
|
+
setDataLoading(false);
|
|
134
190
|
}
|
|
135
191
|
};
|
|
136
|
-
|
|
192
|
+
try {
|
|
193
|
+
fetchData();
|
|
194
|
+
} catch (e) {
|
|
195
|
+
console.warn("[getFieldLabelWrapper] Error fetching field label data", e);
|
|
196
|
+
}
|
|
137
197
|
}, [props]);
|
|
138
198
|
const onParentPathClick = (cslp) => {
|
|
139
199
|
const parentElement = props.getParentEditableElement(cslp);
|
|
@@ -144,7 +204,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
144
204
|
function getCurrentFieldIcon() {
|
|
145
205
|
if (error) {
|
|
146
206
|
return null;
|
|
147
|
-
} else if (
|
|
207
|
+
} else if (dataLoading) {
|
|
148
208
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_loading.LoadingIcon, {});
|
|
149
209
|
} else {
|
|
150
210
|
return currentField.icon;
|
|
@@ -157,7 +217,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
157
217
|
"visual-builder__focused-toolbar__field-label-container",
|
|
158
218
|
(0, import_visualBuilder.visualBuilderStyles)()["visual-builder__focused-toolbar__field-label-container"]
|
|
159
219
|
),
|
|
160
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
220
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_Tooltip.ToolbarTooltip, { data: { contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName }, disabled: !currentField.isReference || isDropdownOpen, children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
161
221
|
"div",
|
|
162
222
|
{
|
|
163
223
|
className: (0, import_classnames.default)(
|
|
@@ -176,6 +236,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
176
236
|
),
|
|
177
237
|
onClick: () => setIsDropdownOpen((prev) => !prev),
|
|
178
238
|
"data-testid": "visual-builder__focused-toolbar__field-label-wrapper",
|
|
239
|
+
"data-hovered-cslp": props.fieldMetadata.cslpValue,
|
|
179
240
|
children: [
|
|
180
241
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
181
242
|
"button",
|
|
@@ -188,8 +249,47 @@ function FieldLabelWrapperComponent(props) {
|
|
|
188
249
|
(0, import_visualBuilder.visualBuilderStyles)()["visual-builder__button-loader"],
|
|
189
250
|
error && (0, import_visualBuilder.visualBuilderStyles)()["visual-builder__button-error"]
|
|
190
251
|
),
|
|
191
|
-
disabled:
|
|
252
|
+
disabled: dataLoading,
|
|
192
253
|
children: [
|
|
254
|
+
currentField.isReference && !dataLoading && !error ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
255
|
+
"div",
|
|
256
|
+
{
|
|
257
|
+
className: (0, import_classnames.default)(
|
|
258
|
+
"visual-builder__reference-icon-container",
|
|
259
|
+
(0, import_visualBuilder.visualBuilderStyles)()["visual-builder__reference-icon-container"]
|
|
260
|
+
),
|
|
261
|
+
children: [
|
|
262
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
263
|
+
"div",
|
|
264
|
+
{
|
|
265
|
+
className: (0, import_classnames.default)(
|
|
266
|
+
"visual-builder__field-icon",
|
|
267
|
+
(0, import_visualBuilder.visualBuilderStyles)()["visual-builder__field-icon"]
|
|
268
|
+
),
|
|
269
|
+
dangerouslySetInnerHTML: {
|
|
270
|
+
__html: import_generateCustomCursor.FieldTypeIconsMap.reference
|
|
271
|
+
},
|
|
272
|
+
"data-testid": "visual-builder__field-icon-caret"
|
|
273
|
+
}
|
|
274
|
+
),
|
|
275
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons.CaretRightIcon, {})
|
|
276
|
+
]
|
|
277
|
+
}
|
|
278
|
+
) : null,
|
|
279
|
+
currentField.contentTypeName && !dataLoading && !error ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
280
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icons2.ContentTypeIcon, {}),
|
|
281
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
282
|
+
"div",
|
|
283
|
+
{
|
|
284
|
+
className: (0, import_classnames.default)(
|
|
285
|
+
"visual-builder__focused-toolbar__text",
|
|
286
|
+
(0, import_visualBuilder.visualBuilderStyles)()["visual-builder__focused-toolbar__text"]
|
|
287
|
+
),
|
|
288
|
+
"data-testid": "visual-builder__focused-toolbar__ct-name",
|
|
289
|
+
children: currentField.contentTypeName + " : "
|
|
290
|
+
}
|
|
291
|
+
)
|
|
292
|
+
] }) : null,
|
|
193
293
|
currentField.prefixIcon ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
194
294
|
"div",
|
|
195
295
|
{
|
|
@@ -238,7 +338,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
238
338
|
))
|
|
239
339
|
]
|
|
240
340
|
}
|
|
241
|
-
)
|
|
341
|
+
) })
|
|
242
342
|
}
|
|
243
343
|
);
|
|
244
344
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [displayNamesLoading, setDisplayNamesLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDisplayNamesLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths.map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const displayNames = await getFieldDisplayNames(allPaths);\n const fieldSchema = await FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n );\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDisplayNamesLoading(false);\n setError(true);\n\n return;\n }\n\n const entryPermissions = await getEntryPermissionsCached({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryPermissions\n );\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={reason}\n >\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDisplayNamesLoading(false);\n }\n };\n\n fetchData();\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (displayNamesLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={displayNamesLoading}\n >\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":"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","names":["visualBuilderPostMessage","displayNames","classNames"]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/visualBuilder/components/fieldLabelWrapper.tsx"],"sourcesContent":["import classNames from \"classnames\";\nimport React, { useEffect, useState } from \"preact/compat\";\nimport { extractDetailsFromCslp } from \"../../cslp\";\nimport { CslpData } from \"../../cslp/types/cslp.types\";\nimport { VisualBuilderCslpEventDetails } from \"../types/visualBuilder.types\";\nimport { FieldSchemaMap } from \"../utils/fieldSchemaMap\";\nimport { isFieldDisabled } from \"../utils/isFieldDisabled\";\nimport visualBuilderPostMessage from \"../utils/visualBuilderPostMessage\";\nimport { CaretIcon, CaretRightIcon, InfoIcon } from \"./icons\";\nimport { LoadingIcon } from \"./icons/loading\";\nimport { FieldTypeIconsMap, getFieldIcon } from \"../generators/generateCustomCursor\";\nimport { uniqBy } from \"lodash-es\";\nimport { visualBuilderStyles } from \"../visualBuilder.style\";\nimport { CslpError } from \"./CslpError\";\nimport { hasPostMessageError } from \"../utils/errorHandling\";\nimport { VisualBuilderPostMessageEvents } from \"../utils/types/postMessage.types\";\nimport { getEntryPermissionsCached } from \"../utils/getEntryPermissionsCached\";\nimport { ContentTypeIcon } from \"./icons\";\nimport { ToolbarTooltip } from \"./Tooltip\";\n\ninterface ReferenceParentMap {\n [entryUid: string]: {\n contentTypeUid: string;\n contentTypeTitle: string;\n referenceFieldName: string;\n }[]\n}\n\nasync function getFieldDisplayNames(fieldMetadata: CslpData[]) {\n const result = await visualBuilderPostMessage?.send<{\n [k: string]: string;\n }>(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata);\n return result;\n}\n\nasync function getContentTypeName(contentTypeUid: string) {\n try {\n const result = await visualBuilderPostMessage?.send<{\n contentTypeName: string;\n }>(VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {\n content_type_uid: contentTypeUid,\n });\n return result?.contentTypeName;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting content type name\", e);\n return \"\";\n }\n}\n\nasync function getReferenceParentMap() {\n try {\n const result = await visualBuilderPostMessage?.send<ReferenceParentMap>(VisualBuilderPostMessageEvents.REFERENCE_MAP, {}) ?? {};\n return result;\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error getting reference parent map\", e);\n return {};\n }\n \n}\n\ninterface FieldLabelWrapperProps {\n fieldMetadata: CslpData;\n eventDetails: VisualBuilderCslpEventDetails;\n parentPaths: string[];\n getParentEditableElement: (cslp: string) => HTMLElement | null;\n}\n\ninterface ICurrentField {\n text: string;\n contentTypeName: string;\n icon: JSX.Element;\n prefixIcon: any;\n disabled: boolean;\n isVariant: boolean;\n isReference: boolean;\n referenceFieldName: string;\n parentContentTypeName: string;\n}\n\nfunction FieldLabelWrapperComponent(\n props: FieldLabelWrapperProps\n): JSX.Element {\n const { eventDetails } = props;\n const [currentField, setCurrentField] = useState<ICurrentField>({\n text: \"\",\n contentTypeName: \"\",\n icon: <CaretIcon />,\n prefixIcon: null,\n disabled: false,\n isVariant: false,\n isReference: false,\n referenceFieldName: \"\",\n parentContentTypeName: \"\",\n });\n const [displayNames, setDisplayNames] = useState<Record<string, string>>(\n {}\n );\n const [dataLoading, setDataLoading] = useState(true);\n const [error, setError] = useState(false);\n const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n\n function calculateTopOffset(index: number) {\n const height = -30; // from bottom\n const offset = (index + 1) * height;\n return `${offset}px`;\n }\n\n useEffect(() => {\n const fetchData = async () => {\n setDataLoading(true);\n const allPaths = uniqBy(\n [\n props.fieldMetadata,\n ...props.parentPaths.map((path) => {\n return extractDetailsFromCslp(path);\n }),\n ],\n \"cslpValue\"\n );\n const [displayNames, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([\n getFieldDisplayNames(allPaths),\n FieldSchemaMap.getFieldSchema(\n props.fieldMetadata.content_type_uid,\n props.fieldMetadata.fieldPath\n ),\n getContentTypeName(\n props.fieldMetadata.content_type_uid\n ),\n getReferenceParentMap()\n ]);\n const entryUid = props.fieldMetadata.entry_uid;\n \n const referenceData = referenceParentMap[entryUid];\n const isReference = !!referenceData;\n\n let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : \"\";\n let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : \"\";\n\n if(isReference) {\n const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^=\"${props.fieldMetadata.content_type_uid}\"])`);\n if(domAncestor) {\n const domAncestorCslp = domAncestor.getAttribute(\"data-cslp\");\n const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp!);\n const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;\n const domAncestorContentParent = referenceData?.find(data => data.contentTypeUid === domAncestorContentTypeUid);\n if(domAncestorContentParent) {\n referenceFieldName = domAncestorContentParent.referenceFieldName;\n parentContentTypeName = domAncestorContentParent.contentTypeTitle;\n }\n }\n }\n\n if (hasPostMessageError(displayNames) || !fieldSchema) {\n setDataLoading(false);\n setError(true);\n\n return;\n }\n\n const entryPermissions = await getEntryPermissionsCached({\n entryUid: props.fieldMetadata.entry_uid,\n contentTypeUid: props.fieldMetadata.content_type_uid,\n locale: props.fieldMetadata.locale,\n });\n const { isDisabled: fieldDisabled, reason } = isFieldDisabled(\n fieldSchema,\n eventDetails,\n entryPermissions\n );\n\n const currentFieldDisplayName =\n displayNames?.[props.fieldMetadata.cslpValue] ??\n fieldSchema.display_name;\n\n const hasParentPaths = !!props?.parentPaths?.length;\n const isVariant = props.fieldMetadata.variant ? true : false;\n\n setCurrentField({\n text: currentFieldDisplayName,\n contentTypeName: contentTypeName ?? \"\",\n icon: fieldDisabled ? (\n <div\n className={classNames(\n visualBuilderStyles()[\n \"visual-builder__tooltip--persistent\"\n ]\n )}\n data-tooltip={reason}\n >\n <InfoIcon />\n </div>\n ) : hasParentPaths ? (\n <CaretIcon />\n ) : (\n <></>\n ),\n isReference,\n prefixIcon: getFieldIcon(fieldSchema),\n disabled: fieldDisabled,\n referenceFieldName,\n parentContentTypeName,\n isVariant: isVariant,\n });\n\n if (displayNames) {\n setDisplayNames(displayNames);\n }\n if (Object.keys(displayNames || {})?.length === allPaths.length) {\n setDataLoading(false);\n }\n };\n\n try {\n fetchData();\n } catch(e) {\n console.warn(\"[getFieldLabelWrapper] Error fetching field label data\", e);\n }\n }, [props]);\n\n const onParentPathClick = (cslp: string) => {\n const parentElement = props.getParentEditableElement(cslp);\n if (parentElement) {\n // emulate clicking on the parent element\n parentElement.click();\n }\n };\n\n function getCurrentFieldIcon() {\n if (error) {\n return null;\n } else if (dataLoading) {\n return <LoadingIcon />;\n } else {\n return currentField.icon;\n }\n }\n\n return (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-container\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-container\"\n ]\n )}\n >\n <ToolbarTooltip data={{contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName}} disabled={!currentField.isReference || isDropdownOpen}>\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper\"\n ],\n {\n \"visual-builder__focused-toolbar--field-disabled\":\n currentField.disabled,\n },\n {\n [visualBuilderStyles()[\n \"visual-builder__focused-toolbar--field-disabled\"\n ]]: currentField.disabled,\n },\n {\n \"field-label-dropdown-open\": isDropdownOpen,\n [visualBuilderStyles()[\"field-label-dropdown-open\"]]:\n isDropdownOpen,\n }\n )}\n onClick={() => setIsDropdownOpen((prev) => !prev)}\n data-testid=\"visual-builder__focused-toolbar__field-label-wrapper\"\n data-hovered-cslp={props.fieldMetadata.cslpValue}\n >\n <button\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field visual-builder__button visual-builder__button--primary visual-builder__button-loader\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__current-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--primary\"\n ],\n visualBuilderStyles()[\"visual-builder__button-loader\"],\n error &&\n visualBuilderStyles()[\n \"visual-builder__button-error\"\n ]\n )}\n disabled={dataLoading}\n >\n {\n currentField.isReference && !dataLoading && !error ? \n <div \n className={classNames(\n \"visual-builder__reference-icon-container\",\n visualBuilderStyles()[\"visual-builder__reference-icon-container\"]\n )}\n >\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: FieldTypeIconsMap.reference,\n }}\n data-testid=\"visual-builder__field-icon-caret\"\n />\n <CaretRightIcon />\n </div> : null\n }\n {\n currentField.contentTypeName && !dataLoading && !error ?\n <>\n <ContentTypeIcon />\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__ct-name\"\n >\n {currentField.contentTypeName + \" : \"}\n </div>\n </> : null\n }\n {currentField.prefixIcon ? (\n <div\n className={classNames(\n \"visual-builder__field-icon\",\n visualBuilderStyles()[\n \"visual-builder__field-icon\"\n ]\n )}\n dangerouslySetInnerHTML={{\n __html: currentField.prefixIcon,\n }}\n data-testid=\"visual-builder__field-icon\"\n />\n ) : null}\n {currentField.text ? (\n <div\n className={classNames(\n \"visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-testid=\"visual-builder__focused-toolbar__text\"\n >\n {currentField.text}\n </div>\n ) : null}\n {getCurrentFieldIcon()}\n {error ? <CslpError /> : null}\n </button>\n {props.parentPaths.map((path, index) => (\n <button\n key={path}\n className={classNames(\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field visual-builder__button visual-builder__button--secondary visual-builder__focused-toolbar__text\",\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__field-label-wrapper__parent-field\"\n ],\n visualBuilderStyles()[\"visual-builder__button\"],\n visualBuilderStyles()[\n \"visual-builder__button--secondary\"\n ],\n visualBuilderStyles()[\n \"visual-builder__focused-toolbar__text\"\n ]\n )}\n data-target-cslp={path}\n style={{ top: calculateTopOffset(index) }}\n onClick={() => onParentPathClick(path)}\n >\n {displayNames[path]}\n </button>\n ))}\n </div>\n </ToolbarTooltip>\n </div>\n );\n}\n\nexport default FieldLabelWrapperComponent;\n"],"mappings":"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","names":["import_icons","visualBuilderPostMessage","displayNames","classNames"]}
|
|
@@ -7,34 +7,62 @@ import { extractDetailsFromCslp } from "../../cslp/index.js";
|
|
|
7
7
|
import { FieldSchemaMap } from "../utils/fieldSchemaMap.js";
|
|
8
8
|
import { isFieldDisabled } from "../utils/isFieldDisabled.js";
|
|
9
9
|
import visualBuilderPostMessage from "../utils/visualBuilderPostMessage.js";
|
|
10
|
-
import { CaretIcon, InfoIcon } from "./icons/index.js";
|
|
10
|
+
import { CaretIcon, CaretRightIcon, InfoIcon } from "./icons/index.js";
|
|
11
11
|
import { LoadingIcon } from "./icons/loading.js";
|
|
12
|
-
import { getFieldIcon } from "../generators/generateCustomCursor.js";
|
|
12
|
+
import { FieldTypeIconsMap, getFieldIcon } from "../generators/generateCustomCursor.js";
|
|
13
13
|
import { uniqBy } from "lodash-es";
|
|
14
14
|
import { visualBuilderStyles } from "../visualBuilder.style.js";
|
|
15
15
|
import { CslpError } from "./CslpError.js";
|
|
16
16
|
import { hasPostMessageError } from "../utils/errorHandling.js";
|
|
17
17
|
import { VisualBuilderPostMessageEvents } from "../utils/types/postMessage.types.js";
|
|
18
18
|
import { getEntryPermissionsCached } from "../utils/getEntryPermissionsCached.js";
|
|
19
|
+
import { ContentTypeIcon } from "./icons/index.js";
|
|
20
|
+
import { ToolbarTooltip } from "./Tooltip.js";
|
|
19
21
|
import { Fragment, jsx, jsxs } from "preact/jsx-runtime";
|
|
20
22
|
async function getFieldDisplayNames(fieldMetadata) {
|
|
21
23
|
var _a;
|
|
22
24
|
const result = await ((_a = visualBuilderPostMessage) == null ? void 0 : _a.send(VisualBuilderPostMessageEvents.GET_FIELD_DISPLAY_NAMES, fieldMetadata));
|
|
23
25
|
return result;
|
|
24
26
|
}
|
|
27
|
+
async function getContentTypeName(contentTypeUid) {
|
|
28
|
+
var _a;
|
|
29
|
+
try {
|
|
30
|
+
const result = await ((_a = visualBuilderPostMessage) == null ? void 0 : _a.send(VisualBuilderPostMessageEvents.GET_CONTENT_TYPE_NAME, {
|
|
31
|
+
content_type_uid: contentTypeUid
|
|
32
|
+
}));
|
|
33
|
+
return result == null ? void 0 : result.contentTypeName;
|
|
34
|
+
} catch (e) {
|
|
35
|
+
console.warn("[getFieldLabelWrapper] Error getting content type name", e);
|
|
36
|
+
return "";
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function getReferenceParentMap() {
|
|
40
|
+
var _a;
|
|
41
|
+
try {
|
|
42
|
+
const result = await ((_a = visualBuilderPostMessage) == null ? void 0 : _a.send(VisualBuilderPostMessageEvents.REFERENCE_MAP, {})) ?? {};
|
|
43
|
+
return result;
|
|
44
|
+
} catch (e) {
|
|
45
|
+
console.warn("[getFieldLabelWrapper] Error getting reference parent map", e);
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
48
|
+
}
|
|
25
49
|
function FieldLabelWrapperComponent(props) {
|
|
26
50
|
const { eventDetails } = props;
|
|
27
51
|
const [currentField, setCurrentField] = useState({
|
|
28
52
|
text: "",
|
|
53
|
+
contentTypeName: "",
|
|
29
54
|
icon: /* @__PURE__ */ jsx(CaretIcon, {}),
|
|
30
55
|
prefixIcon: null,
|
|
31
56
|
disabled: false,
|
|
32
|
-
isVariant: false
|
|
57
|
+
isVariant: false,
|
|
58
|
+
isReference: false,
|
|
59
|
+
referenceFieldName: "",
|
|
60
|
+
parentContentTypeName: ""
|
|
33
61
|
});
|
|
34
62
|
const [displayNames, setDisplayNames] = useState(
|
|
35
63
|
{}
|
|
36
64
|
);
|
|
37
|
-
const [
|
|
65
|
+
const [dataLoading, setDataLoading] = useState(true);
|
|
38
66
|
const [error, setError] = useState(false);
|
|
39
67
|
const [isDropdownOpen, setIsDropdownOpen] = useState(false);
|
|
40
68
|
function calculateTopOffset(index) {
|
|
@@ -45,7 +73,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
45
73
|
useEffect(() => {
|
|
46
74
|
const fetchData = async () => {
|
|
47
75
|
var _a, _b;
|
|
48
|
-
|
|
76
|
+
setDataLoading(true);
|
|
49
77
|
const allPaths = uniqBy(
|
|
50
78
|
[
|
|
51
79
|
props.fieldMetadata,
|
|
@@ -55,13 +83,37 @@ function FieldLabelWrapperComponent(props) {
|
|
|
55
83
|
],
|
|
56
84
|
"cslpValue"
|
|
57
85
|
);
|
|
58
|
-
const displayNames2 = await
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
86
|
+
const [displayNames2, fieldSchema, contentTypeName, referenceParentMap] = await Promise.all([
|
|
87
|
+
getFieldDisplayNames(allPaths),
|
|
88
|
+
FieldSchemaMap.getFieldSchema(
|
|
89
|
+
props.fieldMetadata.content_type_uid,
|
|
90
|
+
props.fieldMetadata.fieldPath
|
|
91
|
+
),
|
|
92
|
+
getContentTypeName(
|
|
93
|
+
props.fieldMetadata.content_type_uid
|
|
94
|
+
),
|
|
95
|
+
getReferenceParentMap()
|
|
96
|
+
]);
|
|
97
|
+
const entryUid = props.fieldMetadata.entry_uid;
|
|
98
|
+
const referenceData = referenceParentMap[entryUid];
|
|
99
|
+
const isReference = !!referenceData;
|
|
100
|
+
let referenceFieldName = referenceData ? referenceData[0].referenceFieldName : "";
|
|
101
|
+
let parentContentTypeName = referenceData ? referenceData[0].contentTypeTitle : "";
|
|
102
|
+
if (isReference) {
|
|
103
|
+
const domAncestor = eventDetails.editableElement.closest(`[data-cslp]:not([data-cslp^="${props.fieldMetadata.content_type_uid}"])`);
|
|
104
|
+
if (domAncestor) {
|
|
105
|
+
const domAncestorCslp = domAncestor.getAttribute("data-cslp");
|
|
106
|
+
const domAncestorDetails = extractDetailsFromCslp(domAncestorCslp);
|
|
107
|
+
const domAncestorContentTypeUid = domAncestorDetails.content_type_uid;
|
|
108
|
+
const domAncestorContentParent = referenceData == null ? void 0 : referenceData.find((data) => data.contentTypeUid === domAncestorContentTypeUid);
|
|
109
|
+
if (domAncestorContentParent) {
|
|
110
|
+
referenceFieldName = domAncestorContentParent.referenceFieldName;
|
|
111
|
+
parentContentTypeName = domAncestorContentParent.contentTypeTitle;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
63
115
|
if (hasPostMessageError(displayNames2) || !fieldSchema) {
|
|
64
|
-
|
|
116
|
+
setDataLoading(false);
|
|
65
117
|
setError(true);
|
|
66
118
|
return;
|
|
67
119
|
}
|
|
@@ -80,6 +132,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
80
132
|
const isVariant = props.fieldMetadata.variant ? true : false;
|
|
81
133
|
setCurrentField({
|
|
82
134
|
text: currentFieldDisplayName,
|
|
135
|
+
contentTypeName: contentTypeName ?? "",
|
|
83
136
|
icon: fieldDisabled ? /* @__PURE__ */ jsx(
|
|
84
137
|
"div",
|
|
85
138
|
{
|
|
@@ -90,18 +143,25 @@ function FieldLabelWrapperComponent(props) {
|
|
|
90
143
|
children: /* @__PURE__ */ jsx(InfoIcon, {})
|
|
91
144
|
}
|
|
92
145
|
) : hasParentPaths ? /* @__PURE__ */ jsx(CaretIcon, {}) : /* @__PURE__ */ jsx(Fragment, {}),
|
|
146
|
+
isReference,
|
|
93
147
|
prefixIcon: getFieldIcon(fieldSchema),
|
|
94
148
|
disabled: fieldDisabled,
|
|
149
|
+
referenceFieldName,
|
|
150
|
+
parentContentTypeName,
|
|
95
151
|
isVariant
|
|
96
152
|
});
|
|
97
153
|
if (displayNames2) {
|
|
98
154
|
setDisplayNames(displayNames2);
|
|
99
155
|
}
|
|
100
156
|
if (((_b = Object.keys(displayNames2 || {})) == null ? void 0 : _b.length) === allPaths.length) {
|
|
101
|
-
|
|
157
|
+
setDataLoading(false);
|
|
102
158
|
}
|
|
103
159
|
};
|
|
104
|
-
|
|
160
|
+
try {
|
|
161
|
+
fetchData();
|
|
162
|
+
} catch (e) {
|
|
163
|
+
console.warn("[getFieldLabelWrapper] Error fetching field label data", e);
|
|
164
|
+
}
|
|
105
165
|
}, [props]);
|
|
106
166
|
const onParentPathClick = (cslp) => {
|
|
107
167
|
const parentElement = props.getParentEditableElement(cslp);
|
|
@@ -112,7 +172,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
112
172
|
function getCurrentFieldIcon() {
|
|
113
173
|
if (error) {
|
|
114
174
|
return null;
|
|
115
|
-
} else if (
|
|
175
|
+
} else if (dataLoading) {
|
|
116
176
|
return /* @__PURE__ */ jsx(LoadingIcon, {});
|
|
117
177
|
} else {
|
|
118
178
|
return currentField.icon;
|
|
@@ -125,7 +185,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
125
185
|
"visual-builder__focused-toolbar__field-label-container",
|
|
126
186
|
visualBuilderStyles()["visual-builder__focused-toolbar__field-label-container"]
|
|
127
187
|
),
|
|
128
|
-
children: /* @__PURE__ */ jsxs(
|
|
188
|
+
children: /* @__PURE__ */ jsx(ToolbarTooltip, { data: { contentTypeName: currentField.parentContentTypeName, referenceFieldName: currentField.referenceFieldName }, disabled: !currentField.isReference || isDropdownOpen, children: /* @__PURE__ */ jsxs(
|
|
129
189
|
"div",
|
|
130
190
|
{
|
|
131
191
|
className: classNames(
|
|
@@ -144,6 +204,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
144
204
|
),
|
|
145
205
|
onClick: () => setIsDropdownOpen((prev) => !prev),
|
|
146
206
|
"data-testid": "visual-builder__focused-toolbar__field-label-wrapper",
|
|
207
|
+
"data-hovered-cslp": props.fieldMetadata.cslpValue,
|
|
147
208
|
children: [
|
|
148
209
|
/* @__PURE__ */ jsxs(
|
|
149
210
|
"button",
|
|
@@ -156,8 +217,47 @@ function FieldLabelWrapperComponent(props) {
|
|
|
156
217
|
visualBuilderStyles()["visual-builder__button-loader"],
|
|
157
218
|
error && visualBuilderStyles()["visual-builder__button-error"]
|
|
158
219
|
),
|
|
159
|
-
disabled:
|
|
220
|
+
disabled: dataLoading,
|
|
160
221
|
children: [
|
|
222
|
+
currentField.isReference && !dataLoading && !error ? /* @__PURE__ */ jsxs(
|
|
223
|
+
"div",
|
|
224
|
+
{
|
|
225
|
+
className: classNames(
|
|
226
|
+
"visual-builder__reference-icon-container",
|
|
227
|
+
visualBuilderStyles()["visual-builder__reference-icon-container"]
|
|
228
|
+
),
|
|
229
|
+
children: [
|
|
230
|
+
/* @__PURE__ */ jsx(
|
|
231
|
+
"div",
|
|
232
|
+
{
|
|
233
|
+
className: classNames(
|
|
234
|
+
"visual-builder__field-icon",
|
|
235
|
+
visualBuilderStyles()["visual-builder__field-icon"]
|
|
236
|
+
),
|
|
237
|
+
dangerouslySetInnerHTML: {
|
|
238
|
+
__html: FieldTypeIconsMap.reference
|
|
239
|
+
},
|
|
240
|
+
"data-testid": "visual-builder__field-icon-caret"
|
|
241
|
+
}
|
|
242
|
+
),
|
|
243
|
+
/* @__PURE__ */ jsx(CaretRightIcon, {})
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
) : null,
|
|
247
|
+
currentField.contentTypeName && !dataLoading && !error ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
248
|
+
/* @__PURE__ */ jsx(ContentTypeIcon, {}),
|
|
249
|
+
/* @__PURE__ */ jsx(
|
|
250
|
+
"div",
|
|
251
|
+
{
|
|
252
|
+
className: classNames(
|
|
253
|
+
"visual-builder__focused-toolbar__text",
|
|
254
|
+
visualBuilderStyles()["visual-builder__focused-toolbar__text"]
|
|
255
|
+
),
|
|
256
|
+
"data-testid": "visual-builder__focused-toolbar__ct-name",
|
|
257
|
+
children: currentField.contentTypeName + " : "
|
|
258
|
+
}
|
|
259
|
+
)
|
|
260
|
+
] }) : null,
|
|
161
261
|
currentField.prefixIcon ? /* @__PURE__ */ jsx(
|
|
162
262
|
"div",
|
|
163
263
|
{
|
|
@@ -206,7 +306,7 @@ function FieldLabelWrapperComponent(props) {
|
|
|
206
306
|
))
|
|
207
307
|
]
|
|
208
308
|
}
|
|
209
|
-
)
|
|
309
|
+
) })
|
|
210
310
|
}
|
|
211
311
|
);
|
|
212
312
|
}
|