View button styled the same as the go button.

Don't show the view button for Suspended, terminated, or Errored Processes when there is nothing to see.
On the interstitial page, if the process is not runnable, return out of the process, don't keep looping forever.
This commit is contained in:
danfunk 2023-05-11 12:34:43 -04:00
parent 08bb92402e
commit 1ea4b7bc44
2 changed files with 21 additions and 15 deletions

View File

@ -388,8 +388,6 @@ def _render_instructions_for_end_user(task_model: TaskModel, extensions: Optiona
def _interstitial_stream(process_instance: ProcessInstanceModel) -> Generator[str, Optional[str], None]:
processor = ProcessInstanceProcessor(process_instance)
reported_ids = [] # A list of all the ids reported by this endpoint so far.
def get_reportable_tasks() -> Any:
return processor.bpmn_process_instance.get_tasks(
@ -406,6 +404,13 @@ def _interstitial_stream(process_instance: ProcessInstanceModel) -> Generator[st
return_hash[return_type] = entity
return f"data: {current_app.json.dumps(return_hash)} \n\n"
# do not do any processing if the instance is not currently active
if process_instance.status not in ProcessInstanceModel.active_statuses():
yield render_data("unrunnable_instance", process_instance)
return
processor = ProcessInstanceProcessor(process_instance)
reported_ids = [] # A list of all the ids reported by this endpoint so far.
tasks = get_reportable_tasks()
while True:
for spiff_task in tasks:
@ -425,10 +430,6 @@ def _interstitial_stream(process_instance: ProcessInstanceModel) -> Generator[st
yield render_data("task", task)
reported_ids.append(spiff_task.id)
if spiff_task.state == TaskState.READY:
# do not do any processing if the instance is not currently active
if process_instance.status not in ProcessInstanceModel.active_statuses():
yield render_data("unrunnable_instance", process_instance)
break
try:
processor.do_engine_steps(execution_strategy_name="one_at_a_time")
processor.do_engine_steps(execution_strategy_name="run_until_user_message")

View File

@ -1597,22 +1597,27 @@ export default function ProcessInstanceListTable({
}
let buttonText = 'View';
let buttonKind = 'ghost';
if (
processInstance.status !== 'suspended' &&
hasAccessToCompleteTask &&
processInstance.task_id
) {
if (hasAccessToCompleteTask && processInstance.task_id) {
buttonText = 'Go';
buttonKind = 'secondary';
}
buttonElement = (
<Button kind={buttonKind} href={interstitialUrl}>
<Button kind='secondary' href={interstitialUrl}>
{buttonText}
</Button>
);
currentRow.push(<td>{buttonElement}</td>);
console.log(processInstance.status);
if (
processInstance.status === 'not_started' ||
processInstance.status === 'user_input_required' ||
processInstance.status === 'waiting' ||
processInstance.status === 'complete'
) {
currentRow.push(<td>{buttonElement}</td>);
} else {
currentRow.push(<td />);
}
}
const rowStyle = { cursor: 'pointer' };