Add Equal Employment Opportunity (EEO) legal declarations card for Veteran, Disability, Clearance & Work Authorization
This commit is contained in:
@@ -19,7 +19,8 @@ import {
|
||||
Zap,
|
||||
RefreshCw,
|
||||
AlertCircle,
|
||||
Server
|
||||
Server,
|
||||
ShieldCheck
|
||||
} from 'lucide-react';
|
||||
|
||||
interface ProfileSettingsProps {
|
||||
@@ -345,6 +346,105 @@ export const ProfileSettings: React.FC<ProfileSettingsProps> = ({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Equal Employment Opportunity (EEO) & Legal Self-Identification Declarations */}
|
||||
<div className="lg:col-span-3 p-6 rounded-2xl bg-slate-900 border border-slate-800 shadow-xl space-y-4">
|
||||
<div className="flex items-center justify-between pb-3 border-b border-slate-800">
|
||||
<h3 className="text-sm font-bold text-white flex items-center gap-2">
|
||||
<ShieldCheck className="w-4 h-4 text-emerald-400" /> Voluntary EEO, Veteran, Disability & Legal Declarations
|
||||
</h3>
|
||||
<span className="text-[10px] text-slate-400 font-mono">Used for Auto-Filling Application Questions</span>
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 text-xs">
|
||||
|
||||
{/* Veteran Status */}
|
||||
<div>
|
||||
<label className="block font-semibold text-slate-300 mb-1">Veteran Status</label>
|
||||
<select
|
||||
value={profile.eeoDeclarations?.veteranStatus || 'NOT_VETERAN'}
|
||||
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, veteranStatus: e.target.value })}
|
||||
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
|
||||
>
|
||||
<option value="NOT_VETERAN">I am not a protected veteran</option>
|
||||
<option value="PROTECTED_VETERAN">I identify as one or more of the classifications of protected veteran</option>
|
||||
<option value="PREFER_NOT_TO_SAY">I decline to disclose / Prefer not to say</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{/* Disability Status */}
|
||||
<div>
|
||||
<label className="block font-semibold text-slate-300 mb-1">Disability Status</label>
|
||||
<select
|
||||
value={profile.eeoDeclarations?.disabilityStatus || 'NO_DISABILITY'}
|
||||
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, disabilityStatus: e.target.value })}
|
||||
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
|
||||
>
|
||||
<option value="NO_DISABILITY">No, I do not have a disability</option>
|
||||
<option value="YES_DISABILITY">Yes, I have a disability (or previously had a disability)</option>
|
||||
<option value="PREFER_NOT_TO_SAY">I decline to disclose / Prefer not to say</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{/* Work Authorization */}
|
||||
<div>
|
||||
<label className="block font-semibold text-slate-300 mb-1">Work Authorization</label>
|
||||
<select
|
||||
value={profile.eeoDeclarations?.workAuthorization || 'US_CITIZEN'}
|
||||
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, workAuthorization: e.target.value })}
|
||||
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
|
||||
>
|
||||
<option value="US_CITIZEN">US Citizen / Authorized to work for any employer</option>
|
||||
<option value="PERMANENT_RESIDENT">Permanent Resident (Green Card Holder)</option>
|
||||
<option value="VISA_SPONSORSHIP_REQUIRED">Require Visa Sponsorship</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{/* Visa Sponsorship Question */}
|
||||
<div>
|
||||
<label className="block font-semibold text-slate-300 mb-1">Will you now or in the future require visa sponsorship?</label>
|
||||
<select
|
||||
value={profile.eeoDeclarations?.requiresSponsorshipNowOrFuture ? 'YES' : 'NO'}
|
||||
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, requiresSponsorshipNowOrFuture: e.target.value === 'YES' })}
|
||||
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
|
||||
>
|
||||
<option value="NO">No</option>
|
||||
<option value="YES">Yes</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{/* Security Clearance Level */}
|
||||
<div>
|
||||
<label className="block font-semibold text-slate-300 mb-1">Security Clearance Level</label>
|
||||
<select
|
||||
value={profile.eeoDeclarations?.clearanceLevel || 'NONE'}
|
||||
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, clearanceLevel: e.target.value })}
|
||||
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
|
||||
>
|
||||
<option value="NONE">None / Not Active</option>
|
||||
<option value="SECRET">Secret Clearance</option>
|
||||
<option value="TOP_SECRET">Top Secret (TS)</option>
|
||||
<option value="TS_SCI">TS/SCI</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
{/* Gender */}
|
||||
<div>
|
||||
<label className="block font-semibold text-slate-300 mb-1">Gender Identification</label>
|
||||
<select
|
||||
value={profile.eeoDeclarations?.gender || 'MALE'}
|
||||
onChange={(e) => handleUpdateField('eeoDeclarations', { ...profile.eeoDeclarations, gender: e.target.value })}
|
||||
className="w-full px-3 py-2 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 focus:outline-none focus:border-indigo-500"
|
||||
>
|
||||
<option value="MALE">Male</option>
|
||||
<option value="FEMALE">Female</option>
|
||||
<option value="NON_BINARY">Non-Binary / Other</option>
|
||||
<option value="PREFER_NOT_TO_SAY">I decline to disclose</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{/* Master Professional Summary & Technical Skills */}
|
||||
<div className="lg:col-span-2 p-6 rounded-2xl bg-slate-900 border border-slate-800 shadow-xl space-y-5">
|
||||
|
||||
|
||||
@@ -67,9 +67,12 @@ export const WalkthroughTailor: React.FC<WalkthroughTailorProps> = ({
|
||||
fullName: userProfile.fullName || 'David Kifer',
|
||||
email: userProfile.email || 'dkifer19@gmail.com',
|
||||
phone: userProfile.phone || '(555) 019-2831',
|
||||
linkedin: userProfile.linkedin || 'https://linkedin.com/in/david-kifer',
|
||||
yearsExperience: '8+ Years',
|
||||
workAuthorization: 'US Citizen / Authorized',
|
||||
linkedin: userProfile.linkedinUrl || 'https://linkedin.com/in/david-kifer',
|
||||
yearsExperience: '10+ Years',
|
||||
workAuthorization: userProfile.eeoDeclarations?.workAuthorization || 'US Citizen / Authorized',
|
||||
veteranStatus: userProfile.eeoDeclarations?.veteranStatus === 'PROTECTED_VETERAN' ? 'Protected Veteran' : 'Not a Veteran',
|
||||
disabilityStatus: userProfile.eeoDeclarations?.disabilityStatus === 'YES_DISABILITY' ? 'Yes, Disability' : 'No Disability',
|
||||
clearanceLevel: userProfile.eeoDeclarations?.clearanceLevel || 'None',
|
||||
tailoredBulletsText: '',
|
||||
customCoverLetterText: ''
|
||||
});
|
||||
@@ -525,6 +528,26 @@ export const WalkthroughTailor: React.FC<WalkthroughTailorProps> = ({
|
||||
className="w-full bg-slate-900 border border-slate-800 rounded-xl px-3 py-2 text-slate-100 focus:border-amber-400 focus:outline-none"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label className="block text-slate-400 mb-1 font-semibold">Veteran Status Declaration</label>
|
||||
<input
|
||||
type="text"
|
||||
value={surfingFormData.veteranStatus}
|
||||
onChange={(e) => setSurfingFormData({ ...surfingFormData, veteranStatus: e.target.value })}
|
||||
className="w-full bg-slate-900 border border-slate-800 rounded-xl px-3 py-2 text-slate-100 focus:border-amber-400 focus:outline-none"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label className="block text-slate-400 mb-1 font-semibold">Disability Status Declaration</label>
|
||||
<input
|
||||
type="text"
|
||||
value={surfingFormData.disabilityStatus}
|
||||
onChange={(e) => setSurfingFormData({ ...surfingFormData, disabilityStatus: e.target.value })}
|
||||
className="w-full bg-slate-900 border border-slate-800 rounded-xl px-3 py-2 text-slate-100 focus:border-amber-400 focus:outline-none"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
|
||||
@@ -12,6 +12,15 @@ export const INITIAL_USER_PROFILE: UserProfile = {
|
||||
experience: [],
|
||||
skills: [],
|
||||
education: [],
|
||||
eeoDeclarations: {
|
||||
veteranStatus: 'NOT_VETERAN',
|
||||
disabilityStatus: 'NO_DISABILITY',
|
||||
gender: 'MALE',
|
||||
ethnicity: 'WHITE',
|
||||
workAuthorization: 'US_CITIZEN',
|
||||
requiresSponsorshipNowOrFuture: false,
|
||||
clearanceLevel: 'NONE'
|
||||
},
|
||||
autoApplyCriteria: {
|
||||
enabled: false,
|
||||
targetRoles: [],
|
||||
|
||||
+10
-1
@@ -105,7 +105,16 @@ export interface UserProfile {
|
||||
year: string;
|
||||
}[];
|
||||
|
||||
// Autonomous settings
|
||||
// Equal Employment Opportunity (EEO) & Legal Declarations
|
||||
eeoDeclarations?: {
|
||||
veteranStatus: 'NOT_VETERAN' | 'PROTECTED_VETERAN' | 'PREFER_NOT_TO_SAY';
|
||||
disabilityStatus: 'NO_DISABILITY' | 'YES_DISABILITY' | 'PREFER_NOT_TO_SAY';
|
||||
gender: 'MALE' | 'FEMALE' | 'NON_BINARY' | 'PREFER_NOT_TO_SAY';
|
||||
ethnicity: 'WHITE' | 'HISPANIC' | 'BLACK' | 'ASIAN' | 'TWO_OR_MORE' | 'PREFER_NOT_TO_SAY';
|
||||
workAuthorization: 'US_CITIZEN' | 'PERMANENT_RESIDENT' | 'VISA_SPONSORSHIP_REQUIRED' | 'NEED_SPONSORSHIP';
|
||||
requiresSponsorshipNowOrFuture: boolean;
|
||||
clearanceLevel?: 'NONE' | 'SECRET' | 'TOP_SECRET' | 'TS_SCI';
|
||||
};
|
||||
autoApplyCriteria: {
|
||||
enabled: boolean;
|
||||
targetRoles: string[];
|
||||
|
||||
Reference in New Issue
Block a user