Allow managing web subscriptions from native

This commit is contained in:
Eric Bailey
2024-12-09 10:18:35 -06:00
parent ccc9745639
commit f4f9c9644a
4 changed files with 56 additions and 41 deletions
@@ -2,15 +2,23 @@ import {Linking} from 'react-native'
import Purchases from 'react-native-purchases'
import {useMutation} from '@tanstack/react-query'
export function useManageSubscription() {
import {useManageSubscription as useManageWebSubscription} from '#/state/purchases/hooks/useManageSubscription/web'
import {PlatformId} from '#/state/purchases/types'
export function useManageSubscription({platform}: {platform: PlatformId}) {
const web = useManageWebSubscription({platform})
return useMutation({
async mutationFn() {
const customer = await Purchases.getCustomerInfo()
if (customer.managementURL) {
Linking.openURL(customer.managementURL)
if (platform === PlatformId.Web) {
await web.mutateAsync()
} else {
// TODO
const customer = await Purchases.getCustomerInfo()
if (customer.managementURL) {
Linking.openURL(customer.managementURL)
} else {
// TODO
}
}
},
})
@@ -1,32 +1 @@
import {Linking} from 'react-native'
import {useMutation} from '@tanstack/react-query'
import {api} from '#/state/purchases/api'
import {useSession} from '#/state/session'
import {IS_DEV} from '#/env'
export function useManageSubscription() {
const {currentAccount} = useSession()
return useMutation({
async mutationFn() {
const {data, error} = await api<{
managementUrl: string
}>('/account/create-management-url', {
method: 'POST',
json: {
did: currentAccount!.did,
redirecturl: IS_DEV
? 'http://localhost:19006/subscriptions'
: 'https://bsky.app/subscriptions',
},
}).json()
if (error || !data) {
throw new Error('Failed to fetch subscriptions state')
}
Linking.openURL(data.managementUrl)
},
})
}
export * from './web'
@@ -0,0 +1,35 @@
import {Linking} from 'react-native'
import {useMutation} from '@tanstack/react-query'
import {api} from '#/state/purchases/api'
import {PlatformId} from '#/state/purchases/types'
import {useSession} from '#/state/session'
import {IS_DEV} from '#/env'
export function useManageSubscription(_props: {platform: PlatformId}) {
const {currentAccount} = useSession()
return useMutation({
async mutationFn() {
const {data, error} = await api<{
managementUrl: string
}>('/account/create-management-url', {
method: 'POST',
json: {
did: currentAccount!.did,
redirecturl: IS_DEV
? 'http://localhost:19006/subscriptions'
: 'https://bsky.app/subscriptions',
},
}).json()
console.log(error, data)
if (error || !data) {
throw new Error('Failed to fetch subscriptions state')
}
Linking.openURL(data.managementUrl)
},
})
}