(ui): Add custom endtime input

This commit is contained in:
Ken Hibino
2021-12-03 06:28:10 -08:00
parent 9964cc27b4
commit b218fea8fd

View File

@@ -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>