mirror of
https://github.com/blitzkit/blitzkit.git
synced 2026-10-23 19:49:50 +02:00
feat: use deferred store
This commit is contained in:
1 parent
2727b2babe
commit
59324f7438
6 files changed
+30
-11
No files matched your search
@@ -5,7 +5,7 @@ import PageWrapper from '../../components/PageWrapper';
|
|||||||
import * as App from '../../stores/app';
|
import * as App from '../../stores/app';
|
||||||
|
|
||||||
export default function Page() {
|
export default function Page() {
|
||||||
const developerMode = App.use((state) => state.developerMode);
|
const developerMode = App.useDeferred(false, (state) => state.developerMode);
|
||||||
const appStore = App.useStore();
|
const appStore = App.useStore();
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import * as App from '../../../../../../stores/app';
|
|||||||
import * as Duel from '../../../../../../stores/duel';
|
import * as Duel from '../../../../../../stores/duel';
|
||||||
|
|
||||||
export function MetaSection() {
|
export function MetaSection() {
|
||||||
const developerMode = App.use((state) => state.developerMode);
|
const developerMode = App.useDeferred(false, (state) => state.developerMode);
|
||||||
const tank = Duel.use((state) => state.protagonist.tank);
|
const tank = Duel.use((state) => state.protagonist.tank);
|
||||||
const rawPrice =
|
const rawPrice =
|
||||||
typeof tank.price === 'number' ? tank.price : tank.price.value;
|
typeof tank.price === 'number' ? tank.price : tank.price.value;
|
||||||
|
|||||||
@@ -70,12 +70,11 @@ export function Options({ thicknessRange }: OptionsProps) {
|
|||||||
const environment = TankopediaPersistent.use(
|
const environment = TankopediaPersistent.use(
|
||||||
(state) => state.model.visual.environment,
|
(state) => state.model.visual.environment,
|
||||||
);
|
);
|
||||||
const developerMode = App.use((state) => state.developerMode);
|
const developerMode = App.useDeferred(false, (state) => state.developerMode);
|
||||||
const antagonistGun = Duel.use((state) => state.antagonist.gun);
|
const antagonistGun = Duel.use((state) => state.antagonist.gun);
|
||||||
const antagonistShell = Duel.use((state) => state.antagonist.shell);
|
const antagonistShell = Duel.use((state) => state.antagonist.shell);
|
||||||
const [antagonistSelectorOpen, setAntagonistSelectorOpen] = useState(false);
|
const [antagonistSelectorOpen, setAntagonistSelectorOpen] = useState(false);
|
||||||
const antagonistTank = Duel.use((state) => state.antagonist.tank);
|
const antagonistTank = Duel.use((state) => state.antagonist.tank);
|
||||||
const antagonistTurret = Duel.use((state) => state.antagonist.turret);
|
|
||||||
const hasCalibratedShells = useEquipment(103, true);
|
const hasCalibratedShells = useEquipment(103, true);
|
||||||
const [tab, setTab] = useState('search');
|
const [tab, setTab] = useState('search');
|
||||||
const mutateDuel = Duel.useMutation();
|
const mutateDuel = Duel.useMutation();
|
||||||
|
|||||||
@@ -22,8 +22,7 @@ export function ArmorPlateDisplay() {
|
|||||||
(state) => state.highlightArmor,
|
(state) => state.highlightArmor,
|
||||||
);
|
);
|
||||||
const mutateTankopediaEphemeral = TankopediaEphemeral.useMutation();
|
const mutateTankopediaEphemeral = TankopediaEphemeral.useMutation();
|
||||||
const developerMode = App.use((state) => state.developerMode);
|
const developerMode = App.useDeferred(false, (state) => state.developerMode);
|
||||||
const devThicknessInput = useRef<HTMLInputElement>(null);
|
|
||||||
const duelStore = Duel.useStore();
|
const duelStore = Duel.useStore();
|
||||||
const input = useRef<HTMLInputElement>(null);
|
const input = useRef<HTMLInputElement>(null);
|
||||||
const tankopediaEphemeralStore = TankopediaEphemeral.useStore();
|
const tankopediaEphemeralStore = TankopediaEphemeral.useStore();
|
||||||
|
|||||||
@@ -1,5 +1,12 @@
|
|||||||
import { Draft, produce } from 'immer';
|
import { Draft, produce } from 'immer';
|
||||||
import { createContext, ReactNode, useContext, useRef } from 'react';
|
import {
|
||||||
|
createContext,
|
||||||
|
ReactNode,
|
||||||
|
useContext,
|
||||||
|
useEffect,
|
||||||
|
useRef,
|
||||||
|
useState,
|
||||||
|
} from 'react';
|
||||||
import { StoreApi, useStore as useStoreZustand } from 'zustand';
|
import { StoreApi, useStore as useStoreZustand } from 'zustand';
|
||||||
|
|
||||||
type StoreProviderProps<InitData> = {
|
type StoreProviderProps<InitData> = {
|
||||||
@@ -49,6 +56,20 @@ export function createNextSafeStore<Store extends StoreApi<unknown>, InitData>(
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function useDeferred<Slice = Type>(
|
||||||
|
initial: Slice,
|
||||||
|
selector: (store: Type) => Slice = (state) => state as Slice,
|
||||||
|
) {
|
||||||
|
const [state, setState] = useState(initial);
|
||||||
|
const trueState = use(selector);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setState(trueState);
|
||||||
|
}, [trueState]);
|
||||||
|
|
||||||
|
return state;
|
||||||
|
}
|
||||||
|
|
||||||
function useMutation() {
|
function useMutation() {
|
||||||
const counterStoreContext = useStore();
|
const counterStoreContext = useStore();
|
||||||
|
|
||||||
@@ -61,5 +82,5 @@ export function createNextSafeStore<Store extends StoreApi<unknown>, InitData>(
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return { Provider, use, useMutation, useStore };
|
return { Provider, use, useMutation, useStore, useDeferred };
|
||||||
}
|
}
|
||||||
@@ -26,8 +26,8 @@ export interface App {
|
|||||||
policiesAgreementIndex: number;
|
policiesAgreementIndex: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const { Provider, use, useMutation, useStore } = createNextSafeStore(
|
export const { Provider, use, useMutation, useStore, useDeferred } =
|
||||||
() =>
|
createNextSafeStore(() =>
|
||||||
create<App>()(
|
create<App>()(
|
||||||
persist(
|
persist(
|
||||||
(set) => ({
|
(set) => ({
|
||||||
@@ -38,4 +38,4 @@ export const { Provider, use, useMutation, useStore } = createNextSafeStore(
|
|||||||
{ name: 'app', merge: (a, b) => merge(b, a) },
|
{ name: 'app', merge: (a, b) => merge(b, a) },
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
Reference in new issue
Block a user