mirror of
https://github.com/perfect-panel/ppanel-web.git
synced 2026-02-06 03:30:25 -05:00
59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
import { getSubscribeList } from '@/services/admin/subscribe';
|
|
import { create } from 'zustand';
|
|
|
|
interface SubscribeState {
|
|
// Data
|
|
subscribes: API.SubscribeItem[];
|
|
|
|
// Actions
|
|
fetchSubscribes: () => Promise<void>;
|
|
|
|
// Getters
|
|
getSubscribeName: (subscribeId?: number) => string;
|
|
getSubscribeById: (subscribeId: number) => API.SubscribeItem | undefined;
|
|
}
|
|
|
|
export const useSubscribeStore = create<SubscribeState>((set, get) => ({
|
|
// Initial state
|
|
subscribes: [],
|
|
|
|
// Actions
|
|
fetchSubscribes: async () => {
|
|
try {
|
|
const { data } = await getSubscribeList({ page: 1, size: 999999999 });
|
|
set({ subscribes: data?.data?.list || [] });
|
|
} catch (error) {
|
|
// Handle error silently
|
|
}
|
|
},
|
|
|
|
// Getters
|
|
getSubscribeName: (subscribeId?: number) => {
|
|
if (!subscribeId) return 'Unknown';
|
|
const subscribe = get().subscribes.find((s) => s.id === subscribeId);
|
|
return subscribe?.name ?? `Subscribe ${subscribeId}`;
|
|
},
|
|
|
|
getSubscribeById: (subscribeId: number) => {
|
|
return get().subscribes.find((s) => s.id === subscribeId);
|
|
},
|
|
}));
|
|
|
|
export const useSubscribe = () => {
|
|
const store = useSubscribeStore();
|
|
|
|
// Auto-fetch subscribes
|
|
if (store.subscribes.length === 0) {
|
|
store.fetchSubscribes();
|
|
}
|
|
|
|
return {
|
|
subscribes: store.subscribes,
|
|
fetchSubscribes: store.fetchSubscribes,
|
|
getSubscribeName: store.getSubscribeName,
|
|
getSubscribeById: store.getSubscribeById,
|
|
};
|
|
};
|
|
|
|
export default useSubscribeStore;
|