feat(frontend): Firmenname + Domain Input + useCompanyOrigin hook
CI / nodejs-build (push) Successful in 2m20s
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Has been skipped
CI / test-python-document-crawler (push) Has been skipped
CI / detect-changes (push) Successful in 7s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Failing after 4s
CI / validate-canonical-controls (push) Successful in 10s
CI / loc-budget (push) Successful in 14s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
CI / nodejs-build (push) Successful in 2m20s
CI / test-go (push) Has been skipped
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Has been skipped
CI / test-python-document-crawler (push) Has been skipped
CI / detect-changes (push) Successful in 7s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Failing after 4s
CI / validate-canonical-controls (push) Successful in 10s
CI / loc-budget (push) Successful in 14s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped
ComplianceCheckTab.tsx bekommt zwei neue UI-Felder oberhalb des PreScanWizard: - Firma → z.B. 'Tesla Germany GmbH' - Domain (Site-Origin) → z.B. 'https://www.tesla.com/de_de' Beide werden: - in localStorage persistiert (Hook _useCompanyOrigin.ts) - im POST-Body als company_name + origin_domain mitgeschickt - haben Vorrang vor LLM-extracted_profile (Backend nutzt eingegebene Werte falls vorhanden, fallback auf Inferenz) Datei jetzt 489 LOC (war vorher 461 + 28 für die Inputs). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -11,10 +11,12 @@ import {
|
||||
STORAGE_KEY_CHECK_ID, countWords, initState,
|
||||
type DocState, type DocsState, type HistoryEntry,
|
||||
} from './_compliance_storage'
|
||||
import { useCompanyOrigin } from './_useCompanyOrigin'
|
||||
|
||||
|
||||
export function ComplianceCheckTab() {
|
||||
const [docs, setDocs] = useState<DocsState>(initState)
|
||||
const { companyName, setCompanyName, originDomain, setOriginDomain } = useCompanyOrigin()
|
||||
const [scanContext, setScanContext] = useScanContext()
|
||||
const [useAgent, setUseAgent] = useState(false)
|
||||
const [tdmOverride, setTdmOverride] = useState(false)
|
||||
@@ -145,6 +147,8 @@ export function ComplianceCheckTab() {
|
||||
use_agent: useAgent,
|
||||
tdm_override: tdmOverride && tdmOverrideReason.trim().length >= 10,
|
||||
tdm_override_reason: tdmOverrideReason.trim(),
|
||||
company_name: companyName.trim() || undefined,
|
||||
origin_domain: originDomain.trim() || undefined,
|
||||
// P79 — Pre-Scan-Wizard 8 Pflichtfelder; treibt MC-Scope-Filter (P72)
|
||||
scan_context: scanContext,
|
||||
}),
|
||||
@@ -230,6 +234,30 @@ export function ComplianceCheckTab() {
|
||||
</p>
|
||||
</div>
|
||||
|
||||
{/* Firma + Domain (priorisiert vor extracted_profile-LLM-Inferenz) */}
|
||||
<div className="bg-white border border-slate-200 rounded-lg p-4 grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<label className="block">
|
||||
<span className="block text-xs font-medium text-slate-700 mb-1">Firma</span>
|
||||
<input
|
||||
type="text"
|
||||
value={companyName}
|
||||
onChange={e => setCompanyName(e.target.value)}
|
||||
placeholder="z.B. Tesla Germany GmbH"
|
||||
className="w-full text-sm border border-slate-300 rounded px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-purple-500"
|
||||
/>
|
||||
</label>
|
||||
<label className="block">
|
||||
<span className="block text-xs font-medium text-slate-700 mb-1">Domain (Site-Origin)</span>
|
||||
<input
|
||||
type="url"
|
||||
value={originDomain}
|
||||
onChange={e => setOriginDomain(e.target.value)}
|
||||
placeholder="z.B. https://www.tesla.com/de_de"
|
||||
className="w-full text-sm border border-slate-300 rounded px-2 py-1.5 focus:outline-none focus:ring-2 focus:ring-purple-500"
|
||||
/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
{/* P79 Pre-Scan-Wizard — 8 Pflichtfelder zum MC-Scope-Filter (P72) */}
|
||||
<PreScanWizard value={scanContext} onChange={setScanContext} />
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/**
|
||||
* Custom hook: persistente Firmenname + Origin-Domain für die
|
||||
* ComplianceCheckTab-Form. Priorisierte Werte vor der LLM-basierten
|
||||
* extracted_profile-Inferenz.
|
||||
*/
|
||||
|
||||
import { useEffect, useState } from 'react'
|
||||
|
||||
const STORAGE_KEY_COMPANY = 'compliance-check-company-name'
|
||||
const STORAGE_KEY_DOMAIN = 'compliance-check-origin-domain'
|
||||
|
||||
|
||||
function readInitial(key: string): string {
|
||||
if (typeof window === 'undefined') return ''
|
||||
return localStorage.getItem(key) || ''
|
||||
}
|
||||
|
||||
|
||||
export function useCompanyOrigin() {
|
||||
const [companyName, setCompanyName] = useState<string>(
|
||||
() => readInitial(STORAGE_KEY_COMPANY),
|
||||
)
|
||||
const [originDomain, setOriginDomain] = useState<string>(
|
||||
() => readInitial(STORAGE_KEY_DOMAIN),
|
||||
)
|
||||
|
||||
useEffect(() => {
|
||||
try {
|
||||
localStorage.setItem(STORAGE_KEY_COMPANY, companyName)
|
||||
} catch { /* quota */ }
|
||||
}, [companyName])
|
||||
|
||||
useEffect(() => {
|
||||
try {
|
||||
localStorage.setItem(STORAGE_KEY_DOMAIN, originDomain)
|
||||
} catch { /* quota */ }
|
||||
}, [originDomain])
|
||||
|
||||
return { companyName, setCompanyName, originDomain, setOriginDomain }
|
||||
}
|
||||
Reference in New Issue
Block a user