mirror of
https://github.com/hibiken/asynqmon.git
synced 2025-10-23 14:56:13 +08:00
(ui): Add custom endtime input
This commit is contained in:
@@ -79,8 +79,10 @@ function MetricsView(props: Props) {
|
|||||||
const [endTimeSec, setEndTimeSec] = React.useState(currentUnixtime());
|
const [endTimeSec, setEndTimeSec] = React.useState(currentUnixtime());
|
||||||
const [durationOption, setDurationOption] = React.useState("1h");
|
const [durationOption, setDurationOption] = React.useState("1h");
|
||||||
const [durationSec, setDurationSec] = React.useState(60 * 60); // 1h
|
const [durationSec, setDurationSec] = React.useState(60 * 60); // 1h
|
||||||
const [customDuration, setCustomDuration] = React.useState("");
|
const [customDuration, setCustomDuration] = React.useState(""); // text shown in the input field
|
||||||
const [customDurationError, setCustomDurationError] = React.useState("");
|
const [customDurationError, setCustomDurationError] = React.useState("");
|
||||||
|
const [customEndTime, setCustomEndTime] = React.useState(""); // text shown in the input field
|
||||||
|
const [customEndTimeError, setCustomEndTimeError] = React.useState("");
|
||||||
|
|
||||||
const handleEndTimeOptionChange = (
|
const handleEndTimeOptionChange = (
|
||||||
event: React.ChangeEvent<HTMLInputElement>
|
event: React.ChangeEvent<HTMLInputElement>
|
||||||
@@ -90,12 +92,16 @@ function MetricsView(props: Props) {
|
|||||||
switch (selected) {
|
switch (selected) {
|
||||||
case "real_time":
|
case "real_time":
|
||||||
setEndTimeSec(currentUnixtime());
|
setEndTimeSec(currentUnixtime());
|
||||||
|
setCustomEndTime("");
|
||||||
|
setCustomDurationError("");
|
||||||
break;
|
break;
|
||||||
case "freeze_at_now":
|
case "freeze_at_now":
|
||||||
setEndTimeSec(currentUnixtime());
|
setEndTimeSec(currentUnixtime());
|
||||||
|
setCustomEndTime("");
|
||||||
|
setCustomDurationError("");
|
||||||
break;
|
break;
|
||||||
case "custom":
|
case "custom":
|
||||||
// TODO:
|
// No-op
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -141,6 +147,12 @@ function MetricsView(props: Props) {
|
|||||||
setCustomDuration(event.target.value);
|
setCustomDuration(event.target.value);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleCustomEndTimeChange = (
|
||||||
|
event: React.ChangeEvent<HTMLInputElement>
|
||||||
|
) => {
|
||||||
|
setCustomEndTime(event.target.value);
|
||||||
|
};
|
||||||
|
|
||||||
const handleCustomDurationKeyDown = (
|
const handleCustomDurationKeyDown = (
|
||||||
event: React.KeyboardEvent<HTMLInputElement>
|
event: React.KeyboardEvent<HTMLInputElement>
|
||||||
) => {
|
) => {
|
||||||
@@ -156,6 +168,21 @@ function MetricsView(props: Props) {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const handleCustomEndTimeKeyDown = (
|
||||||
|
event: React.KeyboardEvent<HTMLInputElement>
|
||||||
|
) => {
|
||||||
|
if (event.key === "Enter") {
|
||||||
|
const timeUsecOrNaN = Date.parse(customEndTime);
|
||||||
|
if (isNaN(timeUsecOrNaN)) {
|
||||||
|
setCustomEndTimeError("End time invalid");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setEndTimeOption("custom");
|
||||||
|
setEndTimeSec(Math.floor(timeUsecOrNaN / 1000));
|
||||||
|
setCustomEndTimeError("");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
const handleButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
const handleButtonClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
||||||
setAnchorEl(event.currentTarget);
|
setAnchorEl(event.currentTarget);
|
||||||
};
|
};
|
||||||
@@ -273,6 +300,11 @@ function MetricsView(props: Props) {
|
|||||||
label="yyyy-mm-dd hh:mm:ssz"
|
label="yyyy-mm-dd hh:mm:ssz"
|
||||||
variant="outlined"
|
variant="outlined"
|
||||||
size="small"
|
size="small"
|
||||||
|
onChange={handleCustomEndTimeChange}
|
||||||
|
value={customEndTime}
|
||||||
|
onKeyDown={handleCustomEndTimeKeyDown}
|
||||||
|
error={customEndTimeError !== ""}
|
||||||
|
helperText={customEndTimeError}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
|
Reference in New Issue
Block a user