dynim-react 1.0.24 → 1.0.26
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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* BuilderProvider - React integration for the visual builder
|
|
4
4
|
*
|
|
@@ -27,6 +27,9 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
27
27
|
// Track builder active state - use BOTH ref (for sync checks in callbacks) and state (for renders)
|
|
28
28
|
const isBuilderActiveRef = useRef(false);
|
|
29
29
|
const [isBuilderActive, setIsBuilderActive] = useState(false);
|
|
30
|
+
// Cached auth token and in-flight promise for fast subsequent loads
|
|
31
|
+
const cachedTokenRef = useRef(null);
|
|
32
|
+
const tokenPromiseRef = useRef(null);
|
|
30
33
|
// Signal counter for triggering bundle loads - ONLY incremented when we decide to load
|
|
31
34
|
// This avoids the dependency cascade problem with the old approach
|
|
32
35
|
const [bundleLoadSignal, setBundleLoadSignal] = useState(0);
|
|
@@ -36,6 +39,8 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
36
39
|
apiBaseRef.current = config.apiBase || 'http://localhost:8080';
|
|
37
40
|
const [isBundleLoaded, setIsBundleLoaded] = useState(false);
|
|
38
41
|
const [isBundleLoading, setIsBundleLoading] = useState(false);
|
|
42
|
+
// Track if initial bundle load has completed (to avoid flash of children)
|
|
43
|
+
const [isInitialLoadComplete, setIsInitialLoadComplete] = useState(false);
|
|
39
44
|
const [codeMessage, setCodeMessage] = useState({
|
|
40
45
|
thinking: '',
|
|
41
46
|
text: '',
|
|
@@ -178,21 +183,41 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
178
183
|
}
|
|
179
184
|
}, []);
|
|
180
185
|
/**
|
|
181
|
-
* Get auth token for bundle requests
|
|
186
|
+
* Get auth token for bundle requests (with caching for performance)
|
|
187
|
+
* Returns cached token if available, otherwise fetches and caches.
|
|
188
|
+
* Reuses in-flight promise to avoid duplicate requests.
|
|
182
189
|
*/
|
|
183
190
|
const getAuthToken = useCallback(async () => {
|
|
184
191
|
const { sessionToken, getSession } = config;
|
|
192
|
+
// Fast path: static token from config
|
|
185
193
|
if (sessionToken) {
|
|
186
194
|
return sessionToken;
|
|
187
195
|
}
|
|
196
|
+
// Fast path: return cached token
|
|
197
|
+
if (cachedTokenRef.current) {
|
|
198
|
+
return cachedTokenRef.current;
|
|
199
|
+
}
|
|
200
|
+
// Reuse in-flight promise if one exists (prevents duplicate getSession calls)
|
|
201
|
+
if (tokenPromiseRef.current) {
|
|
202
|
+
return tokenPromiseRef.current;
|
|
203
|
+
}
|
|
188
204
|
if (getSession) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
205
|
+
// Create and cache the promise
|
|
206
|
+
tokenPromiseRef.current = (async () => {
|
|
207
|
+
try {
|
|
208
|
+
const session = await getSession();
|
|
209
|
+
cachedTokenRef.current = session.token; // Cache for future use
|
|
210
|
+
return session.token;
|
|
211
|
+
}
|
|
212
|
+
catch (e) {
|
|
213
|
+
console.warn('[BuilderProvider] Failed to get session for bundle auth:', e);
|
|
214
|
+
return null;
|
|
215
|
+
}
|
|
216
|
+
finally {
|
|
217
|
+
tokenPromiseRef.current = null; // Clear in-flight promise
|
|
218
|
+
}
|
|
219
|
+
})();
|
|
220
|
+
return tokenPromiseRef.current;
|
|
196
221
|
}
|
|
197
222
|
return null;
|
|
198
223
|
}, [config]);
|
|
@@ -278,6 +303,16 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
278
303
|
useEffect(() => {
|
|
279
304
|
loadBundleRef.current = loadBundle;
|
|
280
305
|
}, [loadBundle]);
|
|
306
|
+
// PERF: Eagerly prefetch auth token on mount (runs in parallel with render)
|
|
307
|
+
// This ensures the token is ready by the time we need to fetch the bundle
|
|
308
|
+
useEffect(() => {
|
|
309
|
+
const { sessionToken, getSession } = config;
|
|
310
|
+
if (!sessionToken && getSession) {
|
|
311
|
+
// Start fetching token immediately - don't await, just fire and forget
|
|
312
|
+
// The result will be cached in cachedTokenRef for when loadBundle needs it
|
|
313
|
+
getAuthToken();
|
|
314
|
+
}
|
|
315
|
+
}, []); // Empty deps - only run once on mount
|
|
281
316
|
// Auto-load saved bundle on mount (if authenticated)
|
|
282
317
|
// This ensures the permanent bundle is displayed immediately when the app loads
|
|
283
318
|
useEffect(() => {
|
|
@@ -287,6 +322,7 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
287
322
|
// Need auth to load bundle - if no auth configured, just render children
|
|
288
323
|
if (!sessionToken && !getSession) {
|
|
289
324
|
console.log('[BuilderProvider] No auth configured, skipping initial bundle load');
|
|
325
|
+
setIsInitialLoadComplete(true); // Mark complete so children render
|
|
290
326
|
return;
|
|
291
327
|
}
|
|
292
328
|
hasAttemptedInitialLoadRef.current = true;
|
|
@@ -302,6 +338,12 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
302
338
|
// 404 means no saved bundle - that's fine, children will render
|
|
303
339
|
console.log('[BuilderProvider] Initial bundle load completed (may be 404 if no saved bundle)');
|
|
304
340
|
}
|
|
341
|
+
finally {
|
|
342
|
+
setIsInitialLoadComplete(true); // Mark complete regardless of outcome
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
else {
|
|
346
|
+
setIsInitialLoadComplete(true); // No loader available, show children
|
|
305
347
|
}
|
|
306
348
|
};
|
|
307
349
|
doInitialLoad();
|
|
@@ -467,9 +509,16 @@ export function BuilderProvider({ children, config = {}, onBuilderReady, }) {
|
|
|
467
509
|
}, [contextValue, onBuilderReady]);
|
|
468
510
|
// Render the appropriate content based on state
|
|
469
511
|
const renderContent = () => {
|
|
470
|
-
//
|
|
512
|
+
// Initial load in progress - show nothing to prevent flash of children
|
|
513
|
+
// This only applies to the first load; subsequent loads show current content
|
|
514
|
+
if (!isInitialLoadComplete) {
|
|
515
|
+
return null;
|
|
516
|
+
}
|
|
517
|
+
// Loading state (after initial load) - keep showing current content
|
|
471
518
|
if (isBundleLoading) {
|
|
472
|
-
|
|
519
|
+
// If we have TenantApp, keep showing it during reload
|
|
520
|
+
// Otherwise show children (this is a subsequent load, not initial)
|
|
521
|
+
return TenantApp ? _jsx(TenantApp, {}) : children;
|
|
473
522
|
}
|
|
474
523
|
// Error state - show error banner with children
|
|
475
524
|
if (bundleError) {
|