import { useEffect, useState } from 'react'; import { Link, useNavigate, useSearchParams } from 'react-router-dom'; import { Button, Form, InputGroup, Table } from 'react-bootstrap'; import { Typeahead } from 'react-bootstrap-typeahead'; import { Option } from 'react-bootstrap-typeahead/types/types'; import ProcessBreadcrumb from '../components/ProcessBreadcrumb'; import PaginationForTable from '../components/PaginationForTable'; import HttpService from '../services/HttpService'; import { getPageInfoFromSearchParams } from '../helpers'; import { ProcessModel } from '../interfaces'; // Example process group json // {'process_group_id': 'sure', 'display_name': 'Test Workflows', 'id': 'test_process_group'} export default function ProcessGroupList() { const navigate = useNavigate(); const [searchParams] = useSearchParams(); const [processGroups, setProcessGroups] = useState([]); const [pagination, setPagination] = useState(null); const [processModeleSelectionOptions, setProcessModelSelectionOptions] = useState([]); useEffect(() => { const setProcessGroupsFromResult = (result: any) => { setProcessGroups(result.results); setPagination(result.pagination); }; const processResultForProcessModels = (result: any) => { const selectionArray = result.results.map((item: any) => { const label = `${item.process_group_id}/${item.id}`; Object.assign(item, { label }); return item; }); setProcessModelSelectionOptions(selectionArray); }; const { page, perPage } = getPageInfoFromSearchParams(searchParams); // for browsing HttpService.makeCallToBackend({ path: `/process-groups?per_page=${perPage}&page=${page}`, successCallback: setProcessGroupsFromResult, }); // for search box HttpService.makeCallToBackend({ path: `/process-models?per_page=1000`, successCallback: processResultForProcessModels, }); }, [searchParams]); const buildTable = () => { const rows = processGroups.map((row) => { return ( {(row as any).display_name} ); }); return ( {rows}
Process Group
); }; const processGroupsDisplayArea = () => { const { page, perPage } = getPageInfoFromSearchParams(searchParams); let displayText = null; if (processGroups?.length > 0) { displayText = ( <>

Browse

); } else { displayText =

No Groups To Display

; } return displayText; }; const processModelSearchArea = () => { const processModelSearchOnChange = (selected: Option[]) => { const processModel = selected[0] as ProcessModel; navigate( `/admin/process-models/${processModel.process_group_id}/${processModel.id}` ); }; return (

Search

Process Model:{' '}
); }; if (pagination) { return ( <>

{processModelSearchArea()}
{processGroupsDisplayArea()} ); } return null; }