@nest-my-admin/core 0.3.2 → 0.4.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 (101) hide show
  1. package/README.md +29 -0
  2. package/dist/admin.module.js +6 -0
  3. package/dist/admin.module.js.map +1 -1
  4. package/dist/api/action.service.js +3 -0
  5. package/dist/api/action.service.js.map +1 -1
  6. package/dist/api/admin-api.service.d.ts +34 -2
  7. package/dist/api/admin-api.service.js +208 -10
  8. package/dist/api/admin-api.service.js.map +1 -1
  9. package/dist/api/menu-routes.d.ts +16 -0
  10. package/dist/api/menu-routes.js +10 -0
  11. package/dist/api/menu-routes.js.map +1 -0
  12. package/dist/api/menu.d.ts +15 -0
  13. package/dist/api/menu.js +85 -0
  14. package/dist/api/menu.js.map +1 -0
  15. package/dist/appearance/appearance.service.d.ts +28 -0
  16. package/dist/appearance/appearance.service.js +88 -0
  17. package/dist/appearance/appearance.service.js.map +1 -0
  18. package/dist/appearance/entities.d.ts +8 -0
  19. package/dist/appearance/entities.js +35 -0
  20. package/dist/appearance/entities.js.map +1 -0
  21. package/dist/constants.d.ts +1 -0
  22. package/dist/constants.js +1 -0
  23. package/dist/constants.js.map +1 -1
  24. package/dist/contract.d.ts +243 -7
  25. package/dist/crud/computed-columns.d.ts +65 -0
  26. package/dist/crud/computed-columns.js +264 -0
  27. package/dist/crud/computed-columns.js.map +1 -0
  28. package/dist/crud/list-query-builder.d.ts +3 -1
  29. package/dist/crud/list-query-builder.js +5 -2
  30. package/dist/crud/list-query-builder.js.map +1 -1
  31. package/dist/crud/list-query.js +6 -1
  32. package/dist/crud/list-query.js.map +1 -1
  33. package/dist/crud/list-tabs.d.ts +7 -0
  34. package/dist/crud/list-tabs.js +44 -0
  35. package/dist/crud/list-tabs.js.map +1 -0
  36. package/dist/dashboard/dashboard-routes.d.ts +18 -0
  37. package/dist/dashboard/dashboard-routes.js +13 -0
  38. package/dist/dashboard/dashboard-routes.js.map +1 -0
  39. package/dist/dashboard/dashboard.service.d.ts +20 -0
  40. package/dist/dashboard/dashboard.service.js +80 -0
  41. package/dist/dashboard/dashboard.service.js.map +1 -0
  42. package/dist/dashboard/widget-registry.d.ts +22 -0
  43. package/dist/dashboard/widget-registry.js +77 -0
  44. package/dist/dashboard/widget-registry.js.map +1 -0
  45. package/dist/decorators/admin-action.d.ts +15 -2
  46. package/dist/decorators/admin-action.js +21 -2
  47. package/dist/decorators/admin-action.js.map +1 -1
  48. package/dist/decorators/admin-field.d.ts +23 -3
  49. package/dist/decorators/admin-field.js +1 -1
  50. package/dist/decorators/admin-field.js.map +1 -1
  51. package/dist/decorators/admin-resource.d.ts +7 -0
  52. package/dist/decorators/admin-resource.js.map +1 -1
  53. package/dist/decorators/admin-widget.d.ts +27 -0
  54. package/dist/decorators/admin-widget.js +14 -0
  55. package/dist/decorators/admin-widget.js.map +1 -0
  56. package/dist/http/admin-http.server.d.ts +5 -1
  57. package/dist/http/admin-http.server.js +17 -2
  58. package/dist/http/admin-http.server.js.map +1 -1
  59. package/dist/index.d.ts +4 -2
  60. package/dist/index.js +2 -0
  61. package/dist/index.js.map +1 -1
  62. package/dist/inlines/inline-config.d.ts +3 -0
  63. package/dist/inlines/inline-config.js +11 -3
  64. package/dist/inlines/inline-config.js.map +1 -1
  65. package/dist/inlines/inline-reader.d.ts +5 -0
  66. package/dist/inlines/inline-reader.js +9 -2
  67. package/dist/inlines/inline-reader.js.map +1 -1
  68. package/dist/inlines/inline-writer.js +4 -0
  69. package/dist/inlines/inline-writer.js.map +1 -1
  70. package/dist/internal.d.ts +3 -0
  71. package/dist/internal.js +2 -0
  72. package/dist/internal.js.map +1 -1
  73. package/dist/options.d.ts +49 -0
  74. package/dist/options.js +31 -0
  75. package/dist/options.js.map +1 -1
  76. package/dist/policy/admin-policy.service.d.ts +10 -1
  77. package/dist/policy/admin-policy.service.js +107 -8
  78. package/dist/policy/admin-policy.service.js.map +1 -1
  79. package/dist/policy/catalog.d.ts +2 -2
  80. package/dist/policy/catalog.js +3 -3
  81. package/dist/policy/catalog.js.map +1 -1
  82. package/dist/policy/explain.js +3 -1
  83. package/dist/policy/explain.js.map +1 -1
  84. package/dist/rbac/rbac.service.d.ts +3 -1
  85. package/dist/rbac/rbac.service.js +8 -4
  86. package/dist/rbac/rbac.service.js.map +1 -1
  87. package/dist/registry/resource-registry.d.ts +17 -0
  88. package/dist/registry/resource-registry.js +75 -0
  89. package/dist/registry/resource-registry.js.map +1 -1
  90. package/dist/resource/admin-resource-base.d.ts +111 -9
  91. package/dist/resource/admin-resource-base.js +16 -2
  92. package/dist/resource/admin-resource-base.js.map +1 -1
  93. package/dist/schema/build-resource-schema.js +103 -6
  94. package/dist/schema/build-resource-schema.js.map +1 -1
  95. package/dist/schema/currency.d.ts +9 -0
  96. package/dist/schema/currency.js +11 -0
  97. package/dist/schema/currency.js.map +1 -0
  98. package/dist/schema/field-config.d.ts +33 -4
  99. package/dist/schema/field-config.js +68 -3
  100. package/dist/schema/field-config.js.map +1 -1
  101. package/package.json +2 -2
@@ -31,6 +31,8 @@ import { humanize, kebabCase } from '../schema/humanize.js';
31
31
  import { dbNamesFor } from './db-names.js';
32
32
  import { hookWarnings } from './hook-warnings.js';
33
33
  import { resolveInlines } from '../inlines/inline-config.js';
34
+ import { checkTabs } from '../crud/list-tabs.js';
35
+ import { addComputedSort, checkComputed } from '../crud/computed-columns.js';
34
36
  const DEFAULT_GROUP_ORDER = 100;
35
37
  /** `order` of a resource or a settings page that sets none: the same default as a group's. */
36
38
  export const DEFAULT_MEMBER_ORDER = 100;
@@ -93,12 +95,75 @@ let ResourceRegistry = class ResourceRegistry {
93
95
  this.registerAutoResources(this.options.autoRegister);
94
96
  this.linkRelations();
95
97
  resolveInlines(this.list());
98
+ // Stepper histories: the child resource that logs the field's changes, linked to this resource.
99
+ for (const entry of this.list()) {
100
+ for (const [field, options] of entry.fieldConfig) {
101
+ if (options.widget !== 'stepper' || !options.history)
102
+ continue;
103
+ const where = `${entry.className}: fields.${field}.history`;
104
+ const child = this.list().find((candidate) => candidate.resource.constructor === options.history.inline);
105
+ if (!child)
106
+ throw new Error(`${where}: inline is not a registered admin resource`);
107
+ const link = [...child.relations].find(([, relation]) => relation.inverseEntityMetadata.target === entry.entity)?.[1].propertyName;
108
+ if (!link)
109
+ throw new Error(`${where}: ${child.schema.name} has no relation to ${entry.schema.name}`);
110
+ const { value, at } = options.history;
111
+ const whereFields = options.history.where ?? {};
112
+ for (const name of [value, at, ...Object.keys(whereFields)]) {
113
+ if (!child.schema.fields.some((candidate) => candidate.name === name))
114
+ throw new Error(`${where}: unknown field "${name}" on ${child.schema.name}`);
115
+ }
116
+ entry.steppers.set(field, { child, link, value, at, where: whereFields });
117
+ }
118
+ }
119
+ // Relation aside cards: the target resource and its fields, now that every resource is known.
120
+ for (const entry of this.list()) {
121
+ for (const [index, card] of (entry.schema.form.aside ?? []).entries()) {
122
+ if (!card.relation)
123
+ continue;
124
+ const where = `${entry.className}: form.layout.aside[${index}]`;
125
+ const target = entry.schema.fields.find((field) => field.name === card.relation.field)?.relation?.resource;
126
+ const targetEntry = target ? this.find(target) : undefined;
127
+ if (!targetEntry)
128
+ throw new Error(`${where}: the relation "${card.relation.field}" points at an entity without an admin resource`);
129
+ card.relation.resource = targetEntry.schema.name;
130
+ for (const field of card.fields) {
131
+ if (!targetEntry.schema.fields.some((candidate) => candidate.name === field))
132
+ throw new Error(`${where}: unknown field "${field}" on ${targetEntry.schema.name}`);
133
+ }
134
+ }
135
+ }
136
+ // Sortable computed columns order by a subquery over the rows the viewer may read.
137
+ for (const entry of this.list()) {
138
+ if (![...entry.computed.values()].some((column) => column.column.sortable))
139
+ continue;
140
+ entry.resource.attachComputedSort((qb, field, ctx) => {
141
+ const column = entry.computed.get(field);
142
+ return column?.column.sortable ? addComputedSort(qb, column, entry.metadata, ctx, this.childQuery) : undefined;
143
+ });
144
+ }
145
+ // Inline children are edited on their parent's page: out of navigation unless they ask to stay.
146
+ for (const child of this.list().flatMap((entry) => entry.inlines.map((inline) => inline.child))) {
147
+ if (child.navOption === undefined)
148
+ child.nav = false;
149
+ }
96
150
  // A parent and its inlines are saved together or not at all: a promise only a transaction can keep.
97
151
  const parent = this.list().find((entry) => entry.inlines.length > 0);
98
152
  if (parent && !this.options.transactions) {
99
153
  throw new Error(`${parent.className}: form.layout has inlines, which are saved with their parent in one transaction; the admin's transactions are off (\`transactions: false\`)`);
100
154
  }
101
155
  }
156
+ /** A child entity's rows as `ctx`'s user may read them: through its resource (query() and scopes) when it has one. */
157
+ childQuery = (entity, alias, ctx) => {
158
+ const child = this.list().find((entry) => entry.entity === entity);
159
+ if (child)
160
+ return child.resource.readQuery(alias, ctx);
161
+ const owner = this.list().find((entry) => entry.dataSource.hasMetadata(entity));
162
+ const manager = ctx?.manager ?? owner?.dataSource.manager;
163
+ if (!manager)
164
+ throw new Error(`nest-my-admin: no DataSource holds ${entity.name}`);
165
+ return manager.getRepository(entity).createQueryBuilder(alias);
166
+ };
102
167
  get(name) {
103
168
  const entry = this.resources.get(name);
104
169
  if (!entry)
@@ -208,6 +273,12 @@ let ResourceRegistry = class ResourceRegistry {
208
273
  throw new Error(`${className}: ${message}`);
209
274
  });
210
275
  const schema = buildResourceSchema({ definition, resource, metadata, moduleGroup, className });
276
+ checkTabs(schema, resource.list?.tabs, (message) => {
277
+ throw new Error(`${className}: ${message}`);
278
+ });
279
+ const computed = checkComputed(resource.list?.computed, metadata, (name) => schema.fields.find((field) => field.name === name)?.enumValues, (message) => {
280
+ throw new Error(`${className}: ${message}`);
281
+ });
211
282
  const actions = resolveActions(resource.constructor, BASE_MEMBERS, (message) => {
212
283
  throw new Error(`${className}: ${message}`);
213
284
  });
@@ -257,6 +328,10 @@ let ResourceRegistry = class ResourceRegistry {
257
328
  fieldConfig: withIdLabel(schema.fields, mergeFieldConfig([definition.entity, resource.form?.create, resource.form?.update ?? resource.form?.create], resource.fields)),
258
329
  actions,
259
330
  order,
331
+ computed,
332
+ steppers: new Map(),
333
+ nav: definition.nav ?? true,
334
+ ...(definition.nav !== undefined ? { navOption: definition.nav } : {}),
260
335
  inlines: [],
261
336
  });
262
337
  }
@@ -1 +1 @@
1
- {"version":3,"file":"resource-registry.js","sourceRoot":"","sources":["../../src/registry/resource-registry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource-registry.js","sourceRoot":"","sources":["../../src/registry/resource-registry.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import type { ObjectLiteral, Repository, SelectQueryBuilder } from 'typeorm';
2
- import type { FilterOperator, SortDirection } from '../contract.js';
2
+ import type { FilterOperator, SortDirection, Tone } from '../contract.js';
3
3
  import type { DtoClass } from '../schema/dto-fields.js';
4
4
  import type { LocalizedText } from '../i18n/localized-text.js';
5
5
  import type { FieldsConfig, LayoutConfig } from '../schema/field-config.js';
@@ -34,6 +34,8 @@ export interface ListParams {
34
34
  pagination?: 'offset' | 'keyset';
35
35
  /** Soft-deletable resources: `only` lists the trash, `with` lists everything. */
36
36
  trashed?: 'only' | 'with';
37
+ /** A list tab (`list.tabs`): its `where` applies in `buildListQuery`. */
38
+ tab?: string;
37
39
  }
38
40
  export interface FindManyResult<T> {
39
41
  items: T[];
@@ -63,8 +65,8 @@ export interface ListConfig<T> {
63
65
  * tables; it sorts only by non-nullable columns, and counts nothing unless `count` says so.
64
66
  */
65
67
  pagination?: 'offset' | 'keyset';
66
- /** Default: every column except json and text, and every to-one relation. */
67
- columns?: FieldPath<T>[];
68
+ /** Default: every column except json and text, and every to-one relation. May name `computed` columns. */
69
+ columns?: Array<FieldPath<T> | (string & {})>;
68
70
  /** `'name'` for ascending, `'-createdAt'` for descending. Defaults to `-<primary key>`. */
69
71
  sort?: FieldPath<T> | `-${FieldPath<T>}`;
70
72
  pageSize?: number;
@@ -82,18 +84,114 @@ export interface ListConfig<T> {
82
84
  * Fields or paths, like `columns`; without it a card shows the title, then the columns.
83
85
  */
84
86
  mobile?: {
85
- title?: FieldPath<T>;
86
- subtitle?: FieldPath<T>;
87
- badge?: FieldPath<T>;
88
- meta?: FieldPath<T>[];
87
+ title?: FieldPath<T> | (string & {});
88
+ subtitle?: FieldPath<T> | (string & {});
89
+ badge?: FieldPath<T> | (string & {});
90
+ meta?: Array<FieldPath<T> | (string & {})>;
89
91
  };
92
+ /**
93
+ * Columns computed for each page of the list (spec §5.4): an image, a title with a subline, money with a previous
94
+ * price, a status badge, a count or an on/off toggle, from a field or path, an aggregate or first row of a one-to-many
95
+ * relation, an enum toggle, or your own batch function. Name them in `columns` (and `mobile`). A column is cut for a
96
+ * viewer who cannot see a field or relation it reads; aggregates and first rows count only the rows the viewer sees.
97
+ */
98
+ computed?: Record<string, ComputedColumn<T>>;
99
+ /**
100
+ * Tabs over the list (spec §5.5), at most 6, each with its count: «همه» (no filter), «فعال» (`filter`), «ناموجود»
101
+ * (`where`, for what filters cannot say). `filter` holds `filter[...]` list parameters; `where` adds conditions
102
+ * (`qb.alias`, like `query()`). Counts follow the viewer's scopes; `count: 'none'` shows no count.
103
+ */
104
+ tabs?: ListTab[];
105
+ }
106
+ export interface ListTab {
107
+ key: string;
108
+ label: LocalizedText;
109
+ filter?: Record<string, string>;
110
+ where?: (qb: SelectQueryBuilder<any>, ctx: AdminContext) => void;
111
+ count?: CountMode;
112
+ }
113
+ /** Where a computed column's value comes from. */
114
+ export type ComputedSource<T = any> =
115
+ /** A field or a to-one path (`category.name`). */
116
+ FieldPath<T> | (string & {})
117
+ /** Over a one-to-many relation's rows (the viewer's rows only): `count` needs no field. */
118
+ | {
119
+ aggregate: 'min' | 'max' | 'sum' | 'count';
120
+ relation: string;
121
+ field?: string;
122
+ }
123
+ /** A field of the relation's first row by `by` (the first SKU, the first image). */
124
+ | {
125
+ first: string;
126
+ field: string;
127
+ by: string;
128
+ }
129
+ /** An enum field shown as a switch: `on` is checked, a click writes `on` or `off` (a normal PATCH). */
130
+ | {
131
+ toggle: string;
132
+ on: string;
133
+ off: string;
134
+ }
135
+ /** Your own values, called once per page with its rows: `{ [rowId]: value }`. `fields` are the fields it reads. */
136
+ | {
137
+ compute: (rows: T[], ctx: AdminContext) => Promise<Record<string, unknown>>;
138
+ fields: string[];
139
+ };
140
+ export interface ComputedColumn<T = any> {
141
+ label: LocalizedText;
142
+ kind: 'image' | 'title' | 'money' | 'badge' | 'count' | 'toggle';
143
+ source: ComputedSource<T>;
144
+ /** `title`: the muted line under it (a SKU). */
145
+ subline?: ComputedSource<T>;
146
+ /** `money`: the earlier price, struck through. */
147
+ previous?: ComputedSource<T>;
148
+ /** `badge`: the value's label and tone; receives the row too. */
149
+ map?: (value: unknown, row: T) => {
150
+ label: LocalizedText;
151
+ tone: Tone;
152
+ };
153
+ /** `aggregate` and `first` sources only. */
154
+ sortable?: boolean;
90
155
  }
91
156
  export interface FormConfig {
92
157
  create?: DtoClass;
93
158
  /** Defaults to `create`. Update bodies are always validated as partial: only the fields sent are checked. */
94
159
  update?: DtoClass;
95
- /** Sections (with 1–3 columns), optionally grouped into tabs. Fields left out go into a last section. */
96
- layout?: LayoutConfig;
160
+ /**
161
+ * Sections (with 1–3 columns), optionally grouped into tabs. Fields left out go into a last section. For the
162
+ * design's record page, `{ main, aside }`: the sections in a main column and read-only cards beside it (spec §5.6).
163
+ */
164
+ layout?: LayoutConfig | {
165
+ main: LayoutConfig;
166
+ aside: AsideCardConfig[];
167
+ };
168
+ /** `view`: an existing record opens as text, and «Edit» turns its editable fields into inputs. Default `edit`. */
169
+ mode?: 'edit' | 'view';
170
+ /**
171
+ * The record's header: `badges` (fields shown as badges next to the title; default: every badge-widget field) and a
172
+ * `subtitle` line of field values and computed list columns (`{ computed: '<list.computed key>' }`), joined by «·».
173
+ * `stepper` names an enum field shown as the order's steps (Task 11).
174
+ */
175
+ header?: {
176
+ badges?: string[];
177
+ subtitle?: Array<string | {
178
+ computed: string;
179
+ }>;
180
+ stepper?: string;
181
+ };
182
+ }
183
+ /**
184
+ * A read-only card beside the record's main column: some of its own fields, or fields of a to-one relation's record
185
+ * (`relation`: the relation field), with a link to it (`link`, «مشاهده پروفایل»).
186
+ */
187
+ export interface AsideCardConfig {
188
+ title: LocalizedText;
189
+ icon?: string;
190
+ fields: string[] | {
191
+ relation: string;
192
+ fields: string[];
193
+ };
194
+ link?: boolean;
97
195
  }
98
196
  /** An external link shown in the record's header (Django's `view_on_site`): http(s) or a relative URL. */
99
197
  export interface RecordLinkConfig {
@@ -116,6 +214,10 @@ export declare abstract class AdminResourceBase<T extends ObjectLiteral = Object
116
214
  attachScoper(scoper: (qb: SelectQueryBuilder<any>, ctx: AdminContext | undefined) => SelectQueryBuilder<any>): void;
117
215
  /** `query()` and then the signed-in user's row scopes: what every read of this resource starts from. */
118
216
  private restrict;
217
+ /** @internal Called once by the registry: sorts by a sortable computed column (`list.computed`). */
218
+ attachComputedSort(sorter: (qb: SelectQueryBuilder<any>, field: string, ctx: AdminContext | undefined) => string | undefined): void;
219
+ /** @internal A query of this resource's rows as `ctx`'s user may read them (`query()` and scopes): computed columns of other resources aggregate over it. */
220
+ readQuery(alias: string, ctx: AdminContext | undefined): SelectQueryBuilder<T>;
119
221
  /** @internal Called once by the registry during bootstrap. */
120
222
  attachRepository(repository: Repository<T>): void;
121
223
  protected get repository(): Repository<T>;
@@ -30,6 +30,15 @@ export class AdminResourceBase {
30
30
  const restricted = this.query(qb, ctx);
31
31
  return this.#scoper ? this.#scoper(restricted, ctx) : restricted;
32
32
  }
33
+ #computedSort;
34
+ /** @internal Called once by the registry: sorts by a sortable computed column (`list.computed`). */
35
+ attachComputedSort(sorter) {
36
+ this.#computedSort = sorter;
37
+ }
38
+ /** @internal A query of this resource's rows as `ctx`'s user may read them (`query()` and scopes): computed columns of other resources aggregate over it. */
39
+ readQuery(alias, ctx) {
40
+ return this.restrict((ctx ? this.repositoryFor(ctx) : this.repository).createQueryBuilder(alias), ctx);
41
+ }
33
42
  /** @internal Called once by the registry during bootstrap. */
34
43
  attachRepository(repository) {
35
44
  this.#repository = repository;
@@ -55,8 +64,13 @@ export class AdminResourceBase {
55
64
  */
56
65
  buildListQuery(params, ctx, alias = 'entity') {
57
66
  const repository = ctx ? this.repositoryFor(ctx) : this.repository;
58
- const qb = this.restrict(repository.createQueryBuilder(alias), ctx ?? AdminContext.current());
59
- return applyListParams(qb, params, repository.metadata);
67
+ const context = ctx ?? AdminContext.current();
68
+ const qb = this.restrict(repository.createQueryBuilder(alias), context);
69
+ const sorter = this.#computedSort;
70
+ // The tab's own restriction (a tab with `where`); its filters arrive as normal filter params.
71
+ if (params.tab)
72
+ this.list?.tabs?.find((tab) => tab.key === params.tab)?.where?.(qb, context);
73
+ return applyListParams(qb, params, repository.metadata, sorter && ((query, field) => sorter(query, field, context)));
60
74
  }
61
75
  /**
62
76
  * Restricts which records the admin sees, on every read path: the list (`buildListQuery`), `findOne` (so GET, PATCH,
@@ -1 +1 @@
1
- {"version":3,"file":"admin-resource-base.js","sourceRoot":"","sources":["../../src/resource/admin-resource-base.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"admin-resource-base.js","sourceRoot":"","sources":["../../src/resource/admin-resource-base.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { columnToField, isSupportedColumn } from './column-field.js';
2
- import { applyFieldConfig, checkFieldConfig, checkLayout, localizeLayout, mergeFieldConfig } from './field-config.js';
2
+ import { applyFieldConfig, checkFieldConfig, checkLayout, localizeLayout, mainLayout, mergeFieldConfig } from './field-config.js';
3
3
  import { dtoObjectField, embeddedField, nestedTypeOf, topEmbedded } from './nested-fields.js';
4
4
  import { isToOne, pathField as toPathField, relationFields, resolvePath } from './relation-fields.js';
5
5
  import { dtoConstraints, hasDtoInitializer, isConditionalProperty } from './dto-constraints.js';
@@ -139,8 +139,14 @@ export function buildResourceSchema(input) {
139
139
  .map((field) => field.name);
140
140
  if (columns.length === 0)
141
141
  fail('list.columns must name at least one column');
142
+ const computedConfig = resource.list?.computed ?? {};
143
+ const isComputed = (name) => Object.hasOwn(computedConfig, name);
144
+ for (const key of Object.keys(computedConfig))
145
+ if (byName.has(key))
146
+ fail(`list.computed.${key}: the name is a field's; give the column another name`);
142
147
  for (const column of columns)
143
- lookup('list.columns', column);
148
+ if (!isComputed(column))
149
+ lookup('list.columns', column);
144
150
  const rawSort = resource.list?.sort ?? `-${primaryKeys[0]}`;
145
151
  const direction = rawSort.startsWith('-') ? 'desc' : 'asc';
146
152
  const sortField = rawSort.replace(/^-/, '');
@@ -167,10 +173,11 @@ export function buildResourceSchema(input) {
167
173
  : undefined;
168
174
  if (mobile) {
169
175
  for (const key of ['title', 'subtitle', 'badge'])
170
- if (mobile[key])
176
+ if (mobile[key] && !isComputed(mobile[key]))
171
177
  lookup(`list.mobile.${key}`, mobile[key]);
172
178
  for (const name of mobile.meta)
173
- lookup('list.mobile.meta', name);
179
+ if (!isComputed(name))
180
+ lookup('list.mobile.meta', name);
174
181
  }
175
182
  for (const [setting, names] of [['list.columns', columns], ['list.filters', resource.list?.filters ?? []], ['list.search', resource.list?.search ?? []], ['list.editable', editable]]) {
176
183
  const repeated = names.find((name, index) => names.indexOf(name) !== index);
@@ -207,7 +214,12 @@ export function buildResourceSchema(input) {
207
214
  if (!keysetSortable(sortField))
208
215
  fail(`list.sort: keyset lists sort by a non-nullable column, not "${sortField}"`);
209
216
  sortable = sortable.filter(keysetSortable);
217
+ const sortedComputed = Object.keys(computedConfig).find((key) => computedConfig[key].sortable);
218
+ if (sortedComputed)
219
+ fail(`list.computed.${sortedComputed}: keyset lists cannot sort by a computed column`);
210
220
  }
221
+ // Aggregates and first rows sort through a subquery (checkComputed allows `sortable` on those only).
222
+ sortable = [...sortable, ...Object.keys(computedConfig).filter((key) => computedConfig[key].sortable)];
211
223
  const entityConstraints = (name, field = byName.get(name), column = columnByName.get(name)) => {
212
224
  if (!field)
213
225
  return {};
@@ -277,9 +289,54 @@ export function buildResourceSchema(input) {
277
289
  const readonlyNames = [...fieldConfig].filter(([, options]) => options.readonly).map(([name]) => name);
278
290
  const writableUpdate = update.filter((name) => !readonlyNames.includes(name));
279
291
  const formReadonly = readonlyNames.filter((name) => update.includes(name) || byName.has(name));
280
- const layout = resource.form?.layout;
292
+ const layout = mainLayout(resource.form?.layout);
281
293
  if (layout)
282
- checkLayout(layout, [...new Set([...create, ...update, ...formReadonly])], fail, { inlines: true });
294
+ checkLayout(layout, [...new Set([...create, ...update, ...formReadonly])], fail, { inlines: true, summary: { fields: [...byName.keys()], computed: Object.keys(resource.list?.computed ?? {}) } });
295
+ // Aside cards and the header read fields; relation cards are checked by the registry once every resource is known.
296
+ const asideConfig = resource.form?.layout && !Array.isArray(resource.form.layout) ? resource.form.layout.aside : undefined;
297
+ if (asideConfig !== undefined && !Array.isArray(asideConfig))
298
+ fail('form.layout.aside must be a list of cards');
299
+ const ownField = (setting, name) => {
300
+ if (!byName.has(name))
301
+ fail(`${setting}: unknown field "${name}" on ${entityName}${didYouMean(name, [...byName.keys()])}`);
302
+ };
303
+ (asideConfig ?? []).forEach((card, index) => {
304
+ if (Array.isArray(card.fields))
305
+ for (const name of card.fields)
306
+ ownField(`form.layout.aside[${index}]`, name);
307
+ else if (!card.fields || typeof card.fields.relation !== 'string' || !Array.isArray(card.fields.fields))
308
+ fail(`form.layout.aside[${index}]: fields is a list, or { relation, fields }`);
309
+ else {
310
+ const relationField = byName.get(card.fields.relation);
311
+ if (!relationField || relationField.type !== 'relation' || relationField.relation?.kind !== 'to-one')
312
+ fail(`form.layout.aside[${index}]: "${card.fields.relation}" is not a to-one relation field of ${entityName}`);
313
+ }
314
+ });
315
+ const mode = resource.form?.mode;
316
+ if (mode !== undefined && mode !== 'edit' && mode !== 'view')
317
+ fail('form.mode is edit or view');
318
+ const headerConfig = resource.form?.header;
319
+ for (const name of headerConfig?.badges ?? [])
320
+ ownField('form.header.badges', name);
321
+ for (const item of headerConfig?.subtitle ?? []) {
322
+ if (typeof item === 'string')
323
+ ownField('form.header.subtitle', item);
324
+ else if (!Object.hasOwn(resource.list?.computed ?? {}, item.computed))
325
+ fail(`form.header.subtitle: "${item.computed}" is not a list.computed column`);
326
+ }
327
+ if (headerConfig?.stepper !== undefined) {
328
+ const stepper = byName.get(headerConfig.stepper);
329
+ if (!stepper || stepper.type !== 'enum')
330
+ fail(`form.header.stepper: "${headerConfig.stepper}" is not an enum field of ${entityName}`);
331
+ }
332
+ const text = (label) => (typeof label === 'string' ? label : (Object.values(label)[0] ?? ''));
333
+ const aside = asideConfig?.map((card) => ({
334
+ title: text(card.title),
335
+ ...(card.icon ? { icon: card.icon } : {}),
336
+ fields: Array.isArray(card.fields) ? [...card.fields] : [...card.fields.fields],
337
+ // `resource` is filled in by the registry once the target is known.
338
+ ...(Array.isArray(card.fields) ? {} : { relation: { field: card.fields.relation, resource: '', link: card.link === true } }),
339
+ }));
283
340
  const dedicatedUpdateDto = resource.form?.update;
284
341
  const constraints = {
285
342
  create: compile(create, createDto, (name) => requiredOnCreate.includes(name), true),
@@ -311,6 +368,35 @@ export function buildResourceSchema(input) {
311
368
  search,
312
369
  editable,
313
370
  ...(mobile ? { mobile } : {}),
371
+ ...(resource.list?.tabs
372
+ ? {
373
+ tabs: resource.list.tabs.map((tab) => ({
374
+ key: tab.key,
375
+ // The first language given; AdminApiService localizes per request.
376
+ label: typeof tab.label === 'string' ? tab.label : (Object.values(tab.label)[0] ?? tab.key),
377
+ filter: { ...(tab.filter ?? {}) },
378
+ where: typeof tab.where === 'function',
379
+ count: tab.count ?? 'exact',
380
+ })),
381
+ }
382
+ : {}),
383
+ ...(Object.keys(computedConfig).length > 0
384
+ ? {
385
+ computed: Object.fromEntries(Object.entries(computedConfig).map(([key, column]) => {
386
+ const source = column.source;
387
+ return [
388
+ key,
389
+ {
390
+ // The first language given; AdminApiService localizes per request.
391
+ label: typeof column.label === 'string' ? column.label : (Object.values(column.label)[0] ?? key),
392
+ kind: column.kind,
393
+ sortable: column.sortable === true,
394
+ ...(typeof source === 'object' && source.toggle ? { toggle: { field: source.toggle, on: source.on, off: source.off } } : {}),
395
+ },
396
+ ];
397
+ })),
398
+ }
399
+ : {}),
314
400
  },
315
401
  form: {
316
402
  create,
@@ -319,6 +405,17 @@ export function buildResourceSchema(input) {
319
405
  readonly: formReadonly,
320
406
  constraints,
321
407
  ...(layout ? { layout: localizeLayout(layout, '', '') } : {}),
408
+ ...(aside ? { aside } : {}),
409
+ ...(mode === 'view' ? { mode: 'view' } : {}),
410
+ ...(headerConfig
411
+ ? {
412
+ header: {
413
+ ...(headerConfig.badges ? { badges: [...headerConfig.badges] } : {}),
414
+ ...(headerConfig.subtitle ? { subtitle: headerConfig.subtitle.map((item) => (typeof item === 'string' ? { field: item } : { computed: item.computed })) } : {}),
415
+ ...(headerConfig.stepper ? { stepper: headerConfig.stepper } : {}),
416
+ },
417
+ }
418
+ : {}),
322
419
  },
323
420
  };
324
421
  }