/** * Generated by orval v8.8.0 🍺 * Do not edit manually. * OpenAPI spec version: 0.0.0 */ import { useMutation, useQuery } from "@tanstack/react-query"; import type { DataTag, DefinedInitialDataOptions, DefinedUseQueryResult, MutationFunction, QueryClient, QueryFunction, QueryKey, UndefinedInitialDataOptions, UseMutationOptions, UseMutationResult, UseQueryOptions, UseQueryResult, } from "@tanstack/react-query"; import type { ApiSocialPostsListParams, PaginatedPostList, PatchedPost, Post, PostVote, TagAttach, } from "../models"; import { privateMutator } from "../../../privateClient"; // https://stackoverflow.com/questions/49579094/typescript-conditional-types-filter-out-readonly-properties-pick-only-requir/49579497#49579497 type IfEquals = (() => T extends X ? 1 : 2) extends () => T extends Y ? 1 : 2 ? A : B; type WritableKeys = { [P in keyof T]-?: IfEquals< { [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, P >; }[keyof T]; type UnionToIntersection = (U extends any ? (k: U) => void : never) extends ( k: infer I, ) => void ? I : never; type DistributeReadOnlyOverUnions = T extends any ? NonReadonly : never; type Writable = Pick>; type NonReadonly = [T] extends [UnionToIntersection] ? { [P in keyof Writable]: T[P] extends object ? NonReadonly> : T[P]; } : DistributeReadOnlyOverUnions; /** * Returns posts. Filter by `hub` query param to scope to a hub. * @summary List posts */ export const apiSocialPostsList = ( params?: ApiSocialPostsListParams, signal?: AbortSignal, ) => { return privateMutator({ url: `/api/social/posts/`, method: "GET", params, signal, }); }; export const getApiSocialPostsListQueryKey = ( params?: ApiSocialPostsListParams, ) => { return [`/api/social/posts/`, ...(params ? [params] : [])] as const; }; export const getApiSocialPostsListQueryOptions = < TData = Awaited>, TError = unknown, >( params?: ApiSocialPostsListParams, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > >; }, ) => { const { query: queryOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getApiSocialPostsListQueryKey(params); const queryFn: QueryFunction< Awaited> > = ({ signal }) => apiSocialPostsList(params, signal); return { queryKey, queryFn, ...queryOptions } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: DataTag }; }; export type ApiSocialPostsListQueryResult = NonNullable< Awaited> >; export type ApiSocialPostsListQueryError = unknown; export function useApiSocialPostsList< TData = Awaited>, TError = unknown, >( params: undefined | ApiSocialPostsListParams, options: { query: Partial< UseQueryOptions< Awaited>, TError, TData > > & Pick< DefinedInitialDataOptions< Awaited>, TError, Awaited> >, "initialData" >; }, queryClient?: QueryClient, ): DefinedUseQueryResult & { queryKey: DataTag; }; export function useApiSocialPostsList< TData = Awaited>, TError = unknown, >( params?: ApiSocialPostsListParams, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > > & Pick< UndefinedInitialDataOptions< Awaited>, TError, Awaited> >, "initialData" >; }, queryClient?: QueryClient, ): UseQueryResult & { queryKey: DataTag; }; export function useApiSocialPostsList< TData = Awaited>, TError = unknown, >( params?: ApiSocialPostsListParams, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > >; }, queryClient?: QueryClient, ): UseQueryResult & { queryKey: DataTag; }; /** * @summary List posts */ export function useApiSocialPostsList< TData = Awaited>, TError = unknown, >( params?: ApiSocialPostsListParams, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > >; }, queryClient?: QueryClient, ): UseQueryResult & { queryKey: DataTag; } { const queryOptions = getApiSocialPostsListQueryOptions(params, options); const query = useQuery(queryOptions, queryClient) as UseQueryResult< TData, TError > & { queryKey: DataTag }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Creates a post. The requesting user is set as the author automatically. * @summary Create a post */ export const apiSocialPostsCreate = ( post: NonReadonly, signal?: AbortSignal, ) => { return privateMutator({ url: `/api/social/posts/`, method: "POST", headers: { "Content-Type": "application/json" }, data: post, signal, }); }; export const getApiSocialPostsCreateMutationOptions = < TError = unknown, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: NonReadonly }, TContext >; }): UseMutationOptions< Awaited>, TError, { data: NonReadonly }, TContext > => { const mutationKey = ["apiSocialPostsCreate"]; const { mutation: mutationOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey } }; const mutationFn: MutationFunction< Awaited>, { data: NonReadonly } > = (props) => { const { data } = props ?? {}; return apiSocialPostsCreate(data); }; return { mutationFn, ...mutationOptions }; }; export type ApiSocialPostsCreateMutationResult = NonNullable< Awaited> >; export type ApiSocialPostsCreateMutationBody = NonReadonly; export type ApiSocialPostsCreateMutationError = unknown; /** * @summary Create a post */ export const useApiSocialPostsCreate = ( options?: { mutation?: UseMutationOptions< Awaited>, TError, { data: NonReadonly }, TContext >; }, queryClient?: QueryClient, ): UseMutationResult< Awaited>, TError, { data: NonReadonly }, TContext > => { return useMutation( getApiSocialPostsCreateMutationOptions(options), queryClient, ); }; /** * @summary Retrieve a post */ export const apiSocialPostsRetrieve = (id: number, signal?: AbortSignal) => { return privateMutator({ url: `/api/social/posts/${id}/`, method: "GET", signal, }); }; export const getApiSocialPostsRetrieveQueryKey = (id: number) => { return [`/api/social/posts/${id}/`] as const; }; export const getApiSocialPostsRetrieveQueryOptions = < TData = Awaited>, TError = unknown, >( id: number, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > >; }, ) => { const { query: queryOptions } = options ?? {}; const queryKey = queryOptions?.queryKey ?? getApiSocialPostsRetrieveQueryKey(id); const queryFn: QueryFunction< Awaited> > = ({ signal }) => apiSocialPostsRetrieve(id, signal); return { queryKey, queryFn, enabled: !!id, ...queryOptions, } as UseQueryOptions< Awaited>, TError, TData > & { queryKey: DataTag }; }; export type ApiSocialPostsRetrieveQueryResult = NonNullable< Awaited> >; export type ApiSocialPostsRetrieveQueryError = unknown; export function useApiSocialPostsRetrieve< TData = Awaited>, TError = unknown, >( id: number, options: { query: Partial< UseQueryOptions< Awaited>, TError, TData > > & Pick< DefinedInitialDataOptions< Awaited>, TError, Awaited> >, "initialData" >; }, queryClient?: QueryClient, ): DefinedUseQueryResult & { queryKey: DataTag; }; export function useApiSocialPostsRetrieve< TData = Awaited>, TError = unknown, >( id: number, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > > & Pick< UndefinedInitialDataOptions< Awaited>, TError, Awaited> >, "initialData" >; }, queryClient?: QueryClient, ): UseQueryResult & { queryKey: DataTag; }; export function useApiSocialPostsRetrieve< TData = Awaited>, TError = unknown, >( id: number, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > >; }, queryClient?: QueryClient, ): UseQueryResult & { queryKey: DataTag; }; /** * @summary Retrieve a post */ export function useApiSocialPostsRetrieve< TData = Awaited>, TError = unknown, >( id: number, options?: { query?: Partial< UseQueryOptions< Awaited>, TError, TData > >; }, queryClient?: QueryClient, ): UseQueryResult & { queryKey: DataTag; } { const queryOptions = getApiSocialPostsRetrieveQueryOptions(id, options); const query = useQuery(queryOptions, queryClient) as UseQueryResult< TData, TError > & { queryKey: DataTag }; return { ...query, queryKey: queryOptions.queryKey }; } /** * Full update. Author only. * @summary Replace a post */ export const apiSocialPostsUpdate = ( id: number, post: NonReadonly, signal?: AbortSignal, ) => { return privateMutator({ url: `/api/social/posts/${id}/`, method: "PUT", headers: { "Content-Type": "application/json" }, data: post, signal, }); }; export const getApiSocialPostsUpdateMutationOptions = < TError = unknown, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext >; }): UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext > => { const mutationKey = ["apiSocialPostsUpdate"]; const { mutation: mutationOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey } }; const mutationFn: MutationFunction< Awaited>, { id: number; data: NonReadonly } > = (props) => { const { id, data } = props ?? {}; return apiSocialPostsUpdate(id, data); }; return { mutationFn, ...mutationOptions }; }; export type ApiSocialPostsUpdateMutationResult = NonNullable< Awaited> >; export type ApiSocialPostsUpdateMutationBody = NonReadonly; export type ApiSocialPostsUpdateMutationError = unknown; /** * @summary Replace a post */ export const useApiSocialPostsUpdate = ( options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext >; }, queryClient?: QueryClient, ): UseMutationResult< Awaited>, TError, { id: number; data: NonReadonly }, TContext > => { return useMutation( getApiSocialPostsUpdateMutationOptions(options), queryClient, ); }; /** * Partial update. Author only. * @summary Update a post */ export const apiSocialPostsPartialUpdate = ( id: number, patchedPost: NonReadonly, signal?: AbortSignal, ) => { return privateMutator({ url: `/api/social/posts/${id}/`, method: "PATCH", headers: { "Content-Type": "application/json" }, data: patchedPost, signal, }); }; export const getApiSocialPostsPartialUpdateMutationOptions = < TError = unknown, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext >; }): UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext > => { const mutationKey = ["apiSocialPostsPartialUpdate"]; const { mutation: mutationOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey } }; const mutationFn: MutationFunction< Awaited>, { id: number; data: NonReadonly } > = (props) => { const { id, data } = props ?? {}; return apiSocialPostsPartialUpdate(id, data); }; return { mutationFn, ...mutationOptions }; }; export type ApiSocialPostsPartialUpdateMutationResult = NonNullable< Awaited> >; export type ApiSocialPostsPartialUpdateMutationBody = NonReadonly; export type ApiSocialPostsPartialUpdateMutationError = unknown; /** * @summary Update a post */ export const useApiSocialPostsPartialUpdate = < TError = unknown, TContext = unknown, >( options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext >; }, queryClient?: QueryClient, ): UseMutationResult< Awaited>, TError, { id: number; data: NonReadonly }, TContext > => { return useMutation( getApiSocialPostsPartialUpdateMutationOptions(options), queryClient, ); }; /** * Soft-deletes the post. Author, superuser, hub owner, or hub moderator with `managing_posts`. * @summary Delete a post */ export const apiSocialPostsDestroy = (id: number, signal?: AbortSignal) => { return privateMutator({ url: `/api/social/posts/${id}/`, method: "DELETE", signal, }); }; export const getApiSocialPostsDestroyMutationOptions = < TError = unknown, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; }): UseMutationOptions< Awaited>, TError, { id: number }, TContext > => { const mutationKey = ["apiSocialPostsDestroy"]; const { mutation: mutationOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey } }; const mutationFn: MutationFunction< Awaited>, { id: number } > = (props) => { const { id } = props ?? {}; return apiSocialPostsDestroy(id); }; return { mutationFn, ...mutationOptions }; }; export type ApiSocialPostsDestroyMutationResult = NonNullable< Awaited> >; export type ApiSocialPostsDestroyMutationError = unknown; /** * @summary Delete a post */ export const useApiSocialPostsDestroy = ( options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number }, TContext >; }, queryClient?: QueryClient, ): UseMutationResult< Awaited>, TError, { id: number }, TContext > => { return useMutation( getApiSocialPostsDestroyMutationOptions(options), queryClient, ); }; /** * Attaches an existing hub tag to the post. The tag must belong to the same hub as the post. Any authenticated hub member can attach tags. * @summary Attach a tag to a post */ export const apiSocialPostsTagsAttachCreate = ( id: number, tagAttach: TagAttach, signal?: AbortSignal, ) => { return privateMutator({ url: `/api/social/posts/${id}/tags/attach/`, method: "POST", headers: { "Content-Type": "application/json" }, data: tagAttach, signal, }); }; export const getApiSocialPostsTagsAttachCreateMutationOptions = < TError = unknown, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: TagAttach }, TContext >; }): UseMutationOptions< Awaited>, TError, { id: number; data: TagAttach }, TContext > => { const mutationKey = ["apiSocialPostsTagsAttachCreate"]; const { mutation: mutationOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey } }; const mutationFn: MutationFunction< Awaited>, { id: number; data: TagAttach } > = (props) => { const { id, data } = props ?? {}; return apiSocialPostsTagsAttachCreate(id, data); }; return { mutationFn, ...mutationOptions }; }; export type ApiSocialPostsTagsAttachCreateMutationResult = NonNullable< Awaited> >; export type ApiSocialPostsTagsAttachCreateMutationBody = TagAttach; export type ApiSocialPostsTagsAttachCreateMutationError = unknown; /** * @summary Attach a tag to a post */ export const useApiSocialPostsTagsAttachCreate = < TError = unknown, TContext = unknown, >( options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: TagAttach }, TContext >; }, queryClient?: QueryClient, ): UseMutationResult< Awaited>, TError, { id: number; data: TagAttach }, TContext > => { return useMutation( getApiSocialPostsTagsAttachCreateMutationOptions(options), queryClient, ); }; /** * Removes a tag from the post. Post author, hub owner, site admin, or moderator with `managing_posts` can detach. * @summary Detach a tag from a post */ export const apiSocialPostsTagsDetachCreate = ( id: number, tagAttach: TagAttach, signal?: AbortSignal, ) => { return privateMutator({ url: `/api/social/posts/${id}/tags/detach/`, method: "POST", headers: { "Content-Type": "application/json" }, data: tagAttach, signal, }); }; export const getApiSocialPostsTagsDetachCreateMutationOptions = < TError = unknown, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: TagAttach }, TContext >; }): UseMutationOptions< Awaited>, TError, { id: number; data: TagAttach }, TContext > => { const mutationKey = ["apiSocialPostsTagsDetachCreate"]; const { mutation: mutationOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey } }; const mutationFn: MutationFunction< Awaited>, { id: number; data: TagAttach } > = (props) => { const { id, data } = props ?? {}; return apiSocialPostsTagsDetachCreate(id, data); }; return { mutationFn, ...mutationOptions }; }; export type ApiSocialPostsTagsDetachCreateMutationResult = NonNullable< Awaited> >; export type ApiSocialPostsTagsDetachCreateMutationBody = TagAttach; export type ApiSocialPostsTagsDetachCreateMutationError = unknown; /** * @summary Detach a tag from a post */ export const useApiSocialPostsTagsDetachCreate = < TError = unknown, TContext = unknown, >( options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: TagAttach }, TContext >; }, queryClient?: QueryClient, ): UseMutationResult< Awaited>, TError, { id: number; data: TagAttach }, TContext > => { return useMutation( getApiSocialPostsTagsDetachCreateMutationOptions(options), queryClient, ); }; /** * Cast or update a vote (`1` = upvote, `-1` = downvote) on a post. * @summary Vote on a post */ export const apiSocialPostsVoteCreate = ( id: number, postVote: NonReadonly, signal?: AbortSignal, ) => { return privateMutator({ url: `/api/social/posts/${id}/vote/`, method: "POST", headers: { "Content-Type": "application/json" }, data: postVote, signal, }); }; export const getApiSocialPostsVoteCreateMutationOptions = < TError = unknown, TContext = unknown, >(options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext >; }): UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext > => { const mutationKey = ["apiSocialPostsVoteCreate"]; const { mutation: mutationOptions } = options ? options.mutation && "mutationKey" in options.mutation && options.mutation.mutationKey ? options : { ...options, mutation: { ...options.mutation, mutationKey } } : { mutation: { mutationKey } }; const mutationFn: MutationFunction< Awaited>, { id: number; data: NonReadonly } > = (props) => { const { id, data } = props ?? {}; return apiSocialPostsVoteCreate(id, data); }; return { mutationFn, ...mutationOptions }; }; export type ApiSocialPostsVoteCreateMutationResult = NonNullable< Awaited> >; export type ApiSocialPostsVoteCreateMutationBody = NonReadonly; export type ApiSocialPostsVoteCreateMutationError = unknown; /** * @summary Vote on a post */ export const useApiSocialPostsVoteCreate = < TError = unknown, TContext = unknown, >( options?: { mutation?: UseMutationOptions< Awaited>, TError, { id: number; data: NonReadonly }, TContext >; }, queryClient?: QueryClient, ): UseMutationResult< Awaited>, TError, { id: number; data: NonReadonly }, TContext > => { return useMutation( getApiSocialPostsVoteCreateMutationOptions(options), queryClient, ); };