.
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
import type { QueryClient } from "@tanstack/react-query";
|
||||
import { create } from "zustand";
|
||||
import { messageSchema, type ChannelId, type Message, type MessageId, type ServerId } from "~/lib/api/types";
|
||||
import { GATEWAY_URL } from "~/lib/consts";
|
||||
import { GatewayClient } from "~/lib/websocket/gateway/client";
|
||||
import { ConnectionState, EventType, type EventData, type VoiceServerUpdateEvent } from "~/lib/websocket/gateway/types";
|
||||
import { useChannelsVoiceStateStore } from "./channels-voice-state";
|
||||
@@ -9,8 +10,6 @@ import { useServerChannelsStore } from "./server-channels-store";
|
||||
import { useServerListStore } from "./server-list-store";
|
||||
import { useUsersStore } from "./users-store";
|
||||
|
||||
const GATEWAY_URL = "ws://localhost:12345/gateway/ws";
|
||||
|
||||
const HANDLERS = {
|
||||
[EventType.ADD_SERVER]: (self: GatewayState, data: Extract<EventData, { type: EventType.ADD_SERVER }>["data"]) => {
|
||||
useServerListStore.getState().addServer(data.server);
|
||||
|
||||
@@ -16,7 +16,6 @@ export const usePrivateChannelsStore = create<PrivateChannelsStore>()(
|
||||
set((state) => {
|
||||
for (const channel of channels) {
|
||||
state.channels[channel.id] = channel;
|
||||
console.log("add channel", channel);
|
||||
}
|
||||
}),
|
||||
addChannel: (channel: RecipientChannel) =>
|
||||
|
||||
@@ -1,54 +1,20 @@
|
||||
import { create as batshitCreate, keyResolver } from "@yornaath/batshit";
|
||||
import { create } from "zustand";
|
||||
import { immer } from "zustand/middleware/immer";
|
||||
import { getUser } from "~/lib/api/client/user";
|
||||
import type { FullUser, PartialUser, UserId } from "~/lib/api/types";
|
||||
|
||||
type UsersStore = {
|
||||
users: Record<UserId, PartialUser>;
|
||||
currentUserId: UserId | undefined;
|
||||
fetchUsersIfNotPresent: (userIds: UserId[]) => Promise<void>;
|
||||
addUser: (user: PartialUser) => void;
|
||||
removeUser: (userId: UserId) => void;
|
||||
setCurrentUserId: (userId: UserId) => void;
|
||||
getCurrentUser: () => FullUser | undefined;
|
||||
};
|
||||
|
||||
const usersFetcher = batshitCreate({
|
||||
fetcher: async (userIds: UserId[]) => {
|
||||
const users = [];
|
||||
|
||||
for (const userId of userIds) {
|
||||
users.push(getUser(userId));
|
||||
}
|
||||
|
||||
return await Promise.all(users);
|
||||
},
|
||||
resolver: keyResolver("id"),
|
||||
});
|
||||
|
||||
export const useUsersStore = create<UsersStore>()(
|
||||
immer((set, get) => ({
|
||||
users: {},
|
||||
currentUserId: undefined,
|
||||
fetchUsersIfNotPresent: async (userIds) => {
|
||||
const userPromises: Promise<PartialUser>[] = [];
|
||||
for (const userId of userIds) {
|
||||
const user = get().users[userId];
|
||||
if (!user) {
|
||||
userPromises.push(usersFetcher.fetch(userId));
|
||||
}
|
||||
}
|
||||
|
||||
const users = await Promise.all(userPromises);
|
||||
const activeUsers = users.filter(Boolean);
|
||||
|
||||
set((state) => {
|
||||
for (const user of activeUsers) {
|
||||
if (user?.id) state.users[user.id] = user;
|
||||
}
|
||||
});
|
||||
},
|
||||
addUser: (user) =>
|
||||
set((state) => {
|
||||
if (user.id !== get().currentUserId) state.users[user.id] = user;
|
||||
@@ -68,6 +34,9 @@ export const useUsersStore = create<UsersStore>()(
|
||||
state.currentUserId = userId;
|
||||
}),
|
||||
|
||||
getCurrentUser: () => (get().currentUserId ? (get().users[get().currentUserId!] as FullUser) : undefined),
|
||||
getCurrentUser: () => {
|
||||
const currentUserId = get().currentUserId;
|
||||
return currentUserId ? (get().users[currentUserId] as FullUser) : undefined;
|
||||
},
|
||||
})),
|
||||
);
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import { create } from "zustand";
|
||||
import { VOICE_GATEWAY_URL } from "~/lib/consts";
|
||||
import { WebRTCClient } from "~/lib/websocket/voice/client";
|
||||
import { ConnectionState } from "~/lib/websocket/voice/types";
|
||||
import { useVoiceStateStore } from "./voice-state-store";
|
||||
|
||||
const VOICE_GATEWAY_URL = "ws://localhost:12345/voice/ws";
|
||||
|
||||
interface WebRTCState {
|
||||
client: WebRTCClient | null;
|
||||
|
||||
Reference in New Issue
Block a user