mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
feat: split hooks
This commit is contained in:
1 parent
67024daa25
commit
1a18058228
4 files changed
+16
-14
No files matched your search
@@ -3,11 +3,10 @@ import { useAwait } from "./useAwait";
|
|||||||
import { useLocale } from "./useLocale";
|
import { useLocale } from "./useLocale";
|
||||||
|
|
||||||
export function useGameStrings(group: string) {
|
export function useGameStrings(group: string) {
|
||||||
const { locale } = useLocale();
|
const locale = useLocale();
|
||||||
const strings = useAwait(
|
const strings = useAwait(
|
||||||
() => api.groupedGameStrings(locale, group, true),
|
() => api.groupedGameStrings(locale, group, true),
|
||||||
`game-strings-${locale}-${group}`
|
`game-strings-${locale}-${group}`
|
||||||
);
|
);
|
||||||
|
|
||||||
return strings;
|
return strings;
|
||||||
}
|
}
|
||||||
@@ -1,7 +1,5 @@
|
|||||||
import locales from "@blitzkit/i18n/locales.json";
|
import locales from "@blitzkit/i18n/locales.json";
|
||||||
import { createContext, useContext, type ReactNode } from "react";
|
import { createContext, useContext, type ReactNode } from "react";
|
||||||
import { api } from "../core/api/dynamic";
|
|
||||||
import { useAwait } from "./useAwait";
|
|
||||||
|
|
||||||
const LocaleContext = createContext<{
|
const LocaleContext = createContext<{
|
||||||
locale: string;
|
locale: string;
|
||||||
@@ -26,12 +24,7 @@ export function useLocale() {
|
|||||||
throw new Error("useLocale must be used within a LocaleProvider");
|
throw new Error("useLocale must be used within a LocaleProvider");
|
||||||
}
|
}
|
||||||
|
|
||||||
const strings = useAwait(
|
return context.locale;
|
||||||
() => api.strings(context.locale),
|
|
||||||
`strings-${context.locale}`
|
|
||||||
);
|
|
||||||
|
|
||||||
return { locale: context.locale, strings };
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface LocaleAcceptorProps {
|
export interface LocaleAcceptorProps {
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { api } from "../core/api/dynamic";
|
||||||
|
import { useAwait } from "./useAwait";
|
||||||
|
import { useLocale } from "./useLocale";
|
||||||
|
|
||||||
|
export function useStrings() {
|
||||||
|
const locale = useLocale();
|
||||||
|
const strings = useAwait(() => api.strings(locale), `strings-${locale}`);
|
||||||
|
return strings;
|
||||||
|
}
|
||||||
@@ -4,7 +4,7 @@ import { IncrementalLoader } from "../../../components/IncrementalLoader";
|
|||||||
import { api } from "../../../core/api/dynamic";
|
import { api } from "../../../core/api/dynamic";
|
||||||
import { useAwait } from "../../../hooks/useAwait";
|
import { useAwait } from "../../../hooks/useAwait";
|
||||||
import { useGameStrings } from "../../../hooks/useGameStrings";
|
import { useGameStrings } from "../../../hooks/useGameStrings";
|
||||||
import { LocaleProvider } from "../../../hooks/useLocale";
|
import { LocaleProvider, useLocale } from "../../../hooks/useLocale";
|
||||||
|
|
||||||
interface PageProps extends ContentProps {
|
interface PageProps extends ContentProps {
|
||||||
locale: string;
|
locale: string;
|
||||||
@@ -23,6 +23,7 @@ interface ContentProps {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function Content({ skeleton }: ContentProps) {
|
function Content({ skeleton }: ContentProps) {
|
||||||
|
const locale = useLocale();
|
||||||
const { avatars } = useAwait(() => api.avatars(), "avatars");
|
const { avatars } = useAwait(() => api.avatars(), "avatars");
|
||||||
const profileAvatarEntityStrings = useGameStrings("ProfileAvatarEntity");
|
const profileAvatarEntityStrings = useGameStrings("ProfileAvatarEntity");
|
||||||
const ordered = useMemo(
|
const ordered = useMemo(
|
||||||
@@ -35,7 +36,7 @@ function Content({ skeleton }: ContentProps) {
|
|||||||
profileAvatarEntityStrings[b.stuff_ui!.display_name] ??
|
profileAvatarEntityStrings[b.stuff_ui!.display_name] ??
|
||||||
b.stuff_ui!.display_name;
|
b.stuff_ui!.display_name;
|
||||||
|
|
||||||
return nameA.localeCompare(nameB);
|
return nameA.localeCompare(nameB, locale);
|
||||||
}),
|
}),
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
@@ -43,8 +44,8 @@ function Content({ skeleton }: ContentProps) {
|
|||||||
return (
|
return (
|
||||||
<div className="avatars">
|
<div className="avatars">
|
||||||
<IncrementalLoader
|
<IncrementalLoader
|
||||||
initial={20}
|
initial={40}
|
||||||
skeleton={6}
|
skeleton={10}
|
||||||
data={ordered}
|
data={ordered}
|
||||||
Component={AvatarCard}
|
Component={AvatarCard}
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in new issue
Block a user