Skip to content

Commit 0373f4a

Browse files
authored
Merge pull request #408 from devforth/AdminForth/948
fix: replace record with updates in updateResourceRecord method
2 parents b5c6f80 + 102bd40 commit 0373f4a

File tree

2 files changed

+20
-13
lines changed

2 files changed

+20
-13
lines changed

adminforth/index.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -593,27 +593,33 @@ 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
}
603605

606+
if (record) {
607+
console.warn(`updateResourceRecord function received 'record' param which is deprecated and will be removed in future version, please use 'updates' instead.`);
608+
}
609+
604610
// remove editReadonly columns from record
605611
for (const column of resource.columns.filter((col) => col.editReadonly)) {
606-
if (column.name in record)
607-
delete record[column.name];
612+
if (column.name in dataToUse)
613+
delete dataToUse[column.name];
608614
}
609615

610616
// execute hook if needed
611617
for (const hook of listify(resource.hooks?.edit?.beforeSave)) {
612618
const resp = await hook({
613619
recordId,
614620
resource,
615-
record,
616-
updates: record,
621+
record: dataToUse,
622+
updates: dataToUse,
617623
oldRecord,
618624
adminUser,
619625
adminforth: this,
@@ -633,13 +639,13 @@ class AdminForth implements IAdminForth {
633639
const newValues = {};
634640
const connector = this.connectors[resource.dataSource];
635641

636-
for (const recordField in record) {
637-
if (record[recordField] !== oldRecord[recordField]) {
642+
for (const recordField in dataToUse) {
643+
if (dataToUse[recordField] !== oldRecord[recordField]) {
638644
// leave only changed fields to reduce data transfer/modifications in db
639645
const column = resource.columns.find((col) => col.name === recordField);
640646
if (!column || !column.virtual) {
641647
// exclude virtual columns
642-
newValues[recordField] = record[recordField];
648+
newValues[recordField] = dataToUse[recordField];
643649
}
644650
}
645651
}
@@ -652,8 +658,8 @@ class AdminForth implements IAdminForth {
652658
for (const hook of listify(resource.hooks?.edit?.afterSave)) {
653659
const resp = await hook({
654660
resource,
655-
record,
656-
updates: record,
661+
record: dataToUse,
662+
updates: dataToUse,
657663
adminUser,
658664
oldRecord,
659665
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)