-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirebase.js
More file actions
140 lines (122 loc) · 4.61 KB
/
Copy pathfirebase.js
File metadata and controls
140 lines (122 loc) · 4.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
// ========================================
// Firebase Configuration and Initialization
// ========================================
let firebaseApp = null;
let auth = null;
let db = null;
let currentUser = null;
// Wait for Firebase modules to load
window.addEventListener('load', async () => {
try {
// Give time for Firebase SDK to load
await new Promise(resolve => setTimeout(resolve, 100));
// Check if Firebase is already configured
if (typeof getFirebaseConfig === 'function') {
const firebaseConfig = getFirebaseConfig();
if (firebaseConfig) {
try {
await initializeFirebase(firebaseConfig);
} catch (error) {
console.error('Firebase initialization error:', error);
}
}
}
} catch (error) {
console.error('Error in Firebase load event:', error);
}
});
// ========================================
// Configuration Management
// ========================================
function getFirebaseConfig() {
const config = localStorage.getItem('firebaseConfig');
return config ? JSON.parse(config) : null;
}
function saveFirebaseConfig(config) {
localStorage.setItem('firebaseConfig', JSON.stringify(config));
}
function clearFirebaseConfig() {
localStorage.removeItem('firebaseConfig');
}
// ========================================
// Firebase Initialization
// ========================================
async function initializeFirebase(config) {
try {
// Use globally available Firebase objects (loaded from CDN)
if (typeof firebase !== 'undefined' && firebase.initializeApp) {
// Initialize Firebase
firebaseApp = firebase.initializeApp(config);
auth = firebase.auth();
db = firebase.firestore();
// Set persistence
await auth.setPersistence(firebase.auth.Auth.Persistence.LOCAL);
// Enable offline persistence
try {
db.enablePersistence()
.then(() => console.log('Offline persistence enabled'))
.catch((err) => {
if (err.code === 'failed-precondition') {
console.warn('Multiple tabs open, persistence can only be enabled in one tab at a time.');
} else if (err.code === 'unimplemented') {
console.warn('The current browser does not support offline persistence');
}
});
} catch (err) {
console.warn('Persistence setup error:', err);
}
// Set up auth state listener
auth.onAuthStateChanged(handleAuthStateChange);
updateSyncIndicator('synced');
showToast('Connected to Firebase', 'success');
return true;
} else {
console.error('Firebase SDK not available');
updateSyncIndicator('error');
showToast('Firebase SDK not loaded', 'error');
return false;
}
} catch (error) {
console.error('Firebase initialization error:', error);
updateSyncIndicator('error');
showToast('Firebase connection failed: ' + error.message, 'error');
return false;
}
}
// ========================================
// Auth State Handler
// ========================================
function handleAuthStateChange(user) {
currentUser = user;
if (user) {
// User is signed in
console.log('User signed in:', user.email);
// Load user decks
if (typeof loadUserDecks === 'function') {
loadUserDecks();
}
} else {
// User is signed out
console.log('User signed out');
// Show welcome screen or continue as guest
const hasSeenWelcome = localStorage.getItem('hasSeenWelcome');
if (!hasSeenWelcome) {
if (typeof showWelcomeScreen === 'function') {
showWelcomeScreen();
}
} else {
if (typeof continueAsGuest === 'function') {
continueAsGuest();
}
}
}
}
// ========================================
// Export Functions
// ========================================
window.getFirebaseConfig = getFirebaseConfig;
window.saveFirebaseConfig = saveFirebaseConfig;
window.clearFirebaseConfig = clearFirebaseConfig;
window.initializeFirebase = initializeFirebase;
window.handleAuthStateChange = handleAuthStateChange;
window.getCurrentUser = () => currentUser;