@elementor/editor-components 4.3.0-999 → 4.3.0-beta2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +121 -50
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +90 -16
- package/dist/index.mjs.map +1 -1
- package/package.json +23 -23
- package/src/component-overridable-transformer.ts +23 -9
- package/src/create-component-type.ts +6 -1
- package/src/types.ts +1 -1
- package/src/utils/component-document-data.ts +25 -8
- package/src/utils/reconcile-component-instance-elements.ts +107 -0
package/dist/index.mjs
CHANGED
|
@@ -334,14 +334,21 @@ var useIsSanitizedComponent = (componentId, key) => {
|
|
|
334
334
|
};
|
|
335
335
|
|
|
336
336
|
// src/utils/component-document-data.ts
|
|
337
|
-
import {
|
|
338
|
-
var
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
337
|
+
import { ajax as ajax2 } from "@elementor/editor-v1-adapters";
|
|
338
|
+
var getComponentDocumentParams = (id) => ({
|
|
339
|
+
action: "get_document_config",
|
|
340
|
+
unique_id: `document-${id}`,
|
|
341
|
+
data: { id }
|
|
342
|
+
});
|
|
343
|
+
var pendingRequests = /* @__PURE__ */ new Map();
|
|
344
|
+
var getComponentDocumentData = (id) => {
|
|
345
|
+
const pendingRequest = pendingRequests.get(id);
|
|
346
|
+
if (pendingRequest) {
|
|
347
|
+
return pendingRequest;
|
|
348
|
+
}
|
|
349
|
+
const request = ajax2.load(getComponentDocumentParams(id)).catch(() => null).finally(() => pendingRequests.delete(id));
|
|
350
|
+
pendingRequests.set(id, request);
|
|
351
|
+
return request;
|
|
345
352
|
};
|
|
346
353
|
|
|
347
354
|
// src/component-instance-transformer.ts
|
|
@@ -375,23 +382,27 @@ import { createTransformer as createTransformer2, settingsTransformersRegistry }
|
|
|
375
382
|
var componentOverridableTransformer = createTransformer2(
|
|
376
383
|
(value, options) => {
|
|
377
384
|
const { overrides } = options.renderContext ?? {};
|
|
385
|
+
const originValue = normalizeOriginValue(value.origin_value);
|
|
378
386
|
const overrideValue = overrides?.[value.override_key];
|
|
379
387
|
if (overrideValue) {
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
return transformOverride(value, options, overrideValue);
|
|
388
|
+
if (isOriginValueOverride(originValue)) {
|
|
389
|
+
return transformOverride(originValue, options, overrideValue);
|
|
383
390
|
}
|
|
384
391
|
return overrideValue;
|
|
385
392
|
}
|
|
386
|
-
return
|
|
393
|
+
return originValue;
|
|
387
394
|
}
|
|
388
395
|
);
|
|
389
|
-
function
|
|
396
|
+
function normalizeOriginValue(originValue) {
|
|
397
|
+
const isEmpty = !!originValue && Object.keys(originValue).length === 0;
|
|
398
|
+
return isEmpty ? null : originValue;
|
|
399
|
+
}
|
|
400
|
+
function transformOverride(originValue, options, overrideValue) {
|
|
390
401
|
const transformer = settingsTransformersRegistry.get("override");
|
|
391
402
|
if (!transformer) {
|
|
392
403
|
return null;
|
|
393
404
|
}
|
|
394
|
-
const transformedValue = transformer(
|
|
405
|
+
const transformedValue = transformer(originValue.value, options);
|
|
395
406
|
if (!transformedValue) {
|
|
396
407
|
return null;
|
|
397
408
|
}
|
|
@@ -401,7 +412,7 @@ function transformOverride(value, options, overrideValue) {
|
|
|
401
412
|
};
|
|
402
413
|
}
|
|
403
414
|
function isOriginValueOverride(originValue) {
|
|
404
|
-
return originValue
|
|
415
|
+
return originValue?.$$type === "override";
|
|
405
416
|
}
|
|
406
417
|
|
|
407
418
|
// src/component-override-transformer.ts
|
|
@@ -2612,6 +2623,65 @@ function formatComponentElementsId(elements, path) {
|
|
|
2612
2623
|
});
|
|
2613
2624
|
}
|
|
2614
2625
|
|
|
2626
|
+
// src/utils/reconcile-component-instance-elements.ts
|
|
2627
|
+
import {
|
|
2628
|
+
getWidgetsCache as getWidgetsCache2,
|
|
2629
|
+
reconcileInitialChildren
|
|
2630
|
+
} from "@elementor/editor-elements";
|
|
2631
|
+
import { hashString as hashString2 } from "@elementor/utils";
|
|
2632
|
+
var ELEMENT_ID_LENGTH2 = 7;
|
|
2633
|
+
function overridesRecordToMapping(overrides) {
|
|
2634
|
+
const mapping = {};
|
|
2635
|
+
for (const [key, value] of Object.entries(overrides)) {
|
|
2636
|
+
mapping[key] = { value };
|
|
2637
|
+
}
|
|
2638
|
+
return mapping;
|
|
2639
|
+
}
|
|
2640
|
+
function getElementConfig(element) {
|
|
2641
|
+
const type = element.elType === "widget" ? element.widgetType : element.elType;
|
|
2642
|
+
if (!type) {
|
|
2643
|
+
return void 0;
|
|
2644
|
+
}
|
|
2645
|
+
return getWidgetsCache2()?.[type];
|
|
2646
|
+
}
|
|
2647
|
+
function deriveIds(element, seed) {
|
|
2648
|
+
const id = hashString2(seed, ELEMENT_ID_LENGTH2);
|
|
2649
|
+
return {
|
|
2650
|
+
...element,
|
|
2651
|
+
id,
|
|
2652
|
+
elements: (element.elements ?? []).map((child, index) => deriveIds(child, `${id}_${index}`))
|
|
2653
|
+
};
|
|
2654
|
+
}
|
|
2655
|
+
function reconcileElementTree(element, overridesMapping) {
|
|
2656
|
+
const elementConfig = getElementConfig(element);
|
|
2657
|
+
const withOverrides = applyOverridesToSettings(element.settings ?? {}, overridesMapping);
|
|
2658
|
+
const effectiveSettings = unwrapOverridableSettings(withOverrides);
|
|
2659
|
+
const originalChildren = element.elements ?? [];
|
|
2660
|
+
const originalChildIds = new Set(originalChildren.map((child) => child.id));
|
|
2661
|
+
const attributes = {
|
|
2662
|
+
elements: [...originalChildren],
|
|
2663
|
+
settings: effectiveSettings
|
|
2664
|
+
};
|
|
2665
|
+
if (elementConfig?.children_dependencies?.length) {
|
|
2666
|
+
reconcileInitialChildren({
|
|
2667
|
+
elementId: element.id,
|
|
2668
|
+
elementConfig,
|
|
2669
|
+
attributes
|
|
2670
|
+
});
|
|
2671
|
+
}
|
|
2672
|
+
const reconciledChildren = (attributes.elements ?? []).map(
|
|
2673
|
+
(child) => originalChildIds.has(child.id) ? child : deriveIds(child, `${element.id}_${child.elType}`)
|
|
2674
|
+
).map((child) => reconcileElementTree(child, overridesMapping));
|
|
2675
|
+
return {
|
|
2676
|
+
...element,
|
|
2677
|
+
elements: reconciledChildren
|
|
2678
|
+
};
|
|
2679
|
+
}
|
|
2680
|
+
function reconcileComponentInstanceElements(elements, overrides = {}) {
|
|
2681
|
+
const overridesMapping = overridesRecordToMapping(overrides);
|
|
2682
|
+
return elements.map((element) => reconcileElementTree(element, overridesMapping));
|
|
2683
|
+
}
|
|
2684
|
+
|
|
2615
2685
|
// src/utils/switch-to-component.ts
|
|
2616
2686
|
import { invalidateDocumentData, switchToDocument } from "@elementor/editor-documents";
|
|
2617
2687
|
import { getCurrentDocumentContainer, selectElement as selectElement2 } from "@elementor/editor-elements";
|
|
@@ -2788,7 +2858,11 @@ function createComponentView(options) {
|
|
|
2788
2858
|
};
|
|
2789
2859
|
const instanceId = this.model.get("id");
|
|
2790
2860
|
const elements = componentInstance.elements ?? [];
|
|
2791
|
-
const
|
|
2861
|
+
const reconciledElements = reconcileComponentInstanceElements(
|
|
2862
|
+
elements,
|
|
2863
|
+
componentInstance.overrides ?? {}
|
|
2864
|
+
);
|
|
2865
|
+
const formattedElements = formatComponentElementsId(reconciledElements, [instanceId]);
|
|
2792
2866
|
this.collection = legacyWindow.elementor.createBackboneElementsCollection(formattedElements);
|
|
2793
2867
|
this.collection.models.forEach(setInactiveRecursively);
|
|
2794
2868
|
settings.component_instance = "<template data-children-placeholder></template>";
|