import { useState } from 'react'; import { Title, Text, Stack, Group, Button, SimpleGrid, Modal, TextInput, Textarea, Loader, Center } from '@mantine/core'; import { IconPlus } from '@tabler/icons-react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useNavigate } from 'react-router-dom'; import { notifications } from '@mantine/notifications'; import api from '../../services/api'; import { ScenarioCard } from './components/ScenarioCard'; export function InvestmentScenariosPage() { const navigate = useNavigate(); const queryClient = useQueryClient(); const [createOpen, setCreateOpen] = useState(false); const [editScenario, setEditScenario] = useState(null); const [form, setForm] = useState({ name: '', description: '' }); const { data: scenarios, isLoading } = useQuery({ queryKey: ['board-planning-scenarios', 'investment'], queryFn: async () => { const { data } = await api.get('/board-planning/scenarios?type=investment'); return data; }, }); const createMutation = useMutation({ mutationFn: (dto: any) => api.post('/board-planning/scenarios', dto), onSuccess: (res) => { queryClient.invalidateQueries({ queryKey: ['board-planning-scenarios'] }); setCreateOpen(false); setForm({ name: '', description: '' }); notifications.show({ message: 'Scenario created', color: 'green' }); navigate(`/board-planning/investments/${res.data.id}`); }, }); const updateMutation = useMutation({ mutationFn: ({ id, ...dto }: any) => api.put(`/board-planning/scenarios/${id}`, dto), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['board-planning-scenarios'] }); setEditScenario(null); notifications.show({ message: 'Scenario updated', color: 'green' }); }, }); const deleteMutation = useMutation({ mutationFn: (id: string) => api.delete(`/board-planning/scenarios/${id}`), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['board-planning-scenarios'] }); notifications.show({ message: 'Scenario archived', color: 'orange' }); }, }); if (isLoading) return
; return (
Investment Scenarios Model different investment strategies and compare their impact on liquidity and income
{scenarios && scenarios.length > 0 ? ( {scenarios.map((s) => ( navigate(`/board-planning/investments/${s.id}`)} onEdit={() => { setEditScenario(s); setForm({ name: s.name, description: s.description || '' }); }} onDelete={() => deleteMutation.mutate(s.id)} /> ))} ) : (
No investment scenarios yet Create a scenario to model investment allocations, timing, and their impact on reserves and liquidity.
)} {/* Create Modal */} setCreateOpen(false)} title="New Investment Scenario"> setForm({ ...form, name: e.target.value })} placeholder="e.g. Conservative CD Ladder" />