1
0
mirror of https://github.com/tooot-app/app synced 2025-06-05 22:19:13 +02:00

Actions working for #638

This commit is contained in:
xmflsct
2023-01-01 17:20:35 +01:00
parent ced71d6611
commit 56d1090ca9
5 changed files with 45 additions and 24 deletions

View File

@ -46,4 +46,19 @@ const useSearchQuery = <T = SearchResult>({
return useQuery(queryKey, queryFunction, options)
}
export const searchFetchToot = (uri: Mastodon.Status['uri']): Promise<Mastodon.Status | void> =>
apiInstance<SearchResult>({
version: 'v2',
method: 'get',
url: 'search',
params: {
q: uri,
type: 'statuses',
limit: 1,
resolve: true
}
})
.then(res => res.body.statuses[0])
.catch(() => {})
export { useSearchQuery }

View File

@ -4,9 +4,7 @@ import {
QueryFunctionContext,
useInfiniteQuery,
UseInfiniteQueryOptions,
useMutation,
useQuery,
UseQueryOptions
useMutation
} from '@tanstack/react-query'
import { PagedResponse } from '@utils/api/helpers'
import apiInstance from '@utils/api/instance'
@ -15,6 +13,7 @@ import queryClient from '@utils/queryHooks'
import { getAccountStorage } from '@utils/storage/actions'
import { AxiosError } from 'axios'
import { uniqBy } from 'lodash'
import { searchFetchToot } from './search'
import deleteItem from './timeline/deleteItem'
import editItem from './timeline/editItem'
import updateStatusProperty from './timeline/updateStatusProperty'
@ -251,6 +250,7 @@ export type MutationVarsTimelineUpdateStatusProperty = {
rootQueryKey?: QueryKeyTimeline
id: Mastodon.Status['id'] | Mastodon.Poll['id']
isReblog?: boolean
fetchRemoteURI?: Mastodon.Status['uri']
payload:
| {
property: 'bookmarked' | 'muted' | 'pinned'
@ -344,13 +344,22 @@ const mutationFunction = async (params: MutationVarsTimeline) => {
...(params.payload.type === 'vote' && { body: formData })
})
default:
let tootId = params.id
if (params.fetchRemoteURI) {
const fetched = await searchFetchToot(params.fetchRemoteURI)
if (fetched) {
tootId = fetched.id
} else {
return Promise.reject()
}
}
const body = new FormData()
if (params.payload.property === 'reblogged') {
body.append('visibility', params.payload.visibility)
}
return apiInstance<Mastodon.Status>({
method: 'post',
url: `statuses/${params.id}/${params.payload.currentValue ? 'un' : ''}${
url: `statuses/${tootId}/${params.payload.currentValue ? 'un' : ''}${
MapPropertyToUrl[params.payload.property]
}`,
...(params.payload.property === 'reblogged' && { body })