2023-10-14 00:06:14 -07:00
|
|
|
|
2023-10-18 14:56:26 -07:00
|
|
|
import { ChannelType, Server } from "@prisma/client";
|
2023-10-10 21:33:43 -07:00
|
|
|
import { create } from "zustand";
|
|
|
|
|
2023-10-15 18:12:54 -07:00
|
|
|
export type ModalType = "createServer" | "invite" | "editServer" | "members" | "createChannel" | "leaveServer" | "deleteServer";
|
2023-10-14 00:06:14 -07:00
|
|
|
|
|
|
|
interface ModalData {
|
2023-10-18 14:56:26 -07:00
|
|
|
server?: Server;
|
|
|
|
channelType?: ChannelType;
|
2023-10-14 00:06:14 -07:00
|
|
|
}
|
2023-10-10 21:33:43 -07:00
|
|
|
|
|
|
|
interface ModalStore {
|
|
|
|
type: ModalType | null;
|
2023-10-14 00:06:14 -07:00
|
|
|
data: ModalData;
|
2023-10-10 21:33:43 -07:00
|
|
|
isOpen: boolean;
|
2023-10-14 00:06:14 -07:00
|
|
|
onOpen: (type: ModalType, data?:ModalData) => void;
|
2023-10-10 21:33:43 -07:00
|
|
|
onClose: () => void;
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useModal = create<ModalStore>((set) => ({
|
|
|
|
type: null,
|
2023-10-14 00:06:14 -07:00
|
|
|
data: {},
|
2023-10-10 21:33:43 -07:00
|
|
|
isOpen: false,
|
2023-10-14 00:06:14 -07:00
|
|
|
onOpen: (type, data= {}) => set({ isOpen: true, type, data }),
|
2023-10-10 21:33:43 -07:00
|
|
|
onClose: () => set({ type: null, isOpen: false }),
|
|
|
|
}));
|