@@ -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,
0 commit comments