json-renderers-build 1.9.2 → 1.10.3

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 (145) hide show
  1. package/package.json +2 -2
  2. package/src/index.js +2 -2
  3. package/src/v10/index.js +42 -0
  4. package/src/{v2 → v10}/meta.js +1 -1
  5. package/src/v10/select/index.js +21 -0
  6. package/src/{v6/selectOptionsOnly → v10/select/options}/index.js +2 -4
  7. package/src/{v4/selectOptionsOnly → v10/select/options}/skeleton.json +1 -1
  8. package/src/v10/table/footer/empty/cell/index.js +5 -0
  9. package/src/v10/table/footer/empty/cell/tag.json +6 -0
  10. package/src/v10/table/footer/empty/index.js +6 -0
  11. package/src/v10/table/footer/empty/row/index.js +10 -0
  12. package/src/v10/table/footer/empty/row/tag.json +7 -0
  13. package/src/v10/table/footer/index.js +28 -0
  14. package/src/v10/table/footer/inputs/cell/index.js +15 -0
  15. package/src/v10/table/footer/inputs/cell/tag.json +7 -0
  16. package/src/v10/table/footer/inputs/index.js +6 -0
  17. package/src/v10/table/footer/inputs/input/tag.json +9 -0
  18. package/src/v10/table/footer/inputs/row/index.js +10 -0
  19. package/src/v10/table/footer/inputs/row/tag.json +7 -0
  20. package/src/v10/table/footer/inputsWithSave/button/tag.json +8 -0
  21. package/src/v10/table/footer/inputsWithSave/cell/index.js +20 -0
  22. package/src/v10/table/footer/inputsWithSave/cell/tag.json +7 -0
  23. package/src/v10/table/footer/inputsWithSave/index.js +6 -0
  24. package/src/v10/table/footer/inputsWithSave/input/tag.json +9 -0
  25. package/src/v10/table/footer/inputsWithSave/row/index.js +13 -0
  26. package/src/v10/table/footer/inputsWithSave/row/tag.json +7 -0
  27. package/src/v10/table/footer/tag.json +7 -0
  28. package/src/v10/table/footer/totals/cell/index.js +21 -0
  29. package/src/v10/table/footer/totals/cell/tag.json +7 -0
  30. package/src/v10/table/footer/totals/index.js +6 -0
  31. package/src/v10/table/footer/totals/row/index.js +12 -0
  32. package/src/v10/table/footer/totals/row/tag.json +7 -0
  33. package/src/v10/table/index.js +33 -0
  34. package/src/v10/table/options/index.js +16 -0
  35. package/src/v10/table/options/showOptions/index.js +39 -0
  36. package/src/v10/table/options/showSerial/index.js +19 -0
  37. package/src/v10/table/render-requests.json +107 -0
  38. package/src/v10/table/table/body/cell/index.js +12 -0
  39. package/src/v10/table/table/body/cell/tag.json +7 -0
  40. package/src/v10/table/table/body/index.js +17 -0
  41. package/src/v10/table/table/body/row/index.js +18 -0
  42. package/src/v10/table/table/body/row/tag.json +4 -0
  43. package/src/v10/table/table/body/tag.json +4 -0
  44. package/src/v10/table/table/head/cell/index.js +12 -0
  45. package/src/v10/table/table/head/cell/tag.json +7 -0
  46. package/src/v10/table/table/head/index.js +16 -0
  47. package/src/v10/table/table/head/row/index.js +14 -0
  48. package/src/v10/table/table/head/row/tag.json +4 -0
  49. package/src/v10/table/table/head/tag.json +4 -0
  50. package/src/v10/table/table/index.js +36 -0
  51. package/src/v10/table/table/tag.json +7 -0
  52. package/src/v10/tableFromSpec/footer/empty/cell/index.js +5 -0
  53. package/src/v10/tableFromSpec/footer/empty/cell/tag.json +6 -0
  54. package/src/v10/tableFromSpec/footer/empty/index.js +6 -0
  55. package/src/v10/tableFromSpec/footer/empty/row/index.js +10 -0
  56. package/src/v10/tableFromSpec/footer/empty/row/tag.json +7 -0
  57. package/src/v10/tableFromSpec/footer/index.js +28 -0
  58. package/src/v10/tableFromSpec/footer/inputs/cell/index.js +15 -0
  59. package/src/v10/tableFromSpec/footer/inputs/cell/tag.json +7 -0
  60. package/src/v10/tableFromSpec/footer/inputs/index.js +6 -0
  61. package/src/v10/tableFromSpec/footer/inputs/input/tag.json +9 -0
  62. package/src/v10/tableFromSpec/footer/inputs/row/index.js +10 -0
  63. package/src/v10/tableFromSpec/footer/inputs/row/tag.json +7 -0
  64. package/src/v10/tableFromSpec/footer/inputsWithSave/button/tag.json +8 -0
  65. package/src/v10/tableFromSpec/footer/inputsWithSave/cell/index.js +20 -0
  66. package/src/v10/tableFromSpec/footer/inputsWithSave/cell/tag.json +7 -0
  67. package/src/v10/tableFromSpec/footer/inputsWithSave/index.js +6 -0
  68. package/src/v10/tableFromSpec/footer/inputsWithSave/input/tag.json +9 -0
  69. package/src/v10/tableFromSpec/footer/inputsWithSave/row/index.js +13 -0
  70. package/src/v10/tableFromSpec/footer/inputsWithSave/row/tag.json +7 -0
  71. package/src/v10/tableFromSpec/footer/tag.json +7 -0
  72. package/src/v10/tableFromSpec/footer/totals/cell/index.js +21 -0
  73. package/src/v10/tableFromSpec/footer/totals/cell/tag.json +7 -0
  74. package/src/v10/tableFromSpec/footer/totals/index.js +6 -0
  75. package/src/v10/tableFromSpec/footer/totals/row/index.js +12 -0
  76. package/src/v10/tableFromSpec/footer/totals/row/tag.json +7 -0
  77. package/src/v10/tableFromSpec/index.js +32 -0
  78. package/src/v10/tableFromSpec/options/index.js +18 -0
  79. package/src/v10/tableFromSpec/options/showOptions/index.js +39 -0
  80. package/src/v10/tableFromSpec/options/showSerial/index.js +20 -0
  81. package/src/v10/tableFromSpec/render-requests.json +107 -0
  82. package/src/v10/tableFromSpec/table/body/index.js +16 -0
  83. package/src/v10/tableFromSpec/table/body/spec.json +16 -0
  84. package/src/v10/tableFromSpec/table/findKey.js +17 -0
  85. package/src/v10/tableFromSpec/table/head/index.js +16 -0
  86. package/src/v10/tableFromSpec/table/head/spec.json +13 -0
  87. package/src/v10/tableFromSpec/table/index.js +24 -0
  88. package/src/v10/tableFromSpec/table/tag.json +24 -0
  89. package/src/v1/index.js +0 -62
  90. package/src/v1/meta.js +0 -6
  91. package/src/v1/registerGlobal.js +0 -14
  92. package/src/v1/select/index.js +0 -32
  93. package/src/v1/select/skeleton.json +0 -18
  94. package/src/v1/table/index.js +0 -36
  95. package/src/v1/table/skeleton.json +0 -47
  96. package/src/v2/common/deriveColumnsFromData.js +0 -20
  97. package/src/v2/index.js +0 -62
  98. package/src/v2/select/index.js +0 -32
  99. package/src/v2/select/skeleton.json +0 -18
  100. package/src/v2/table/index.js +0 -23
  101. package/src/v2/table/skeleton.json +0 -47
  102. package/src/v3/common/deriveColumnsFromData.js +0 -20
  103. package/src/v3/index.js +0 -40
  104. package/src/v3/meta.js +0 -6
  105. package/src/v3/registerGlobal.js +0 -14
  106. package/src/v3/select/index.js +0 -18
  107. package/src/v3/select/skeleton.json +0 -18
  108. package/src/v3/selectOptionsOnly/index.js +0 -18
  109. package/src/v3/selectOptionsOnly/skeleton.json +0 -14
  110. package/src/v3/table/index.js +0 -20
  111. package/src/v3/table/skeleton.json +0 -47
  112. package/src/v4/common/deriveColumnsFromData.js +0 -20
  113. package/src/v4/index.js +0 -40
  114. package/src/v4/meta.js +0 -6
  115. package/src/v4/registerGlobal.js +0 -14
  116. package/src/v4/select/index.js +0 -20
  117. package/src/v4/selectOptionsOnly/index.js +0 -19
  118. package/src/v4/table/index.js +0 -20
  119. package/src/v4/table/skeleton.json +0 -47
  120. package/src/v5/common/deriveColumnsFromData.js +0 -20
  121. package/src/v5/index.js +0 -40
  122. package/src/v5/meta.js +0 -6
  123. package/src/v5/registerGlobal.js +0 -14
  124. package/src/v5/select/index.js +0 -20
  125. package/src/v5/select/skeleton.json +0 -7
  126. package/src/v5/selectOptionsOnly/index.js +0 -19
  127. package/src/v5/selectOptionsOnly/skeleton.json +0 -17
  128. package/src/v5/table/index.js +0 -20
  129. package/src/v5/table/skeleton.json +0 -47
  130. package/src/v5/tableHeadCells/index.js +0 -19
  131. package/src/v5/tableHeadCells/skeleton.json +0 -17
  132. package/src/v6/common/deriveColumnsFromData.js +0 -20
  133. package/src/v6/index.js +0 -40
  134. package/src/v6/meta.js +0 -6
  135. package/src/v6/registerGlobal.js +0 -14
  136. package/src/v6/select/index.js +0 -20
  137. package/src/v6/select/skeleton.json +0 -7
  138. package/src/v6/selectOptionsOnly/skeleton.json +0 -17
  139. package/src/v6/table/index.js +0 -20
  140. package/src/v6/table/skeleton.json +0 -47
  141. package/src/v6/tableHeadCells/index.js +0 -19
  142. package/src/v6/tableHeadCells/skeleton.json +0 -17
  143. /package/src/{v1 → v10}/common/deriveColumnsFromData.js +0 -0
  144. /package/src/{v2 → v10}/registerGlobal.js +0 -0
  145. /package/src/{v4 → v10}/select/skeleton.json +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "json-renderers-build",
3
- "version": "1.9.2",
3
+ "version": "1.10.3",
4
4
  "description": "Headless component specification builder for json-renderers, compiling UI skeletons and data into JSON-to-DOM specs using json-to-spec",
5
5
  "type": "module",
6
6
  "main": "src/index.js",
@@ -41,7 +41,7 @@
41
41
  "vite": "^5.4.2"
42
42
  },
43
43
  "dependencies": {
44
- "@keshavsoft/json-transformer": "^1.14.0",
44
+ "@keshavsoft/json-transformer": "^1.15.2",
45
45
  "json-to-spec": "^32.1.3"
46
46
  }
47
47
  }
package/src/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export * from "./v9/index.js";
2
- export { default } from "./v9/index.js";
1
+ export * from "./v10/index.js";
2
+ export { default } from "./v10/index.js";
@@ -0,0 +1,42 @@
1
+ import registerGlobal from "./registerGlobal.js";
2
+
3
+ import renderTable from "./table/index.js";
4
+ import renderSelect, { renderSelectOptions } from "./select/index.js";
5
+ import tableFromSpec from "./tableFromSpec/index.js";
6
+
7
+ const RENDERER_MAP = {
8
+ table: renderTable,
9
+ select: renderSelect,
10
+ selectOptionsOnly: renderSelectOptions,
11
+ tableFromSpec
12
+ };
13
+
14
+ const render = ({
15
+ type = "table",
16
+ data,
17
+ columns,
18
+ options
19
+ }) => {
20
+ const rawType = type;
21
+ const renderer = RENDERER_MAP[rawType];
22
+ // console.log("rawType : ", rawType, renderer);
23
+ const localData = data;
24
+ const localColumns = columns;
25
+
26
+ const createdRenderer = renderer({
27
+ inColumns: localColumns,
28
+ inData: localData,
29
+ options
30
+ });
31
+
32
+ return createdRenderer;
33
+ };
34
+
35
+ registerGlobal(render);
36
+
37
+ export {
38
+ renderTable,
39
+ renderSelect,
40
+ renderSelectOptions
41
+ };
42
+ export default render;
@@ -1,5 +1,5 @@
1
1
  export const meta = {
2
- version: "v2.0.0",
2
+ version: "v10.0.0",
3
3
  description: "build table from store data and render to DOM uses json-to-spec, json-to-dom under the hood"
4
4
  };
5
5
 
@@ -0,0 +1,21 @@
1
+ import renderSelectOptions from "./options/index.js";
2
+
3
+ import skeletonJson from './skeleton.json' with { type: 'json' };
4
+
5
+ const startFunc = ({
6
+ inData,
7
+ }) => {
8
+ const localData = inData;
9
+
10
+ let localChildren = renderSelectOptions({
11
+ inData: localData
12
+ });
13
+
14
+ const select = structuredClone(skeletonJson);
15
+ select.children = localChildren;
16
+
17
+ return select;
18
+ };
19
+
20
+ export { renderSelectOptions };
21
+ export default startFunc;
@@ -2,16 +2,14 @@ import jsonTransform from "@keshavsoft/json-transformer";
2
2
 
3
3
  import skeletonJson from './skeleton.json' with { type: 'json' };
4
4
 
5
- // --- Story of Table Render ---
6
5
  const startFunc = ({
7
6
  inData,
8
- } = {}) => {
9
- const localData = inData ?? [];
7
+ }) => {
8
+ const localData = inData;
10
9
 
11
10
  let specAsJsonToDom = jsonTransform({
12
11
  children: localData
13
12
  }, skeletonJson);
14
- // console.log("specAsJsonToDom: ", specAsJsonToDom);
15
13
 
16
14
  return specAsJsonToDom?.children;
17
15
  };
@@ -0,0 +1,5 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+
3
+ const renderCell = () => structuredClone(tagJson);
4
+
5
+ export default renderCell;
@@ -0,0 +1,6 @@
1
+ {
2
+ "tagName": "td",
3
+ "attributes": {
4
+ "class": "align-middle py-2"
5
+ }
6
+ }
@@ -0,0 +1,6 @@
1
+ import renderRow from "./row/index.js";
2
+
3
+ const renderEmpty = ({ inColumns = [] } = {}) =>
4
+ renderRow({ inColumns });
5
+
6
+ export default renderEmpty;
@@ -0,0 +1,10 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+ import renderCell from "../cell/index.js";
3
+
4
+ const renderRow = ({ inColumns = [] } = {}) => {
5
+ const row = structuredClone(tagJson);
6
+ row.children = inColumns.map(() => renderCell());
7
+ return row;
8
+ };
9
+
10
+ export default renderRow;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "tr",
3
+ "attributes": {
4
+ "class": "align-middle"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,28 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+ import renderInputs from "./inputs/index.js";
3
+ import renderInputsWithSave from "./inputsWithSave/index.js";
4
+ import renderTotals from "./totals/index.js";
5
+ import renderEmpty from "./empty/index.js";
6
+
7
+ const footerBuilders = {
8
+ inputs: renderInputs,
9
+ inputsWithSave: renderInputsWithSave,
10
+ totals: renderTotals,
11
+ empty: renderEmpty
12
+ };
13
+
14
+ const renderTableFooter = ({ inFooter = [], inColumns = [], inData = [] } = {}) => {
15
+ const tfoot = structuredClone(tagJson);
16
+
17
+ tfoot.children = inFooter.map(footerName => {
18
+ if (!Object.hasOwn(footerBuilders, footerName)) {
19
+ throw new Error(`Unknown footer "${footerName}".`);
20
+ }
21
+
22
+ return footerBuilders[footerName]({ inColumns, inData });
23
+ });
24
+
25
+ return tfoot;
26
+ };
27
+
28
+ export default renderTableFooter;
@@ -0,0 +1,15 @@
1
+ import cellJson from "./tag.json" with { type: "json" };
2
+ import inputJson from "../input/tag.json" with { type: "json" };
3
+
4
+ const renderCell = ({ inColumn } = {}) => {
5
+ const cell = structuredClone(cellJson);
6
+ const input = structuredClone(inputJson);
7
+
8
+ input.attributes.name = inColumn;
9
+ input.attributes.placeholder = inColumn;
10
+ cell.children.push(input);
11
+
12
+ return cell;
13
+ };
14
+
15
+ export default renderCell;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "td",
3
+ "attributes": {
4
+ "class": "align-middle py-2"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,6 @@
1
+ import renderRow from "./row/index.js";
2
+
3
+ const renderInputs = ({ inColumns = [] } = {}) =>
4
+ renderRow({ inColumns });
5
+
6
+ export default renderInputs;
@@ -0,0 +1,9 @@
1
+ {
2
+ "tagName": "input",
3
+ "attributes": {
4
+ "type": "text",
5
+ "name": "",
6
+ "placeholder": "",
7
+ "class": "form-control form-control-sm"
8
+ }
9
+ }
@@ -0,0 +1,10 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+ import renderCell from "../cell/index.js";
3
+
4
+ const renderRow = ({ inColumns = [] } = {}) => {
5
+ const row = structuredClone(tagJson);
6
+ row.children = inColumns.map(inColumn => renderCell({ inColumn }));
7
+ return row;
8
+ };
9
+
10
+ export default renderRow;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "tr",
3
+ "attributes": {
4
+ "class": "align-middle"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tagName": "button",
3
+ "attributes": {
4
+ "type": "button",
5
+ "class": "btn btn-primary btn-sm ms-2"
6
+ },
7
+ "textContent": "Save"
8
+ }
@@ -0,0 +1,20 @@
1
+ import cellJson from "./tag.json" with { type: "json" };
2
+ import inputJson from "../input/tag.json" with { type: "json" };
3
+ import buttonJson from "../button/tag.json" with { type: "json" };
4
+
5
+ const renderCell = ({ inColumn, inSave = false } = {}) => {
6
+ const cell = structuredClone(cellJson);
7
+ const input = structuredClone(inputJson);
8
+
9
+ input.attributes.name = inColumn;
10
+ input.attributes.placeholder = inColumn;
11
+ cell.children.push(input);
12
+
13
+ if (inSave) {
14
+ cell.children.push(structuredClone(buttonJson));
15
+ }
16
+
17
+ return cell;
18
+ };
19
+
20
+ export default renderCell;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "td",
3
+ "attributes": {
4
+ "class": "align-middle py-2"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,6 @@
1
+ import renderRow from "./row/index.js";
2
+
3
+ const renderInputsWithSave = ({ inColumns = [] } = {}) =>
4
+ renderRow({ inColumns });
5
+
6
+ export default renderInputsWithSave;
@@ -0,0 +1,9 @@
1
+ {
2
+ "tagName": "input",
3
+ "attributes": {
4
+ "type": "text",
5
+ "name": "",
6
+ "placeholder": "",
7
+ "class": "form-control form-control-sm"
8
+ }
9
+ }
@@ -0,0 +1,13 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+ import renderCell from "../cell/index.js";
3
+
4
+ const renderRow = ({ inColumns = [] } = {}) => {
5
+ const row = structuredClone(tagJson);
6
+ row.children = inColumns.map((inColumn, index) => renderCell({
7
+ inColumn,
8
+ inSave: index === inColumns.length - 1
9
+ }));
10
+ return row;
11
+ };
12
+
13
+ export default renderRow;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "tr",
3
+ "attributes": {
4
+ "class": "align-middle"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "tfoot",
3
+ "attributes": {
4
+ "class": "table-light"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,21 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+
3
+ const getValue = (row, column) =>
4
+ Array.isArray(row) ? row[column] : row?.[column];
5
+
6
+ const renderCell = ({ inColumn, inIndex, inData = [] } = {}) => {
7
+ const cell = structuredClone(tagJson);
8
+ const values = inData
9
+ .map(row => getValue(row, inColumn))
10
+ .filter(value => value !== null && value !== undefined && String(value).trim() !== "")
11
+ .map(Number)
12
+ .filter(Number.isFinite);
13
+
14
+ cell.textContent = values.length
15
+ ? String(values.reduce((sum, value) => sum + value, 0))
16
+ : inIndex === 0 ? "Total" : "";
17
+
18
+ return cell;
19
+ };
20
+
21
+ export default renderCell;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "td",
3
+ "attributes": {
4
+ "class": "align-middle py-2"
5
+ },
6
+ "textContent": ""
7
+ }
@@ -0,0 +1,6 @@
1
+ import renderRow from "./row/index.js";
2
+
3
+ const renderTotals = ({ inColumns = [], inData = [] } = {}) =>
4
+ renderRow({ inColumns, inData });
5
+
6
+ export default renderTotals;
@@ -0,0 +1,12 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+ import renderCell from "../cell/index.js";
3
+
4
+ const renderRow = ({ inColumns = [], inData = [] } = {}) => {
5
+ const row = structuredClone(tagJson);
6
+ row.children = inColumns.map((inColumn, inIndex) =>
7
+ renderCell({ inColumn, inIndex, inData })
8
+ );
9
+ return row;
10
+ };
11
+
12
+ export default renderRow;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "tr",
3
+ "attributes": {
4
+ "class": "fw-semibold align-middle"
5
+ },
6
+ "children": []
7
+ }
@@ -0,0 +1,33 @@
1
+ import renderTable from "./table/index.js";
2
+
3
+ import applyOptions from "./options/index.js";
4
+ import renderRequests from "./render-requests.json" with { type: "json" };
5
+
6
+ const render = ({
7
+ type = "table",
8
+ inData,
9
+ inColumns,
10
+ footer = [],
11
+ options = {}
12
+ } = {}) => {
13
+ if (type === "table") {
14
+ const spec = renderTable({
15
+ inColumns,
16
+ inData,
17
+ inFooter: footer
18
+ });
19
+
20
+ return applyOptions(spec, options);
21
+ };
22
+
23
+ throw new Error(`Unknown table renderer type "${type}".`);
24
+ };
25
+
26
+ render.requests = renderRequests;
27
+
28
+ export {
29
+ render,
30
+ renderRequests
31
+ };
32
+
33
+ export default render;
@@ -0,0 +1,16 @@
1
+ import applyShowSerial from "./showSerial/index.js";
2
+ import applyShowOptions from "./showOptions/index.js";
3
+
4
+ const applyOptions = (inSpec, inOptions = {}) => {
5
+ if (inOptions.showSerial) {
6
+ applyShowSerial(inSpec);
7
+ }
8
+
9
+ if (inOptions.showOptions) {
10
+ applyShowOptions(inSpec, inOptions.showOptions);
11
+ }
12
+
13
+ return inSpec;
14
+ };
15
+
16
+ export default applyOptions;
@@ -0,0 +1,39 @@
1
+ const resolveButtons = (inShowOptions) => {
2
+ if (inShowOptions === true) {
3
+ return [{ label: "Apply", type: "button" }];
4
+ }
5
+
6
+ if (Array.isArray(inShowOptions)) {
7
+ return inShowOptions;
8
+ }
9
+
10
+ return [];
11
+ };
12
+
13
+ const applyShowOptions = (inSpec, inShowOptions) => {
14
+ const buttons = resolveButtons(inShowOptions);
15
+
16
+ if (buttons.length === 0) return;
17
+
18
+ const [thead, tbody] = inSpec.children;
19
+
20
+ // append <th>Actions</th> to head row
21
+ thead.children[0].children.push({
22
+ tagName: "th",
23
+ textContent: "Actions"
24
+ });
25
+
26
+ // append <td> with buttons to each body row
27
+ tbody.children.forEach(tr => {
28
+ tr.children.push({
29
+ tagName: "td",
30
+ children: buttons.map(btn => ({
31
+ tagName: "button",
32
+ attributes: { type: btn.type || "button" },
33
+ textContent: btn.label
34
+ }))
35
+ });
36
+ });
37
+ };
38
+
39
+ export default applyShowOptions;
@@ -0,0 +1,19 @@
1
+ const applyShowSerial = (inSpec) => {
2
+ const [thead, tbody] = inSpec.children;
3
+
4
+ // prepend <th>#</th> to head row
5
+ thead.children[0].children.unshift({
6
+ tagName: "th",
7
+ textContent: "#"
8
+ });
9
+
10
+ // prepend <td>{rowIndex}</td> to each body row
11
+ tbody.children.forEach((tr, index) => {
12
+ tr.children.unshift({
13
+ tagName: "td",
14
+ textContent: String(index + 1)
15
+ });
16
+ });
17
+ };
18
+
19
+ export default applyShowSerial;
@@ -0,0 +1,107 @@
1
+ {
2
+ "table": {
3
+ "type": "table",
4
+ "data": [
5
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
6
+ ],
7
+ "columns": ["itemName", "baseUnit"],
8
+ "options": {}
9
+ },
10
+ "tableWithSerial": {
11
+ "type": "table",
12
+ "data": [
13
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
14
+ ],
15
+ "columns": ["itemName", "baseUnit"],
16
+ "options": {
17
+ "showSerial": true
18
+ }
19
+ },
20
+ "tableWithDefaultAction": {
21
+ "type": "table",
22
+ "data": [
23
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
24
+ ],
25
+ "columns": ["itemName", "baseUnit"],
26
+ "options": {
27
+ "showOptions": true
28
+ }
29
+ },
30
+ "tableWithCustomActions": {
31
+ "type": "table",
32
+ "data": [
33
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
34
+ ],
35
+ "columns": ["itemName", "baseUnit"],
36
+ "options": {
37
+ "showOptions": [
38
+ { "label": "Show", "type": "button" },
39
+ { "label": "Edit", "type": "button" }
40
+ ]
41
+ }
42
+ },
43
+ "tableWithSerialAndActions": {
44
+ "type": "table",
45
+ "data": [
46
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
47
+ ],
48
+ "columns": ["itemName", "baseUnit"],
49
+ "options": {
50
+ "showSerial": true,
51
+ "showOptions": [
52
+ { "label": "Show", "type": "button" }
53
+ ]
54
+ }
55
+ },
56
+ "tableWithFooter": {
57
+ "type": "table",
58
+ "data": [
59
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
60
+ ],
61
+ "columns": ["itemName", "baseUnit"],
62
+ "footer": ["inputs"],
63
+ "options": {}
64
+ },
65
+ "tableWithFooterSave": {
66
+ "type": "table",
67
+ "data": [
68
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
69
+ ],
70
+ "columns": ["itemName", "baseUnit"],
71
+ "footer": ["inputsWithSave"],
72
+ "options": {}
73
+ },
74
+ "tableWithTotals": {
75
+ "type": "table",
76
+ "data": [
77
+ { "itemName": "0.09/30mm", "baseUnit": "2" },
78
+ { "itemName": "0.11-25", "baseUnit": "3" }
79
+ ],
80
+ "columns": ["itemName", "baseUnit"],
81
+ "footer": ["totals"],
82
+ "options": {}
83
+ },
84
+ "tableWithMultipleFooters": {
85
+ "type": "table",
86
+ "data": [
87
+ { "itemName": "0.09/30mm", "baseUnit": "2" }
88
+ ],
89
+ "columns": ["itemName", "baseUnit"],
90
+ "footer": ["inputs", "totals", "inputsWithSave", "empty"],
91
+ "options": {}
92
+ },
93
+ "tableHead": {
94
+ "type": "tableHead",
95
+ "data": [],
96
+ "columns": ["itemName", "baseUnit"],
97
+ "options": {}
98
+ },
99
+ "tableBody": {
100
+ "type": "tableBody",
101
+ "data": [
102
+ { "itemName": "0.09/30mm", "baseUnit": "kgs" }
103
+ ],
104
+ "columns": ["itemName", "baseUnit"],
105
+ "options": {}
106
+ }
107
+ }
@@ -0,0 +1,12 @@
1
+ import tagJson from "./tag.json" with { type: "json" };
2
+
3
+ const buildBodyCell = ({ inValue } = {}) => {
4
+ const td = structuredClone(tagJson);
5
+
6
+ td.attributes.value = inValue;
7
+ td.textContent = inValue;
8
+
9
+ return td;
10
+ };
11
+
12
+ export default buildBodyCell;
@@ -0,0 +1,7 @@
1
+ {
2
+ "tagName": "td",
3
+ "attributes": {
4
+ "value": ""
5
+ },
6
+ "textContent": ""
7
+ }