@tunghtml/strapi-plugin-composite-field 1.1.5 → 1.1.6
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.
|
@@ -516,29 +516,47 @@ const CompositeInput = (props) => {
|
|
|
516
516
|
}, [fields, separator, onChange, name]);
|
|
517
517
|
React__namespace.default.useEffect(() => {
|
|
518
518
|
if (!autoGenerate || fields.length === 0) return;
|
|
519
|
+
let debounceTimer;
|
|
519
520
|
const handleFieldChange = () => {
|
|
520
|
-
|
|
521
|
+
clearTimeout(debounceTimer);
|
|
522
|
+
debounceTimer = setTimeout(() => {
|
|
521
523
|
handleGenerate();
|
|
522
524
|
}, 300);
|
|
523
525
|
};
|
|
524
526
|
const listeners = [];
|
|
527
|
+
const observers = [];
|
|
525
528
|
fields.forEach((fieldPath) => {
|
|
526
529
|
const elements = document.querySelectorAll(
|
|
527
|
-
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]
|
|
530
|
+
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]`
|
|
528
531
|
);
|
|
529
532
|
elements.forEach((element) => {
|
|
530
533
|
element.addEventListener("change", handleFieldChange);
|
|
531
534
|
element.addEventListener("input", handleFieldChange);
|
|
532
|
-
element.addEventListener("click", handleFieldChange);
|
|
533
535
|
listeners.push({ element, handler: handleFieldChange });
|
|
534
536
|
});
|
|
537
|
+
const combobox = document.querySelector(
|
|
538
|
+
`div[role="combobox"][name="${fieldPath}"]`
|
|
539
|
+
);
|
|
540
|
+
if (combobox) {
|
|
541
|
+
const observer = new MutationObserver(handleFieldChange);
|
|
542
|
+
observer.observe(combobox, {
|
|
543
|
+
childList: true,
|
|
544
|
+
subtree: true,
|
|
545
|
+
characterData: true
|
|
546
|
+
});
|
|
547
|
+
observers.push(observer);
|
|
548
|
+
combobox.addEventListener("click", handleFieldChange);
|
|
549
|
+
listeners.push({ element: combobox, handler: handleFieldChange });
|
|
550
|
+
}
|
|
535
551
|
});
|
|
536
552
|
return () => {
|
|
553
|
+
clearTimeout(debounceTimer);
|
|
537
554
|
listeners.forEach(({ element, handler }) => {
|
|
538
555
|
element.removeEventListener("change", handler);
|
|
539
556
|
element.removeEventListener("input", handler);
|
|
540
557
|
element.removeEventListener("click", handler);
|
|
541
558
|
});
|
|
559
|
+
observers.forEach((observer) => observer.disconnect());
|
|
542
560
|
};
|
|
543
561
|
}, [autoGenerate, fields, handleGenerate]);
|
|
544
562
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -497,29 +497,47 @@ const CompositeInput = (props) => {
|
|
|
497
497
|
}, [fields, separator, onChange, name]);
|
|
498
498
|
React__default.useEffect(() => {
|
|
499
499
|
if (!autoGenerate || fields.length === 0) return;
|
|
500
|
+
let debounceTimer;
|
|
500
501
|
const handleFieldChange = () => {
|
|
501
|
-
|
|
502
|
+
clearTimeout(debounceTimer);
|
|
503
|
+
debounceTimer = setTimeout(() => {
|
|
502
504
|
handleGenerate();
|
|
503
505
|
}, 300);
|
|
504
506
|
};
|
|
505
507
|
const listeners = [];
|
|
508
|
+
const observers = [];
|
|
506
509
|
fields.forEach((fieldPath) => {
|
|
507
510
|
const elements = document.querySelectorAll(
|
|
508
|
-
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]
|
|
511
|
+
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]`
|
|
509
512
|
);
|
|
510
513
|
elements.forEach((element) => {
|
|
511
514
|
element.addEventListener("change", handleFieldChange);
|
|
512
515
|
element.addEventListener("input", handleFieldChange);
|
|
513
|
-
element.addEventListener("click", handleFieldChange);
|
|
514
516
|
listeners.push({ element, handler: handleFieldChange });
|
|
515
517
|
});
|
|
518
|
+
const combobox = document.querySelector(
|
|
519
|
+
`div[role="combobox"][name="${fieldPath}"]`
|
|
520
|
+
);
|
|
521
|
+
if (combobox) {
|
|
522
|
+
const observer = new MutationObserver(handleFieldChange);
|
|
523
|
+
observer.observe(combobox, {
|
|
524
|
+
childList: true,
|
|
525
|
+
subtree: true,
|
|
526
|
+
characterData: true
|
|
527
|
+
});
|
|
528
|
+
observers.push(observer);
|
|
529
|
+
combobox.addEventListener("click", handleFieldChange);
|
|
530
|
+
listeners.push({ element: combobox, handler: handleFieldChange });
|
|
531
|
+
}
|
|
516
532
|
});
|
|
517
533
|
return () => {
|
|
534
|
+
clearTimeout(debounceTimer);
|
|
518
535
|
listeners.forEach(({ element, handler }) => {
|
|
519
536
|
element.removeEventListener("change", handler);
|
|
520
537
|
element.removeEventListener("input", handler);
|
|
521
538
|
element.removeEventListener("click", handler);
|
|
522
539
|
});
|
|
540
|
+
observers.forEach((observer) => observer.disconnect());
|
|
523
541
|
};
|
|
524
542
|
}, [autoGenerate, fields, handleGenerate]);
|
|
525
543
|
return /* @__PURE__ */ jsx(
|
package/dist/admin/index.js
CHANGED
|
@@ -37,7 +37,7 @@ const index = {
|
|
|
37
37
|
defaultMessage: "Combine multiple fields into one display value"
|
|
38
38
|
},
|
|
39
39
|
components: {
|
|
40
|
-
Input: async () => Promise.resolve().then(() => require("../_chunks/CompositeInput-
|
|
40
|
+
Input: async () => Promise.resolve().then(() => require("../_chunks/CompositeInput-BhDBr5rx.js"))
|
|
41
41
|
},
|
|
42
42
|
options: {
|
|
43
43
|
base: [
|
package/dist/admin/index.mjs
CHANGED
|
@@ -34,7 +34,7 @@ const index = {
|
|
|
34
34
|
defaultMessage: "Combine multiple fields into one display value"
|
|
35
35
|
},
|
|
36
36
|
components: {
|
|
37
|
-
Input: async () => import("../_chunks/CompositeInput-
|
|
37
|
+
Input: async () => import("../_chunks/CompositeInput-DLjmxeUG.mjs")
|
|
38
38
|
},
|
|
39
39
|
options: {
|
|
40
40
|
base: [
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tunghtml/strapi-plugin-composite-field",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "A Strapi v5 plugin to create composite display fields by combining multiple text, string, and enum fields with auto-generate support",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"strapi",
|