json-renderers 1.12.2 → 1.13.2
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/docs/dist/v12/min.js +646 -646
- package/docs/dist/v13/min.js +691 -0
- package/docs/index.html +14 -0
- package/package.json +3 -3
- package/src/index.js +2 -2
- package/src/v13/index.js +46 -0
- package/src/{v10 → v13}/meta.js +1 -1
- package/src/{v9/table → v13/select}/index.js +4 -7
- package/src/v13/select/skeleton.json +18 -0
- package/src/v13/table/index.js +39 -0
- package/src/v10/dataLists/fragments.json +0 -1
- package/src/v10/dataLists/index.js +0 -32
- package/src/v10/dataLists/skeleton.json +0 -38
- package/src/v10/index.js +0 -142
- package/src/v10/select/fragments.json +0 -1
- package/src/v10/select/index.js +0 -34
- package/src/v10/select/skeleton.json +0 -23
- package/src/v10/table/index.js +0 -35
- package/src/v5/dataLists/fragments.json +0 -1
- package/src/v5/dataLists/index.js +0 -26
- package/src/v5/dataLists/skeleton.json +0 -20
- package/src/v5/form/attachFormClickEventListener.js +0 -27
- package/src/v5/form/clickFunc/extractFormData.js +0 -27
- package/src/v5/form/clickFunc/handleNew.js +0 -24
- package/src/v5/form/clickFunc/handleSave.js +0 -33
- package/src/v5/form/clickFunc/index.js +0 -32
- package/src/v5/form/index.js +0 -87
- package/src/v5/form/structure.json +0 -410
- package/src/v5/index.js +0 -150
- package/src/v5/meta.js +0 -6
- package/src/v5/navTabs/fragments.json +0 -59
- package/src/v5/navTabs/index.js +0 -82
- package/src/v5/navTabs/skeleton.json +0 -18
- package/src/v5/registerGlobal.js +0 -14
- package/src/v5/select/fragments.json +0 -1
- package/src/v5/select/index.js +0 -31
- package/src/v5/select/skeleton.json +0 -21
- package/src/v5/table/attachTableClickEventListener.js +0 -22
- package/src/v5/table/buildTableDataAsJson.js +0 -19
- package/src/v5/table/buildTableDomElement.js +0 -21
- package/src/v5/table/buildTableStructureSpec.js +0 -28
- package/src/v5/table/clickFunc/v3/createTable.js +0 -16
- package/src/v5/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -23
- package/src/v5/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -21
- package/src/v5/table/clickFunc/v3/getContainer/index.js +0 -39
- package/src/v5/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -14
- package/src/v5/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -12
- package/src/v5/table/clickFunc/v3/index.js +0 -21
- package/src/v5/table/fragments.json +0 -112
- package/src/v5/table/index.js +0 -72
- package/src/v5/table/resolveTargetContainer.js +0 -9
- package/src/v5/table/skeleton.json +0 -371
- package/src/v6/dataLists/fragments.json +0 -1
- package/src/v6/dataLists/index.js +0 -32
- package/src/v6/dataLists/skeleton.json +0 -38
- package/src/v6/form/attachFormClickEventListener.js +0 -27
- package/src/v6/form/clickFunc/extractFormData.js +0 -27
- package/src/v6/form/clickFunc/handleNew.js +0 -24
- package/src/v6/form/clickFunc/handleSave.js +0 -33
- package/src/v6/form/clickFunc/index.js +0 -32
- package/src/v6/form/index.js +0 -87
- package/src/v6/form/structure.json +0 -410
- package/src/v6/index.js +0 -150
- package/src/v6/meta.js +0 -6
- package/src/v6/navTabs/fragments.json +0 -59
- package/src/v6/navTabs/index.js +0 -82
- package/src/v6/navTabs/skeleton.json +0 -18
- package/src/v6/registerGlobal.js +0 -14
- package/src/v6/select/fragments.json +0 -1
- package/src/v6/select/index.js +0 -34
- package/src/v6/select/skeleton.json +0 -23
- package/src/v6/table/attachTableClickEventListener.js +0 -22
- package/src/v6/table/buildTableDataAsJson.js +0 -19
- package/src/v6/table/buildTableDomElement.js +0 -21
- package/src/v6/table/buildTableStructureSpec.js +0 -28
- package/src/v6/table/clickFunc/v3/createTable.js +0 -16
- package/src/v6/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -23
- package/src/v6/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -21
- package/src/v6/table/clickFunc/v3/getContainer/index.js +0 -39
- package/src/v6/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -14
- package/src/v6/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -12
- package/src/v6/table/clickFunc/v3/index.js +0 -21
- package/src/v6/table/fragments.json +0 -112
- package/src/v6/table/index.js +0 -72
- package/src/v6/table/resolveTargetContainer.js +0 -9
- package/src/v6/table/skeleton.json +0 -371
- package/src/v7/common/deriveColumnsFromData.js +0 -20
- package/src/v7/dataLists/fragments.json +0 -1
- package/src/v7/dataLists/index.js +0 -32
- package/src/v7/dataLists/skeleton.json +0 -38
- package/src/v7/form/attachFormClickEventListener.js +0 -27
- package/src/v7/form/clickFunc/extractFormData.js +0 -27
- package/src/v7/form/clickFunc/handleNew.js +0 -24
- package/src/v7/form/clickFunc/handleSave.js +0 -33
- package/src/v7/form/clickFunc/index.js +0 -32
- package/src/v7/form/index.js +0 -87
- package/src/v7/form/structure.json +0 -410
- package/src/v7/index.js +0 -141
- package/src/v7/meta.js +0 -6
- package/src/v7/navTabs/fragments.json +0 -59
- package/src/v7/navTabs/index.js +0 -82
- package/src/v7/navTabs/skeleton.json +0 -18
- package/src/v7/registerGlobal.js +0 -14
- package/src/v7/select/fragments.json +0 -1
- package/src/v7/select/index.js +0 -34
- package/src/v7/select/skeleton.json +0 -23
- package/src/v7/table/attachTableClickEventListener.js +0 -28
- package/src/v7/table/buildTableDataAsJson.js +0 -25
- package/src/v7/table/buildTableDomElement.js +0 -25
- package/src/v7/table/buildTableStructureSpec.js +0 -33
- package/src/v7/table/clickFunc/v3/createTable.js +0 -20
- package/src/v7/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -27
- package/src/v7/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -24
- package/src/v7/table/clickFunc/v3/getContainer/index.js +0 -44
- package/src/v7/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -17
- package/src/v7/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -15
- package/src/v7/table/clickFunc/v3/index.js +0 -35
- package/src/v7/table/fragments.json +0 -112
- package/src/v7/table/index.js +0 -82
- package/src/v7/table/resolveTargetContainer.js +0 -11
- package/src/v7/table/skeleton.json +0 -371
- package/src/v8/common/deriveColumnsFromData.js +0 -20
- package/src/v8/dataLists/fragments.json +0 -1
- package/src/v8/dataLists/index.js +0 -32
- package/src/v8/dataLists/skeleton.json +0 -38
- package/src/v8/form/attachFormClickEventListener.js +0 -27
- package/src/v8/form/clickFunc/extractFormData.js +0 -27
- package/src/v8/form/clickFunc/handleNew.js +0 -24
- package/src/v8/form/clickFunc/handleSave.js +0 -33
- package/src/v8/form/clickFunc/index.js +0 -32
- package/src/v8/form/index.js +0 -87
- package/src/v8/form/structure.json +0 -410
- package/src/v8/index.js +0 -141
- package/src/v8/meta.js +0 -6
- package/src/v8/navTabs/fragments.json +0 -59
- package/src/v8/navTabs/index.js +0 -82
- package/src/v8/navTabs/skeleton.json +0 -18
- package/src/v8/registerGlobal.js +0 -14
- package/src/v8/select/fragments.json +0 -1
- package/src/v8/select/index.js +0 -34
- package/src/v8/select/skeleton.json +0 -23
- package/src/v8/table/attachTableClickEventListener.js +0 -28
- package/src/v8/table/buildTableDataAsJson.js +0 -25
- package/src/v8/table/buildTableDomElement.js +0 -25
- package/src/v8/table/buildTableStructureSpec.js +0 -33
- package/src/v8/table/clickFunc/v3/createTable.js +0 -20
- package/src/v8/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -27
- package/src/v8/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -24
- package/src/v8/table/clickFunc/v3/getContainer/index.js +0 -44
- package/src/v8/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -17
- package/src/v8/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -15
- package/src/v8/table/clickFunc/v3/index.js +0 -35
- package/src/v8/table/fragments.json +0 -112
- package/src/v8/table/index.js +0 -82
- package/src/v8/table/resolveTargetContainer.js +0 -11
- package/src/v8/table/skeleton.json +0 -371
- package/src/v9/common/deriveColumnsFromData.js +0 -20
- package/src/v9/dataLists/fragments.json +0 -1
- package/src/v9/dataLists/index.js +0 -32
- package/src/v9/dataLists/skeleton.json +0 -38
- package/src/v9/form/attachFormClickEventListener.js +0 -27
- package/src/v9/form/clickFunc/extractFormData.js +0 -27
- package/src/v9/form/clickFunc/handleNew.js +0 -24
- package/src/v9/form/clickFunc/handleSave.js +0 -33
- package/src/v9/form/clickFunc/index.js +0 -32
- package/src/v9/form/index.js +0 -87
- package/src/v9/form/structure.json +0 -410
- package/src/v9/index.js +0 -141
- package/src/v9/meta.js +0 -6
- package/src/v9/navTabs/fragments.json +0 -59
- package/src/v9/navTabs/index.js +0 -82
- package/src/v9/navTabs/skeleton.json +0 -18
- package/src/v9/registerGlobal.js +0 -14
- package/src/v9/select/fragments.json +0 -1
- package/src/v9/select/index.js +0 -34
- package/src/v9/select/skeleton.json +0 -23
- package/src/v9/table/skeleton.json +0 -47
- /package/src/{v10 → v13}/common/deriveColumnsFromData.js +0 -0
- /package/src/{v10 → v13}/registerGlobal.js +0 -0
- /package/src/{v10 → v13}/table/skeleton.json +0 -0
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"navTabsList": {
|
|
3
|
-
"tagName": "ul",
|
|
4
|
-
"attributes": {
|
|
5
|
-
"class": "nav nav-tabs",
|
|
6
|
-
"role": "tablist"
|
|
7
|
-
},
|
|
8
|
-
"jsonToSpec": {
|
|
9
|
-
"operation": "loopArray",
|
|
10
|
-
"source": "tabs",
|
|
11
|
-
"template": {
|
|
12
|
-
"tagName": "li",
|
|
13
|
-
"attributes": {
|
|
14
|
-
"class": "nav-item",
|
|
15
|
-
"role": "presentation"
|
|
16
|
-
},
|
|
17
|
-
"children": [
|
|
18
|
-
{
|
|
19
|
-
"tagName": "button",
|
|
20
|
-
"attributes": {
|
|
21
|
-
"class": "nav-link ${activeClass}",
|
|
22
|
-
"id": "${id}-tab",
|
|
23
|
-
"data-bs-toggle": "tab",
|
|
24
|
-
"data-bs-target": "#${id}-pane",
|
|
25
|
-
"type": "button",
|
|
26
|
-
"role": "tab",
|
|
27
|
-
"aria-controls": "${id}-pane",
|
|
28
|
-
"aria-selected": "${isSelected}"
|
|
29
|
-
},
|
|
30
|
-
"textContent": "${label}"
|
|
31
|
-
}
|
|
32
|
-
]
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"children": []
|
|
36
|
-
},
|
|
37
|
-
"tabContent": {
|
|
38
|
-
"tagName": "div",
|
|
39
|
-
"attributes": {
|
|
40
|
-
"class": "tab-content pt-3"
|
|
41
|
-
},
|
|
42
|
-
"jsonToSpec": {
|
|
43
|
-
"operation": "loopArray",
|
|
44
|
-
"source": "tabs",
|
|
45
|
-
"template": {
|
|
46
|
-
"tagName": "div",
|
|
47
|
-
"attributes": {
|
|
48
|
-
"class": "tab-pane fade ${showActiveClass}",
|
|
49
|
-
"id": "${id}-pane",
|
|
50
|
-
"role": "tabpanel",
|
|
51
|
-
"aria-labelledby": "${id}-tab",
|
|
52
|
-
"tabindex": "0"
|
|
53
|
-
},
|
|
54
|
-
"textContent": "${content}"
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
"children": []
|
|
58
|
-
}
|
|
59
|
-
}
|
package/src/v5/navTabs/index.js
DELETED
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import skeletonToSpec from "../../../../../skeletonToSpec/v3/index.js";
|
|
2
|
-
import jsonToSpec from "../../../jsonToSpec/v2/index.js";
|
|
3
|
-
import jsonToTag from "../../../jsonToTag/v2/index.js";
|
|
4
|
-
|
|
5
|
-
import skeletonJson from './skeleton.json' with {type: 'json'};
|
|
6
|
-
import fragmentsJson from './fragments.json' with {type: 'json'};
|
|
7
|
-
|
|
8
|
-
const startFunc = ({
|
|
9
|
-
targetHtmlId,
|
|
10
|
-
inTargetHtmlId,
|
|
11
|
-
inTabs = [],
|
|
12
|
-
inData = [],
|
|
13
|
-
inSkeletonType = "default",
|
|
14
|
-
inShowLog = false
|
|
15
|
-
} = {}) => {
|
|
16
|
-
const localTargetHtmlId = inTargetHtmlId ?? targetHtmlId;
|
|
17
|
-
const localTabs = inTabs;
|
|
18
|
-
const localData = inData;
|
|
19
|
-
const localSkeletonType = inSkeletonType;
|
|
20
|
-
const localShowLog = inShowLog;
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
let tabsArray = [];
|
|
24
|
-
|
|
25
|
-
if (Array.isArray(localTabs) && localTabs.length > 0) {
|
|
26
|
-
tabsArray = localTabs.map((tab, idx) => ({
|
|
27
|
-
id: tab.id ?? `tab-${idx + 1}`,
|
|
28
|
-
label: tab.label ?? tab.title ?? `Tab ${idx + 1}`,
|
|
29
|
-
activeClass: tab.activeClass ?? (idx === 0 ? "active" : ""),
|
|
30
|
-
showActiveClass: tab.showActiveClass ?? (idx === 0 ? "show active" : ""),
|
|
31
|
-
isSelected: tab.isSelected ?? (idx === 0 ? "true" : "false"),
|
|
32
|
-
content: tab.content ?? ""
|
|
33
|
-
}));
|
|
34
|
-
} else if (Array.isArray(localData) && localData.length > 0) {
|
|
35
|
-
tabsArray = localData.map((row, idx) => {
|
|
36
|
-
const id = `tab-${row.VOUCHERNUMBER ?? row.id ?? idx + 1}`;
|
|
37
|
-
const label = row.REFERENCE || row.VOUCHERTYPENAME || `Tab ${idx + 1}`;
|
|
38
|
-
const isActive = idx === 0;
|
|
39
|
-
return {
|
|
40
|
-
id,
|
|
41
|
-
label,
|
|
42
|
-
activeClass: isActive ? "active" : "",
|
|
43
|
-
showActiveClass: isActive ? "show active" : "",
|
|
44
|
-
isSelected: isActive ? "true" : "false",
|
|
45
|
-
content: ""
|
|
46
|
-
};
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
const dataAsJson = { tabs: tabsArray };
|
|
51
|
-
|
|
52
|
-
const rawSkeleton = skeletonJson[localSkeletonType] ?? skeletonJson.default ?? skeletonJson;
|
|
53
|
-
const targetSkeleton = structuredClone(rawSkeleton);
|
|
54
|
-
|
|
55
|
-
if (localShowLog) console.log("navTabs targetSkeleton : ", targetSkeleton);
|
|
56
|
-
|
|
57
|
-
const structureJson = skeletonToSpec({
|
|
58
|
-
inSkeleton: targetSkeleton,
|
|
59
|
-
inFragments: fragmentsJson
|
|
60
|
-
});
|
|
61
|
-
if (localShowLog) console.log("navTabs structureJson : ", structureJson);
|
|
62
|
-
|
|
63
|
-
const specAsJsonToDom = jsonToSpec({ specJson: structureJson, dataJson: dataAsJson, showLog: false });
|
|
64
|
-
if (localShowLog) console.log("navTabs specAsJsonToDom : ", specAsJsonToDom);
|
|
65
|
-
|
|
66
|
-
const fromRenderer = jsonToTag(specAsJsonToDom);
|
|
67
|
-
|
|
68
|
-
const html = (typeof localTargetHtmlId === "string")
|
|
69
|
-
? document.getElementById(localTargetHtmlId)
|
|
70
|
-
: localTargetHtmlId;
|
|
71
|
-
|
|
72
|
-
if (!html) return fromRenderer;
|
|
73
|
-
|
|
74
|
-
html.append(fromRenderer);
|
|
75
|
-
return fromRenderer;
|
|
76
|
-
} catch (error) {
|
|
77
|
-
console.log("error : ", error);
|
|
78
|
-
};
|
|
79
|
-
};
|
|
80
|
-
|
|
81
|
-
export { startFunc };
|
|
82
|
-
export default startFunc;
|
package/src/v5/registerGlobal.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import meta from "./meta.js";
|
|
2
|
-
|
|
3
|
-
export const registerGlobal = (inFuncDefinition) => {
|
|
4
|
-
if (typeof globalThis === "undefined" || !inFuncDefinition) return;
|
|
5
|
-
|
|
6
|
-
globalThis.ks ??= {};
|
|
7
|
-
|
|
8
|
-
globalThis.ks.jsonRenderers ??= {
|
|
9
|
-
meta,
|
|
10
|
-
renderToDom: inFuncDefinition
|
|
11
|
-
};
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export default registerGlobal;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{}
|
package/src/v5/select/index.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// import jsonTraversal from "json-traversal";
|
|
2
|
-
|
|
3
|
-
import jsonToSpec from "../../../node_modules/json-to-spec/index.js";
|
|
4
|
-
import jsonToTag from "../../../node_modules/@keshavsoft/json-to-tag/index.js";
|
|
5
|
-
|
|
6
|
-
import skeletonJson from "./skeleton.json" with { type: "json" };
|
|
7
|
-
|
|
8
|
-
const startFunc = ({ targetHtmlId, inData,
|
|
9
|
-
inSkeletonType = "default", inClassToApply } = {}) => {
|
|
10
|
-
const skeletonNeeded = skeletonJson[inSkeletonType];
|
|
11
|
-
skeletonNeeded.attributes.class = inClassToApply;
|
|
12
|
-
|
|
13
|
-
const specAsJsonToDom = jsonToSpec({
|
|
14
|
-
specJson: skeletonNeeded,
|
|
15
|
-
dataJson: inData
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
const container = document.getElementById(targetHtmlId);
|
|
19
|
-
if (container) container.innerHTML = "";
|
|
20
|
-
|
|
21
|
-
const createdElement = jsonToTag(specAsJsonToDom);
|
|
22
|
-
|
|
23
|
-
if (Array.isArray(createdElement)) {
|
|
24
|
-
// container.appendChild(createdElement)
|
|
25
|
-
createdElement.forEach(element => container.append(element));
|
|
26
|
-
} else {
|
|
27
|
-
container.append(createdElement);
|
|
28
|
-
};
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
export default startFunc;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"default": {
|
|
3
|
-
"tagName": "select",
|
|
4
|
-
"attributes": {
|
|
5
|
-
"id": "LedgerName",
|
|
6
|
-
"class": "keshav"
|
|
7
|
-
},
|
|
8
|
-
"jsonToSpec": {
|
|
9
|
-
"operation": "loopArray",
|
|
10
|
-
"source": "LedgerName",
|
|
11
|
-
"template": {
|
|
12
|
-
"tagName": "option",
|
|
13
|
-
"attributes": {
|
|
14
|
-
"value": "${}"
|
|
15
|
-
},
|
|
16
|
-
"textContent": "${}"
|
|
17
|
-
}
|
|
18
|
-
},
|
|
19
|
-
"children": []
|
|
20
|
-
}
|
|
21
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import clickFunc from "./clickFunc/v3/index.js";
|
|
2
|
-
|
|
3
|
-
// Story 5: Attach click event listener for child table rendering
|
|
4
|
-
const startFunc = ({
|
|
5
|
-
inTargetContainer,
|
|
6
|
-
inData,
|
|
7
|
-
inColumns,
|
|
8
|
-
inRenderFunc,
|
|
9
|
-
inTargetHtmlId
|
|
10
|
-
} = {}) => {
|
|
11
|
-
inTargetContainer.addEventListener('click', (event) => {
|
|
12
|
-
clickFunc({
|
|
13
|
-
inEvent: event,
|
|
14
|
-
inData,
|
|
15
|
-
inColumns,
|
|
16
|
-
inRenderFunc,
|
|
17
|
-
inTargetHtmlId
|
|
18
|
-
});
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export default startFunc;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
// Story 1: Prepare table data payload as JSON
|
|
2
|
-
const startFunc = ({
|
|
3
|
-
inColumns,
|
|
4
|
-
inData,
|
|
5
|
-
inColGroup,
|
|
6
|
-
inFooterData = [],
|
|
7
|
-
inConfig = {}
|
|
8
|
-
} = {}) => {
|
|
9
|
-
return {
|
|
10
|
-
columns: inColumns,
|
|
11
|
-
data: inData,
|
|
12
|
-
colGroup: inColGroup,
|
|
13
|
-
foot: inFooterData,
|
|
14
|
-
title: inConfig?.title ?? inConfig?.caption?.text ?? "",
|
|
15
|
-
footerText: inConfig?.footerText ?? ""
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default startFunc;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import jsonToSpec from "../../../jsonToSpec/v2/index.js";
|
|
2
|
-
import jsonToTag from "../../../jsonToTag/v2/index.js";
|
|
3
|
-
|
|
4
|
-
// Story 3: Generate table DOM element from structure specification and data
|
|
5
|
-
const startFunc = ({
|
|
6
|
-
inStructureJson,
|
|
7
|
-
inDataAsJson,
|
|
8
|
-
inShowLog = false
|
|
9
|
-
} = {}) => {
|
|
10
|
-
const specAsJsonToDom = jsonToSpec({
|
|
11
|
-
specJson: inStructureJson,
|
|
12
|
-
dataJson: inDataAsJson,
|
|
13
|
-
showLog: inShowLog
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
if (inShowLog) console.log("specAsJsonToDom : ", specAsJsonToDom);
|
|
17
|
-
|
|
18
|
-
return jsonToTag(specAsJsonToDom);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export default startFunc;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import skeletonToSpec from "../../../../../skeletonToSpec/v3/index.js";
|
|
2
|
-
|
|
3
|
-
import skeletonJson from './skeleton.json' with {type: 'json'};
|
|
4
|
-
import fragmentsJson from './fragments.json' with {type: 'json'};
|
|
5
|
-
|
|
6
|
-
// Story 2: Build table structure specification from skeleton and fragments
|
|
7
|
-
const startFunc = ({
|
|
8
|
-
inSkeletonType = "default",
|
|
9
|
-
inSkeletonJson = skeletonJson,
|
|
10
|
-
inFragmentsJson = fragmentsJson,
|
|
11
|
-
inShowLog = false
|
|
12
|
-
} = {}) => {
|
|
13
|
-
const rawSkeleton = inSkeletonJson[inSkeletonType] ?? inSkeletonJson.default ?? inSkeletonJson;
|
|
14
|
-
const targetSkeleton = structuredClone(rawSkeleton);
|
|
15
|
-
|
|
16
|
-
if (inShowLog) console.log("targetSkeleton : ", targetSkeleton);
|
|
17
|
-
|
|
18
|
-
const structureJson = skeletonToSpec({
|
|
19
|
-
inSkeleton: targetSkeleton,
|
|
20
|
-
inFragments: inFragmentsJson
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
if (inShowLog) console.log("structureJson : ", structureJson);
|
|
24
|
-
|
|
25
|
-
return structureJson;
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
export default startFunc;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import deriveColumnsFromData from "../../../../v4/common/deriveColumnsFromData.js";
|
|
2
|
-
|
|
3
|
-
// Step 2: Create the child table inside the container
|
|
4
|
-
const startFunc = ({ inChildTableContainer, inContainer, inRenderFunc } = {}) => {
|
|
5
|
-
const targetContainer = inChildTableContainer || inContainer;
|
|
6
|
-
const childTableData = targetContainer?.childData;
|
|
7
|
-
|
|
8
|
-
inRenderFunc({
|
|
9
|
-
inTargetHtmlId: targetContainer,
|
|
10
|
-
inColumns: deriveColumnsFromData({ inData: childTableData }),
|
|
11
|
-
inData: childTableData,
|
|
12
|
-
inSkeletonType: "tableOnly"
|
|
13
|
-
});
|
|
14
|
-
};
|
|
15
|
-
|
|
16
|
-
export default startFunc;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
// Step 1: Who clicked what? (Resolve parent row, column key, and child table data)
|
|
2
|
-
const startFunc = ({ inEvent, inColumns, inData } = {}) => {
|
|
3
|
-
const clickedButton = inEvent?.target?.closest("button");
|
|
4
|
-
if (!clickedButton) return null;
|
|
5
|
-
|
|
6
|
-
const parentRow = clickedButton.closest("tr");
|
|
7
|
-
const parentCell = clickedButton.closest("td");
|
|
8
|
-
if (!parentRow || !parentCell) return null;
|
|
9
|
-
|
|
10
|
-
const parentRowIndex = parentRow.sectionRowIndex;
|
|
11
|
-
const childColumnKey = inColumns?.[parentCell.cellIndex]?.key;
|
|
12
|
-
const childTableData = inData?.[parentRowIndex]?.[childColumnKey];
|
|
13
|
-
|
|
14
|
-
if (!Array.isArray(childTableData) || childTableData.length === 0) return null;
|
|
15
|
-
|
|
16
|
-
return {
|
|
17
|
-
parentRowIndex,
|
|
18
|
-
childColumnKey,
|
|
19
|
-
childTableData
|
|
20
|
-
};
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
export default startFunc;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
// Step 2: Where does the child table live? (Find or create the container div)
|
|
2
|
-
const startFunc = ({ inTargetHtmlId, inChildColumnKey } = {}) => {
|
|
3
|
-
const targetTableElement = (typeof inTargetHtmlId === "string")
|
|
4
|
-
? document.getElementById(inTargetHtmlId)
|
|
5
|
-
: inTargetHtmlId;
|
|
6
|
-
if (!targetTableElement) return null;
|
|
7
|
-
|
|
8
|
-
const childContainerHtmlId = `${targetTableElement.id || "table"}-${inChildColumnKey}`;
|
|
9
|
-
let childTableContainer = document.getElementById(childContainerHtmlId);
|
|
10
|
-
|
|
11
|
-
if (!childTableContainer) {
|
|
12
|
-
childTableContainer = document.createElement("div");
|
|
13
|
-
childTableContainer.id = childContainerHtmlId;
|
|
14
|
-
childTableContainer.className = "child-table-container mt-3";
|
|
15
|
-
targetTableElement.insertAdjacentElement("afterend", childTableContainer);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return childTableContainer;
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
export default startFunc;
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import extractClickedRowDetails from "./extractClickedRowDetails.js";
|
|
2
|
-
import getOrCreateChildTableContainer from "./getOrCreateChildTableContainer.js";
|
|
3
|
-
import isSameRowClickedToToggleOff from "./isSameRowClickedToToggleOff.js";
|
|
4
|
-
import resetAndShowChildTableContainer from "./resetAndShowChildTableContainer.js";
|
|
5
|
-
|
|
6
|
-
// --- Story of getContainer ---
|
|
7
|
-
const startFunc = ({ inEvent, inTargetHtmlId, inColumns, inData } = {}) => {
|
|
8
|
-
// Story 1: Who was clicked? (Resolve parent row and child table data)
|
|
9
|
-
const clickedRowDetails = extractClickedRowDetails({
|
|
10
|
-
inEvent,
|
|
11
|
-
inColumns,
|
|
12
|
-
inData
|
|
13
|
-
});
|
|
14
|
-
if (!clickedRowDetails) return null;
|
|
15
|
-
|
|
16
|
-
// Story 2: Where does the child table container go?
|
|
17
|
-
const childTableContainer = getOrCreateChildTableContainer({
|
|
18
|
-
inTargetHtmlId,
|
|
19
|
-
inChildColumnKey: clickedRowDetails.childColumnKey
|
|
20
|
-
});
|
|
21
|
-
if (!childTableContainer) return null;
|
|
22
|
-
|
|
23
|
-
// Story 3: Same row clicked again? Close it.
|
|
24
|
-
if (isSameRowClickedToToggleOff({
|
|
25
|
-
inChildTableContainer: childTableContainer,
|
|
26
|
-
inParentRowIndex: clickedRowDetails.parentRowIndex
|
|
27
|
-
})) {
|
|
28
|
-
return null;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
// Story 4: Clean and activate container for rendering
|
|
32
|
-
return resetAndShowChildTableContainer({
|
|
33
|
-
inChildTableContainer: childTableContainer,
|
|
34
|
-
inClickedRowDetails: clickedRowDetails
|
|
35
|
-
});
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
export { startFunc };
|
|
39
|
-
export default startFunc;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// Step 3: Did user click the same row again? Close it (toggle)
|
|
2
|
-
const startFunc = ({ inChildTableContainer, inParentRowIndex } = {}) => {
|
|
3
|
-
const isMatchingActiveRow = inChildTableContainer.dataset.activeRow === String(inParentRowIndex);
|
|
4
|
-
const isCurrentlyVisible = inChildTableContainer.style.display !== "none";
|
|
5
|
-
|
|
6
|
-
if (isMatchingActiveRow && isCurrentlyVisible) {
|
|
7
|
-
inChildTableContainer.style.display = "none";
|
|
8
|
-
return true;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
return false;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
export default startFunc;
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// Step 4: Ready the container for the new child table
|
|
2
|
-
const startFunc = ({ inChildTableContainer, inClickedRowDetails } = {}) => {
|
|
3
|
-
inChildTableContainer.style.display = "";
|
|
4
|
-
inChildTableContainer.dataset.activeRow = String(inClickedRowDetails.parentRowIndex);
|
|
5
|
-
inChildTableContainer.dataset.fieldName = inClickedRowDetails.childColumnKey;
|
|
6
|
-
inChildTableContainer.innerHTML = "";
|
|
7
|
-
inChildTableContainer.childData = inClickedRowDetails.childTableData;
|
|
8
|
-
|
|
9
|
-
return inChildTableContainer;
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
export default startFunc;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import getContainer from "./getContainer/index.js";
|
|
2
|
-
import createTable from "./createTable.js";
|
|
3
|
-
|
|
4
|
-
// Main click handler: only 2 clear steps from the outside
|
|
5
|
-
const clickFunc = ({
|
|
6
|
-
inEvent,
|
|
7
|
-
inData,
|
|
8
|
-
inColumns,
|
|
9
|
-
inRenderFunc,
|
|
10
|
-
inTargetHtmlId
|
|
11
|
-
} = {}) => {
|
|
12
|
-
// 1. Get or prepare child table container
|
|
13
|
-
const childTableContainer = getContainer({ inEvent, inTargetHtmlId, inColumns, inData });
|
|
14
|
-
if (!childTableContainer) return;
|
|
15
|
-
|
|
16
|
-
// 2. Create and render child table inside the container
|
|
17
|
-
createTable({ inChildTableContainer: childTableContainer, inRenderFunc });
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export { clickFunc };
|
|
21
|
-
export default clickFunc;
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"colGroup": {
|
|
3
|
-
"tagName": "colgroup",
|
|
4
|
-
"jsonToSpec": {
|
|
5
|
-
"operation": "loopArray",
|
|
6
|
-
"source": "colGroup",
|
|
7
|
-
"template": {
|
|
8
|
-
"tagName": "col",
|
|
9
|
-
"attributes": {
|
|
10
|
-
"style": "${style}"
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
},
|
|
14
|
-
"children": []
|
|
15
|
-
},
|
|
16
|
-
"thead": {
|
|
17
|
-
"tagName": "thead",
|
|
18
|
-
"attributes": {
|
|
19
|
-
"class": "table-dark"
|
|
20
|
-
},
|
|
21
|
-
"children": [
|
|
22
|
-
{
|
|
23
|
-
"tagName": "tr",
|
|
24
|
-
"jsonToSpec": {
|
|
25
|
-
"operation": "loopArray",
|
|
26
|
-
"source": "columns",
|
|
27
|
-
"template": {
|
|
28
|
-
"tagName": "th",
|
|
29
|
-
"textContent": "${label}"
|
|
30
|
-
}
|
|
31
|
-
},
|
|
32
|
-
"children": []
|
|
33
|
-
}
|
|
34
|
-
]
|
|
35
|
-
},
|
|
36
|
-
"tbody": {
|
|
37
|
-
"tagName": "tbody",
|
|
38
|
-
"attributes": {
|
|
39
|
-
"id": "table-body"
|
|
40
|
-
},
|
|
41
|
-
"jsonToSpec": {
|
|
42
|
-
"operation": "loopArray",
|
|
43
|
-
"source": "data",
|
|
44
|
-
"template": {
|
|
45
|
-
"tagName": "tr",
|
|
46
|
-
"jsonToSpec": {
|
|
47
|
-
"operation": "loopObject",
|
|
48
|
-
"source": "data",
|
|
49
|
-
"template": {
|
|
50
|
-
"tagName": "td",
|
|
51
|
-
"attributes": {
|
|
52
|
-
"class": "tdddddd ${value}"
|
|
53
|
-
},
|
|
54
|
-
"textContent": "${value}"
|
|
55
|
-
}
|
|
56
|
-
},
|
|
57
|
-
"children": []
|
|
58
|
-
}
|
|
59
|
-
},
|
|
60
|
-
"children": []
|
|
61
|
-
},
|
|
62
|
-
"tfoot": {
|
|
63
|
-
"tagName": "tfoot",
|
|
64
|
-
"attributes": {
|
|
65
|
-
"class": "table-light fw-bold"
|
|
66
|
-
},
|
|
67
|
-
"jsonToSpec": {
|
|
68
|
-
"operation": "loopArray",
|
|
69
|
-
"source": "foot",
|
|
70
|
-
"template": {
|
|
71
|
-
"tagName": "tr",
|
|
72
|
-
"jsonToSpec": {
|
|
73
|
-
"operation": "loopObject",
|
|
74
|
-
"source": "foot",
|
|
75
|
-
"template": {
|
|
76
|
-
"tagName": "td",
|
|
77
|
-
"textContent": "${value}"
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
"children": []
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"children": []
|
|
84
|
-
},
|
|
85
|
-
"cardHeader": {
|
|
86
|
-
"tagName": "div",
|
|
87
|
-
"attributes": {
|
|
88
|
-
"class": "d-flex justify-content-between align-items-center"
|
|
89
|
-
},
|
|
90
|
-
"children": [
|
|
91
|
-
{
|
|
92
|
-
"tagName": "h5",
|
|
93
|
-
"attributes": {
|
|
94
|
-
"class": "card-title mb-0"
|
|
95
|
-
},
|
|
96
|
-
"textContent": "${title}"
|
|
97
|
-
}
|
|
98
|
-
]
|
|
99
|
-
},
|
|
100
|
-
"cardFooter": {
|
|
101
|
-
"tagName": "div",
|
|
102
|
-
"attributes": {
|
|
103
|
-
"class": "d-flex justify-content-between align-items-center text-muted small"
|
|
104
|
-
},
|
|
105
|
-
"children": [
|
|
106
|
-
{
|
|
107
|
-
"tagName": "span",
|
|
108
|
-
"textContent": "${footerText}"
|
|
109
|
-
}
|
|
110
|
-
]
|
|
111
|
-
}
|
|
112
|
-
}
|
package/src/v5/table/index.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import buildTableDataAsJson from "./buildTableDataAsJson.js";
|
|
2
|
-
import buildTableStructureSpec from "./buildTableStructureSpec.js";
|
|
3
|
-
import buildTableDomElement from "./buildTableDomElement.js";
|
|
4
|
-
import resolveTargetContainer from "./resolveTargetContainer.js";
|
|
5
|
-
import attachTableClickEventListener from "./attachTableClickEventListener.js";
|
|
6
|
-
|
|
7
|
-
import skeletonJson from './skeleton.json' with {type: 'json'};
|
|
8
|
-
import fragmentsJson from './fragments.json' with {type: 'json'};
|
|
9
|
-
|
|
10
|
-
// --- Story of Table Render ---
|
|
11
|
-
const startFunc = ({
|
|
12
|
-
targetHtmlId,
|
|
13
|
-
inTargetHtmlId,
|
|
14
|
-
inColumns,
|
|
15
|
-
inData,
|
|
16
|
-
inColGroup,
|
|
17
|
-
inFooterData = [],
|
|
18
|
-
inConfig = {},
|
|
19
|
-
inSkeletonType = "default",
|
|
20
|
-
inShowLog = false
|
|
21
|
-
} = {}) => {
|
|
22
|
-
const localTargetHtmlId = inTargetHtmlId ?? targetHtmlId;
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
// Story 1: Prepare table data payload as JSON
|
|
26
|
-
const tableDataAsJson = buildTableDataAsJson({
|
|
27
|
-
inColumns,
|
|
28
|
-
inData,
|
|
29
|
-
inColGroup,
|
|
30
|
-
inFooterData,
|
|
31
|
-
inConfig
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
// Story 2: Build table structure specification from skeleton and fragments
|
|
35
|
-
const tableStructureSpec = buildTableStructureSpec({
|
|
36
|
-
inSkeletonType,
|
|
37
|
-
inSkeletonJson: skeletonJson,
|
|
38
|
-
inFragmentsJson: fragmentsJson,
|
|
39
|
-
inShowLog
|
|
40
|
-
});
|
|
41
|
-
|
|
42
|
-
// Story 3: Generate table DOM element from structure and data
|
|
43
|
-
const renderedTableElement = buildTableDomElement({
|
|
44
|
-
inStructureJson: tableStructureSpec,
|
|
45
|
-
inDataAsJson: tableDataAsJson,
|
|
46
|
-
inShowLog
|
|
47
|
-
});
|
|
48
|
-
|
|
49
|
-
// Story 4: Resolve target HTML container
|
|
50
|
-
const targetContainer = resolveTargetContainer({
|
|
51
|
-
inTargetHtmlId: localTargetHtmlId
|
|
52
|
-
});
|
|
53
|
-
if (!targetContainer) return;
|
|
54
|
-
|
|
55
|
-
// Story 5: Attach click event listener for child table rendering
|
|
56
|
-
attachTableClickEventListener({
|
|
57
|
-
inTargetContainer: targetContainer,
|
|
58
|
-
inData,
|
|
59
|
-
inColumns,
|
|
60
|
-
inRenderFunc: startFunc,
|
|
61
|
-
inTargetHtmlId: localTargetHtmlId
|
|
62
|
-
});
|
|
63
|
-
|
|
64
|
-
// Story 6: Append rendered table into target container
|
|
65
|
-
targetContainer.append(renderedTableElement);
|
|
66
|
-
|
|
67
|
-
} catch (error) {
|
|
68
|
-
console.log("error : ", error);
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
export default startFunc;
|