Implement comprehensive report system with detailed viewing and AI enhancements
- Add detailed report viewing with full-screen ReportDetail component for both company and employee reports - Fix company wiki to display onboarding Q&A in card format matching Figma designs - Exclude company owners from employee submission counts (owners contribute to wiki, not employee data) - Fix employee report generation to include company context (wiki + company report + employee answers) - Fix company report generation to use filtered employee submissions only - Add proper error handling for submission data format variations - Update Firebase functions to use gpt-4o model instead of deprecated gpt-4.1 - Fix UI syntax errors and improve report display functionality - Add comprehensive logging for debugging report generation flow 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -24,25 +24,55 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
||||
|
||||
useEffect(() => {
|
||||
console.log('AuthContext initializing, isFirebaseConfigured:', isFirebaseConfigured);
|
||||
if (!isFirebaseConfigured) {
|
||||
// Demo mode: check for persisted session
|
||||
console.log('Demo mode: checking for persisted session');
|
||||
const sessionUser = sessionStorage.getItem('auditly_demo_session');
|
||||
|
||||
if (isFirebaseConfigured) {
|
||||
// Firebase mode: Set up proper Firebase auth state listener
|
||||
const unsubscribe = onAuthStateChanged(auth, (firebaseUser) => {
|
||||
console.log('Firebase auth state changed:', firebaseUser?.email);
|
||||
if (firebaseUser) {
|
||||
setUser(firebaseUser);
|
||||
} else {
|
||||
// Check for OTP session as fallback
|
||||
const sessionUser = localStorage.getItem('auditly_demo_session');
|
||||
if (sessionUser) {
|
||||
try {
|
||||
const parsedUser = JSON.parse(sessionUser);
|
||||
console.log('Restoring OTP session for:', parsedUser.email);
|
||||
setUser(parsedUser as User);
|
||||
} catch (error) {
|
||||
console.error('Failed to parse session user:', error);
|
||||
localStorage.removeItem('auditly_demo_session');
|
||||
setUser(null);
|
||||
}
|
||||
} else {
|
||||
setUser(null);
|
||||
}
|
||||
}
|
||||
setLoading(false);
|
||||
});
|
||||
|
||||
return unsubscribe;
|
||||
} else {
|
||||
// Demo/OTP mode: Check localStorage for persisted session
|
||||
console.log('Checking for persisted OTP session');
|
||||
const sessionUser = localStorage.getItem('auditly_demo_session');
|
||||
if (sessionUser) {
|
||||
const parsedUser = JSON.parse(sessionUser);
|
||||
console.log('Restoring demo session for:', parsedUser.email);
|
||||
setUser(parsedUser as User);
|
||||
try {
|
||||
const parsedUser = JSON.parse(sessionUser);
|
||||
console.log('Restoring session for:', parsedUser.email);
|
||||
setUser(parsedUser as User);
|
||||
} catch (error) {
|
||||
console.error('Failed to parse session user:', error);
|
||||
localStorage.removeItem('auditly_demo_session');
|
||||
setUser(null);
|
||||
}
|
||||
} else {
|
||||
setUser(null);
|
||||
}
|
||||
setLoading(false);
|
||||
|
||||
return () => { };
|
||||
}
|
||||
console.log('Setting up Firebase auth listener');
|
||||
const unsub = onAuthStateChanged(auth, (u) => {
|
||||
console.log('Auth state changed:', u);
|
||||
setUser(u);
|
||||
setLoading(false);
|
||||
});
|
||||
return () => unsub();
|
||||
}, []);
|
||||
|
||||
const signInWithGoogle = async () => {
|
||||
@@ -54,13 +84,24 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
||||
};
|
||||
|
||||
const signOutUser = async () => {
|
||||
if (!isFirebaseConfigured) {
|
||||
// Clear demo session
|
||||
sessionStorage.removeItem('auditly_demo_session');
|
||||
setUser(null);
|
||||
return;
|
||||
try {
|
||||
// Sign out from Firebase if configured and user is signed in via Firebase
|
||||
if (isFirebaseConfigured && auth.currentUser) {
|
||||
await signOut(auth);
|
||||
console.log('Firebase signout completed');
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('Firebase signout error:', error);
|
||||
}
|
||||
await signOut(auth);
|
||||
|
||||
// Always clear all local session data
|
||||
localStorage.removeItem('auditly_demo_session');
|
||||
localStorage.removeItem('auditly_auth_token');
|
||||
localStorage.removeItem('auditly_selected_org');
|
||||
sessionStorage.clear();
|
||||
|
||||
setUser(null);
|
||||
console.log('User signed out and all sessions cleared');
|
||||
};
|
||||
|
||||
const signInWithEmail = async (email: string, password: string) => {
|
||||
@@ -79,7 +120,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
||||
} as unknown as User;
|
||||
|
||||
setUser(mockUser);
|
||||
sessionStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
localStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
console.log('Demo login successful for:', email);
|
||||
} else {
|
||||
throw new Error('Invalid password');
|
||||
@@ -132,7 +173,7 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
||||
} as unknown as User;
|
||||
|
||||
setUser(mockUser);
|
||||
sessionStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
localStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
console.log('Demo signup successful for:', email);
|
||||
return;
|
||||
}
|
||||
@@ -191,8 +232,8 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
||||
} as unknown as User;
|
||||
|
||||
setUser(mockUser);
|
||||
sessionStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
sessionStorage.setItem('auditly_auth_token', data.token);
|
||||
localStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
localStorage.setItem('auditly_auth_token', data.token);
|
||||
|
||||
return data;
|
||||
};
|
||||
@@ -206,8 +247,8 @@ export const AuthProvider: React.FC<{ children: React.ReactNode }> = ({ children
|
||||
} as unknown as User;
|
||||
|
||||
setUser(mockUser);
|
||||
sessionStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
sessionStorage.setItem('auditly_auth_token', token);
|
||||
localStorage.setItem('auditly_demo_session', JSON.stringify(mockUser));
|
||||
localStorage.setItem('auditly_auth_token', token);
|
||||
};
|
||||
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user