You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

47 lines
1.6 KiB

import storage from '@/services/local-storage.service'
import mediaUpload from '@/services/media-upload.service'
import { TMediaUploadServiceConfig } from '@/types'
import { createContext, useContext, useEffect, useState } from 'react'
import { useNostr } from './NostrProvider'
type TMediaUploadServiceContext = {
serviceConfig: TMediaUploadServiceConfig
updateServiceConfig: (service: TMediaUploadServiceConfig) => void
}
const MediaUploadServiceContext = createContext<TMediaUploadServiceContext | undefined>(undefined)
export const useMediaUploadService = () => {
const context = useContext(MediaUploadServiceContext)
if (!context) {
throw new Error('useMediaUploadService must be used within MediaUploadServiceProvider')
}
return context
}
export function MediaUploadServiceProvider({ children }: { children: React.ReactNode }) {
const { pubkey, startLogin } = useNostr()
const [serviceConfig, setServiceConfig] = useState(storage.getMediaUploadServiceConfig())
useEffect(() => {
const serviceConfig = storage.getMediaUploadServiceConfig(pubkey)
setServiceConfig(serviceConfig)
mediaUpload.setServiceConfig(serviceConfig)
}, [pubkey])
const updateServiceConfig = (newService: TMediaUploadServiceConfig) => {
if (!pubkey) {
startLogin()
return
}
setServiceConfig(newService)
storage.setMediaUploadServiceConfig(pubkey, newService)
mediaUpload.setServiceConfig(newService)
}
return (
<MediaUploadServiceContext.Provider value={{ serviceConfig, updateServiceConfig }}>
{children}
</MediaUploadServiceContext.Provider>
)
}