-
Select a namespace
+
Select a Namespace
{#if $page.params?.namespace}
You are currently viewing {$page.params.namespace}
{/if}
diff --git a/src/lib/components/schedule/schedule-form-view.svelte b/src/lib/components/schedule/schedule-form-view.svelte
index de6a22775..72637d861 100644
--- a/src/lib/components/schedule/schedule-form-view.svelte
+++ b/src/lib/components/schedule/schedule-form-view.svelte
@@ -112,7 +112,7 @@
-
-
+
+
+ Terminate
+
+
+
Terminate
-
-
+
+
{#if !actionsDisabled}
diff --git a/src/lib/components/workflow/batch-operation-confirmation-modal.svelte b/src/lib/components/workflow/batch-operation-confirmation-modal.svelte
new file mode 100644
index 000000000..5f138a813
--- /dev/null
+++ b/src/lib/components/workflow/batch-operation-confirmation-modal.svelte
@@ -0,0 +1,80 @@
+
+
+
+ {action} Workflows
+
+
+ {#if allSelected}
+
+ Are you sure you want to {action.toLowerCase()} all worklfows matching
+ the following query? This action cannot be undone.
+
+
+
+ {query}
+
+
+
Note: The actual count of workflows that will be affected is the
+ total number of running workflows matching this query at the time of
+ clicking "{confirmText}".
+ {:else}
+
+ Are you sure you want to {action.toLowerCase()}
+ {actionableWorkflowsLength} running {pluralize(
+ 'workflow',
+ actionableWorkflowsLength,
+ )} ?
+
+ {/if}
+
+
+
+
diff --git a/src/lib/components/workflow/child-workflows-table.svelte b/src/lib/components/workflow/child-workflows-table.svelte
new file mode 100644
index 000000000..6ed7fe2b0
--- /dev/null
+++ b/src/lib/components/workflow/child-workflows-table.svelte
@@ -0,0 +1,38 @@
+
+
+
+
+
+ Child Workflow ID
+ Child Run ID
+
+ {#each visibleItems as child (child.runId)}
+
+
+ {child.workflowId}
+
+
+ {child.runId}
+
+
+ {/each}
+
+
diff --git a/src/lib/components/workflow/dropdown-filter/datetime-inputs.svelte b/src/lib/components/workflow/dropdown-filter/datetime-inputs.svelte
new file mode 100644
index 000000000..ac1f9ace9
--- /dev/null
+++ b/src/lib/components/workflow/dropdown-filter/datetime-inputs.svelte
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+ (time = 'AM')}
+ >AM
+ (time = 'PM')}
+ >PM
+
+
diff --git a/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte b/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte
index c8a24a9b3..19cc445b7 100644
--- a/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte
+++ b/src/lib/components/workflow/dropdown-filter/workflow-datetime-filter.svelte
@@ -5,7 +5,6 @@
addHours,
addMinutes,
addSeconds,
- endOfDay,
formatISO,
startOfDay,
} from 'date-fns';
@@ -19,26 +18,45 @@
import { workflowFilters, workflowSorts } from '$lib/stores/filters';
import DatePicker from '$lib/holocene/date-picker.svelte';
import Button from '$lib/holocene/button.svelte';
- import { onMount } from 'svelte';
import TimePicker from '$lib/holocene/time-picker.svelte';
import { updateQueryParamsFromFilter } from '$lib/utilities/query/to-list-workflow-filters';
import { page } from '$app/stores';
import Icon from '$lib/holocene/icon/icon.svelte';
+ import MenuItem from '$lib/holocene/primitives/menu/menu-item.svelte';
let custom = false;
let show = false;
let value = 'All Time';
let timeField = 'StartTime';
- onMount(() => {
- const timeFilter = $workflowFilters.find(
- (f) => f.attribute === 'StartTime' || f.attribute === 'CloseTime',
- );
- if (timeFilter) {
- value = timeFilter.value;
+ let startDate = startOfDay(new Date());
+ let endDate = startOfDay(new Date());
+
+ let startHour = '';
+ let startMinute = '';
+ let startSecond = '';
+ let startHalf: 'AM' | 'PM' = 'AM';
+
+ let endHour = '';
+ let endMinute = '';
+ let endSecond = '';
+ let endHalf: 'AM' | 'PM' = 'AM';
+
+ $: timeFilter = $workflowFilters.find(
+ (f) => f.attribute === 'StartTime' || f.attribute === 'CloseTime',
+ );
+
+ const setTimeValues = () => {
+ if (!timeFilter) {
+ value = 'All Time';
+ timeField = 'StartTime';
+ } else {
+ value = custom ? 'Custom' : timeFilter.value;
timeField = timeFilter.attribute as string;
}
- });
+ };
+
+ $: timeFilter, setTimeValues();
const getOtherFilters = () =>
$workflowFilters.filter(
@@ -74,41 +92,54 @@
}
};
- let startDate = startOfDay(new Date());
- let endDate = endOfDay(new Date());
- let startTime = { hour: '', minute: '', second: '' };
- let endTime = { hour: '', minute: '', second: '' };
-
const onStartDateChange = (d) => {
startDate = startOfDay(d.detail);
};
- const onStartDateTimeChange = (d) => {
- startTime = d.detail;
- };
-
const onEndDateChange = (d) => {
endDate = startOfDay(d.detail);
};
- const onEndDateTimeChange = (d) => {
- endTime = d.detail;
- };
-
const applyTimeChanges = (date: Date, time) => {
let _date = new Date(date);
if (time.hour) _date = addHours(_date, time.hour);
if (time.minute) _date = addMinutes(_date, time.minute);
if (time.second) _date = addSeconds(_date, time.second);
+
return _date;
};
+ const setHours = (hour: string, half: 'AM' | 'PM') => {
+ if (hour) {
+ if (hour === '12') {
+ return half === 'AM' ? '00' : '12';
+ } else if (half === 'PM') {
+ return (parseInt(hour) + 12).toString();
+ } else {
+ return hour;
+ }
+ } else {
+ hour = '';
+ }
+ };
+
const onApply = () => {
- startDate = applyTimeChanges(startDate, startTime);
- endDate = applyTimeChanges(endDate, endTime);
+ let startDateWithTime = applyTimeChanges(startDate, {
+ hour: setHours(startHour, startHalf),
+ minute: startMinute,
+ second: startSecond,
+ });
+ let endDateWithTime = applyTimeChanges(endDate, {
+ hour: setHours(endHour, endHalf),
+ minute: endMinute,
+ second: endSecond,
+ });
+
const filter = {
attribute: timeField,
- value: `BETWEEN "${formatISO(startDate)}" AND "${formatISO(endDate)}"`,
+ value: `BETWEEN "${formatISO(startDateWithTime)}" AND "${formatISO(
+ endDateWithTime,
+ )}"`,
conditional: '=',
operator: '',
parenthesis: '',
@@ -142,20 +173,30 @@
>
{#if custom}
-
To
-
-
From
-
@@ -180,7 +221,7 @@
{/each}
-
onTimeFieldChange('StartTime')}
@@ -191,10 +232,10 @@
{/if}
Start Time
-
+
-
onTimeFieldChange('CloseTime')}
@@ -205,7 +246,7 @@
{/if}
End Time
-
+
@@ -220,13 +261,9 @@
label={capitalize($timeFormat)}
icon="clock"
>
-
($timeFormat = 'relative')} class="timezone-label">
- Relative
-
-
($timeFormat = 'UTC')} class="timezone-label">UTC
-
($timeFormat = 'local')} class="timezone-label">
- Local
-
+
($timeFormat = 'relative')}>Relative
+
($timeFormat = 'UTC')}>UTC
+
($timeFormat = 'local')}>Local
diff --git a/src/lib/components/workflow/dropdown-filter/workflow-id.svelte b/src/lib/components/workflow/dropdown-filter/workflow-id.svelte
index af7db383c..1361c6ffa 100644
--- a/src/lib/components/workflow/dropdown-filter/workflow-id.svelte
+++ b/src/lib/components/workflow/dropdown-filter/workflow-id.svelte
@@ -54,12 +54,12 @@
dataCy="workflow-id-filter-button"
on:showmenu={handleShowInput}
>
-
+ {#if bulkActionsEnabled}
+
+
+
+
+
+ {/if}
onRowFilterClick('WorkflowId', workflow.id)}
+ filtered={Boolean(
+ $workflowFilters.find(
+ (f) => f.attribute === 'WorkflowId' && f.value === workflow.id,
+ ),
+ )}
/>
{formatDate(workflow.startTime, timeFormat)}
@@ -79,14 +116,18 @@
Workflow Name:
onTypeClick(workflow.name)}
- >{workflow.name}
+ onRowFilterClick('WorkflowType', workflow.name)}>{workflow.name}
onTypeClick(workflow.name)}
- filtered={$page.url?.searchParams?.get('query')?.includes(workflow.name)}
+ onFilter={() => onRowFilterClick('WorkflowType', workflow.name)}
+ filtered={Boolean(
+ $workflowFilters.find(
+ (f) => f.attribute === 'WorkflowType' && f.value === workflow.name,
+ ),
+ )}
/>
{formatDate(workflow.endTime, timeFormat)}
diff --git a/src/lib/components/workflow/workflows-summary-row.svelte b/src/lib/components/workflow/workflows-summary-row.svelte
index 8e078e331..fa39a2ab4 100644
--- a/src/lib/components/workflow/workflows-summary-row.svelte
+++ b/src/lib/components/workflow/workflows-summary-row.svelte
@@ -3,23 +3,22 @@
import { formatDate } from '$lib/utilities/format-date';
import { getMilliseconds } from '$lib/utilities/format-time';
- import { routeForWorkflow } from '$lib/utilities/route-for';
+ import { routeForEventHistory } from '$lib/utilities/route-for';
import { updateQueryParameters } from '$lib/utilities/update-query-parameters';
import { toListWorkflowQuery } from '$lib/utilities/query/list-workflow-query';
import { toListWorkflowParameters } from '$lib/utilities/query/to-list-workflow-parameters';
import WorkflowStatus from '$lib/components/workflow-status.svelte';
import FilterOrCopyButtons from '$holocene/filter-or-copy-buttons.svelte';
- import SelectableTableRow from '$holocene/table/selectable-table-row.svelte';
import TableRow from '$lib/holocene/table/table-row.svelte';
+ import { eventViewType } from '$lib/stores/event-view';
- export let bulkActionsEnabled: boolean = false;
- export let selected: boolean = false;
export let namespace: string;
export let workflow: WorkflowExecution;
export let timeFormat: TimeFormat | string;
- $: href = routeForWorkflow({
+ $: href = routeForEventHistory({
+ view: $eventViewType,
namespace,
workflow: workflow.id,
run: workflow.runId,
@@ -45,13 +44,7 @@
};
-
+
-
+
diff --git a/src/lib/holocene/namespace-selector.svelte b/src/lib/holocene/namespace-selector.svelte
index b376ebdde..c9a670995 100644
--- a/src/lib/holocene/namespace-selector.svelte
+++ b/src/lib/holocene/namespace-selector.svelte
@@ -10,7 +10,7 @@
}
-
+
parseInt(MAX_PAGE_SIZE, 10)) {
@@ -84,12 +88,14 @@
class="flex flex-col justify-end gap-4 md:flex-row"
>
-
+ {#if !itemsPerPage}
+
+ {/if}
-
+ {#if !itemsPerPage}
+
+ {/if}
export let dataCy: string = null;
- export let disabled: boolean = true;
+ export let disabled: boolean = false;
+ export let variant: 'primary' | 'destructive' = 'primary';
-
+