Skip to content

Commit 9c0397f

Browse files
committed
inv
1 parent 739ac2e commit 9c0397f

File tree

6 files changed

+22
-8
lines changed

6 files changed

+22
-8
lines changed

packages/rn-declarative/package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/rn-declarative/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "rn-declarative",
3-
"version": "0.0.76",
3+
"version": "0.0.78",
44
"description": "A responsive layout for the react-native",
55
"private": false,
66
"author": {

packages/rn-declarative/src/components/One/components/OneGenesis/OneGenesis.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const READY_CLASS = "rn-declarative__oneGenesisReady";
3434

3535
const DEFAULT_READY = () => null;
3636
const DEFAULT_CHANGE = (data: IAnything) => console.log({ data });
37+
const DEFAULT_OUTGOING_TRANSFORM = (data: IAnything) => data;
3738

3839
/**
3940
* Represents the OneGenesis component.
@@ -66,6 +67,7 @@ export const OneGenesis = <
6667

6768
const {
6869
isBaselineForRoot = isBaselineForField,
70+
outgoingTransform = DEFAULT_OUTGOING_TRANSFORM,
6971
change = DEFAULT_CHANGE,
7072
ready = DEFAULT_READY,
7173
fields = [],
@@ -130,7 +132,7 @@ export const OneGenesis = <
130132
}
131133
});
132134
if (isValid) {
133-
change(newData, initial);
135+
change(outgoingTransform(newData, payload), initial);
134136
}
135137
}, []);
136138

packages/rn-declarative/src/components/One/context/StateProvider.tsx

+2
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ export const StateProvider = <Data extends IAnything, Payload extends IAnything,
7474
payload,
7575
loadStart,
7676
loadEnd,
77+
incomingTransform,
7778
} = otherProps;
7879

7980
const [object, setObjectHook] = useResolved<Data, Payload>({
@@ -85,6 +86,7 @@ export const StateProvider = <Data extends IAnything, Payload extends IAnything,
8586
change,
8687
loadStart,
8788
loadEnd,
89+
incomingTransform,
8890
});
8991

9092
const object$ = useActualValue(object as unknown as object);

packages/rn-declarative/src/components/One/hooks/useResolved.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import FieldType from '../../../model/FieldType';
2727
import { useApiRef } from '../context/ApiProvider';
2828

2929
const LOAD_SOURCE = 'one-resolve';
30+
const DEFAULT_INCOMING_TRANSFORM = (data: IAnything) => data;
3031

3132
/**
3233
* Represents the resolved properties for a hook.
@@ -42,6 +43,7 @@ interface IResolvedHookProps<Data = IAnything, Payload = IAnything> {
4243
features: PickProp<IOneProps<Data, Payload>, 'features'>;
4344
change: PickProp<IOneProps<Data, Payload>, 'change'>;
4445
loadStart: PickProp<IOneProps<Data, Payload>, 'loadStart'>;
46+
incomingTransform: PickProp<IOneProps<Data, Payload>, 'incomingTransform'>;
4547
loadEnd: PickProp<IOneProps<Data, Payload>, 'loadEnd'>;
4648
}
4749

@@ -92,6 +94,7 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
9294
change,
9395
loadStart,
9496
loadEnd,
97+
incomingTransform = DEFAULT_INCOMING_TRANSFORM,
9598
}: IResolvedHookProps<Data, Payload>): [Data | null, (v: Data) => void] => {
9699
const [data, setData] = useState<Data | null>(null);
97100
const data$ = useActualValue(data);
@@ -118,11 +121,11 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
118121
if (result instanceof Promise) {
119122
const newData = assign({}, buildObj<Data>(fields, payload, features), deepClone(await result));
120123
change!(newData, true);
121-
isMounted.current && setData(newData);
124+
isMounted.current && setData(incomingTransform(newData, payload));
122125
} else {
123126
const newData = assign({}, buildObj<Data>(fields, payload, features), deepClone(result));
124127
change!(newData, true);
125-
isMounted.current && setData(newData);
128+
isMounted.current && setData(incomingTransform(newData, payload));
126129
}
127130
} catch (e) {
128131
isOk = false;
@@ -136,7 +139,8 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
136139
isRoot.current = true;
137140
}
138141
} 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));
140144
}
141145
};
142146
/**
@@ -151,7 +155,7 @@ export const useResolved = <Data = IAnything, Payload = IAnything>({
151155
const instance: IOneApi<Data> = {
152156
reload: tryResolve,
153157
change: (data, initial = false) => {
154-
setData(data);
158+
setData(incomingTransform(data, payload));
155159
change!(data, initial);
156160
},
157161
getData: () => ({...data$.current || ({} as Data)}),

packages/rn-declarative/src/model/IOneProps.ts

+6
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,12 @@ export interface IOneProps<Data = IAnything, Payload = IAnything, Field = IField
124124
*/
125125
readTransform?: (value: Value, name: string, data: Data, payload: Payload) => Value;
126126
writeTransform?: (value: Value, name: string, data: Data, payload: Payload) => Value;
127+
/**
128+
* Методы для преобразования целевого объекта, например сериализации/десереализации,
129+
* чтобы хранить в data страницы строку, синхронизируемую через AJAX
130+
*/
131+
incomingTransform?: (data: IAnything, payload: Payload) => Data;
132+
outgoingTransform?: (data: IAnything, payload: Payload) => Data;
127133
/**
128134
* Коллбек для перехвата клика по полю
129135
*/

0 commit comments

Comments
 (0)