mirror of
https://github.com/ClusterCockpit/cc-backend
synced 2025-03-04 14:05:56 +01:00
fix and review quick starttime select handling
This commit is contained in:
parent
ec895e1d9e
commit
c21d7cf101
@ -45,6 +45,14 @@
|
|||||||
export let startTimeQuickSelect = false;
|
export let startTimeQuickSelect = false;
|
||||||
export let matchedJobs = -2;
|
export let matchedJobs = -2;
|
||||||
|
|
||||||
|
const startTimeSelectOptions = [
|
||||||
|
{ range: "", rangeLabel: "No Selection"},
|
||||||
|
{ range: "last6h", rangeLabel: "Last 6hrs"},
|
||||||
|
{ range: "last24h", rangeLabel: "Last 24hrs"},
|
||||||
|
{ range: "last7d", rangeLabel: "Last 7 days"},
|
||||||
|
{ range: "last30d", rangeLabel: "Last 30 days"}
|
||||||
|
];
|
||||||
|
|
||||||
let filters = {
|
let filters = {
|
||||||
projectMatch: filterPresets.projectMatch || "contains",
|
projectMatch: filterPresets.projectMatch || "contains",
|
||||||
userMatch: filterPresets.userMatch || "contains",
|
userMatch: filterPresets.userMatch || "contains",
|
||||||
@ -56,7 +64,7 @@
|
|||||||
filterPresets.states || filterPresets.state
|
filterPresets.states || filterPresets.state
|
||||||
? [filterPresets.state].flat()
|
? [filterPresets.state].flat()
|
||||||
: allJobStates,
|
: allJobStates,
|
||||||
startTime: filterPresets.startTime || { from: null, to: null },
|
startTime: filterPresets.startTime || { from: null, to: null, range: ""},
|
||||||
tags: filterPresets.tags || [],
|
tags: filterPresets.tags || [],
|
||||||
duration: filterPresets.duration || {
|
duration: filterPresets.duration || {
|
||||||
lessThan: null,
|
lessThan: null,
|
||||||
@ -268,16 +276,17 @@
|
|||||||
{#if startTimeQuickSelect}
|
{#if startTimeQuickSelect}
|
||||||
<DropdownItem divider />
|
<DropdownItem divider />
|
||||||
<DropdownItem disabled>Start Time Quick Selection</DropdownItem>
|
<DropdownItem disabled>Start Time Quick Selection</DropdownItem>
|
||||||
{#each [{ text: "Last 6hrs", range: "last6h" }, { text: "Last 24hrs", range: "last24h" }, { text: "Last 7 days", range: "last7d" }, { text: "Last 30 days", range: "last30d" }] as { text, range }}
|
{#each startTimeSelectOptions.filter((stso) => stso.range !== "") as { rangeLabel, range }}
|
||||||
<DropdownItem
|
<DropdownItem
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
|
filters.startTime.from = null
|
||||||
|
filters.startTime.to = null
|
||||||
filters.startTime.range = range;
|
filters.startTime.range = range;
|
||||||
filters.startTime.text = text;
|
|
||||||
updateFilters();
|
updateFilters();
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Icon name="calendar-range" />
|
<Icon name="calendar-range" />
|
||||||
{text}
|
{rangeLabel}
|
||||||
</DropdownItem>
|
</DropdownItem>
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
@ -316,7 +325,7 @@
|
|||||||
|
|
||||||
{#if filters.startTime.range}
|
{#if filters.startTime.range}
|
||||||
<Info icon="calendar-range" on:click={() => (isStartTimeOpen = true)}>
|
<Info icon="calendar-range" on:click={() => (isStartTimeOpen = true)}>
|
||||||
{filters?.startTime?.text ? filters.startTime.text : filters.startTime.range }
|
{startTimeSelectOptions.find((stso) => stso.range === filters.startTime.range).rangeLabel }
|
||||||
</Info>
|
</Info>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
@ -414,11 +423,8 @@
|
|||||||
bind:from={filters.startTime.from}
|
bind:from={filters.startTime.from}
|
||||||
bind:to={filters.startTime.to}
|
bind:to={filters.startTime.to}
|
||||||
bind:range={filters.startTime.range}
|
bind:range={filters.startTime.range}
|
||||||
on:set-filter={() => {
|
{startTimeSelectOptions}
|
||||||
delete filters.startTime["text"];
|
on:set-filter={() => updateFilters()}
|
||||||
delete filters.startTime["range"];
|
|
||||||
updateFilters();
|
|
||||||
}}
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<Duration
|
<Duration
|
||||||
|
@ -17,7 +17,6 @@
|
|||||||
import { parse, format, sub } from "date-fns";
|
import { parse, format, sub } from "date-fns";
|
||||||
import {
|
import {
|
||||||
Row,
|
Row,
|
||||||
Col,
|
|
||||||
Button,
|
Button,
|
||||||
Input,
|
Input,
|
||||||
Modal,
|
Modal,
|
||||||
@ -34,8 +33,7 @@
|
|||||||
export let from = null;
|
export let from = null;
|
||||||
export let to = null;
|
export let to = null;
|
||||||
export let range = "";
|
export let range = "";
|
||||||
|
export let startTimeSelectOptions;
|
||||||
let pendingFrom, pendingTo;
|
|
||||||
|
|
||||||
const now = new Date(Date.now());
|
const now = new Date(Date.now());
|
||||||
const ago = sub(now, { months: 1 });
|
const ago = sub(now, { months: 1 });
|
||||||
@ -48,12 +46,24 @@
|
|||||||
time: format(now, "HH:mm"),
|
time: format(now, "HH:mm"),
|
||||||
};
|
};
|
||||||
|
|
||||||
function reset() {
|
$: pendingFrom = (from == null) ? defaultFrom : fromRFC3339(from)
|
||||||
pendingFrom = from == null ? defaultFrom : fromRFC3339(from);
|
$: pendingTo = (to == null) ? defaultTo : fromRFC3339(to)
|
||||||
pendingTo = to == null ? defaultTo : fromRFC3339(to);
|
$: pendingRange = range
|
||||||
}
|
|
||||||
|
|
||||||
reset();
|
$: isModified =
|
||||||
|
(from != toRFC3339(pendingFrom) || to != toRFC3339(pendingTo, "59")) &&
|
||||||
|
(range != pendingRange) &&
|
||||||
|
!(
|
||||||
|
from == null &&
|
||||||
|
pendingFrom.date == "0000-00-00" &&
|
||||||
|
pendingFrom.time == "00:00"
|
||||||
|
) &&
|
||||||
|
!(
|
||||||
|
to == null &&
|
||||||
|
pendingTo.date == "0000-00-00" &&
|
||||||
|
pendingTo.time == "00:00"
|
||||||
|
) &&
|
||||||
|
!( range == "" && pendingRange == "");
|
||||||
|
|
||||||
function toRFC3339({ date, time }, secs = "00") {
|
function toRFC3339({ date, time }, secs = "00") {
|
||||||
const parsedDate = parse(
|
const parsedDate = parse(
|
||||||
@ -71,19 +81,6 @@
|
|||||||
time: format(parsedDate, "HH:mm"),
|
time: format(parsedDate, "HH:mm"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
$: isModified =
|
|
||||||
(from != toRFC3339(pendingFrom) || to != toRFC3339(pendingTo, "59")) &&
|
|
||||||
!(
|
|
||||||
from == null &&
|
|
||||||
pendingFrom.date == "0000-00-00" &&
|
|
||||||
pendingFrom.time == "00:00"
|
|
||||||
) &&
|
|
||||||
!(
|
|
||||||
to == null &&
|
|
||||||
pendingTo.date == "0000-00-00" &&
|
|
||||||
pendingTo.time == "00:00"
|
|
||||||
);
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
<Modal {isOpen} toggle={() => (isOpen = !isOpen)}>
|
||||||
@ -92,52 +89,82 @@
|
|||||||
{#if range !== ""}
|
{#if range !== ""}
|
||||||
<h4>Current Range</h4>
|
<h4>Current Range</h4>
|
||||||
<Row>
|
<Row>
|
||||||
<Col>
|
<FormGroup class="col">
|
||||||
<Input type="text" value={range} disabled/>
|
<Input type ="select" bind:value={pendingRange} >
|
||||||
</Col>
|
{#each startTimeSelectOptions as { rangeLabel, range }}
|
||||||
|
<option label={rangeLabel} value={range}/>
|
||||||
|
{/each}
|
||||||
|
</Input>
|
||||||
|
</FormGroup>
|
||||||
</Row>
|
</Row>
|
||||||
{/if}
|
{/if}
|
||||||
<h4>From</h4>
|
<h4>From</h4>
|
||||||
<Row>
|
<Row>
|
||||||
<FormGroup class="col">
|
<FormGroup class="col">
|
||||||
<Input type="date" bind:value={pendingFrom.date} />
|
<Input type="date" bind:value={pendingFrom.date} disabled={pendingRange !== ""}/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup class="col">
|
<FormGroup class="col">
|
||||||
<Input type="time" bind:value={pendingFrom.time} />
|
<Input type="time" bind:value={pendingFrom.time} disabled={pendingRange !== ""}/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
</Row>
|
</Row>
|
||||||
<h4>To</h4>
|
<h4>To</h4>
|
||||||
<Row>
|
<Row>
|
||||||
<FormGroup class="col">
|
<FormGroup class="col">
|
||||||
<Input type="date" bind:value={pendingTo.date} />
|
<Input type="date" bind:value={pendingTo.date} disabled={pendingRange !== ""}/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup class="col">
|
<FormGroup class="col">
|
||||||
<Input type="time" bind:value={pendingTo.time} />
|
<Input type="time" bind:value={pendingTo.time} disabled={pendingRange !== ""}/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
</Row>
|
</Row>
|
||||||
</ModalBody>
|
</ModalBody>
|
||||||
<ModalFooter>
|
<ModalFooter>
|
||||||
<Button
|
{#if pendingRange !== ""}
|
||||||
color="primary"
|
<Button
|
||||||
disabled={pendingFrom.date == "0000-00-00" ||
|
color="warning"
|
||||||
pendingTo.date == "0000-00-00"}
|
disabled={pendingRange === ""}
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
isOpen = false;
|
pendingRange = ""
|
||||||
from = toRFC3339(pendingFrom);
|
}}
|
||||||
to = toRFC3339(pendingTo, "59");
|
>
|
||||||
dispatch("set-filter", { from, to });
|
Reset Range
|
||||||
}}
|
</Button>
|
||||||
>
|
<Button
|
||||||
Close & Apply
|
color="primary"
|
||||||
</Button>
|
disabled={pendingRange === ""}
|
||||||
|
on:click={() => {
|
||||||
|
isOpen = false;
|
||||||
|
from = null;
|
||||||
|
to = null;
|
||||||
|
range = pendingRange;
|
||||||
|
dispatch("set-filter", { from, to, range });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Close & Apply Range
|
||||||
|
</Button>
|
||||||
|
{:else}
|
||||||
|
<Button
|
||||||
|
color="primary"
|
||||||
|
disabled={pendingFrom.date == "0000-00-00" ||
|
||||||
|
pendingTo.date == "0000-00-00"}
|
||||||
|
on:click={() => {
|
||||||
|
isOpen = false;
|
||||||
|
from = toRFC3339(pendingFrom);
|
||||||
|
to = toRFC3339(pendingTo, "59");
|
||||||
|
range = "";
|
||||||
|
dispatch("set-filter", { from, to, range });
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
Close & Apply Dates
|
||||||
|
</Button>
|
||||||
|
{/if}
|
||||||
<Button
|
<Button
|
||||||
color="danger"
|
color="danger"
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
isOpen = false;
|
isOpen = false;
|
||||||
from = null;
|
from = null;
|
||||||
to = null;
|
to = null;
|
||||||
reset();
|
range = "";
|
||||||
dispatch("set-filter", { from, to });
|
dispatch("set-filter", { from, to, range });
|
||||||
}}>Reset</Button
|
}}>Reset</Button
|
||||||
>
|
>
|
||||||
<Button on:click={() => (isOpen = false)}>Close</Button>
|
<Button on:click={() => (isOpen = false)}>Close</Button>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user