@@ -259,6 +259,7 @@ export const INCLUDE_DEEP = {
259
259
export enum ODataModelState {
260
260
Added ,
261
261
Removed ,
262
+ Changed ,
262
263
Unchanged ,
263
264
}
264
265
@@ -625,6 +626,7 @@ export class ODataModelField<F> {
625
626
}
626
627
627
628
export class ODataModelAttribute < T > {
629
+ private state : ODataModelState = ODataModelState . Unchanged ;
628
630
private value ?: T | ODataModel < T > | ODataCollection < T , ODataModel < T > > | null ;
629
631
private change ?: T | ODataModel < T > | ODataCollection < T , ODataModel < T > > | null ;
630
632
private subscription ?: Subscription ;
@@ -673,7 +675,7 @@ export class ODataModelAttribute<T> {
673
675
| ODataCollection < T , ODataModel < T > >
674
676
| null
675
677
| undefined {
676
- return this . change !== undefined ? this . change : this . value ;
678
+ return this . state === ODataModelState . Changed ? this . change : this . value ;
677
679
}
678
680
679
681
set (
@@ -708,11 +710,12 @@ export class ODataModelAttribute<T> {
708
710
: ! Types . isEqual ( current , value ) ;
709
711
if ( reset ) {
710
712
this . value = value ;
711
- this . change = undefined ;
713
+ this . state = ODataModelState . Unchanged ;
712
714
} else if ( Types . isEqual ( value , this . value ) ) {
713
- this . change = undefined ;
715
+ this . state = ODataModelState . Unchanged ;
714
716
} else if ( changed ) {
715
717
this . change = value ;
718
+ this . state = ODataModelState . Changed ;
716
719
}
717
720
if (
718
721
ODataModelOptions . isModel ( value ) ||
@@ -731,7 +734,7 @@ export class ODataModelAttribute<T> {
731
734
} : { include_navigation ?: boolean } = { } ) : boolean {
732
735
const current = this . get ( ) ;
733
736
return (
734
- this . change !== undefined ||
737
+ this . state === ODataModelState . Changed ||
735
738
( ( ODataModelOptions . isModel ( current ) ||
736
739
ODataModelOptions . isCollection ( current ) ) &&
737
740
(
@@ -748,7 +751,7 @@ export class ODataModelAttribute<T> {
748
751
this . unlink (
749
752
this . change as ODataModel < T > | ODataCollection < T , ODataModel < T > > ,
750
753
) ;
751
- this . change = undefined ;
754
+ this . state = ODataModelState . Unchanged ;
752
755
if (
753
756
ODataModelOptions . isModel ( this . value ) ||
754
757
ODataModelOptions . isCollection ( this . value )
@@ -1638,17 +1641,19 @@ export class ODataModelOptions<T> {
1638
1641
ODataModelOptions . isModel ( value )
1639
1642
) {
1640
1643
// Check for reference
1641
- const referenced = this . resolveReferenced ( self , attr ) ;
1644
+ const referenced = this . resolveReferenced ( self , attr , {
1645
+ resolve : false ,
1646
+ } ) ;
1642
1647
if ( value !== null && referenced !== null && referenced !== undefined ) {
1643
- ( value as ODataModel < F > ) . assign ( referenced as Partial < F > , {
1644
- silent : true ,
1645
- } ) ;
1646
- } else if ( value !== null && referenced === null ) {
1647
- // New value is null
1648
- ( attr as ODataModelAttribute < F > ) . set ( null ) ;
1649
- } else if ( value === null && referenced !== null ) {
1650
- // New value is undefined
1651
- ( attr as ODataModelAttribute < F > ) . set ( undefined ) ;
1648
+ ( value as ODataModel < F > ) . assign ( referenced as Partial < F > , {
1649
+ silent : true ,
1650
+ } ) ;
1651
+ } else if ( value !== null && referenced === null ) {
1652
+ // New value is null
1653
+ ( attr as ODataModelAttribute < F > ) . set ( null ) ;
1654
+ } else if ( value === null && referenced !== null ) {
1655
+ // New value is undefined
1656
+ ( attr as ODataModelAttribute < F > ) . set ( undefined ) ;
1652
1657
}
1653
1658
}
1654
1659
return value ;
@@ -1794,7 +1799,9 @@ export class ODataModelOptions<T> {
1794
1799
// Resolve referentials
1795
1800
if ( ! ODataModelOptions . isCollection ( attr . get ( ) ) ) {
1796
1801
const meta = this . api . optionsForType < F > ( modelField . type ) ;
1797
- const ref = meta ?. resolveReferential ( attr . get ( ) , attr ) ;
1802
+ const ref = meta ?. resolveReferential ( attr . get ( ) , attr , {
1803
+ resolve : false ,
1804
+ } ) ;
1798
1805
if ( ref !== null && ref !== undefined ) {
1799
1806
Object . assign ( self , ref ) ;
1800
1807
}
0 commit comments