MediaUploadServiceProvider.tsx raw

   1  import storage, { dispatchSettingsChanged } from '@/services/local-storage.service'
   2  import mediaUpload from '@/services/media-upload.service'
   3  import { TMediaUploadServiceConfig } from '@/types'
   4  import { createContext, useContext, useEffect, useState } from 'react'
   5  import { useNostr } from './NostrProvider'
   6  
   7  type TMediaUploadServiceContext = {
   8    serviceConfig: TMediaUploadServiceConfig
   9    updateServiceConfig: (service: TMediaUploadServiceConfig) => void
  10  }
  11  
  12  const MediaUploadServiceContext = createContext<TMediaUploadServiceContext | undefined>(undefined)
  13  
  14  export const useMediaUploadService = () => {
  15    const context = useContext(MediaUploadServiceContext)
  16    if (!context) {
  17      throw new Error('useMediaUploadService must be used within MediaUploadServiceProvider')
  18    }
  19    return context
  20  }
  21  
  22  export function MediaUploadServiceProvider({ children }: { children: React.ReactNode }) {
  23    const { pubkey, isInitialized, startLogin } = useNostr()
  24    // Initialize with pubkey-specific config if pubkey is available
  25    const [serviceConfig, setServiceConfig] = useState(() =>
  26      storage.getMediaUploadServiceConfig(pubkey ?? undefined)
  27    )
  28  
  29    // Re-load config when pubkey changes or when NostrProvider finishes initialization
  30    useEffect(() => {
  31      const config = storage.getMediaUploadServiceConfig(pubkey ?? undefined)
  32      setServiceConfig(config)
  33      mediaUpload.setServiceConfig(config)
  34    }, [pubkey, isInitialized])
  35  
  36    const updateServiceConfig = (newService: TMediaUploadServiceConfig) => {
  37      if (!pubkey) {
  38        startLogin()
  39        return
  40      }
  41      setServiceConfig(newService)
  42      storage.setMediaUploadServiceConfig(pubkey, newService)
  43      mediaUpload.setServiceConfig(newService)
  44      dispatchSettingsChanged()
  45    }
  46  
  47    return (
  48      <MediaUploadServiceContext.Provider value={{ serviceConfig, updateServiceConfig }}>
  49        {children}
  50      </MediaUploadServiceContext.Provider>
  51    )
  52  }
  53