feat: Integrate Data Connect and Implement Staff List View Directory

This commit is contained in:
dhinesh-m24
2026-01-31 16:54:59 +05:30
parent 48bb1c457c
commit cb25b33d04
255 changed files with 21425 additions and 109 deletions

View File

@@ -125,7 +125,7 @@ const Login: React.FC = () => {
// Dispatch Redux action to handle login
dispatch(loginUser({ email, password }));
};
console.log(user);
return (
<div className="flex min-h-screen bg-slate-50/50">
{/* Left Side: Hero Image (Hidden on Mobile) */}
@@ -280,32 +280,6 @@ const Login: React.FC = () => {
)}
</Button>
</form>
{/* Helper for MVP Testing / Demo purposes */}
<div className="mt-8 p-6 bg-slate-50/80 rounded-2xl border border-slate-100 backdrop-blur-sm">
<p className="text-[11px] font-bold text-muted-text uppercase tracking-widest mb-4">
Quick Login (Development)
</p>
<div className="flex flex-wrap gap-2">
{[
{ label: "Admin", email: "admin@krow.com" },
{ label: "Client", email: "client@krow.com" },
{ label: "Vendor", email: "vendor@krow.com" },
].map((cred) => (
<button
key={cred.label}
type="button"
onClick={() => {
setEmail(cred.email);
setPassword("password");
}}
className="px-4 py-2 bg-white border border-slate-200 text-[11px] font-bold rounded-xl hover:border-primary hover:text-primary transition-all"
>
{cred.label}
</button>
))}
</div>
</div>
</div>
</div>
</div>

View File

@@ -9,7 +9,7 @@ export interface AuthUser {
email: string | null;
displayName: string | null;
photoURL: string | null;
userRole?: "admin" | "client" | "vendor";
userRole?: "admin" | "client" | "vendor" | "ADMIN" | "CLIENT" | "VENDOR";
}
interface AuthState {
@@ -43,24 +43,26 @@ export const loginUser = createAsyncThunk(
const firebaseUser = result.user as User;
// Fetch user role from Firestore
let userRole: "admin" | "client" | "vendor" = "client";
// Fetch user role from backend (DataConnect) or fallback (Firestore)
let userRole: AuthUser['userRole'] = undefined;
if(userRole === undefined){
userRole = "client"; // Default to 'client' if role is missing
}
try {
const userData = await fetchUserData(firebaseUser.uid);
if (userData) {
userRole = userData.userRole;
if (userData && userData.userRole) {
userRole = userData.userRole as AuthUser['userRole'];
}
} catch (error) {
console.error("Failed to fetch user role:", error);
// Continue with default role on error
// Do not assign a frontend default — treat missing role as undefined
}
return {
uid: firebaseUser.uid,
email: firebaseUser.email,
displayName: firebaseUser.displayName,
photoURL: firebaseUser.photoURL,
userRole: userRole,
userRole,
};
}
);
@@ -82,20 +84,22 @@ export const logoutUser = createAsyncThunk("auth/logoutUser", async (_, { reject
* Async thunk to check if user is already logged in
* Fetches user role from Firestore on app initialization
*/
export const checkAuthStatus = createAsyncThunk("auth/checkAuthStatus", async (_, { rejectWithValue }) => {
export const checkAuthStatus = createAsyncThunk("auth/checkAuthStatus", async () => {
const currentUser = getCurrentUser();
if (currentUser) {
// Fetch user role from Firestore
let userRole: "admin" | "client" | "vendor" = "client";
// Fetch user role from backend (DataConnect) or fallback (Firestore)
let userRole: AuthUser['userRole'] = undefined;
try {
const userData = await fetchUserData(currentUser.uid);
if (userData) {
userRole = userData.userRole;
if (userData && userData.userRole) {
console.log("User data fetched during auth check:", userData);
userRole = userData.userRole as AuthUser['userRole'];
console.log("Fetched user role:", userRole);
}
} catch (error) {
console.error("Failed to fetch user role:", error);
// Continue with default role on error
// Do not apply a frontend default role
}
return {
@@ -103,7 +107,7 @@ export const checkAuthStatus = createAsyncThunk("auth/checkAuthStatus", async (_
email: currentUser.email,
displayName: currentUser.displayName,
photoURL: currentUser.photoURL,
userRole: userRole,
userRole,
};
}

View File

@@ -2,6 +2,8 @@
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
import { getAuth } from "firebase/auth";
import { getDataConnect } from "firebase/data-connect";
import { connectorConfig } from "@/dataconnect-generated";
// TODO: Add SDKs for Firebase products that you want to use
// https://firebase.google.com/docs/web/setup#available-libraries
@@ -17,7 +19,9 @@ const firebaseConfig = {
measurementId: import.meta.env.VITE_FIREBASE_MEASUREMENT_ID
};
// Initialize Firebase
export const app = initializeApp(firebaseConfig);
export const analytics = getAnalytics(app);
export const dataConnect = getDataConnect(app, connectorConfig);
export const auth = getAuth(app);