mirror of
https://github.com/sartography/spiffworkflow-frontend.git
synced 2025-02-24 12:18:17 +00:00
updates to send query params to list endpoints in api w/ burnettk
This commit is contained in:
parent
830c30a650
commit
7ae41c2b24
@ -53,7 +53,7 @@ export default function ProcessBreadcrumb({
|
|||||||
<main style={{ padding: '1rem 0' }}>
|
<main style={{ padding: '1rem 0' }}>
|
||||||
<Breadcrumb>
|
<Breadcrumb>
|
||||||
<Breadcrumb.Item linkAs={Link} linkProps={{ to: '/admin' }}>
|
<Breadcrumb.Item linkAs={Link} linkProps={{ to: '/admin' }}>
|
||||||
Home
|
Process Groups
|
||||||
</Breadcrumb.Item>
|
</Breadcrumb.Item>
|
||||||
{processGroupBreadcrumb}
|
{processGroupBreadcrumb}
|
||||||
{processModelBreadcrumb}
|
{processModelBreadcrumb}
|
||||||
|
@ -31,5 +31,5 @@ export default function SubNavigation() {
|
|||||||
</Nav>
|
</Nav>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return <></>;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -50,3 +50,11 @@ span.bjs-crumb {
|
|||||||
width:90vw;
|
width:90vw;
|
||||||
margin:auto;
|
margin:auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.breadcrumb {
|
||||||
|
font-size: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.breadcrumb-item.active {
|
||||||
|
color: black;
|
||||||
|
}
|
||||||
|
@ -24,7 +24,7 @@ export default function ProcessGroupShow() {
|
|||||||
const processResult = (result: any) => {
|
const processResult = (result: any) => {
|
||||||
setProcessGroup(result);
|
setProcessGroup(result);
|
||||||
HttpService.makeCallToBackend({
|
HttpService.makeCallToBackend({
|
||||||
path: `/process-groups/${params.process_group_id}/process-models?per_page=${perPage}&page=${page}`,
|
path: `/process-models?process_group_identifier=${params.process_group_id}&per_page=${perPage}&page=${page}`,
|
||||||
successCallback: setProcessModelFromResult,
|
successCallback: setProcessModelFromResult,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -73,7 +73,6 @@ export default function ProcessGroupShow() {
|
|||||||
return (
|
return (
|
||||||
<main style={{ padding: '1rem 0' }}>
|
<main style={{ padding: '1rem 0' }}>
|
||||||
<ProcessBreadcrumb processGroupId={(processGroup as any).id} />
|
<ProcessBreadcrumb processGroupId={(processGroup as any).id} />
|
||||||
<h2>Process Group: {(processGroup as any).id}</h2>
|
|
||||||
<ul>
|
<ul>
|
||||||
<Stack direction="horizontal" gap={3}>
|
<Stack direction="horizontal" gap={3}>
|
||||||
<Button
|
<Button
|
||||||
|
@ -75,7 +75,6 @@ export default function ProcessGroups() {
|
|||||||
return (
|
return (
|
||||||
<main style={{ padding: '1rem 0' }}>
|
<main style={{ padding: '1rem 0' }}>
|
||||||
<ProcessBreadcrumb />
|
<ProcessBreadcrumb />
|
||||||
<h2>Process Groups</h2>
|
|
||||||
<Button href="/admin/process-groups/new">Add a process group</Button>
|
<Button href="/admin/process-groups/new">Add a process group</Button>
|
||||||
<br />
|
<br />
|
||||||
<br />
|
<br />
|
||||||
|
@ -6,7 +6,14 @@ import {
|
|||||||
useSearchParams,
|
useSearchParams,
|
||||||
} from 'react-router-dom';
|
} from 'react-router-dom';
|
||||||
|
|
||||||
import { Button, Table, Stack, Dropdown, Form } from 'react-bootstrap';
|
import {
|
||||||
|
Button,
|
||||||
|
Table,
|
||||||
|
Stack,
|
||||||
|
Dropdown,
|
||||||
|
Form,
|
||||||
|
InputGroup,
|
||||||
|
} from 'react-bootstrap';
|
||||||
// @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'reac... Remove this comment to see the full error message
|
// @ts-expect-error TS(7016) FIXME: Could not find a declaration file for module 'reac... Remove this comment to see the full error message
|
||||||
import DatePicker from 'react-datepicker';
|
import DatePicker from 'react-datepicker';
|
||||||
import { Typeahead } from 'react-bootstrap-typeahead';
|
import { Typeahead } from 'react-bootstrap-typeahead';
|
||||||
@ -45,8 +52,8 @@ export default function ProcessInstanceList() {
|
|||||||
const setErrorMessage = (useContext as any)(ErrorContext)[1];
|
const setErrorMessage = (useContext as any)(ErrorContext)[1];
|
||||||
|
|
||||||
const [processStatus, setProcessStatus] = useState(PROCESS_STATUSES[0]);
|
const [processStatus, setProcessStatus] = useState(PROCESS_STATUSES[0]);
|
||||||
const [processGroupIdentifier, setProcessGroupIdentifier] = useState([]);
|
const [processModeleSelectionOptions, setProcessModelSelectionOptions] =
|
||||||
const [processModelIdentifier, setProcessModelIdentifier] = useState(null);
|
useState([]);
|
||||||
const [processModelSelection, setProcessModelSelection] = useState<Option[]>(
|
const [processModelSelection, setProcessModelSelection] = useState<Option[]>(
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
@ -62,21 +69,19 @@ export default function ProcessInstanceList() {
|
|||||||
|
|
||||||
const parametersToGetFromSearchParams = useMemo(() => {
|
const parametersToGetFromSearchParams = useMemo(() => {
|
||||||
return {
|
return {
|
||||||
process_group_identifier: setProcessGroupIdentifier,
|
process_group_identifier: null,
|
||||||
process_model_identifier: setProcessModelIdentifier,
|
process_model_identifier: null,
|
||||||
process_status: setProcessStatus,
|
process_status: setProcessStatus,
|
||||||
};
|
};
|
||||||
}, [setProcessStatus, setProcessGroupIdentifier, setProcessModelIdentifier]);
|
}, [setProcessStatus]);
|
||||||
|
|
||||||
|
// eslint-disable-next-line sonarjs/cognitive-complexity
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
function setProcessInstancesFromResult(result: any) {
|
function setProcessInstancesFromResult(result: any) {
|
||||||
const processInstancesFromApi = result.results;
|
const processInstancesFromApi = result.results;
|
||||||
setProcessInstances(processInstancesFromApi);
|
setProcessInstances(processInstancesFromApi);
|
||||||
setPagination(result.pagination);
|
setPagination(result.pagination);
|
||||||
}
|
}
|
||||||
function processResultForProcessModels(result: any) {
|
|
||||||
getProcessInstances();
|
|
||||||
}
|
|
||||||
function getProcessInstances() {
|
function getProcessInstances() {
|
||||||
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
||||||
let queryParamString = `per_page=${perPage}&page=${page}`;
|
let queryParamString = `per_page=${perPage}&page=${page}`;
|
||||||
@ -95,9 +100,12 @@ export default function ProcessInstanceList() {
|
|||||||
(paramName: string) => {
|
(paramName: string) => {
|
||||||
if (searchParams.get(paramName)) {
|
if (searchParams.get(paramName)) {
|
||||||
// @ts-expect-error TS(7053) FIXME:
|
// @ts-expect-error TS(7053) FIXME:
|
||||||
const functionToCall = parametersToAlwaysFilterBy[paramName];
|
const functionToCall = parametersToGetFromSearchParams[paramName];
|
||||||
queryParamString += `&${paramName}=${searchParams.get(paramName)}`;
|
queryParamString += `&${paramName}=${searchParams.get(paramName)}`;
|
||||||
functionToCall(searchParams.get(paramName) || '');
|
|
||||||
|
if (functionToCall !== null) {
|
||||||
|
functionToCall(searchParams.get(paramName) || '');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
@ -106,9 +114,30 @@ export default function ProcessInstanceList() {
|
|||||||
successCallback: setProcessInstancesFromResult,
|
successCallback: setProcessInstancesFromResult,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function processResultForProcessModels(result: any) {
|
||||||
|
let processModelFullIdentifier = '';
|
||||||
|
if (
|
||||||
|
searchParams.get('process_model_identifier') &&
|
||||||
|
searchParams.get('process_group_identifier')
|
||||||
|
) {
|
||||||
|
processModelFullIdentifier = `${searchParams.get(
|
||||||
|
'process_group_identifier'
|
||||||
|
)}/${searchParams.get('process_model_identifier')}`;
|
||||||
|
}
|
||||||
|
const selectionArray = result.results.map((item: any) => {
|
||||||
|
const label = `${item.process_group_id}/${item.id}`;
|
||||||
|
Object.assign(item, { label });
|
||||||
|
if (label === processModelFullIdentifier) {
|
||||||
|
setProcessModelSelection([item]);
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
setProcessModelSelectionOptions(selectionArray);
|
||||||
|
getProcessInstances();
|
||||||
|
}
|
||||||
|
|
||||||
HttpService.makeCallToBackend({
|
HttpService.makeCallToBackend({
|
||||||
path: `/process-models`,
|
path: `/process-models?per_page=1000`,
|
||||||
successCallback: processResultForProcessModels,
|
successCallback: processResultForProcessModels,
|
||||||
});
|
});
|
||||||
}, [
|
}, [
|
||||||
@ -174,6 +203,10 @@ export default function ProcessInstanceList() {
|
|||||||
if (processStatus && processStatus !== 'all') {
|
if (processStatus && processStatus !== 'all') {
|
||||||
queryParamString += `&process_status=${processStatus}`;
|
queryParamString += `&process_status=${processStatus}`;
|
||||||
}
|
}
|
||||||
|
if (processModelSelection.length > 0) {
|
||||||
|
const currentProcessModel: any = processModelSelection[0];
|
||||||
|
queryParamString += `&process_group_identifier=${currentProcessModel.process_group_id}&process_model_identifier=${currentProcessModel.id}`;
|
||||||
|
}
|
||||||
|
|
||||||
setErrorMessage('');
|
setErrorMessage('');
|
||||||
navigate(`/admin/process-instances?${queryParamString}`);
|
navigate(`/admin/process-instances?${queryParamString}`);
|
||||||
@ -215,16 +248,34 @@ export default function ProcessInstanceList() {
|
|||||||
Object.keys(parametersToGetFromSearchParams).forEach(
|
Object.keys(parametersToGetFromSearchParams).forEach(
|
||||||
(paramName: string) => {
|
(paramName: string) => {
|
||||||
if (searchParams.get(paramName)) {
|
if (searchParams.get(paramName)) {
|
||||||
// @ts-expect-error TS(7053) FIXME:
|
|
||||||
const functionToCall = parametersToAlwaysFilterBy[paramName];
|
|
||||||
queryParamString += `&${paramName}=${searchParams.get(paramName)}`;
|
queryParamString += `&${paramName}=${searchParams.get(paramName)}`;
|
||||||
functionToCall(searchParams.get(paramName) || '');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
return queryParamString;
|
return queryParamString;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const processModelSearch = () => {
|
||||||
|
return (
|
||||||
|
<Form.Group>
|
||||||
|
<InputGroup>
|
||||||
|
<InputGroup.Text className="text-nowrap">
|
||||||
|
Process Model:{' '}
|
||||||
|
</InputGroup.Text>
|
||||||
|
<Typeahead
|
||||||
|
style={{ width: 500 }}
|
||||||
|
id="process-model-selection"
|
||||||
|
labelKey="label"
|
||||||
|
onChange={setProcessModelSelection}
|
||||||
|
options={processModeleSelectionOptions}
|
||||||
|
placeholder="Choose a process model..."
|
||||||
|
selected={processModelSelection}
|
||||||
|
/>
|
||||||
|
</InputGroup>
|
||||||
|
</Form.Group>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const filterOptions = () => {
|
const filterOptions = () => {
|
||||||
const processStatusesRows = PROCESS_STATUSES.map((processStatusOption) => {
|
const processStatusesRows = PROCESS_STATUSES.map((processStatusOption) => {
|
||||||
if (processStatusOption === processStatus) {
|
if (processStatusOption === processStatus) {
|
||||||
@ -248,8 +299,11 @@ export default function ProcessInstanceList() {
|
|||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col">
|
<div className="col">
|
||||||
{processModelSearch()}
|
|
||||||
<form onSubmit={handleFilter}>
|
<form onSubmit={handleFilter}>
|
||||||
|
<Stack direction="horizontal" gap={3}>
|
||||||
|
{processModelSearch()}
|
||||||
|
</Stack>
|
||||||
|
<br />
|
||||||
<Stack direction="horizontal" gap={3}>
|
<Stack direction="horizontal" gap={3}>
|
||||||
{dateComponent(
|
{dateComponent(
|
||||||
'Start Range: ',
|
'Start Range: ',
|
||||||
@ -290,48 +344,6 @@ export default function ProcessInstanceList() {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
const processModelSearch = () => {
|
|
||||||
const options = [
|
|
||||||
{
|
|
||||||
label: 'Alabama',
|
|
||||||
population: 4780127,
|
|
||||||
capital: 'Montgomery',
|
|
||||||
region: 'South',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Alaska',
|
|
||||||
population: 710249,
|
|
||||||
capital: 'Juneau',
|
|
||||||
region: 'West',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Arizona',
|
|
||||||
population: 6392307,
|
|
||||||
capital: 'Phoenix',
|
|
||||||
region: 'West',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: 'Arkansas',
|
|
||||||
population: 2915958,
|
|
||||||
capital: 'Little Rock',
|
|
||||||
region: 'South',
|
|
||||||
},
|
|
||||||
];
|
|
||||||
return (
|
|
||||||
<Form.Group>
|
|
||||||
<Form.Label>Single Selection</Form.Label>
|
|
||||||
<Typeahead
|
|
||||||
id="basic-typeahead-single"
|
|
||||||
labelKey="label"
|
|
||||||
onChange={setProcessModelSelection}
|
|
||||||
options={options}
|
|
||||||
placeholder="Choose a state..."
|
|
||||||
selected={processModelSelection}
|
|
||||||
/>
|
|
||||||
</Form.Group>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const buildTable = () => {
|
const buildTable = () => {
|
||||||
const rows = processInstances.map((row: any) => {
|
const rows = processInstances.map((row: any) => {
|
||||||
const formattedStartDate =
|
const formattedStartDate =
|
||||||
@ -394,7 +406,7 @@ export default function ProcessInstanceList() {
|
|||||||
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
const { page, perPage } = getPageInfoFromSearchParams(searchParams);
|
||||||
return (
|
return (
|
||||||
<main style={{ padding: '1rem 0' }}>
|
<main style={{ padding: '1rem 0' }}>
|
||||||
<h2>Process Instances for {params.process_model_id}</h2>
|
<h2>Process Instances</h2>
|
||||||
{filterOptions()}
|
{filterOptions()}
|
||||||
<PaginationForTable
|
<PaginationForTable
|
||||||
page={page}
|
page={page}
|
||||||
|
@ -130,9 +130,9 @@ export default function ProcessModelShow() {
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<Link
|
<Link
|
||||||
to={`/admin/process-models/${
|
to={`/admin/process-instances?process_group_identifier=${
|
||||||
(processModel as any).process_group_id
|
(processModel as any).process_group_id
|
||||||
}/${(processModel as any).id}/process-instances`}
|
}&process_model_identifier=${(processModel as any).id}`}
|
||||||
data-qa="process-instance-list-link"
|
data-qa="process-instance-list-link"
|
||||||
>
|
>
|
||||||
List
|
List
|
||||||
@ -201,10 +201,6 @@ export default function ProcessModelShow() {
|
|||||||
processGroupId={(processModel as any).process_group_id}
|
processGroupId={(processModel as any).process_group_id}
|
||||||
processModelId={(processModel as any).id}
|
processModelId={(processModel as any).id}
|
||||||
/>
|
/>
|
||||||
<Stack direction="horizontal" gap={3}>
|
|
||||||
<h2>Process Model: {(processModel as any).display_name}</h2>
|
|
||||||
<span>({(processModel as any).id})</span>
|
|
||||||
</Stack>
|
|
||||||
{processInstanceResultTag}
|
{processInstanceResultTag}
|
||||||
<FileInput
|
<FileInput
|
||||||
processModelId={(processModel as any).id}
|
processModelId={(processModel as any).id}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user