diff --git a/src/components/dashboard/ResumeDatabase.astro b/src/components/dashboard/ResumeDatabase.astro new file mode 100644 index 0000000..878dd99 --- /dev/null +++ b/src/components/dashboard/ResumeDatabase.astro @@ -0,0 +1,187 @@ +--- +import ResumeList from "./ResumeDatabase/ResumeList"; +import ResumeFilters from "./ResumeDatabase/ResumeFilters"; +import ResumeSearch from "./ResumeDatabase/ResumeSearch"; +import ResumeDetail from "./ResumeDatabase/ResumeDetail"; +--- + +
+
+
+

Resume Database

+

+ Search and filter student resumes for recruitment opportunities +

+
+
+ +
+
+ + +
+ +
+
+
+

Filters

+ +
+
+
+ + +
+ +
+
+ +
+
+ + +
+
+

Student Resumes

+ +
+
+ + + +
+
+
+ + diff --git a/src/components/dashboard/ResumeDatabase/ResumeDetail.tsx b/src/components/dashboard/ResumeDatabase/ResumeDetail.tsx new file mode 100644 index 0000000..56ee78d --- /dev/null +++ b/src/components/dashboard/ResumeDatabase/ResumeDetail.tsx @@ -0,0 +1,181 @@ +import { useState, useEffect } from 'react'; +import { Get } from '../../../scripts/pocketbase/Get'; +import { Collections } from '../../../schemas/pocketbase/schema'; +import type { User } from '../../../schemas/pocketbase/schema'; +import { Authentication } from '../../../scripts/pocketbase/Authentication'; + +interface ResumeUser { + id: string; + name: string; + email: string; + major?: string; + graduation_year?: number; + resume?: string; + avatar?: string; +} + +export default function ResumeDetail() { + const [user, setUser] = useState(null); + const [loading, setLoading] = useState(false); + const [error, setError] = useState(null); + + const get = Get.getInstance(); + const auth = Authentication.getInstance(); + + useEffect(() => { + // Listen for resume selection + const handleResumeSelection = (event: CustomEvent) => { + const { resumeId } = event.detail; + if (resumeId) { + loadResumeDetails(resumeId); + } + }; + + window.addEventListener('loadResumeDetail', handleResumeSelection as EventListener); + + return () => { + window.removeEventListener('loadResumeDetail', handleResumeSelection as EventListener); + }; + }, []); + + const loadResumeDetails = async (userId: string) => { + try { + setLoading(true); + setError(null); + + // Get user details + const user = await get.getOne(Collections.USERS, userId); + + if (!user || !user.resume) { + setError('Resume not found'); + setUser(null); + return; + } + + // Map to our simplified format + setUser({ + id: user.id, + name: user.name, + email: user.email, + major: user.major, + graduation_year: user.graduation_year, + resume: user.resume, + avatar: user.avatar + }); + } catch (err) { + console.error('Error loading resume details:', err); + setError('Failed to load resume details'); + setUser(null); + } finally { + setLoading(false); + } + }; + + if (loading) { + return ( +
+
+
+ ); + } + + if (error) { + return ( +
+
+ + + + +
+
+ ); + } + + if (!user) { + return ( +
+

Select a resume to view details

+
+ ); + } + + return ( +
+ {/* Student Information */} +
+
+
+
+ {user.avatar ? ( + {user.name} + ) : ( +
+ {user.name.charAt(0)} +
+ )} +
+
+
+ +
+

{user.name}

+

{user.email}

+ +
+
+

Major

+

{user.major || 'Not specified'}

+
+
+

Graduation Year

+

{user.graduation_year || 'Not specified'}

+
+
+
+
+ + {/* Resume Preview */} +
+
+

Resume

+ + Download + +
+
+ {user.resume && user.resume.toLowerCase().endsWith('.pdf') ? ( +
+