diff --git a/new-client/.claude/settings.local.json b/new-client/.claude/settings.local.json index 1c53390..564e78b 100644 --- a/new-client/.claude/settings.local.json +++ b/new-client/.claude/settings.local.json @@ -1,7 +1,9 @@ { "permissions": { "allow": [ - "Bash(python -c \"import sys,json; p=json.load\\(sys.stdin\\); deps={**p.get\\('dependencies',{}\\), **p.get\\('devDependencies',{}\\)}; [print\\(k,v\\) for k in sorted\\(deps\\) if any\\(x in k for x in ['mediasoup','socket','vueuse','vue']\\)]\")" + "Bash(python -c \"import sys,json; p=json.load\\(sys.stdin\\); deps={**p.get\\('dependencies',{}\\), **p.get\\('devDependencies',{}\\)}; [print\\(k,v\\) for k in sorted\\(deps\\) if any\\(x in k for x in ['mediasoup','socket','vueuse','vue']\\)]\")", + "Bash(yarn vue-tsc *)", + "Bash(yarn eslint *)" ] } } diff --git a/new-client/package.json b/new-client/package.json index 36da842..1c724b0 100644 --- a/new-client/package.json +++ b/new-client/package.json @@ -24,6 +24,8 @@ "@zag-js/file-upload": "^1.41.0", "@zag-js/file-utils": "^1.40.0", "@zag-js/password-input": "^1.40.0", + "@zag-js/slider": "^1.41.2", + "@zag-js/switch": "^1.41.1", "@zag-js/toggle": "^1.40.0", "@zag-js/vue": "^1.40.0", "date-fns": "^4.1.0", diff --git a/new-client/src/app/bootstrap/signaling.ts b/new-client/src/app/bootstrap/signaling.ts index c866853..f9013a1 100644 --- a/new-client/src/app/bootstrap/signaling.ts +++ b/new-client/src/app/bootstrap/signaling.ts @@ -1,4 +1,4 @@ -import type { ChatMessage } from '@shared/api/generated-chad-api.ts' +import type { Channel, ChatMessage } from '@shared/api/generated-chad-api.ts' import { useAuth } from '@shared/composables/use-auth.ts' import { useClients } from '@shared/composables/use-clients' import { useEventBus } from '@shared/composables/use-event-bus.ts' @@ -12,12 +12,10 @@ export default function () { const { addClient, updateClient, removeClient, clear: clearClients } = useClients() const eventBus = useEventBus() - watch(signaling.connected, (connected) => { - if (!connected) + watch(signaling.socket, (socket) => { + if (!socket) return - const socket = signaling.socket.value! - socket.on('initialized', async ({ clients }) => { addClient(...clients) }) @@ -42,6 +40,22 @@ export default function () { socket.on('chat:new-message', (message: ChatMessage) => { eventBus.emit('chat:new-message', message) }) + + socket.on('channel-created', async (channel: Channel) => { + eventBus.emit('channel:created', channel) + + await queryClient.setQueryData(['channel-list'], (channels: Channel[]) => { + return [...channels, channel] + }) + }) + + socket.on('channel-removed', async (channelId: Channel['id']) => { + eventBus.emit('channel:removed', channelId) + + await queryClient.setQueryData(['channel-list'], (channels: Channel[]) => { + return channels.filter(channel => channel.id !== channelId) + }) + }) }) watchEffect(() => { diff --git a/new-client/src/entities/channel/ui/CreateChannelDialog.vue b/new-client/src/entities/channel/ui/CreateChannelDialog.vue index 93dde6b..88a4246 100644 --- a/new-client/src/entities/channel/ui/CreateChannelDialog.vue +++ b/new-client/src/entities/channel/ui/CreateChannelDialog.vue @@ -1,9 +1,10 @@