Skip to content

Commit 0bb5ae0

Browse files
authored
Merge pull request #216 from devforth/fix-ignore-empty-virtual-fields
fix: handle virtual columns in saveRecord function to prevent empty v…
2 parents 4de0654 + 7d1fa97 commit 0bb5ae0

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

adminforth/index.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -236,9 +236,15 @@ class AdminForth implements IAdminForth {
236236
});
237237
}
238238

239-
validateRecordValues(resource: AdminForthResource, record: any): any {
239+
validateRecordValues(resource: AdminForthResource, record: any, mode: 'create' | 'edit'): any {
240240
// check if record with validation is valid
241241
for (const column of resource.columns.filter((col) => col.name in record && col.validation)) {
242+
const required = typeof column.required === 'object'
243+
? column.required[mode]
244+
: true;
245+
246+
if (!required && !record[column.name]) continue;
247+
242248
let error = null;
243249
if (column.isArray?.enabled) {
244250
error = record[column.name].reduce((err, item) => {
@@ -408,7 +414,7 @@ class AdminForth implements IAdminForth {
408414
{ resource: AdminForthResource, record: any, adminUser: AdminUser, extra?: HttpExtra }
409415
): Promise<{ error?: string, createdRecord?: any }> {
410416

411-
const err = this.validateRecordValues(resource, record);
417+
const err = this.validateRecordValues(resource, record, 'create');
412418
if (err) {
413419
return { error: err };
414420
}
@@ -477,7 +483,7 @@ class AdminForth implements IAdminForth {
477483
{ resource, recordId, record, oldRecord, adminUser, extra }:
478484
{ resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra }
479485
): Promise<{ error?: string }> {
480-
const err = this.validateRecordValues(resource, record);
486+
const err = this.validateRecordValues(resource, record, 'edit');
481487
if (err) {
482488
return { error: err };
483489
}

adminforth/spa/src/views/EditView.vue

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ async function saveRecord() {
150150
let columnIsUpdated = record.value[key] !== coreStore.record[key];
151151
152152
const column = coreStore.resource.columns.find((c) => c.name === key);
153+
153154
if (column?.foreignResource) {
154155
columnIsUpdated = record.value[key] !== coreStore.record[key]?.pk;
155156
}

0 commit comments

Comments
 (0)