feat: Marktchancen — Netzwerk-Hinweise tab (human-sourced market intel)

- MarktHinweis domain type: SUCHE/VERFUEGBARKEIT direction, INTERN/PLATTFORM
  visibility, anonymization flag, source tracking
- Full data layer: IMarktHinweisProvider, MockupMarktHinweisProvider, service, hooks
- 7 seed entries: mix of intern/shared, demand/supply, own/partner Verwaltungen
- Marktchancen gets two-tab layout: Digitale Signale (crawler) + Netzwerk (human)
- HinweisListItem: direction icon, visibility badge (Intern/Geteilt/partner name)
- HinweisDetail: note card, portfolio match (SUCHE) or availability info (VERFUEGBARKEIT)
- HinweisErfassenDialog: direction toggle, asset type, location, area range,
  company + anonymize switch, source, note, card-based visibility picker
- HinweisPropertyCard: same Anschreiben composer pattern as crawler side

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-24 23:47:50 +02:00
parent 63909c8caf
commit 7f6b7766e6
7 changed files with 960 additions and 53 deletions
+11
View File
@@ -0,0 +1,11 @@
import { MockupMarktHinweisProvider } from '../provider/MockupMarktHinweisProvider'
import type { MarktHinweis, CreateMarktHinweisInput } from '../domain/marktHinweis'
const provider = MockupMarktHinweisProvider
export const marktHinweisService = {
getAll: (): Promise<MarktHinweis[]> => provider.getAll(),
getById: (id: string): Promise<MarktHinweis | null> => provider.getById(id),
create: (data: CreateMarktHinweisInput): Promise<MarktHinweis> => provider.create(data),
update: (id: string, data: Partial<MarktHinweis>): Promise<MarktHinweis> => provider.update(id, data),
}