From 172fc0e714f5b4d0f60904b53deea6bca64430b6 Mon Sep 17 00:00:00 2001 From: yaroslav8765 Date: Thu, 23 Oct 2025 15:53:28 +0300 Subject: [PATCH 1/2] fix: replace record with updates in updateResourceRecord method --- adminforth/index.ts | 27 ++++++++++++++------------- adminforth/types/Back.ts | 3 ++- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/adminforth/index.ts b/adminforth/index.ts index 28b4dd4d..cb0a4ae9 100644 --- a/adminforth/index.ts +++ b/adminforth/index.ts @@ -593,18 +593,19 @@ class AdminForth implements IAdminForth { * record is partial record with only changed fields */ async updateResourceRecord( - { resource, recordId, record, oldRecord, adminUser, extra }: - { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra } + { resource, recordId, record, oldRecord, adminUser, extra, updates }: + | { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates?: never } + | { resource: AdminForthResource, recordId: any, record?: never, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates: any } ): Promise<{ error?: string }> { - const err = this.validateRecordValues(resource, record, 'edit'); + const dataToUse = updates || record; + const err = this.validateRecordValues(resource, dataToUse, 'edit'); if (err) { return { error: err }; } - // remove editReadonly columns from record for (const column of resource.columns.filter((col) => col.editReadonly)) { - if (column.name in record) - delete record[column.name]; + if (column.name in dataToUse) + delete dataToUse[column.name]; } // execute hook if needed @@ -612,8 +613,8 @@ class AdminForth implements IAdminForth { const resp = await hook({ recordId, resource, - record, - updates: record, + record: dataToUse, + updates: dataToUse, oldRecord, adminUser, adminforth: this, @@ -633,13 +634,13 @@ class AdminForth implements IAdminForth { const newValues = {}; const connector = this.connectors[resource.dataSource]; - for (const recordField in record) { - if (record[recordField] !== oldRecord[recordField]) { + for (const recordField in dataToUse) { + if (dataToUse[recordField] !== oldRecord[recordField]) { // leave only changed fields to reduce data transfer/modifications in db const column = resource.columns.find((col) => col.name === recordField); if (!column || !column.virtual) { // exclude virtual columns - newValues[recordField] = record[recordField]; + newValues[recordField] = dataToUse[recordField]; } } } @@ -652,8 +653,8 @@ class AdminForth implements IAdminForth { for (const hook of listify(resource.hooks?.edit?.afterSave)) { const resp = await hook({ resource, - record, - updates: record, + record: dataToUse, + updates: dataToUse, adminUser, oldRecord, recordId, diff --git a/adminforth/types/Back.ts b/adminforth/types/Back.ts index 035a7b3d..5709f16b 100644 --- a/adminforth/types/Back.ts +++ b/adminforth/types/Back.ts @@ -363,7 +363,8 @@ export interface IAdminForth { ): Promise<{ error?: string, createdRecord?: any, newRecordId?: any }>; updateResourceRecord( - params: { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra } + params: { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates?: never } + | { resource: AdminForthResource, recordId: any, record?: never, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates: any } ): Promise<{ error?: string }>; deleteResourceRecord( From 102bd4062fc985c80664c8831aa25922a2f812ec Mon Sep 17 00:00:00 2001 From: yaroslav8765 Date: Fri, 24 Oct 2025 16:39:03 +0300 Subject: [PATCH 2/2] fix: warn about deprecated 'record' parameter in updateResourceRecord function --- adminforth/index.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/adminforth/index.ts b/adminforth/index.ts index cb0a4ae9..3068edcb 100644 --- a/adminforth/index.ts +++ b/adminforth/index.ts @@ -602,6 +602,11 @@ class AdminForth implements IAdminForth { if (err) { return { error: err }; } + + if (record) { + console.warn(`updateResourceRecord function received 'record' param which is deprecated and will be removed in future version, please use 'updates' instead.`); + } + // remove editReadonly columns from record for (const column of resource.columns.filter((col) => col.editReadonly)) { if (column.name in dataToUse)