diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx index 0aecee5..d54a916 100644 --- a/app/(tabs)/index.tsx +++ b/app/(tabs)/index.tsx @@ -38,14 +38,18 @@ import { import { setDueAmount } from "@/store/paymentSlice"; import { Image } from "expo-image"; import EMINotification from "@/components/Payments/EmiNotification"; +import { initSocket } from "@/services/socket"; +import { useSnackbar } from "@/contexts/Snackbar"; export default function HomeScreen() { const { t } = useTranslation(); const navigation = useNavigation(); const [isSupportModalVisible, setIsSupportModalVisible] = useState(false); - const { SoC, SoH, chargingState, lat, lon, loading, totalDistance } = + const { SoC, SoH, chargingState, lat, lon, loading, totalDistance, error } = useSelector((state: RootState) => state.telemetry); + const { showSnackbar } = useSnackbar(); + const [refreshing, setRefreshing] = useState(false); const spinValue = useState(new Animated.Value(0))[0]; @@ -206,12 +210,15 @@ export default function HomeScreen() { setRefreshing(true); startSpin(); - // await dispatch(clearUser()); - await dispatch(getUserDetails()); - await dispatch(getPaymentSummary()); + await dispatch(clearUser()); + await Promise.all([ + dispatch(getUserDetails()).unwrap(), + dispatch(getPaymentSummary()).unwrap(), + ]); - console.log("Manual refresh complete"); + await initSocket(); } catch (error) { + showSnackbar("Something went wrong", "error"); console.error("Manual refresh failed", error); } finally { stopSpin(); @@ -291,12 +298,10 @@ export default function HomeScreen() { ) : null} - {loading ? ( + {error ? ( - - {t("home.fetching-location")} - + {t("home.error-location")} ) : lat != null && lon != null && !(lat == 0 && lon == 0) ? ( <> @@ -342,18 +347,19 @@ export default function HomeScreen() { ) : ( - {t("home.error-location")} + + {t("home.fetching-location")} + )} - {warrantyEndDate && warrantyStartDate && ( - router.push("/(tabs)/my-battery")}> - - - )} + + router.push("/(tabs)/my-battery")}> + + - {t("service.issue")} * + {t("service.issue")}{" "} + {values.serviceType == "On-demand" && ( + * + )} @@ -366,7 +375,7 @@ export default function ServiceFormScreen(): JSX.Element { - {t("service.select-datetime")} + {t("service.select-datetime")}{" "} * { - //failure, confirmed, pending - const router = useRouter(); const handlePress = () => { @@ -58,7 +56,6 @@ export default ({ const statusStyle = getStatusStyle(status); return ( - // {date} @@ -82,7 +79,6 @@ export default ({ )} - // ); }; diff --git a/constants/config.ts b/constants/config.ts index 89f1b3d..2f40e2d 100644 --- a/constants/config.ts +++ b/constants/config.ts @@ -69,7 +69,7 @@ export const useTabConfig = () => { }; export const SERVICE = { - ENABLE_REGULAR_SERVICE_AFTER_IN_MONTHS: 6, + ENABLE_REGULAR_SERVICE_AFTER_IN_MONTHS: 1, }; export const MESSAGES = { diff --git a/services/socket.ts b/services/socket.ts index 699f947..1fbacc5 100644 --- a/services/socket.ts +++ b/services/socket.ts @@ -4,6 +4,7 @@ import { updateTelemetry, setTelemetryLoading, setTelemetryError, + clearTelemetry, } from "../store/telemetrySlice"; import { BmsState } from "@/constants/types"; import { BASE_URL, SOCKET_BASE_URL, VECTOR_BASE_URL } from "@/constants/config"; @@ -29,6 +30,7 @@ const fetchToken = async (): Promise => { `${BASE_URL}/api/v1/vec-token` ); + console.log("response.data.data.token", response.data.data.token); return response.data.data.token; } catch (error) { console.error("Error fetching token:", error); @@ -106,11 +108,18 @@ export const connectSocket = () => { export const initSocket = async () => { try { + if (socket) { + socket.disconnect(); + socket = null; + console.log("Previous socket disconnected before reinitializing"); + } + + store.dispatch(clearTelemetry()); const hardwareDeviceId = store.getState().user.data?.batteries?.[0]?.device_id; if (!hardwareDeviceId) { console.warn("initSocket skipped: hardwareDeviceId not ready"); - return; // just exit gracefully + return; } console.log(hardwareDeviceId, "hardware deviced"); diff --git a/store/telemetrySlice.ts b/store/telemetrySlice.ts index 36cd0ef..29b283e 100644 --- a/store/telemetrySlice.ts +++ b/store/telemetrySlice.ts @@ -37,9 +37,14 @@ export const telemetrySlice = createSlice({ state.loading = false; state.error = action.payload; }, + clearTelemetry: () => initialState, }, }); -export const { updateTelemetry, setTelemetryLoading, setTelemetryError } = - telemetrySlice.actions; +export const { + updateTelemetry, + setTelemetryLoading, + clearTelemetry, + setTelemetryError, +} = telemetrySlice.actions; export default telemetrySlice.reducer; diff --git a/store/userSlice.ts b/store/userSlice.ts index 80aa4b4..373c0e5 100644 --- a/store/userSlice.ts +++ b/store/userSlice.ts @@ -113,7 +113,7 @@ const userSlice = createSlice({ initialState, reducers: { clearUser: (state) => { - state.data = null; + state.loading = true; state.error = null; state.loading = false; state.paymentSummary = null;