diff --git a/shop/components/wizard/license-lookup-panel.tsx b/shop/components/wizard/license-lookup-panel.tsx index e8f4dab..edab1ab 100644 --- a/shop/components/wizard/license-lookup-panel.tsx +++ b/shop/components/wizard/license-lookup-panel.tsx @@ -25,47 +25,47 @@ import { lookupLicenseFromLicServer } from '@/lib/actions/licserver-config' // ─── MOCK DATA (until real LicServer API is wired up) ─────────────────────── const MOCK_LICENSES: Record = { - 'CAS-2023-PRO-00123': { - licenseKey: 'CAS-2023-PRO-00123', - status: 'active', - product: 'CAS genesisWorld Professional', - edition: 'Professional', - version: '14.1.2', - seats: 10, - customer: 'Mustermann GmbH', - contact: 'Max Mustermann', - issuedAt: '2023-04-01', - expiresAt: '2026-03-31', + '995500-0005': { + licenseKey: '995500-0005', + status: 'active', + product: 'CASPOS DEMO', + edition: 'Professional', + version: '14.1.2', + seats: 10, + customer: 'Mustermann GmbH', + contact: 'Max Mustermann', + issuedAt: '2023-04-01', + expiresAt: '2026-03-31', maintenanceUntil: '2025-03-31', - modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client'], + modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client'], }, 'CAS-2020-STD-00456': { - licenseKey: 'CAS-2020-STD-00456', - status: 'expired', - product: 'CAS genesisWorld Standard', - edition: 'Standard', - version: '12.0.0', - seats: 5, - customer: 'Beispiel AG', - contact: 'Erika Muster', - issuedAt: '2020-01-15', - expiresAt: '2023-01-14', + licenseKey: 'CAS-2020-STD-00456', + status: 'expired', + product: 'CAS genesisWorld Standard', + edition: 'Standard', + version: '12.0.0', + seats: 5, + customer: 'Beispiel AG', + contact: 'Erika Muster', + issuedAt: '2020-01-15', + expiresAt: '2023-01-14', maintenanceUntil: '2022-01-14', - modules: ['CRM'], + modules: ['CRM'], }, 'CAS-2024-ENT-00789': { - licenseKey: 'CAS-2024-ENT-00789', - status: 'active', - product: 'CAS genesisWorld Enterprise', - edition: 'Enterprise', - version: '15.0.0', - seats: 50, - customer: 'Tech Solutions GmbH & Co. KG', - contact: 'Julia Schneider', - issuedAt: '2024-01-01', - expiresAt: '2026-12-31', + licenseKey: 'CAS-2024-ENT-00789', + status: 'active', + product: 'CAS genesisWorld Enterprise', + edition: 'Enterprise', + version: '15.0.0', + seats: 50, + customer: 'Tech Solutions GmbH & Co. KG', + contact: 'Julia Schneider', + issuedAt: '2024-01-01', + expiresAt: '2026-12-31', maintenanceUntil: '2026-12-31', - modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client', 'AI Assistant', 'Analytics Pro'], + modules: ['CRM', 'ERP-Link', 'Mobile Client', 'Web Client', 'AI Assistant', 'Analytics Pro'], }, } @@ -73,18 +73,18 @@ const MOCK_LICENSES: Record = { export type LicenseStatus = 'active' | 'expired' | 'invalid' | 'suspended' export interface LicenseInfo { - licenseKey: string - status: LicenseStatus - product: string - edition: string - version: string - seats: number - customer: string - contact: string - issuedAt: string - expiresAt: string - maintenanceUntil: string - modules: string[] + licenseKey: string + status: LicenseStatus + product: string + edition: string + version: string + seats: number + customer: string + contact: string + issuedAt: string + expiresAt: string + maintenanceUntil: string + modules: string[] } interface LicenseLookupPanelProps { @@ -98,34 +98,34 @@ function statusConfig(status: LicenseStatus) { case 'active': return { label: 'Aktiv', - icon: , - cls: 'bg-emerald-500/20 text-emerald-300 border-emerald-500/40', - ring: 'border-emerald-500/30', - glow: 'shadow-emerald-500/10', + icon: , + cls: 'bg-emerald-500/20 text-emerald-300 border-emerald-500/40', + ring: 'border-emerald-500/30', + glow: 'shadow-emerald-500/10', } case 'expired': return { label: 'Abgelaufen', - icon: , - cls: 'bg-amber-500/20 text-amber-300 border-amber-500/40', - ring: 'border-amber-500/30', - glow: 'shadow-amber-500/10', + icon: , + cls: 'bg-amber-500/20 text-amber-300 border-amber-500/40', + ring: 'border-amber-500/30', + glow: 'shadow-amber-500/10', } case 'suspended': return { label: 'Gesperrt', - icon: , - cls: 'bg-red-500/20 text-red-300 border-red-500/40', - ring: 'border-red-500/30', - glow: 'shadow-red-500/10', + icon: , + cls: 'bg-red-500/20 text-red-300 border-red-500/40', + ring: 'border-red-500/30', + glow: 'shadow-red-500/10', } default: return { label: 'Ungültig', - icon: , - cls: 'bg-red-500/20 text-red-300 border-red-500/40', - ring: 'border-red-500/30', - glow: 'shadow-red-500/10', + icon: , + cls: 'bg-red-500/20 text-red-300 border-red-500/40', + ring: 'border-red-500/30', + glow: 'shadow-red-500/10', } } } @@ -149,13 +149,13 @@ async function lookupLicense(key: string): Promise { // ─── MAIN COMPONENT ─────────────────────────────────────────────────────────── export function LicenseLookupPanel({ onLicenseResolved }: LicenseLookupPanelProps) { - const [licenseKey, setLicenseKey] = useState('') - const [result, setResult] = useState(null) - const [notFound, setNotFound] = useState(false) - const [isPending, startTransition] = useTransition() - const [expanded, setExpanded] = useState(true) + const [licenseKey, setLicenseKey] = useState('') + const [result, setResult] = useState(null) + const [notFound, setNotFound] = useState(false) + const [isPending, startTransition] = useTransition() + const [expanded, setExpanded] = useState(true) const [modulesOpen, setModulesOpen] = useState(false) - const inputRef = useRef(null) + const inputRef = useRef(null) const handleSearch = () => { if (!licenseKey.trim()) return @@ -242,7 +242,7 @@ export function LicenseLookupPanel({ onLicenseResolved }: LicenseLookupPanelProp setNotFound(false) }} onKeyDown={handleKeyDown} - placeholder="z. B. CAS-2023-PRO-00123" + placeholder="z. B. 995500-00" className="pl-9 pr-8 bg-white/5 border-white/10 text-white placeholder:text-slate-500 focus:border-violet-500/60 focus:ring-violet-500/20 rounded-xl text-sm h-10" /> @@ -278,16 +278,16 @@ export function LicenseLookupPanel({ onLicenseResolved }: LicenseLookupPanelProp Demo:  setLicenseKey('CAS-2023-PRO-00123')} + onClick={() => setLicenseKey('995500-00')} > - CAS-2023-PRO-00123 + 995500-00 {' · '} setLicenseKey('CAS-2020-STD-00456')} + onClick={() => setLicenseKey('995500-01')} > - CAS-2020-STD-00456 + 995500-01