adding chat features, admin features and bug fixes
This commit is contained in:
57
frontend/src/contexts/ChatContext.tsx
Normal file
57
frontend/src/contexts/ChatContext.tsx
Normal file
@@ -0,0 +1,57 @@
|
||||
import React, { createContext, useContext, useState, useCallback, ReactNode } from 'react';
|
||||
import { useQuery } from '@tanstack/react-query';
|
||||
import { nextcloudApi } from '../services/nextcloud';
|
||||
import { useLayout } from './LayoutContext';
|
||||
import type { NextcloudConversation } from '../types/nextcloud.types';
|
||||
|
||||
interface ChatContextType {
|
||||
rooms: NextcloudConversation[];
|
||||
selectedRoomToken: string | null;
|
||||
selectRoom: (token: string | null) => void;
|
||||
connected: boolean;
|
||||
loginName: string | null;
|
||||
}
|
||||
|
||||
const ChatContext = createContext<ChatContextType | undefined>(undefined);
|
||||
|
||||
interface ChatProviderProps {
|
||||
children: ReactNode;
|
||||
}
|
||||
|
||||
export const ChatProvider: React.FC<ChatProviderProps> = ({ children }) => {
|
||||
const [selectedRoomToken, setSelectedRoomToken] = useState<string | null>(null);
|
||||
const { chatPanelOpen } = useLayout();
|
||||
|
||||
const { data } = useQuery({
|
||||
queryKey: ['nextcloud', 'rooms'],
|
||||
queryFn: () => nextcloudApi.getRooms(),
|
||||
refetchInterval: chatPanelOpen ? 30000 : false,
|
||||
enabled: chatPanelOpen,
|
||||
});
|
||||
|
||||
const rooms = data?.rooms ?? [];
|
||||
const connected = data?.connected ?? false;
|
||||
const loginName = data?.loginName ?? null;
|
||||
|
||||
const selectRoom = useCallback((token: string | null) => {
|
||||
setSelectedRoomToken(token);
|
||||
}, []);
|
||||
|
||||
const value: ChatContextType = {
|
||||
rooms,
|
||||
selectedRoomToken,
|
||||
selectRoom,
|
||||
connected,
|
||||
loginName,
|
||||
};
|
||||
|
||||
return <ChatContext.Provider value={value}>{children}</ChatContext.Provider>;
|
||||
};
|
||||
|
||||
export const useChat = (): ChatContextType => {
|
||||
const context = useContext(ChatContext);
|
||||
if (context === undefined) {
|
||||
throw new Error('useChat must be used within a ChatProvider');
|
||||
}
|
||||
return context;
|
||||
};
|
||||
Reference in New Issue
Block a user