zova-module-a-table 5.0.0 → 5.1.0

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2016-present Zova
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,11 @@
1
+ import { BeanBase } from 'zova';
2
+ import { IDecoratorTableCellOptions, IJsxRenderContextTableCell, ITableCellRender, NextTableCellRender, TableCell } from 'zova-module-a-table';
3
+
4
+ export interface ITableCellOptions<%=argv.beanNameCapitalize%> extends IDecoratorTableCellOptions {}
5
+
6
+ @TableCell<ITableCellOptions<%=argv.beanNameCapitalize%>>()
7
+ export class TableCell<%=argv.beanNameCapitalize%> extends BeanBase implements ITableCellRender {
8
+ render(_options: ITableCellOptions<%=argv.beanNameCapitalize%>, _renderContext: IJsxRenderContextTableCell, next: NextTableCellRender) {
9
+ return next();
10
+ }
11
+ }
@@ -0,0 +1,60 @@
1
+ import type { IMetadataCustomGenerateOptions } from '@cabloy/cli';
2
+ import type { IGlobBeanFile } from '@cabloy/module-info';
3
+
4
+ import { combineResourceName } from '@cabloy/utils';
5
+ import { toUpperCaseFirstChar } from '@cabloy/word-utils';
6
+ import fse from 'fs-extra';
7
+ import path from 'node:path';
8
+
9
+ import { generateRestIndex } from './utils.ts';
10
+
11
+ export default async function (options: IMetadataCustomGenerateOptions): Promise<string> {
12
+ const { globFiles } = options;
13
+ for (const globFile of globFiles) {
14
+ if (globFile.isIgnore) continue;
15
+ // restComponent
16
+ await generateRestTableCell(options, globFile);
17
+ }
18
+ return '';
19
+ }
20
+
21
+ async function generateRestTableCell(options: IMetadataCustomGenerateOptions, globFile: IGlobBeanFile) {
22
+ const { moduleName, modulePath } = options;
23
+ const { beanName, beanNameCapitalize, sceneName, fileNameJS } = globFile;
24
+ // options
25
+ const typeOptionsName = `ITableCellOptions${beanNameCapitalize}`;
26
+ // import
27
+ const contentImports: string[] = [];
28
+ contentImports.push(`import type { ${typeOptionsName} } from '../../src/bean/${fileNameJS}';`);
29
+ // component
30
+ const componentNamePrefix = 'TT';
31
+ const componentName = beanName;
32
+ const componentNameFull = `${componentNamePrefix}${toUpperCaseFirstChar(combineResourceName(componentName, moduleName, true, true))}`;
33
+ const contentComponent = `export function ${componentNameFull}(
34
+ _props: ${typeOptionsName},
35
+ ) {
36
+ return '${moduleName}.${sceneName}.${beanName}';
37
+ }`;
38
+ // content
39
+ const content = `${contentImports.join('\n')}
40
+
41
+ ${contentComponent}
42
+ `;
43
+ // output
44
+ const fileDest = path.join(modulePath, `rest/tableCell/${beanName}.ts`);
45
+ await fse.outputFile(fileDest, content);
46
+ // tableCells
47
+ const fileComponents = path.join(modulePath, 'rest/tableCells.ts');
48
+ let contentComponents = '';
49
+ if (fse.existsSync(fileComponents)) {
50
+ contentComponents = (await fse.readFile(fileComponents)).toString();
51
+ }
52
+ const exportContent = `export * from './tableCell/${beanName}.js';`;
53
+ if (!contentComponents.includes(exportContent)) {
54
+ contentComponents = `${contentComponents}${exportContent}\n`;
55
+ await fse.outputFile(fileComponents, contentComponents);
56
+ }
57
+ // index
58
+ const exportIndexContent = "export * from './tableCells.js';";
59
+ await generateRestIndex(modulePath, exportIndexContent);
60
+ }
@@ -0,0 +1,15 @@
1
+ import fse from 'fs-extra';
2
+ import path from 'node:path';
3
+
4
+ export async function generateRestIndex(modulePath: string, append: string) {
5
+ // index
6
+ const fileIndex = path.join(modulePath, 'rest/index.ts');
7
+ let contentIndex = '';
8
+ if (fse.existsSync(fileIndex)) {
9
+ contentIndex = (await fse.readFile(fileIndex)).toString();
10
+ }
11
+ if (!contentIndex.includes(append)) {
12
+ contentIndex = `${contentIndex}${append}\n`;
13
+ await fse.outputFile(fileIndex, contentIndex);
14
+ }
15
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../../tsconfig.base",
3
+ "compilerOptions": {
4
+ "allowImportingTsExtensions": true,
5
+ "rewriteRelativeImportExtensions": true,
6
+ "verbatimModuleSyntax": true
7
+ }
8
+ }
package/dist/index.js ADDED
@@ -0,0 +1,324 @@
1
+ import { BeanControllerBase, BeanControllerPageBase, BeanInfo, BeanRenderBase, BeanScopeBase, UseScope, appResource, cast, createBeanDecorator, deepEqual, deepExtend, objectAssignReactive, prepareComponentOptions, useController } from "zova";
2
+ import { celEnvBase } from "@cabloy/utils";
3
+ import { FlexRender, createColumnHelper, getCoreRowModel, useVueTable } from "@tanstack/vue-table";
4
+ import { ZovaJsx, isJsxComponent } from "zova-jsx";
5
+ import { Controller, Render, Scope } from "zova-module-a-bean";
6
+ import { renderTableColumnTopPropsSystem } from "zova-module-a-openapi";
7
+ import { createVNode, defineComponent, markRaw } from "vue";
8
+ //#region src/lib/beanControllerTableBase.ts
9
+ var BeanControllerTableBase = class extends BeanControllerBase {
10
+ $useTable(initialOptions) {
11
+ return this.ctx.util.instanceScope(() => {
12
+ return markRaw(useVueTable(initialOptions));
13
+ });
14
+ }
15
+ };
16
+ //#endregion
17
+ //#region src/types/tableColumn.ts
18
+ var constColumnProps = "$$ColumnProps";
19
+ //#endregion
20
+ //#region src/component/table/controller.tsx
21
+ var _dec$2, _dec2$2, _dec3, _dec4, _class$2, _class2, _descriptor, _ControllerTable;
22
+ function _initializerDefineProperty(e, i, r, l) {
23
+ r && Object.defineProperty(e, i, {
24
+ enumerable: r.enumerable,
25
+ configurable: r.configurable,
26
+ writable: r.writable,
27
+ value: r.initializer ? r.initializer.call(l) : void 0
28
+ });
29
+ }
30
+ function _applyDecoratedDescriptor(i, e, r, n, l) {
31
+ var a = {};
32
+ return Object.keys(n).forEach(function(i) {
33
+ a[i] = n[i];
34
+ }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function(r, n) {
35
+ return n(i, e, r) || r;
36
+ }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a;
37
+ }
38
+ var ControllerTable = (_dec$2 = Controller(), _dec2$2 = BeanInfo({ module: "a-table" }), _dec3 = UseScope("a-openapi"), _dec4 = Reflect.metadata("design:type", typeof ScopeModuleAOpenapi === "undefined" ? Object : ScopeModuleAOpenapi), _dec$2(_class$2 = _dec2$2(_class$2 = (_class2 = (_ControllerTable = class ControllerTable extends BeanControllerTableBase {
39
+ constructor(...args) {
40
+ super(...args);
41
+ this.properties = void 0;
42
+ this.columns = void 0;
43
+ this.table = void 0;
44
+ this.tableProvider = void 0;
45
+ this.tableMeta = void 0;
46
+ this.zovaJsx = void 0;
47
+ this.columnCelEnv = void 0;
48
+ _initializerDefineProperty(this, "$$scopeModuleAOpenapi", _descriptor, this);
49
+ }
50
+ async __init__() {
51
+ this.bean._setBean("$$table", this);
52
+ this.tableProvider = this.$useComputed(() => {
53
+ return deepExtend({}, this.$$scopeModuleAOpenapi.config.resourceMeta.provider, this.$$scopeModuleAOpenapi.config.resourceMeta.table?.provider, this.$props.tableProvider);
54
+ });
55
+ this.columnCelEnv = this._getColumnCelEnv();
56
+ this.zovaJsx = this.app.bean._newBeanSimple(ZovaJsx, false, this.tableProvider.components, this.tableProvider.actions, this.columnCelEnv);
57
+ this._createProperties();
58
+ this.tableMeta = await this._createTableMeta();
59
+ this.columns = await this._createColumns();
60
+ this.$watch(() => this.$props.schema, async (newValue, oldValue) => {
61
+ if (deepEqual(newValue, oldValue)) return;
62
+ this.tableMeta = await this._createTableMeta();
63
+ this.columns = await this._createColumns();
64
+ });
65
+ this._createTable();
66
+ }
67
+ get schema() {
68
+ return this.$props.schema;
69
+ }
70
+ get data() {
71
+ return this.$props.data;
72
+ }
73
+ _createTable() {
74
+ const self = this;
75
+ const tableOptions = {
76
+ getRowId: (row) => cast(row).id,
77
+ getCoreRowModel: getCoreRowModel(),
78
+ renderFallbackValue: this.scope.config.renderFallbackValue,
79
+ manualPagination: true,
80
+ get data() {
81
+ return self.data || [];
82
+ },
83
+ get columns() {
84
+ return self.columns;
85
+ }
86
+ };
87
+ this.table = this.$useTable(tableOptions);
88
+ }
89
+ async _createColumns() {
90
+ if (!this.properties) return [];
91
+ if (!this.$props.getColumns) return await this._createColumnsMiddle(this.tableMeta.properties);
92
+ return await this.$props.getColumns(async (properties) => {
93
+ return await this._createColumnsMiddle(properties ?? this.tableMeta.properties);
94
+ }, this);
95
+ }
96
+ async _createColumnsMiddle(properties) {
97
+ const tableMeta = this.tableMeta;
98
+ const columnHelper = createColumnHelper();
99
+ const columns = [];
100
+ for (const property of properties) {
101
+ const key = property.key;
102
+ columns.push(columnHelper.accessor(key, {
103
+ id: key,
104
+ header: (_props) => {
105
+ return property?.title || key;
106
+ },
107
+ cell: (props) => tableMeta.renders[key](props)
108
+ }));
109
+ }
110
+ return columns;
111
+ }
112
+ _createProperties() {
113
+ this.properties = this.$useComputed(() => {
114
+ return this.$sdk.loadSchemaProperties(this.schema, "table");
115
+ });
116
+ }
117
+ async _createTableMeta() {
118
+ const properties = [];
119
+ const renders = {};
120
+ if (!this.properties) return {
121
+ properties,
122
+ renders
123
+ };
124
+ const promises = [];
125
+ for (const property of this.properties) {
126
+ const key = property.key;
127
+ const columnScope = this.getColumnScope(key);
128
+ const jsxRenderContext = this.getColumnJsxRenderContext(columnScope);
129
+ const columnProps = this.getColumnComponentPropsTop(key, columnScope, jsxRenderContext);
130
+ if (columnProps.visible === false) continue;
131
+ properties.push(property);
132
+ promises.push(this._createColumnRender(columnProps.render, property, columnProps, columnScope));
133
+ }
134
+ const res = await Promise.all(promises);
135
+ properties.forEach((item, index) => renders[item.key] = res[index]);
136
+ return {
137
+ properties,
138
+ renders
139
+ };
140
+ }
141
+ getColumnJsxRenderContext(celScope) {
142
+ return {
143
+ app: this.app,
144
+ ctx: this.ctx,
145
+ $scene: "tableColumn",
146
+ $host: this,
147
+ $celScope: celScope,
148
+ $jsx: this.zovaJsx,
149
+ $$table: this
150
+ };
151
+ }
152
+ getCellJsxRenderContext(celScope, cellContext) {
153
+ return {
154
+ app: this.app,
155
+ ctx: this.ctx,
156
+ $scene: "tableCell",
157
+ $host: this,
158
+ $celScope: celScope,
159
+ $jsx: this.zovaJsx,
160
+ $$table: this,
161
+ cellContext
162
+ };
163
+ }
164
+ async createColumnRender(key, render) {
165
+ const columnScope = this.getColumnScope(key);
166
+ return await this._createColumnRender(render, void 0, void 0, columnScope);
167
+ }
168
+ async _createColumnRender(render, property, columnProps, columnScope) {
169
+ const renderProvider = this.getRenderProvider(render);
170
+ let beanInstance;
171
+ let onionOptions;
172
+ if (typeof renderProvider === "string" && renderProvider.includes(".tableCell.")) {
173
+ beanInstance = await this.sys.bean._getBean(renderProvider, true);
174
+ onionOptions = appResource.getBean(renderProvider)?.options;
175
+ }
176
+ return (cellContext) => {
177
+ if (!cellContext) return;
178
+ return this._cellRender(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions);
179
+ };
180
+ }
181
+ _cellRender(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions) {
182
+ return this.zovaJsx.setTransientObject({ getValue: (name) => {
183
+ return cellContext.row.getValue(name);
184
+ } }, () => {
185
+ return this._cellRenderInner(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions);
186
+ });
187
+ }
188
+ _cellRenderInner(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions) {
189
+ const value = cellContext.getValue();
190
+ const cellScope = objectAssignReactive({}, columnScope, { value });
191
+ let displayValue = property?.rest?.displayValue !== void 0 ? this.zovaJsx.evaluateExpression(property?.rest?.displayValue, cellScope) : value;
192
+ if (displayValue === void 0 || displayValue === null || displayValue === "") displayValue = this.table.options.renderFallbackValue;
193
+ cellScope.displayValue = displayValue;
194
+ if (renderProvider === "text") return displayValue;
195
+ const jsxRenderContext = this.getCellJsxRenderContext(cellScope, cellContext);
196
+ if (beanInstance) {
197
+ let cellProps = isJsxComponent(render) ? this.zovaJsx.renderJsxProps(cast(render).props, { ...columnProps }, cellScope, jsxRenderContext) : columnProps;
198
+ if (onionOptions) cellProps = deepExtend({}, onionOptions, cellProps);
199
+ return beanInstance.render(cellProps ?? {}, jsxRenderContext, () => {
200
+ const children = isJsxComponent(render) && cast(render).children;
201
+ if (children && children.length > 0) return this.zovaJsx.renderJsxChildrenDirect(children, cellScope, jsxRenderContext);
202
+ else return displayValue;
203
+ });
204
+ }
205
+ return this.zovaJsx.render(render, {}, cellScope, jsxRenderContext);
206
+ }
207
+ getColumnProperty(name) {
208
+ if (!this.properties) return;
209
+ return this.properties.find((item) => item.key === name);
210
+ }
211
+ _getColumnCelEnv() {
212
+ const celEnv = celEnvBase.clone();
213
+ celEnv.registerFunction("getProperty(string):dyn", (name) => {
214
+ return this.getColumnProperty(name);
215
+ });
216
+ celEnv.registerFunction("getValue(string):dyn", (name) => {
217
+ return this.zovaJsx.transientObject.getValue(name);
218
+ });
219
+ return celEnv;
220
+ }
221
+ getColumnScope(name, scopeExtra) {
222
+ return objectAssignReactive({}, this.$props.tableScope, {
223
+ name,
224
+ property: this.getColumnProperty(name),
225
+ ...scopeExtra
226
+ });
227
+ }
228
+ getColumnComponentPropsTop(name, celScope, renderContext) {
229
+ const props = {
230
+ ["$$ColumnProps"]: true,
231
+ key: name,
232
+ name
233
+ };
234
+ const property = this.getColumnProperty(name);
235
+ if (!property) return props;
236
+ const rest = property.rest;
237
+ if (!rest) return props;
238
+ const keys = Object.keys(rest).filter((item) => !renderTableColumnTopPropsSystem.includes(item));
239
+ if (keys.length === 0) return props;
240
+ for (const key of keys) {
241
+ const value = rest[key];
242
+ let keyValue;
243
+ if (key === "render") if (typeof value === "string") keyValue = this.zovaJsx.evaluateExpression(value, celScope);
244
+ else keyValue = value;
245
+ else keyValue = this.zovaJsx.renderJsxOrCel(value, void 0, celScope, renderContext);
246
+ props[key] = keyValue;
247
+ }
248
+ return props;
249
+ }
250
+ getRenderFlattern(render) {
251
+ return isJsxComponent(render) ? cast(render).type : render;
252
+ }
253
+ getRenderProvider(render) {
254
+ let renderProvider = this.getRenderFlattern(render);
255
+ if (typeof renderProvider === "string") renderProvider = this.tableProvider.components?.[renderProvider] ?? renderProvider;
256
+ return renderProvider ?? "text";
257
+ }
258
+ }, _ControllerTable.$propsDefault = {}, _ControllerTable), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "$$scopeModuleAOpenapi", [_dec3, _dec4], {
259
+ configurable: true,
260
+ enumerable: true,
261
+ writable: true,
262
+ initializer: null
263
+ }), _class2)) || _class$2) || _class$2);
264
+ //#endregion
265
+ //#region src/component/table/render.tsx
266
+ var _dec$1, _dec2$1, _class$1;
267
+ var RenderTable = (_dec$1 = Render(), _dec2$1 = BeanInfo({ module: "a-table" }), _dec$1(_class$1 = _dec2$1(_class$1 = class RenderTable extends BeanRenderBase {
268
+ _renderTableDefault() {
269
+ const table = this.table;
270
+ return createVNode("table", { "class": "table" }, [createVNode("thead", null, [createVNode("tr", null, [table.getFlatHeaders().map((header) => {
271
+ return createVNode("th", { "key": header.id }, [createVNode(FlexRender, {
272
+ "render": header.column.columnDef.header,
273
+ "props": header.getContext()
274
+ }, null)]);
275
+ })])]), createVNode("tbody", null, [table.getRowModel().rows.map((row) => {
276
+ return createVNode("tr", { "key": row.id }, [row.getVisibleCells().map((cell) => {
277
+ return createVNode("td", { "key": cell.id }, [createVNode(FlexRender, {
278
+ "render": cell.column.columnDef.cell,
279
+ "props": cell.getContext()
280
+ }, null)]);
281
+ })]);
282
+ })])]);
283
+ }
284
+ render() {
285
+ return this.$slotDefault ? this.$slotDefault(this) : this._renderTableDefault();
286
+ }
287
+ }) || _class$1) || _class$1);
288
+ //#endregion
289
+ //#region src/.metadata/component/table.ts
290
+ var ZTable = defineComponent((_props) => {
291
+ useController(ControllerTable, RenderTable, void 0);
292
+ return () => {};
293
+ }, prepareComponentOptions());
294
+ //#endregion
295
+ //#region src/config/config.ts
296
+ var config = (_sys) => {
297
+ return { renderFallbackValue: "--" };
298
+ };
299
+ //#endregion
300
+ //#region src/.metadata/index.ts
301
+ /** config: end */
302
+ /** scope: begin */
303
+ var _dec, _dec2, _class;
304
+ var components = { "table": ZTable };
305
+ var ScopeModuleATable = (_dec = Scope(), _dec2 = BeanInfo({ module: "a-table" }), _dec(_class = _dec2(_class = class ScopeModuleATable extends BeanScopeBase {}) || _class) || _class);
306
+ /** scope: end */
307
+ //#endregion
308
+ //#region src/lib/beanControllerPageTableBase.ts
309
+ var BeanControllerPageTableBase = class extends BeanControllerPageBase {
310
+ $useTable(initialOptions) {
311
+ return this.ctx.util.instanceScope(() => {
312
+ return markRaw(useVueTable(initialOptions));
313
+ });
314
+ }
315
+ };
316
+ //#endregion
317
+ //#region src/lib/tableCell.ts
318
+ function TableCell(options) {
319
+ return createBeanDecorator("tableCell", "sys", true, options);
320
+ }
321
+ //#endregion
322
+ export { BeanControllerPageTableBase, BeanControllerTableBase, ControllerTable, RenderTable, ScopeModuleATable, TableCell, ZTable, components, config, constColumnProps };
323
+
324
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["celEnvBase","createColumnHelper","getCoreRowModel","appResource","cast","deepEqual","deepExtend","objectAssignReactive","UseScope","isJsxComponent","ZovaJsx","Controller","renderTableColumnTopPropsSystem","BeanControllerTableBase","constColumnProps","ControllerTable","_dec","_dec2","__z_BeanInfo","module","_dec3","_dec4","Reflect","metadata","ScopeModuleAOpenapi","Object","_class","_class2","_ControllerTable","constructor","args","properties","columns","table","tableProvider","tableMeta","zovaJsx","columnCelEnv","_initializerDefineProperty","_descriptor","__init__","bean","_setBean","$useComputed","$$scopeModuleAOpenapi","config","resourceMeta","provider","$props","_getColumnCelEnv","app","_newBeanSimple","components","actions","_createProperties","_createTableMeta","_createColumns","$watch","schema","newValue","oldValue","_createTable","data","self","tableOptions","getRowId","row","id","renderFallbackValue","scope","manualPagination","$useTable","getColumns","_createColumnsMiddle","columnHelper","property","key","push","accessor","header","_props","title","cell","props","renders","$sdk","loadSchemaProperties","promises","columnScope","getColumnScope","jsxRenderContext","getColumnJsxRenderContext","columnProps","getColumnComponentPropsTop","visible","_createColumnRender","render","res","Promise","all","forEach","item","index","celScope","ctx","$scene","$host","$celScope","$jsx","$$table","getCellJsxRenderContext","cellContext","createColumnRender","undefined","renderProvider","getRenderProvider","beanInstance","onionOptions","includes","sys","_getBean","beanOptions","getBean","options","_cellRender","setTransientObject","getValue","name","_cellRenderInner","value","cellScope","displayValue","rest","evaluateExpression","cellProps","renderJsxProps","children","length","renderJsxChildrenDirect","getColumnProperty","find","celEnv","clone","registerFunction","transientObject","scopeExtra","tableScope","renderContext","keys","filter","keyValue","renderJsxOrCel","getRenderFlattern","type","$propsDefault","_applyDecoratedDescriptor","prototype","configurable","enumerable","writable","initializer","FlexRender","BeanRenderBase","Render","RenderTable","_dec","_dec2","__z_BeanInfo","module","_class","_renderTableDefault","table","_createVNode","getFlatHeaders","map","header","id","column","columnDef","getContext","getRowModel","rows","row","getVisibleCells","cell","render","$slotDefault"],"sources":["../src/lib/beanControllerTableBase.ts","../src/types/tableColumn.ts","../src/component/table/controller.tsx","../src/component/table/render.tsx","../src/.metadata/component/table.ts","../src/config/config.ts","../src/.metadata/index.ts","../src/lib/beanControllerPageTableBase.ts","../src/lib/tableCell.ts"],"sourcesContent":["import type { RowData, Table } from '@tanstack/table-core';\nimport type { TableOptionsWithReactiveData } from '@tanstack/vue-table';\n\nimport { useVueTable } from '@tanstack/vue-table';\nimport { markRaw } from 'vue';\nimport { BeanControllerBase } from 'zova';\n\nexport class BeanControllerTableBase extends BeanControllerBase {\n public $useTable<TData extends RowData>(initialOptions: TableOptionsWithReactiveData<TData>): Table<TData> {\n return this.ctx.util.instanceScope(() => {\n return markRaw(useVueTable(initialOptions));\n });\n }\n}\n","import type { CellContext, RowData } from '@tanstack/table-core';\nimport type { SchemaObject } from 'openapi3-ts/oas31';\nimport type { IJsxRenderContextBase, TypeTableCellRenderComponent } from 'zova-module-a-openapi';\n\nimport type { ControllerTable } from '../component/table/controller.jsx';\n\nexport const constColumnProps = '$$ColumnProps';\n\nexport type TypeTableCellRender<TData extends RowData = RowData, TValue = any> = (props?: CellContext<TData, TValue>) => any;\n\nexport interface IJsxRenderContextTableColumn<TData extends {} = any> extends IJsxRenderContextBase {\n $celScope: ITableColumnScope;\n $$table: ControllerTable<TData>;\n}\n\nexport interface ITableCellRenderColumnProps {\n key: string;\n name: string;\n visible?: boolean;\n render: TypeTableCellRenderComponent;\n}\n\nexport interface ITableScope {}\n\nexport interface ITableColumnScope extends ITableScope {\n name: string;\n property?: SchemaObject;\n}\n\nexport interface ITableCellScope extends ITableColumnScope {\n value: any;\n displayValue?: any;\n}\n","import { celEnvBase } from '@cabloy/utils';\nimport { CellContext, createColumnHelper, getCoreRowModel, TableOptionsWithReactiveData } from '@tanstack/vue-table';\nimport { SchemaObject } from 'openapi3-ts/oas31';\nimport { VNode } from 'vue';\nimport { appResource, cast, deepEqual, deepExtend, objectAssignReactive, UseScope } from 'zova';\nimport { isJsxComponent, ZovaJsx } from 'zova-jsx';\nimport { Controller } from 'zova-module-a-bean';\nimport {\n renderTableColumnTopPropsSystem,\n ScopeModuleAOpenapi,\n TypeTableCellRenderComponent,\n TypeTableCellRenderComponentProvider,\n} from 'zova-module-a-openapi';\n\nimport { BeanControllerTableBase } from '../../lib/beanControllerTableBase.js';\nimport { ITableProvider } from '../../types/providers.js';\nimport { ITableMeta, TypeColumn, TypeTable, TypeTableGetColumnsNext } from '../../types/table.js';\nimport { IDecoratorTableCellOptions, IJsxRenderContextTableCell, ITableCellRender } from '../../types/tableCell.js';\nimport {\n constColumnProps,\n IJsxRenderContextTableColumn,\n ITableCellRenderColumnProps,\n ITableCellScope,\n ITableColumnScope,\n ITableScope,\n TypeTableCellRender,\n} from '../../types/tableColumn.js';\n\nexport interface ControllerTableProps<TData extends {} = {}> {\n data?: TData[];\n schema?: SchemaObject;\n tableProvider?: ITableProvider;\n tableScope?: ITableScope;\n getColumns?: (next: TypeTableGetColumnsNext<TData>, table: ControllerTable<TData>) => Promise<TypeColumn<TData>[]>;\n slotDefault?: (table: ControllerTable<TData>) => VNode;\n}\n\n@Controller()\nexport class ControllerTable<TData extends {} = {}> extends BeanControllerTableBase {\n static $propsDefault = {};\n\n properties: SchemaObject[] | undefined;\n columns: TypeColumn<TData>[];\n table: TypeTable<TData>;\n tableProvider: ITableProvider;\n tableMeta: ITableMeta<TData>;\n zovaJsx: ZovaJsx;\n columnCelEnv: typeof celEnvBase;\n\n @UseScope()\n $$scopeModuleAOpenapi: ScopeModuleAOpenapi;\n\n protected async __init__() {\n this.bean._setBean('$$table', this);\n this.tableProvider = this.$useComputed(() => {\n return deepExtend(\n {},\n this.$$scopeModuleAOpenapi.config.resourceMeta.provider,\n this.$$scopeModuleAOpenapi.config.resourceMeta.table?.provider,\n this.$props.tableProvider,\n );\n });\n // jsx\n this.columnCelEnv = this._getColumnCelEnv();\n this.zovaJsx = this.app.bean._newBeanSimple(ZovaJsx, false, this.tableProvider.components, this.tableProvider.actions, this.columnCelEnv);\n // properties\n this._createProperties();\n // tableMeta\n this.tableMeta = await this._createTableMeta();\n // columns\n this.columns = await this._createColumns();\n // watch\n this.$watch(\n () => this.$props.schema,\n async (newValue, oldValue) => {\n if (deepEqual(newValue, oldValue)) return;\n this.tableMeta = await this._createTableMeta();\n this.columns = await this._createColumns();\n },\n );\n // table\n this._createTable();\n }\n\n get schema() {\n return this.$props.schema;\n }\n\n get data() {\n return this.$props.data;\n }\n\n private _createTable() {\n const self = this;\n const tableOptions: TableOptionsWithReactiveData<TData> = {\n getRowId: (row: TData) => cast(row).id,\n getCoreRowModel: getCoreRowModel(),\n renderFallbackValue: this.scope.config.renderFallbackValue,\n manualPagination: true,\n get data() {\n return self.data || [];\n },\n get columns() {\n return self.columns;\n },\n };\n this.table = this.$useTable(tableOptions);\n }\n\n private async _createColumns() {\n if (!this.properties) return [];\n if (!this.$props.getColumns) return await this._createColumnsMiddle(this.tableMeta.properties);\n return await this.$props.getColumns(async properties => {\n return await this._createColumnsMiddle(properties ?? this.tableMeta.properties);\n }, this);\n }\n\n private async _createColumnsMiddle(properties: SchemaObject[]) {\n const tableMeta = this.tableMeta;\n const columnHelper = createColumnHelper<TData>();\n const columns: TypeColumn<TData>[] = [];\n for (const property of properties) {\n const key = property.key!;\n columns.push(\n columnHelper.accessor(key as any, {\n id: key,\n header: _props => {\n return property?.title || key;\n },\n cell: props => tableMeta.renders[key](props),\n }),\n );\n }\n return columns;\n }\n\n private _createProperties() {\n this.properties = this.$useComputed(() => {\n return this.$sdk.loadSchemaProperties(this.schema, 'table');\n });\n }\n\n private async _createTableMeta() {\n const properties: SchemaObject[] = [];\n const renders: Record<string, TypeTableCellRender<TData>> = {};\n if (!this.properties) return { properties, renders };\n const promises: Promise<any>[] = [];\n for (const property of this.properties) {\n const key = property.key!;\n // columnScope\n const columnScope = this.getColumnScope(key);\n // renderContext\n const jsxRenderContext = this.getColumnJsxRenderContext(columnScope);\n // columnProps\n const columnProps = this.getColumnComponentPropsTop(key, columnScope, jsxRenderContext);\n // visible\n if (columnProps.visible === false) continue;\n // property\n properties.push(property);\n // render\n promises.push(this._createColumnRender(columnProps.render, property, columnProps, columnScope));\n }\n const res = await Promise.all(promises);\n properties.forEach((item, index) => (renders[item.key!] = res[index]));\n return { properties, renders };\n }\n\n public getColumnJsxRenderContext(celScope: ITableColumnScope): IJsxRenderContextTableColumn {\n return {\n app: this.app,\n ctx: this.ctx,\n $scene: 'tableColumn',\n $host: this,\n $celScope: celScope,\n $jsx: this.zovaJsx,\n $$table: this,\n };\n }\n\n public getCellJsxRenderContext(celScope: ITableCellScope, cellContext: CellContext<TData, any>): IJsxRenderContextTableCell {\n return {\n app: this.app,\n ctx: this.ctx,\n $scene: 'tableCell',\n $host: this,\n $celScope: celScope,\n $jsx: this.zovaJsx,\n $$table: this,\n cellContext,\n };\n }\n\n public async createColumnRender(key: string, render: TypeTableCellRenderComponent) {\n // columnScope\n const columnScope = this.getColumnScope(key);\n return await this._createColumnRender(render, undefined, undefined, columnScope);\n }\n\n private async _createColumnRender(\n render: TypeTableCellRenderComponent,\n property: SchemaObject | undefined,\n columnProps: ITableCellRenderColumnProps | undefined,\n columnScope: ITableColumnScope,\n ): Promise<TypeTableCellRender<TData, any>> {\n // renderProvider\n const renderProvider = this.getRenderProvider(render);\n // beanInstance\n let beanInstance: ITableCellRender | undefined;\n let onionOptions: IDecoratorTableCellOptions | undefined;\n if (typeof renderProvider === 'string' && renderProvider.includes('.tableCell.')) {\n beanInstance = await this.sys.bean._getBean(renderProvider as any, true);\n const beanOptions = appResource.getBean(renderProvider as any);\n onionOptions = beanOptions?.options as IDecoratorTableCellOptions | undefined;\n }\n return cellContext => {\n if (!cellContext) return;\n return this._cellRender(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions);\n };\n }\n\n private _cellRender(\n render: TypeTableCellRenderComponent,\n property: SchemaObject | undefined,\n columnProps: ITableCellRenderColumnProps | undefined,\n columnScope: ITableColumnScope,\n cellContext: CellContext<TData, any>,\n renderProvider: TypeTableCellRenderComponentProvider,\n beanInstance: ITableCellRender | undefined,\n onionOptions: IDecoratorTableCellOptions | undefined,\n ) {\n return this.zovaJsx.setTransientObject(\n {\n getValue: (name: string) => {\n return cellContext.row.getValue(name);\n },\n },\n () => {\n return this._cellRenderInner(render, property, columnProps, columnScope, cellContext, renderProvider, beanInstance, onionOptions);\n },\n );\n }\n\n private _cellRenderInner(\n render: TypeTableCellRenderComponent,\n property: SchemaObject | undefined,\n columnProps: ITableCellRenderColumnProps | undefined,\n columnScope: ITableColumnScope,\n cellContext: CellContext<TData, any>,\n renderProvider: TypeTableCellRenderComponentProvider,\n beanInstance: ITableCellRender | undefined,\n onionOptions: IDecoratorTableCellOptions | undefined,\n ) {\n // value\n const value = cellContext.getValue();\n // cellScope\n const cellScope: ITableCellScope = objectAssignReactive({}, columnScope, { value });\n // displayValue\n let displayValue = property?.rest?.displayValue !== undefined ? this.zovaJsx.evaluateExpression(property?.rest?.displayValue, cellScope) : value;\n if (displayValue === undefined || displayValue === null || displayValue === '') {\n displayValue = this.table.options.renderFallbackValue;\n }\n cellScope.displayValue = displayValue;\n // render: text\n if (renderProvider === 'text') {\n return displayValue;\n }\n // renderContext\n const jsxRenderContext = this.getCellJsxRenderContext(cellScope, cellContext);\n // beanInstance\n if (beanInstance) {\n // jsx: props\n let cellProps = isJsxComponent(render)\n ? this.zovaJsx.renderJsxProps(cast(render).props, { ...columnProps }, cellScope, jsxRenderContext)\n : columnProps;\n if (onionOptions) {\n cellProps = deepExtend({}, onionOptions, cellProps);\n }\n return beanInstance.render(cellProps ?? {}, jsxRenderContext, () => {\n const children = isJsxComponent(render) && cast(render).children;\n if (children && children.length > 0) {\n return this.zovaJsx.renderJsxChildrenDirect(children, cellScope, jsxRenderContext);\n } else {\n return displayValue;\n }\n });\n }\n // general component\n return this.zovaJsx.render(render, {}, cellScope, jsxRenderContext);\n }\n\n public getColumnProperty(name: string): SchemaObject | undefined {\n if (!this.properties) return;\n return this.properties.find(item => item.key === name);\n }\n\n private _getColumnCelEnv(): typeof celEnvBase {\n const celEnv = celEnvBase.clone();\n celEnv.registerFunction('getProperty(string):dyn', name => {\n return this.getColumnProperty(name);\n });\n celEnv.registerFunction('getValue(string):dyn', name => {\n return this.zovaJsx.transientObject.getValue(name);\n });\n return celEnv;\n }\n\n public getColumnScope(name: string, scopeExtra?: {}): ITableColumnScope {\n return objectAssignReactive({}, this.$props.tableScope, {\n name,\n property: this.getColumnProperty(name),\n ...scopeExtra,\n });\n }\n\n public getColumnComponentPropsTop(name: string, celScope: {}, renderContext: {}): ITableCellRenderColumnProps {\n const props: any = { [constColumnProps]: true, key: name, name };\n const property = this.getColumnProperty(name);\n if (!property) return props;\n const rest = property.rest;\n if (!rest) return props;\n const keys = Object.keys(rest).filter(item => !renderTableColumnTopPropsSystem.includes(item));\n if (keys.length === 0) return props;\n for (const key of keys) {\n const value = rest[key];\n let keyValue;\n if (key === 'render') {\n if (typeof value === 'string') {\n keyValue = this.zovaJsx.evaluateExpression(value, celScope);\n } else {\n keyValue = value;\n }\n } else {\n keyValue = this.zovaJsx.renderJsxOrCel(value, undefined, celScope, renderContext);\n }\n props[key] = keyValue;\n }\n return props;\n }\n\n public getRenderFlattern(render: TypeTableCellRenderComponent): TypeTableCellRenderComponent {\n return isJsxComponent(render) ? cast(render).type : render;\n }\n\n public getRenderProvider(render: TypeTableCellRenderComponent): TypeTableCellRenderComponentProvider {\n let renderProvider = this.getRenderFlattern(render);\n if (typeof renderProvider === 'string') {\n renderProvider = this.tableProvider.components?.[renderProvider] ?? renderProvider;\n }\n return (renderProvider ?? 'text') as TypeTableCellRenderComponentProvider;\n }\n}\n","import { FlexRender } from '@tanstack/vue-table';\nimport { BeanRenderBase } from 'zova';\nimport { Render } from 'zova-module-a-bean';\n\n@Render()\nexport class RenderTable extends BeanRenderBase {\n private _renderTableDefault() {\n const table = this.table;\n return (\n <table class=\"table\">\n <thead>\n <tr>\n {table.getFlatHeaders().map(header => {\n return (\n <th key={header.id}>\n <FlexRender render={header.column.columnDef.header} props={header.getContext()}></FlexRender>\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {table.getRowModel().rows.map(row => {\n return (\n <tr key={row.id}>\n {row.getVisibleCells().map(cell => {\n return (\n <td key={cell.id}>\n <FlexRender render={cell.column.columnDef.cell} props={cell.getContext()}></FlexRender>\n </td>\n );\n })}\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n }\n\n public render() {\n return this.$slotDefault ? this.$slotDefault(this) : this._renderTableDefault();\n }\n}\n","import type { TypeControllerInnerProps } from 'zova';\n\nimport { defineComponent } from 'vue';\nimport { prepareComponentOptions, useController } from 'zova';\n\nimport type { ControllerTableProps } from '../../component/table/controller.jsx';\n\nimport { ControllerTable } from '../../component/table/controller.jsx';\nimport { RenderTable } from '../../component/table/render.jsx';\nexport type TypeControllerTablePublicProps<TData extends {} = {}> = {\n controllerRef?: (ref: ControllerTable<TData>) => void;\n} & ControllerTableProps<TData>;\n\ntype ControllerInnerProps<TData extends {} = {}> = TypeControllerInnerProps<ControllerTableProps<TData>, keyof typeof ControllerTable.$propsDefault>;\ndeclare module 'zova-module-a-table' {\n export interface ControllerTable<TData extends {} = {}> {\n $props: ControllerInnerProps<TData>;\n }\n}\ndeclare module 'zova-module-a-table' {\n export interface RenderTable<TData extends {} = {}> extends ControllerTable<TData> {}\n}\nexport const ZTable = defineComponent(<TData extends {} = {}>(_props: TypeControllerTablePublicProps<TData>) => {\n useController(ControllerTable, RenderTable, undefined);\n return () => {};\n}, prepareComponentOptions());\n","import type { ZovaSys } from 'zova';\n\nexport const config = (_sys: ZovaSys) => {\n return {\n renderFallbackValue: '--',\n };\n};\n","// eslint-disable\n/** controller: begin */\nexport * from '../component/table/controller.jsx';\n\nimport 'zova';\ndeclare module 'zova' {\n \n \n}\ndeclare module 'zova-module-a-table' {\n \n export interface ControllerTable {\n /** @internal */\n get scope(): ScopeModuleATable;\n } \n}\n/** controller: end */\n/** controller: begin */\nimport { ControllerTable } from '../component/table/controller.jsx';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordLocal {\n 'a-table.controller.table': ControllerTable;\n }\n}\n/** controller: end */\n\n/** components: begin */\nexport * from './component/table.js';\nimport { ZTable } from './component/table.js';\nexport const components = {\n 'table': ZTable,\n};\nimport 'zova';\ndeclare module 'zova' {\nexport interface IComponentRecord {\n 'a-table:table': ControllerTable;\n}\nexport interface IZovaComponentRecord {\n 'a-table:table': typeof ZTable;\n}\n}\n/** components: end */\n/** render: begin */\nexport * from '../component/table/render.jsx';\n\nimport 'zova';\ndeclare module 'zova' {\n \n \n}\ndeclare module 'zova-module-a-table' {\n \n export interface RenderTable {\n /** @internal */\n get scope(): ScopeModuleATable;\n } \n}\n/** render: end */\n/** render: begin */\nimport { RenderTable } from '../component/table/render.jsx';\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanRecordLocal {\n 'a-table.render.table': RenderTable;\n }\n}\n/** render: end */\n/** config: begin */\nexport * from '../config/config.js';\nimport { config } from '../config/config.js';\n/** config: end */\n/** scope: begin */\nimport { BeanScopeBase, type BeanScopeUtil, TypeModuleConfig } from 'zova';\nimport { Scope } from 'zova-module-a-bean';\n\n@Scope()\nexport class ScopeModuleATable extends BeanScopeBase {}\n\nexport interface ScopeModuleATable {\n util: BeanScopeUtil;\nconfig: TypeModuleConfig<typeof config>;\n}\n\nimport 'zova';\ndeclare module 'zova' {\n export interface IBeanScopeRecord {\n 'a-table': ScopeModuleATable;\n }\n \n export interface IBeanScopeConfig {\n 'a-table': ReturnType<typeof config>;\n }\n\n \n\n \n}\n \n/** scope: end */\n","import type { RowData, Table } from '@tanstack/table-core';\nimport type { TableOptionsWithReactiveData } from '@tanstack/vue-table';\n\nimport { useVueTable } from '@tanstack/vue-table';\nimport { markRaw } from 'vue';\nimport { BeanControllerPageBase } from 'zova';\n\nexport class BeanControllerPageTableBase extends BeanControllerPageBase {\n public $useTable<TData extends RowData>(initialOptions: TableOptionsWithReactiveData<TData>): Table<TData> {\n return this.ctx.util.instanceScope(() => {\n return markRaw(useVueTable(initialOptions));\n });\n }\n}\n","import { createBeanDecorator } from 'zova';\n\nimport type { IDecoratorTableCellOptions } from '../types/tableCell.js';\n\nexport function TableCell<T extends IDecoratorTableCellOptions>(options?: T): ClassDecorator {\n return createBeanDecorator('tableCell', 'sys', true, options);\n}\n"],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { combineResourceName } from '@cabloy/utils';
2
+ import { toUpperCaseFirstChar } from '@cabloy/word-utils';
3
+ import fse from 'fs-extra';
4
+ import path from 'node:path';
5
+ import { generateRestIndex } from "./utils.js";
6
+ export default async function (options) {
7
+ const { globFiles } = options;
8
+ for (const globFile of globFiles) {
9
+ if (globFile.isIgnore)
10
+ continue;
11
+ // restComponent
12
+ await generateRestTableCell(options, globFile);
13
+ }
14
+ return '';
15
+ }
16
+ async function generateRestTableCell(options, globFile) {
17
+ const { moduleName, modulePath } = options;
18
+ const { beanName, beanNameCapitalize, sceneName, fileNameJS } = globFile;
19
+ // options
20
+ const typeOptionsName = `ITableCellOptions${beanNameCapitalize}`;
21
+ // import
22
+ const contentImports = [];
23
+ contentImports.push(`import type { ${typeOptionsName} } from '../../src/bean/${fileNameJS}';`);
24
+ // component
25
+ const componentNamePrefix = 'TT';
26
+ const componentName = beanName;
27
+ const componentNameFull = `${componentNamePrefix}${toUpperCaseFirstChar(combineResourceName(componentName, moduleName, true, true))}`;
28
+ const contentComponent = `export function ${componentNameFull}(
29
+ _props: ${typeOptionsName},
30
+ ) {
31
+ return '${moduleName}.${sceneName}.${beanName}';
32
+ }`;
33
+ // content
34
+ const content = `${contentImports.join('\n')}
35
+
36
+ ${contentComponent}
37
+ `;
38
+ // output
39
+ const fileDest = path.join(modulePath, `rest/tableCell/${beanName}.ts`);
40
+ await fse.outputFile(fileDest, content);
41
+ // tableCells
42
+ const fileComponents = path.join(modulePath, 'rest/tableCells.ts');
43
+ let contentComponents = '';
44
+ if (fse.existsSync(fileComponents)) {
45
+ contentComponents = (await fse.readFile(fileComponents)).toString();
46
+ }
47
+ const exportContent = `export * from './tableCell/${beanName}.js';`;
48
+ if (!contentComponents.includes(exportContent)) {
49
+ contentComponents = `${contentComponents}${exportContent}\n`;
50
+ await fse.outputFile(fileComponents, contentComponents);
51
+ }
52
+ // index
53
+ const exportIndexContent = "export * from './tableCells.js';";
54
+ await generateRestIndex(modulePath, exportIndexContent);
55
+ }
@@ -0,0 +1,14 @@
1
+ import fse from 'fs-extra';
2
+ import path from 'node:path';
3
+ export async function generateRestIndex(modulePath, append) {
4
+ // index
5
+ const fileIndex = path.join(modulePath, 'rest/index.ts');
6
+ let contentIndex = '';
7
+ if (fse.existsSync(fileIndex)) {
8
+ contentIndex = (await fse.readFile(fileIndex)).toString();
9
+ }
10
+ if (!contentIndex.includes(append)) {
11
+ contentIndex = `${contentIndex}${append}\n`;
12
+ await fse.outputFile(fileIndex, contentIndex);
13
+ }
14
+ }