From fdf055ae222ac2063fa87759479018248657fd63 Mon Sep 17 00:00:00 2001
From: MohamedBassem <me@mbassem.com>
Date: Mon, 26 Aug 2024 21:33:01 +0300
Subject: feature(mobile): Allow configuring uploaded image quality in the
 mobile app

---
 apps/mobile/app/dashboard/(tabs)/settings.tsx | 42 +++++++++++++++++++++++++--
 1 file changed, 40 insertions(+), 2 deletions(-)

(limited to 'apps/mobile/app/dashboard/(tabs)/settings.tsx')

diff --git a/apps/mobile/app/dashboard/(tabs)/settings.tsx b/apps/mobile/app/dashboard/(tabs)/settings.tsx
index 73d1b42d..18d3d243 100644
--- a/apps/mobile/app/dashboard/(tabs)/settings.tsx
+++ b/apps/mobile/app/dashboard/(tabs)/settings.tsx
@@ -1,6 +1,10 @@
+import { useEffect } from "react";
 import { Text, View } from "react-native";
+import { Slider } from "react-native-awesome-slider";
+import { useSharedValue } from "react-native-reanimated";
 import { Button } from "@/components/ui/Button";
 import CustomSafeAreaView from "@/components/ui/CustomSafeAreaView";
+import { Divider } from "@/components/ui/Divider";
 import PageTitle from "@/components/ui/PageTitle";
 import { useSession } from "@/lib/session";
 import useAppSettings from "@/lib/settings";
@@ -8,7 +12,19 @@ import { api } from "@/lib/trpc";
 
 export default function Dashboard() {
   const { logout } = useSession();
-  const { settings, isLoading: isSettingsLoading } = useAppSettings();
+  const {
+    settings,
+    setSettings,
+    isLoading: isSettingsLoading,
+  } = useAppSettings();
+
+  const imageQuality = useSharedValue(0);
+  const imageQualityMin = useSharedValue(0);
+  const imageQualityMax = useSharedValue(100);
+
+  useEffect(() => {
+    imageQuality.value = settings.imageQuality * 100;
+  }, [settings]);
 
   const { data, error, isLoading } = api.users.whoami.useQuery();
 
@@ -30,8 +46,30 @@ export default function Dashboard() {
             {isLoading ? "Loading ..." : data?.email}
           </Text>
         </View>
-
         <Button className="w-full" label="Log Out" onPress={logout} />
+        <Divider orientation="horizontal" />
+        <Text className="w-full p-1 text-2xl font-bold text-foreground">
+          Upload Settings
+        </Text>
+        <View className="flex w-full flex-row items-center justify-between gap-8 rounded-lg bg-white px-4 py-2 dark:bg-accent">
+          <Text className="text-lg text-accent-foreground">Image Quality</Text>
+          <View className="flex flex-1 flex-row items-center justify-center gap-2">
+            <Text className="text-foreground">
+              {settings.imageQuality * 100}%
+            </Text>
+            <Slider
+              onSlidingComplete={(value) =>
+                setSettings({
+                  ...settings,
+                  imageQuality: Math.round(value) / 100,
+                })
+              }
+              progress={imageQuality}
+              minimumValue={imageQualityMin}
+              maximumValue={imageQualityMax}
+            />
+          </View>
+        </View>
       </View>
     </CustomSafeAreaView>
   );
-- 
cgit v1.2.3-70-g09d2

