dynim-react 1.0.16 → 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":"AAAA;;;;;GAKG;AAEH,OAAc,EAQZ,KAAK,SAAS,EAEf,MAAM,OAAO,CAAC;AAQf,OAAO,KAAK,EAEV,eAAe,EAEf,QAAQ,EACR,SAAS,EACT,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mDAAmD;IACnD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,KAAK,IAAI,CAAC;IACzC,oEAAoE;IACpE,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IACrD,0CAA0C;IAC1C,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,CAAC;IACtC,kDAAkD;IAClD,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAE3C,qDAAqD;IACrD,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/D,wCAAwC;IACxC,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAChD,0CAA0C;IAC1C,oBAAoB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,uFAAuF;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,UAAU,EAAE,MAAM,eAAe,GAAG,IAAI,CAAC;IAEzC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3C,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9B,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,SAAS,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,4CAA4C;IAC5C,WAAW,EAAE,WAAW,CAAC;IACzB,+BAA+B;IAC/B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,gDAAgD;IAChD,SAAS,EAAE,QAAQ,EAAE,CAAC;IAGtB,2BAA2B;IAC3B,UAAU,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACjD,gEAAgE;IAChE,iBAAiB,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACxD,kDAAkD;IAClD,eAAe,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,wDAAwD;IACxD,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,4CAA4C;IAC5C,cAAc,EAAE,OAAO,CAAC;IACxB,iCAAiC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,kDAAkD;IAClD,YAAY,EAAE,MAAM,IAAI,CAAC;CAC1B;AAID,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,SAAS,CAAC;IACpB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,IAAI,CAAC;CACzD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,MAAW,EACX,cAAc,GACf,EAAE,oBAAoB,GAAG,GAAG,CAAC,OAAO,
|
|
1
|
+
{"version":3,"file":"BuilderProvider.d.ts","sourceRoot":"","sources":["../../src/builder/BuilderProvider.tsx"],"names":[],"mappings":"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"}
|
|
@@ -22,7 +22,16 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
22
22
|
const codeClientRef = useRef(null);
|
|
23
23
|
// Track when we're exiting to prevent auto-load from re-triggering
|
|
24
24
|
const isExitingRef = useRef(false);
|
|
25
|
+
// Track builder active state - use BOTH ref (for sync checks in callbacks) and state (for renders)
|
|
26
|
+
const isBuilderActiveRef = useRef(false);
|
|
25
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';
|
|
26
35
|
const [isBundleLoaded, setIsBundleLoaded] = useState(false);
|
|
27
36
|
const [isBundleLoading, setIsBundleLoading] = useState(false);
|
|
28
37
|
const [codeMessage, setCodeMessage] = useState({
|
|
@@ -106,6 +115,7 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
106
115
|
// This prevents race condition where streaming events trigger temp bundle reload
|
|
107
116
|
onExitStart: () => {
|
|
108
117
|
isExitingRef.current = true;
|
|
118
|
+
isBuilderActiveRef.current = false; // Mark inactive immediately
|
|
109
119
|
console.log('[BuilderProvider] Exit started, isExiting=true');
|
|
110
120
|
// Abort any active streaming to prevent late bundle_ready events
|
|
111
121
|
codeClientRef.current?.abort();
|
|
@@ -125,6 +135,7 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
125
135
|
onEnter: () => {
|
|
126
136
|
console.log('[BuilderProvider] Visual builder entered');
|
|
127
137
|
isExitingRef.current = false;
|
|
138
|
+
isBuilderActiveRef.current = true;
|
|
128
139
|
setIsBuilderActive(true);
|
|
129
140
|
},
|
|
130
141
|
onExit: () => {
|
|
@@ -288,21 +299,46 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
288
299
|
console.log('[BuilderProvider] Loading temp bundle via:', bundleUrl);
|
|
289
300
|
await loadBundle(bundleUrl);
|
|
290
301
|
}, [config, loadBundle]);
|
|
291
|
-
//
|
|
302
|
+
// Watch for bundleReady and decide if we should queue a load
|
|
303
|
+
// Uses refs for instant checks (no stale closure issues)
|
|
292
304
|
useEffect(() => {
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
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);
|
|
304
339
|
}
|
|
305
|
-
|
|
340
|
+
pendingBundleProjectIdRef.current = null;
|
|
341
|
+
}, [bundleLoadSignal]); // ONLY depends on the signal!
|
|
306
342
|
// Unload bundle - show children again
|
|
307
343
|
const unloadBundle = useCallback(() => {
|
|
308
344
|
setTenantApp(null);
|