import { defineStore } from 'pinia'; import { ref, h } from 'vue'; import { b as useUserStore, a as useConfigStore, u as useRouter$1, aI as fetchUserChats, s as supabase, aH as api, a1 as Button, aJ as fetchOneChat } from './server.mjs'; const useChatStore = defineStore("chat", () => { const userStore = useUserStore(); const config = useConfigStore(); const chats = ref([]); const loading = ref(false); const currentPage = ref(0); const router = useRouter$1(); const limit = ref(10); const endPage = ref(false); const setChat = (_chat) => { const index = chats.value.findIndex((item) => item.chat_id === _chat.chat_id); if (index >= 0) { Object.assign(chats.value[index], { ..._chat }); } else { chats.value.push(_chat); } }; const setChats = (_chats) => { _chats.map((item) => setChat(item)); }; const request = async () => { try { if (!endPage.value) { loading.value = true; const res = await fetchUserChats(userStore.user.id, ++currentPage.value, limit.value); setChats(res); if ((res == null ? void 0 : res.length) < limit.value) { endPage.value = true; } } } catch (e) { console.log("e ===>", e); } finally { loading.value = false; } }; const getChatWithId = async (chat_id) => { return await fetchOneChat(chat_id); }; const addChatWithId = async (chat_id) => { chats.value.unshift(getChatWithId(chat_id)); }; const runChannel = () => { supabase.channel("realtime:chats").on( "postgres_changes", { event: "*", schema: "public", table: "chats" }, async (payload) => { var _a, _b, _c, _d, _e, _f, _g, _h; if (((_a = userStore.user) == null ? void 0 : _a.id) && (payload.new.user1_id == userStore.user.id || payload.new.user2_id == userStore.user.id)) { if (payload.eventType === "INSERT") { await addChatWithId(payload.new.chat_id); } else if (payload.eventType === "UPDATE") { const chat = payload.new; setChat(chat); if (((_b = chat == null ? void 0 : chat.last_message) == null ? void 0 : _b.sender_id) && ((_c = chat == null ? void 0 : chat.last_message) == null ? void 0 : _c.sender_id) !== ((_d = userStore.user) == null ? void 0 : _d.id) && !((_e = chat == null ? void 0 : chat.last_message) == null ? void 0 : _e.is_read)) { const key = `open${Date.now()}`; const getChat = await getChatWithId(chat.chat_id); api.open({ message: config.useString("newMessage"), description: `${config.useString("YouHaveNewMessageFrom")}: ${((_f = userStore.user) == null ? void 0 : _f.id) === chat.user1_id ? (_g = getChat == null ? void 0 : getChat.user2) == null ? void 0 : _g.name : (_h = getChat == null ? void 0 : getChat.user1) == null ? void 0 : _h.name}`, btn: () => h( Button, { type: "primary", size: "small", onClick: async () => { api.close(key); await router.push({ name: "message-detail_message", query: { id: chat.chat_id } }); } }, { default: () => config.useString("show") } ), key, onClose: close }); } } } } ).subscribe(); }; return { chats, runChannel, request }; }); export { useChatStore as u }; //# sourceMappingURL=chatStore-CEJ4ipeC.mjs.map