Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Migrate dashboard user pages to use TS SDK #6403

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions src/apps/dashboard/features/users/api/useAuthProviders.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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, options?: AxiosRequestConfig) => {
if (!api) {
console.error('[useAuthProvider] No Api instance available');
return;
}

const response = await getSessionApi(api).getAuthProviders(options);

return response.data;
};

export const useAuthProviders = () => {
const { api } = useApi();

return useQuery({
queryKey: [ 'AuthProviders' ],
queryFn: ({ signal }) => fetchAuthProviders(api, { signal }),
enabled: !!api
});
};
27 changes: 27 additions & 0 deletions src/apps/dashboard/features/users/api/useChannels.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { Api } from '@jellyfin/sdk';
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, options?: AxiosRequestConfig) => {
if (!api) {
console.error('[useAuthProvider] No Api instance available');
return;
}

const response = await getChannelsApi(api).getChannels(params, options);

return response.data;
};

export const useChannels = (params?: ChannelsApiGetChannelsRequest) => {
const { api } = useApi();

return useQuery({
queryKey: [ 'Channels' ],
queryFn: ({ signal }) => fetchChannels(api, params, { signal }),
enabled: !!api
});
};
16 changes: 16 additions & 0 deletions src/apps/dashboard/features/users/api/useCreateUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { UserApiCreateUserByNameRequest } from '@jellyfin/sdk/lib/generated-client';
import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api';
import { useMutation } from '@tanstack/react-query';
import { useApi } from 'hooks/useApi';

export const useCreateUser = () => {
const { api } = useApi();

return useMutation({
mutationFn: (params: UserApiCreateUserByNameRequest) => (
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
getUserApi(api!)
.createUserByName(params)
)
});
};
23 changes: 23 additions & 0 deletions src/apps/dashboard/features/users/api/useDeleteUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { UserApiDeleteUserRequest } from '@jellyfin/sdk/lib/generated-client';
import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api';
import { useMutation } from '@tanstack/react-query';
import { useApi } from 'hooks/useApi';
import { QUERY_KEY } from 'hooks/useUsers';
import { queryClient } from 'utils/query/queryClient';

export const useDeleteUser = () => {
const { api } = useApi();

return useMutation({
mutationFn: (params: UserApiDeleteUserRequest) => (
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
getUserApi(api!)
.deleteUser(params)
),
onSuccess: () => {
void queryClient.invalidateQueries({
queryKey: [ QUERY_KEY ]
});
}
});
};
27 changes: 27 additions & 0 deletions src/apps/dashboard/features/users/api/useLibraryMediaFolders.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import { Api } from '@jellyfin/sdk';
import { LibraryApiGetMediaFoldersRequest } from '@jellyfin/sdk/lib/generated-client/api/library-api';
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, options?: AxiosRequestConfig) => {
if (!api) {
console.error('[useLibraryMediaFolders] no Api instance available');
return;
}

const response = await getLibraryApi(api).getMediaFolders(params, options);

return response.data;
};

export const useLibraryMediaFolders = (params?: LibraryApiGetMediaFoldersRequest) => {
const { api } = useApi();

return useQuery({
queryKey: ['LibraryMediaFolders'],
queryFn: ({ signal }) => fetchLibraryMediaFolders(api, params, { signal }),
enabled: !!api
});
};
27 changes: 27 additions & 0 deletions src/apps/dashboard/features/users/api/useNetworkConfig.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
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';

const fetchNetworkConfig = async (api?: Api, options?: AxiosRequestConfig) => {
if (!api) {
console.error('[useAuthProvider] No Api instance available');
return;
}

const response = await getConfigurationApi(api).getNamedConfiguration({ key: 'network' }, options);

return response.data as NetworkConfiguration;
};

export const useNetworkConfig = () => {
const { api } = useApi();

return useQuery({
queryKey: [ 'NetConfig' ],
queryFn: ({ signal }) => fetchNetworkConfig(api, { signal }),
enabled: !!api
});
};
26 changes: 26 additions & 0 deletions src/apps/dashboard/features/users/api/useParentalRatings.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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, options?: AxiosRequestConfig) => {
if (!api) {
console.error('[useLibraryMediaFolders] no Api instance available');
return;
}

const response = await getLocalizationApi(api).getParentalRatings(options);

return response.data;
};

export const useParentalRatings = () => {
const { api } = useApi();

return useQuery({
queryKey: ['ParentalRatings'],
queryFn: ({ signal }) => fetchParentalRatings(api, { signal }),
enabled: !!api
});
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
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, options?: AxiosRequestConfig) => {
if (!api) {
console.error('[useAuthProvider] No Api instance available');
return;
}

const response = await getSessionApi(api).getPasswordResetProviders(options);

return response.data;
};

export const usePasswordResetProviders = () => {
const { api } = useApi();

return useQuery({
queryKey: [ 'PasswordResetProviders' ],
queryFn: ({ signal }) => fetchPasswordResetProviders(api, { signal }),
enabled: !!api
});
};
23 changes: 23 additions & 0 deletions src/apps/dashboard/features/users/api/useUpdateUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { UserApiUpdateUserRequest } from '@jellyfin/sdk/lib/generated-client';
import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api';
import { useMutation } from '@tanstack/react-query';
import { useApi } from 'hooks/useApi';
import { queryClient } from 'utils/query/queryClient';
import { QUERY_KEY } from './useUser';

export const useUpdateUser = () => {
const { api } = useApi();

return useMutation({
mutationFn: (params: UserApiUpdateUserRequest) => (
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
getUserApi(api!)
.updateUser(params)
),
onSuccess: (_, params) => {
void queryClient.invalidateQueries({
queryKey: [QUERY_KEY, params.userId]
});
}
});
};
23 changes: 23 additions & 0 deletions src/apps/dashboard/features/users/api/useUpdateUserPolicy.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { UserApiUpdateUserPolicyRequest } from '@jellyfin/sdk/lib/generated-client';
import { getUserApi } from '@jellyfin/sdk/lib/utils/api/user-api';
import { useMutation } from '@tanstack/react-query';
import { useApi } from 'hooks/useApi';
import { queryClient } from 'utils/query/queryClient';
import { QUERY_KEY } from './useUser';

export const useUpdateUserPolicy = () => {
const { api } = useApi();

return useMutation({
mutationFn: (params: UserApiUpdateUserPolicyRequest) => (
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
getUserApi(api!)
.updateUserPolicy(params)
),
onSuccess: (_, params) => {
void queryClient.invalidateQueries({
queryKey: [QUERY_KEY, params.userId]
});
}
});
};
34 changes: 34 additions & 0 deletions src/apps/dashboard/features/users/api/useUser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { Api } from '@jellyfin/sdk';
import { UserApiGetUserByIdRequest } from '@jellyfin/sdk/lib/generated-client';
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, options?: AxiosRequestConfig) => {
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, options);

return response.data;
};

export const useUser = (params?: UserApiGetUserByIdRequest) => {
const { api } = useApi();

return useQuery({
queryKey: [ QUERY_KEY, params?.userId ],
queryFn: ({ signal }) => fetchUser(api, params, { signal }),
enabled: !!api && !!params
});
};
Loading
Loading