合并主分支最新改动

同步 master 的最新功能与修复
保留 AI 游戏创作客户端分支现有实现

# Conflicts:
#	docs/project-memory/shared-memory/decision-log.md
#	docs/project-memory/shared-memory/pitfalls.md
#	scripts/dev.mjs
#	server-rs/crates/api-server/src/editor_screen_background_decision.rs
#	server-rs/crates/api-server/src/modules/admin.rs
#	src/components/rpg-entry/RpgEntryHomeView.tsx
This commit is contained in:
AIGameCreator App
2026-07-14 13:05:45 +08:00
384 changed files with 44028 additions and 5120 deletions
@@ -61,6 +61,7 @@ export function useRpgEntryBootstrap(
const platformTabBootstrapUserIdRef = useRef<string | null | undefined>(
undefined,
);
const hasCompletedPlatformBootstrapRef = useRef(false);
const hasExplicitPlatformTabSelectionRef = useRef(false);
const [savedCustomWorldEntries, setSavedCustomWorldEntries] = useState<
@@ -234,12 +235,16 @@ export function useRpgEntryBootstrap(
}
void (async () => {
const shouldShowBlockingLoading =
!hasCompletedPlatformBootstrapRef.current;
setHistoryEntries([]);
setHistoryError(null);
setSaveError(null);
setIsLoadingPlatform(true);
setIsLoadingPlatform(shouldShowBlockingLoading);
setPlatformError(null);
setIsLoadingDashboard(canReadProtectedData);
setIsLoadingDashboard(
canReadProtectedData && shouldShowBlockingLoading,
);
setDashboardError(null);
if (!canReadProtectedData) {
setSavedCustomWorldEntries([]);
@@ -358,6 +363,7 @@ export function useRpgEntryBootstrap(
}
} finally {
if (isActive) {
hasCompletedPlatformBootstrapRef.current = true;
setIsLoadingPlatform(false);
setIsLoadingDashboard(false);
}