import { apiAtom, userAtom } from "@/providers/JellyfinProvider"; import { BottomSheetBackdrop, BottomSheetBackdropProps, BottomSheetModal, BottomSheetTextInput, BottomSheetView, } from "@gorhom/bottom-sheet"; import { getQuickConnectApi } from "@jellyfin/sdk/lib/utils/api"; import { useHaptic } from "@/hooks/useHaptic"; import { useAtom } from "jotai"; import React, { useCallback, useRef, useState } from "react"; import { Alert, View, ViewProps } from "react-native"; import { Button } from "../Button"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; interface Props extends ViewProps {} export const QuickConnect: React.FC = ({ ...props }) => { 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 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("Success", "Quick connect authorized"); setQuickConnectCode(undefined); bottomSheetModalRef?.current?.close(); } else { errorHapticFeedback(); Alert.alert("Error", "Invalid code"); } } catch (e) { errorHapticFeedback(); Alert.alert("Error", "Invalid code"); } } }, [api, user, quickConnectCode]); return ( bottomSheetModalRef?.current?.present()} title="Authorize Quick Connect" textColor="blue" /> Quick Connect ); };