From e5c1ccb60da8603364d98ac81c2b348d5fbb0755 Mon Sep 17 00:00:00 2001 From: Jon Herron Date: Mon, 28 Nov 2022 13:47:41 -0500 Subject: [PATCH] Save as report component --- .../ProcessInstanceListSaveAsReport.tsx | 86 +++++++++++++++++++ .../components/ProcessInstanceListTable.tsx | 14 +++ 2 files changed, 100 insertions(+) create mode 100644 spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx diff --git a/spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx b/spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx new file mode 100644 index 00000000..a642d4f9 --- /dev/null +++ b/spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx @@ -0,0 +1,86 @@ +import { useState } from 'react'; +// TODO: carbon controls +/* +import { + Button, + Textbox, + // @ts-ignore +} from '@carbon/react'; +*/ +import HttpService from '../services/HttpService'; + +type OwnProps = { + onSuccess: (..._args: any[]) => any; + columns: string; + orderBy: string; + filterBy: string; + buttonText?: string; +}; + +export default function ProcessInstanceListSaveAsReport({ + onSuccess, + columns, + orderBy, + filterBy, + buttonText = 'Save as New Perspective', +}: OwnProps) { + const [identifier, setIdentifier] = useState(''); + + const hasIdentifier = () => { + return identifier?.length > 0; + }; + + const addProcessInstanceReport = (event: any) => { + event.preventDefault(); + + const columnArray = columns.split(',').map((column) => { + return { Header: column, accessor: column }; + }); + const orderByArray = orderBy.split(',').filter((n) => n); + + const filterByArray = filterBy + .split(',') + .map((filterByItem) => { + const [fieldName, fieldValue] = filterByItem.split('='); + if (fieldValue) { + return { + field_name: fieldName, + operator: 'equals', + field_value: fieldValue, + }; + } + return null; + }) + .filter((n) => n); + + HttpService.makeCallToBackend({ + path: `/process-instances/reports`, + successCallback: onSuccess, + httpMethod: 'POST', + postBody: { + identifier, + report_metadata: { + columns: columnArray, + order_by: orderByArray, + filter_by: filterByArray, + }, + }, + }); + }; + + return ( +
+ + +
+ ); +} diff --git a/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx b/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx index bd060af6..769bfea7 100644 --- a/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx +++ b/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx @@ -52,6 +52,7 @@ import { } from '../interfaces'; import ProcessModelSearch from './ProcessModelSearch'; import ProcessInstanceReportSearch from './ProcessInstanceReportSearch'; +import ProcessInstanceListSaveAsReport from './ProcessInstanceListSaveAsReport'; const REFRESH_INTERVAL = 5; const REFRESH_TIMEOUT = 600; @@ -764,6 +765,18 @@ export default function ProcessInstanceListTable({ return null; }; + const saveAsReportComponent = () => { + const callback = (_: any) => {}; + return ( + + ); + }; + const filterComponent = () => { if (!filtersEnabled) { return null; @@ -788,6 +801,7 @@ export default function ProcessInstanceListTable({ {filterOptions()} + {saveAsReportComponent()} ); };