@@ -9,8 +9,19 @@ export function checkFieldInTemplate(template: string, field: string) {
99}
1010
1111/** Simple check which fields are used */
12- function shouldUpdate ( template : string , computedField : string , val : Record < string , any > , oldVal : Record < string , any > ) {
13- for ( const key of Object . keys ( val ) ) {
12+ function shouldUpdate (
13+ template : string ,
14+ computedField : string ,
15+ val : Record < string , any > ,
16+ oldVal : Record < string , any > ,
17+ pk : string | number ,
18+ ) {
19+ // creating new item
20+ if ( val . id && pk === '+' ) {
21+ return false ;
22+ }
23+
24+ for ( const key of Object . keys ( { ...oldVal , ...val } ) ) {
1425 if (
1526 key !== computedField &&
1627 checkFieldInTemplate ( template , key ) &&
@@ -59,13 +70,20 @@ export const useDeepValues = (
5970 async ( val , oldVal ) => {
6071 const valObj = JSON . parse ( val ) ;
6172 const oldValObj = oldVal !== undefined ? JSON . parse ( oldVal ) : { } ;
62- if ( ! shouldUpdate ( template , computedField , valObj , oldValObj ) ) {
73+ if ( ! shouldUpdate ( template , computedField , valObj , oldValObj , pk ) ) {
6374 return ;
6475 }
6576
77+ for ( const key of Object . keys ( oldValObj ) ) {
78+ if ( ! ( key in valObj ) ) {
79+ valObj [ key ] = null ;
80+ }
81+ }
82+
6683 let relationalData : Record < string , any > = { } ;
84+ const pkFinal = valObj . id || pk ;
6785
68- for ( const key of Object . keys ( values . value ) ) {
86+ for ( const key of Object . keys ( valObj ) ) {
6987 const relation = relations . value . find ( ( rel ) => [ rel . meta ?. one_field , rel . meta ?. many_field ] . includes ( key ) ) ;
7088
7189 if ( ! relation || ! checkFieldInTemplate ( template , key ) ) {
@@ -75,7 +93,7 @@ export const useDeepValues = (
7593 const isM2O = relation . collection === collection ;
7694 const fieldName = isM2O ? relation . meta ?. many_field : relation . meta ?. one_field ;
7795
78- let fieldChanges = values . value [ fieldName ! ] as IRelationUpdate ?? {
96+ let fieldChanges = valObj [ fieldName ! ] as IRelationUpdate ?? {
7997 create : [ ] ,
8098 update : [ ] ,
8199 delete : [ ] ,
@@ -109,12 +127,12 @@ export const useDeepValues = (
109127 itemCache = { } ;
110128 }
111129
112- if ( pk !== '+' ) {
130+ if ( pkFinal !== '+' ) {
113131 let data ;
114132 if ( key in fieldCache ) {
115133 data = fieldCache [ key ] ;
116134 } else {
117- data = ( await api . get ( `items/${ collection } /${ pk } ` , {
135+ data = ( await api . get ( `items/${ collection } /${ pkFinal } ` , {
118136 params : {
119137 fields : [ key ] ,
120138 } ,
@@ -171,7 +189,7 @@ export const useDeepValues = (
171189 relationalData [ key ] = isM2O ? arrayOfData [ 0 ] : arrayOfData ;
172190 }
173191
174- finalValues . value = { ...values . value , ...relationalData } ;
192+ finalValues . value = { ...valObj , ...relationalData } ;
175193 } ,
176194 {
177195 deep : false ,
0 commit comments