diff --git a/spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx b/spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx index 77e2ac37..d23daed0 100644 --- a/spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx +++ b/spiffworkflow-frontend/src/components/ProcessInstanceListSaveAsReport.tsx @@ -16,6 +16,10 @@ type OwnProps = { orderBy: string; processModelSelection: ProcessModel | null; processStatusSelection: string[]; + startFromSeconds: string | null; + startToSeconds: string | null; + endFromSeconds: string | null; + endToSeconds: string | null; buttonText?: string; }; @@ -25,6 +29,10 @@ export default function ProcessInstanceListSaveAsReport({ orderBy, processModelSelection, processStatusSelection, + startFromSeconds, + startToSeconds, + endFromSeconds, + endToSeconds, buttonText = 'Save as Perspective', }: OwnProps) { const [identifier, setIdentifier] = useState(''); @@ -54,6 +62,34 @@ export default function ProcessInstanceListSaveAsReport({ }); } + if (startFromSeconds) { + filterByArray.push({ + field_name: 'start_from', + field_value: startFromSeconds, + }); + } + + if (startToSeconds) { + filterByArray.push({ + field_name: 'start_to', + field_value: startToSeconds, + }); + } + + if (endFromSeconds) { + filterByArray.push({ + field_name: 'end_from', + field_value: endFromSeconds, + }); + } + + if (endToSeconds) { + filterByArray.push({ + field_name: 'end_to', + field_value: endToSeconds, + }); + } + HttpService.makeCallToBackend({ path: `/process-instances/reports`, successCallback: onSuccess, diff --git a/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx b/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx index 9ad23ac3..32674a05 100644 --- a/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx +++ b/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx @@ -367,16 +367,7 @@ export default function ProcessInstanceListTable({ } }; - const applyFilter = (event: any) => { - event.preventDefault(); - const { page, perPage } = getPageInfoFromSearchParams( - searchParams, - undefined, - undefined, - paginationQueryParamPrefix - ); - let queryParamString = `per_page=${perPage}&page=${page}&user_filter=true`; - + const calculateStartAndEndSeconds = () => { const startFromSeconds = convertDateAndTimeStringsToSeconds( startFromDate, startFromTime || '00:00:00' @@ -393,28 +384,59 @@ export default function ProcessInstanceListTable({ endToDate, endToTime || '00:00:00' ); + let valid = true; if (isTrueComparison(startFromSeconds, '>', startToSeconds)) { setErrorMessage({ message: '"Start date from" cannot be after "start date to"', }); - return; + valid = false; } if (isTrueComparison(endFromSeconds, '>', endToSeconds)) { setErrorMessage({ message: '"End date from" cannot be after "end date to"', }); - return; + valid = false; } if (isTrueComparison(startFromSeconds, '>', endFromSeconds)) { setErrorMessage({ message: '"Start date from" cannot be after "end date from"', }); - return; + valid = false; } if (isTrueComparison(startToSeconds, '>', endToSeconds)) { setErrorMessage({ message: '"Start date to" cannot be after "end date to"', }); + valid = false; + } + + return { + valid, + startFromSeconds, + startToSeconds, + endFromSeconds, + endToSeconds, + }; + }; + + const applyFilter = (event: any) => { + event.preventDefault(); + const { page, perPage } = getPageInfoFromSearchParams( + searchParams, + undefined, + undefined, + paginationQueryParamPrefix + ); + let queryParamString = `per_page=${perPage}&page=${page}&user_filter=true`; + const { + valid, + startFromSeconds, + startToSeconds, + endFromSeconds, + endToSeconds, + } = calculateStartAndEndSeconds(); + + if (!valid) { return; } @@ -772,6 +794,17 @@ export default function ProcessInstanceListTable({ const saveAsReportComponent = () => { // TODO onSuccess reload/select the new report in the report search const callback = (_: any) => {}; + const { + valid, + startFromSeconds, + startToSeconds, + endFromSeconds, + endToSeconds, + } = calculateStartAndEndSeconds(); + + if (!valid) { + return null; + } return ( ); };