Jobber/extractors/hiringcafe/src/default-search-state.ts
Shaheer Sarfaraz d34a9f041b
Hiring cafe extractor (#192)
* feat(hiringcafe): register new source across shared/server/client enums

* feat(hiringcafe-extractor): add browser-backed Hiring Cafe dataset extractor

* feat(orchestrator): integrate Hiring Cafe discovery service into pipeline

* feat(orchestrator-ui): add Hiring Cafe to source availability and run estimates

* chore(hiringcafe): wire CI/docker and add extractor documentation

* chore(format): apply biome formatting for Hiring Cafe integration

* add original websites

* coomints

* number or null
2026-02-19 12:51:55 +00:00

92 lines
2.5 KiB
TypeScript

import type { HiringCafeCountryLocation } from "./country-map.js";
export interface HiringCafeSearchState {
locations: HiringCafeCountryLocation[];
workplaceTypes: Array<"Remote" | "Hybrid" | "Onsite">;
defaultToUserLocation: boolean;
userLocation: null;
commitmentTypes: string[];
seniorityLevel: string[];
roleTypes: string[];
roleYoeRange: [number, number];
excludeIfRoleYoeIsNotSpecified: boolean;
managementYoeRange: [number, number];
excludeIfManagementYoeIsNotSpecified: boolean;
securityClearances: string[];
searchQuery: string;
dateFetchedPastNDays: number;
hiddenCompanies: string[];
sortBy: "default";
companyPublicOrPrivate: "all";
latestInvestmentYearRange: [null, null];
latestInvestmentSeries: string[];
latestInvestmentAmount: null;
latestInvestmentCurrency: string[];
investors: string[];
excludedInvestors: string[];
isNonProfit: "all";
companySizeRanges: string[];
minYearFounded: null;
maxYearFounded: null;
excludedLatestInvestmentSeries: string[];
}
export function createDefaultSearchState(args: {
searchQuery: string;
location: HiringCafeCountryLocation | null;
dateFetchedPastNDays: number;
}): HiringCafeSearchState {
return {
locations: args.location ? [args.location] : [],
workplaceTypes: ["Remote", "Hybrid", "Onsite"],
defaultToUserLocation: false,
userLocation: null,
commitmentTypes: [
"Full Time",
"Part Time",
"Contract",
"Internship",
"Temporary",
"Seasonal",
"Volunteer",
],
seniorityLevel: [
"No Prior Experience Required",
"Entry Level",
"Mid Level",
"Senior Level",
],
roleTypes: ["Individual Contributor", "People Manager"],
roleYoeRange: [0, 20],
excludeIfRoleYoeIsNotSpecified: false,
managementYoeRange: [0, 20],
excludeIfManagementYoeIsNotSpecified: false,
securityClearances: [
"None",
"Confidential",
"Secret",
"Top Secret",
"Top Secret/SCI",
"Public Trust",
"Interim Clearances",
"Other",
],
searchQuery: args.searchQuery,
dateFetchedPastNDays: args.dateFetchedPastNDays,
hiddenCompanies: [],
sortBy: "default",
companyPublicOrPrivate: "all",
latestInvestmentYearRange: [null, null],
latestInvestmentSeries: [],
latestInvestmentAmount: null,
latestInvestmentCurrency: [],
investors: [],
excludedInvestors: [],
isNonProfit: "all",
companySizeRanges: [],
minYearFounded: null,
maxYearFounded: null,
excludedLatestInvestmentSeries: [],
};
}