diff --git a/src/apps/dashboard/features/users/api/useAuthProviders.ts b/src/apps/dashboard/features/users/api/useAuthProviders.ts index f09a6d496a..1192381354 100644 --- a/src/apps/dashboard/features/users/api/useAuthProviders.ts +++ b/src/apps/dashboard/features/users/api/useAuthProviders.ts @@ -2,14 +2,10 @@ import { Api } from '@jellyfin/sdk'; import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { getSessionApi } from '@jellyfin/sdk/lib/utils/api/session-api'; +import type { AxiosRequestConfig } from 'axios'; -const fetchAuthProviders = async (api?: Api) => { - if (!api) { - console.error('[useAuthProvider] No Api instance available'); - return; - } - - const response = await getSessionApi(api).getAuthProviders(); +const fetchAuthProviders = async (api: Api, options?: AxiosRequestConfig) => { + const response = await getSessionApi(api).getAuthProviders(options); return response.data; }; @@ -19,7 +15,7 @@ export const useAuthProviders = () => { return useQuery({ queryKey: [ 'AuthProviders' ], - queryFn: () => fetchAuthProviders(api), + queryFn: ({ signal }) => fetchAuthProviders(api!, { signal }), enabled: !!api }); }; diff --git a/src/apps/dashboard/features/users/api/useChannels.ts b/src/apps/dashboard/features/users/api/useChannels.ts index da6508ac71..ebf2db0439 100644 --- a/src/apps/dashboard/features/users/api/useChannels.ts +++ b/src/apps/dashboard/features/users/api/useChannels.ts @@ -3,14 +3,10 @@ import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { getChannelsApi } from '@jellyfin/sdk/lib/utils/api/channels-api'; import { ChannelsApiGetChannelsRequest } from '@jellyfin/sdk/lib/generated-client/api/channels-api'; +import type { AxiosRequestConfig } from 'axios'; -const fetchChannels = async (api?: Api, params?: ChannelsApiGetChannelsRequest) => { - if (!api) { - console.error('[useAuthProvider] No Api instance available'); - return; - } - - const response = await getChannelsApi(api).getChannels(params); +const fetchChannels = async (api: Api, params?: ChannelsApiGetChannelsRequest, options?: AxiosRequestConfig) => { + const response = await getChannelsApi(api).getChannels(params, options); return response.data; }; @@ -20,7 +16,7 @@ export const useChannels = (params?: ChannelsApiGetChannelsRequest) => { return useQuery({ queryKey: [ 'Channels' ], - queryFn: () => fetchChannels(api, params), + queryFn: ({ signal }) => fetchChannels(api!, params, { signal }), enabled: !!api }); }; diff --git a/src/apps/dashboard/features/users/api/useCreateUser.ts b/src/apps/dashboard/features/users/api/useCreateUser.ts index fe935739d5..51d4d6d345 100644 --- a/src/apps/dashboard/features/users/api/useCreateUser.ts +++ b/src/apps/dashboard/features/users/api/useCreateUser.ts @@ -1,4 +1,4 @@ -import { UserApiCreateUserByNameRequest } from '@jellyfin/sdk/lib/generated-client'; +import { UserApiCreateUserByNameRequest } from '@jellyfin/sdk/lib/generated-client/api/user-api'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; @@ -8,7 +8,6 @@ export const useCreateUser = () => { return useMutation({ mutationFn: (params: UserApiCreateUserByNameRequest) => ( - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion getUserApi(api!) .createUserByName(params) ) diff --git a/src/apps/dashboard/features/users/api/useDeleteUser.ts b/src/apps/dashboard/features/users/api/useDeleteUser.ts index 5ab9bb0f37..fb63ec65dc 100644 --- a/src/apps/dashboard/features/users/api/useDeleteUser.ts +++ b/src/apps/dashboard/features/users/api/useDeleteUser.ts @@ -1,4 +1,4 @@ -import { UserApiDeleteUserRequest } from '@jellyfin/sdk/lib/generated-client'; +import { UserApiDeleteUserRequest } from '@jellyfin/sdk/lib/generated-client/api/user-api'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; @@ -10,7 +10,6 @@ export const useDeleteUser = () => { return useMutation({ mutationFn: (params: UserApiDeleteUserRequest) => ( - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion getUserApi(api!) .deleteUser(params) ), diff --git a/src/apps/dashboard/features/users/api/useLibraryMediaFolders.ts b/src/apps/dashboard/features/users/api/useLibraryMediaFolders.ts index ce028fb11f..5676344de8 100644 --- a/src/apps/dashboard/features/users/api/useLibraryMediaFolders.ts +++ b/src/apps/dashboard/features/users/api/useLibraryMediaFolders.ts @@ -3,14 +3,10 @@ import { LibraryApiGetMediaFoldersRequest } from '@jellyfin/sdk/lib/generated-cl import { getLibraryApi } from '@jellyfin/sdk/lib/utils/api/library-api'; import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; +import type { AxiosRequestConfig } from 'axios'; -const fetchLibraryMediaFolders = async (api?: Api, params?: LibraryApiGetMediaFoldersRequest) => { - if (!api) { - console.error('[useLibraryMediaFolders] no Api instance available'); - return; - } - - const response = await getLibraryApi(api).getMediaFolders(params); +const fetchLibraryMediaFolders = async (api: Api, params?: LibraryApiGetMediaFoldersRequest, options?: AxiosRequestConfig) => { + const response = await getLibraryApi(api).getMediaFolders(params, options); return response.data; }; @@ -20,7 +16,7 @@ export const useLibraryMediaFolders = (params?: LibraryApiGetMediaFoldersRequest return useQuery({ queryKey: ['LibraryMediaFolders'], - queryFn: () => fetchLibraryMediaFolders(api, params), + queryFn: ({ signal }) => fetchLibraryMediaFolders(api!, params, { signal }), enabled: !!api }); }; diff --git a/src/apps/dashboard/features/users/api/useNetworkConfig.ts b/src/apps/dashboard/features/users/api/useNetworkConfig.ts index 24ab234f71..9b06ca64f9 100644 --- a/src/apps/dashboard/features/users/api/useNetworkConfig.ts +++ b/src/apps/dashboard/features/users/api/useNetworkConfig.ts @@ -2,15 +2,11 @@ import { Api } from '@jellyfin/sdk'; import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { getConfigurationApi } from '@jellyfin/sdk/lib/utils/api/configuration-api'; -import { NetworkConfiguration } from '@jellyfin/sdk/lib/generated-client'; +import type { AxiosRequestConfig } from 'axios'; +import type { NetworkConfiguration } from '@jellyfin/sdk/lib/generated-client/models/network-configuration'; -const fetchNetworkConfig = async (api?: Api) => { - if (!api) { - console.error('[useAuthProvider] No Api instance available'); - return; - } - - const response = await getConfigurationApi(api).getNamedConfiguration({ key: 'network' }); +const fetchNetworkConfig = async (api: Api, options?: AxiosRequestConfig) => { + const response = await getConfigurationApi(api).getNamedConfiguration({ key: 'network' }, options); return response.data as NetworkConfiguration; }; @@ -20,7 +16,7 @@ export const useNetworkConfig = () => { return useQuery({ queryKey: [ 'NetConfig' ], - queryFn: () => fetchNetworkConfig(api), + queryFn: ({ signal }) => fetchNetworkConfig(api!, { signal }), enabled: !!api }); }; diff --git a/src/apps/dashboard/features/users/api/useParentalRatings.ts b/src/apps/dashboard/features/users/api/useParentalRatings.ts index 426b3eed18..c4b2fcbfed 100644 --- a/src/apps/dashboard/features/users/api/useParentalRatings.ts +++ b/src/apps/dashboard/features/users/api/useParentalRatings.ts @@ -2,14 +2,10 @@ import { Api } from '@jellyfin/sdk'; import { getLocalizationApi } from '@jellyfin/sdk/lib/utils/api/localization-api'; import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; +import type { AxiosRequestConfig } from 'axios'; -const fetchParentalRatings = async (api?: Api) => { - if (!api) { - console.error('[useLibraryMediaFolders] no Api instance available'); - return; - } - - const response = await getLocalizationApi(api).getParentalRatings(); +const fetchParentalRatings = async (api: Api, options?: AxiosRequestConfig) => { + const response = await getLocalizationApi(api).getParentalRatings(options); return response.data; }; @@ -19,7 +15,7 @@ export const useParentalRatings = () => { return useQuery({ queryKey: ['ParentalRatings'], - queryFn: () => fetchParentalRatings(api), + queryFn: ({ signal }) => fetchParentalRatings(api!, { signal }), enabled: !!api }); }; diff --git a/src/apps/dashboard/features/users/api/usePasswordResetProviders.ts b/src/apps/dashboard/features/users/api/usePasswordResetProviders.ts index 1da7784b5f..ebc5435d6c 100644 --- a/src/apps/dashboard/features/users/api/usePasswordResetProviders.ts +++ b/src/apps/dashboard/features/users/api/usePasswordResetProviders.ts @@ -2,14 +2,10 @@ import { Api } from '@jellyfin/sdk'; import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; import { getSessionApi } from '@jellyfin/sdk/lib/utils/api/session-api'; +import type { AxiosRequestConfig } from 'axios'; -const fetchPasswordResetProviders = async (api?: Api) => { - if (!api) { - console.error('[useAuthProvider] No Api instance available'); - return; - } - - const response = await getSessionApi(api).getPasswordResetProviders(); +const fetchPasswordResetProviders = async (api: Api, options?: AxiosRequestConfig) => { + const response = await getSessionApi(api).getPasswordResetProviders(options); return response.data; }; @@ -19,7 +15,7 @@ export const usePasswordResetProviders = () => { return useQuery({ queryKey: [ 'PasswordResetProviders' ], - queryFn: () => fetchPasswordResetProviders(api), + queryFn: ({ signal }) => fetchPasswordResetProviders(api!, { signal }), enabled: !!api }); }; diff --git a/src/apps/dashboard/features/users/api/useUpdateUser.ts b/src/apps/dashboard/features/users/api/useUpdateUser.ts index 93a0133e97..70b218e441 100644 --- a/src/apps/dashboard/features/users/api/useUpdateUser.ts +++ b/src/apps/dashboard/features/users/api/useUpdateUser.ts @@ -1,4 +1,4 @@ -import { UserApiUpdateUserRequest } from '@jellyfin/sdk/lib/generated-client'; +import { UserApiUpdateUserRequest } from '@jellyfin/sdk/lib/generated-client/api/user-api'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; @@ -10,7 +10,6 @@ export const useUpdateUser = () => { return useMutation({ mutationFn: (params: UserApiUpdateUserRequest) => ( - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion getUserApi(api!) .updateUser(params) ), diff --git a/src/apps/dashboard/features/users/api/useUpdateUserPolicy.ts b/src/apps/dashboard/features/users/api/useUpdateUserPolicy.ts index f7077609ca..f5fb2f6370 100644 --- a/src/apps/dashboard/features/users/api/useUpdateUserPolicy.ts +++ b/src/apps/dashboard/features/users/api/useUpdateUserPolicy.ts @@ -1,4 +1,4 @@ -import { UserApiUpdateUserPolicyRequest } from '@jellyfin/sdk/lib/generated-client'; +import { UserApiUpdateUserPolicyRequest } from '@jellyfin/sdk/lib/generated-client/api/user-api'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; import { useMutation } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; @@ -10,7 +10,7 @@ export const useUpdateUserPolicy = () => { return useMutation({ mutationFn: (params: UserApiUpdateUserPolicyRequest) => ( - // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + getUserApi(api!) .updateUserPolicy(params) ), diff --git a/src/apps/dashboard/features/users/api/useUser.ts b/src/apps/dashboard/features/users/api/useUser.ts index 6884c596bc..3932969cf1 100644 --- a/src/apps/dashboard/features/users/api/useUser.ts +++ b/src/apps/dashboard/features/users/api/useUser.ts @@ -1,23 +1,14 @@ import { Api } from '@jellyfin/sdk'; -import { UserApiGetUserByIdRequest } from '@jellyfin/sdk/lib/generated-client'; +import { UserApiGetUserByIdRequest } from '@jellyfin/sdk/lib/generated-client/api/user-api'; import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api'; import { useQuery } from '@tanstack/react-query'; import { useApi } from 'hooks/useApi'; +import type { AxiosRequestConfig } from 'axios'; export const QUERY_KEY = 'User'; -const fetchUser = async (api?: Api, params?: UserApiGetUserByIdRequest) => { - if (!api) { - console.error('[useUser] No Api instance available'); - return; - } - - if (!params) { - console.error('[useUser] Missing request params'); - return; - } - - const response = await getUserApi(api).getUserById(params); +const fetchUser = async (api: Api, params: UserApiGetUserByIdRequest, options?: AxiosRequestConfig) => { + const response = await getUserApi(api).getUserById(params, options); return response.data; }; @@ -27,7 +18,7 @@ export const useUser = (params?: UserApiGetUserByIdRequest) => { return useQuery({ queryKey: [ QUERY_KEY, params?.userId ], - queryFn: () => fetchUser(api, params), + queryFn: ({ signal }) => fetchUser(api!, params!, { signal }), enabled: !!api && !!params }); }; diff --git a/src/apps/dashboard/routes/users/index.tsx b/src/apps/dashboard/routes/users/index.tsx index 92b552d0cc..e4857f0206 100644 --- a/src/apps/dashboard/routes/users/index.tsx +++ b/src/apps/dashboard/routes/users/index.tsx @@ -1,7 +1,6 @@ import React, { useCallback, useEffect, useRef, useState } from 'react'; import Dashboard from '../../../../utils/dashboard'; import globalize from '../../../../lib/globalize'; -import dom from 'utils/dom'; import confirm from '../../../../components/confirm/confirm'; import UserCardBox from '../../../../components/dashboard/users/UserCardBox'; import SectionTitleContainer from '../../../../elements/SectionTitleContainer'; @@ -16,6 +15,7 @@ import Toast from 'apps/dashboard/components/Toast'; import { useUsers } from 'hooks/useUsers'; import Loading from 'components/loading/LoadingComponent'; import { useDeleteUser } from 'apps/dashboard/features/users/api/useDeleteUser'; +import dom from 'utils/dom'; type MenuEntry = { name?: string; diff --git a/src/apps/stable/routes/user/userprofile.tsx b/src/apps/stable/routes/user/userprofile.tsx index 36a01fcbaa..e3e93ed019 100644 --- a/src/apps/stable/routes/user/userprofile.tsx +++ b/src/apps/stable/routes/user/userprofile.tsx @@ -7,18 +7,14 @@ import Dashboard from '../../../../utils/dashboard'; import globalize from '../../../../lib/globalize'; import { appHost } from '../../../../components/apphost'; import confirm from '../../../../components/confirm/confirm'; -import Button from '../../../../elements/emby-button/Button'; -import UserPasswordForm from '../../../../components/dashboard/users/UserPasswordForm'; import toast from '../../../../components/toast/toast'; -import Page from '../../../../components/Page'; -<<<<<<< HEAD -import { AppFeature } from 'constants/appFeature'; -======= import { useUser } from 'apps/dashboard/features/users/api/useUser'; -import Loading from 'components/loading/LoadingComponent'; import loading from 'components/loading/loading'; import { queryClient } from 'utils/query/queryClient'; ->>>>>>> 9445839e9 (Move user pages to TS SDK) +import UserPasswordForm from 'components/dashboard/users/UserPasswordForm'; +import Page from 'components/Page'; +import Loading from 'components/loading/LoadingComponent'; +import Button from 'elements/emby-button/Button'; const UserProfile: FunctionComponent = () => { const [ searchParams ] = useSearchParams(); @@ -42,41 +38,11 @@ const UserProfile: FunctionComponent = () => { void libraryMenu.then(menu => menu.setTitle(user.Name)); -<<<<<<< HEAD - setUserName(user.Name); - void libraryMenu.then(menu => menu.setTitle(user.Name)); - - let imageUrl = 'assets/img/avatar.png'; - if (user.PrimaryImageTag) { - imageUrl = window.ApiClient.getUserImageUrl(user.Id, { - tag: user.PrimaryImageTag, - type: 'Primary' - }); - } - const userImage = (page.querySelector('#image') as HTMLDivElement); - userImage.style.backgroundImage = 'url(' + imageUrl + ')'; - - Dashboard.getCurrentUser().then(function (loggedInUser: UserDto) { - if (!user.Policy) { - throw new Error('Unexpected null user.Policy'); - } - - if (user.PrimaryImageTag) { - (page.querySelector('#btnAddImage') as HTMLButtonElement).classList.add('hide'); - (page.querySelector('#btnDeleteImage') as HTMLButtonElement).classList.remove('hide'); - } else if (appHost.supports(AppFeature.FileInput) && (loggedInUser?.Policy?.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) { - (page.querySelector('#btnDeleteImage') as HTMLButtonElement).classList.add('hide'); - (page.querySelector('#btnAddImage') as HTMLButtonElement).classList.remove('hide'); - } - }).catch(err => { - console.error('[userprofile] failed to get current user', err); -======= let imageUrl = 'assets/img/avatar.png'; if (user.PrimaryImageTag) { imageUrl = window.ApiClient.getUserImageUrl(user.Id, { tag: user.PrimaryImageTag, type: 'Primary' ->>>>>>> 9445839e9 (Move user pages to TS SDK) }); } const userImage = (page.querySelector('#image') as HTMLDivElement);