@nestjs-dash/core 0.0.1

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 (46) hide show
  1. package/README.md +81 -0
  2. package/dist/actions/handlers.d.ts +16 -0
  3. package/dist/actions/handlers.d.ts.map +1 -0
  4. package/dist/actions/handlers.js +12 -0
  5. package/dist/actions/handlers.js.map +1 -0
  6. package/dist/actions/index.d.ts +101 -0
  7. package/dist/actions/index.d.ts.map +1 -0
  8. package/dist/actions/index.js +232 -0
  9. package/dist/actions/index.js.map +1 -0
  10. package/dist/charts/index.d.ts +65 -0
  11. package/dist/charts/index.d.ts.map +1 -0
  12. package/dist/charts/index.js +143 -0
  13. package/dist/charts/index.js.map +1 -0
  14. package/dist/forms/index.d.ts +146 -0
  15. package/dist/forms/index.d.ts.map +1 -0
  16. package/dist/forms/index.js +291 -0
  17. package/dist/forms/index.js.map +1 -0
  18. package/dist/forms/json-fields.d.ts +7 -0
  19. package/dist/forms/json-fields.d.ts.map +1 -0
  20. package/dist/forms/json-fields.js +124 -0
  21. package/dist/forms/json-fields.js.map +1 -0
  22. package/dist/forms/validation.d.ts +10 -0
  23. package/dist/forms/validation.d.ts.map +1 -0
  24. package/dist/forms/validation.js +42 -0
  25. package/dist/forms/validation.js.map +1 -0
  26. package/dist/index.d.ts +353 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +588 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/schemas/index.d.ts +54 -0
  31. package/dist/schemas/index.d.ts.map +1 -0
  32. package/dist/schemas/index.js +126 -0
  33. package/dist/schemas/index.js.map +1 -0
  34. package/dist/tables/index.d.ts +117 -0
  35. package/dist/tables/index.d.ts.map +1 -0
  36. package/dist/tables/index.js +283 -0
  37. package/dist/tables/index.js.map +1 -0
  38. package/dist/tables/list-query-config.d.ts +6 -0
  39. package/dist/tables/list-query-config.d.ts.map +1 -0
  40. package/dist/tables/list-query-config.js +86 -0
  41. package/dist/tables/list-query-config.js.map +1 -0
  42. package/dist/theme/index.d.ts +44 -0
  43. package/dist/theme/index.d.ts.map +1 -0
  44. package/dist/theme/index.js +2 -0
  45. package/dist/theme/index.js.map +1 -0
  46. package/package.json +62 -0
@@ -0,0 +1,126 @@
1
+ import { compactObject } from '@nestjs-dash/support';
2
+ export class ComponentBuilder {
3
+ props = {};
4
+ children = [];
5
+ setProp(key, value) {
6
+ if (value !== undefined) {
7
+ this.props[key] = value;
8
+ }
9
+ return this;
10
+ }
11
+ toSchema() {
12
+ return compactObject({
13
+ kind: this.kind,
14
+ props: { ...this.props },
15
+ children: this.children.length > 0 ? this.children : undefined,
16
+ });
17
+ }
18
+ }
19
+ export class Schema extends ComponentBuilder {
20
+ kind = 'schema';
21
+ static make() {
22
+ return new Schema();
23
+ }
24
+ components(components) {
25
+ this.children = components.map((component) => component.toSchema());
26
+ return this;
27
+ }
28
+ }
29
+ export class Section extends ComponentBuilder {
30
+ kind = 'section';
31
+ static make(heading) {
32
+ const section = new Section();
33
+ if (heading) {
34
+ section.setProp('heading', heading);
35
+ }
36
+ return section;
37
+ }
38
+ components(components) {
39
+ this.children = components.map((component) => component.toSchema());
40
+ return this;
41
+ }
42
+ collapsible(value = true) {
43
+ return this.setProp('collapsible', value);
44
+ }
45
+ }
46
+ export class Grid extends ComponentBuilder {
47
+ kind = 'grid';
48
+ static make(columns = 2) {
49
+ return new Grid().setProp('columns', columns);
50
+ }
51
+ components(components) {
52
+ this.children = components.map((component) => component.toSchema());
53
+ return this;
54
+ }
55
+ }
56
+ function slugifyTabId(label) {
57
+ const slug = label
58
+ .toLowerCase()
59
+ .replace(/[^a-z0-9]+/g, '-')
60
+ .replace(/^-+|-+$/g, '');
61
+ return slug.length > 0 ? slug : 'tab';
62
+ }
63
+ export class Tab extends ComponentBuilder {
64
+ kind = 'tab';
65
+ static make(label) {
66
+ return new Tab().setProp('label', label).setProp('id', slugifyTabId(label));
67
+ }
68
+ id(value) {
69
+ return this.setProp('id', value);
70
+ }
71
+ icon(value) {
72
+ return this.setProp('icon', value);
73
+ }
74
+ components(components) {
75
+ this.children = components.map((component) => component.toSchema());
76
+ return this;
77
+ }
78
+ }
79
+ export class Tabs extends ComponentBuilder {
80
+ kind = 'tabs';
81
+ static make() {
82
+ return new Tabs();
83
+ }
84
+ tabs(items) {
85
+ this.children = items.map((tab) => tab.toSchema());
86
+ return this;
87
+ }
88
+ }
89
+ const htmlContentRegistry = new Map();
90
+ function hashString(value) {
91
+ let hash = 0;
92
+ for (let i = 0; i < value.length; i += 1) {
93
+ hash = (hash * 31 + value.charCodeAt(i)) | 0;
94
+ }
95
+ return `html-${hash}`;
96
+ }
97
+ export function resolveHtmlContent(key) {
98
+ return htmlContentRegistry.get(key);
99
+ }
100
+ export class Html extends ComponentBuilder {
101
+ kind = 'html';
102
+ static make(content) {
103
+ const html = new Html();
104
+ if (typeof content === 'string') {
105
+ html.setProp('html', content);
106
+ return html;
107
+ }
108
+ const key = hashString(content.toString());
109
+ htmlContentRegistry.set(key, content);
110
+ html.setProp('htmlKey', key);
111
+ return html;
112
+ }
113
+ key(value) {
114
+ const previous = this.props.htmlKey;
115
+ if (typeof previous === 'string') {
116
+ const fn = htmlContentRegistry.get(previous);
117
+ if (fn) {
118
+ htmlContentRegistry.delete(previous);
119
+ htmlContentRegistry.set(value, fn);
120
+ }
121
+ }
122
+ return this.setProp('htmlKey', value);
123
+ }
124
+ }
125
+ export {} from '@nestjs-dash/support';
126
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,117 @@
1
+ import type { FilterOperator } from '@nestjs-dash/adapter';
2
+ import type { BadgeColor, SchemaNode } from '@nestjs-dash/support';
3
+ import type { Action } from '../actions/index.js';
4
+ export type { FilterOperator } from '@nestjs-dash/adapter';
5
+ export * from './list-query-config.js';
6
+ export interface TableSchema {
7
+ kind: 'table';
8
+ columns: SchemaNode[];
9
+ filters: SchemaNode[];
10
+ actions: SchemaNode[];
11
+ toolbarActions: SchemaNode[];
12
+ bulkActions: SchemaNode[];
13
+ props: {
14
+ defaultSortBy?: Array<[string, 'ASC' | 'DESC']>;
15
+ defaultLimit?: number;
16
+ };
17
+ }
18
+ declare abstract class ColumnBuilder {
19
+ protected readonly kind: SchemaNode['kind'];
20
+ protected props: Record<string, unknown>;
21
+ constructor(kind: SchemaNode['kind'], name: string);
22
+ label(value: string): this;
23
+ sortable(value?: boolean): this;
24
+ searchable(value?: boolean): this;
25
+ filterable(value?: FilterOperator[] | true | false): this;
26
+ toSchema(): SchemaNode;
27
+ }
28
+ export declare class TextColumn extends ColumnBuilder {
29
+ constructor(name: string);
30
+ static make(name: string): TextColumn;
31
+ }
32
+ export declare class IconColumn extends ColumnBuilder {
33
+ constructor(name: string);
34
+ static make(name: string): IconColumn;
35
+ }
36
+ export declare class ImageColumn extends ColumnBuilder {
37
+ constructor(name: string);
38
+ static make(name: string): ImageColumn;
39
+ shape(value: 'circle' | 'square'): this;
40
+ collection(name: string): this;
41
+ disk(name: string): this;
42
+ }
43
+ export declare class BadgeColumn extends ColumnBuilder {
44
+ constructor(name: string);
45
+ static make(name: string): BadgeColumn;
46
+ colors(map: Record<string, BadgeColor>): this;
47
+ }
48
+ export declare class BooleanColumn extends ColumnBuilder {
49
+ constructor(name: string);
50
+ static make(name: string): BooleanColumn;
51
+ }
52
+ export declare class DateColumn extends ColumnBuilder {
53
+ constructor(name: string);
54
+ static make(name: string): DateColumn;
55
+ since(value?: boolean): this;
56
+ }
57
+ export declare class SelectFilter {
58
+ private props;
59
+ private constructor();
60
+ static make(name: string): SelectFilter;
61
+ label(value: string): this;
62
+ options(options: Array<{
63
+ label: string;
64
+ value: string;
65
+ }> | Record<string, string>): this;
66
+ operators(operators: FilterOperator[]): this;
67
+ toSchema(): SchemaNode;
68
+ }
69
+ export declare class TextFilter {
70
+ private props;
71
+ private constructor();
72
+ static make(name: string): TextFilter;
73
+ label(value: string): this;
74
+ placeholder(value: string): this;
75
+ operators(operators: FilterOperator[]): this;
76
+ toSchema(): SchemaNode;
77
+ }
78
+ export declare class DateFilter {
79
+ private props;
80
+ private constructor();
81
+ static make(name: string): DateFilter;
82
+ label(value: string): this;
83
+ operators(operators: FilterOperator[]): this;
84
+ toSchema(): SchemaNode;
85
+ }
86
+ export type TableFilter = SelectFilter | TextFilter | DateFilter;
87
+ export type ColumnCapabilities = Record<string, {
88
+ sortable?: boolean;
89
+ searchable?: boolean;
90
+ filterable?: FilterOperator[] | true | false;
91
+ }>;
92
+ export declare class Table {
93
+ private columnBuilders;
94
+ private filterBuilders;
95
+ private actionBuilders;
96
+ private toolbarActionBuilders;
97
+ private bulkActionBuilders;
98
+ private props;
99
+ static make(): Table;
100
+ columns(columns: ColumnBuilder[]): this;
101
+ filters(filters: TableFilter[]): this;
102
+ actions(actions: Action[]): this;
103
+ toolbarActions(actions: Action[]): this;
104
+ bulkActions(actions: Action[]): this;
105
+ defaultSortBy(sortBy: Array<[string, 'ASC' | 'DESC']>): this;
106
+ defaultLimit(limit: number): this;
107
+ toSchema(): TableSchema;
108
+ columnCapabilities(): ColumnCapabilities;
109
+ toListQueryConfig(): {
110
+ sortableColumns: string[];
111
+ searchableColumns: string[];
112
+ filterableColumns: Record<string, FilterOperator[] | true>;
113
+ defaultSortBy?: Array<[string, 'ASC' | 'DESC']>;
114
+ defaultLimit?: number;
115
+ };
116
+ }
117
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tables/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,283 @@
1
+ import { compactObject } from '@nestjs-dash/support';
2
+ export * from './list-query-config.js';
3
+ class ColumnBuilder {
4
+ kind;
5
+ props;
6
+ constructor(kind, name) {
7
+ this.kind = kind;
8
+ this.props = { name };
9
+ }
10
+ label(value) {
11
+ this.props.label = value;
12
+ return this;
13
+ }
14
+ sortable(value = true) {
15
+ this.props.sortable = value;
16
+ return this;
17
+ }
18
+ searchable(value = true) {
19
+ this.props.searchable = value;
20
+ return this;
21
+ }
22
+ filterable(value = true) {
23
+ this.props.filterable = value;
24
+ return this;
25
+ }
26
+ toSchema() {
27
+ return {
28
+ kind: this.kind,
29
+ name: String(this.props.name),
30
+ props: { ...this.props },
31
+ };
32
+ }
33
+ }
34
+ export class TextColumn extends ColumnBuilder {
35
+ constructor(name) {
36
+ super('text-column', name);
37
+ }
38
+ static make(name) {
39
+ return new TextColumn(name);
40
+ }
41
+ }
42
+ export class IconColumn extends ColumnBuilder {
43
+ constructor(name) {
44
+ super('icon-column', name);
45
+ }
46
+ static make(name) {
47
+ return new IconColumn(name);
48
+ }
49
+ }
50
+ export class ImageColumn extends ColumnBuilder {
51
+ constructor(name) {
52
+ super('image-column', name);
53
+ }
54
+ static make(name) {
55
+ return new ImageColumn(name);
56
+ }
57
+ shape(value) {
58
+ this.props.shape = value;
59
+ return this;
60
+ }
61
+ collection(name) {
62
+ this.props.collection = name;
63
+ return this;
64
+ }
65
+ disk(name) {
66
+ this.props.disk = name;
67
+ return this;
68
+ }
69
+ }
70
+ export class BadgeColumn extends ColumnBuilder {
71
+ constructor(name) {
72
+ super('badge-column', name);
73
+ }
74
+ static make(name) {
75
+ return new BadgeColumn(name);
76
+ }
77
+ colors(map) {
78
+ this.props.colors = map;
79
+ return this;
80
+ }
81
+ }
82
+ export class BooleanColumn extends ColumnBuilder {
83
+ constructor(name) {
84
+ super('boolean-column', name);
85
+ }
86
+ static make(name) {
87
+ return new BooleanColumn(name);
88
+ }
89
+ }
90
+ export class DateColumn extends ColumnBuilder {
91
+ constructor(name) {
92
+ super('date-column', name);
93
+ }
94
+ static make(name) {
95
+ return new DateColumn(name);
96
+ }
97
+ since(value = true) {
98
+ this.props.since = value;
99
+ return this;
100
+ }
101
+ }
102
+ export class SelectFilter {
103
+ props;
104
+ constructor(name) {
105
+ this.props = {
106
+ name,
107
+ operators: ['$eq'],
108
+ };
109
+ }
110
+ static make(name) {
111
+ return new SelectFilter(name);
112
+ }
113
+ label(value) {
114
+ this.props.label = value;
115
+ return this;
116
+ }
117
+ options(options) {
118
+ if (Array.isArray(options)) {
119
+ this.props.options = options;
120
+ }
121
+ else {
122
+ this.props.options = Object.entries(options).map(([value, label]) => ({
123
+ value,
124
+ label,
125
+ }));
126
+ }
127
+ return this;
128
+ }
129
+ operators(operators) {
130
+ this.props.operators = operators;
131
+ return this;
132
+ }
133
+ toSchema() {
134
+ return {
135
+ kind: 'select-filter',
136
+ name: String(this.props.name),
137
+ props: { ...this.props },
138
+ };
139
+ }
140
+ }
141
+ export class TextFilter {
142
+ props;
143
+ constructor(name) {
144
+ this.props = {
145
+ name,
146
+ operators: ['$ilike'],
147
+ };
148
+ }
149
+ static make(name) {
150
+ return new TextFilter(name);
151
+ }
152
+ label(value) {
153
+ this.props.label = value;
154
+ return this;
155
+ }
156
+ placeholder(value) {
157
+ this.props.placeholder = value;
158
+ return this;
159
+ }
160
+ operators(operators) {
161
+ this.props.operators = operators;
162
+ return this;
163
+ }
164
+ toSchema() {
165
+ return {
166
+ kind: 'text-filter',
167
+ name: String(this.props.name),
168
+ props: { ...this.props },
169
+ };
170
+ }
171
+ }
172
+ export class DateFilter {
173
+ props;
174
+ constructor(name) {
175
+ this.props = {
176
+ name,
177
+ operators: ['$eq'],
178
+ };
179
+ }
180
+ static make(name) {
181
+ return new DateFilter(name);
182
+ }
183
+ label(value) {
184
+ this.props.label = value;
185
+ return this;
186
+ }
187
+ operators(operators) {
188
+ this.props.operators = operators;
189
+ return this;
190
+ }
191
+ toSchema() {
192
+ return {
193
+ kind: 'date-filter',
194
+ name: String(this.props.name),
195
+ props: { ...this.props },
196
+ };
197
+ }
198
+ }
199
+ export class Table {
200
+ columnBuilders = [];
201
+ filterBuilders = [];
202
+ actionBuilders = [];
203
+ toolbarActionBuilders = [];
204
+ bulkActionBuilders = [];
205
+ props = {};
206
+ static make() {
207
+ return new Table();
208
+ }
209
+ columns(columns) {
210
+ this.columnBuilders = columns;
211
+ return this;
212
+ }
213
+ filters(filters) {
214
+ this.filterBuilders = filters;
215
+ return this;
216
+ }
217
+ actions(actions) {
218
+ this.actionBuilders = actions;
219
+ return this;
220
+ }
221
+ toolbarActions(actions) {
222
+ this.toolbarActionBuilders = actions;
223
+ return this;
224
+ }
225
+ bulkActions(actions) {
226
+ this.bulkActionBuilders = actions;
227
+ return this;
228
+ }
229
+ defaultSortBy(sortBy) {
230
+ this.props.defaultSortBy = sortBy;
231
+ return this;
232
+ }
233
+ defaultLimit(limit) {
234
+ this.props.defaultLimit = limit;
235
+ return this;
236
+ }
237
+ toSchema() {
238
+ return {
239
+ kind: 'table',
240
+ columns: this.columnBuilders.map((column) => column.toSchema()),
241
+ filters: this.filterBuilders.map((filter) => filter.toSchema()),
242
+ actions: this.actionBuilders.map((action) => action.toSchema()),
243
+ toolbarActions: this.toolbarActionBuilders.map((action) => action.toSchema()),
244
+ bulkActions: this.bulkActionBuilders.map((action) => action.toSchema()),
245
+ props: compactObject(this.props),
246
+ };
247
+ }
248
+ columnCapabilities() {
249
+ const result = {};
250
+ for (const column of this.columnBuilders) {
251
+ const schema = column.toSchema();
252
+ result[String(schema.name)] = {
253
+ sortable: schema.props.sortable,
254
+ searchable: schema.props.searchable,
255
+ filterable: schema.props.filterable,
256
+ };
257
+ }
258
+ return result;
259
+ }
260
+ toListQueryConfig() {
261
+ const sortableColumns = this.columnBuilders
262
+ .filter((column) => column.toSchema().props.sortable === true)
263
+ .map((column) => String(column.toSchema().name));
264
+ const searchableColumns = this.columnBuilders
265
+ .filter((column) => column.toSchema().props.searchable === true)
266
+ .map((column) => String(column.toSchema().name));
267
+ const filterableColumns = {};
268
+ for (const filter of this.filterBuilders) {
269
+ const schema = filter.toSchema();
270
+ const name = String(schema.name);
271
+ const operators = schema.props.operators;
272
+ filterableColumns[name] = Array.isArray(operators) ? operators : true;
273
+ }
274
+ return compactObject({
275
+ sortableColumns,
276
+ searchableColumns,
277
+ filterableColumns,
278
+ defaultSortBy: this.props.defaultSortBy,
279
+ defaultLimit: this.props.defaultLimit,
280
+ });
281
+ }
282
+ }
283
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tables/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type EntityConstructor, type ListQueryConfig, type PropertyAdapter } from '@nestjs-dash/adapter';
2
+ import type { ResourceClass } from '../index.js';
3
+ import { type ColumnCapabilities } from './index.js';
4
+ export declare function resolveListQueryConfig(resource: ResourceClass, propertyNames: string[], computeFromEntity?: (tableDefaults: Partial<ListQueryConfig>, columnCapabilities: ColumnCapabilities) => ListQueryConfig, propertyDefaults?: PropertyAdapter[]): ListQueryConfig;
5
+ export declare function listQueryConfigFromEntity(entity: EntityConstructor, defaults?: Partial<ListQueryConfig>, explicit?: ColumnCapabilities, properties?: PropertyAdapter[]): ListQueryConfig;
6
+ //# sourceMappingURL=list-query-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-query-config.d.ts","sourceRoot":"","sources":["../../src/tables/list-query-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EAEtB,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAS,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA6B5D,wBAAgB,sBAAsB,CACpC,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,MAAM,EAAE,EACvB,iBAAiB,CAAC,EAAE,CAClB,aAAa,EAAE,OAAO,CAAC,eAAe,CAAC,EACvC,kBAAkB,EAAE,kBAAkB,KACnC,eAAe,EACpB,gBAAgB,CAAC,EAAE,eAAe,EAAE,GACnC,eAAe,CAkCjB;AAuBD,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EACzB,QAAQ,GAAE,OAAO,CAAC,eAAe,CAAM,EACvC,QAAQ,GAAE,kBAAuB,EACjC,UAAU,GAAE,eAAe,EAAO,GACjC,eAAe,CA6DjB"}
@@ -0,0 +1,86 @@
1
+ import { getEntityColumnMeta, resolveCapability, } from '@nestjs-dash/adapter';
2
+ import { Table } from './index.js';
3
+ export function resolveListQueryConfig(resource, propertyNames, computeFromEntity, propertyDefaults) {
4
+ let tableDefaults = { defaultLimit: 20 };
5
+ let columnCapabilities = {};
6
+ if (typeof resource.table === 'function') {
7
+ const table = resource.table(Table.make());
8
+ const fromTable = table.toListQueryConfig();
9
+ tableDefaults = {
10
+ ...fromTable,
11
+ defaultLimit: fromTable.defaultLimit ?? 20,
12
+ };
13
+ columnCapabilities = table.columnCapabilities();
14
+ }
15
+ const resolved = computeFromEntity
16
+ ? computeFromEntity(tableDefaults, columnCapabilities)
17
+ : { sortableColumns: [], ...tableDefaults };
18
+ if (resolved.sortableColumns.length > 0) {
19
+ return resolved;
20
+ }
21
+ if (propertyDefaults?.length) {
22
+ const adapterSortable = propertyDefaults
23
+ .filter((property) => property.isSortable())
24
+ .map((property) => property.name());
25
+ if (adapterSortable.length > 0) {
26
+ return { ...resolved, sortableColumns: adapterSortable };
27
+ }
28
+ }
29
+ return {
30
+ ...resolved,
31
+ sortableColumns: propertyNames.length ? propertyNames : ['id'],
32
+ };
33
+ }
34
+ export function listQueryConfigFromEntity(entity, defaults = {}, explicit = {}, properties = []) {
35
+ const meta = getEntityColumnMeta(entity);
36
+ const propertyByName = new Map(properties.map((property) => [property.name(), property]));
37
+ const allNames = new Set([
38
+ ...Object.keys(meta),
39
+ ...Object.keys(explicit),
40
+ ...properties.map((property) => property.name()),
41
+ ]);
42
+ const sortableColumns = new Set(defaults.sortableColumns ?? []);
43
+ const searchableColumns = new Set(defaults.searchableColumns ?? []);
44
+ const filterableColumns = {
45
+ ...defaults.filterableColumns,
46
+ };
47
+ let defaultSortBy = defaults.defaultSortBy ? [...defaults.defaultSortBy] : undefined;
48
+ for (const name of allNames) {
49
+ const sortable = resolveCapability(explicit[name]?.sortable, meta[name]?.sortable, propertyByName.get(name)?.isSortable() ?? false);
50
+ if (sortable) {
51
+ sortableColumns.add(name);
52
+ }
53
+ const searchable = resolveCapability(explicit[name]?.searchable, meta[name]?.searchable, false);
54
+ if (searchable) {
55
+ searchableColumns.add(name);
56
+ }
57
+ if (filterableColumns[name] == null) {
58
+ const columnFilterable = explicit[name]?.filterable;
59
+ const entityFilterable = meta[name]?.filterable;
60
+ if (columnFilterable === false) {
61
+ }
62
+ else if (columnFilterable != null) {
63
+ filterableColumns[name] = columnFilterable;
64
+ }
65
+ else if (entityFilterable != null) {
66
+ filterableColumns[name] = entityFilterable;
67
+ }
68
+ }
69
+ }
70
+ for (const [name, column] of Object.entries(meta)) {
71
+ if (column.defaultSort && !defaultSortBy) {
72
+ defaultSortBy = [[name, column.defaultSort]];
73
+ }
74
+ }
75
+ return {
76
+ sortableColumns: [...sortableColumns],
77
+ searchableColumns: searchableColumns.size > 0 ? [...searchableColumns] : undefined,
78
+ filterableColumns: Object.keys(filterableColumns).length > 0 ? filterableColumns : undefined,
79
+ defaultSortBy,
80
+ defaultLimit: defaults.defaultLimit,
81
+ maxLimit: defaults.maxLimit,
82
+ select: defaults.select,
83
+ relations: defaults.relations,
84
+ };
85
+ }
86
+ //# sourceMappingURL=list-query-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list-query-config.js","sourceRoot":"","sources":["../../src/tables/list-query-config.ts"],"names":[],"mappings":"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"}