Skip to content

Commit 172fc0e

Browse files
committed
fix: replace record with updates in updateResourceRecord method
1 parent 83040a3 commit 172fc0e

File tree

2 files changed

+16
-14
lines changed

2 files changed

+16
-14
lines changed

adminforth/index.ts

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -593,27 +593,28 @@ class AdminForth implements IAdminForth {
593593
* record is partial record with only changed fields
594594
*/
595595
async updateResourceRecord(
596-
{ resource, recordId, record, oldRecord, adminUser, extra }:
597-
{ resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra }
596+
{ resource, recordId, record, oldRecord, adminUser, extra, updates }:
597+
| { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates?: never }
598+
| { resource: AdminForthResource, recordId: any, record?: never, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates: any }
598599
): Promise<{ error?: string }> {
599-
const err = this.validateRecordValues(resource, record, 'edit');
600+
const dataToUse = updates || record;
601+
const err = this.validateRecordValues(resource, dataToUse, 'edit');
600602
if (err) {
601603
return { error: err };
602604
}
603-
604605
// remove editReadonly columns from record
605606
for (const column of resource.columns.filter((col) => col.editReadonly)) {
606-
if (column.name in record)
607-
delete record[column.name];
607+
if (column.name in dataToUse)
608+
delete dataToUse[column.name];
608609
}
609610

610611
// execute hook if needed
611612
for (const hook of listify(resource.hooks?.edit?.beforeSave)) {
612613
const resp = await hook({
613614
recordId,
614615
resource,
615-
record,
616-
updates: record,
616+
record: dataToUse,
617+
updates: dataToUse,
617618
oldRecord,
618619
adminUser,
619620
adminforth: this,
@@ -633,13 +634,13 @@ class AdminForth implements IAdminForth {
633634
const newValues = {};
634635
const connector = this.connectors[resource.dataSource];
635636

636-
for (const recordField in record) {
637-
if (record[recordField] !== oldRecord[recordField]) {
637+
for (const recordField in dataToUse) {
638+
if (dataToUse[recordField] !== oldRecord[recordField]) {
638639
// leave only changed fields to reduce data transfer/modifications in db
639640
const column = resource.columns.find((col) => col.name === recordField);
640641
if (!column || !column.virtual) {
641642
// exclude virtual columns
642-
newValues[recordField] = record[recordField];
643+
newValues[recordField] = dataToUse[recordField];
643644
}
644645
}
645646
}
@@ -652,8 +653,8 @@ class AdminForth implements IAdminForth {
652653
for (const hook of listify(resource.hooks?.edit?.afterSave)) {
653654
const resp = await hook({
654655
resource,
655-
record,
656-
updates: record,
656+
record: dataToUse,
657+
updates: dataToUse,
657658
adminUser,
658659
oldRecord,
659660
recordId,

adminforth/types/Back.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -363,7 +363,8 @@ export interface IAdminForth {
363363
): Promise<{ error?: string, createdRecord?: any, newRecordId?: any }>;
364364

365365
updateResourceRecord(
366-
params: { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra }
366+
params: { resource: AdminForthResource, recordId: any, record: any, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates?: never }
367+
| { resource: AdminForthResource, recordId: any, record?: never, oldRecord: any, adminUser: AdminUser, extra?: HttpExtra, updates: any }
367368
): Promise<{ error?: string }>;
368369

369370
deleteResourceRecord(

0 commit comments

Comments
 (0)