@@ -27,6 +27,7 @@ import FieldType from '../../../model/FieldType';
27
27
import { useApiRef } from '../context/ApiProvider' ;
28
28
29
29
const LOAD_SOURCE = 'one-resolve' ;
30
+ const DEFAULT_INCOMING_TRANSFORM = ( data : IAnything ) => data ;
30
31
31
32
/**
32
33
* Represents the resolved properties for a hook.
@@ -42,6 +43,7 @@ interface IResolvedHookProps<Data = IAnything, Payload = IAnything> {
42
43
features : PickProp < IOneProps < Data , Payload > , 'features' > ;
43
44
change : PickProp < IOneProps < Data , Payload > , 'change' > ;
44
45
loadStart : PickProp < IOneProps < Data , Payload > , 'loadStart' > ;
46
+ incomingTransform : PickProp < IOneProps < Data , Payload > , 'incomingTransform' > ;
45
47
loadEnd : PickProp < IOneProps < Data , Payload > , 'loadEnd' > ;
46
48
}
47
49
@@ -92,6 +94,7 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
92
94
change,
93
95
loadStart,
94
96
loadEnd,
97
+ incomingTransform = DEFAULT_INCOMING_TRANSFORM ,
95
98
} : IResolvedHookProps < Data , Payload > ) : [ Data | null , ( v : Data ) => void ] => {
96
99
const [ data , setData ] = useState < Data | null > ( null ) ;
97
100
const data$ = useActualValue ( data ) ;
@@ -118,11 +121,11 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
118
121
if ( result instanceof Promise ) {
119
122
const newData = assign ( { } , buildObj < Data > ( fields , payload , features ) , deepClone ( await result ) ) ;
120
123
change ! ( newData , true ) ;
121
- isMounted . current && setData ( newData ) ;
124
+ isMounted . current && setData ( incomingTransform ( newData , payload ) ) ;
122
125
} else {
123
126
const newData = assign ( { } , buildObj < Data > ( fields , payload , features ) , deepClone ( result ) ) ;
124
127
change ! ( newData , true ) ;
125
- isMounted . current && setData ( newData ) ;
128
+ isMounted . current && setData ( incomingTransform ( newData , payload ) ) ;
126
129
}
127
130
} catch ( e ) {
128
131
isOk = false ;
@@ -136,7 +139,8 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
136
139
isRoot . current = true ;
137
140
}
138
141
} else if ( handler && ! deepCompare ( data , handler ) ) {
139
- isMounted . current && setData ( assign ( { } , buildObj ( fields , payload , features ) , deepClone ( handler ) ) ) ;
142
+ const newData = assign ( { } , buildObj ( fields , payload , features ) , deepClone ( handler ) ) ;
143
+ isMounted . current && setData ( incomingTransform ( newData , payload ) ) ;
140
144
}
141
145
} ;
142
146
/**
@@ -151,7 +155,7 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
151
155
const instance : IOneApi < Data > = {
152
156
reload : tryResolve ,
153
157
change : ( data , initial = false ) => {
154
- setData ( data ) ;
158
+ setData ( incomingTransform ( data , payload ) ) ;
155
159
change ! ( data , initial ) ;
156
160
} ,
157
161
getData : ( ) => ( { ...data$ . current || ( { } as Data ) } ) ,
0 commit comments