@postxl/generators 1.0.14 → 1.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/dist/backend-router-trpc/generators/model-routes.generator.js +24 -3
- package/dist/backend-router-trpc/generators/model-routes.generator.js.map +1 -1
- package/dist/backend-router-trpc/router-trpc.generator.d.ts +2 -0
- package/dist/backend-router-trpc/router-trpc.generator.js +2 -0
- package/dist/backend-router-trpc/router-trpc.generator.js.map +1 -1
- package/dist/backend-view/model-view-service.generator.js +276 -0
- package/dist/backend-view/model-view-service.generator.js.map +1 -1
- package/dist/backend-view/template/filter.utils.test.ts +387 -0
- package/dist/backend-view/template/filter.utils.ts +218 -0
- package/dist/backend-view/view.generator.js +5 -1
- package/dist/backend-view/view.generator.js.map +1 -1
- package/dist/frontend-admin/generators/model-admin-page.generator.js +38 -8
- package/dist/frontend-admin/generators/model-admin-page.generator.js.map +1 -1
- package/dist/frontend-core/frontend.generator.js +1 -0
- package/dist/frontend-core/frontend.generator.js.map +1 -1
- package/dist/frontend-core/template/src/components/admin/table-filter-header-icon.tsx +30 -0
- package/dist/frontend-core/template/src/components/admin/table-filter.tsx +537 -0
- package/dist/frontend-core/template/src/components/ui/checkbox/checkbox.stories.tsx +2 -1
- package/dist/frontend-core/template/src/components/ui/checkbox/checkbox.tsx +10 -1
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-column-header.tsx +32 -2
- package/dist/frontend-core/template/src/components/ui/data-grid/data-grid-types.ts +10 -2
- package/dist/frontend-core/template/src/styles/styles.css +14 -2
- package/dist/frontend-tables/generators/model-table.generator.js +69 -46
- package/dist/frontend-tables/generators/model-table.generator.js.map +1 -1
- package/dist/frontend-trpc-client/generators/model-hook.generator.js +33 -5
- package/dist/frontend-trpc-client/generators/model-hook.generator.js.map +1 -1
- package/dist/frontend-trpc-client/trpc-client.generator.d.ts +8 -0
- package/dist/frontend-trpc-client/trpc-client.generator.js +2 -0
- package/dist/frontend-trpc-client/trpc-client.generator.js.map +1 -1
- package/dist/types/generators/model-type.generator.d.ts +2 -0
- package/dist/types/generators/model-type.generator.js +241 -0
- package/dist/types/generators/model-type.generator.js.map +1 -1
- package/dist/types/template/filter.types.ts +70 -0
- package/dist/types/types.generator.d.ts +25 -0
- package/dist/types/types.generator.js +17 -0
- package/dist/types/types.generator.js.map +1 -1
- package/package.json +2 -2
|
@@ -41,6 +41,8 @@ const Generator = __importStar(require("@postxl/generator"));
|
|
|
41
41
|
function generateModelRoutes({ model, context }) {
|
|
42
42
|
const imports = Generator.ImportGenerator.from(model.trpcRoute._filePath)
|
|
43
43
|
.add(model.types.id.decoder)
|
|
44
|
+
.add(model.types.filter.decoder)
|
|
45
|
+
.add(model.types.filter.field)
|
|
44
46
|
.add({ name: context.trpcRouter._middleware.auth.name, location: context.trpcRouter._middleware._filePath })
|
|
45
47
|
.add({ name: context.trpcRouter._shared.procedure.name, location: context.trpcRouter._shared._filePath })
|
|
46
48
|
.add({ name: context.trpcRouter._shared.router.name, location: context.trpcRouter._shared._filePath });
|
|
@@ -60,8 +62,10 @@ function generateModelRoutes({ model, context }) {
|
|
|
60
62
|
}
|
|
61
63
|
}
|
|
62
64
|
const defaultValueMethod = `getDefault: ${context.trpcRouter._shared.procedure.name}.query(({ ctx }) => ctx.view.${model.view.service.variableName}.data.defaultValue),`;
|
|
65
|
+
const variableName = model.view.service.variableName;
|
|
63
66
|
return /* ts */ `
|
|
64
67
|
|
|
68
|
+
import { z } from 'zod'
|
|
65
69
|
${imports.generate()}
|
|
66
70
|
|
|
67
71
|
export const ${model.trpcRoute.name} = router({
|
|
@@ -70,15 +74,32 @@ function generateModelRoutes({ model, context }) {
|
|
|
70
74
|
${model.trpcRoute.get.name}: procedure
|
|
71
75
|
.use(authMiddleware)
|
|
72
76
|
.input(${model.types.id.decoder.name})
|
|
73
|
-
.query(({ input, ctx }) => ctx.view.${
|
|
77
|
+
.query(({ input, ctx }) => ctx.view.${variableName}.get({ id: input, user: ctx.user})),
|
|
74
78
|
|
|
75
79
|
${model.trpcRoute.getMap.name}: procedure
|
|
76
80
|
.use(authMiddleware)
|
|
77
|
-
.query(({ ctx }) => ctx.view.${
|
|
81
|
+
.query(({ ctx }) => ctx.view.${variableName}.getAll(ctx.user)),
|
|
78
82
|
|
|
79
83
|
${model.trpcRoute.getList.name}: procedure
|
|
80
84
|
.use(authMiddleware)
|
|
81
|
-
.query(({ ctx }) => ctx.view.${
|
|
85
|
+
.query(({ ctx }) => ctx.view.${variableName}.getList(ctx.user)),
|
|
86
|
+
|
|
87
|
+
${model.trpcRoute.getFiltered.name}: procedure
|
|
88
|
+
.use(authMiddleware)
|
|
89
|
+
.input(${model.types.filter.decoder.name})
|
|
90
|
+
.query(({ input, ctx }) => ctx.view.${variableName}.getFiltered({ filters: input, user: ctx.user })),
|
|
91
|
+
|
|
92
|
+
${model.trpcRoute.getFilterOptions.name}: procedure
|
|
93
|
+
.use(authMiddleware)
|
|
94
|
+
.input(
|
|
95
|
+
z.object({
|
|
96
|
+
field: z.enum(${model.types.filter.field.name}),
|
|
97
|
+
filters: ${model.types.filter.decoder.name},
|
|
98
|
+
}),
|
|
99
|
+
)
|
|
100
|
+
.query(({ input, ctx }) =>
|
|
101
|
+
ctx.view.${variableName}.getFilterOptions({ field: input.field, filters: input.filters, user: ctx.user }),
|
|
102
|
+
),
|
|
82
103
|
|
|
83
104
|
${mutations.join('\n')}
|
|
84
105
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-routes.generator.js","sourceRoot":"","sources":["../../../src/backend-router-trpc/generators/model-routes.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,
|
|
1
|
+
{"version":3,"file":"model-routes.generator.js","sourceRoot":"","sources":["../../../src/backend-router-trpc/generators/model-routes.generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -101,6 +101,8 @@ export type TrpcRouterModelContext = Generator.ImportableFunction & {
|
|
|
101
101
|
get: Generator.ImportableFunction;
|
|
102
102
|
getMap: Generator.ImportableFunction;
|
|
103
103
|
getList: Generator.ImportableFunction;
|
|
104
|
+
getFiltered: Generator.ImportableFunction;
|
|
105
|
+
getFilterOptions: Generator.ImportableFunction;
|
|
104
106
|
};
|
|
105
107
|
export type RouterEnumContext = Generator.ImportableFunction;
|
|
106
108
|
export declare const generatorId: string & import("zod").BRAND<"PXL.GeneratorInterfaceId">;
|
|
@@ -183,6 +183,8 @@ function registerModelRouter(model) {
|
|
|
183
183
|
get: { name: Generator.toFunctionName(`get`), location },
|
|
184
184
|
getMap: { name: Generator.toFunctionName(`getMap`), location },
|
|
185
185
|
getList: { name: Generator.toFunctionName(`getList`), location },
|
|
186
|
+
getFiltered: { name: Generator.toFunctionName(`getFiltered`), location },
|
|
187
|
+
getFilterOptions: { name: Generator.toFunctionName(`getFilterOptions`), location },
|
|
186
188
|
};
|
|
187
189
|
return { ...model, trpcRoute: router };
|
|
188
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router-trpc.generator.js","sourceRoot":"","sources":["../../src/backend-router-trpc/router-trpc.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAmC;AAEnC,6DAA8C;AAE9C,wDAA2E;AAC3E,sEAAuG;AACvG,kDAA+E;AAC/E,kEAA0F;AAC1F,sDAAyE;AACzE,kDAAkE;AAClE,kCAAmD;AAEnD,oCAAsD;AAEtD,4EAAqE;AACrE,sFAA8E;AAC9E,4EAAsE;AACtE,gFAAyE;AACzE,8EAAuF;AACvF,4FAAoF;AACpF,8EAAuE;AA4GvE,MAAM,eAAe,GAAG;IACtB,IAAI,EAAE,QAAQ;IACd,SAAS,EAAE,OAAO;CACnB,CAAA;
|
|
1
|
+
{"version":3,"file":"router-trpc.generator.js","sourceRoot":"","sources":["../../src/backend-router-trpc/router-trpc.generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,12 +36,29 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.generateModelViewService = generateModelViewService;
|
|
37
37
|
exports.generateModelViewService_NoRepository = generateModelViewService_NoRepository;
|
|
38
38
|
const Generator = __importStar(require("@postxl/generator"));
|
|
39
|
+
const model_type_generator_1 = require("../types/generators/model-type.generator");
|
|
39
40
|
function generateModelViewService({ model, context }) {
|
|
40
41
|
const imports = Generator.ImportGenerator.from(model.view.service.location);
|
|
41
42
|
imports.addType(model.types);
|
|
42
43
|
imports.addType({ name: Generator.toTypeName('User'), location: context.types.location });
|
|
43
44
|
imports.addType(model.types.id);
|
|
45
|
+
imports.addType(model.types.filter.type);
|
|
46
|
+
imports.addType(model.types.filter.fieldType);
|
|
47
|
+
imports.add(model.types.filter.config);
|
|
44
48
|
imports.add(context.view.service);
|
|
49
|
+
imports.addImport({
|
|
50
|
+
items: [
|
|
51
|
+
Generator.toFunctionName('applyRangeFilters'),
|
|
52
|
+
Generator.toFunctionName('getMatches'),
|
|
53
|
+
Generator.toFunctionName('getOptions'),
|
|
54
|
+
Generator.toFunctionName('formatAndSortOptions'),
|
|
55
|
+
],
|
|
56
|
+
from: Generator.toBackendModuleLocation('@view/filter.utils'),
|
|
57
|
+
});
|
|
58
|
+
imports.addImport({
|
|
59
|
+
items: [Generator.toFunctionName('omit')],
|
|
60
|
+
from: Generator.toBackendModuleLocation('@postxl/utils'),
|
|
61
|
+
});
|
|
45
62
|
if (model.repository.kind === 'NoRepository') {
|
|
46
63
|
return generateModelViewService_NoRepository({ model, context, imports });
|
|
47
64
|
}
|
|
@@ -54,6 +71,7 @@ function generateModelViewService_HasRepository({ model, context, imports, }) {
|
|
|
54
71
|
return '';
|
|
55
72
|
}
|
|
56
73
|
imports.add(model.repository);
|
|
74
|
+
const filteringMethods = generateFilteringMethods({ model, imports });
|
|
57
75
|
return `
|
|
58
76
|
import { Inject, Injectable, forwardRef } from '@nestjs/common'
|
|
59
77
|
|
|
@@ -118,6 +136,9 @@ export class ${model.view.service.name} {
|
|
|
118
136
|
|
|
119
137
|
return result
|
|
120
138
|
}
|
|
139
|
+
|
|
140
|
+
${filteringMethods}
|
|
141
|
+
|
|
121
142
|
${generateAuthorizeMethod({ model, context })}
|
|
122
143
|
}
|
|
123
144
|
`;
|
|
@@ -181,6 +202,22 @@ export class ${model.view.service.name} {
|
|
|
181
202
|
return result
|
|
182
203
|
}
|
|
183
204
|
|
|
205
|
+
/**
|
|
206
|
+
* Returns a filtered list of ${model.userFriendlyNamePlural}.
|
|
207
|
+
*/
|
|
208
|
+
public async getFiltered({ filters, user }: { filters: ${model.types.filter.type.name}, user: User }): Promise<${model.types.name}[]> {
|
|
209
|
+
// TODO: Implement this method.
|
|
210
|
+
return this.getList(user)
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/**
|
|
214
|
+
* Returns the filter options for a given field.
|
|
215
|
+
*/
|
|
216
|
+
public async getFilterOptions({ field, filters, user }: { field: ${model.types.filter.field.name}, filters: ${model.types.filter.type.name}, user: User }): Promise<any> {
|
|
217
|
+
// TODO: Implement this method.
|
|
218
|
+
return []
|
|
219
|
+
}
|
|
220
|
+
|
|
184
221
|
${generateAuthorizeMethod({ model, context })}
|
|
185
222
|
}`;
|
|
186
223
|
}
|
|
@@ -193,4 +230,243 @@ function generateAuthorizeMethod({ model }) {
|
|
|
193
230
|
return Promise.resolve() // NOSONAR - adhere to the same interface
|
|
194
231
|
}`;
|
|
195
232
|
}
|
|
233
|
+
function generateFilteringMethods({ model, imports, }) {
|
|
234
|
+
const filterFields = [];
|
|
235
|
+
const usedMatchMethods = new Set();
|
|
236
|
+
// Generate filter conditions for all fields, including nested DU fields
|
|
237
|
+
for (const field of model.fields.values()) {
|
|
238
|
+
const conditions = getFilterConditionsForField({
|
|
239
|
+
field,
|
|
240
|
+
usedMatchMethods,
|
|
241
|
+
});
|
|
242
|
+
filterFields.push(...conditions);
|
|
243
|
+
}
|
|
244
|
+
if (usedMatchMethods.size > 0) {
|
|
245
|
+
imports.addImport({
|
|
246
|
+
items: Array.from(usedMatchMethods).map((m) => Generator.toFunctionName(m)),
|
|
247
|
+
from: Generator.toBackendModuleLocation('@view/filter.utils'),
|
|
248
|
+
});
|
|
249
|
+
}
|
|
250
|
+
return `
|
|
251
|
+
/**
|
|
252
|
+
* Returns a filtered list of ${model.userFriendlyNamePlural}.
|
|
253
|
+
* For really large datasets, consider implementing server-side filtering in the repository instead.
|
|
254
|
+
*/
|
|
255
|
+
public async getFiltered({ filters, user }: { filters: ${model.types.filter.type.name}, user: User }): Promise<${model.types.name}[]> {
|
|
256
|
+
const allItems = await this.getList(user)
|
|
257
|
+
return this.filter${model._conjugated.PascalCasePlural}(allItems, filters)
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
/**
|
|
261
|
+
* Returns the filter options for a given field.
|
|
262
|
+
* For really large datasets, consider implementing server-side filtering in the repository instead.
|
|
263
|
+
*/
|
|
264
|
+
public async getFilterOptions({
|
|
265
|
+
field,
|
|
266
|
+
filters,
|
|
267
|
+
user,
|
|
268
|
+
}: {
|
|
269
|
+
field: ${model.types.filter.fieldType.name}
|
|
270
|
+
filters: ${model.types.filter.type.name}
|
|
271
|
+
user: User
|
|
272
|
+
}): Promise<{ value: string; label: string; hasMatches: boolean }[]> {
|
|
273
|
+
const allItems = await this.getList(user)
|
|
274
|
+
const reducedFilters = omit(filters, field)
|
|
275
|
+
const filteredItems = this.filter${model._conjugated.PascalCasePlural}(allItems, reducedFilters)
|
|
276
|
+
|
|
277
|
+
const config = ${model.types.filter.config.name}[field]
|
|
278
|
+
const accessor = this.getFieldAccessor(field)
|
|
279
|
+
|
|
280
|
+
// If we are getting options for a number/date field, we want to respect the range filter (so options outside the range are grayed out), but still ignore the values filter (so we can see all options).
|
|
281
|
+
const itemsWithRange = applyRangeFilters(filteredItems, accessor, config, filters)
|
|
282
|
+
|
|
283
|
+
let referencedItems: Map<string, any> | undefined
|
|
284
|
+
if (config.kind === 'relation') {
|
|
285
|
+
referencedItems = await (this.viewService as any)[config.referencedModelViewServiceVariableName]?.getAll(user)
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const { matches, options } = {
|
|
289
|
+
matches: getMatches(itemsWithRange, accessor),
|
|
290
|
+
options: getOptions(allItems, accessor, config, referencedItems),
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return formatAndSortOptions(options, matches)
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Helper method to filter ${model.userFriendlyNamePlural} based on provided filters.
|
|
298
|
+
*/
|
|
299
|
+
private filter${model._conjugated.PascalCasePlural}(
|
|
300
|
+
${model._conjugated.camelCasePlural}: ${model.types.name}[],
|
|
301
|
+
filters: ${model.types.filter.type.name},
|
|
302
|
+
): ${model.types.name}[] {
|
|
303
|
+
return ${model._conjugated.camelCasePlural}.filter((item) => {
|
|
304
|
+
${filterFields.join('')}
|
|
305
|
+
return true
|
|
306
|
+
})
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
${generateGetFieldAccessorMethod({ model })}
|
|
310
|
+
`;
|
|
311
|
+
}
|
|
312
|
+
function generateGetFieldAccessorMethod({ model }) {
|
|
313
|
+
const accessors = [];
|
|
314
|
+
// Generate accessor cases for all fields, including nested DU fields
|
|
315
|
+
for (const field of model.fields.values()) {
|
|
316
|
+
const cases = generateFieldAccessorCases({
|
|
317
|
+
field,
|
|
318
|
+
model,
|
|
319
|
+
});
|
|
320
|
+
accessors.push(...cases);
|
|
321
|
+
}
|
|
322
|
+
const defaultAccessor = `return (item: ${model.types.name}) => (item as any)[field]`;
|
|
323
|
+
// Add default case
|
|
324
|
+
accessors.push(` default:
|
|
325
|
+
${defaultAccessor}`);
|
|
326
|
+
return `/**
|
|
327
|
+
* Returns an accessor function for the given filter field.
|
|
328
|
+
*/
|
|
329
|
+
private getFieldAccessor(field: ${model.types.filter.fieldType.name}): (item: ${model.types.name}) => any {
|
|
330
|
+
${accessors.length > 1
|
|
331
|
+
? `switch (field) {
|
|
332
|
+
${accessors.join('\n')}
|
|
333
|
+
}`
|
|
334
|
+
: defaultAccessor}
|
|
335
|
+
}`;
|
|
336
|
+
}
|
|
337
|
+
function generateFieldAccessorCases(params) {
|
|
338
|
+
const { field, model, duParentFieldName, duMemberType } = params;
|
|
339
|
+
const result = [];
|
|
340
|
+
// Handle discriminated union: add the discriminant field plus all nested fields
|
|
341
|
+
if (field.kind === 'discriminatedUnion') {
|
|
342
|
+
// Add the discriminant field itself
|
|
343
|
+
const caseString = generateFieldAccessorCase({ field, model, duParentFieldName, duMemberType });
|
|
344
|
+
if (caseString) {
|
|
345
|
+
result.push(caseString);
|
|
346
|
+
}
|
|
347
|
+
// Add common fields
|
|
348
|
+
for (const commonField of field.commonFields.values()) {
|
|
349
|
+
result.push(...generateFieldAccessorCases({
|
|
350
|
+
field: commonField,
|
|
351
|
+
model,
|
|
352
|
+
duParentFieldName: field.name,
|
|
353
|
+
}));
|
|
354
|
+
}
|
|
355
|
+
// Add member-specific fields
|
|
356
|
+
for (const member of field.members.values()) {
|
|
357
|
+
for (const memberField of member.fields.values()) {
|
|
358
|
+
result.push(...generateFieldAccessorCases({
|
|
359
|
+
field: memberField,
|
|
360
|
+
model,
|
|
361
|
+
duParentFieldName: field.name,
|
|
362
|
+
duMemberType: member.type,
|
|
363
|
+
}));
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
// Regular field
|
|
369
|
+
const caseString = generateFieldAccessorCase({ field, model, duParentFieldName, duMemberType });
|
|
370
|
+
if (caseString) {
|
|
371
|
+
result.push(caseString);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
return result;
|
|
375
|
+
}
|
|
376
|
+
function generateFieldAccessorCase({ field, model, duParentFieldName, duMemberType, }) {
|
|
377
|
+
// For discriminated union fields at top level, we need to return the discriminant (type) value
|
|
378
|
+
if (field.kind === 'discriminatedUnion' && !duParentFieldName) {
|
|
379
|
+
return ` case '${field.name}':
|
|
380
|
+
return (item: ${model.types.name}) => item.${field.name}?.type`;
|
|
381
|
+
}
|
|
382
|
+
// Skip generating a case for simple top-level fields - the default case handles them
|
|
383
|
+
if (!duParentFieldName) {
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
const caseKey = `'${(0, model_type_generator_1.getFilterFieldName)(field.name, duParentFieldName)}'`;
|
|
387
|
+
let accessorExpression;
|
|
388
|
+
if (duMemberType) {
|
|
389
|
+
// Member-specific field: only return value if the member type matches
|
|
390
|
+
accessorExpression = `item.${duParentFieldName}?.type === '${duMemberType}' ? item.${duParentFieldName}?.${field.name} : undefined`;
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
// Common field in DU
|
|
394
|
+
accessorExpression = `item.${duParentFieldName}?.${field.name}`;
|
|
395
|
+
}
|
|
396
|
+
return ` case ${caseKey}:
|
|
397
|
+
return (item: ${model.types.name}) => ${accessorExpression}`;
|
|
398
|
+
}
|
|
399
|
+
/**
|
|
400
|
+
* Returns all filter conditions for a field, including nested DU fields.
|
|
401
|
+
*/
|
|
402
|
+
function getFilterConditionsForField(params) {
|
|
403
|
+
const { field, usedMatchMethods, duParentFieldName, duMemberType } = params;
|
|
404
|
+
const result = [];
|
|
405
|
+
// Handle discriminated union: add the discriminant field plus all nested fields
|
|
406
|
+
if (field.kind === 'discriminatedUnion') {
|
|
407
|
+
// Add the discriminant field itself
|
|
408
|
+
result.push(generateFilterCondition({ field, usedMatchMethods, duParentFieldName, duMemberType }));
|
|
409
|
+
// Add common fields
|
|
410
|
+
for (const commonField of field.commonFields.values()) {
|
|
411
|
+
result.push(...getFilterConditionsForField({
|
|
412
|
+
field: commonField,
|
|
413
|
+
usedMatchMethods,
|
|
414
|
+
duParentFieldName: field.name,
|
|
415
|
+
}));
|
|
416
|
+
}
|
|
417
|
+
// Add member-specific fields
|
|
418
|
+
for (const member of field.members.values()) {
|
|
419
|
+
for (const memberField of member.fields.values()) {
|
|
420
|
+
result.push(...getFilterConditionsForField({
|
|
421
|
+
field: memberField,
|
|
422
|
+
usedMatchMethods,
|
|
423
|
+
duParentFieldName: field.name,
|
|
424
|
+
duMemberType: member.type,
|
|
425
|
+
}));
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
// Regular field
|
|
431
|
+
result.push(generateFilterCondition(params));
|
|
432
|
+
}
|
|
433
|
+
return result;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Generates a single filter condition for a field.
|
|
437
|
+
*/
|
|
438
|
+
function generateFilterCondition({ field, usedMatchMethods, duParentFieldName, duMemberType, }) {
|
|
439
|
+
const valueType = (0, model_type_generator_1.getFilterValueType)(field);
|
|
440
|
+
let matchMethod = 'matchFilter';
|
|
441
|
+
if (valueType === 'number') {
|
|
442
|
+
matchMethod = 'matchNumberFilter';
|
|
443
|
+
}
|
|
444
|
+
else if (valueType === 'date') {
|
|
445
|
+
matchMethod = 'matchDateFilter';
|
|
446
|
+
}
|
|
447
|
+
usedMatchMethods.add(matchMethod);
|
|
448
|
+
// Build the accessor path for the field value
|
|
449
|
+
let accessor;
|
|
450
|
+
if (duParentFieldName) {
|
|
451
|
+
if (duMemberType) {
|
|
452
|
+
// Member-specific field: only check if the member type matches
|
|
453
|
+
accessor = `item.${duParentFieldName}?.type === '${duMemberType}' ? item.${duParentFieldName}?.${field.name} : undefined`;
|
|
454
|
+
}
|
|
455
|
+
else {
|
|
456
|
+
// Common field in DU
|
|
457
|
+
accessor = `item.${duParentFieldName}?.${field.name}`;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
else if (field.kind === 'discriminatedUnion') {
|
|
461
|
+
// DU field at top level: filter by the discriminant (type) value
|
|
462
|
+
accessor = `item.${field.name}?.type`;
|
|
463
|
+
}
|
|
464
|
+
else {
|
|
465
|
+
accessor = `item.${field.name}`;
|
|
466
|
+
}
|
|
467
|
+
return `
|
|
468
|
+
if (!${matchMethod}(${accessor}, filters.${(0, model_type_generator_1.getFilterFieldName)(field.name, duParentFieldName)})) {
|
|
469
|
+
return false
|
|
470
|
+
}`;
|
|
471
|
+
}
|
|
196
472
|
//# sourceMappingURL=model-view-service.generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-view-service.generator.js","sourceRoot":"","sources":["../../src/backend-view/model-view-service.generator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"model-view-service.generator.js","sourceRoot":"","sources":["../../src/backend-view/model-view-service.generator.ts"],"names":[],"mappings":"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"}
|