Implement reordering with optimistic updates
This commit is contained in:
@ -12,5 +12,8 @@ export * from './playlistReadDTO';
|
||||
export * from './playlistReadResponse';
|
||||
export * from './playlistTrackResponse';
|
||||
export * from './readParams';
|
||||
export * from './trackBulkReorderRequest';
|
||||
export * from './trackReoderAfterRequest';
|
||||
export * from './trackReorderAfterRequest';
|
||||
export * from './trackResponse';
|
||||
export * from './uploadBody';
|
||||
10
app/composeables/api/models/trackBulkReorderRequest.ts
Normal file
10
app/composeables/api/models/trackBulkReorderRequest.ts
Normal file
@ -0,0 +1,10 @@
|
||||
/**
|
||||
* Generated by orval v7.16.0 🍺
|
||||
* Do not edit manually.
|
||||
* OpenAPI definition
|
||||
* OpenAPI spec version: v0
|
||||
*/
|
||||
|
||||
export interface TrackBulkReorderRequest {
|
||||
trackIds?: number[];
|
||||
}
|
||||
11
app/composeables/api/models/trackReorderAfterRequest.ts
Normal file
11
app/composeables/api/models/trackReorderAfterRequest.ts
Normal file
@ -0,0 +1,11 @@
|
||||
/**
|
||||
* Generated by orval v7.16.0 🍺
|
||||
* Do not edit manually.
|
||||
* OpenAPI definition
|
||||
* OpenAPI spec version: v0
|
||||
*/
|
||||
|
||||
export interface TrackReorderAfterRequest {
|
||||
moveTrackId?: number;
|
||||
targetTrackId?: number;
|
||||
}
|
||||
@ -31,6 +31,7 @@ import type {
|
||||
import type {
|
||||
AddLocalTrackRequest,
|
||||
PlaylistTrackResponse,
|
||||
TrackBulkReorderRequest,
|
||||
TrackResponse
|
||||
} from '.././models';
|
||||
|
||||
@ -103,6 +104,66 @@ const {mutation: mutationOptions, request: requestOptions} = options ?
|
||||
|
||||
return useMutation(mutationOptions, queryClient);
|
||||
}
|
||||
export const bulkReorder = (
|
||||
playlistId: MaybeRef<number>,
|
||||
trackBulkReorderRequest: MaybeRef<TrackBulkReorderRequest>,
|
||||
options?: SecondParameter<typeof axiosInstance>,signal?: AbortSignal
|
||||
) => {
|
||||
playlistId = unref(playlistId);
|
||||
trackBulkReorderRequest = unref(trackBulkReorderRequest);
|
||||
|
||||
return axiosInstance<void>(
|
||||
{url: `/playlist/${playlistId}/bulk-reorder`, method: 'POST',
|
||||
headers: {'Content-Type': 'application/json', },
|
||||
data: trackBulkReorderRequest, signal
|
||||
},
|
||||
options);
|
||||
}
|
||||
|
||||
|
||||
|
||||
export const getBulkReorderMutationOptions = <TError = unknown,
|
||||
TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof bulkReorder>>, TError,{playlistId: number;data: TrackBulkReorderRequest}, TContext>, request?: SecondParameter<typeof axiosInstance>}
|
||||
): UseMutationOptions<Awaited<ReturnType<typeof bulkReorder>>, TError,{playlistId: number;data: TrackBulkReorderRequest}, TContext> => {
|
||||
|
||||
const mutationKey = ['bulkReorder'];
|
||||
const {mutation: mutationOptions, request: requestOptions} = options ?
|
||||
options.mutation && 'mutationKey' in options.mutation && options.mutation.mutationKey ?
|
||||
options
|
||||
: {...options, mutation: {...options.mutation, mutationKey}}
|
||||
: {mutation: { mutationKey, }, request: undefined};
|
||||
|
||||
|
||||
|
||||
|
||||
const mutationFn: MutationFunction<Awaited<ReturnType<typeof bulkReorder>>, {playlistId: number;data: TrackBulkReorderRequest}> = (props) => {
|
||||
const {playlistId,data} = props ?? {};
|
||||
|
||||
return bulkReorder(playlistId,data,requestOptions)
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
return { mutationFn, ...mutationOptions }}
|
||||
|
||||
export type BulkReorderMutationResult = NonNullable<Awaited<ReturnType<typeof bulkReorder>>>
|
||||
export type BulkReorderMutationBody = TrackBulkReorderRequest
|
||||
export type BulkReorderMutationError = unknown
|
||||
|
||||
export const useBulkReorder = <TError = unknown,
|
||||
TContext = unknown>(options?: { mutation?:UseMutationOptions<Awaited<ReturnType<typeof bulkReorder>>, TError,{playlistId: number;data: TrackBulkReorderRequest}, TContext>, request?: SecondParameter<typeof axiosInstance>}
|
||||
, queryClient?: QueryClient): UseMutationReturnType<
|
||||
Awaited<ReturnType<typeof bulkReorder>>,
|
||||
TError,
|
||||
{playlistId: number;data: TrackBulkReorderRequest},
|
||||
TContext
|
||||
> => {
|
||||
|
||||
const mutationOptions = getBulkReorderMutationOptions(options);
|
||||
|
||||
return useMutation(mutationOptions, queryClient);
|
||||
}
|
||||
export const getPlaylistTracks = (
|
||||
playlistId: MaybeRef<number>,
|
||||
options?: SecondParameter<typeof axiosInstance>,signal?: AbortSignal
|
||||
|
||||
Reference in New Issue
Block a user