From 7f3682026e43cb3ef565fb84abab84649bdfa390 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Mon, 5 Dec 2022 01:35:43 +0100 Subject: [PATCH] allow passing payload to approval method --- .../src/lib/components/DisplayResult.svelte | 36 +++++++++++++++++++ .../lib/components/flows/previousResults.ts | 8 +++-- .../propertyPicker/PropPicker.svelte | 16 +++++++++ .../[job]/[resume]/[hmac]@none.svelte | 8 ++++- 4 files changed, 65 insertions(+), 3 deletions(-) diff --git a/frontend/src/lib/components/DisplayResult.svelte b/frontend/src/lib/components/DisplayResult.svelte index 59408034d9..9edbb7fabc 100644 --- a/frontend/src/lib/components/DisplayResult.svelte +++ b/frontend/src/lib/components/DisplayResult.svelte @@ -3,6 +3,8 @@ import { json } from 'svelte-highlight/languages' import TableCustom from './TableCustom.svelte' import { truncate } from '$lib/utils' + import { Button } from './common' + import autosize from 'svelte-autosize' export let result: any @@ -15,6 +17,7 @@ | 'jpeg' | 'gif' | 'error' + | 'approval' | undefined = inferResultKind(result) let forceJson = false @@ -57,11 +60,19 @@ return 'file' } else if (keys.length == 1 && keys[0] == 'error' && typeof result['error'] == 'string') { return 'error' + } else if ( + keys.length == 3 && + keys.includes('resume') && + keys.includes('cancel') && + keys.includes('approvalPage') + ) { + return 'approval' } } catch (err) {} } return 'json' } + let payload = ''
@@ -132,6 +143,31 @@ {:else if !forceJson && resultKind == 'error'}
{result.error}
+ {:else if !forceJson && resultKind == 'approval'}
+ + +
+

Payload

+
+ +
+
+ +
{:else} - previousId: string | undefined + previousId: string | undefined, + hasResume: boolean } type StepPropPicker = { @@ -118,9 +119,12 @@ export function getStepPropPicker( const pickableProperties = { flow_input: flowInput, priorIds: priorIds, - previousId: previousIds[0] + previousId: previousIds[0], + hasResume: previousModule?.suspend != undefined, } + + if (approvers && ((previousModule?.suspend?.required_events ?? 0) > 0)) { pickableProperties["approvers"] = "The list of approvers" } diff --git a/frontend/src/lib/components/propertyPicker/PropPicker.svelte b/frontend/src/lib/components/propertyPicker/PropPicker.svelte index c42e65744b..b3291d39b1 100644 --- a/frontend/src/lib/components/propertyPicker/PropPicker.svelte +++ b/frontend/src/lib/components/propertyPicker/PropPicker.svelte @@ -121,6 +121,22 @@ />
{/if} + {#if pickableProperties.hasResume} + Resume payloads +
+ { + dispatch('select', `${e.detail}`) + }} + /> +
+ {/if} {#if Object.keys(pickableProperties.priorIds).length > 0} All Results
diff --git a/frontend/src/routes/approve/[workspace]/[job]/[resume]/[hmac]@none.svelte b/frontend/src/routes/approve/[workspace]/[job]/[resume]/[hmac]@none.svelte index a4c5969d3b..bd039af09c 100644 --- a/frontend/src/routes/approve/[workspace]/[job]/[resume]/[hmac]@none.svelte +++ b/frontend/src/routes/approve/[workspace]/[job]/[resume]/[hmac]@none.svelte @@ -9,6 +9,7 @@ import { onDestroy, onMount } from 'svelte' import Tooltip from '$lib/components/Tooltip.svelte' import FlowGraph from '$lib/components/graph/FlowGraph.svelte' + import autosize from 'svelte-autosize' let job: Job | undefined = undefined let currentApprovers: { resume_id: number; approver: string }[] = [] @@ -22,6 +23,7 @@ let timeout: NodeJS.Timer | undefined = undefined let error: string | undefined = undefined + let payload = '' getJob() @@ -69,7 +71,7 @@ resumeId: new Number($page.params.resume).valueOf(), signature: $page.params.hmac, approver, - requestBody: {} + requestBody: payload }) sendUserToast('Flow approved') getJob() @@ -160,6 +162,10 @@ disabled={completed || alreadyResumed}>Approve/Resume
+
+

Payload (optional)

+ +
Learn more about Windmill