Skip to content

Commit 238aea6

Browse files
authored
Merge pull request #138 from devforth/fix-virtual-column-grouping
fix: allow virtual columns to be grouped
2 parents 26be6a8 + 86011cd commit 238aea6

File tree

2 files changed

+25
-29
lines changed

2 files changed

+25
-29
lines changed

adminforth/index.ts

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -207,29 +207,6 @@ class AdminForth implements IAdminForth {
207207
return plugins[0] as T;
208208
}
209209

210-
validateFieldGroups(fieldGroups: {
211-
groupName: string;
212-
columns: string[];
213-
}[], fieldTypes: {
214-
[key: string]: AdminForthResourceColumn;
215-
}): void {
216-
if (!fieldGroups) return;
217-
const allColumns = Object.keys(fieldTypes);
218-
219-
fieldGroups.forEach((group) => {
220-
group.columns.forEach((col) => {
221-
if (!allColumns.includes(col)) {
222-
const similar = suggestIfTypo(allColumns, col);
223-
throw new Error(
224-
`Group '${group.groupName}' has an unknown column '${col}'. ${
225-
similar ? `Did you mean '${similar}'?` : ''
226-
}`
227-
);
228-
}
229-
});
230-
});
231-
}
232-
233210
validateRecordValues(resource: AdminForthResource, record: any): any {
234211
// check if record with validation is valid
235212
for (const column of resource.columns.filter((col) => col.name in record && col.validation)) {
@@ -341,12 +318,6 @@ class AdminForth implements IAdminForth {
341318
// first find discovered values, but allow override
342319
res.columns[i] = { ...fieldTypes[col.name], ...col };
343320
});
344-
345-
this.validateFieldGroups(res.options.fieldGroups, fieldTypes);
346-
this.validateFieldGroups(res.options.showFieldGroups, fieldTypes);
347-
this.validateFieldGroups(res.options.createFieldGroups, fieldTypes);
348-
this.validateFieldGroups(res.options.editFieldGroups, fieldTypes);
349-
350321

351322
// check if primaryKey column is present
352323
if (!res.columns.some((col) => col.primaryKey)) {

adminforth/modules/configValidator.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,25 @@ export default class ConfigValidator implements IConfigValidator {
330330
return showInTransformedToObject as ShowIn;
331331
}
332332

333+
validateFieldGroups(fieldGroups: {
334+
groupName: string;
335+
columns: string[];
336+
}[], resourceColumns: string[]): void {
337+
if (!fieldGroups) return;
338+
339+
fieldGroups.forEach((group) => {
340+
group.columns.forEach((col) => {
341+
if (!resourceColumns.includes(col)) {
342+
const similar = suggestIfTypo(resourceColumns, col);
343+
throw new Error(
344+
`Group '${group.groupName}' has an unknown column '${col}'. ${similar ? `Did you mean '${similar}'?` : ''
345+
}`
346+
);
347+
}
348+
});
349+
});
350+
}
351+
333352
validateAndNormalizeCustomActions(resInput: AdminForthResourceInput, res: Partial<AdminForthResource>, errors: string[]): any[] {
334353
if (!resInput.options?.actions) {
335354
return [];
@@ -671,6 +690,12 @@ export default class ConfigValidator implements IConfigValidator {
671690
options.bulkActions = this.validateAndNormalizeBulkActions(resInput, res, errors);
672691
options.actions = this.validateAndNormalizeCustomActions(resInput, res, errors);
673692

693+
const allColumnsList = res.columns.map((col) => col.name);
694+
this.validateFieldGroups(options.fieldGroups, allColumnsList);
695+
this.validateFieldGroups(options.showFieldGroups, allColumnsList);
696+
this.validateFieldGroups(options.createFieldGroups, allColumnsList);
697+
this.validateFieldGroups(options.editFieldGroups, allColumnsList);
698+
674699
// if pageInjection is a string, make array with one element. Also check file exists
675700
const possibleInjections = ['beforeBreadcrumbs', 'afterBreadcrumbs', 'bottom', 'threeDotsDropdownItems', 'customActionIcons'];
676701
const possiblePages = ['list', 'show', 'create', 'edit'];

0 commit comments

Comments
 (0)