diff --git a/.app.pid b/.app.pid index 8bd435a..ad1624e 100644 --- a/.app.pid +++ b/.app.pid @@ -1 +1 @@ -271577 +271828 diff --git a/src/components/AutonomousEngine.tsx b/src/components/AutonomousEngine.tsx index 153e603..cdc7a26 100644 --- a/src/components/AutonomousEngine.tsx +++ b/src/components/AutonomousEngine.tsx @@ -36,6 +36,21 @@ export const AutonomousEngine: React.FC = ({ const [criteria, setCriteria] = useState(userProfile.autoApplyCriteria); const [targetRoleInput, setTargetRoleInput] = useState(''); const [excludedCompanyInput, setExcludedCompanyInput] = useState(''); + const [locationInput, setLocationInput] = useState(''); + + const handleAddLocation = () => { + if (!locationInput.trim()) return; + const currentLocs = criteria.preferredLocations || []; + const updated = [...currentLocs, locationInput.trim()]; + handleUpdateCriteria('preferredLocations', updated); + setLocationInput(''); + }; + + const handleRemoveLocation = (loc: string) => { + const currentLocs = criteria.preferredLocations || []; + const updated = currentLocs.filter(l => l !== loc); + handleUpdateCriteria('preferredLocations', updated); + }; const [logs, setLogs] = useState<{ id: string; time: string; msg: string; type: 'info' | 'success' | 'warning' }[]>([ { id: '1', time: '10:15 AM', msg: 'Autonomous AI Daemon initialized with Gemini 3.6 Flash.', type: 'info' }, @@ -248,9 +263,39 @@ export const AutonomousEngine: React.FC = ({ - {/* Preferred Locations & Work Type (Remote / Hybrid / Onsite) */} + {/* Preferred Work Locations Tags */}
- + +
+ setLocationInput(e.target.value)} + className="flex-1 px-3 py-1.5 rounded-xl bg-slate-950 border border-slate-800 text-slate-200 text-xs focus:outline-none focus:border-indigo-500" + /> + +
+
+ {(criteria.preferredLocations || []).map((loc, idx) => ( + + + {loc} + + + ))} +
+
+ + {/* Preferred Work Type (Remote / Hybrid / Onsite) */} +
+
{['Remote', 'Hybrid', 'Onsite'].map((type) => { const workTypes = criteria.preferredWorkTypes || ['Remote', 'Hybrid']; diff --git a/src/components/JobFeeds.tsx b/src/components/JobFeeds.tsx index aca82ef..34e97dd 100644 --- a/src/components/JobFeeds.tsx +++ b/src/components/JobFeeds.tsx @@ -25,9 +25,9 @@ export const JobFeeds: React.FC = ({ onTailorJobFeed, onQuickApplyFeed }) => { - const [searchTerm, setSearchTerm] = useState(''); const [selectedPlatform, setSelectedPlatform] = useState('ALL'); const [selectedWorkType, setSelectedWorkType] = useState('ALL'); + const [selectedLocationFilter, setSelectedLocationFilter] = useState('ALL'); const [minMatch, setMinMatch] = useState(0); const [appliedFeedIds, setAppliedFeedIds] = useState([]); const [isFetchingFeeds, setIsFetchingFeeds] = useState(false); @@ -67,9 +67,19 @@ export const JobFeeds: React.FC = ({ matchesWorkType = !feedLoc.includes('remote') && !feedDesc.includes('remote'); } + // Specific Location Region Filter (United States, Connecticut, Global) + let matchesRegionLocation = true; + if (selectedLocationFilter === 'US') { + matchesRegionLocation = feedLoc.includes('us') || feedLoc.includes('united states') || feedLoc.includes('remote us') || feedDesc.includes('united states'); + } else if (selectedLocationFilter === 'CT') { + matchesRegionLocation = feedLoc.includes('ct') || feedLoc.includes('connecticut') || feedDesc.includes('connecticut'); + } else if (selectedLocationFilter === 'GLOBAL') { + matchesRegionLocation = feedLoc.includes('global') || feedLoc.includes('worldwide') || feedLoc.includes('international'); + } + const matchesMatch = (feed.estimatedMatch ?? 80) >= minMatch; - return matchesSearch && matchesPlatform && matchesWorkType && matchesMatch; + return matchesSearch && matchesPlatform && matchesWorkType && matchesRegionLocation && matchesMatch; }); const handleFetchLiveFeeds = async () => { @@ -141,6 +151,18 @@ export const JobFeeds: React.FC = ({ {/* Platform & Work Type & Match Threshold */}
+ {/* Location Region Filter Dropdown */} + + {/* Work Type Filter Dropdown */}