diff --git a/.gitignore b/.gitignore index 010aef6..a5e334d 100644 --- a/.gitignore +++ b/.gitignore @@ -40,4 +40,45 @@ android/.gradle/ android/.idea/ android/local.properties android/app/build/ -android/build/ \ No newline at end of file +android/build/ +# @generated expo-cli sync-8d4afeec25ea8a192358fae2f8e2fc766bdce4ec +# The following patterns were generated by expo-cli + +# Learn more https://docs.github.com/en/get-started/getting-started-with-git/ignoring-files + +# dependencies +node_modules/ + +# Expo +.expo/ +dist/ +web-build/ +expo-env.d.ts + +# Native +*.orig.* +*.jks +*.p8 +*.p12 +*.key +*.mobileprovision + +# Metro +.metro-health-check* + +# debug +npm-debug.* +yarn-debug.* +yarn-error.* + +# macOS +.DS_Store +*.pem + +# local env files +.env*.local + +# typescript +*.tsbuildinfo + +# @end expo-cli \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ffdaa20 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,4 @@ +{ + "java.configuration.updateBuildConfiguration": "interactive", + "java.compile.nullAnalysis.mode": "automatic" +} diff --git a/android/app/build.gradle b/android/app/build.gradle index 7100c33..8a73332 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -87,12 +87,12 @@ android { buildToolsVersion rootProject.ext.buildToolsVersion compileSdk rootProject.ext.compileSdkVersion - namespace 'com.vinayjangra01.BatteryAsAService' + namespace "com.vecmocon.driversaathi" defaultConfig { - applicationId 'com.vinayjangra01.BatteryAsAService' + applicationId 'com.vecmocon.driversaathi' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 + versionCode 5 versionName "1.0.0" } signingConfigs { diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 98f1759..731f3e1 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,4 @@ - + @@ -12,13 +12,15 @@ - - + + + + @@ -29,6 +31,7 @@ + diff --git a/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainActivity.kt b/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainActivity.kt index 8787c60..e2ff68f 100644 --- a/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainActivity.kt +++ b/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainActivity.kt @@ -1,4 +1,4 @@ -package com.vinayjangra01.BatteryAsAService +package com.vecmocon.driversaathi import expo.modules.splashscreen.SplashScreenManager import android.os.Build diff --git a/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainApplication.kt b/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainApplication.kt index 1daed4c..c415bed 100644 --- a/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainApplication.kt +++ b/android/app/src/main/java/com/vinayjangra01/BatteryAsAService/MainApplication.kt @@ -1,4 +1,4 @@ -package com.vinayjangra01.BatteryAsAService +package com.vecmocon.driversaathi import android.app.Application import android.content.res.Configuration diff --git a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index 3941bea..345888d 100644 --- a/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -1,5 +1,6 @@ - - + + + \ No newline at end of file diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index 613035e..0496d35 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png index c3c10e6..b2f7fa7 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png index 6974dc0..931158a 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png index 6974dc0..931158a 100644 Binary files a/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 0000000..afa0a4e Binary files /dev/null and b/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png index 76666ee..e873fa4 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png index 63931dd..df9bd53 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png index 802f093..9790934 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png index 802f093..9790934 100644 Binary files a/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 0000000..c4f6e10 Binary files /dev/null and b/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png index e3b7f3c..8168109 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png index 049dec5..b8f8178 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png index 73f66da..c0f2bed 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png index 73f66da..c0f2bed 100644 Binary files a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 0000000..6c2d40b Binary files /dev/null and b/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 6295a15..bbd7b8a 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png index 25f9b63..03a7678 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png index ef731e0..f1996bd 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png index ef731e0..f1996bd 100644 Binary files a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..3452615 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index c5505cb..fce39c3 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png index bef3078..1a24a9a 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png index 169f3df..5092616 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png index 169f3df..5092616 100644 Binary files a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png differ diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 0000000..b51fd15 Binary files /dev/null and b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/android/app/src/main/res/values/strings.xml b/android/app/src/main/res/values/strings.xml index 196bca0..f2e9d61 100644 --- a/android/app/src/main/res/values/strings.xml +++ b/android/app/src/main/res/values/strings.xml @@ -1,6 +1,6 @@ Driver Saathi + light contain false - light \ No newline at end of file diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index e318324..2084231 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,12 +1,12 @@ - - \ No newline at end of file + diff --git a/android/gradle.properties b/android/gradle.properties index 2170001..29c2d8d 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -55,5 +55,4 @@ EX_DEV_CLIENT_NETWORK_INSPECTOR=true # Use legacy packaging to compress native libraries in the resulting APK. expo.useLegacyPackaging=false -# Whether the app is configured to use edge-to-edge via the app config or `react-native-edge-to-edge` plugin -expo.edgeToEdgeEnabled=true \ No newline at end of file +expo.jsEngine=jsc \ No newline at end of file diff --git a/app.json b/app.json index 8306178..24c1166 100644 --- a/app.json +++ b/app.json @@ -1,6 +1,6 @@ { "expo": { - "name": "BatteryAsAService", + "name": "Driver Saathi", "slug": "BatteryAsAService", "version": "1.0.0", "orientation": "portrait", @@ -22,7 +22,8 @@ "backgroundColor": "#ffffff" }, "edgeToEdgeEnabled": true, - "package": "com.vinayjangra01.BatteryAsAService" + "package": "com.vecmocon.driversaathi", + "versionCode": 5 }, "web": { "bundler": "metro", diff --git a/app/(tabs)/_layout.tsx b/app/(tabs)/_layout.tsx index d0aa448..702ceff 100644 --- a/app/(tabs)/_layout.tsx +++ b/app/(tabs)/_layout.tsx @@ -9,6 +9,7 @@ import NetInfo from "@react-native-community/netinfo"; import { getPaymentSummary, getUserDetails } from "@/store/userSlice"; import { useDispatch } from "react-redux"; import { logout } from "@/store/authSlice"; +import { getLanguage, setLanguage } from "@/services/i18n"; export default function TabLayout() { const { isLoggedIn } = useSelector((state: RootState) => state.auth); @@ -34,10 +35,16 @@ export default function TabLayout() { useEffect(() => { const fetchAndInit = async () => { try { + const lang = await getLanguage(); + setLanguage(lang || "en"); const result = await dispatch(getUserDetails()).unwrap(); await dispatch(getPaymentSummary()); - console.log("User details fetched", result); - initSocket(); + + if (result?.batteries?.[0]?.device_id) { + initSocket(); + } else { + console.warn("Skipping initSocket, no device_id yet"); + } } catch (error) { console.error("Failed to fetch user details", error); showSnackbar("Failed to fetch user details", "error"); diff --git a/app/(tabs)/index.tsx b/app/(tabs)/index.tsx index 0721283..42068ce 100644 --- a/app/(tabs)/index.tsx +++ b/app/(tabs)/index.tsx @@ -35,9 +35,7 @@ import { getPaymentSummary, getUserDetails, } from "@/store/userSlice"; -import api from "@/services/axiosClient"; import { setDueAmount } from "@/store/paymentSlice"; -import { EmiResponse } from "./payments"; import { Image } from "expo-image"; import EMINotification from "@/components/Payments/EmiNotification"; @@ -45,15 +43,20 @@ export default function HomeScreen() { const { t } = useTranslation(); const navigation = useNavigation(); const [isSupportModalVisible, setIsSupportModalVisible] = useState(false); - const { SoC, SoH, chargingState, lat, lon, loading, error, totalDistance } = + const { SoC, SoH, chargingState, lat, lon, loading, totalDistance } = useSelector((state: RootState) => state.telemetry); const [refreshing, setRefreshing] = useState(false); const spinValue = useState(new Animated.Value(0))[0]; - const { data, paymentSummary } = useSelector( - (state: RootState) => state.user - ); + const { + data, + paymentSummary, + loading: userLoading, + } = useSelector((state: RootState) => state.user); + + const isRefreshing = refreshing || userLoading; + const [prevPosition, setPrevPosition] = useState<{ lat: number; lon: number; @@ -122,18 +125,26 @@ export default function HomeScreen() { }, headerTitle: () => ( - {model} - {chasisNumber} + + + + + {model} + {chasisNumber} + ), headerRight: () => ( - + @@ -159,7 +170,7 @@ export default function HomeScreen() { ), }); - }, [navigation, data, model, chasisNumber, refreshing]); + }, [navigation, data, model, chasisNumber, isRefreshing]); const openInGoogleMaps = () => { const url = `https://www.google.com/maps/search/?api=1&query=${lat},${lon}`; @@ -225,27 +236,32 @@ export default function HomeScreen() { - {daysLeftToPayEmi && daysLeftToPayEmiText && daysLeftToPayEmi > 0 && ( - = payments.EMI_WARNING_DAYS_THRESHOLD - ? "warning" - : "danger" - } - message={`${daysLeftToPayEmi} ${t("home.days-left-to-pay-emi")}`} - subMessage={t("home.pay-now")} - redirectPath="/(tabs)/payments" - /> - )} + {daysLeftToPayEmi != undefined && + Boolean(daysLeftToPayEmi && daysLeftToPayEmi > 0) && ( + = payments.EMI_WARNING_DAYS_THRESHOLD + ? "warning" + : "danger" + } + message={`${daysLeftToPayEmi} ${t("home.days-left-to-pay-emi")}`} + subMessage={t("home.pay-now")} + redirectPath="/(tabs)/payments" + /> + )} - {regularServiceDueInDaysText && ( - - )} + {regularServiceDueInDaysText && + Boolean( + regularServiceDueInDaysText && + regularServiceDueInDaysText.trim() !== "" + ) && ( + + )} @@ -429,6 +445,22 @@ const mapStyle = [ ]; const styles = StyleSheet.create({ + logo: { + width: "100%", + height: "100%", + resizeMode: "contain", + }, + logoContainer: { + padding: 8, + borderRadius: 44 / 2, // make it perfectly round + borderWidth: 2, + borderColor: "#E5E9F0", + width: 44, + height: 44, + alignItems: "center", + justifyContent: "center", + overflow: "hidden", // ensures image doesn't overflow + }, errorText: { color: "#565F70", fontWeight: "400", @@ -480,8 +512,9 @@ const styles = StyleSheet.create({ backgroundColor: "#F3F5F8", }, headerTitleContainer: { - flexDirection: "column", + flexDirection: "row", backgroundColor: "#F3F5F8", + gap: 8, }, title: { fontSize: 14, diff --git a/app/(tabs)/service.tsx b/app/(tabs)/service.tsx index dc60fea..c8f9815 100644 --- a/app/(tabs)/service.tsx +++ b/app/(tabs)/service.tsx @@ -10,6 +10,7 @@ import { ScrollView, KeyboardAvoidingView, Platform, + ActivityIndicator, } from "react-native"; import { Dropdown } from "react-native-element-dropdown"; import { DateTimePickerAndroid } from "@react-native-community/datetimepicker"; @@ -30,15 +31,24 @@ import CalendarIcon from "@/assets/icons/calendar.svg"; interface FormValues { serviceType: string | null; - issues: string[]; + issues: number[]; comments: string | null; date: Date | null; photos: string[]; } +interface Issue { + id: number; + name: string; +} + const validationSchema = Yup.object().shape({ serviceType: Yup.string().required("Service Type is required"), - issues: Yup.array().min(1, "At least one issue is required"), + issues: Yup.array().when("serviceType", { + is: (val: string) => val !== "Regular", + then: (schema) => schema.min(1, "At least one issue is required"), + otherwise: (schema) => schema.notRequired(), + }), date: Yup.date().required("Date and Time is required"), photos: Yup.array().min(1, "At least one photo is required"), comments: Yup.string(), @@ -47,12 +57,34 @@ const validationSchema = Yup.object().shape({ export default function ServiceFormScreen(): JSX.Element { const [isFocus, setIsFocus] = useState(false); const [isIssueSelectorVisible, setIssueSelectorVisible] = useState(false); + + const [issues, setIssues] = useState([]); + const [isLoadingIssues, setIsLoadingIssues] = useState(false); const { showSnackbar } = useSnackbar(); function toggleIssueSelector() { setIssueSelectorVisible(!isIssueSelectorVisible); } + const fetchIssues = async () => { + try { + setIsLoadingIssues(true); + const response = await api.get(`${BASE_URL}/api/v1/service-issue-list`); + + if (response.data.success) { + setIssues(response.data.data); + } else { + throw new Error(response.data?.message || "Failed to fetch issues"); + } + } catch (error: any) { + console.error("Error fetching issues:", error); + showSnackbar(`${t("service.something-went-wrong")}`, "error"); + setIssues([]); + } finally { + setIsLoadingIssues(false); + } + }; + const initialValues: FormValues = { serviceType: null, issues: [], @@ -126,6 +158,32 @@ export default function ServiceFormScreen(): JSX.Element { const { t } = useTranslation(); + const handleServiceTypeChange = async ( + item: { label: string; value: string }, + setFieldValue: (field: string, value: any) => void, + setFieldTouched: (field: string, touched: boolean) => void + ) => { + setFieldValue("serviceType", item.value); + + if (item.value === "Regular") { + setFieldValue("issues", []); + setFieldTouched("issues", false); + setIssues([]); + } else if (item.value === "On-demand") { + await fetchIssues(); + setFieldValue("issues", []); + setFieldTouched("issues", false); + } + + setIsFocus(false); + }; + + const getSelectedIssuesText = (selectedIssueIds: number[]) => { + if (selectedIssueIds.length === 0) return `${t("service.select-issue")}`; + if (selectedIssueIds.length === 1) return "1 issue selected"; + return `${selectedIssueIds.length} issues selected`; + }; + return ( ( @@ -223,10 +282,13 @@ export default function ServiceFormScreen(): JSX.Element { value={values.serviceType} onFocus={() => setIsFocus(true)} onBlur={() => setIsFocus(false)} - onChange={(item) => { - setFieldValue("serviceType", item.value); - setIsFocus(false); - }} + onChange={(item) => + handleServiceTypeChange( + item, + setFieldValue, + setFieldTouched + ) + } renderLeftIcon={() => ( {/* Add your icon component here if needed */} @@ -242,13 +304,22 @@ export default function ServiceFormScreen(): JSX.Element { {t("service.issue")} * - - {values.issues.length > 0 - ? values.issues.length + " issues selected" - : `${t("service.select-issue")}`} + + {isLoadingIssues ? ( + + ) : ( + getSelectedIssuesText(values.issues) + )} @@ -341,6 +412,7 @@ export default function ServiceFormScreen(): JSX.Element { setFieldValue("issues", selectedIssues); }} initialSelectedValues={values.issues} + issues={issues} /> {isSubmitting && } @@ -352,6 +424,9 @@ export default function ServiceFormScreen(): JSX.Element { } const styles = StyleSheet.create({ + issueTextDisabled: { + color: "#949CAC", + }, container: { flex: 1, }, diff --git a/app/auth/login.tsx b/app/auth/login.tsx index d989afd..cd36c21 100644 --- a/app/auth/login.tsx +++ b/app/auth/login.tsx @@ -109,24 +109,14 @@ export default function WelcomeScreen() { {sendOTPError} )} - - - - - - {t("onboarding.for-any-queries")} - - - {t("onboarding.contact-us")} - - - - + {/* ✅ Send OTP button placed just below input box */} void} style={{ ...styles.button, + marginTop: 16, + marginBottom: 16, backgroundColor: values.phone.length === 10 && !errors.phone && @@ -144,6 +134,17 @@ export default function WelcomeScreen() { {t("onboarding.send-otp")} + + + + {t("onboarding.for-any-queries")} + + + {t("onboarding.contact-us")} + + + + )} diff --git a/app/init/language.tsx b/app/init/language.tsx index febc4b0..56305fb 100644 --- a/app/init/language.tsx +++ b/app/init/language.tsx @@ -106,8 +106,7 @@ const styles = StyleSheet.create({ color: "#2f465e", }, selectButton: { - marginTop: "auto", - marginBottom: 16, + marginTop: 16, padding: 16, borderRadius: 4, alignItems: "center", diff --git a/app/user/profile.tsx b/app/user/profile.tsx index 9ccc7ee..a1573d0 100644 --- a/app/user/profile.tsx +++ b/app/user/profile.tsx @@ -147,8 +147,8 @@ export default function ProfileScreen() { - {menuItem(`${t("profile.about-app")}`)} - + {/* {menuItem(`${t("profile.about-app")}`)} + */} {menuItem(`${t("profile.logout")}`, handleLogout)} diff --git a/assets/images/lio_logo.png b/assets/images/lio_logo.png new file mode 100644 index 0000000..049d0c4 Binary files /dev/null and b/assets/images/lio_logo.png differ diff --git a/components/service/IssueSelectorModal.tsx b/components/service/IssueSelectorModal.tsx index aae6619..34057df 100644 --- a/components/service/IssueSelectorModal.tsx +++ b/components/service/IssueSelectorModal.tsx @@ -12,11 +12,17 @@ import Checkbox from "expo-checkbox"; import { issueConfig } from "@/constants/config"; import CloseIcon from "@/assets/icons/close.svg"; +interface Issue { + id: number; + name: string; +} + interface IssueSelectorModalProps { visible: boolean; onClose: () => void; - onSelect: (selectedValues: string[]) => void; - initialSelectedValues?: string[]; // Previously saved selections + onSelect: (selectedValues: number[]) => void; + initialSelectedValues?: number[]; // Previously saved selections + issues: Issue[]; } export default function IssueSelectorModal({ @@ -24,26 +30,22 @@ export default function IssueSelectorModal({ onClose, onSelect, initialSelectedValues = [], + issues = [], }: IssueSelectorModalProps) { - const [selectedValues, setSelectedValues] = useState( + const [selectedValues, setSelectedValues] = useState( initialSelectedValues ); const [search, setSearch] = useState(""); - const toggleValue = (value: string) => { + const toggleValue = (id: number) => { setSelectedValues((prev) => - prev.includes(value) ? prev.filter((v) => v !== value) : [...prev, value] + prev.includes(id) ? prev.filter((v) => v !== id) : [...prev, id] ); }; - const filteredConfig = issueConfig - .map((group) => ({ - ...group, - options: group.options.filter((option) => - option.label.toLowerCase().includes(search.toLowerCase()) - ), - })) - .filter((group) => group.options.length > 0); + const filteredIssues = issues.filter((issue) => + issue.name.toLowerCase().includes(search.toLowerCase()) + ); const clearSelection = () => setSelectedValues([]); @@ -95,13 +97,13 @@ export default function IssueSelectorModal({ {`${selectedValues.length}/23 Selected`} + >{`${selectedValues.length}/${issues.length} Selected`} 0 && { color: "#006C4D" }, // 👈 Add this line + selectedValues.length > 0 && { color: "#006C4D" }, ]} > Clear @@ -110,29 +112,34 @@ export default function IssueSelectorModal({ - {filteredConfig.map((group) => ( - - {group.category} - {group.options.map((option) => ( - toggleValue(option.value)} - > - toggleValue(option.value)} - color={ - selectedValues.includes(option.value) - ? "#009E71" - : undefined - } - /> - {option.label} - - ))} + {filteredIssues.length > 0 ? ( + filteredIssues.map((issue) => ( + toggleValue(issue.id)} + > + toggleValue(issue.id)} + color={ + selectedValues.includes(issue.id) ? "#009E71" : undefined + } + /> + {issue.name} + + )) + ) : issues.length === 0 ? ( + + No issues available - ))} + ) : ( + + + No issues found for "{search}" + + + )} @@ -163,6 +170,16 @@ export default function IssueSelectorModal({ } const styles = StyleSheet.create({ + emptyContainer: { + padding: 20, + alignItems: "center", + justifyContent: "center", + }, + emptyText: { + fontSize: 16, + color: "#717B8F", + textAlign: "center", + }, buttonsContainer: { flexDirection: "row", justifyContent: "space-between", diff --git a/constants/config.ts b/constants/config.ts index bba1977..3a0825b 100644 --- a/constants/config.ts +++ b/constants/config.ts @@ -181,7 +181,7 @@ export const issueConfig = [ ]; export const payments = { - MIN_AMOUNT: 1, + MIN_AMOUNT: 200, LINK_EXPIRED: "Payment link expired", SOCKET_CONNECTION_TIMEOUT_IN_SECS: 5, REGISTER_TRANSACTION_EMIT_EVENT_NAME: "register-transaction", diff --git a/eas.json b/eas.json index ff3d69d..0918b41 100644 --- a/eas.json +++ b/eas.json @@ -9,7 +9,10 @@ }, "production": { "autoIncrement": true, - "distribution": "internal" + "distribution": "store" } + }, + "cli": { + "appVersionSource": "local" } } diff --git a/index.js b/index.js new file mode 100644 index 0000000..1d6e981 --- /dev/null +++ b/index.js @@ -0,0 +1,8 @@ +import { registerRootComponent } from 'expo'; + +import App from './App'; + +// registerRootComponent calls AppRegistry.registerComponent('main', () => App); +// It also ensures that whether you load the app in Expo Go or in a native build, +// the environment is set up appropriately +registerRootComponent(App); diff --git a/package-lock.json b/package-lock.json index 6cb7ae4..3ebb78e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,7 +37,7 @@ "react": "19.0.0", "react-dom": "19.0.0", "react-i18next": "^15.5.3", - "react-native": "0.79.4", + "react-native": "0.79.6", "react-native-element-dropdown": "^2.12.4", "react-native-maps": "1.24.2", "react-native-otp-entry": "^1.8.5", @@ -143,15 +143,15 @@ } }, "node_modules/@babel/generator": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.5.tgz", - "integrity": "sha512-ZGhA37l0e/g2s1Cnzdix0O3aLYm66eF8aufiVteOgnwxgnRP8GoyMj7VWsgWnQbVKXyge7hqrFh2K2TQM6t1Hw==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.3.tgz", + "integrity": "sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.27.5", - "@babel/types": "^7.27.3", - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25", + "@babel/parser": "^7.28.3", + "@babel/types": "^7.28.2", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" }, "engines": { @@ -240,6 +240,15 @@ "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-member-expression-to-functions": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz", @@ -492,12 +501,12 @@ } }, "node_modules/@babel/parser": { - "version": "7.27.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.27.5.tgz", - "integrity": "sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.3.tgz", + "integrity": "sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.28.2" }, "bin": { "parser": "bin/babel-parser.js" @@ -1509,27 +1518,27 @@ }, "node_modules/@babel/traverse--for-generate-function-map": { "name": "@babel/traverse", - "version": "7.27.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.4.tgz", - "integrity": "sha512-oNcu2QbHqts9BtOWJosOVJapWjBDSxGCpFvikNR5TGDYDQf3JwpIoMzIKrvfoti93cLfPJEG4tH9SPVeyCGgdA==", + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.3.tgz", + "integrity": "sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.27.1", - "@babel/generator": "^7.27.3", - "@babel/parser": "^7.27.4", + "@babel/generator": "^7.28.3", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.3", "@babel/template": "^7.27.2", - "@babel/types": "^7.27.3", - "debug": "^4.3.1", - "globals": "^11.1.0" + "@babel/types": "^7.28.2", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/types": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.6.tgz", - "integrity": "sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.2.tgz", + "integrity": "sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==", "license": "MIT", "dependencies": { "@babel/helper-string-parser": "^7.27.1", @@ -2636,17 +2645,13 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -2658,15 +2663,6 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@jridgewell/source-map": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", @@ -2684,9 +2680,9 @@ "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -3401,9 +3397,9 @@ } }, "node_modules/@react-native/assets-registry": { - "version": "0.79.4", - "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.79.4.tgz", - "integrity": "sha512-7PjHNRtYlc36B7P1PHme8ZV0ZJ/xsA/LvMoXe6EX++t7tSPJ8iYCMBryZhcdnztgce73b94Hfx6TTGbLF+xtUg==", + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.79.6.tgz", + "integrity": "sha512-UVSP1224PWg0X+mRlZNftV5xQwZGfawhivuW8fGgxNK9MS/U84xZ+16lkqcPh1ank6MOt239lIWHQ1S33CHgqA==", "license": "MIT", "engines": { "node": ">=18" @@ -3544,12 +3540,12 @@ } }, "node_modules/@react-native/community-cli-plugin": { - "version": "0.79.4", - "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.4.tgz", - "integrity": "sha512-lx1RXEJwU9Tcs2B2uiDZBa6yghU6m6STvwYqHbJlFZyNN1k3JRa9j0/CDu+0fCFacIn7rEfZpb4UWi5YhsHpQg==", + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.79.6.tgz", + "integrity": "sha512-ZHVst9vByGsegeaddkD2YbZ6NvYb4n3pD9H7Pit94u+NlByq2uBJghoOjT6EKqg+UVl8tLRdi88cU2pDPwdHqA==", "license": "MIT", "dependencies": { - "@react-native/dev-middleware": "0.79.4", + "@react-native/dev-middleware": "0.79.6", "chalk": "^4.0.0", "debug": "^2.2.0", "invariant": "^2.2.4", @@ -3570,6 +3566,37 @@ } } }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/debugger-frontend": { + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.79.6.tgz", + "integrity": "sha512-lIK/KkaH7ueM22bLO0YNaQwZbT/oeqhaghOvmZacaNVbJR1Cdh/XAqjT8FgCS+7PUnbxA8B55NYNKGZG3O2pYw==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=18" + } + }, + "node_modules/@react-native/community-cli-plugin/node_modules/@react-native/dev-middleware": { + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.79.6.tgz", + "integrity": "sha512-BK3GZBa9c7XSNR27EDRtxrgyyA3/mf1j3/y+mPk7Ac0Myu85YNrXnC9g3mL5Ytwo0g58TKrAIgs1fF2Q5Mn6mQ==", + "license": "MIT", + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.79.6", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^2.2.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^6.2.3" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/@react-native/community-cli-plugin/node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -3597,6 +3624,15 @@ "node": ">=10" } }, + "node_modules/@react-native/community-cli-plugin/node_modules/ws": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.3.tgz", + "integrity": "sha512-jmTjYU0j60B+vHey6TfR3Z7RD61z/hmxBS3VMSGIrroOWXQEneK1zNuotOUrGyBHQj0yrpsLHPWtigEFd13ndA==", + "license": "MIT", + "dependencies": { + "async-limiter": "~1.0.0" + } + }, "node_modules/@react-native/debugger-frontend": { "version": "0.79.4", "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.79.4.tgz", @@ -3653,18 +3689,18 @@ } }, "node_modules/@react-native/gradle-plugin": { - "version": "0.79.4", - "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.79.4.tgz", - "integrity": "sha512-Gv5ryy23k7Sib2xVgqw65GTryg9YTij6URcMul5cI7LRcW0Aa1/FPb26l388P4oeNGNdDoAkkS+CuCWNunRuWg==", + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.79.6.tgz", + "integrity": "sha512-C5odetI6py3CSELeZEVz+i00M+OJuFZXYnjVD4JyvpLn462GesHRh+Se8mSkU5QSaz9cnpMnyFLJAx05dokWbA==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@react-native/js-polyfills": { - "version": "0.79.4", - "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.79.4.tgz", - "integrity": "sha512-VyKPo/l9zP4+oXpQHrJq4vNOtxF7F5IMdQmceNzTnRpybRvGGgO/9jYu9mdmdKRO2KpQEc5dB4W2rYhVKdGNKg==", + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.79.6.tgz", + "integrity": "sha512-6wOaBh1namYj9JlCNgX2ILeGUIwc6OP6MWe3Y5jge7Xz9fVpRqWQk88Q5Y9VrAtTMTcxoX3CvhrfRr3tGtSfQw==", "license": "MIT", "engines": { "node": ">=18" @@ -10237,9 +10273,9 @@ } }, "node_modules/metro": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.4.tgz", - "integrity": "sha512-/gFmw3ux9CPG5WUmygY35hpyno28zi/7OUn6+OFfbweA8l0B+PPqXXLr0/T6cf5nclCcH0d22o+02fICaShVxw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.82.5.tgz", + "integrity": "sha512-8oAXxL7do8QckID/WZEKaIFuQJFUTLzfVcC48ghkHhNK2RGuQq8Xvf4AVd+TUA0SZtX0q8TGNXZ/eba1ckeGCg==", "license": "MIT", "dependencies": { "@babel/code-frame": "^7.24.7", @@ -10257,24 +10293,24 @@ "error-stack-parser": "^2.0.6", "flow-enums-runtime": "^0.0.6", "graceful-fs": "^4.2.4", - "hermes-parser": "0.28.1", + "hermes-parser": "0.29.1", "image-size": "^1.0.2", "invariant": "^2.2.4", "jest-worker": "^29.7.0", "jsc-safe-url": "^0.2.2", "lodash.throttle": "^4.1.1", - "metro-babel-transformer": "0.82.4", - "metro-cache": "0.82.4", - "metro-cache-key": "0.82.4", - "metro-config": "0.82.4", - "metro-core": "0.82.4", - "metro-file-map": "0.82.4", - "metro-resolver": "0.82.4", - "metro-runtime": "0.82.4", - "metro-source-map": "0.82.4", - "metro-symbolicate": "0.82.4", - "metro-transform-plugins": "0.82.4", - "metro-transform-worker": "0.82.4", + "metro-babel-transformer": "0.82.5", + "metro-cache": "0.82.5", + "metro-cache-key": "0.82.5", + "metro-config": "0.82.5", + "metro-core": "0.82.5", + "metro-file-map": "0.82.5", + "metro-resolver": "0.82.5", + "metro-runtime": "0.82.5", + "metro-source-map": "0.82.5", + "metro-symbolicate": "0.82.5", + "metro-transform-plugins": "0.82.5", + "metro-transform-worker": "0.82.5", "mime-types": "^2.1.27", "nullthrows": "^1.1.1", "serialize-error": "^2.1.0", @@ -10291,14 +10327,14 @@ } }, "node_modules/metro-babel-transformer": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.4.tgz", - "integrity": "sha512-4juJahGRb1gmNbQq48lNinB6WFNfb6m0BQqi/RQibEltNiqTCxew/dBspI2EWA4xVCd3mQWGfw0TML4KurQZnQ==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.82.5.tgz", + "integrity": "sha512-W/scFDnwJXSccJYnOFdGiYr9srhbHPdxX9TvvACOFsIXdLilh3XuxQl/wXW6jEJfgIb0jTvoTlwwrqvuwymr6Q==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "hermes-parser": "0.28.1", + "hermes-parser": "0.29.1", "nullthrows": "^1.1.1" }, "engines": { @@ -10306,39 +10342,39 @@ } }, "node_modules/metro-babel-transformer/node_modules/hermes-estree": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.28.1.tgz", - "integrity": "sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", "license": "MIT" }, "node_modules/metro-babel-transformer/node_modules/hermes-parser": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.28.1.tgz", - "integrity": "sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", "license": "MIT", "dependencies": { - "hermes-estree": "0.28.1" + "hermes-estree": "0.29.1" } }, "node_modules/metro-cache": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.4.tgz", - "integrity": "sha512-vX0ylSMGtORKiZ4G8uP6fgfPdDiCWvLZUGZ5zIblSGylOX6JYhvExl0Zg4UA9pix/SSQu5Pnp9vdODMFsNIxhw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.82.5.tgz", + "integrity": "sha512-AwHV9607xZpedu1NQcjUkua8v7HfOTKfftl6Vc9OGr/jbpiJX6Gpy8E/V9jo/U9UuVYX2PqSUcVNZmu+LTm71Q==", "license": "MIT", "dependencies": { "exponential-backoff": "^3.1.1", "flow-enums-runtime": "^0.0.6", "https-proxy-agent": "^7.0.5", - "metro-core": "0.82.4" + "metro-core": "0.82.5" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-cache-key": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.4.tgz", - "integrity": "sha512-2JCTqcpF+f2OghOpe/+x+JywfzDkrHdAqinPFWmK2ezNAU/qX0jBFaTETogPibFivxZJil37w9Yp6syX8rFUng==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.82.5.tgz", + "integrity": "sha512-qpVmPbDJuRLrT4kcGlUouyqLGssJnbTllVtvIgXfR7ZuzMKf0mGS+8WzcqzNK8+kCyakombQWR0uDd8qhWGJcA==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -10348,9 +10384,9 @@ } }, "node_modules/metro-cache/node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "license": "MIT", "engines": { "node": ">= 14" @@ -10370,42 +10406,42 @@ } }, "node_modules/metro-config": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.4.tgz", - "integrity": "sha512-Ki3Wumr3hKHGDS7RrHsygmmRNc/PCJrvkLn0+BWWxmbOmOcMMJDSmSI+WRlT8jd5VPZFxIi4wg+sAt5yBXAK0g==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.82.5.tgz", + "integrity": "sha512-/r83VqE55l0WsBf8IhNmc/3z71y2zIPe5kRSuqA5tY/SL/ULzlHUJEMd1szztd0G45JozLwjvrhAzhDPJ/Qo/g==", "license": "MIT", "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.7.0", - "metro": "0.82.4", - "metro-cache": "0.82.4", - "metro-core": "0.82.4", - "metro-runtime": "0.82.4" + "metro": "0.82.5", + "metro-cache": "0.82.5", + "metro-core": "0.82.5", + "metro-runtime": "0.82.5" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-core": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.4.tgz", - "integrity": "sha512-Xo4ozbxPg2vfgJGCgXZ8sVhC2M0lhTqD+tsKO2q9aelq/dCjnnSb26xZKcQO80CQOQUL7e3QWB7pLFGPjZm31A==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.82.5.tgz", + "integrity": "sha512-OJL18VbSw2RgtBm1f2P3J5kb892LCVJqMvslXxuxjAPex8OH7Eb8RBfgEo7VZSjgb/LOf4jhC4UFk5l5tAOHHA==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "lodash.throttle": "^4.1.1", - "metro-resolver": "0.82.4" + "metro-resolver": "0.82.5" }, "engines": { "node": ">=18.18" } }, "node_modules/metro-file-map": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.4.tgz", - "integrity": "sha512-eO7HD1O3aeNsbEe6NBZvx1lLJUrxgyATjnDmb7bm4eyF6yWOQot9XVtxTDLNifECuvsZ4jzRiTInrbmIHkTdGA==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.82.5.tgz", + "integrity": "sha512-vpMDxkGIB+MTN8Af5hvSAanc6zXQipsAUO+XUx3PCQieKUfLwdoa8qaZ1WAQYRpaU+CJ8vhBcxtzzo3d9IsCIQ==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -10423,9 +10459,9 @@ } }, "node_modules/metro-minify-terser": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.4.tgz", - "integrity": "sha512-W79Mi6BUwWVaM8Mc5XepcqkG+TSsCyyo//dmTsgYfJcsmReQorRFodil3bbJInETvjzdnS1mCsUo9pllNjT1Hg==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.82.5.tgz", + "integrity": "sha512-v6Nx7A4We6PqPu/ta1oGTqJ4Usz0P7c+3XNeBxW9kp8zayS3lHUKR0sY0wsCHInxZlNAEICx791x+uXytFUuwg==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", @@ -10436,9 +10472,9 @@ } }, "node_modules/metro-resolver": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.4.tgz", - "integrity": "sha512-uWoHzOBGQTPT5PjippB8rRT3iI9CTgFA9tRiLMzrseA5o7YAlgvfTdY9vFk2qyk3lW3aQfFKWkmqENryPRpu+Q==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.82.5.tgz", + "integrity": "sha512-kFowLnWACt3bEsuVsaRNgwplT8U7kETnaFHaZePlARz4Fg8tZtmRDUmjaD68CGAwc0rwdwNCkWizLYpnyVcs2g==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -10448,9 +10484,9 @@ } }, "node_modules/metro-runtime": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.4.tgz", - "integrity": "sha512-vVyFO7H+eLXRV2E7YAUYA7aMGBECGagqxmFvC2hmErS7oq90BbPVENfAHbUWq1vWH+MRiivoRxdxlN8gBoF/dw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.82.5.tgz", + "integrity": "sha512-rQZDoCUf7k4Broyw3Ixxlq5ieIPiR1ULONdpcYpbJQ6yQ5GGEyYjtkztGD+OhHlw81LCR2SUAoPvtTus2WDK5g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.25.0", @@ -10461,9 +10497,9 @@ } }, "node_modules/metro-source-map": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.4.tgz", - "integrity": "sha512-9jzDQJ0FPas1FuQFtwmBHsez2BfhFNufMowbOMeG3ZaFvzeziE8A0aJwILDS3U+V5039ssCQFiQeqDgENWvquA==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.82.5.tgz", + "integrity": "sha512-wH+awTOQJVkbhn2SKyaw+0cd+RVSCZ3sHVgyqJFQXIee/yLs3dZqKjjeKKhhVeudgjXo7aE/vSu/zVfcQEcUfw==", "license": "MIT", "dependencies": { "@babel/traverse": "^7.25.3", @@ -10471,9 +10507,9 @@ "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-symbolicate": "0.82.4", + "metro-symbolicate": "0.82.5", "nullthrows": "^1.1.1", - "ob1": "0.82.4", + "ob1": "0.82.5", "source-map": "^0.5.6", "vlq": "^1.0.0" }, @@ -10491,14 +10527,14 @@ } }, "node_modules/metro-symbolicate": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.4.tgz", - "integrity": "sha512-LwEwAtdsx7z8rYjxjpLWxuFa2U0J6TS6ljlQM4WAATKa4uzV8unmnRuN2iNBWTmRqgNR77mzmI2vhwD4QSCo+w==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.82.5.tgz", + "integrity": "sha512-1u+07gzrvYDJ/oNXuOG1EXSvXZka/0JSW1q2EYBWerVKMOhvv9JzDGyzmuV7hHbF2Hg3T3S2uiM36sLz1qKsiw==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6", "invariant": "^2.2.4", - "metro-source-map": "0.82.4", + "metro-source-map": "0.82.5", "nullthrows": "^1.1.1", "source-map": "^0.5.6", "vlq": "^1.0.0" @@ -10520,9 +10556,9 @@ } }, "node_modules/metro-transform-plugins": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.4.tgz", - "integrity": "sha512-NoWQRPHupVpnDgYguiEcm7YwDhnqW02iWWQjO2O8NsNP09rEMSq99nPjARWfukN7+KDh6YjLvTIN20mj3dk9kw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.82.5.tgz", + "integrity": "sha512-57Bqf3rgq9nPqLrT2d9kf/2WVieTFqsQ6qWHpEng5naIUtc/Iiw9+0bfLLWSAw0GH40iJ4yMjFcFJDtNSYynMA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -10537,9 +10573,9 @@ } }, "node_modules/metro-transform-worker": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.4.tgz", - "integrity": "sha512-kPI7Ad/tdAnI9PY4T+2H0cdgGeSWWdiPRKuytI806UcN4VhFL6OmYa19/4abYVYF+Cd2jo57CDuwbaxRfmXDhw==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.82.5.tgz", + "integrity": "sha512-mx0grhAX7xe+XUQH6qoHHlWedI8fhSpDGsfga7CpkO9Lk9W+aPitNtJWNGrW8PfjKEWbT9Uz9O50dkI8bJqigw==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.2", @@ -10547,13 +10583,13 @@ "@babel/parser": "^7.25.3", "@babel/types": "^7.25.2", "flow-enums-runtime": "^0.0.6", - "metro": "0.82.4", - "metro-babel-transformer": "0.82.4", - "metro-cache": "0.82.4", - "metro-cache-key": "0.82.4", - "metro-minify-terser": "0.82.4", - "metro-source-map": "0.82.4", - "metro-transform-plugins": "0.82.4", + "metro": "0.82.5", + "metro-babel-transformer": "0.82.5", + "metro-cache": "0.82.5", + "metro-cache-key": "0.82.5", + "metro-minify-terser": "0.82.5", + "metro-source-map": "0.82.5", + "metro-transform-plugins": "0.82.5", "nullthrows": "^1.1.1" }, "engines": { @@ -10567,18 +10603,18 @@ "license": "MIT" }, "node_modules/metro/node_modules/hermes-estree": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.28.1.tgz", - "integrity": "sha512-w3nxl/RGM7LBae0v8LH2o36+8VqwOZGv9rX1wyoWT6YaKZLqpJZ0YQ5P0LVr3tuRpf7vCx0iIG4i/VmBJejxTQ==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.29.1.tgz", + "integrity": "sha512-jl+x31n4/w+wEqm0I2r4CMimukLbLQEYpisys5oCre611CI5fc9TxhqkBBCJ1edDG4Kza0f7CgNz8xVMLZQOmQ==", "license": "MIT" }, "node_modules/metro/node_modules/hermes-parser": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.28.1.tgz", - "integrity": "sha512-nf8o+hE8g7UJWParnccljHumE9Vlq8F7MqIdeahl+4x0tvCUJYRrT0L7h0MMg/X9YJmkNwsfbaNNrzPtFXOscg==", + "version": "0.29.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.29.1.tgz", + "integrity": "sha512-xBHWmUtRC5e/UL0tI7Ivt2riA/YBq9+SiYFU7C1oBa/j2jYGlIF9043oak1F47ihuDIxQ5nbsKueYJDRY02UgA==", "license": "MIT", "dependencies": { - "hermes-estree": "0.28.1" + "hermes-estree": "0.29.1" } }, "node_modules/metro/node_modules/source-map": { @@ -10981,9 +11017,9 @@ "license": "MIT" }, "node_modules/ob1": { - "version": "0.82.4", - "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.4.tgz", - "integrity": "sha512-n9S8e4l5TvkrequEAMDidl4yXesruWTNTzVkeaHSGywoTOIwTzZzKw7Z670H3eaXDZui5MJXjWGNzYowVZIxCA==", + "version": "0.82.5", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.82.5.tgz", + "integrity": "sha512-QyQQ6e66f+Ut/qUVjEce0E/wux5nAGLXYZDn1jr15JWstHsCH3l6VVrg8NKDptW9NEiBXKOJeGF/ydxeSDF3IQ==", "license": "MIT", "dependencies": { "flow-enums-runtime": "^0.0.6" @@ -11907,19 +11943,19 @@ "license": "MIT" }, "node_modules/react-native": { - "version": "0.79.4", - "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.79.4.tgz", - "integrity": "sha512-CfxYMuszvnO/33Q5rB//7cU1u9P8rSOvzhE2053Phdb8+6bof9NLayCllU2nmPrm8n9o6RU1Fz5H0yquLQ0DAw==", + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.79.6.tgz", + "integrity": "sha512-kvIWSmf4QPfY41HC25TR285N7Fv0Pyn3DAEK8qRL9dA35usSaxsJkHfw+VqnonqJjXOaoKCEanwudRAJ60TBGA==", "license": "MIT", "dependencies": { "@jest/create-cache-key-function": "^29.7.0", - "@react-native/assets-registry": "0.79.4", - "@react-native/codegen": "0.79.4", - "@react-native/community-cli-plugin": "0.79.4", - "@react-native/gradle-plugin": "0.79.4", - "@react-native/js-polyfills": "0.79.4", - "@react-native/normalize-colors": "0.79.4", - "@react-native/virtualized-lists": "0.79.4", + "@react-native/assets-registry": "0.79.6", + "@react-native/codegen": "0.79.6", + "@react-native/community-cli-plugin": "0.79.6", + "@react-native/gradle-plugin": "0.79.6", + "@react-native/js-polyfills": "0.79.6", + "@react-native/normalize-colors": "0.79.6", + "@react-native/virtualized-lists": "0.79.6", "abort-controller": "^3.0.0", "anser": "^1.4.9", "ansi-regex": "^5.0.0", @@ -12207,10 +12243,37 @@ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", "license": "MIT" }, + "node_modules/react-native/node_modules/@react-native/codegen": { + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.79.6.tgz", + "integrity": "sha512-iRBX8Lgbqypwnfba7s6opeUwVyaR23mowh9ILw7EcT2oLz3RqMmjJdrbVpWhGSMGq2qkPfqAH7bhO8C7O+xfjQ==", + "license": "MIT", + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.3", + "glob": "^7.1.1", + "hermes-parser": "0.25.1", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/react-native/node_modules/@react-native/normalize-colors": { + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.79.6.tgz", + "integrity": "sha512-0v2/ruY7eeKun4BeKu+GcfO+SHBdl0LJn4ZFzTzjHdWES0Cn+ONqKljYaIv8p9MV2Hx/kcdEvbY4lWI34jC/mQ==", + "license": "MIT" + }, "node_modules/react-native/node_modules/@react-native/virtualized-lists": { - "version": "0.79.4", - "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.79.4.tgz", - "integrity": "sha512-0Mdcox6e5PTonuM1WIo3ks7MBAa3IDzj0pKnE5xAwSgQ0DJW2P5dYf+KjWmpkE+Yb0w41ZbtXPhKq+U2JJ6C/Q==", + "version": "0.79.6", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.79.6.tgz", + "integrity": "sha512-khA/Hrbb+rB68YUHrLubfLgMOD9up0glJhw25UE3Kntj32YDyuO0Tqc81ryNTcCekFKJ8XrAaEjcfPg81zBGPw==", "license": "MIT", "dependencies": { "invariant": "^2.2.4", diff --git a/package.json b/package.json index bd34f5d..e3830f4 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "main": "expo-router/entry", "version": "1.0.0", "scripts": { - "start": "expo start", + "start": "expo start --dev-client", "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web", @@ -42,7 +42,7 @@ "react": "19.0.0", "react-dom": "19.0.0", "react-i18next": "^15.5.3", - "react-native": "0.79.4", + "react-native": "0.79.6", "react-native-element-dropdown": "^2.12.4", "react-native-maps": "1.24.2", "react-native-otp-entry": "^1.8.5", diff --git a/services/i18n/locals/en.json b/services/i18n/locals/en.json index ec7fdca..6a9e82c 100644 --- a/services/i18n/locals/en.json +++ b/services/i18n/locals/en.json @@ -40,7 +40,8 @@ "alerts": "Alerts", "emi-alert": "14 days left to pay the EMI!", "km": "km", - "days-left-to-pay-emi": "days left to pay the EMI!" + "days-left-to-pay-emi": "days left to pay the EMI!", + "fetching-location": "Fetching location..." }, "profile": { "my-account": "My Account", @@ -62,8 +63,7 @@ "whatsapp": "Whatsapp", "call-us": "Call Us", "email": "Email", - "lang-changed": "भाषा सफलतापूर्वक बदल दी गई", - "fetching-location": "Fetching location..." + "lang-changed": "भाषा सफलतापूर्वक बदल दी गई" }, "payment": { "last-emi-details": "Last EMI Details", diff --git a/services/socket.ts b/services/socket.ts index e47a519..699f947 100644 --- a/services/socket.ts +++ b/services/socket.ts @@ -36,8 +36,11 @@ const fetchToken = async (): Promise => { } }; -const fetchControllingServer = async (token: string): Promise => { - const hardwareDeviceId = store.getState().user.data?.batteries[0]?.device_id; +const fetchControllingServer = async ( + token: string, + hardwareDeviceId: string +): Promise => { + // const hardwareDeviceId = store.getState().user.data?.batteries[0]?.device_id; console.log("Hardware Device ID:", store.getState().user.data); // const hardwareDeviceId = "VEC16000866082076280974"; @@ -103,11 +106,19 @@ export const connectSocket = () => { export const initSocket = async () => { try { + const hardwareDeviceId = + store.getState().user.data?.batteries?.[0]?.device_id; + if (!hardwareDeviceId) { + console.warn("initSocket skipped: hardwareDeviceId not ready"); + return; // just exit gracefully + } + + console.log(hardwareDeviceId, "hardware deviced"); //get latest telemetry as fallback option token = await fetchToken(); - controllingServer = await fetchControllingServer(token); + controllingServer = await fetchControllingServer(token, hardwareDeviceId); store.dispatch(setTelemetryLoading()); - await fetchLatestTelemetry(token, controllingServer); + await fetchLatestTelemetry(token, controllingServer, hardwareDeviceId); connectSocket(); } catch (err) { console.log(err, ""); @@ -171,11 +182,12 @@ const handleSocketData = (data: any) => { const fetchLatestTelemetry = async ( token: string, - controllingServer: string + controllingServer: string, + hardwareDeviceId: string ) => { try { - const hardwareDeviceId = - store.getState().user.data?.batteries[0]?.device_id; + // const hardwareDeviceId = + // store.getState().user.data?.batteries[0]?.device_id; if (!hardwareDeviceId || !token || !controllingServer) throw new Error("Missing hardwareDeviceId"); diff --git a/tsconfig.json b/tsconfig.json index fe2f3e7..d9da945 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,7 @@ { "extends": "expo/tsconfig.base", "compilerOptions": { + "jsx": "react-jsx", "strict": true, "paths": { "@/*": ["./*"]