import { BottomSheetBackdrop, type BottomSheetBackdropProps, BottomSheetModal, BottomSheetView, } from "@gorhom/bottom-sheet"; import { getQuickConnectApi } from "@jellyfin/sdk/lib/utils/api"; import { useAtom } from "jotai"; import type React from "react"; import { useCallback, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { Alert, Platform, View, type ViewProps } from "react-native"; import { useHaptic } from "@/hooks/useHaptic"; import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { Button } from "../Button"; import { Text } from "../common/Text"; import { PinInput } from "../inputs/PinInput"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; interface Props extends ViewProps {} export const QuickConnect: React.FC = ({ ...props }) => { const isTv = Platform.isTV; const [api] = useAtom(apiAtom); const [user] = useAtom(userAtom); const [quickConnectCode, setQuickConnectCode] = useState(); const bottomSheetModalRef = useRef(null); const successHapticFeedback = useHaptic("success"); const errorHapticFeedback = useHaptic("error"); const snapPoints = useMemo( () => (Platform.OS === "android" ? ["100%"] : ["40%"]), [], ); const isAndroid = Platform.OS === "android"; const { t } = useTranslation(); const renderBackdrop = useCallback( (props: BottomSheetBackdropProps) => ( ), [], ); const authorizeQuickConnect = useCallback(async () => { if (quickConnectCode) { try { const res = await getQuickConnectApi(api!).authorizeQuickConnect({ code: quickConnectCode, userId: user?.Id, }); if (res.status === 200) { successHapticFeedback(); Alert.alert( t("home.settings.quick_connect.success"), t("home.settings.quick_connect.quick_connect_autorized"), ); setQuickConnectCode(undefined); bottomSheetModalRef?.current?.close(); } else { errorHapticFeedback(); Alert.alert( t("home.settings.quick_connect.error"), t("home.settings.quick_connect.invalid_code"), ); } } catch (_e) { errorHapticFeedback(); Alert.alert( t("home.settings.quick_connect.error"), t("home.settings.quick_connect.invalid_code"), ); } } }, [api, user, quickConnectCode]); if (isTv) return null; return ( { // Reset the code when opening the sheet setQuickConnectCode(""); bottomSheetModalRef?.current?.present(); }} title={t("home.settings.quick_connect.authorize_button")} textColor='blue' /> {t("home.settings.quick_connect.quick_connect_title")} {t( "home.settings.quick_connect.enter_the_quick_connect_code", )} ); };