* 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
92 lines
2.5 KiB
TypeScript
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: [],
|
|
};
|
|
}
|