@nest-my-admin/core 0.3.1 → 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 +33 -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 +210 -11
  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 +245 -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 +14 -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 +112 -11
  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 +105 -7
  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),
@@ -292,7 +349,8 @@ export function buildResourceSchema(input) {
292
349
  group: definition.group ?? moduleGroup,
293
350
  ...(definition.icon ? { icon: definition.icon } : {}),
294
351
  primaryKeys,
295
- creatable: children.length === 0,
352
+ creatable: children.length === 0 && !definition.readonly,
353
+ ...(definition.readonly ? { readonly: true } : {}),
296
354
  related: [], // filled in by the registry once every resource is known
297
355
  actions: [], // filled in by the registry from the resource's @AdminAction methods
298
356
  softDelete: metadata.columns.some((column) => column.isDeleteDate),
@@ -310,6 +368,35 @@ export function buildResourceSchema(input) {
310
368
  search,
311
369
  editable,
312
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
+ : {}),
313
400
  },
314
401
  form: {
315
402
  create,
@@ -318,6 +405,17 @@ export function buildResourceSchema(input) {
318
405
  readonly: formReadonly,
319
406
  constraints,
320
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
+ : {}),
321
419
  },
322
420
  };
323
421
  }