Files
blitzkit/src/stores/compare.ts
T

51 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-04-04 13:51:07 -05:00
import { produce } from 'immer';
2024-04-05 13:59:30 -05:00
import { merge } from 'lodash';
2024-04-04 13:51:07 -05:00
import { create } from 'zustand';
2024-04-05 13:59:30 -05:00
import { persist, subscribeWithSelector } from 'zustand/middleware';
2024-04-04 13:51:07 -05:00
import { DuelMember } from './duel';
export interface CompareMember extends DuelMember {
2024-04-06 10:17:48 -05:00
key: string;
2024-04-04 13:51:07 -05:00
crewSkills: Record<string, number>;
}
2024-04-05 13:59:30 -05:00
export interface CompareTemporary {
2024-04-04 18:56:51 -05:00
members: CompareMember[];
2024-04-06 17:46:30 -05:00
sorting?: {
direction: 'ascending' | 'descending';
by: string;
};
2024-04-04 13:51:07 -05:00
}
2024-04-06 18:30:36 -05:00
export type DeltaMode = 'none' | 'percentage' | 'absolute';
2024-04-05 13:59:30 -05:00
export interface ComparePersistent {
deltaMode: DeltaMode;
}
export const useCompareTemporary = create<CompareTemporary>()(() => ({
2024-04-04 18:56:51 -05:00
members: [],
2024-04-04 13:51:07 -05:00
}));
2024-04-05 13:59:30 -05:00
export const useComparePersistent = create<ComparePersistent>()(
persist(
subscribeWithSelector<ComparePersistent>(() => ({
deltaMode: 'none',
})),
2024-04-06 10:17:48 -05:00
{
name: 'compare',
merge: (a, b) => merge(b, a),
},
2024-04-05 13:59:30 -05:00
),
);
export function mutateCompareTemporary(
recipe: (draft: CompareTemporary) => void,
) {
useCompareTemporary.setState(produce(recipe));
}
export function mutateComparePersistent(
recipe: (draft: ComparePersistent) => void,
) {
useComparePersistent.setState(produce(recipe));
2024-04-04 13:51:07 -05:00
}