feat: auto login through url

This commit is contained in:
Fredrik Burmester
2024-08-25 17:54:42 +02:00
parent 55df3991f5
commit 7792b8a675
2 changed files with 41 additions and 9 deletions

View File

@@ -9,7 +9,7 @@ import { DarkTheme, ThemeProvider } from "@react-navigation/native";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { useFonts } from "expo-font";
import { useKeepAwake } from "expo-keep-awake";
import { Stack } from "expo-router";
import { Stack, useRouter } from "expo-router";
import * as ScreenOrientation from "expo-screen-orientation";
import * as SplashScreen from "expo-splash-screen";
import { StatusBar } from "expo-status-bar";
@@ -17,13 +17,10 @@ import { Provider as JotaiProvider } from "jotai";
import { useEffect, useRef } from "react";
import { GestureHandlerRootView } from "react-native-gesture-handler";
import "react-native-reanimated";
import * as Linking from "expo-linking";
SplashScreen.preventAutoHideAsync();
export const unstable_settings = {
initialRouteName: "/(auth)/(tabs)/(home)/",
};
export default function RootLayout() {
const [loaded] = useFonts({
SpaceMono: require("../assets/fonts/SpaceMono-Regular.ttf"),
@@ -74,6 +71,16 @@ function Layout() {
);
}, [settings]);
const url = Linking.useURL();
const router = useRouter();
if (url) {
const { hostname, path, queryParams } = Linking.parse(url);
console.log("Linking ~ ", hostname, path, queryParams);
// @ts-ignore
// router.push("/(auth)/(home)/");
}
return (
<GestureHandlerRootView style={{ flex: 1 }}>
<QueryClientProvider client={queryClientRef.current}>

View File

@@ -4,8 +4,9 @@ import { Text } from "@/components/common/Text";
import { apiAtom, useJellyfin } from "@/providers/JellyfinProvider";
import { Ionicons } from "@expo/vector-icons";
import { AxiosError } from "axios";
import { useLocalSearchParams } from "expo-router";
import { useAtom } from "jotai";
import React, { useMemo, useState } from "react";
import React, { useEffect, useMemo, useState } from "react";
import {
Alert,
KeyboardAvoidingView,
@@ -23,17 +24,41 @@ const CredentialsSchema = z.object({
const Login: React.FC = () => {
const { setServer, login, removeServer } = useJellyfin();
const [api] = useAtom(apiAtom);
const params = useLocalSearchParams();
const [serverURL, setServerURL] = useState<string>("");
const {
apiUrl: _apiUrl,
username: _username,
password: _password,
} = params as { apiUrl: string; username: string; password: string };
const [serverURL, setServerURL] = useState<string>(_apiUrl);
const [error, setError] = useState<string>("");
const [credentials, setCredentials] = useState<{
username: string;
password: string;
}>({
username: "",
password: "",
username: _username,
password: _password,
});
useEffect(() => {
(async () => {
if (_apiUrl) {
setServer({
address: _apiUrl,
});
setTimeout(() => {
if (_username && _password) {
setCredentials({ username: _username, password: _password });
login(_username, _password);
}
}, 300);
}
})();
}, [_apiUrl, _username, _password]);
const [loading, setLoading] = useState<boolean>(false);
const handleLogin = async () => {