import { connectStorageEmulator, getStorage, type FirebaseStorage, } from 'firebase/storage'; import { createContext, useContext, type ReactNode } from 'react'; import { useFirebaseApp } from './FirebaseAppProvider'; type StoreContextValue = { storage: FirebaseStorage; }; type FirebaseStorageProviderProps = { children: ReactNode; bucketUrl?: string; }; const FirebaseStorageContext = createContext(null); export const FirebaseStorageProvider = ( props: FirebaseStorageProviderProps, ) => { const app = useFirebaseApp(); const sdk = getStorage(app, props.bucketUrl); if (app && import.meta.env.DEV) { console.log('Connecting to Firebase Storage emulator'); connectStorageEmulator(sdk, 'localhost', 9199); } if (!app) { throw new Error( 'You cannot use the FirebaseStorageProvider outside of a ', ); } return ( ); }; export const useFirebaseStorage = () => { const value = useContext(FirebaseStorageContext); if (value === null) { throw new Error( 'useFirebaseStorage must be used within a FirebaseStorageProvider', ); } return value; };