diff --git a/bin/run_pyl b/bin/run_pyl
index 64446662a..bceba187b 100755
--- a/bin/run_pyl
+++ b/bin/run_pyl
@@ -38,12 +38,19 @@ function run_fix_docstrings() {
}
function run_autoflake() {
- if ! command -v autoflake8 >/dev/null ; then
+ # checking command -v autoflake8 is not good enough, since the asdf shim may be installed, which will make command -v succeed,
+ # but autoflake8 may not have been pip installed inside the correct version of python.
+ if ! autoflake8 --help >/dev/null ; then
pip install autoflake8
asdf reshim python
fi
- if ! command -v autopep8 >/dev/null ; then
+ if ! autoflake --help >/dev/null ; then
+ pip install autoflake
+ asdf reshim python
+ fi
+
+ if ! autopep8 --help >/dev/null ; then
pip install autopep8
asdf reshim python
fi
diff --git a/spiffworkflow-frontend/src/components/ProcessInstanceListTabs.tsx b/spiffworkflow-frontend/src/components/ProcessInstanceListTabs.tsx
new file mode 100644
index 000000000..8da9d8c1a
--- /dev/null
+++ b/spiffworkflow-frontend/src/components/ProcessInstanceListTabs.tsx
@@ -0,0 +1,63 @@
+// @ts-ignore
+import { Tabs, TabList, Tab } from '@carbon/react';
+import { Can } from '@casl/react';
+import { useNavigate } from 'react-router-dom';
+import { usePermissionFetcher } from '../hooks/PermissionService';
+import { useUriListForPermissions } from '../hooks/UriListForPermissions';
+import { PermissionsToCheck } from '../interfaces';
+
+type OwnProps = {
+ variant: string;
+};
+
+export default function ProcessInstanceListTabs({ variant }: OwnProps) {
+ const navigate = useNavigate();
+ const { targetUris } = useUriListForPermissions();
+ const permissionRequestData: PermissionsToCheck = {
+ [targetUris.processInstanceListPath]: ['GET'],
+ };
+ const { ability } = usePermissionFetcher(permissionRequestData);
+
+ let selectedTabIndex = 0;
+ if (variant === 'all') {
+ selectedTabIndex = 1;
+ } else if (variant === 'find-by-id') {
+ selectedTabIndex = 2;
+ }
+
+ return (
+
+
+ {
+ navigate('/admin/process-instances/for-me');
+ }}
+ >
+ For Me
+
+
+ {
+ navigate('/admin/process-instances/all');
+ }}
+ >
+ All
+
+
+ {
+ navigate('/admin/process-instances/find-by-id');
+ }}
+ >
+ Find By Id
+
+
+
+ );
+}
diff --git a/spiffworkflow-frontend/src/routes/ProcessInstanceFindById.tsx b/spiffworkflow-frontend/src/routes/ProcessInstanceFindById.tsx
index e55520ef6..0c0c1974e 100644
--- a/spiffworkflow-frontend/src/routes/ProcessInstanceFindById.tsx
+++ b/spiffworkflow-frontend/src/routes/ProcessInstanceFindById.tsx
@@ -4,6 +4,7 @@ import { useNavigate } from 'react-router-dom';
import { Button, ButtonSet, Form, Stack, TextInput } from '@carbon/react';
import { isInteger, modifyProcessIdentifierForPathParam } from '../helpers';
import HttpService from '../services/HttpService';
+import ProcessInstanceListTabs from '../components/ProcessInstanceListTabs';
import { ProcessInstance } from '../interfaces';
export default function ProcessInstanceFindById() {
@@ -69,11 +70,15 @@ export default function ProcessInstanceFindById() {
};
return (
-
+ <>
+
+
+
+ >
);
}
diff --git a/spiffworkflow-frontend/src/routes/ProcessInstanceList.tsx b/spiffworkflow-frontend/src/routes/ProcessInstanceList.tsx
index 33af0c1fb..ca69eb7d3 100644
--- a/spiffworkflow-frontend/src/routes/ProcessInstanceList.tsx
+++ b/spiffworkflow-frontend/src/routes/ProcessInstanceList.tsx
@@ -1,18 +1,13 @@
-import { useNavigate, useSearchParams } from 'react-router-dom';
+import { useSearchParams } from 'react-router-dom';
import 'react-datepicker/dist/react-datepicker.css';
import 'react-bootstrap-typeahead/css/Typeahead.css';
import 'react-bootstrap-typeahead/css/Typeahead.bs5.css';
-// @ts-ignore
-import { Tabs, TabList, Tab } from '@carbon/react';
-import { Can } from '@casl/react';
import ProcessBreadcrumb from '../components/ProcessBreadcrumb';
import ProcessInstanceListTable from '../components/ProcessInstanceListTable';
import { getProcessModelFullIdentifierFromSearchParams } from '../helpers';
-import { useUriListForPermissions } from '../hooks/UriListForPermissions';
-import { PermissionsToCheck } from '../interfaces';
-import { usePermissionFetcher } from '../hooks/PermissionService';
+import ProcessInstanceListTabs from '../components/ProcessInstanceListTabs';
type OwnProps = {
variant: string;
@@ -20,13 +15,6 @@ type OwnProps = {
export default function ProcessInstanceList({ variant }: OwnProps) {
const [searchParams] = useSearchParams();
- const navigate = useNavigate();
-
- const { targetUris } = useUriListForPermissions();
- const permissionRequestData: PermissionsToCheck = {
- [targetUris.processInstanceListPath]: ['GET'],
- };
- const { ability } = usePermissionFetcher(permissionRequestData);
const processInstanceBreadcrumbElement = () => {
const processModelFullIdentifier =
@@ -57,45 +45,9 @@ export default function ProcessInstanceList({ variant }: OwnProps) {
return My Process Instances
;
};
- let selectedTabIndex = 0;
- if (variant === 'all') {
- selectedTabIndex = 1;
- }
return (
<>
-
-
- {
- navigate('/admin/process-instances/for-me');
- }}
- >
- For Me
-
-
- {
- navigate('/admin/process-instances/all');
- }}
- >
- All
-
-
- {
- navigate('/admin/process-instances/find-by-id');
- }}
- >
- Find By Id
-
-
-
+
{processInstanceBreadcrumbElement()}
{processInstanceTitleElement()}