🐛 fix: show empty world favorites instead of a stuck skeleton

This commit is contained in:
2026-06-30 05:45:10 +07:00
parent d7e89c2133
commit 5bbef18fdf
2 changed files with 12 additions and 2 deletions
@@ -17,7 +17,9 @@ import { api } from "../../lib/api";
import { useT } from "../../lib/i18n";
import {
useFavoriteWorldFolders,
useWorldFavorites,
useWorldFavoriteLimits,
useWorldFavoritesLoaded,
type FavoriteFolder,
} from "../../store/worldFavorites";
import { useSocial } from "../../store/social";
@@ -35,6 +37,7 @@ export function MyFavoriteWorldsSection({ filter }: { filter?: WorldFilter }) {
const selfId = useSocial((s) => s.selfId);
const folders = useFavoriteWorldFolders();
const { maxPerGroup } = useWorldFavoriteLimits();
const loaded = useWorldFavoritesLoaded();
const searching = Boolean(filter);
const [editFolder, setEditFolder] = useState<FavoriteFolder | null>(null);
@@ -50,10 +53,11 @@ export function MyFavoriteWorldsSection({ filter }: { filter?: WorldFilter }) {
const [selected, setSelected] = useState<Set<string>>(() => new Set());
useEffect(() => {
useWorldFavorites.getState().markStale();
void api.world.loadFavorites();
}, [selfId]);
if (!folders.length) return <SkeletonGrid count={3} />;
if (!loaded && !folders.length) return <SkeletonGrid count={3} />;
const filtered = filter
? folders.map((f) => ({ ...f, worlds: f.worlds.filter(filter) }))
+7 -1
View File
@@ -14,13 +14,17 @@ const DEFAULT_LIMITS: FavoriteLimits = { maxGroups: 4, maxPerGroup: 64 };
interface WorldFavoritesState {
groups: FavoriteWorldGroup[];
limits: FavoriteLimits;
loaded: boolean;
seed: (s: WorldFavoritesSnapshot) => void;
markStale: () => void;
}
export const useWorldFavorites = create<WorldFavoritesState>((set) => ({
groups: [],
limits: DEFAULT_LIMITS,
seed: (s) => set({ groups: s.groups, limits: s.limits }),
loaded: false,
seed: (s) => set({ groups: s.groups, limits: s.limits, loaded: true }),
markStale: () => set({ loaded: false }),
}));
events.on("world:favorites:seed", (s) => useWorldFavorites.getState().seed(s));
@@ -66,6 +70,8 @@ function toFolder(
export const useWorldFavoriteLimits = (): FavoriteLimits =>
useWorldFavorites((s) => s.limits);
export const useWorldFavoritesLoaded = (): boolean => useWorldFavorites((s) => s.loaded);
export function useWorldFolder(worldId: string): string | undefined {
return useWorldFavorites((s) => s.groups.find((g) => g.worldIds.includes(worldId))?.name);
}