|
| 1 | +import { initializeApp, type FirebaseApp } from 'firebase/app' |
| 2 | +import { Firestore, getFirestore } from 'firebase/firestore' |
| 3 | +import { inject, type App, type InjectionKey } from 'vue' |
| 4 | + |
| 5 | +export function createFirebaseApp() { |
| 6 | + const firebaseApp = initializeApp({ |
| 7 | + apiKey: 'AIzaSyAkUKe36TPWL2eZTshgk-Xl4bY_R5SB97U', |
| 8 | + authDomain: 'vue-fire-store.firebaseapp.com', |
| 9 | + databaseURL: 'https://vue-fire-store.firebaseio.com', |
| 10 | + projectId: 'vue-fire-store', |
| 11 | + storageBucket: 'vue-fire-store.appspot.com', |
| 12 | + messagingSenderId: '998674887640', |
| 13 | + appId: '1:998674887640:web:1e2bb2cc3e5eb2fc3478ad', |
| 14 | + measurementId: 'G-RL4BTWXKJ7', |
| 15 | + }) |
| 16 | + |
| 17 | + const firestore = getFirestore(firebaseApp) |
| 18 | + |
| 19 | + return { firebaseApp, firestore } |
| 20 | +} |
| 21 | + |
| 22 | +export function VueFirePlugin({ |
| 23 | + firebaseApp, |
| 24 | + firestore, |
| 25 | +}: { |
| 26 | + firebaseApp: FirebaseApp |
| 27 | + firestore: Firestore |
| 28 | +}) { |
| 29 | + return (app: App) => { |
| 30 | + app.provide(FirestoreInjectKey, firestore) |
| 31 | + app.provide(FirebaseAppInjectKey, firebaseApp) |
| 32 | + } |
| 33 | +} |
| 34 | + |
| 35 | +export const FirestoreInjectKey: InjectionKey<Firestore> = Symbol('firestore') |
| 36 | +export const FirebaseAppInjectKey: InjectionKey<FirebaseApp> = |
| 37 | + Symbol('firebaseApp') |
| 38 | + |
| 39 | +export function useFirestore() { |
| 40 | + // TODO: warning with no currentInstance |
| 41 | + return inject(FirestoreInjectKey)! |
| 42 | +} |
| 43 | + |
| 44 | +export function useFirebaseApp() { |
| 45 | + return inject(FirebaseAppInjectKey)! |
| 46 | +} |
0 commit comments