|
1 | | -import { useState, useEffect, useRef } from 'react'; |
| 1 | +import { useState, useEffect, useRef, useMemo } from 'react'; |
2 | 2 | import type { DB } from '@op-engineering/op-sqlite'; |
3 | 3 | import type { TableConfig } from '../../types/TableConfig'; |
4 | 4 | import type { Logger } from '../common/logger'; |
@@ -126,15 +126,24 @@ export function useDatabaseInitialization( |
126 | 126 | /** REFS */ |
127 | 127 | const writeDbRef = useRef<DB | null>(null); |
128 | 128 | const readDbRef = useRef<DB | null>(null); |
| 129 | + const onDatabaseReadyRef = useRef(onDatabaseReady); |
| 130 | + |
| 131 | + useEffect(() => { |
| 132 | + onDatabaseReadyRef.current = onDatabaseReady; |
| 133 | + }, [onDatabaseReady]); |
129 | 134 |
|
130 | 135 | /** SERIALIZED CONFIG - Prevents unnecessary re-initialization */ |
131 | | - const serializedConfig = JSON.stringify({ |
132 | | - connectionString, |
133 | | - databaseName, |
134 | | - tables: tablesToBeSynced, |
135 | | - apiKey, |
136 | | - accessToken, |
137 | | - }); |
| 136 | + const serializedConfig = useMemo( |
| 137 | + () => |
| 138 | + JSON.stringify({ |
| 139 | + connectionString, |
| 140 | + databaseName, |
| 141 | + tables: tablesToBeSynced, |
| 142 | + apiKey, |
| 143 | + accessToken, |
| 144 | + }), |
| 145 | + [connectionString, databaseName, tablesToBeSynced, apiKey, accessToken] |
| 146 | + ); |
138 | 147 |
|
139 | 148 | /** INITIALIZATION EFFECT */ |
140 | 149 | useEffect(() => { |
@@ -183,10 +192,10 @@ export function useDatabaseInitialization( |
183 | 192 | logger.info('✅ Databases ready for local use'); |
184 | 193 |
|
185 | 194 | /** RUN onDatabaseReady CALLBACK (e.g., migrations) */ |
186 | | - if (onDatabaseReady) { |
| 195 | + if (onDatabaseReadyRef.current) { |
187 | 196 | logger.info('🔄 Running onDatabaseReady callback...'); |
188 | 197 | try { |
189 | | - await onDatabaseReady(localWriteDb); |
| 198 | + await onDatabaseReadyRef.current(localWriteDb); |
190 | 199 | logger.info('✅ onDatabaseReady callback completed'); |
191 | 200 | } catch (err) { |
192 | 201 | logger.error('❌ onDatabaseReady callback failed:', err); |
@@ -277,7 +286,7 @@ export function useDatabaseInitialization( |
277 | 286 | } |
278 | 287 | }; |
279 | 288 | // eslint-disable-next-line react-hooks/exhaustive-deps |
280 | | - }, [serializedConfig, logger]); |
| 289 | + }, [serializedConfig]); |
281 | 290 |
|
282 | 291 | return { |
283 | 292 | writeDb, |
|
0 commit comments