dynim-react 1.0.17 → 1.0.18
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: () => {
|
|
@@ -292,22 +299,46 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
292
299
|
console.log('[BuilderProvider] Loading temp bundle via:', bundleUrl);
|
|
293
300
|
await loadBundle(bundleUrl);
|
|
294
301
|
}, [config, loadBundle]);
|
|
295
|
-
//
|
|
302
|
+
// Watch for bundleReady and decide if we should queue a load
|
|
303
|
+
// Uses refs for instant checks (no stale closure issues)
|
|
296
304
|
useEffect(() => {
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
305
|
+
if (codeMessage.bundleReady && codeMessage.projectId) {
|
|
306
|
+
// Check refs for current state (not stale closure values)
|
|
307
|
+
if (isBuilderActiveRef.current && !isExitingRef.current) {
|
|
308
|
+
console.log('[BuilderProvider] Bundle ready - queueing load:', codeMessage.projectId);
|
|
309
|
+
pendingBundleProjectIdRef.current = codeMessage.projectId;
|
|
310
|
+
setBundleLoadSignal(s => s + 1);
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
console.log('[BuilderProvider] Bundle ready but skipping (exiting or inactive):', {
|
|
314
|
+
isBuilderActive: isBuilderActiveRef.current,
|
|
315
|
+
isExiting: isExitingRef.current,
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}, [codeMessage.bundleReady, codeMessage.projectId]);
|
|
320
|
+
// Effect that actually loads - ONLY triggered by the signal counter
|
|
321
|
+
// Uses refs for everything so it has ONLY ONE dependency: bundleLoadSignal
|
|
322
|
+
useEffect(() => {
|
|
323
|
+
if (bundleLoadSignal === 0)
|
|
324
|
+
return; // Skip initial render
|
|
325
|
+
const projectId = pendingBundleProjectIdRef.current;
|
|
326
|
+
if (!projectId)
|
|
327
|
+
return;
|
|
328
|
+
// Final safety check before loading
|
|
329
|
+
if (isExitingRef.current) {
|
|
330
|
+
console.log('[BuilderProvider] Skipping load - exit in progress');
|
|
331
|
+
pendingBundleProjectIdRef.current = null;
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
// Use refs to avoid dependency on config/loadTempBundle
|
|
335
|
+
const bundleUrl = `${apiBaseRef.current}/api/code/bundle?_t=${Date.now()}`;
|
|
336
|
+
console.log('[BuilderProvider] Loading temp bundle:', bundleUrl);
|
|
337
|
+
if (loadBundleRef.current) {
|
|
338
|
+
loadBundleRef.current(bundleUrl);
|
|
309
339
|
}
|
|
310
|
-
|
|
340
|
+
pendingBundleProjectIdRef.current = null;
|
|
341
|
+
}, [bundleLoadSignal]); // ONLY depends on the signal!
|
|
311
342
|
// Unload bundle - show children again
|
|
312
343
|
const unloadBundle = useCallback(() => {
|
|
313
344
|
setTenantApp(null);
|