From 8463b2cda9ae66346c631cafa317b58daa16c5f0 Mon Sep 17 00:00:00 2001 From: jasquat Date: Thu, 23 Feb 2023 17:07:53 -0500 Subject: [PATCH] removed task-data endpoints since we no longer need them w/ burnettk --- .../src/spiffworkflow_backend/api.yml | 41 ------------------ .../routes/process_instances_controller.py | 20 --------- .../integration/test_process_api.py | 10 ++++- .../src/hooks/UriListForPermissions.tsx | 2 +- .../src/routes/ProcessInstanceShow.tsx | 43 ++++++++++++++----- 5 files changed, 41 insertions(+), 75 deletions(-) diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/api.yml b/spiffworkflow-backend/src/spiffworkflow_backend/api.yml index d472d814..b9b7a9e3 100755 --- a/spiffworkflow-backend/src/spiffworkflow_backend/api.yml +++ b/spiffworkflow-backend/src/spiffworkflow_backend/api.yml @@ -1518,47 +1518,6 @@ paths: items: $ref: "#/components/schemas/Task" - /task-data/{modified_process_model_identifier}/{process_instance_id}: - parameters: - - name: modified_process_model_identifier - in: path - required: true - description: The modified id of an existing process model - schema: - type: string - - name: process_instance_id - in: path - required: true - description: The unique id of an existing process instance. - schema: - type: integer - - name: all_tasks - in: query - required: false - description: If true, this wil return all tasks associated with the process instance and not just user tasks. - schema: - type: boolean - - name: spiff_step - in: query - required: false - description: If set will return the tasks as they were during a specific step of execution. - schema: - type: integer - get: - tags: - - Process Instances - operationId: spiffworkflow_backend.routes.process_instances_controller.process_instance_task_list_with_task_data - summary: returns the list of all user tasks associated with process instance with the task data - responses: - "200": - description: list of tasks - content: - application/json: - schema: - type: array - items: - $ref: "#/components/schemas/Task" - /task-data/{modified_process_model_identifier}/{process_instance_id}/{spiff_step}: parameters: - name: modified_process_model_identifier diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py index d0df1a93..6234c645 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/routes/process_instances_controller.py @@ -514,7 +514,6 @@ def process_instance_task_list_without_task_data_for_me( process_instance, all_tasks, spiff_step, - get_task_data=False, ) @@ -531,24 +530,6 @@ def process_instance_task_list_without_task_data( process_instance, all_tasks, spiff_step, - get_task_data=False, - ) - - -def process_instance_task_list_with_task_data( - modified_process_model_identifier: str, - process_instance_id: int, - all_tasks: bool = False, - spiff_step: int = 0, -) -> flask.wrappers.Response: - """Process_instance_task_list_with_task_data.""" - process_instance = _find_process_instance_by_id_or_raise(process_instance_id) - return process_instance_task_list( - modified_process_model_identifier, - process_instance, - all_tasks, - spiff_step, - get_task_data=True, ) @@ -557,7 +538,6 @@ def process_instance_task_list( process_instance: ProcessInstanceModel, all_tasks: bool = False, spiff_step: int = 0, - get_task_data: bool = False, ) -> flask.wrappers.Response: """Process_instance_task_list.""" step_detail_query = db.session.query(SpiffStepDetailsModel).filter( diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py index a72796e0..95d42304 100644 --- a/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/integration/test_process_api.py @@ -2766,8 +2766,14 @@ class TestProcessApi(BaseTest): headers=self.logged_in_headers(with_super_admin_user), ) assert response.status_code == 200 - end = next(task for task in response.json if task["type"] == "End Event") - assert end["data"]["result"] == {"message": "message 1"} + end_task = next(task for task in response.json if task["type"] == "End Event") + response = client.get( + f"/v1.0/task-data/{self.modify_process_identifier_for_path_param(process_model_identifier)}/{process_instance_id}/{end_task['task_spiff_step']}", + headers=self.logged_in_headers(with_super_admin_user), + ) + assert response.status_code == 200 + task = response.json + assert task["data"]["result"] == {"message": "message 1"} def test_manual_complete_task( self, diff --git a/spiffworkflow-frontend/src/hooks/UriListForPermissions.tsx b/spiffworkflow-frontend/src/hooks/UriListForPermissions.tsx index f8e5f07f..92fe3639 100644 --- a/spiffworkflow-frontend/src/hooks/UriListForPermissions.tsx +++ b/spiffworkflow-frontend/src/hooks/UriListForPermissions.tsx @@ -17,7 +17,7 @@ export const useUriListForPermissions = () => { processInstanceResumePath: `/v1.0/process-instance-resume/${params.process_model_id}/${params.process_instance_id}`, processInstanceSuspendPath: `/v1.0/process-instance-suspend/${params.process_model_id}/${params.process_instance_id}`, processInstanceResetPath: `/v1.0/process-instance-reset/${params.process_model_id}/${params.process_instance_id}`, - processInstanceTaskListDataPath: `/v1.0/task-data/${params.process_model_id}/${params.process_instance_id}`, + processInstanceTaskDataPath: `/v1.0/task-data/${params.process_model_id}/${params.process_instance_id}`, processInstanceSendEventPath: `/v1.0/send-event/${params.process_model_id}/${params.process_instance_id}`, processInstanceCompleteTaskPath: `/v1.0/complete-task/${params.process_model_id}/${params.process_instance_id}`, processInstanceTaskListPath: `/v1.0/process-instances/${params.process_model_id}/${params.process_instance_id}/task-info`, diff --git a/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx b/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx index c9ab9875..c538632e 100644 --- a/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx +++ b/spiffworkflow-frontend/src/routes/ProcessInstanceShow.tsx @@ -27,6 +27,7 @@ import { Modal, Dropdown, Stack, + Loading, // @ts-ignore } from '@carbon/react'; import { Can } from '@casl/react'; @@ -68,6 +69,9 @@ export default function ProcessInstanceShow({ variant }: OwnProps) { const [taskToDisplay, setTaskToDisplay] = useState(null); const [taskDataToDisplay, setTaskDataToDisplay] = useState(''); + const [showTaskDataLoading, setShowTaskDataLoading] = + useState(false); + const [processDataToDisplay, setProcessDataToDisplay] = useState(null); const [editingTaskData, setEditingTaskData] = useState(false); @@ -100,7 +104,7 @@ export default function ProcessInstanceShow({ variant }: OwnProps) { [targetUris.messageInstanceListPath]: ['GET'], [targetUris.processInstanceActionPath]: ['DELETE'], [targetUris.processInstanceLogListPath]: ['GET'], - [targetUris.processInstanceTaskListDataPath]: ['GET', 'PUT'], + [targetUris.processInstanceTaskDataPath]: ['GET', 'PUT'], [targetUris.processInstanceSendEventPath]: ['POST'], [targetUris.processInstanceCompleteTaskPath]: ['POST'], [targetUris.processModelShowPath]: ['PUT'], @@ -146,9 +150,7 @@ export default function ProcessInstanceShow({ variant }: OwnProps) { taskParams = `${taskParams}&spiff_step=${params.spiff_step}`; } let taskPath = ''; - if (ability.can('GET', targetUris.processInstanceTaskListDataPath)) { - taskPath = `${targetUris.processInstanceTaskListDataPath}${taskParams}`; - } else if (ability.can('GET', taskListPath)) { + if (ability.can('GET', taskListPath)) { taskPath = `${taskListPath}${taskParams}`; } if (taskPath) { @@ -564,17 +566,27 @@ export default function ProcessInstanceShow({ variant }: OwnProps) { } else { setTaskDataToDisplay(JSON.stringify(result.data, null, 2)); } + setShowTaskDataLoading(false); }; const initializeTaskDataToDisplay = (task: ProcessInstanceTask | null) => { - if (task == null || task.state !== 'COMPLETED') { - setTaskDataToDisplay(''); - } else { + if ( + task && + task.state === 'COMPLETED' && + ability.can('GET', targetUris.processInstanceTaskDataPath) + ) { + setShowTaskDataLoading(true); HttpService.makeCallToBackend({ - path: `/task-data/${params.process_model_id}/${params.process_instance_id}/${task.task_spiff_step}`, + path: `${targetUris.processInstanceTaskDataPath}/${task.task_spiff_step}`, httpMethod: 'GET', successCallback: processTaskResult, + failureCallback: (error: any) => { + setTaskDataToDisplay(`ERROR: ${error.message}`); + setShowTaskDataLoading(false); + }, }); + } else { + setTaskDataToDisplay(''); } }; @@ -681,7 +693,7 @@ export default function ProcessInstanceShow({ variant }: OwnProps) { const canEditTaskData = (task: any) => { return ( processInstance && - ability.can('PUT', targetUris.processInstanceTaskListDataPath) && + ability.can('PUT', targetUris.processInstanceTaskDataPath) && isCurrentTask(task) && processInstance.status === 'suspended' && showingLastSpiffStep() @@ -775,7 +787,7 @@ export default function ProcessInstanceShow({ variant }: OwnProps) { // taskToUse is copy of taskToDisplay, with taskDataToDisplay in data attribute const taskToUse: any = { ...taskToDisplay, data: taskDataToDisplay }; HttpService.makeCallToBackend({ - path: `${targetUris.processInstanceTaskListDataPath}/${taskToUse.id}`, + path: `${targetUris.processInstanceTaskDataPath}/${taskToUse.id}`, httpMethod: 'PUT', successCallback: saveTaskDataResult, failureCallback: addError, @@ -919,6 +931,10 @@ export default function ProcessInstanceShow({ variant }: OwnProps) { }; const taskDataContainer = () => { + let taskDataClassName = ''; + if (taskDataToDisplay.startsWith('ERROR:')) { + taskDataClassName = 'failure-string'; + } return editingTaskData ? ( setTaskDataToDisplay(value || '')} /> ) : ( -
{taskDataToDisplay}
+ <> + {showTaskDataLoading ? ( + + ) : null} +
{taskDataToDisplay}
+ ); };