json-renderers 1.12.3 → 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.
Files changed (180) hide show
  1. package/docs/dist/v12/min.js +646 -646
  2. package/docs/dist/v13/min.js +691 -0
  3. package/docs/index.html +14 -0
  4. package/package.json +3 -3
  5. package/src/index.js +2 -2
  6. package/src/v13/index.js +46 -0
  7. package/src/{v10 → v13}/meta.js +1 -1
  8. package/src/{v9/table → v13/select}/index.js +4 -7
  9. package/src/v13/select/skeleton.json +18 -0
  10. package/src/v13/table/index.js +39 -0
  11. package/src/v10/dataLists/fragments.json +0 -1
  12. package/src/v10/dataLists/index.js +0 -32
  13. package/src/v10/dataLists/skeleton.json +0 -38
  14. package/src/v10/index.js +0 -142
  15. package/src/v10/select/fragments.json +0 -1
  16. package/src/v10/select/index.js +0 -34
  17. package/src/v10/select/skeleton.json +0 -23
  18. package/src/v10/table/index.js +0 -35
  19. package/src/v5/dataLists/fragments.json +0 -1
  20. package/src/v5/dataLists/index.js +0 -26
  21. package/src/v5/dataLists/skeleton.json +0 -20
  22. package/src/v5/form/attachFormClickEventListener.js +0 -27
  23. package/src/v5/form/clickFunc/extractFormData.js +0 -27
  24. package/src/v5/form/clickFunc/handleNew.js +0 -24
  25. package/src/v5/form/clickFunc/handleSave.js +0 -33
  26. package/src/v5/form/clickFunc/index.js +0 -32
  27. package/src/v5/form/index.js +0 -87
  28. package/src/v5/form/structure.json +0 -410
  29. package/src/v5/index.js +0 -150
  30. package/src/v5/meta.js +0 -6
  31. package/src/v5/navTabs/fragments.json +0 -59
  32. package/src/v5/navTabs/index.js +0 -82
  33. package/src/v5/navTabs/skeleton.json +0 -18
  34. package/src/v5/registerGlobal.js +0 -14
  35. package/src/v5/select/fragments.json +0 -1
  36. package/src/v5/select/index.js +0 -31
  37. package/src/v5/select/skeleton.json +0 -21
  38. package/src/v5/table/attachTableClickEventListener.js +0 -22
  39. package/src/v5/table/buildTableDataAsJson.js +0 -19
  40. package/src/v5/table/buildTableDomElement.js +0 -21
  41. package/src/v5/table/buildTableStructureSpec.js +0 -28
  42. package/src/v5/table/clickFunc/v3/createTable.js +0 -16
  43. package/src/v5/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -23
  44. package/src/v5/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -21
  45. package/src/v5/table/clickFunc/v3/getContainer/index.js +0 -39
  46. package/src/v5/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -14
  47. package/src/v5/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -12
  48. package/src/v5/table/clickFunc/v3/index.js +0 -21
  49. package/src/v5/table/fragments.json +0 -112
  50. package/src/v5/table/index.js +0 -72
  51. package/src/v5/table/resolveTargetContainer.js +0 -9
  52. package/src/v5/table/skeleton.json +0 -371
  53. package/src/v6/dataLists/fragments.json +0 -1
  54. package/src/v6/dataLists/index.js +0 -32
  55. package/src/v6/dataLists/skeleton.json +0 -38
  56. package/src/v6/form/attachFormClickEventListener.js +0 -27
  57. package/src/v6/form/clickFunc/extractFormData.js +0 -27
  58. package/src/v6/form/clickFunc/handleNew.js +0 -24
  59. package/src/v6/form/clickFunc/handleSave.js +0 -33
  60. package/src/v6/form/clickFunc/index.js +0 -32
  61. package/src/v6/form/index.js +0 -87
  62. package/src/v6/form/structure.json +0 -410
  63. package/src/v6/index.js +0 -150
  64. package/src/v6/meta.js +0 -6
  65. package/src/v6/navTabs/fragments.json +0 -59
  66. package/src/v6/navTabs/index.js +0 -82
  67. package/src/v6/navTabs/skeleton.json +0 -18
  68. package/src/v6/registerGlobal.js +0 -14
  69. package/src/v6/select/fragments.json +0 -1
  70. package/src/v6/select/index.js +0 -34
  71. package/src/v6/select/skeleton.json +0 -23
  72. package/src/v6/table/attachTableClickEventListener.js +0 -22
  73. package/src/v6/table/buildTableDataAsJson.js +0 -19
  74. package/src/v6/table/buildTableDomElement.js +0 -21
  75. package/src/v6/table/buildTableStructureSpec.js +0 -28
  76. package/src/v6/table/clickFunc/v3/createTable.js +0 -16
  77. package/src/v6/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -23
  78. package/src/v6/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -21
  79. package/src/v6/table/clickFunc/v3/getContainer/index.js +0 -39
  80. package/src/v6/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -14
  81. package/src/v6/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -12
  82. package/src/v6/table/clickFunc/v3/index.js +0 -21
  83. package/src/v6/table/fragments.json +0 -112
  84. package/src/v6/table/index.js +0 -72
  85. package/src/v6/table/resolveTargetContainer.js +0 -9
  86. package/src/v6/table/skeleton.json +0 -371
  87. package/src/v7/common/deriveColumnsFromData.js +0 -20
  88. package/src/v7/dataLists/fragments.json +0 -1
  89. package/src/v7/dataLists/index.js +0 -32
  90. package/src/v7/dataLists/skeleton.json +0 -38
  91. package/src/v7/form/attachFormClickEventListener.js +0 -27
  92. package/src/v7/form/clickFunc/extractFormData.js +0 -27
  93. package/src/v7/form/clickFunc/handleNew.js +0 -24
  94. package/src/v7/form/clickFunc/handleSave.js +0 -33
  95. package/src/v7/form/clickFunc/index.js +0 -32
  96. package/src/v7/form/index.js +0 -87
  97. package/src/v7/form/structure.json +0 -410
  98. package/src/v7/index.js +0 -141
  99. package/src/v7/meta.js +0 -6
  100. package/src/v7/navTabs/fragments.json +0 -59
  101. package/src/v7/navTabs/index.js +0 -82
  102. package/src/v7/navTabs/skeleton.json +0 -18
  103. package/src/v7/registerGlobal.js +0 -14
  104. package/src/v7/select/fragments.json +0 -1
  105. package/src/v7/select/index.js +0 -34
  106. package/src/v7/select/skeleton.json +0 -23
  107. package/src/v7/table/attachTableClickEventListener.js +0 -28
  108. package/src/v7/table/buildTableDataAsJson.js +0 -25
  109. package/src/v7/table/buildTableDomElement.js +0 -25
  110. package/src/v7/table/buildTableStructureSpec.js +0 -33
  111. package/src/v7/table/clickFunc/v3/createTable.js +0 -20
  112. package/src/v7/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -27
  113. package/src/v7/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -24
  114. package/src/v7/table/clickFunc/v3/getContainer/index.js +0 -44
  115. package/src/v7/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -17
  116. package/src/v7/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -15
  117. package/src/v7/table/clickFunc/v3/index.js +0 -35
  118. package/src/v7/table/fragments.json +0 -112
  119. package/src/v7/table/index.js +0 -82
  120. package/src/v7/table/resolveTargetContainer.js +0 -11
  121. package/src/v7/table/skeleton.json +0 -371
  122. package/src/v8/common/deriveColumnsFromData.js +0 -20
  123. package/src/v8/dataLists/fragments.json +0 -1
  124. package/src/v8/dataLists/index.js +0 -32
  125. package/src/v8/dataLists/skeleton.json +0 -38
  126. package/src/v8/form/attachFormClickEventListener.js +0 -27
  127. package/src/v8/form/clickFunc/extractFormData.js +0 -27
  128. package/src/v8/form/clickFunc/handleNew.js +0 -24
  129. package/src/v8/form/clickFunc/handleSave.js +0 -33
  130. package/src/v8/form/clickFunc/index.js +0 -32
  131. package/src/v8/form/index.js +0 -87
  132. package/src/v8/form/structure.json +0 -410
  133. package/src/v8/index.js +0 -141
  134. package/src/v8/meta.js +0 -6
  135. package/src/v8/navTabs/fragments.json +0 -59
  136. package/src/v8/navTabs/index.js +0 -82
  137. package/src/v8/navTabs/skeleton.json +0 -18
  138. package/src/v8/registerGlobal.js +0 -14
  139. package/src/v8/select/fragments.json +0 -1
  140. package/src/v8/select/index.js +0 -34
  141. package/src/v8/select/skeleton.json +0 -23
  142. package/src/v8/table/attachTableClickEventListener.js +0 -28
  143. package/src/v8/table/buildTableDataAsJson.js +0 -25
  144. package/src/v8/table/buildTableDomElement.js +0 -25
  145. package/src/v8/table/buildTableStructureSpec.js +0 -33
  146. package/src/v8/table/clickFunc/v3/createTable.js +0 -20
  147. package/src/v8/table/clickFunc/v3/getContainer/extractClickedRowDetails.js +0 -27
  148. package/src/v8/table/clickFunc/v3/getContainer/getOrCreateChildTableContainer.js +0 -24
  149. package/src/v8/table/clickFunc/v3/getContainer/index.js +0 -44
  150. package/src/v8/table/clickFunc/v3/getContainer/isSameRowClickedToToggleOff.js +0 -17
  151. package/src/v8/table/clickFunc/v3/getContainer/resetAndShowChildTableContainer.js +0 -15
  152. package/src/v8/table/clickFunc/v3/index.js +0 -35
  153. package/src/v8/table/fragments.json +0 -112
  154. package/src/v8/table/index.js +0 -82
  155. package/src/v8/table/resolveTargetContainer.js +0 -11
  156. package/src/v8/table/skeleton.json +0 -371
  157. package/src/v9/common/deriveColumnsFromData.js +0 -20
  158. package/src/v9/dataLists/fragments.json +0 -1
  159. package/src/v9/dataLists/index.js +0 -32
  160. package/src/v9/dataLists/skeleton.json +0 -38
  161. package/src/v9/form/attachFormClickEventListener.js +0 -27
  162. package/src/v9/form/clickFunc/extractFormData.js +0 -27
  163. package/src/v9/form/clickFunc/handleNew.js +0 -24
  164. package/src/v9/form/clickFunc/handleSave.js +0 -33
  165. package/src/v9/form/clickFunc/index.js +0 -32
  166. package/src/v9/form/index.js +0 -87
  167. package/src/v9/form/structure.json +0 -410
  168. package/src/v9/index.js +0 -141
  169. package/src/v9/meta.js +0 -6
  170. package/src/v9/navTabs/fragments.json +0 -59
  171. package/src/v9/navTabs/index.js +0 -82
  172. package/src/v9/navTabs/skeleton.json +0 -18
  173. package/src/v9/registerGlobal.js +0 -14
  174. package/src/v9/select/fragments.json +0 -1
  175. package/src/v9/select/index.js +0 -34
  176. package/src/v9/select/skeleton.json +0 -23
  177. package/src/v9/table/skeleton.json +0 -47
  178. /package/src/{v10 → v13}/common/deriveColumnsFromData.js +0 -0
  179. /package/src/{v10 → v13}/registerGlobal.js +0 -0
  180. /package/src/{v10 → v13}/table/skeleton.json +0 -0
@@ -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;
@@ -1,18 +0,0 @@
1
- {
2
- "default": {
3
- "tagName": "div",
4
- "attributes": {
5
- "class": "bootstrap-nav-tabs"
6
- },
7
- "slots": [
8
- "navTabsList",
9
- "tabContent"
10
- ]
11
- },
12
- "tabsOnly": {
13
- "tagName": "div",
14
- "slots": [
15
- "navTabsList"
16
- ]
17
- }
18
- }
@@ -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
- {}
@@ -1,34 +0,0 @@
1
- import jsonTraversal from "../../../node_modules/json-traversal/index.js";
2
-
3
- // import jsonToSpec from "../../../node_modules/json-to-spec/index.js";
4
- // import jsonToTag from "@keshavsoft/json-to-tag";
5
- import jsonToTag from "../../../node_modules/@keshavsoft/json-to-tag/index.js";
6
-
7
- import skeletonJson from "./skeleton.json" with { type: "json" };
8
-
9
- const startFunc = ({ targetHtmlId, inData,
10
- inSkeletonType = "default", inClassToApply } = {}) => {
11
-
12
- console.log("aaaaaaaaaa");
13
-
14
- const skeletonNeeded = skeletonJson[inSkeletonType];
15
- skeletonNeeded.mapping.attributes.class = `$${inClassToApply}`;
16
- // skeletonNeeded.mapping.attributes.class = inClassToApply;
17
- debugger;
18
-
19
- const specAsJsonToDom = jsonTraversal.transform(inData, skeletonNeeded);
20
-
21
- const container = document.getElementById(targetHtmlId);
22
- if (container) container.innerHTML = "";
23
-
24
- const createdElement = jsonToTag(specAsJsonToDom);
25
-
26
- if (Array.isArray(createdElement)) {
27
- // container.appendChild(createdElement)
28
- createdElement.forEach(element => container.append(element));
29
- } else {
30
- container.append(createdElement);
31
- };
32
- };
33
-
34
- export default startFunc;
@@ -1,23 +0,0 @@
1
- {
2
- "default": {
3
- "mapping": {
4
- "tagName": "$select",
5
- "attributes": {
6
- "id": "$LedgerName",
7
- "class": "$keshav"
8
- },
9
- "children": [
10
- {
11
- "list": "LedgerName",
12
- "item": {
13
- "tagName": "$option",
14
- "attributes": {
15
- "value": ""
16
- },
17
- "textContent": ""
18
- }
19
- }
20
- ]
21
- }
22
- }
23
- }
@@ -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
- }
@@ -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;
@@ -1,9 +0,0 @@
1
- // Story 4: Resolve target HTML container element
2
- const startFunc = ({ inTargetHtmlId } = {}) => {
3
- if (typeof inTargetHtmlId === "string") {
4
- return document.getElementById(inTargetHtmlId);
5
- }
6
- return inTargetHtmlId ?? null;
7
- };
8
-
9
- export default startFunc;