import { useEffect, useState } from 'react' import axios from 'axios' import { X, Bot, Tag, Target, Users, Plus, Trash2, Save } from 'lucide-react' import clsx from 'clsx' interface RoboticsSettingsProps { isOpen: boolean onClose: () => void apiBase: string } export function RoboticsSettings({ isOpen, onClose, apiBase }: RoboticsSettingsProps) { const [activeTab, setActiveTab] = useState<'robotics' | 'industries' | 'roles'>('robotics') // Data States const [roboticsCategories, setRoboticsCategories] = useState([]) const [industries, setIndustries] = useState([]) const [jobRoles, setJobRoles] = useState([]) const fetchRobotics = async () => { try { const res = await axios.get(`${apiBase}/robotics/categories`); setRoboticsCategories(res.data) } catch (e) { console.error(e) } } const fetchIndustries = async () => { try { const res = await axios.get(`${apiBase}/industries`); setIndustries(res.data) } catch (e) { console.error(e) } } const fetchJobRoles = async () => { try { const res = await axios.get(`${apiBase}/job_roles`); setJobRoles(res.data) } catch (e) { console.error(e) } } useEffect(() => { if (isOpen) { fetchRobotics() fetchIndustries() fetchJobRoles() } }, [isOpen]) // Robotics Handlers const handleUpdateRobotics = async (id: number, description: string, reasoning: string) => { try { await axios.put(`${apiBase}/robotics/categories/${id}`, { description, reasoning_guide: reasoning }) fetchRobotics() } catch (e) { alert("Update failed") } } // Industry Handlers const handleAddIndustry = async () => { try { await axios.post(`${apiBase}/industries`, { name: "New Industry" }); fetchIndustries() } catch (e) { alert("Failed") } } const handleUpdateIndustry = async (id: number, data: any) => { try { await axios.put(`${apiBase}/industries/${id}`, data); fetchIndustries() } catch (e) { alert("Failed") } } const handleDeleteIndustry = async (id: number) => { try { await axios.delete(`${apiBase}/industries/${id}`); fetchIndustries() } catch (e) { alert("Failed") } } // Job Role Handlers const handleAddJobRole = async () => { try { await axios.post(`${apiBase}/job_roles`, { pattern: "New Pattern", role: "Operativer Entscheider" }); fetchJobRoles() } catch (e) { alert("Failed") } } const handleDeleteJobRole = async (id: number) => { try { await axios.delete(`${apiBase}/job_roles/${id}`); fetchJobRoles() } catch (e) { alert("Failed") } } if (!isOpen) return null return (
{/* Header */}

Settings & Classification Logic

Define how AI evaluates leads and matches roles.

{/* Tab Nav */}
{[ { id: 'robotics', label: 'Robotics Potential', icon: Bot }, { id: 'industries', label: 'Industry Focus', icon: Target }, { id: 'roles', label: 'Job Role Mapping', icon: Users }, ].map(t => ( ))}
{/* Content */}
{/* ROBOTICS TAB */} {activeTab === 'robotics' && (
{roboticsCategories.map(cat => ( ))}
)} {/* INDUSTRIES TAB */} {activeTab === 'industries' && (

Industry Verticals

{industries.map(ind => (
handleUpdateIndustry(ind.id, { name: e.target.value })} />
handleUpdateIndustry(ind.id, { is_focus: e.target.checked })} className="rounded border-slate-300 dark:border-slate-700" /> Focus?