json-renderers 1.9.1 → 1.12.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/v10/min.js +693 -0
- package/docs/dist/v12/min.js +646 -0
- package/docs/dist/v8/min.js +1787 -1787
- package/docs/dist/v9/min.js +1032 -1032
- package/package.json +3 -4
- package/src/index.js +2 -2
- package/src/v10/common/deriveColumnsFromData.js +20 -0
- package/src/v10/dataLists/fragments.json +1 -0
- package/src/v10/dataLists/index.js +32 -0
- package/src/v10/dataLists/skeleton.json +38 -0
- package/src/v10/index.js +142 -0
- package/src/v10/meta.js +6 -0
- package/src/v10/registerGlobal.js +14 -0
- package/src/v10/select/fragments.json +1 -0
- package/src/v10/select/index.js +34 -0
- package/src/v10/select/skeleton.json +23 -0
- package/src/v10/table/index.js +35 -0
- package/src/v10/table/skeleton.json +47 -0
- package/src/v11/common/deriveColumnsFromData.js +20 -0
- package/src/v11/dataLists/fragments.json +1 -0
- package/src/v11/dataLists/index.js +32 -0
- package/src/v11/dataLists/skeleton.json +38 -0
- package/src/v11/index.js +62 -0
- package/src/v11/meta.js +6 -0
- package/src/v11/registerGlobal.js +14 -0
- package/src/v11/select/fragments.json +1 -0
- package/src/v11/select/index.js +34 -0
- package/src/v11/select/skeleton.json +23 -0
- package/src/v11/table/index.js +35 -0
- package/src/v11/table/skeleton.json +47 -0
- package/src/v12/common/deriveColumnsFromData.js +20 -0
- package/src/v12/index.js +62 -0
- package/src/v12/meta.js +6 -0
- package/src/v12/registerGlobal.js +14 -0
- package/src/v12/table/index.js +35 -0
- package/src/v12/table/skeleton.json +47 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "json-renderers",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.2",
|
|
4
4
|
"description": "Standalone, config-driven Table renderer built on top of json-to-dom",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "src/index.js",
|
|
@@ -29,8 +29,7 @@
|
|
|
29
29
|
"vite": "^5.4.2"
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@keshavsoft/json-to-tag": "^1.
|
|
33
|
-
"json-to-spec": "^32.1.
|
|
34
|
-
"json-traversal": "^1.19.1"
|
|
32
|
+
"@keshavsoft/json-to-tag": "^1.9.3",
|
|
33
|
+
"json-to-spec": "^32.1.2"
|
|
35
34
|
}
|
|
36
35
|
}
|
package/src/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from "./
|
|
2
|
-
export { default } from "./
|
|
1
|
+
export * from "./v12/index.js";
|
|
2
|
+
export { default } from "./v12/index.js";
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const deriveColumnsFromData = ({ inData = [] } = {}) => {
|
|
2
|
+
const localData = inData;
|
|
3
|
+
|
|
4
|
+
if (!Array.isArray(localData) || localData.length === 0) {
|
|
5
|
+
return [];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const firstRow = localData[0];
|
|
9
|
+
if (!firstRow || typeof firstRow !== "object") {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return Object.keys(firstRow).map(key => ({
|
|
14
|
+
key,
|
|
15
|
+
label: key
|
|
16
|
+
}));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { deriveColumnsFromData };
|
|
20
|
+
export default deriveColumnsFromData;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// import jsonToSpec from "../../../node_modules/json-to-spec/index.js";
|
|
2
|
+
import jsonToTag from "@keshavsoft/json-to-tag";
|
|
3
|
+
import jsonTraversal from "../../../node_modules/json-traversal/index.js";
|
|
4
|
+
|
|
5
|
+
import skeletonJson from "./skeleton.json" with { type: "json" };
|
|
6
|
+
|
|
7
|
+
const startFunc = ({ targetHtmlId, inData, inSkeletonType = "default" } = {}) => {
|
|
8
|
+
|
|
9
|
+
// const specAsJsonToDom = jsonToSpec({
|
|
10
|
+
// specJson: skeletonJson[inSkeletonType],
|
|
11
|
+
// dataJson: inData
|
|
12
|
+
// });
|
|
13
|
+
const skeletonNeeded = skeletonJson[inSkeletonType];
|
|
14
|
+
|
|
15
|
+
const specAsJsonToDom = jsonTraversal.transform(inData, skeletonNeeded);
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
const container = document.getElementById(targetHtmlId);
|
|
19
|
+
|
|
20
|
+
if (container) container.innerHTML = "";
|
|
21
|
+
|
|
22
|
+
const createdElement = jsonToTag(specAsJsonToDom);
|
|
23
|
+
|
|
24
|
+
if (Array.isArray(createdElement)) {
|
|
25
|
+
// container.appendChild(createdElement)
|
|
26
|
+
createdElement.forEach(element => container.append(element));
|
|
27
|
+
} else {
|
|
28
|
+
container.append(createdElement);
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default startFunc;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"old": {
|
|
3
|
+
"tagName": "datalist",
|
|
4
|
+
"attributes": {
|
|
5
|
+
"id": "LedgerName"
|
|
6
|
+
},
|
|
7
|
+
"jsonToSpec": {
|
|
8
|
+
"operation": "loopArray",
|
|
9
|
+
"source": "LedgerName",
|
|
10
|
+
"template": {
|
|
11
|
+
"tagName": "option",
|
|
12
|
+
"attributes": {
|
|
13
|
+
"value": "${}"
|
|
14
|
+
},
|
|
15
|
+
"textContent": "${}"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"children": []
|
|
19
|
+
},
|
|
20
|
+
"default": {
|
|
21
|
+
"mapping": {
|
|
22
|
+
"tagName": "$datalist",
|
|
23
|
+
"attributes": {
|
|
24
|
+
"id": "$LedgerName"
|
|
25
|
+
},
|
|
26
|
+
"children": {
|
|
27
|
+
"list": "LedgerName",
|
|
28
|
+
"item": {
|
|
29
|
+
"tagName": "$option",
|
|
30
|
+
"attributes": {
|
|
31
|
+
"value": ""
|
|
32
|
+
},
|
|
33
|
+
"textContent": ""
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/v10/index.js
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
import registerGlobal from "./registerGlobal.js";
|
|
2
|
+
|
|
3
|
+
import renderTable from "./table/index.js";
|
|
4
|
+
|
|
5
|
+
// import renderDataList from "./dataLists/index.js";
|
|
6
|
+
// import renderSelect from "./select/index.js";
|
|
7
|
+
|
|
8
|
+
const RENDERER_MAP = {
|
|
9
|
+
table: renderTable
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
// const RENDERER_MAP = {
|
|
13
|
+
// table: renderTable,
|
|
14
|
+
// datalist: renderDataList,
|
|
15
|
+
// select: renderSelect
|
|
16
|
+
// };
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Unified Renderer
|
|
20
|
+
* Dispatches to the corresponding renderer strategy (table, navTabs, form)
|
|
21
|
+
* based on the provided type.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
// render({ type: "select", data, targetHtmlId: "dom-render-container" });
|
|
25
|
+
|
|
26
|
+
const render = ({
|
|
27
|
+
type = "table",
|
|
28
|
+
targetHtmlId,
|
|
29
|
+
data,
|
|
30
|
+
classToApply,
|
|
31
|
+
inTargetHtmlId,
|
|
32
|
+
inData,
|
|
33
|
+
columns,
|
|
34
|
+
inColumns,
|
|
35
|
+
fields,
|
|
36
|
+
inFields,
|
|
37
|
+
tabs,
|
|
38
|
+
inTabs,
|
|
39
|
+
options,
|
|
40
|
+
inOptions,
|
|
41
|
+
datalistId,
|
|
42
|
+
inDatalistId,
|
|
43
|
+
listId,
|
|
44
|
+
inListId,
|
|
45
|
+
id,
|
|
46
|
+
valueField,
|
|
47
|
+
inValueField,
|
|
48
|
+
labelField,
|
|
49
|
+
inLabelField,
|
|
50
|
+
colGroup,
|
|
51
|
+
inColGroup,
|
|
52
|
+
footerData,
|
|
53
|
+
inFooterData,
|
|
54
|
+
config,
|
|
55
|
+
inConfig,
|
|
56
|
+
variant,
|
|
57
|
+
skeletonType,
|
|
58
|
+
inSkeletonType,
|
|
59
|
+
showLog = false,
|
|
60
|
+
inShowLog,
|
|
61
|
+
...restProps
|
|
62
|
+
} = {}) => {
|
|
63
|
+
const rawType = type;
|
|
64
|
+
const resolvedType = typeof rawType === "string" ? rawType.toLowerCase() : "table";
|
|
65
|
+
const renderer = RENDERER_MAP[resolvedType];
|
|
66
|
+
|
|
67
|
+
if (!renderer) {
|
|
68
|
+
console.error(
|
|
69
|
+
`[Renderer] Unknown renderer type "${rawType}". Available types: ${Object.keys(RENDERER_MAP).join(", ")}`
|
|
70
|
+
);
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
const localTargetHtmlId = inTargetHtmlId ?? targetHtmlId;
|
|
75
|
+
const localData = inData ?? data;
|
|
76
|
+
const localColumns = inColumns ?? columns;
|
|
77
|
+
const localFields = inFields ?? fields;
|
|
78
|
+
const localTabs = inTabs ?? tabs;
|
|
79
|
+
const localOptions = inOptions ?? options ?? localData;
|
|
80
|
+
const localSkeletonType = inSkeletonType ?? skeletonType ?? variant ?? "default";
|
|
81
|
+
const localShowLog = inShowLog ?? showLog ?? false;
|
|
82
|
+
|
|
83
|
+
if (resolvedType === "form") {
|
|
84
|
+
return renderer({
|
|
85
|
+
targetHtmlId: localTargetHtmlId,
|
|
86
|
+
inFields: localFields,
|
|
87
|
+
inData: localData,
|
|
88
|
+
inColumns: localColumns,
|
|
89
|
+
inVariant: localSkeletonType,
|
|
90
|
+
inSkeletonType: localSkeletonType,
|
|
91
|
+
inShowLog: localShowLog,
|
|
92
|
+
onSave: restProps?.onSave,
|
|
93
|
+
afterSave: restProps?.afterSave,
|
|
94
|
+
onNew: restProps?.onNew
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (resolvedType === "navtabs" || resolvedType === "nav" || resolvedType === "tabs") {
|
|
99
|
+
return renderer({
|
|
100
|
+
targetHtmlId: localTargetHtmlId,
|
|
101
|
+
inTabs: localTabs,
|
|
102
|
+
inData: localData,
|
|
103
|
+
inSkeletonType: localSkeletonType,
|
|
104
|
+
inShowLog: localShowLog
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (resolvedType === "datalist" || resolvedType === "data-list") {
|
|
109
|
+
return renderer({
|
|
110
|
+
targetHtmlId: localTargetHtmlId,
|
|
111
|
+
inData: localData,
|
|
112
|
+
inSkeletonType: localSkeletonType,
|
|
113
|
+
inShowLog: localShowLog
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (resolvedType === "select") {
|
|
118
|
+
return renderer({
|
|
119
|
+
targetHtmlId: localTargetHtmlId,
|
|
120
|
+
inData: localData,
|
|
121
|
+
inSkeletonType: localSkeletonType,
|
|
122
|
+
inShowLog: localShowLog,
|
|
123
|
+
inClassToApply: classToApply
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
// Default to table renderer
|
|
128
|
+
return renderer({
|
|
129
|
+
targetHtmlId: localTargetHtmlId,
|
|
130
|
+
inColumns: localColumns,
|
|
131
|
+
inData: localData,
|
|
132
|
+
inColGroup: inColGroup ?? colGroup,
|
|
133
|
+
inFooterData: inFooterData ?? footerData ?? [],
|
|
134
|
+
inConfig: inConfig ?? config ?? {},
|
|
135
|
+
inSkeletonType: localSkeletonType,
|
|
136
|
+
inShowLog: localShowLog
|
|
137
|
+
});
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
registerGlobal(render);
|
|
141
|
+
|
|
142
|
+
export default render;
|
package/src/v10/meta.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 "@keshavsoft/json-to-tag";
|
|
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;
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import jsonToSpec from "json-to-spec";
|
|
2
|
+
import jsonToTag from "@keshavsoft/json-to-tag";
|
|
3
|
+
|
|
4
|
+
import skeletonJson from './skeleton.json' with { type: 'json' };
|
|
5
|
+
|
|
6
|
+
// --- Story of Table Render ---
|
|
7
|
+
const startFunc = ({
|
|
8
|
+
targetHtmlId,
|
|
9
|
+
inTargetHtmlId,
|
|
10
|
+
inColumns,
|
|
11
|
+
inData,
|
|
12
|
+
} = {}) => {
|
|
13
|
+
const localTargetHtmlId = inTargetHtmlId ?? targetHtmlId;
|
|
14
|
+
const localData = inData ?? [];
|
|
15
|
+
const localColumns = inColumns;
|
|
16
|
+
|
|
17
|
+
let specAsJsonToDom = jsonToSpec(skeletonJson.default, {
|
|
18
|
+
columns: localColumns, data: localData
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
// console.log("specAsJsonToDom : ", specAsJsonToDom);
|
|
22
|
+
|
|
23
|
+
if (!("tagName" in specAsJsonToDom)) {
|
|
24
|
+
specAsJsonToDom = specAsJsonToDom.children;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
const container = document.getElementById(localTargetHtmlId);
|
|
28
|
+
|
|
29
|
+
if (container) container.innerHTML = "";
|
|
30
|
+
|
|
31
|
+
const content = jsonToTag(specAsJsonToDom);
|
|
32
|
+
container.append(content);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
export default startFunc;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"default": {
|
|
3
|
+
"tagName": "table",
|
|
4
|
+
"attributes": {
|
|
5
|
+
"class": "table table-hover table-striped mb-0"
|
|
6
|
+
},
|
|
7
|
+
"children": [
|
|
8
|
+
{
|
|
9
|
+
"tagName": "thead",
|
|
10
|
+
"children": [
|
|
11
|
+
{
|
|
12
|
+
"tagName": "tr",
|
|
13
|
+
"jsonToSpec": {
|
|
14
|
+
"operation": "loopCollection",
|
|
15
|
+
"source": "columns",
|
|
16
|
+
"template": {
|
|
17
|
+
"tagName": "th",
|
|
18
|
+
"textContent": "${title}"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"children": []
|
|
22
|
+
}
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"tagName": "tbody",
|
|
27
|
+
"jsonToSpec": {
|
|
28
|
+
"operation": "loopCollection",
|
|
29
|
+
"source": "data",
|
|
30
|
+
"template": {
|
|
31
|
+
"tagName": "tr",
|
|
32
|
+
"jsonToSpec": {
|
|
33
|
+
"operation": "loopObject",
|
|
34
|
+
"source": "data",
|
|
35
|
+
"template": {
|
|
36
|
+
"tagName": "td",
|
|
37
|
+
"textContent": "${value}"
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
"children": []
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"children": []
|
|
44
|
+
}
|
|
45
|
+
]
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const deriveColumnsFromData = ({ inData = [] } = {}) => {
|
|
2
|
+
const localData = inData;
|
|
3
|
+
|
|
4
|
+
if (!Array.isArray(localData) || localData.length === 0) {
|
|
5
|
+
return [];
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
const firstRow = localData[0];
|
|
9
|
+
if (!firstRow || typeof firstRow !== "object") {
|
|
10
|
+
return [];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return Object.keys(firstRow).map(key => ({
|
|
14
|
+
key,
|
|
15
|
+
label: key
|
|
16
|
+
}));
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export { deriveColumnsFromData };
|
|
20
|
+
export default deriveColumnsFromData;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// import jsonToSpec from "../../../node_modules/json-to-spec/index.js";
|
|
2
|
+
import jsonToTag from "@keshavsoft/json-to-tag";
|
|
3
|
+
import jsonTraversal from "../../../node_modules/json-traversal/index.js";
|
|
4
|
+
|
|
5
|
+
import skeletonJson from "./skeleton.json" with { type: "json" };
|
|
6
|
+
|
|
7
|
+
const startFunc = ({ targetHtmlId, inData, inSkeletonType = "default" } = {}) => {
|
|
8
|
+
|
|
9
|
+
// const specAsJsonToDom = jsonToSpec({
|
|
10
|
+
// specJson: skeletonJson[inSkeletonType],
|
|
11
|
+
// dataJson: inData
|
|
12
|
+
// });
|
|
13
|
+
const skeletonNeeded = skeletonJson[inSkeletonType];
|
|
14
|
+
|
|
15
|
+
const specAsJsonToDom = jsonTraversal.transform(inData, skeletonNeeded);
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
const container = document.getElementById(targetHtmlId);
|
|
19
|
+
|
|
20
|
+
if (container) container.innerHTML = "";
|
|
21
|
+
|
|
22
|
+
const createdElement = jsonToTag(specAsJsonToDom);
|
|
23
|
+
|
|
24
|
+
if (Array.isArray(createdElement)) {
|
|
25
|
+
// container.appendChild(createdElement)
|
|
26
|
+
createdElement.forEach(element => container.append(element));
|
|
27
|
+
} else {
|
|
28
|
+
container.append(createdElement);
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export default startFunc;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"old": {
|
|
3
|
+
"tagName": "datalist",
|
|
4
|
+
"attributes": {
|
|
5
|
+
"id": "LedgerName"
|
|
6
|
+
},
|
|
7
|
+
"jsonToSpec": {
|
|
8
|
+
"operation": "loopArray",
|
|
9
|
+
"source": "LedgerName",
|
|
10
|
+
"template": {
|
|
11
|
+
"tagName": "option",
|
|
12
|
+
"attributes": {
|
|
13
|
+
"value": "${}"
|
|
14
|
+
},
|
|
15
|
+
"textContent": "${}"
|
|
16
|
+
}
|
|
17
|
+
},
|
|
18
|
+
"children": []
|
|
19
|
+
},
|
|
20
|
+
"default": {
|
|
21
|
+
"mapping": {
|
|
22
|
+
"tagName": "$datalist",
|
|
23
|
+
"attributes": {
|
|
24
|
+
"id": "$LedgerName"
|
|
25
|
+
},
|
|
26
|
+
"children": {
|
|
27
|
+
"list": "LedgerName",
|
|
28
|
+
"item": {
|
|
29
|
+
"tagName": "$option",
|
|
30
|
+
"attributes": {
|
|
31
|
+
"value": ""
|
|
32
|
+
},
|
|
33
|
+
"textContent": ""
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/v11/index.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import registerGlobal from "./registerGlobal.js";
|
|
2
|
+
|
|
3
|
+
import renderTable from "./table/index.js";
|
|
4
|
+
|
|
5
|
+
const RENDERER_MAP = {
|
|
6
|
+
table: renderTable
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
const render = ({
|
|
10
|
+
type = "table",
|
|
11
|
+
targetHtmlId,
|
|
12
|
+
data,
|
|
13
|
+
classToApply,
|
|
14
|
+
inTargetHtmlId,
|
|
15
|
+
inData,
|
|
16
|
+
columns,
|
|
17
|
+
inColumns,
|
|
18
|
+
colGroup,
|
|
19
|
+
inColGroup,
|
|
20
|
+
footerData,
|
|
21
|
+
inFooterData,
|
|
22
|
+
config,
|
|
23
|
+
inConfig,
|
|
24
|
+
variant,
|
|
25
|
+
skeletonType,
|
|
26
|
+
inSkeletonType,
|
|
27
|
+
showLog = false,
|
|
28
|
+
inShowLog
|
|
29
|
+
} = {}) => {
|
|
30
|
+
const rawType = type;
|
|
31
|
+
const resolvedType = typeof rawType === "string" ? rawType.toLowerCase() : "table";
|
|
32
|
+
const renderer = RENDERER_MAP[resolvedType];
|
|
33
|
+
|
|
34
|
+
if (!renderer) {
|
|
35
|
+
console.error(
|
|
36
|
+
`[Renderer] Unknown renderer type "${rawType}". Available types: ${Object.keys(RENDERER_MAP).join(", ")}`
|
|
37
|
+
);
|
|
38
|
+
return null;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const localTargetHtmlId = inTargetHtmlId ?? targetHtmlId;
|
|
42
|
+
const localData = inData ?? data;
|
|
43
|
+
const localColumns = inColumns ?? columns;
|
|
44
|
+
const localSkeletonType = inSkeletonType ?? skeletonType ?? variant ?? "default";
|
|
45
|
+
const localShowLog = inShowLog ?? showLog ?? false;
|
|
46
|
+
|
|
47
|
+
// Default to table renderer
|
|
48
|
+
return renderer({
|
|
49
|
+
targetHtmlId: localTargetHtmlId,
|
|
50
|
+
inColumns: localColumns,
|
|
51
|
+
inData: localData,
|
|
52
|
+
inColGroup: inColGroup ?? colGroup,
|
|
53
|
+
inFooterData: inFooterData ?? footerData ?? [],
|
|
54
|
+
inConfig: inConfig ?? config ?? {},
|
|
55
|
+
inSkeletonType: localSkeletonType,
|
|
56
|
+
inShowLog: localShowLog
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
registerGlobal(render);
|
|
61
|
+
|
|
62
|
+
export default render;
|
package/src/v11/meta.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
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;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1,34 @@
|
|
|
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 "@keshavsoft/json-to-tag";
|
|
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;
|
|
@@ -0,0 +1,23 @@
|
|
|
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
|
+
}
|