mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-16 13:56:35 +00:00
add previous and next button to History and Logbook (#22802)
* add previous and next button to History and Logbook * used date-fns and changed media-query-resolution to fit on mobiles * hide .prev and .next on small screens; optimized dateRange for ranges lower 1 day * fixed Date type number
This commit is contained in:
parent
9acf946097
commit
bed470f79d
@ -15,6 +15,10 @@ import {
|
|||||||
startOfMonth,
|
startOfMonth,
|
||||||
startOfWeek,
|
startOfWeek,
|
||||||
startOfYear,
|
startOfYear,
|
||||||
|
differenceInMilliseconds,
|
||||||
|
addMilliseconds,
|
||||||
|
subMilliseconds,
|
||||||
|
roundToNearestHours,
|
||||||
} from "date-fns";
|
} from "date-fns";
|
||||||
import type { CSSResultGroup, PropertyValues, TemplateResult } from "lit";
|
import type { CSSResultGroup, PropertyValues, TemplateResult } from "lit";
|
||||||
import { LitElement, css, html, nothing } from "lit";
|
import { LitElement, css, html, nothing } from "lit";
|
||||||
@ -30,6 +34,8 @@ import "./date-range-picker";
|
|||||||
import "./ha-icon-button";
|
import "./ha-icon-button";
|
||||||
import "./ha-svg-icon";
|
import "./ha-svg-icon";
|
||||||
import "./ha-textfield";
|
import "./ha-textfield";
|
||||||
|
import "./ha-icon-button-next";
|
||||||
|
import "./ha-icon-button-prev";
|
||||||
|
|
||||||
export interface DateRangePickerRanges {
|
export interface DateRangePickerRanges {
|
||||||
[key: string]: [Date, Date];
|
[key: string]: [Date, Date];
|
||||||
@ -249,6 +255,12 @@ export class HaDateRangePicker extends LitElement {
|
|||||||
<div slot="input" class="date-range-inputs" @click=${this._handleClick}>
|
<div slot="input" class="date-range-inputs" @click=${this._handleClick}>
|
||||||
${!this.minimal
|
${!this.minimal
|
||||||
? html`<ha-svg-icon .path=${mdiCalendar}></ha-svg-icon>
|
? html`<ha-svg-icon .path=${mdiCalendar}></ha-svg-icon>
|
||||||
|
<ha-icon-button-prev
|
||||||
|
.label=${this.hass.localize("ui.common.previous")}
|
||||||
|
class="prev"
|
||||||
|
@click=${this._handlePrev}
|
||||||
|
>
|
||||||
|
</ha-icon-button-prev>
|
||||||
<ha-textfield
|
<ha-textfield
|
||||||
.value=${this.timePicker
|
.value=${this.timePicker
|
||||||
? formatDateTime(
|
? formatDateTime(
|
||||||
@ -286,7 +298,13 @@ export class HaDateRangePicker extends LitElement {
|
|||||||
.disabled=${this.disabled}
|
.disabled=${this.disabled}
|
||||||
@click=${this._handleInputClick}
|
@click=${this._handleInputClick}
|
||||||
readonly
|
readonly
|
||||||
></ha-textfield>`
|
></ha-textfield>
|
||||||
|
<ha-icon-button-next
|
||||||
|
.label=${this.hass.localize("ui.common.next")}
|
||||||
|
class="next"
|
||||||
|
@click=${this._handleNext}
|
||||||
|
>
|
||||||
|
</ha-icon-button-next>`
|
||||||
: html`<ha-icon-button
|
: html`<ha-icon-button
|
||||||
.label=${this.hass.localize(
|
.label=${this.hass.localize(
|
||||||
"ui.components.date-range-picker.select_date_range"
|
"ui.components.date-range-picker.select_date_range"
|
||||||
@ -317,6 +335,45 @@ export class HaDateRangePicker extends LitElement {
|
|||||||
`;
|
`;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private _handleNext(): void {
|
||||||
|
const dateRange = [
|
||||||
|
roundToNearestHours(this.endDate),
|
||||||
|
subMilliseconds(
|
||||||
|
roundToNearestHours(
|
||||||
|
addMilliseconds(
|
||||||
|
this.endDate,
|
||||||
|
Math.max(
|
||||||
|
3600000,
|
||||||
|
differenceInMilliseconds(this.endDate, this.startDate)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
1
|
||||||
|
),
|
||||||
|
];
|
||||||
|
const dateRangePicker = this._dateRangePicker;
|
||||||
|
dateRangePicker.clickRange(dateRange);
|
||||||
|
dateRangePicker.clickedApply();
|
||||||
|
}
|
||||||
|
|
||||||
|
private _handlePrev(): void {
|
||||||
|
const dateRange = [
|
||||||
|
roundToNearestHours(
|
||||||
|
subMilliseconds(
|
||||||
|
this.startDate,
|
||||||
|
Math.max(
|
||||||
|
3600000,
|
||||||
|
differenceInMilliseconds(this.endDate, this.startDate)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
),
|
||||||
|
subMilliseconds(roundToNearestHours(this.startDate), 1),
|
||||||
|
];
|
||||||
|
const dateRangePicker = this._dateRangePicker;
|
||||||
|
dateRangePicker.clickRange(dateRange);
|
||||||
|
dateRangePicker.clickedApply();
|
||||||
|
}
|
||||||
|
|
||||||
private _setDateRange(ev: CustomEvent<ActionDetail>) {
|
private _setDateRange(ev: CustomEvent<ActionDetail>) {
|
||||||
const dateRange = Object.values(this.ranges || this._ranges!)[
|
const dateRange = Object.values(this.ranges || this._ranges!)[
|
||||||
ev.detail.index
|
ev.detail.index
|
||||||
@ -418,7 +475,9 @@ export class HaDateRangePicker extends LitElement {
|
|||||||
min-width: inherit;
|
min-width: inherit;
|
||||||
}
|
}
|
||||||
|
|
||||||
ha-svg-icon {
|
ha-svg-icon,
|
||||||
|
.prev,
|
||||||
|
.next {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user