import { JellyseerrApi, useJellyseerr } from "@/hooks/useJellyseerr"; import { userAtom } from "@/providers/JellyfinProvider"; import { useSettings } from "@/utils/atoms/settings"; import { useMutation } from "@tanstack/react-query"; import { useTranslation } from "react-i18next"; import { useAtom } from "jotai"; import { useState } from "react"; import { View } from "react-native"; import { toast } from "sonner-native"; import { Button } from "../Button"; import { Input } from "../common/Input"; import { Text } from "../common/Text"; import { ListGroup } from "../list/ListGroup"; import { ListItem } from "../list/ListItem"; export const JellyseerrSettings = () => { const { jellyseerrApi, jellyseerrUser, setJellyseerrUser, clearAllJellyseerData, } = useJellyseerr(); const { t } = useTranslation(); const [user] = useAtom(userAtom); const [settings, updateSettings, pluginSettings] = useSettings(); const [promptForJellyseerrPass, setPromptForJellyseerrPass] = useState(false); const [jellyseerrPassword, setJellyseerrPassword] = useState< string | undefined >(undefined); const [jellyseerrServerUrl, setjellyseerrServerUrl] = useState< string | undefined >(settings?.jellyseerrServerUrl || undefined); const loginToJellyseerrMutation = useMutation({ mutationFn: async () => { if (!jellyseerrServerUrl || !user?.Name || !jellyseerrPassword) { throw new Error("Missing required information for login"); } const jellyseerrTempApi = new JellyseerrApi(jellyseerrServerUrl); return jellyseerrTempApi.login(user.Name, jellyseerrPassword); }, onSuccess: (user) => { setJellyseerrUser(user); updateSettings({ jellyseerrServerUrl }); }, onError: () => { toast.error(t("jellyseerr.failed_to_login")); }, onSettled: () => { setJellyseerrPassword(undefined); }, }); const testJellyseerrServerUrlMutation = useMutation({ mutationFn: async () => { if (!jellyseerrServerUrl || jellyseerrApi) return null; const jellyseerrTempApi = new JellyseerrApi(jellyseerrServerUrl); return jellyseerrTempApi.test(); }, onSuccess: (result) => { if (result && result.isValid) { if (result.requiresPass) { setPromptForJellyseerrPass(true); } else { updateSettings({ jellyseerrServerUrl }); } } else { setPromptForJellyseerrPass(false); setjellyseerrServerUrl(undefined); clearAllJellyseerData(); } }, }); const clearData = () => { clearAllJellyseerData().finally(() => { setjellyseerrServerUrl(undefined); setPromptForJellyseerrPass(false); }); }; return ( {jellyseerrUser ? ( <> ) : ( {t("home.settings.plugins.jellyseerr.jellyseerr_warning")} {t("home.settings.plugins.jellyseerr.server_url")} {t("home.settings.plugins.jellyseerr.server_url_hint")} {t("home.settings.plugins.jellyseerr.password")} )} ); };