|
1 | 1 | import { cloneDeep } from 'lodash';
|
2 | 2 | import ProxyPolyfillBuilder from 'proxy-polyfill/src/proxy';
|
3 | 3 | import React from 'react';
|
4 |
| -import { isObject, isObjectOrArray } from './util'; |
| 4 | +import type { DefaultRecord } from 'react-form-simple'; |
| 5 | +import { isObject, isObjectOrArray } from 'react-form-simple/utils/util'; |
5 | 6 |
|
6 |
| -export const proxyMap = new WeakMap(); |
7 |
| -export const rawMap = new WeakMap(); |
8 |
| - |
9 |
| -const _proxyMap = proxyMap; |
10 |
| -const _rawMap = rawMap; |
11 |
| - |
12 |
| -const proxyPolyfill = ProxyPolyfillBuilder(); |
13 |
| -const Proxys = window.Proxy || proxyPolyfill; |
| 7 | +const ProxyPolyfill = window.Proxy || ProxyPolyfillBuilder(); |
14 | 8 |
|
15 | 9 | export type ObserverOptions = {
|
16 | 10 | path?: string[];
|
17 |
| - proxyMap: WeakMap<object, any>; |
18 |
| - rawMap: WeakMap<object, any>; |
19 | 11 | onChangeLength?: () => void;
|
20 | 12 | };
|
21 | 13 |
|
@@ -131,28 +123,14 @@ export const updateProxyValue = (
|
131 | 123 | }
|
132 | 124 | };
|
133 | 125 |
|
134 |
| -export const observer = <T extends object>( |
| 126 | +export const observer = <T extends DefaultRecord>( |
135 | 127 | initialVal: T,
|
136 | 128 | cb?: (args: ObserverCb) => void,
|
137 | 129 | options?: ObserverOptions,
|
138 | 130 | ): T => {
|
139 |
| - const { |
140 |
| - path = [], |
141 |
| - onChangeLength, |
142 |
| - proxyMap, |
143 |
| - rawMap, |
144 |
| - } = (options || {}) as ObserverOptions; |
145 |
| - |
146 |
| - const existingProxy = proxyMap.get(initialVal); |
147 |
| - if (existingProxy) { |
148 |
| - return existingProxy; |
149 |
| - } |
150 |
| - |
151 |
| - if (rawMap.has(initialVal)) { |
152 |
| - return initialVal; |
153 |
| - } |
| 131 | + const { path = [], onChangeLength } = (options || {}) as ObserverOptions; |
154 | 132 |
|
155 |
| - const proxy = new Proxys(initialVal, { |
| 133 | + const proxy = new ProxyPolyfill(initialVal, { |
156 | 134 | get(target, key, receiver) {
|
157 | 135 | const ret = Reflect.get(target, key, receiver);
|
158 | 136 | if (React.isValidElement(ret)) return ret;
|
@@ -184,42 +162,3 @@ export const observer = <T extends object>(
|
184 | 162 |
|
185 | 163 | return proxy;
|
186 | 164 | };
|
187 |
| - |
188 |
| -export const createControllerObserver = <T extends object>( |
189 |
| - initialVal: T, |
190 |
| - cb?: (args: ObserverCb) => void, |
191 |
| - options?: ObserverOptions, |
192 |
| -): T => { |
193 |
| - const { path = [], rawMap = _rawMap, proxyMap = _proxyMap } = options || {}; |
194 |
| - const existingProxy = proxyMap.get(initialVal); |
195 |
| - if (existingProxy) { |
196 |
| - return existingProxy; |
197 |
| - } |
198 |
| - |
199 |
| - if (rawMap.has(initialVal)) { |
200 |
| - return initialVal; |
201 |
| - } |
202 |
| - |
203 |
| - const proxy = new Proxys(initialVal, { |
204 |
| - get(target, key, receiver) { |
205 |
| - const ret = Reflect.get(target, key, receiver); |
206 |
| - if (React.isValidElement(ret)) return ret; |
207 |
| - return isObjectOrArray(ret) |
208 |
| - ? createControllerObserver(ret as T, cb, { |
209 |
| - ...(options as ObserverOptions), |
210 |
| - path: [...path, key.toString()], |
211 |
| - }) |
212 |
| - : ret; |
213 |
| - }, |
214 |
| - set(target, key, val) { |
215 |
| - const newPath = [...path, key.toString()]; |
216 |
| - const ret = Reflect.set(target, key, val); |
217 |
| - cb?.({ path: newPath.join('.'), value: val }); |
218 |
| - return ret; |
219 |
| - }, |
220 |
| - }); |
221 |
| - |
222 |
| - proxyMap.set(initialVal, proxy); |
223 |
| - rawMap.set(proxy, initialVal); |
224 |
| - return proxy; |
225 |
| -}; |
0 commit comments