From 0e2c97df473d777312e1c479ccf9c6598d20bea6 Mon Sep 17 00:00:00 2001 From: amaliadwiy Date: Thu, 28 May 2026 14:32:56 +0800 Subject: [PATCH] feat: tambah filter inactive since di halaman user management --- src/frontend/config/api.ts | 5 + .../routes/apps.$appId.users.index.tsx | 119 +++++++++++------- 2 files changed, 80 insertions(+), 44 deletions(-) diff --git a/src/frontend/config/api.ts b/src/frontend/config/api.ts index 78b1235..f240f84 100644 --- a/src/frontend/config/api.ts +++ b/src/frontend/config/api.ts @@ -33,6 +33,11 @@ export const API_URLS = { return `${DESA_PLUS_PROXY}/api/monitoring/log-all-villages?${params}` }, getStaleVillages: (days: 7 | 14 | 30 = 7) => `${DESA_PLUS_PROXY}/api/monitoring/stale-villages?days=${days}`, + getInactiveUsers: (days: 7 | 14 | 30 = 7, idVillage?: string, page = 1) => { + const params = new URLSearchParams({ days: String(days), page: String(page) }) + if (idVillage) params.set('idVillage', idVillage) + return `${DESA_PLUS_PROXY}/api/monitoring/inactive-users?${params}` + }, getGridOverview: () => `${DESA_PLUS_PROXY}/api/monitoring/grid-overview`, getDailyActivity: (range: 7 | 30 | 90 = 7) => `${DESA_PLUS_PROXY}/api/monitoring/daily-activity?range=${range}`, getComparisonActivity: (range: 7 | 30 | 90 = 7) => `${DESA_PLUS_PROXY}/api/monitoring/comparison-activity?range=${range}`, diff --git a/src/frontend/routes/apps.$appId.users.index.tsx b/src/frontend/routes/apps.$appId.users.index.tsx index 9ba0b80..0e2c1b0 100644 --- a/src/frontend/routes/apps.$appId.users.index.tsx +++ b/src/frontend/routes/apps.$appId.users.index.tsx @@ -240,6 +240,7 @@ function UsersIndexPage() { const [filterRole, setFilterRole] = useState(null) const [filterVillageSearch, setFilterVillageSearch] = useState('') const [filterVillageId, setFilterVillageId] = useState(null) + const [filterInactiveDays, setFilterInactiveDays] = useState(null) const [sortBy, setSortBy] = useState(null) const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc') @@ -254,22 +255,21 @@ function UsersIndexPage() { } const isDesaPlus = appId === 'desa-plus' + const isInactiveMode = !!filterInactiveDays const filterStatusParam = filterStatus === 'active' ? 'true' : filterStatus === 'inactive' ? 'false' : undefined const apiUrl = isDesaPlus - ? API_URLS.getUsers( - page, - searchQuery, - filterStatusParam, - filterRole ?? undefined, - filterVillageId ?? undefined, - sortBy ?? undefined, - sortBy ? sortDir : undefined, - ) + ? isInactiveMode + ? API_URLS.getInactiveUsers(Number(filterInactiveDays) as 7 | 14 | 30, filterVillageId ?? undefined, page) + : API_URLS.getUsers(page, searchQuery, filterStatusParam, filterRole ?? undefined, filterVillageId ?? undefined, sortBy ?? undefined, sortBy ? sortDir : undefined) : null const { data: response, error, isLoading, mutate } = useSWR(apiUrl, fetcher) - const users: APIUser[] = response?.data?.user || [] + const users: APIUser[] = isInactiveMode + ? (response?.data?.users || []) + : (response?.data?.user || []) + const totalPages = response?.data?.totalPage ?? 0 + const totalUsers = response?.data?.total ?? 0 useEffect(() => { if (debouncedSearch.length >= 3 || debouncedSearch.length === 0) { @@ -280,7 +280,7 @@ function UsersIndexPage() { useEffect(() => { setPage(1) - }, [filterStatus, filterRole, filterVillageId]) + }, [filterStatus, filterRole, filterVillageId, filterInactiveDays]) const handleClearSearch = () => { setSearch('') @@ -524,7 +524,6 @@ function UsersIndexPage() { onChange={(updates) => setForm((f) => ({ ...f, ...updates }))} {...sharedFormProps} /> -