@tunghtml/strapi-plugin-composite-field 1.1.4 → 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.
|
@@ -483,27 +483,13 @@ const CompositeInput = (props) => {
|
|
|
483
483
|
}
|
|
484
484
|
}
|
|
485
485
|
if (!fieldValue) {
|
|
486
|
-
const
|
|
487
|
-
|
|
486
|
+
const combobox = document.querySelector(
|
|
487
|
+
`div[role="combobox"][name="${fieldPath}"]`
|
|
488
488
|
);
|
|
489
|
-
|
|
490
|
-
const
|
|
491
|
-
if (
|
|
492
|
-
|
|
493
|
-
const hiddenInput = fieldContainer.querySelector(
|
|
494
|
-
`input[name="${fieldPath}"]`
|
|
495
|
-
);
|
|
496
|
-
if (label2 || hiddenInput) {
|
|
497
|
-
const labelText = label2?.textContent?.trim().toLowerCase() || "";
|
|
498
|
-
const fieldName = fieldPath.toLowerCase();
|
|
499
|
-
if (labelText === fieldName || labelText.replace(/\s+/g, "").includes(fieldName.replace(/\s+/g, "")) || hiddenInput) {
|
|
500
|
-
const selectedText = combobox.textContent?.trim();
|
|
501
|
-
if (selectedText && selectedText !== "Select..." && selectedText !== "") {
|
|
502
|
-
fieldValue = selectedText;
|
|
503
|
-
break;
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
}
|
|
489
|
+
if (combobox) {
|
|
490
|
+
const selectedText = combobox.textContent?.trim();
|
|
491
|
+
if (selectedText && selectedText !== "Select..." && selectedText !== "") {
|
|
492
|
+
fieldValue = selectedText;
|
|
507
493
|
}
|
|
508
494
|
}
|
|
509
495
|
}
|
|
@@ -530,29 +516,47 @@ const CompositeInput = (props) => {
|
|
|
530
516
|
}, [fields, separator, onChange, name]);
|
|
531
517
|
React__namespace.default.useEffect(() => {
|
|
532
518
|
if (!autoGenerate || fields.length === 0) return;
|
|
519
|
+
let debounceTimer;
|
|
533
520
|
const handleFieldChange = () => {
|
|
534
|
-
|
|
521
|
+
clearTimeout(debounceTimer);
|
|
522
|
+
debounceTimer = setTimeout(() => {
|
|
535
523
|
handleGenerate();
|
|
536
524
|
}, 300);
|
|
537
525
|
};
|
|
538
526
|
const listeners = [];
|
|
527
|
+
const observers = [];
|
|
539
528
|
fields.forEach((fieldPath) => {
|
|
540
529
|
const elements = document.querySelectorAll(
|
|
541
|
-
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]
|
|
530
|
+
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]`
|
|
542
531
|
);
|
|
543
532
|
elements.forEach((element) => {
|
|
544
533
|
element.addEventListener("change", handleFieldChange);
|
|
545
534
|
element.addEventListener("input", handleFieldChange);
|
|
546
|
-
element.addEventListener("click", handleFieldChange);
|
|
547
535
|
listeners.push({ element, handler: handleFieldChange });
|
|
548
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
|
+
}
|
|
549
551
|
});
|
|
550
552
|
return () => {
|
|
553
|
+
clearTimeout(debounceTimer);
|
|
551
554
|
listeners.forEach(({ element, handler }) => {
|
|
552
555
|
element.removeEventListener("change", handler);
|
|
553
556
|
element.removeEventListener("input", handler);
|
|
554
557
|
element.removeEventListener("click", handler);
|
|
555
558
|
});
|
|
559
|
+
observers.forEach((observer) => observer.disconnect());
|
|
556
560
|
};
|
|
557
561
|
}, [autoGenerate, fields, handleGenerate]);
|
|
558
562
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -464,27 +464,13 @@ const CompositeInput = (props) => {
|
|
|
464
464
|
}
|
|
465
465
|
}
|
|
466
466
|
if (!fieldValue) {
|
|
467
|
-
const
|
|
468
|
-
|
|
467
|
+
const combobox = document.querySelector(
|
|
468
|
+
`div[role="combobox"][name="${fieldPath}"]`
|
|
469
469
|
);
|
|
470
|
-
|
|
471
|
-
const
|
|
472
|
-
if (
|
|
473
|
-
|
|
474
|
-
const hiddenInput = fieldContainer.querySelector(
|
|
475
|
-
`input[name="${fieldPath}"]`
|
|
476
|
-
);
|
|
477
|
-
if (label2 || hiddenInput) {
|
|
478
|
-
const labelText = label2?.textContent?.trim().toLowerCase() || "";
|
|
479
|
-
const fieldName = fieldPath.toLowerCase();
|
|
480
|
-
if (labelText === fieldName || labelText.replace(/\s+/g, "").includes(fieldName.replace(/\s+/g, "")) || hiddenInput) {
|
|
481
|
-
const selectedText = combobox.textContent?.trim();
|
|
482
|
-
if (selectedText && selectedText !== "Select..." && selectedText !== "") {
|
|
483
|
-
fieldValue = selectedText;
|
|
484
|
-
break;
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
}
|
|
470
|
+
if (combobox) {
|
|
471
|
+
const selectedText = combobox.textContent?.trim();
|
|
472
|
+
if (selectedText && selectedText !== "Select..." && selectedText !== "") {
|
|
473
|
+
fieldValue = selectedText;
|
|
488
474
|
}
|
|
489
475
|
}
|
|
490
476
|
}
|
|
@@ -511,29 +497,47 @@ const CompositeInput = (props) => {
|
|
|
511
497
|
}, [fields, separator, onChange, name]);
|
|
512
498
|
React__default.useEffect(() => {
|
|
513
499
|
if (!autoGenerate || fields.length === 0) return;
|
|
500
|
+
let debounceTimer;
|
|
514
501
|
const handleFieldChange = () => {
|
|
515
|
-
|
|
502
|
+
clearTimeout(debounceTimer);
|
|
503
|
+
debounceTimer = setTimeout(() => {
|
|
516
504
|
handleGenerate();
|
|
517
505
|
}, 300);
|
|
518
506
|
};
|
|
519
507
|
const listeners = [];
|
|
508
|
+
const observers = [];
|
|
520
509
|
fields.forEach((fieldPath) => {
|
|
521
510
|
const elements = document.querySelectorAll(
|
|
522
|
-
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]
|
|
511
|
+
`input[name="${fieldPath}"], textarea[name="${fieldPath}"], select[name="${fieldPath}"]`
|
|
523
512
|
);
|
|
524
513
|
elements.forEach((element) => {
|
|
525
514
|
element.addEventListener("change", handleFieldChange);
|
|
526
515
|
element.addEventListener("input", handleFieldChange);
|
|
527
|
-
element.addEventListener("click", handleFieldChange);
|
|
528
516
|
listeners.push({ element, handler: handleFieldChange });
|
|
529
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
|
+
}
|
|
530
532
|
});
|
|
531
533
|
return () => {
|
|
534
|
+
clearTimeout(debounceTimer);
|
|
532
535
|
listeners.forEach(({ element, handler }) => {
|
|
533
536
|
element.removeEventListener("change", handler);
|
|
534
537
|
element.removeEventListener("input", handler);
|
|
535
538
|
element.removeEventListener("click", handler);
|
|
536
539
|
});
|
|
540
|
+
observers.forEach((observer) => observer.disconnect());
|
|
537
541
|
};
|
|
538
542
|
}, [autoGenerate, fields, handleGenerate]);
|
|
539
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",
|