2026-07-26 16:55:20 +07:00
|
|
|
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
|
|
|
|
|
import { useEffect } from "react";
|
2026-07-26 16:14:32 +07:00
|
|
|
|
|
|
|
|
import { recordingsApi } from "@/lib/api";
|
|
|
|
|
import type { VoiceRecording } from "@/lib/types";
|
2026-07-27 21:54:31 +07:00
|
|
|
import type { WsHook } from "@/lib/ws-hook";
|
2026-07-26 16:14:32 +07:00
|
|
|
|
2026-07-26 16:55:20 +07:00
|
|
|
export function useRecordings() {
|
|
|
|
|
return useQuery<VoiceRecording[]>({
|
|
|
|
|
queryKey: ["recordings"],
|
|
|
|
|
queryFn: async () => {
|
|
|
|
|
const res = await recordingsApi.list(50);
|
|
|
|
|
return res.items;
|
|
|
|
|
},
|
|
|
|
|
});
|
2026-07-26 16:14:32 +07:00
|
|
|
}
|
|
|
|
|
|
2026-07-26 16:55:20 +07:00
|
|
|
export function useDeleteRecording() {
|
|
|
|
|
const qc = useQueryClient();
|
|
|
|
|
return useMutation({
|
|
|
|
|
mutationFn: (id: string) => recordingsApi.delete(id),
|
|
|
|
|
onSuccess: () => qc.invalidateQueries({ queryKey: ["recordings"] }),
|
|
|
|
|
});
|
|
|
|
|
}
|
2026-07-26 16:14:32 +07:00
|
|
|
|
2026-07-26 16:55:20 +07:00
|
|
|
export function useRecordingsWsSync(ws: WsHook) {
|
|
|
|
|
const qc = useQueryClient();
|
2026-07-26 16:46:53 +07:00
|
|
|
useEffect(() => {
|
2026-07-26 16:55:20 +07:00
|
|
|
const unsub = ws.on("voice_recording_uploaded", (data) => {
|
|
|
|
|
const rec = data as VoiceRecording;
|
|
|
|
|
qc.setQueryData<VoiceRecording[]>(["recordings"], (old) =>
|
|
|
|
|
old ? [rec, ...old] : [rec],
|
|
|
|
|
);
|
|
|
|
|
});
|
|
|
|
|
return unsub;
|
|
|
|
|
}, [ws, qc]);
|
2026-07-26 16:14:32 +07:00
|
|
|
}
|