Files
ICON-CRM/src/lib/navigation.tsx
T
schakal00783andClaude Opus 5.5 1b82f580db Scanner: Stellenanzeigen aus Jobbörsen (DACH, max. 21 Tage)
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>
2026-09-29 10:49:44 +02:00

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;
}