Skip to content

Commit 0b0e564

Browse files
committed
fix: improve history and saved inputs rever mechanism
1 parent e29a540 commit 0b0e564

File tree

10 files changed

+50
-36
lines changed

10 files changed

+50
-36
lines changed

backend/windmill-api/openapi.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4444,7 +4444,7 @@ paths:
44444444

44454445
/w/{workspace}/scripts/delete/p/{path}:
44464446
post:
4447-
summary: delete all scripts at a given path (require admin)
4447+
summary: delete script at a given path (require admin)
44484448
operationId: deleteScriptByPath
44494449
tags:
44504450
- script

frontend/src/lib/components/FlowPreviewContent.svelte

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
$: selectedJobStep !== undefined && onSelectedJobStepChange()
162162
163163
let renderCount: number = 0
164+
let schemaFormWithArgPicker: SchemaFormWithArgPicker | undefined = undefined
164165
</script>
165166

166167
<svelte:window on:keydown={onKeyDown} />
@@ -324,6 +325,7 @@
324325
<div class="overflow-y-auto grow flex flex-col pt-4">
325326
<div class="border-b">
326327
<SchemaFormWithArgPicker
328+
bind:this={schemaFormWithArgPicker}
327329
runnableId={initialPath == '' ? $pathStore : initialPath}
328330
runnableType={'FlowPath'}
329331
previewArgs={$previewArgs}
@@ -335,7 +337,10 @@
335337
{jsonView}
336338
>
337339
<div class="w-full flex flex-row justify-between">
338-
<InputSelectedBadge {inputSelected} />
340+
<InputSelectedBadge
341+
on:click={() => schemaFormWithArgPicker?.resetSelected()}
342+
{inputSelected}
343+
/>
339344
<div class="flex flex-row gap-2">
340345
<Toggle
341346
bind:checked={jsonView}

frontend/src/lib/components/HistoricInputs.svelte

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import { createEventDispatcher, onDestroy } from 'svelte'
88
import JobLoader from './runs/JobLoader.svelte'
99
import { DataTable } from '$lib/components/table'
10-
import { clickOutside } from '$lib/utils'
1110
import InfiniteList from './InfiniteList.svelte'
1211
1312
export let runnableId: string | undefined = undefined
@@ -82,12 +81,6 @@
8281
resetSelected(true)
8382
})
8483
85-
async function getPropPickerElements(): Promise<HTMLElement[]> {
86-
return Array.from(
87-
document.querySelectorAll('[data-schema-picker], [data-schema-picker] *')
88-
) as HTMLElement[]
89-
}
90-
9184
async function loadArgsFromHistory(
9285
id: string | undefined,
9386
input: boolean | undefined,
@@ -126,6 +119,7 @@
126119
}
127120
128121
export function resetSelected(dispatchEvent?: boolean) {
122+
console.log('resetSelected')
129123
selected = undefined
130124
if (dispatchEvent) {
131125
dispatch('select', undefined)
@@ -159,15 +153,7 @@
159153
/>
160154
{/if}
161155

162-
<div
163-
class="h-full w-full flex flex-col gap-4"
164-
use:clickOutside={{ capture: false, exclude: getPropPickerElements }}
165-
on:click_outside={() => {
166-
if (selected) {
167-
resetSelected(true)
168-
}
169-
}}
170-
>
156+
<div class="h-full w-full flex flex-col gap-4">
171157
<div class="grow-0" data-schema-picker>
172158
<DataTable size="xs" bind:currentPage={page} hasMore={hasMoreCurrentRuns} tableFixed={true}>
173159
{#if loading && (jobs == undefined || jobs?.length == 0)}

frontend/src/lib/components/SavedInputsPicker.svelte

Lines changed: 1 addition & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
import { Edit, Trash2, Save, Eye } from 'lucide-svelte'
88
import Toggle from './Toggle.svelte'
99
import { Cell } from './table/index'
10-
import { clickOutside } from '$lib/utils'
1110
import SaveInputsButton from '$lib/components/SaveInputsButton.svelte'
1211
import Popover from '$lib/components/Popover.svelte'
1312
import InfiniteList from './InfiniteList.svelte'
@@ -133,11 +132,6 @@
133132
resetSelected(true)
134133
})
135134
136-
async function getPropPickerElements(): Promise<HTMLElement[]> {
137-
const elements = document.querySelectorAll('[data-schema-picker], [data-schema-picker] *')
138-
return elements ? (Array.from(elements) as HTMLElement[]) : []
139-
}
140-
141135
function handleKeydown(event: KeyboardEvent) {
142136
if (event.key === 'Escape' && isEditing) {
143137
setEditing(null)
@@ -191,13 +185,7 @@
191185

192186
<svelte:window on:keydown={handleKeydown} />
193187

194-
<div
195-
class="w-full flex flex-col gap-1 h-full overflow-y-auto"
196-
use:clickOutside={{ capture: false, exclude: getPropPickerElements }}
197-
on:click_outside={() => {
198-
resetSelected(true)
199-
}}
200-
>
188+
<div class="w-full flex flex-col gap-1 h-full overflow-y-auto">
201189
{#if !noButton}
202190
<div>
203191
<Popover class="w-full" placement="bottom" disablePopup={runnableId && previewArgs}>

frontend/src/lib/components/SavedInputsV2.svelte

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,11 @@
1818
export let isValid: boolean
1919
export let args: object
2020
21+
export function resetSelected() {
22+
historicInputs?.resetSelected(true)
23+
savedInputsPicker?.resetSelected(true)
24+
}
25+
2126
let savedArgs: any = undefined
2227
let runnableType: RunnableType | undefined = undefined
2328
let savedInputsPicker: SavedInputsPicker | undefined = undefined

frontend/src/lib/components/SchemaFormWithArgPicker.svelte

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@
1919
2020
const dispatch = createEventDispatcher()
2121
22+
export function resetSelected() {
23+
console.log('resetSelected')
24+
historicInputs?.resetSelected(true)
25+
savedInputsPicker?.resetSelected(true)
26+
captureTable?.resetSelected(true)
27+
}
28+
2229
const getDropdownItems = () => {
2330
return [
2431
{
@@ -71,7 +78,9 @@
7178
let dropdownItems: any
7279
let rightPanelOpen = false
7380
81+
let savedInputsPicker: SavedInputsPicker | undefined = undefined
7482
let loading = false
83+
let captureTable: CaptureTable | undefined = undefined
7584
let historicInputs: HistoricInputs | undefined = undefined
7685
$: selectedTab, (dropdownItems = getDropdownItems())
7786
</script>
@@ -119,6 +128,7 @@
119128
{runnableId}
120129
{runnableType}
121130
{previewArgs}
131+
bind:this={savedInputsPicker}
122132
on:select={(e) => {
123133
dispatch('select', { payload: e.detail, type: 'saved' })
124134
}}
@@ -138,6 +148,7 @@
138148
on:select={(e) => {
139149
dispatch('select', { payload: e.detail, type: 'captures' })
140150
}}
151+
bind:this={captureTable}
141152
isFlow={true}
142153
headless={true}
143154
addButton={false}

frontend/src/lib/components/flows/content/FlowInput.svelte

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,6 +308,7 @@
308308
savedPreviewArgs = undefined
309309
}
310310
}
311+
let historicInputs: HistoricInputs | undefined = undefined
311312
</script>
312313

313314
<!-- Add svelte:window to listen for keyboard events -->
@@ -348,6 +349,7 @@
348349
{diff}
349350
disableDnd={!!previewSchema}
350351
on:rejectChange={(e) => {
352+
console.log('rejectChange')
351353
rejectChange(e.detail).then(() => {
352354
updatePreviewSchema(selectedSchema)
353355
})
@@ -422,7 +424,9 @@
422424
size="xs"
423425
startIcon={{ icon: X }}
424426
shortCut={{ key: 'esc', withoutModifier: true }}
425-
nonCaptureEvent
427+
on:click={() => {
428+
historicInputs?.resetSelected(true)
429+
}}
426430
/>
427431
</div>
428432
{:else}
@@ -460,6 +464,7 @@
460464
}}
461465
>
462466
<HistoricInputs
467+
bind:this={historicInputs}
463468
runnableId={initialPath ?? undefined}
464469
runnableType={$pathStore ? 'FlowPath' : undefined}
465470
on:select={(e) => {

frontend/src/lib/components/schema/InputSelectedBadge.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
size="xs2"
2525
startIcon={{ icon: X }}
2626
shortCut={{ key: 'esc', withoutModifier: true }}
27-
nonCaptureEvent
27+
on:click
2828
/>
2929
</div>
3030
</div>

frontend/src/routes/(root)/(logged)/flows/get/[...path]/+page.svelte

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@
344344
let stepDetail: FlowModule | string | undefined = undefined
345345
let token = 'TOKEN_TO_CREATE'
346346
let rightPaneSelected = 'saved_inputs'
347-
347+
let savedInputsV2: SavedInputsV2 | undefined = undefined
348348
let flowHistory: FlowHistory | undefined = undefined
349349
</script>
350350

@@ -449,7 +449,12 @@
449449

450450
<div class="flex flex-col align-left">
451451
<div class="flex flex-row justify-between">
452-
<InputSelectedBadge {inputSelected} />
452+
<InputSelectedBadge
453+
on:click={() => {
454+
savedInputsV2?.resetSelected()
455+
}}
456+
{inputSelected}
457+
/>
453458
<Toggle
454459
bind:checked={jsonView}
455460
label="JSON View"
@@ -525,6 +530,7 @@
525530
</svelte:fragment>
526531
<svelte:fragment slot="save_inputs">
527532
<SavedInputsV2
533+
bind:this={savedInputsV2}
528534
{jsonView}
529535
flowPath={flow?.path}
530536
{isValid}

frontend/src/routes/(root)/(logged)/scripts/get/[...hash]/+page.svelte

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,8 @@
496496
497497
let token = 'TOKEN_TO_CREATE'
498498
let rightPaneSelected = 'saved_inputs'
499+
500+
let savedInputsV2: SavedInputsV2 | undefined = undefined
499501
</script>
500502

501503
<MoveDrawer
@@ -652,7 +654,12 @@
652654

653655
<div class="flex flex-col align-left">
654656
<div class="flex flex-row justify-between">
655-
<InputSelectedBadge {inputSelected} />
657+
<InputSelectedBadge
658+
on:click={() => {
659+
savedInputsV2?.resetSelected()
660+
}}
661+
{inputSelected}
662+
/>
656663
<Toggle
657664
bind:checked={jsonView}
658665
label="JSON View"
@@ -715,6 +722,7 @@
715722
<svelte:fragment slot="save_inputs">
716723
{#if args}
717724
<SavedInputsV2
725+
bind:this={savedInputsV2}
718726
scriptPath={script?.path}
719727
scriptHash={topHash}
720728
{isValid}

0 commit comments

Comments
 (0)