Yaltopia-Tickets-App/lib/pin-store.ts
2026-06-05 13:39:37 +03:00

40 lines
1.1 KiB
TypeScript

import { create } from "zustand";
import { persist, createJSONStorage } from "zustand/middleware";
import AsyncStorage from "@react-native-async-storage/async-storage";
interface PinState {
hasPin: boolean;
lastUnlockedAt: number | null;
setHasPin: (value: boolean) => void;
unlock: () => void;
lock: () => void;
isLocked: () => boolean;
}
export const usePinStore = create<PinState>()(
persist(
(set, get) => ({
hasPin: false,
lastUnlockedAt: null,
setHasPin: (value) => set({ hasPin: value }),
unlock: () => set({ lastUnlockedAt: Date.now() }),
lock: () => set({ lastUnlockedAt: null }),
isLocked: () => {
const { hasPin, lastUnlockedAt } = get();
if (!hasPin) return false;
return lastUnlockedAt === null;
},
}),
{
name: "yaltopia-pin-storage",
storage: createJSONStorage(() => AsyncStorage),
partialize: (state) => ({ hasPin: state.hasPin }),
merge: (persisted, current) => ({
...current,
...(persisted as object),
lastUnlockedAt: null,
}),
},
),
);