| 2395 | ); |
| 2396 | |
| 2397 | export const useCreateSynchronizer: typeof useCreateSynchronizerDecl = < |
| 2398 | SynchronizerOrUndefined extends Synchronizer | undefined, |
| 2399 | >( |
| 2400 | store: MergeableStore | undefined, |
| 2401 | create: (store: MergeableStore) => Promise<SynchronizerOrUndefined>, |
| 2402 | createDeps: DependencyList = EMPTY_ARRAY, |
| 2403 | destroy?: (synchronizer: Synchronizer) => void, |
| 2404 | destroyDeps: DependencyList = EMPTY_ARRAY, |
| 2405 | ): SynchronizerOrUndefined => { |
| 2406 | const [synchronizer, setSynchronizer] = useState<any>(); |
| 2407 | useEffect( |
| 2408 | () => { |
| 2409 | (async () => { |
| 2410 | const synchronizer = store ? await create(store) : undefined; |
| 2411 | setSynchronizer(synchronizer); |
| 2412 | })(); |
| 2413 | }, |
| 2414 | // eslint-disable-next-line react-hooks/exhaustive-deps |
| 2415 | [store, ...createDeps], |
| 2416 | ); |
| 2417 | useEffect( |
| 2418 | () => () => { |
| 2419 | if (synchronizer) { |
| 2420 | synchronizer.destroy(); |
| 2421 | destroy?.(synchronizer); |
| 2422 | } |
| 2423 | }, |
| 2424 | // eslint-disable-next-line react-hooks/exhaustive-deps |
| 2425 | [synchronizer, ...destroyDeps], |
| 2426 | ); |
| 2427 | return synchronizer; |
| 2428 | }; |
| 2429 | |
| 2430 | export const useSynchronizerIds: typeof useSynchronizerIdsDecl = () => |
| 2431 | useThingIds(OFFSET_SYNCHRONIZER); |