feat: Initialize QuantScan AI frontend project
Set up the basic React project structure, including necessary dependencies, configuration files, and initial styling for the QuantScan AI Forex Pro scanner. This commit establishes the foundation for building the frontend application.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { initializeApp } from "firebase/app";
|
||||
import { getAuth } from "firebase/auth";
|
||||
import { getFirestore } from "firebase/firestore";
|
||||
import { getStorage } from "firebase/storage";
|
||||
const firebaseConfig = {
|
||||
apiKey: "AIzaSyDVUxpAmWf57dGrj0dltwg-2d3jytGpJCY",
|
||||
authDomain: "quantscan-pro.firebaseapp.com",
|
||||
projectId: "quantscan-pro",
|
||||
storageBucket: "quantscan-pro.firebasestorage.app",
|
||||
messagingSenderId: "580184623755",
|
||||
appId: "1:580184623755:web:4c5fcf6fd4a8f7bc13628e",
|
||||
measurementId: "G-4WZHMKD7Y6"
|
||||
};
|
||||
|
||||
const app = initializeApp(firebaseConfig);
|
||||
export const db = getFirestore(app);
|
||||
export const auth = getAuth(app);
|
||||
export const storage = getStorage(app);
|
||||
|
||||
export enum OperationType {
|
||||
CREATE = 'create',
|
||||
UPDATE = 'update',
|
||||
DELETE = 'delete',
|
||||
LIST = 'list',
|
||||
GET = 'get',
|
||||
WRITE = 'write',
|
||||
}
|
||||
|
||||
interface FirestoreErrorInfo {
|
||||
error: string;
|
||||
operationType: OperationType;
|
||||
path: string | null;
|
||||
authInfo: {
|
||||
userId?: string | null;
|
||||
email?: string | null;
|
||||
emailVerified?: boolean | null;
|
||||
isAnonymous?: boolean | null;
|
||||
tenantId?: string | null;
|
||||
providerInfo?: {
|
||||
providerId?: string | null;
|
||||
email?: string | null;
|
||||
}[];
|
||||
}
|
||||
}
|
||||
|
||||
export function handleFirestoreError(error: unknown, operationType: OperationType, path: string | null) {
|
||||
const errInfo: FirestoreErrorInfo = {
|
||||
error: error instanceof Error ? error.message : String(error),
|
||||
authInfo: {
|
||||
userId: auth.currentUser?.uid,
|
||||
email: auth.currentUser?.email,
|
||||
emailVerified: auth.currentUser?.emailVerified,
|
||||
isAnonymous: auth.currentUser?.isAnonymous,
|
||||
tenantId: auth.currentUser?.tenantId,
|
||||
providerInfo: auth.currentUser?.providerData?.map(provider => ({
|
||||
providerId: provider.providerId,
|
||||
email: provider.email,
|
||||
})) || []
|
||||
},
|
||||
operationType,
|
||||
path
|
||||
}
|
||||
console.error('Firestore Error: ', JSON.stringify(errInfo));
|
||||
throw new Error(JSON.stringify(errInfo));
|
||||
}
|
||||
@@ -0,0 +1,6 @@
|
||||
import { clsx, type ClassValue } from 'clsx';
|
||||
import { twMerge } from 'tailwind-merge';
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
Reference in New Issue
Block a user