From a0e6b3150088b6858b6176b5d867089bf250d3f9 Mon Sep 17 00:00:00 2001 From: Gauvain Date: Wed, 3 Jun 2026 23:32:44 +0200 Subject: [PATCH] fix(settings): correct QuickConnect sheet ref wiring and reset PIN on open --- app/(auth)/(tabs)/(home)/settings.tsx | 8 +++++--- components/settings/QuickConnect.tsx | 21 +++++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/app/(auth)/(tabs)/(home)/settings.tsx b/app/(auth)/(tabs)/(home)/settings.tsx index 768aaf0ac..e0893875e 100644 --- a/app/(auth)/(tabs)/(home)/settings.tsx +++ b/app/(auth)/(tabs)/(home)/settings.tsx @@ -11,11 +11,13 @@ import { SETTINGS_CATALOG, type SettingsEntry, } from "@/components/settings/index/settingsCatalog"; -import { QuickConnectSheet } from "@/components/settings/QuickConnect"; +import { + QuickConnectSheet, + type QuickConnectSheetRef, +} from "@/components/settings/QuickConnect"; import { StorageSettings } from "@/components/settings/StorageSettings"; import useRouter from "@/hooks/useAppRouter"; import { useJellyfin } from "@/providers/JellyfinProvider"; -import type { BottomSheetMethods } from "@/utils/expoUiBottomSheet"; // TV-specific settings component const SettingsTV = Platform.isTV ? require("./settings.tv").default : null; @@ -25,7 +27,7 @@ function SettingsMobile() { const insets = useSafeAreaInsets(); const { logout } = useJellyfin(); const navigation = useNavigation(); - const quickConnectRef = useRef(null); + const quickConnectRef = useRef(null); const os: "ios" | "android" = Platform.OS === "ios" ? "ios" : "android"; useEffect(() => { diff --git a/components/settings/QuickConnect.tsx b/components/settings/QuickConnect.tsx index 94560ac57..dbb1c32de 100644 --- a/components/settings/QuickConnect.tsx +++ b/components/settings/QuickConnect.tsx @@ -21,15 +21,15 @@ import { Button } from "../Button"; import { Text } from "../common/Text"; import { PinInput } from "../inputs/PinInput"; -export type QuickConnectSheetRef = BottomSheetMethods; +export type QuickConnectSheetRef = { present: () => void }; -export const QuickConnectSheet = forwardRef( +export const QuickConnectSheet = forwardRef( (_props, ref) => { const isTv = Platform.isTV; const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); const [quickConnectCode, setQuickConnectCode] = useState(); - const sheetRef = useRef(null); + const modalRef = useRef(null); const successHapticFeedback = useHaptic("success"); const errorHapticFeedback = useHaptic("error"); const snapPoints = useMemo( @@ -39,7 +39,16 @@ export const QuickConnectSheet = forwardRef( const isAndroid = Platform.OS === "android"; const { t } = useTranslation(); - useImperativeHandle(ref, () => sheetRef.current as BottomSheetMethods, []); + useImperativeHandle( + ref, + () => ({ + present: () => { + setQuickConnectCode(""); + modalRef.current?.present(); + }, + }), + [], + ); const authorizeQuickConnect = useCallback(async () => { if (!quickConnectCode) return; @@ -55,7 +64,7 @@ export const QuickConnectSheet = forwardRef( t("home.settings.quick_connect.quick_connect_autorized"), ); setQuickConnectCode(undefined); - sheetRef.current?.close(); + modalRef.current?.close(); } else { errorHapticFeedback(); Alert.alert( @@ -83,7 +92,7 @@ export const QuickConnectSheet = forwardRef( return (