Дизайн звонков
This commit is contained in:
70
app/providers/CallProvider/CallProvider.tsx
Normal file
70
app/providers/CallProvider/CallProvider.tsx
Normal file
@@ -0,0 +1,70 @@
|
||||
import { Call } from "@/app/components/Call/Call";
|
||||
import { createContext, useState } from "react";
|
||||
|
||||
|
||||
export interface CallContextValue {
|
||||
call: (callable: string) => void;
|
||||
close: () => void;
|
||||
activeCall: string;
|
||||
callState: CallState;
|
||||
muted: boolean;
|
||||
sound: boolean;
|
||||
setMuted: (muted: boolean) => void;
|
||||
setSound: (sound: boolean) => void;
|
||||
duration: number;
|
||||
setShowCallView: (show: boolean) => void;
|
||||
}
|
||||
|
||||
export enum CallState {
|
||||
CONNECTING,
|
||||
ACTIVE,
|
||||
ENDED,
|
||||
INCOMING
|
||||
}
|
||||
|
||||
export const CallContext = createContext<CallContextValue | null>(null);
|
||||
export interface CallProviderProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export function CallProvider(props : CallProviderProps) {
|
||||
const [activeCall, setActiveCall] = useState<string>("");
|
||||
const [callState, setCallState] = useState<CallState>(CallState.ENDED);
|
||||
const [muted, setMuted] = useState<boolean>(false);
|
||||
const [sound, setSound] = useState<boolean>(true);
|
||||
const [duration, setDuration] = useState<number>(0);
|
||||
const [showCallView, setShowCallView] = useState<boolean>(callState == CallState.INCOMING);
|
||||
|
||||
const call = (dialog: string) => {
|
||||
setActiveCall(dialog);
|
||||
setCallState(CallState.CONNECTING);
|
||||
setShowCallView(true);
|
||||
}
|
||||
|
||||
const close = () => {
|
||||
setActiveCall("");
|
||||
setCallState(CallState.ENDED);
|
||||
setShowCallView(false);
|
||||
setDuration(0);
|
||||
}
|
||||
|
||||
const context = {
|
||||
call,
|
||||
close,
|
||||
activeCall,
|
||||
callState,
|
||||
muted,
|
||||
sound,
|
||||
setMuted,
|
||||
setSound,
|
||||
duration,
|
||||
setShowCallView
|
||||
};
|
||||
|
||||
return (
|
||||
<CallContext.Provider value={context}>
|
||||
{props.children}
|
||||
{showCallView && <Call context={context}></Call>}
|
||||
</CallContext.Provider>
|
||||
)
|
||||
}
|
||||
5
app/providers/CallProvider/translateDurationTime.ts
Normal file
5
app/providers/CallProvider/translateDurationTime.ts
Normal file
@@ -0,0 +1,5 @@
|
||||
export const translateDurationToTime = (duration: number) => {
|
||||
const minutes = Math.floor(duration / 60);
|
||||
const seconds = duration % 60;
|
||||
return `${minutes}:${seconds < 10 ? '0' : ''}${seconds}`;
|
||||
}
|
||||
15
app/providers/CallProvider/useCalls.ts
Normal file
15
app/providers/CallProvider/useCalls.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
import { useContext } from "react";
|
||||
import { CallContext, CallContextValue } from "./CallProvider";
|
||||
|
||||
/**
|
||||
* Хук предоставляет функции для работы с звонками, такие как инициирование звонка, принятие звонка, завершение звонка и т.д.
|
||||
* Он может использоваться в компонентах, связанных с звонками, для управления состоянием звонков и взаимодействия с сервером.
|
||||
*/
|
||||
export function useCalls() : CallContextValue {
|
||||
const context = useContext(CallContext);
|
||||
if (!context) {
|
||||
throw new Error("useCalls must be used within a CallProvider");
|
||||
}
|
||||
|
||||
return context;
|
||||
}
|
||||
Reference in New Issue
Block a user