Files
auto-trade/features/trade/store/use-trade-navigation-store.ts

57 lines
1.6 KiB
TypeScript
Raw Normal View History

"use client";
import { create } from "zustand";
import type { DashboardStockSearchItem } from "@/features/trade/types/trade.types";
/**
* @file features/trade/store/use-trade-navigation-store.ts
* @description -> URL 1 .
*/
export interface TradeNavigationTarget {
symbol: string;
name: string;
market: DashboardStockSearchItem["market"];
requestedAt: number;
}
interface TradeNavigationStoreState {
pendingTarget: TradeNavigationTarget | null;
}
interface TradeNavigationStoreActions {
setPendingTarget: (target: Omit<TradeNavigationTarget, "requestedAt">) => void;
consumePendingTarget: () => TradeNavigationTarget | null;
clearPendingTarget: () => void;
}
/**
* @description store
* @remarks UI 흐름: Dashboard -> setPendingTarget -> /trade -> TradeContainer consumePendingTarget ->
* @see features/dashboard/components/StockDetailPreview.tsx setPendingTarget
* @see features/trade/components/TradeContainer.tsx consumePendingTarget
*/
export const useTradeNavigationStore = create<
TradeNavigationStoreState & TradeNavigationStoreActions
>()((set, get) => ({
pendingTarget: null,
setPendingTarget: (target) =>
set({
pendingTarget: {
...target,
requestedAt: Date.now(),
},
}),
consumePendingTarget: () => {
const target = get().pendingTarget;
if (!target) return null;
set({ pendingTarget: null });
return target;
},
clearPendingTarget: () => set({ pendingTarget: null }),
}));