dynim-react 1.0.17 → 1.0.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuilderProvider.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderProvider.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"BuilderProvider.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -21,10 +21,17 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
21
21
|
const builderRef = useRef(null);
|
|
22
22
|
const codeClientRef = useRef(null);
|
|
23
23
|
// Track when we're exiting to prevent auto-load from re-triggering
|
|
24
|
-
// Use BOTH ref (for sync checks) and state (for effect dependencies)
|
|
25
24
|
const isExitingRef = useRef(false);
|
|
26
|
-
|
|
25
|
+
// Track builder active state - use BOTH ref (for sync checks in callbacks) and state (for renders)
|
|
26
|
+
const isBuilderActiveRef = useRef(false);
|
|
27
27
|
const [isBuilderActive, setIsBuilderActive] = useState(false);
|
|
28
|
+
// Signal counter for triggering bundle loads - ONLY incremented when we decide to load
|
|
29
|
+
// This avoids the dependency cascade problem with the old approach
|
|
30
|
+
const [bundleLoadSignal, setBundleLoadSignal] = useState(0);
|
|
31
|
+
const pendingBundleProjectIdRef = useRef(null);
|
|
32
|
+
// Store apiBase in ref so bundle load effect has no config dependency
|
|
33
|
+
const apiBaseRef = useRef(config.apiBase || 'http://localhost:8080');
|
|
34
|
+
apiBaseRef.current = config.apiBase || 'http://localhost:8080';
|
|
28
35
|
const [isBundleLoaded, setIsBundleLoaded] = useState(false);
|
|
29
36
|
const [isBundleLoading, setIsBundleLoading] = useState(false);
|
|
30
37
|
const [codeMessage, setCodeMessage] = useState({
|
|
@@ -108,7 +115,7 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
108
115
|
// This prevents race condition where streaming events trigger temp bundle reload
|
|
109
116
|
onExitStart: () => {
|
|
110
117
|
isExitingRef.current = true;
|
|
111
|
-
|
|
118
|
+
isBuilderActiveRef.current = false; // Mark inactive immediately
|
|
112
119
|
console.log('[BuilderProvider] Exit started, isExiting=true');
|
|
113
120
|
// Abort any active streaming to prevent late bundle_ready events
|
|
114
121
|
codeClientRef.current?.abort();
|
|
@@ -128,7 +135,7 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
128
135
|
onEnter: () => {
|
|
129
136
|
console.log('[BuilderProvider] Visual builder entered');
|
|
130
137
|
isExitingRef.current = false;
|
|
131
|
-
|
|
138
|
+
isBuilderActiveRef.current = true;
|
|
132
139
|
setIsBuilderActive(true);
|
|
133
140
|
},
|
|
134
141
|
onExit: () => {
|
|
@@ -195,8 +202,10 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
195
202
|
*/
|
|
196
203
|
const loadBundle = useCallback(async (bundleUrl) => {
|
|
197
204
|
const { onBundleLoadStart, onBundleLoadComplete, onError } = config;
|
|
205
|
+
console.log('[BuilderProvider] loadBundle called:', bundleUrl, 'isExiting=', isExitingRef.current);
|
|
206
|
+
console.trace('[BuilderProvider] loadBundle caller stack');
|
|
198
207
|
if (isBundleLoadingRef.current) {
|
|
199
|
-
console.warn('[BuilderProvider] Already loading a bundle');
|
|
208
|
+
console.warn('[BuilderProvider] Already loading a bundle, skipping');
|
|
200
209
|
return;
|
|
201
210
|
}
|
|
202
211
|
isBundleLoadingRef.current = true;
|
|
@@ -292,22 +301,52 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
292
301
|
console.log('[BuilderProvider] Loading temp bundle via:', bundleUrl);
|
|
293
302
|
await loadBundle(bundleUrl);
|
|
294
303
|
}, [config, loadBundle]);
|
|
295
|
-
//
|
|
304
|
+
// Watch for bundleReady and decide if we should queue a load
|
|
305
|
+
// Uses refs for instant checks (no stale closure issues)
|
|
296
306
|
useEffect(() => {
|
|
297
|
-
console.log('[BuilderProvider]
|
|
307
|
+
console.log('[BuilderProvider] bundleReady effect:', {
|
|
298
308
|
bundleReady: codeMessage.bundleReady,
|
|
299
309
|
projectId: codeMessage.projectId,
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
isExitingRef: isExitingRef.current, // Also log ref for debugging
|
|
310
|
+
isBuilderActiveRef: isBuilderActiveRef.current,
|
|
311
|
+
isExitingRef: isExitingRef.current,
|
|
303
312
|
});
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
313
|
+
if (codeMessage.bundleReady && codeMessage.projectId) {
|
|
314
|
+
// Check refs for current state (not stale closure values)
|
|
315
|
+
if (isBuilderActiveRef.current && !isExitingRef.current) {
|
|
316
|
+
console.log('[BuilderProvider] >>> QUEUEING LOAD:', codeMessage.projectId);
|
|
317
|
+
pendingBundleProjectIdRef.current = codeMessage.projectId;
|
|
318
|
+
setBundleLoadSignal(s => s + 1);
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
console.log('[BuilderProvider] >>> BLOCKING LOAD (exiting or inactive)');
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
}, [codeMessage.bundleReady, codeMessage.projectId]);
|
|
325
|
+
// Effect that actually loads - ONLY triggered by the signal counter
|
|
326
|
+
// Uses refs for everything so it has ONLY ONE dependency: bundleLoadSignal
|
|
327
|
+
useEffect(() => {
|
|
328
|
+
console.log('[BuilderProvider] Load signal effect, signal=', bundleLoadSignal);
|
|
329
|
+
if (bundleLoadSignal === 0)
|
|
330
|
+
return; // Skip initial render
|
|
331
|
+
const projectId = pendingBundleProjectIdRef.current;
|
|
332
|
+
console.log('[BuilderProvider] Load signal triggered, projectId=', projectId, 'isExiting=', isExitingRef.current);
|
|
333
|
+
if (!projectId)
|
|
334
|
+
return;
|
|
335
|
+
// Final safety check before loading
|
|
336
|
+
if (isExitingRef.current) {
|
|
337
|
+
console.log('[BuilderProvider] >>> BLOCKED BY FINAL CHECK - exit in progress');
|
|
338
|
+
pendingBundleProjectIdRef.current = null;
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
// Use refs to avoid dependency on config/loadTempBundle
|
|
342
|
+
const bundleUrl = `${apiBaseRef.current}/api/code/bundle?_t=${Date.now()}`;
|
|
343
|
+
console.log('[BuilderProvider] >>> LOADING TEMP BUNDLE:', bundleUrl);
|
|
344
|
+
console.trace('[BuilderProvider] Stack trace for temp bundle load');
|
|
345
|
+
if (loadBundleRef.current) {
|
|
346
|
+
loadBundleRef.current(bundleUrl);
|
|
309
347
|
}
|
|
310
|
-
|
|
348
|
+
pendingBundleProjectIdRef.current = null;
|
|
349
|
+
}, [bundleLoadSignal]); // ONLY depends on the signal!
|
|
311
350
|
// Unload bundle - show children again
|
|
312
351
|
const unloadBundle = useCallback(() => {
|
|
313
352
|
setTenantApp(null);
|