discord-clone/hooks/use-modal-store.ts

29 lines
857 B
TypeScript
Raw Normal View History

2023-10-14 00:06:14 -07:00
2023-10-18 22:55:19 -07:00
import { Channel, ChannelType, Server } from "@prisma/client";
2023-10-10 21:33:43 -07:00
import { create } from "zustand";
export type ModalType = "createServer" | "invite" | "editServer" | "members" | "createChannel" | "leaveServer" | "deleteServer" | "deleteChannel" | "editChannel" | "messageFile" | "deleteMessage";
2023-10-14 00:06:14 -07:00
interface ModalData {
server?: Server;
2023-10-18 22:55:19 -07:00
channel?: Channel
channelType?: ChannelType;
apiUrl?: string;
query?: Record<string, any>;
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 }),
}));