diff --git a/src/components/dashboard/AdvancedSearch.tsx b/src/components/dashboard/AdvancedSearch.tsx index 8ea833f2..98621850 100644 --- a/src/components/dashboard/AdvancedSearch.tsx +++ b/src/components/dashboard/AdvancedSearch.tsx @@ -919,7 +919,7 @@ export default function AdvancedSearch() { )} - {/* end keyword search bar */} + {/* Search Results */} {!semanticMode && searchResults && ( diff --git a/src/components/dashboard/CustomReports.tsx b/src/components/dashboard/CustomReports.tsx index 5c90ae5c..e7eb2d6a 100644 --- a/src/components/dashboard/CustomReports.tsx +++ b/src/components/dashboard/CustomReports.tsx @@ -18,10 +18,14 @@ import { createReportSchedule, exportReportAsCsv, exportReportAsJson, + getAllReportTemplates, getNextRunPreview, getReportTemplate, + loadSavedReportTemplates, + parseNaturalLanguageRequest, REPORT_COMPONENT_PALETTE, REPORT_TEMPLATES, + saveReportTemplate, transformReportData, type ReportComponentDefinition, type ReportResource, @@ -80,9 +84,15 @@ export default function CustomReports({ analytics }: CustomReportsProps) { const [email, setEmail] = useState(""); const [webhookUrl, setWebhookUrl] = useState(""); const [components, setComponents] = useState(REPORT_TEMPLATES[0].components); + const [requestText, setRequestText] = useState("Create a weekly account activity report for GABC with emphasis on risks and fees"); + const [savedTemplates, setSavedTemplates] = useState(loadSavedReportTemplates()); const template = getReportTemplate(templateId); - const reportData = useMemo(() => transformReportData(template.id, analytics || {}), [analytics, template.id]); + const parsedRequest = useMemo(() => parseNaturalLanguageRequest(requestText), [requestText]); + const reportData = useMemo( + () => transformReportData(template.id, analytics || {}, { focusAreas: parsedRequest.focusAreas, request: parsedRequest.prompt }), + [analytics, parsedRequest.focusAreas, parsedRequest.prompt, template.id], + ); const query = useMemo( () => buildHorizonQuery({ @@ -118,6 +128,27 @@ export default function CustomReports({ analytics }: CustomReportsProps) { setComponents(nextTemplate.components); }; + const handleRequestApply = () => { + const nextTemplate = getReportTemplate(parsedRequest.templateId); + setTemplateId(nextTemplate.id); + setResource(nextTemplate.resource); + setAccountId(parsedRequest.accountId || accountId); + setComponents(nextTemplate.components); + }; + + const handleSaveTemplate = () => { + const saved = saveReportTemplate({ + ...template, + id: `${template.id}-saved-${Date.now()}`, + name: `${template.name} (Saved)`, + description: `${template.description} Saved from the dashboard.`, + category: template.category || "custom", + tags: [...(template.tags || []), "saved"], + }); + setSavedTemplates(loadSavedReportTemplates()); + return saved; + }; + const handleDrop = (event: React.DragEvent) => { event.preventDefault(); const droppedId = event.dataTransfer.getData("application/report-component"); @@ -164,6 +195,9 @@ export default function CustomReports({ analytics }: CustomReportsProps) {
+ @@ -181,7 +215,7 @@ export default function CustomReports({ analytics }: CustomReportsProps) { +