Skip to content

Commit 529320d

Browse files
committed
realtime insert channel
1 parent a511e18 commit 529320d

2 files changed

Lines changed: 24 additions & 20 deletions

File tree

hooks/useRealtimeStore.ts

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ServerUser, Server } from '@/types/dbtypes';
1+
import { ServerUser, Server, Channel } from '@/types/dbtypes';
22
import {
33
useAddMessage,
44
useAddServer,
@@ -8,7 +8,9 @@ import {
88
useGetUserPerms,
99
useMessages,
1010
useRemoveMessage,
11+
useServers,
1112
useUpdateMessage,
13+
useUpdateServer,
1214
} from '@/lib/store';
1315
import { useEffect } from 'react';
1416
import { Database } from '@/types/database.supabase';
@@ -20,6 +22,8 @@ import { ChannelPermissions as ChannelPermissionsTableType } from '@/types/dbtyp
2022
export function useRealtimeStore(supabase: SupabaseClient<Database>) {
2123
const addServer = useAddServer();
2224
const getServers = useGetServers();
25+
const servers = useServers();
26+
const updateServer = useUpdateServer();
2327

2428
const messages = useMessages();
2529
const addMessage = useAddMessage();
@@ -36,6 +40,7 @@ export function useRealtimeStore(supabase: SupabaseClient<Database>) {
3640

3741
useEffect(() => {
3842
//this condition makes sure that the functions in the store are initialized, realistically it can be any function, I just chose addServer
43+
3944
if (addServer) {
4045
supabase
4146
.channel('server_users')
@@ -90,23 +95,26 @@ export function useRealtimeStore(supabase: SupabaseClient<Database>) {
9095

9196
supabase
9297
.channel('channels')
93-
.on<Server>(
98+
.on<Channel>(
9499
'postgres_changes',
95100
{ event: 'INSERT', schema: 'public', table: 'channels' },
96101
async (payload) => {
97-
console.log('update');
102+
console.log('insert channel');
103+
const server = servers.find(
104+
(server) => server.server_id == payload.new.server_id
105+
);
98106

99-
if (user) {
100-
getServers(supabase, user.id);
107+
if (server) {
108+
updateServer(supabase, server.server_id);
101109
}
102110
}
103111
)
104112
.subscribe();
105113
}
106114

107115
// add return right here!
108-
// return serverUsersListener.unsubscribe();
109-
}, [addServer, supabase, user, getServers]);
116+
// return serverUsersListener.unsubscribe();;
117+
}, [addServer, supabase, user, getServers, servers, updateServer]);
110118

111119
useEffect(() => {
112120
if (addMessage && getUserPerms && channel) {

lib/store.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,9 @@ const useServerStore = create<ServerState>()((set) => ({
4747
}
4848
},
4949
removeServer: async (serverId) => {
50-
set(
51-
(state) => ({
52-
servers: state.servers.filter(
53-
(server) => server.server_id !== serverId
54-
),
55-
}),
56-
true
57-
);
50+
set((state) => ({
51+
servers: state.servers.filter((server) => server.server_id !== serverId),
52+
}));
5853
},
5954
getServers: async (supabase, userId) => {
6055
const { data, error } = await getServersForUser(supabase, userId);
@@ -64,7 +59,7 @@ const useServerStore = create<ServerState>()((set) => ({
6459
}
6560

6661
if (data) {
67-
set({ servers: data as ServersForUser[] }, true);
62+
set({ servers: data as ServersForUser[] });
6863
}
6964
},
7065
updateServer: async (supabase, serverId) => {
@@ -78,13 +73,12 @@ const useServerStore = create<ServerState>()((set) => ({
7873
if (data) {
7974
set((state) => ({
8075
servers: state.servers.map((server) => {
81-
// Once we hit a message that matches the id, we can return the updated message instead of the old one
76+
// Once we hit a server that matches the id, we can return the updated server instead of the old one
8277
if (server.server_id === data[0].id) {
83-
return data as MessageWithServerProfile;
78+
return { server_id: serverId, servers: data[0] };
8479
}
85-
8680
// Otherwise fallback to the old one
87-
return message;
81+
return server;
8882
}),
8983
}));
9084
}
@@ -232,6 +226,8 @@ export const useServers = () => useServerStore((state) => state.servers);
232226
export const useAddServer = () => useServerStore((state) => state.addServer);
233227
export const useRemoveServer = () =>
234228
useServerStore((state) => state.removeServer);
229+
export const useUpdateServer = () =>
230+
useServerStore((state) => state.updateServer);
235231
export const useGetServers = () => useServerStore((state) => state.getServers);
236232
export const useMessages = () => useMessagesStore((state) => state.messages);
237233
export const useGetMessages = () =>

0 commit comments

Comments
 (0)