import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query' import { apiClient } from '../../core/api/api-client' const fetchAnonymityConfig = async () => { const res = await apiClient.get('/internal/config/anonymity') return res.data.data } const updateAnonymityConfig = async (anonymity_enabled) => { const res = await apiClient.patch('/internal/config/anonymity', { anonymity_enabled }) return res.data.data } const fetchMaxCustomersConfig = async () => { const res = await apiClient.get('/internal/config/max-customers-per-mitra') return res.data.data } const updateMaxCustomersConfig = async (max_customers_per_mitra) => { const res = await apiClient.patch('/internal/config/max-customers-per-mitra', { max_customers_per_mitra }) return res.data.data } // Phase 3 config fetchers const fetchFreeTrialConfig = async () => { const res = await apiClient.get('/internal/config/free-trial') return res.data.data } const updateFreeTrialConfig = async (data) => { const res = await apiClient.patch('/internal/config/free-trial', data) return res.data.data } const fetchExtensionTimeoutConfig = async () => { const res = await apiClient.get('/internal/config/extension-timeout') return res.data.data } const updateExtensionTimeoutConfig = async (extension_timeout_seconds) => { const res = await apiClient.patch('/internal/config/extension-timeout', { extension_timeout_seconds }) return res.data.data } // Phase 3.1: Mitra Ping Config const fetchMitraPingConfig = async () => { const res = await apiClient.get('/internal/config/mitra-ping') return res.data.data } const updateMitraPingConfig = async (data) => { const res = await apiClient.patch('/internal/config/mitra-ping', data) return res.data.data } const fetchEarlyEndConfig = async () => { const res = await apiClient.get('/internal/config/early-end') return res.data.data } const updateEarlyEndConfig = async (data) => { const res = await apiClient.patch('/internal/config/early-end', data) return res.data.data } // Phase 3.3: Topic Sensitivity const fetchSensitivityConfig = async () => { const res = await apiClient.get('/internal/config/sensitivity') return res.data.data } const updateSensitivityConfig = async (data) => { const res = await apiClient.patch('/internal/config/sensitivity', data) return res.data.data } export default function SettingsPage() { const queryClient = useQueryClient() const { data, isLoading } = useQuery({ queryKey: ['config-anonymity'], queryFn: fetchAnonymityConfig }) const anonymityMutation = useMutation({ mutationFn: updateAnonymityConfig, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['config-anonymity'] }), }) const { data: maxData, isLoading: maxLoading } = useQuery({ queryKey: ['config-max-customers'], queryFn: fetchMaxCustomersConfig, }) const maxMutation = useMutation({ mutationFn: updateMaxCustomersConfig, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['config-max-customers'] }), }) // Phase 3: Free Trial const { data: ftData, isLoading: ftLoading } = useQuery({ queryKey: ['config-free-trial'], queryFn: fetchFreeTrialConfig, }) const ftMutation = useMutation({ mutationFn: updateFreeTrialConfig, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['config-free-trial'] }), }) // Phase 3: Extension Timeout const { data: etData, isLoading: etLoading } = useQuery({ queryKey: ['config-extension-timeout'], queryFn: fetchExtensionTimeoutConfig, }) const etMutation = useMutation({ mutationFn: updateExtensionTimeoutConfig, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['config-extension-timeout'] }), }) // Phase 3: Early End const { data: eeData, isLoading: eeLoading } = useQuery({ queryKey: ['config-early-end'], queryFn: fetchEarlyEndConfig, }) const eeMutation = useMutation({ mutationFn: updateEarlyEndConfig, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['config-early-end'] }), }) // Phase 3.1: Mitra Ping const { data: mpData, isLoading: mpLoading } = useQuery({ queryKey: ['config-mitra-ping'], queryFn: fetchMitraPingConfig, }) const mpMutation = useMutation({ mutationFn: updateMitraPingConfig, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['config-mitra-ping'] }), }) // Phase 3.3: Topic Sensitivity const { data: senData, isLoading: senLoading } = useQuery({ queryKey: ['config-sensitivity'], queryFn: fetchSensitivityConfig, }) const senMutation = useMutation({ mutationFn: updateSensitivityConfig, onSuccess: () => queryClient.invalidateQueries({ queryKey: ['config-sensitivity'] }), }) if (isLoading || maxLoading || ftLoading || etLoading || eeLoading || mpLoading || senLoading) return
Ketika dinonaktifkan, pengguna anonim akan diminta mendaftar setelah sesi selesai.
{anonymityMutation.isError &&Gagal menyimpan.
}Jumlah maksimal customer yang bisa ditangani satu Mitra secara bersamaan. Perubahan hanya berlaku untuk chat baru.
Gagal menyimpan.
}Aktifkan free trial untuk customer baru yang belum pernah bertransaksi.
Gagal menyimpan.
}Waktu tunggu untuk customer memutuskan dan mitra mengkonfirmasi perpanjangan sesi.
Gagal menyimpan.
}Izinkan mitra dan/atau customer untuk mengakhiri sesi sebelum waktu habis.
{eeMutation.isError &&Gagal menyimpan.
}Konfigurasi apakah mitra harus mengirim ping (heartbeat) untuk tetap online.
Jika dinonaktifkan, mitra akan tetap online tanpa perlu mengirim ping. QC bertanggung jawab atas kualitas layanan mitra.
Gagal menyimpan.
}Konfigurasi untuk fitur penandaan sesi sebagai topik sensitif oleh Mitra.
Jika dinonaktifkan, Mitra langsung menandai tanpa dialog konfirmasi.
Jika diaktifkan, setelah sesi ditandai sensitif Mitra tidak dapat mengembalikannya ke topik umum.
{senMutation.isError &&Gagal menyimpan.
}