From 7d82ddc3165a53529613ad0c075b126f040d2815 Mon Sep 17 00:00:00 2001 From: "Nemo (Claude Code)" Date: Wed, 1 Apr 2026 01:01:59 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20Mobile=20QA=20=E2=80=94=20manual=20tasks?= =?UTF-8?q?=20+=20remittance=20review=20(FIBEROPS-207-208)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - manual-tasks/[id].tsx: use r.data?.data ?? r.data for detail query to handle API response wrapper envelope, matching list screen pattern - remittances/[id].tsx: same fix — detail query now unwraps correctly - services/api.ts: use STORAGE_KEYS.TOKEN constant instead of hardcoded string literals in SecureStore calls --- app/(app)/manual-tasks/[id].tsx | 2 +- app/(app)/remittances/[id].tsx | 2 +- services/api.ts | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/(app)/manual-tasks/[id].tsx b/app/(app)/manual-tasks/[id].tsx index a54770e..27cd8ce 100644 --- a/app/(app)/manual-tasks/[id].tsx +++ b/app/(app)/manual-tasks/[id].tsx @@ -61,7 +61,7 @@ export default function ManualTaskDetailScreen() { const { data: task, isLoading, refetch } = useQuery({ queryKey: ['manual-task', id], - queryFn: () => api.get(`/api/v1/manual-tasks/${id}`).then(r => r.data), + queryFn: () => api.get(`/api/v1/manual-tasks/${id}`).then(r => r.data?.data ?? r.data), staleTime: 0, }); diff --git a/app/(app)/remittances/[id].tsx b/app/(app)/remittances/[id].tsx index b24d04d..bb906d2 100644 --- a/app/(app)/remittances/[id].tsx +++ b/app/(app)/remittances/[id].tsx @@ -25,7 +25,7 @@ export default function RemittanceDetailScreen() { const { data, isLoading } = useQuery({ queryKey: ['remittance', id], - queryFn: () => api.get(`/api/v1/remittances/${id}`).then(r => r.data), + queryFn: () => api.get(`/api/v1/remittances/${id}`).then(r => r.data?.data ?? r.data), }); if (isLoading) { diff --git a/services/api.ts b/services/api.ts index 2987cd3..ca20eba 100644 --- a/services/api.ts +++ b/services/api.ts @@ -11,7 +11,7 @@ export const api = axios.create({ }); api.interceptors.request.use(async (config) => { - const token = await SecureStore.getItemAsync('fiberops_token'); + const token = await SecureStore.getItemAsync(STORAGE_KEYS.TOKEN); if (token) { config.headers.Authorization = `Bearer ${token}`; } @@ -22,7 +22,7 @@ api.interceptors.response.use( (response) => response, async (error) => { if (error.response?.status === 401) { - await SecureStore.deleteItemAsync('fiberops_token'); + await SecureStore.deleteItemAsync(STORAGE_KEYS.TOKEN); await SecureStore.deleteItemAsync('fiberops_tenant'); } return Promise.reject(error);