Neuer Menüpunkt Scanner mit Dashboard und Suchagenten, Zeitplan und API-Schlüssel unter Einstellungen -> Scanner. - Quellen: Agentur für Arbeit (API), StepStone, karriere.at, freelancermap (HTML) sowie Adzuna und Jooble (kostenlose Schlüssel) - Quote = gefundene Schlagwörter, Titel zählt doppelt; keine KI - Abgleich mit icon_companies, bekannte Firmen oben mit Abzeichen - Zeitplan Vorgabe stündlich Mo-Fr 06-20 Uhr, einstellbar - Sperre gegen parallele Läufe wie im perinco-Scanner Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
import React, { createContext, useContext } from 'react';
|
|
import type { View } from '../types';
|
|
|
|
/*
|
|
* Ansichtswechsel fuer tief liegende Komponenten.
|
|
*
|
|
* Eine angeklickte @-Erwaehnung oder ein Treffer der globalen Suche muss die
|
|
* passende Karte oeffnen koennen, ohne dass jede Ebene dazwischen einen
|
|
* Rueckruf durchreicht.
|
|
*/
|
|
|
|
export type OpenTarget = 'contact' | 'company' | 'tender' | 'project' | 'lead' | 'user';
|
|
|
|
/** Reiter der Einstellungen - auch von aussen ansteuerbar. */
|
|
export type SettingsTab = 'konto' | 'benutzer' | 'stammdaten' | 'ki' | 'scanner' | 'diktat';
|
|
|
|
interface NavigationValue {
|
|
setView: (view: View) => void;
|
|
/** Oeffnet die Karte eines Datensatzes - wechselt dabei die Ansicht. */
|
|
open: (type: OpenTarget, id: number) => void;
|
|
/**
|
|
* Wechselt in die Einstellungen und oeffnet dort einen bestimmten Reiter.
|
|
*
|
|
* Gebraucht fuer das Diktat: der Knopf im Formular meldet, dass das
|
|
* Sprachmodell fehlt, und muss direkt dorthin fuehren koennen, wo es geladen
|
|
* wird - ein blosser Hinweis "steht in den Einstellungen" waere eine
|
|
* Suchaufgabe.
|
|
*/
|
|
goToSettings: (tab: SettingsTab) => void;
|
|
}
|
|
|
|
const NavigationContext = createContext<NavigationValue | null>(null);
|
|
|
|
export const NavigationProvider: React.FC<{ value: NavigationValue; children: React.ReactNode }> = ({
|
|
value,
|
|
children,
|
|
}) => <NavigationContext.Provider value={value}>{children}</NavigationContext.Provider>;
|
|
|
|
export function useNavigation(): NavigationValue {
|
|
const ctx = useContext(NavigationContext);
|
|
if (!ctx) throw new Error('useNavigation muss innerhalb von <NavigationProvider> verwendet werden.');
|
|
return ctx;
|
|
}
|