diff --git a/frontend/src/lib/components/ContentSearchInner.svelte b/frontend/src/lib/components/ContentSearchInner.svelte index dafddbb8a8..1677f70cfe 100644 --- a/frontend/src/lib/components/ContentSearchInner.svelte +++ b/frontend/src/lib/components/ContentSearchInner.svelte @@ -1,16 +1,25 @@ + +
+
+ + {title} + + +
+ +
+
+ +
diff --git a/frontend/src/lib/components/SavedInputs.svelte b/frontend/src/lib/components/SavedInputs.svelte index d6d6407941..01ac0cf835 100644 --- a/frontend/src/lib/components/SavedInputs.svelte +++ b/frontend/src/lib/components/SavedInputs.svelte @@ -5,7 +5,8 @@ type Input, type RunnableType, type CreateInput, - type Job + type Job, + JobService } from '$lib/gen/index.js' import { userStore, workspaceStore } from '$lib/stores.js' import { classNames, displayDate, displayDateOnly, sendUserToast } from '$lib/utils.js' @@ -328,6 +329,26 @@ `w-full flex items-center justify-between gap-4 py-2 px-4 text-left border rounded-sm hover:bg-surface-hover transition-a`, 'border-orange-400' )} + on:click={async () => { + if (!$workspaceStore) { + return + } + + const args = await JobService.getJobArgs({ + workspace: $workspaceStore, + id: i.id + }) + + selectedInput = { + id: i.id, + name: 'Running job: ' + i.id, + created_at: i.created_at ?? '', + created_by: i.created_by ?? '', + is_public: true + } + + selectArgs(args) + }} >
1000000 + function parseJson() { try { if (code == '') { diff --git a/frontend/src/lib/components/search/GlobalSearchModal.svelte b/frontend/src/lib/components/search/GlobalSearchModal.svelte index 5e0f154669..7d278470a6 100644 --- a/frontend/src/lib/components/search/GlobalSearchModal.svelte +++ b/frontend/src/lib/components/search/GlobalSearchModal.svelte @@ -77,7 +77,7 @@ }, { search_id: 'switchto:log-search', - label: 'Search windmill logs', + label: 'Search Windmill logs', action: () => switchMode('logs'), shortcutKey: LOGS_PREFIX, icon: Search @@ -332,6 +332,7 @@ onDestroy(() => { window.removeEventListener('keydown', handleKeydown) }) + $: searchTerm, handleSearch() function placeholderFromPrefix(text: string): string { @@ -436,87 +437,101 @@ await handleSearch() } - async function openModal() { - open = !open + async function focusTextInput() { await tick() + + textInput?.focus() + textInput?.select() + if (open) { if (combinedItems == undefined) { combinedItems = await fetchCombinedItems() handleSearch() } selectedItem = selectItem(0) - textInput.focus() - textInput.select() } } + + async function openModal() { + open = !open + focusTextInput() + } + let height: number | undefined = undefined {#if open}
{ open = false }} > -
-
- -
- - -
+
+ +
+ +
-
- {#if tab === 'default' || tab === 'switch-mode'} - {#each (itemMap[tab] ?? []).filter((e) => defaultMenuItems.includes(e)) as el} - (selectedItem = el)} - id={el?.search_id} - hovered={el?.search_id === selectedItem?.search_id} - label={el?.label} - icon={el?.icon} - shortcutKey={el?.shortcutKey} - /> - {/each} +
+
+ {#if tab === 'default' || tab === 'switch-mode'} + {@const items = (itemMap[tab] ?? []).filter((e) => defaultMenuItems.includes(e))} + {#if items.length > 0} +
+ {#each items as el} + (selectedItem = el)} + id={el?.search_id} + hovered={el?.search_id === selectedItem?.search_id} + label={el?.label} + icon={el?.icon} + shortcutKey={el?.shortcutKey} + /> + {/each} +
{/if} - {#if tab === 'default'} + {/if} + + {#if tab === 'default'} +
{#if (itemMap[tab] ?? []).filter((e) => (combinedItems ?? []).includes(e)).length > 0} -
Flows/Scripts/Apps
+
+ Flows/Scripts/Apps +
+ {#each (itemMap[tab] ?? []).filter((e) => (combinedItems ?? []).includes(e)) as el} + gotoWindmillItemPage(el)} + on:hover={() => (selectedItem = el)} + id={el?.search_id} + hovered={el?.path === selectedItem?.path} + label={(el.summary ? `${el.summary} - ` : '') + + el.path + + (el.starred ? ' ★' : '')} + icon={iconForWindmillItem(el.type)} + /> + {/each} {/if} - {#each (itemMap[tab] ?? []).filter((e) => (combinedItems ?? []).includes(e)) as el} - gotoWindmillItemPage(el)} - on:hover={() => (selectedItem = el)} - id={el?.search_id} - hovered={el?.path === selectedItem?.path} - label={(el.summary ? `${el.summary} - ` : '') + - el.path + - (el.starred ? ' ★' : '')} - icon={iconForWindmillItem(el.type)} - /> - {/each} + {#if (itemMap[tab] ?? []).length === 0}
@@ -525,65 +540,55 @@
{/if} - {:else if tab === 'content'} - - {:else if tab === 'logs'} -
- - Full text search on windmill's service logs is coming soon - -
- {:else if tab === 'runs'} -
- {#if loadingCompletedRuns} -
-
- -
+
+ {:else if tab === 'content'} + + {:else if tab === 'logs'} +
+ + Full text search on windmill's service logs is coming soon + +
+ {:else if tab === 'runs'} +
+ {#if loadingCompletedRuns} +
+
+
- {:else if itemMap['runs'] && itemMap['runs'].length > 0} -
- {#each itemMap['runs'] ?? [] as r} - { - selectedItem = r - selectedWorkspace = r?.document.workspace_id[0] - }} - on:select={() => { - open = false - goto(`/run/${r?.document.id[0]}`) - }} - id={r?.document.id[0]} - hovered={selectedItem && r?.document.id[0] === selectedItem?.document.id[0]} - icon={r?.icon} - > - - - - - {/each} -
- {#if selectedItem === undefined} - select a result to preview - {:else} -
- -
- {/if} +
+
+ + + {/each} +
+ {#if selectedItem === undefined} + select a result to preview {:else} -
-
-
No runs found
-
There were no completed runs that match your query
-
Note that new runs might take a while to become searchable (by default - ~5min)
- {#if !$enterpriseLicense} -
- - - Full-text search on jobs is only available on EE. - - {/if} -
+
+
{/if} -
- {/if} -
+ {:else} +
+
+
No runs found
+
There were no completed runs that match your query
+
Note that new runs might take a while to become searchable (by default ~5min)
+ {#if !$enterpriseLicense} +
+ + + Full-text search on jobs is only available on EE. + + {/if} +
+
+ {/if} +
+ {/if}
diff --git a/frontend/src/lib/components/search/QuickMenuItem.svelte b/frontend/src/lib/components/search/QuickMenuItem.svelte index a7df0564a0..c7f7d942cb 100644 --- a/frontend/src/lib/components/search/QuickMenuItem.svelte +++ b/frontend/src/lib/components/search/QuickMenuItem.svelte @@ -8,6 +8,7 @@ export let label: string = '' export let icon: any = undefined export let shortcutKey: string | undefined = undefined + export let containerClass: string | undefined = undefined const dispatch = createEventDispatcher() @@ -43,19 +44,26 @@ } + +
dispatch('hover')} - class={`rounded-md w-full ${hovered ? 'bg-surface-hover' : ''}`} + class={twMerge( + `rounded-md w-full transition-all cursor-pointer hover:bg-surface-hover ${ + hovered ? 'bg-surface-hover' : '' + }`, + containerClass + )} > {#if $$slots.itemReplacement} {:else} -
+
{#if icon} - + {:else if shortcutKey != undefined}