cleaning up navigation hierarchy for login flow

This commit is contained in:
Violet Caulfield
2024-10-17 18:14:42 -05:00
parent 72ff75a921
commit 0e09778c4a
4 changed files with 31 additions and 27 deletions

0
api/queries/libraries.ts Normal file
View File

View File

@@ -6,39 +6,42 @@ import { useApiClientContext } from "../../jellyfin-api-provider";
import { TextField, View, Button, Colors } from 'react-native-ui-lib';
import { jellifyStyles } from "../../styles";
import _ from "lodash";
import * as Keychain from "react-native-keychain"
import { client } from "../../../api/queries";
import { JellyfinCredentials } from "../../../api/types/jellyfin-credentials";
export default function ServerAuthentication(): React.JSX.Element {
const [username, setUsername] = React.useState('');
const [password, setPassword] = React.useState('');
const { server, setServer, setChangeServer } = useApiClientContext();
const { apiClient, setApiClient, server, setServer, setChangeServer } = useApiClientContext();
// const useApiMutation = useMutation({
// mutationFn: async (credentials: JellyfinCredentials) => {
// return await apiClient!.authenticateUserByName(credentials.username, credentials.password!);
// },
// onSuccess: async (authResult, credentials) => {
const useApiMutation = useMutation({
mutationFn: async (credentials: JellyfinCredentials) => {
return await apiClient!.authenticateUserByName(credentials.username, credentials.password!);
},
onSuccess: async (authResult, credentials) => {
// console.log(`Received auth response from ${server!.name}`)
// if (_.isUndefined(authResult))
// return Promise.reject(new Error("Authentication result was empty"))
console.log(`Received auth response from ${server!.name}`)
if (_.isUndefined(authResult))
return Promise.reject(new Error("Authentication result was empty"))
// if (authResult.status >= 400 || _.isEmpty(authResult.data.AccessToken))
// return Promise.reject(new Error("Invalid credentials"))
if (authResult.status >= 400 || _.isEmpty(authResult.data.AccessToken))
return Promise.reject(new Error("Invalid credentials"))
// if (_.isUndefined(authResult.data.User))
// return Promise.reject(new Error("Unable to login"));
if (_.isUndefined(authResult.data.User))
return Promise.reject(new Error("Unable to login"));
// setApiClient(client.createApi(server!.url, (authResult.data.AccessToken as string)))
// setUsername(authResult.data.User.Name!);
// return await Keychain.setInternetCredentials(server!.url, credentials.username, (authResult.data.AccessToken as string));
setApiClient(client.createApi(server!.url, (authResult.data.AccessToken as string)))
setUsername(authResult.data.User.Name!);
return await Keychain.setInternetCredentials(server!.url, credentials.username, (authResult.data.AccessToken as string));
// },
// onError: async (error: Error) => {
// console.error("An error occurred connecting to the Jellyfin instance", error);
// return await AsyncStorage.setItem(AsyncStorageKeys.ServerUrl, "");
// }
// });
},
onError: async (error: Error) => {
console.error("An error occurred connecting to the Jellyfin instance", error);
return await AsyncStorage.setItem(AsyncStorageKeys.ServerUrl, "");
}
});
const clearServer = useMutation({
mutationFn: async () => {

View File

@@ -1,10 +1,11 @@
import React from "react";
import { View } from "react-native";
import { Text } from "react-native-ui-lib";
export default function ServerLibrary(): React.JSX.Element {
return (
<View>
<Text style={{fontSize: 300 }}>Select Music Library</Text>
</View>
)
}

View File

@@ -41,13 +41,13 @@ function conditionalHomeRender(): React.JSX.Element {
return (
<View style={jellifyStyles.container}>
<NavigationContainer theme={useTheme()}>
<Stack.Navigator screenOptions={{ headerShown: false }}>
{ !_.isUndefined(libraryId) ? (
<Tab.Screen name="Navigation" options={{ headerShown: false }} component={Navigation} />
<Stack.Navigator screenOptions={{ headerShown: false }}>
<Tab.Screen name="Navigation" options={{ headerShown: false }} component={Navigation} />
</Stack.Navigator>
) : (
<Stack.Screen name="Login" options={{ headerShown: false }} component={Login} />
<Login />
)}
</Stack.Navigator>
</NavigationContainer>
</View>
);