diff --git a/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx b/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx index 083ce8750..1652ca366 100644 --- a/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx +++ b/spiffworkflow-frontend/src/components/ProcessInstanceListTable.tsx @@ -269,8 +269,30 @@ export default function ProcessInstanceListTable({ }; // eslint-disable-next-line react-hooks/exhaustive-deps }, []); + function setProcessInstancesFromResult(result: any) { + setRequiresRefilter(false); + const processInstancesFromApi = result.results; + setProcessInstances(processInstancesFromApi); + setPagination(result.pagination); + setProcessInstanceFilters(result.filters); + + setReportMetadata(result.report.report_metadata); + if (result.report.id) { + setProcessInstanceReportSelection(result.report); + } + // searchParams.set('key', result.hash); + // setSearchParams(searchParams); + } const clearRefreshRef = useRef(null); + const stopRefreshing = (error: any) => { + if (clearRefreshRef.current) { + clearRefreshRef.current(); + } + if (error) { + console.error(error); + } + }; // eslint-disable-next-line sonarjs/cognitive-complexity useEffect(() => { @@ -428,24 +450,28 @@ export default function ProcessInstanceListTable({ queryParamString += `&${additionalParams}`; } - HttpService.makeCallToBackend({ - path: `${processInstanceApiSearchPath}?${queryParamString}`, - successCallback: setProcessInstancesFromResult, - httpMethod: 'POST', - failureCallback: stopRefreshing, - onUnauthorized: stopRefreshing, - postBody: { - report_metadata: postBody, - // report_metadata: { - // filter_by: [ - // { - // field_name: 'process_model_identifier', - // field_value: 'example/with-milestones', - // }, - // ], - // }, - }, - }); + const reportMetadataBase64 = searchParams.get('report_metadata_base64'); + if (reportMetadataBase64) { + const reportMetadata = JSON.parse(decodeBase64(reportMetadataBase64)) + HttpService.makeCallToBackend({ + path: `${processInstanceApiSearchPath}?${queryParamString}`, + successCallback: setProcessInstancesFromResult, + httpMethod: 'POST', + failureCallback: stopRefreshing, + onUnauthorized: stopRefreshing, + postBody: { + report_metadata: reportMetadata, + // report_metadata: { + // filter_by: [ + // { + // field_name: 'process_model_identifier', + // field_value: 'example/with-milestones', + // }, + // ], + // }, + }, + }); + } } function processResultForProcessModels(result: any) { const processModelFullIdentifierFromSearchParams = @@ -660,7 +686,10 @@ export default function ProcessInstanceListTable({ }; const reportColumns = () => { - return (reportMetadata as any).columns; + if (reportMetadata) { + return (reportMetadata as any).columns; + } + return null; }; const reportFilterBy = () => { @@ -674,6 +703,19 @@ export default function ProcessInstanceListTable({ navigate(`${processInstanceListPathPrefix}?${queryParamString}`); }; + const addFieldValueToReportMetadata = ( + postBody: ReportMetadata, + fieldName: string, + fieldValue: string + ) => { + if (fieldValue) { + postBody.filter_by.push({ + field_name: fieldName, + field_value: fieldValue, + }); + } + }; + const applyFilter = (event: any) => { event.preventDefault(); setProcessInitiatorNotFoundErrorText(''); @@ -685,7 +727,7 @@ export default function ProcessInstanceListTable({ paginationQueryParamPrefix ); // let queryParamString = `per_page=${perPage}&page=${page}&user_filter=true`; - let queryParamString = `per_page=${perPage}&page=${page}`; + const queryParamString = `per_page=${perPage}&page=${page}`; const { valid, startFromSeconds, @@ -713,60 +755,94 @@ export default function ProcessInstanceListTable({ // {"field_name": "has_terminal_status", "field_value": "true"}, // ], // "order_by": ["-start_in_seconds", "-id"], + const postBody: ReportMetadata = { + columns: [], + filter_by: [], + order_by: [], + }; - // const postBody = {}; - - if (startFromSeconds) { - queryParamString += `&start_from=${startFromSeconds}`; - } - if (startToSeconds) { - queryParamString += `&start_to=${startToSeconds}`; - } - if (endFromSeconds) { - queryParamString += `&end_from=${endFromSeconds}`; - } - if (endToSeconds) { - queryParamString += `&end_to=${endToSeconds}`; - } + addFieldValueToReportMetadata(postBody, 'start_from', startFromSeconds); + addFieldValueToReportMetadata(postBody, 'start_to', startToSeconds); + addFieldValueToReportMetadata(postBody, 'end_from', endFromSeconds); + addFieldValueToReportMetadata(postBody, 'end_to', endToSeconds); if (processStatusSelection.length > 0) { - queryParamString += `&process_status=${processStatusSelection}`; + addFieldValueToReportMetadata( + postBody, + 'process_status', + processStatusSelection.join(',') + ); } if (processModelSelection) { - queryParamString += `&process_model_identifier=${processModelSelection.id}`; + addFieldValueToReportMetadata( + postBody, + 'process_model_identifier', + processModelSelection.id + ); } if (processInstanceReportSelection) { - queryParamString += `&report_id=${processInstanceReportSelection.id}`; + addFieldValueToReportMetadata( + postBody, + 'report_id', + processInstanceReportSelection.id.toString() + ); } - const reportColumnsBase64 = encodeBase64(JSON.stringify(reportColumns())); - queryParamString += `&report_columns=${reportColumnsBase64}`; - const reportFilterByBase64 = encodeBase64(JSON.stringify(reportFilterBy())); - queryParamString += `&report_filter_by=${reportFilterByBase64}`; + // console.log('reportColumns()', reportColumns()) + // const reportColumnsBase64 = encodeBase64(JSON.stringify(reportColumns())); + // queryParamString += `&report_columns=${reportColumnsBase64}`; + postBody.columns = reportColumns(); + // console.log('reportFilterBy()', reportFilterBy()) + // const reportFilterByBase64 = encodeBase64(JSON.stringify(reportFilterBy())); + // queryParamString += `&report_filter_by=${reportFilterByBase64}`; if (processInitiatorSelection) { - queryParamString += `&process_initiator_username=${processInitiatorSelection.username}`; - navigateToNewReport(queryParamString); - } else if (processInitiatorText) { - HttpService.makeCallToBackend({ - path: targetUris.userExists, - httpMethod: 'POST', - postBody: { username: processInitiatorText }, - successCallback: (result: any) => { - if (result.user_found) { - queryParamString += `&process_initiator_username=${processInitiatorText}`; - navigateToNewReport(queryParamString); - } else { - setProcessInitiatorNotFoundErrorText( - `The provided username is invalid. Please type the exact username.` - ); - } - }, - }); - } else { - navigateToNewReport(queryParamString); + // queryParamString += `&process_initiator_username=${processInitiatorSelection.username}`; + addFieldValueToReportMetadata( + postBody, + 'process_initiator_username', + processInitiatorSelection.username + ); + // navigateToNewReport(queryParamString); } + // } else if (processInitiatorText) { + // HttpService.makeCallToBackend({ + // path: targetUris.userExists, + // httpMethod: 'POST', + // postBody: { username: processInitiatorText }, + // successCallback: (result: any) => { + // if (result.user_found) { + // queryParamString += `&process_initiator_username=${processInitiatorText}`; + // // navigateToNewReport(queryParamString); + // } else { + // setProcessInitiatorNotFoundErrorText( + // `The provided username is invalid. Please type the exact username.` + // ); + // } + // }, + // }); + // } else { + // navigateToNewReport(queryParamString); + // } + + // http://localhost:7001/admin/process-instances/for-me?per_page=50&page=1&report_metadata_base64=eyJjb2x1bW5zIjpudWxsLCJmaWx0ZXJfYnkiOlt7ImZpZWxkX25hbWUiOiJwcm9jZXNzX3N0YXR1cyIsImZpZWxkX3ZhbHVlIjoiY29tcGxldGUifV0sIm9yZGVyX2J5IjpbXX0%3D + // const queryParamString = `per_page=${perPage}&page=${page}`; + searchParams.set('per_page', perPage.toString()); + searchParams.set('page', page.toString()); + const reportMetadataBase64 = encodeBase64(JSON.stringify(postBody)); + searchParams.set('report_metadata_base64', reportMetadataBase64); + setSearchParams(searchParams); + HttpService.makeCallToBackend({ + path: `${processInstanceApiSearchPath}?${queryParamString}`, + httpMethod: 'POST', + postBody: { report_metadata: postBody }, + failureCallback: stopRefreshing, + onUnauthorized: stopRefreshing, + successCallback: (result: any) => { + setProcessInstancesFromResult(result); + }, + }); }; const dateComponent = ( @@ -1609,6 +1685,7 @@ export default function ProcessInstanceListTable({ return null; }; + let resultsTable = null; if (pagination && (!textToShowIfEmpty || pagination.total > 0)) { // eslint-disable-next-line prefer-const let { page, perPage } = getPageInfoFromSearchParams( @@ -1630,7 +1707,7 @@ export default function ProcessInstanceListTable({

); } - const resultsTable = ( + resultsTable = ( <> {refilterTextComponent} ); - return ( - <> - {reportColumnForm()} - {processInstanceReportSaveTag()} - - {resultsTable} - - ); - } - if (textToShowIfEmpty) { - return ( + } else if (textToShowIfEmpty) { + resultsTable = (

{textToShowIfEmpty}

); } - return null; + return ( + <> + {reportColumnForm()} + {processInstanceReportSaveTag()} + + {resultsTable} + + ); }