import { useState } from 'react' import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { apiClient } from '../../core/api/api-client' const fetchMitras = async () => { const res = await apiClient.get('/internal/mitras') return res.data.data } const fetchOnlineMitras = async () => { const res = await apiClient.get('/internal/mitras/online') return res.data.data } const createMitra = async (data) => { const res = await apiClient.post('/internal/mitras', data) return res.data.data } const updateMitraStatus = async ({ id, is_active }) => { const res = await apiClient.patch(`/internal/mitras/${id}/status`, { is_active }) return res.data.data } const fetchOnlineLogs = async (mitraId) => { const res = await apiClient.get(`/internal/mitras/${mitraId}/online-logs`) return res.data.data } export default function MitrasPage() { const queryClient = useQueryClient() const { data, isLoading } = useQuery({ queryKey: ['mitras'], queryFn: fetchMitras }) const { data: onlineData } = useQuery({ queryKey: ['mitras-online'], queryFn: fetchOnlineMitras, refetchInterval: 10000, }) const [form, setForm] = useState({ phone: '', display_name: '' }) const [showForm, setShowForm] = useState(false) const [logsForMitra, setLogsForMitra] = useState(null) const { data: logsData, isLoading: logsLoading } = useQuery({ queryKey: ['mitra-online-logs', logsForMitra], queryFn: () => fetchOnlineLogs(logsForMitra), enabled: !!logsForMitra, }) const createMutation = useMutation({ mutationFn: createMitra, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['mitras'] }) setForm({ phone: '', display_name: '' }) setShowForm(false) }, }) const statusMutation = useMutation({ mutationFn: updateMitraStatus, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['mitras'] }), }) if (isLoading) return
| Nama | Nomor HP | Status Akun | Online | Sesi Aktif | Aksi |
|---|---|---|---|---|---|
| {mitra.display_name} | {mitra.phone} | {mitra.is_active ? 'Aktif' : 'Nonaktif'} | {onlineInfo ? '● Online' : '○ Offline'} | {onlineInfo ? onlineInfo.active_session_count : '-'} |
Loading...
) : (| Status | Waktu |
|---|---|
| {log.status === 'online' ? '● Online' : '○ Offline'} | {new Date(log.timestamp).toLocaleString('id-ID')} |