import { useEffect, useState } from 'react'; import { ComboBox, Stack, FormLabel, // @ts-ignore } from '@carbon/react'; import { useSearchParams } from 'react-router-dom'; import { truncateString } from '../helpers'; import { ProcessInstanceReport } from '../interfaces'; import HttpService from '../services/HttpService'; type OwnProps = { onChange: (..._args: any[]) => any; selectedItem?: ProcessInstanceReport | null; titleText?: string; }; export default function ProcessInstanceReportSearch({ selectedItem, onChange, titleText = 'Process instance perspectives', }: OwnProps) { const [processInstanceReports, setProcessInstanceReports] = useState< ProcessInstanceReport[] | null >(null); const [searchParams] = useSearchParams(); const reportId = searchParams.get('report_id'); useEffect(() => { function setProcessInstanceReportsFromResult( result: ProcessInstanceReport[] ) { setProcessInstanceReports(result); } HttpService.makeCallToBackend({ path: `/process-instances/reports`, successCallback: setProcessInstanceReportsFromResult, }); }, [reportId]); const reportSelectionString = ( processInstanceReport: ProcessInstanceReport ) => { return `${truncateString(processInstanceReport.identifier, 20)} (Id: ${ processInstanceReport.id })`; }; const shouldFilterProcessInstanceReport = (options: any) => { const processInstanceReport: ProcessInstanceReport = options.item; const { inputValue } = options; return reportSelectionString(processInstanceReport).includes(inputValue); }; const reportsAvailable = () => { return processInstanceReports && processInstanceReports.length > 0; }; if (reportsAvailable()) { return ( {titleText} { if (processInstanceReport) { return reportSelectionString(processInstanceReport); } return null; }} shouldFilterItem={shouldFilterProcessInstanceReport} placeholder="Choose a process instance perspective" selectedItem={selectedItem} /> ); } return null; }