add mutation for creating pack
This commit is contained in:
@@ -9,7 +9,7 @@ import {
|
|||||||
import {useAgent} from 'state/session'
|
import {useAgent} from 'state/session'
|
||||||
|
|
||||||
const RQKEY_ROOT = 'actor-starter-packs'
|
const RQKEY_ROOT = 'actor-starter-packs'
|
||||||
const RQKEY = (did?: string) => [RQKEY_ROOT, did]
|
export const RQKEY = (did?: string) => [RQKEY_ROOT, did]
|
||||||
|
|
||||||
export function useActorStarterPacksQuery({did}: {did?: string}) {
|
export function useActorStarterPacksQuery({did}: {did?: string}) {
|
||||||
const agent = useAgent()
|
const agent = useAgent()
|
||||||
|
|||||||
@@ -1,10 +1,28 @@
|
|||||||
|
import {
|
||||||
|
AppBskyActorDefs,
|
||||||
|
AppBskyFeedDefs,
|
||||||
|
AppBskyGraphDefs,
|
||||||
|
AppBskyGraphGetList,
|
||||||
|
BskyAgent,
|
||||||
|
} from '@atproto/api'
|
||||||
import {StarterPackView} from '@atproto/api/dist/client/types/app/bsky/graph/defs'
|
import {StarterPackView} from '@atproto/api/dist/client/types/app/bsky/graph/defs'
|
||||||
import {QueryClient, useQuery} from '@tanstack/react-query'
|
import {
|
||||||
|
QueryClient,
|
||||||
|
useMutation,
|
||||||
|
useQuery,
|
||||||
|
useQueryClient,
|
||||||
|
} from '@tanstack/react-query'
|
||||||
|
|
||||||
|
import {until} from 'lib/async/until'
|
||||||
|
import {createStarterPackList} from 'lib/generate-starterpack'
|
||||||
import {
|
import {
|
||||||
httpStarterPackUriToAtUri,
|
httpStarterPackUriToAtUri,
|
||||||
parseStarterPackUri,
|
parseStarterPackUri,
|
||||||
} from 'lib/strings/starter-pack'
|
} from 'lib/strings/starter-pack'
|
||||||
|
import {
|
||||||
|
invalidateActorStarterPacksQuery,
|
||||||
|
RQKEY,
|
||||||
|
} from 'state/queries/actor-starter-packs'
|
||||||
import {useAgent} from 'state/session'
|
import {useAgent} from 'state/session'
|
||||||
|
|
||||||
const RQKEY_ROOT = 'starter-pack'
|
const RQKEY_ROOT = 'starter-pack'
|
||||||
@@ -57,3 +75,76 @@ export async function invalidateStarterPack({
|
|||||||
}) {
|
}) {
|
||||||
await queryClient.invalidateQueries({queryKey: RQKEY(did, rkey)})
|
await queryClient.invalidateQueries({queryKey: RQKEY(did, rkey)})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface UseCreateStarterPackMutationParams {
|
||||||
|
name: string
|
||||||
|
description?: string
|
||||||
|
descriptionFacets: []
|
||||||
|
profiles: AppBskyActorDefs.ProfileViewBasic[]
|
||||||
|
feeds?: AppBskyFeedDefs.GeneratorView[]
|
||||||
|
}
|
||||||
|
|
||||||
|
export function useCreateStarterPackMutation({
|
||||||
|
onSuccess,
|
||||||
|
}: {
|
||||||
|
onSuccess: () => void
|
||||||
|
onError: (e: Error) => void
|
||||||
|
}) {
|
||||||
|
const queryClient = useQueryClient()
|
||||||
|
const agent = useAgent()
|
||||||
|
|
||||||
|
return useMutation<
|
||||||
|
{uri: string; cid: string},
|
||||||
|
Error,
|
||||||
|
UseCreateStarterPackMutationParams
|
||||||
|
>({
|
||||||
|
mutationFn: async params => {
|
||||||
|
let listRes
|
||||||
|
const listRes = await createStarterPackList({...params, agent})
|
||||||
|
return await agent.app.bsky.graph.starterpack.create(
|
||||||
|
{
|
||||||
|
repo: agent.session?.did,
|
||||||
|
validate: false, // TODO remove
|
||||||
|
},
|
||||||
|
{
|
||||||
|
...params,
|
||||||
|
list: listRes.uri,
|
||||||
|
createdAt: new Date().toISOString(),
|
||||||
|
},
|
||||||
|
)
|
||||||
|
},
|
||||||
|
onSuccess: async data => {
|
||||||
|
await whenAppViewReady(
|
||||||
|
agent,
|
||||||
|
data.uri,
|
||||||
|
(v?: AppBskyGraphDefs.StarterPackView) => {
|
||||||
|
return typeof v.uri === 'string'
|
||||||
|
},
|
||||||
|
)
|
||||||
|
await invalidateActorStarterPacksQuery({
|
||||||
|
queryClient,
|
||||||
|
did: agent.session?.did,
|
||||||
|
})
|
||||||
|
onSuccess()
|
||||||
|
},
|
||||||
|
onError: async error => {
|
||||||
|
onError(error)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async function whenAppViewReady(
|
||||||
|
agent: BskyAgent,
|
||||||
|
uri: string,
|
||||||
|
fn: (res?: AppBskyGraphGetList.Response) => boolean,
|
||||||
|
) {
|
||||||
|
await until(
|
||||||
|
5, // 5 tries
|
||||||
|
1e3, // 1s delay between tries
|
||||||
|
fn,
|
||||||
|
() =>
|
||||||
|
agent.app.bsky.graph.getStarterPack({
|
||||||
|
starterPack: uri,
|
||||||
|
}),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user