import { selectDeleteAfterUpload } from "@/redux/app/app.selectors"; import { signOutStart } from "@/redux/user/user.actions"; import { selectBodyshop, selectCurrentUser } from "@/redux/user/user.selectors"; import { registerForPushNotificationsAsync } from "@/util/notificationHandler"; import { formatBytes } from "@/util/uploadUtils"; import AsyncStorage from "@react-native-async-storage/async-storage"; import * as Application from "expo-application"; import Constants from "expo-constants"; import * as Notifications from "expo-notifications"; import * as Updates from "expo-updates"; import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { Alert, ScrollView, StyleSheet, View } from "react-native"; import { Button, Card, Divider, List, Text } from "react-native-paper"; import { SafeAreaView } from "react-native-safe-area-context"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { ThemeSelector } from "../theme-selector/theme-selector"; import UploadDeleteSwitch from "./upload-delete-switch"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, deleteAfterUpload: selectDeleteAfterUpload, currentUser: selectCurrentUser, }); const mapDispatchToProps = (dispatch) => ({ signOutStart: () => dispatch(signOutStart()), }); export default connect(mapStateToProps, mapDispatchToProps)(Tab); function Tab({ bodyshop, currentUser, signOutStart }) { const { t } = useTranslation(); const [permissionState, setPermissionState] = useState(null); useEffect(() => { (async () => { const status = await Notifications.getPermissionsAsync(); setPermissionState(status); })(); }, []); const handleClearStorage = () => { Alert.alert( "Clear Local Cache", "This will remove cache and settings. Continue?", [ { text: "Cancel", style: "cancel" }, { text: "Clear", style: "destructive", onPress: async () => { try { await AsyncStorage.removeItem("persist:root"); Alert.alert( "Cleared", "Local cache cleared. Please restart the app." ); } catch (_e) { Alert.alert("Error", "Unable to clear local cache."); } }, }, ] ); }; return ( {t("settings.titles.settings")} {t("mediabrowser.labels.deleteafterupload")} } /> {!bodyshop?.uselocalmediaserver && ( } /> )} {`${t("settings.labels.notificationsenabled")}: ${ permissionState?.granted === true ? "Yes" : "No" }`} {`${t("settings.labels.signedinshop")} ${ bodyshop?.shopname || bodyshop?.id || "Unknown" }`} {`${t("settings.labels.signedinuser")} ${ currentUser?.email || "Unknown" }`} {t("settings.labels.version", { number: `${Constants.expoConfig.version}(${Application.nativeBuildVersion} - ${Constants.expoConfig.extra.expover})`, })} ); } const styles = StyleSheet.create({ container: { paddingVertical: 24, paddingHorizontal: 12, paddingBottom: 96, }, title: { marginHorizontal: 12, fontWeight: "600", }, section: { marginBottom: 20, }, inlineRow: { flexDirection: "row", alignItems: "center", justifyContent: "space-between", paddingVertical: 8, paddingHorizontal: 4, }, switchLabel: { fontSize: 16, fontWeight: "500", }, paragraph: { marginBottom: 8, }, actionsRow: { justifyContent: "flex-end", }, divider: { marginTop: 8, }, footerNote: { textAlign: "center", // color: "#666", marginTop: 16, }, });