9f391d17cb
- Add Reminder Manager page (/supply/reminder-manager) with KPI bar, filter bar, list/card feed, and detail drawer (7 sections incl. activity log, snooze, complete, dismiss actions) - Add Schattenmarkt-Freigabe toggle on PropertyDetailView: Verwaltung can opt-in properties for early market exposure before contract expiry - Auto-generate FutureSignal cards via useSchattenmarktSignals hook when leaseEndDate - leadTimeMonths <= MOCK_TODAY - Fix useUnifiedResults: use property.resultType as fallback (was defaulting everything to VERIFIED_PORTFOLIO) - Fix demand Results: hide VERIFIED_PORTFOLIO from non-manager users even when showOwnProperties toggle was previously enabled - Fix AppShell: redirect to allowed workspace on user role switch - Fix 3 wrong match scores (match-002: 93→62, match-009: 86→55, match-017: 87→52) - Add 7 new match records (match-050–056) for need-001, need-002, need-011 - Add need-011 (Retail Bern Innenstadt) - Add prop-031–036 (EXTERNAL_MARKET / MAISON_WORK / FUTURE_AVAILABILITY) - Fix duplicate image URLs across all properties - Add signal-011 (Bern Altstadt, Mode Boutique) + propertyId to signal-001 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { create } from 'zustand'
|
|
import type { ReminderType, ReminderStatus, ReminderPriority } from '../domain/reminder'
|
|
|
|
interface ReminderStore {
|
|
selectedId: string | null
|
|
setSelectedId: (id: string | null) => void
|
|
drawerOpen: boolean
|
|
setDrawerOpen: (open: boolean) => void
|
|
filterType: ReminderType | 'ALL'
|
|
setFilterType: (t: ReminderType | 'ALL') => void
|
|
filterStatus: ReminderStatus | 'ALL'
|
|
setFilterStatus: (s: ReminderStatus | 'ALL') => void
|
|
filterPriority: ReminderPriority | 'ALL'
|
|
setFilterPriority: (p: ReminderPriority | 'ALL') => void
|
|
searchQuery: string
|
|
setSearchQuery: (q: string) => void
|
|
viewMode: 'list' | 'card'
|
|
setViewMode: (m: 'list' | 'card') => void
|
|
}
|
|
|
|
export const useReminderStore = create<ReminderStore>((set) => ({
|
|
selectedId: null,
|
|
setSelectedId: (id) => set({ selectedId: id }),
|
|
drawerOpen: false,
|
|
setDrawerOpen: (open) => set({ drawerOpen: open }),
|
|
filterType: 'ALL',
|
|
setFilterType: (t) => set({ filterType: t }),
|
|
filterStatus: 'ALL',
|
|
setFilterStatus: (s) => set({ filterStatus: s }),
|
|
filterPriority: 'ALL',
|
|
setFilterPriority: (p) => set({ filterPriority: p }),
|
|
searchQuery: '',
|
|
setSearchQuery: (q) => set({ searchQuery: q }),
|
|
viewMode: 'list',
|
|
setViewMode: (m) => set({ viewMode: m }),
|
|
}))
|