feat: F015 shortlist management

3-panel Shortlists page with left list, center detail, right decision brief panel. AddToShortlistDialog wired into result feed cards and match detail. Full DRAFT→REVIEW_READY→FINALIZED workflow, AI-generated decision brief draft, duplicate prevention, and compare-view integration.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Benjamin Sutter
2026-05-16 21:10:06 +02:00
parent 2753d1717c
commit 65130efca7
22 changed files with 1079 additions and 195 deletions
+5 -5
View File
@@ -1,6 +1,6 @@
import { MockupShortlistProvider } from '../provider/MockupShortlistProvider'
import type { ShortlistFilters } from '../provider/IShortlistProvider'
import type { Shortlist, CreateShortlistInput, UpdateShortlistInput } from '../domain/shortlist'
import type { Shortlist, CreateShortlistInput, UpdateShortlistInput, ShortlistItemInput } from '../domain/shortlist'
import type { ListResponse, ItemResponse } from './types'
const provider = MockupShortlistProvider
@@ -22,12 +22,12 @@ export const shortlistService = {
const data = await provider.update(id, input)
return { data }
},
async addItem(id: string, propertyId: string, note?: string): Promise<ItemResponse<Shortlist>> {
const data = await provider.addItem(id, propertyId, note)
async addItem(id: string, item: ShortlistItemInput): Promise<ItemResponse<Shortlist>> {
const data = await provider.addItem(id, item)
return { data }
},
async removeItem(id: string, propertyId: string): Promise<ItemResponse<Shortlist>> {
const data = await provider.removeItem(id, propertyId)
async removeItem(id: string, resultId: string): Promise<ItemResponse<Shortlist>> {
const data = await provider.removeItem(id, resultId)
return { data }
},
async remove(id: string): Promise<ItemResponse<void>> {