mirror of
https://github.com/home-assistant/frontend.git
synced 2025-07-26 18:56:39 +00:00
Visual fixes and resize observer for scheduler form (#14527)
This commit is contained in:
parent
ff64dc2631
commit
83ba594cc4
@ -17,15 +17,17 @@ import {
|
|||||||
unsafeCSS,
|
unsafeCSS,
|
||||||
} from "lit";
|
} from "lit";
|
||||||
import { customElement, property, state } from "lit/decorators";
|
import { customElement, property, state } from "lit/decorators";
|
||||||
|
import { firstWeekdayIndex } from "../../../../common/datetime/first_weekday";
|
||||||
import { formatTime24h } from "../../../../common/datetime/format_time";
|
import { formatTime24h } from "../../../../common/datetime/format_time";
|
||||||
import { useAmPm } from "../../../../common/datetime/use_am_pm";
|
import { useAmPm } from "../../../../common/datetime/use_am_pm";
|
||||||
import { firstWeekdayIndex } from "../../../../common/datetime/first_weekday";
|
|
||||||
import { fireEvent } from "../../../../common/dom/fire_event";
|
import { fireEvent } from "../../../../common/dom/fire_event";
|
||||||
|
import { debounce } from "../../../../common/util/debounce";
|
||||||
import "../../../../components/ha-icon-picker";
|
import "../../../../components/ha-icon-picker";
|
||||||
import "../../../../components/ha-textfield";
|
import "../../../../components/ha-textfield";
|
||||||
import { Schedule, ScheduleDay, weekdays } from "../../../../data/schedule";
|
import { Schedule, ScheduleDay, weekdays } from "../../../../data/schedule";
|
||||||
import { haStyle } from "../../../../resources/styles";
|
import { haStyle } from "../../../../resources/styles";
|
||||||
import { HomeAssistant } from "../../../../types";
|
import { HomeAssistant } from "../../../../types";
|
||||||
|
import { installResizeObserver } from "../../../lovelace/common/install-resize-observer";
|
||||||
|
|
||||||
const defaultFullCalendarConfig: CalendarOptions = {
|
const defaultFullCalendarConfig: CalendarOptions = {
|
||||||
plugins: [timeGridPlugin, interactionPlugin],
|
plugins: [timeGridPlugin, interactionPlugin],
|
||||||
@ -71,6 +73,8 @@ class HaScheduleForm extends LitElement {
|
|||||||
|
|
||||||
private _item?: Schedule;
|
private _item?: Schedule;
|
||||||
|
|
||||||
|
private _resizeObserver?: ResizeObserver;
|
||||||
|
|
||||||
set item(item: Schedule) {
|
set item(item: Schedule) {
|
||||||
this._item = item;
|
this._item = item;
|
||||||
if (item) {
|
if (item) {
|
||||||
@ -104,6 +108,40 @@ class HaScheduleForm extends LitElement {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public connectedCallback(): void {
|
||||||
|
super.connectedCallback();
|
||||||
|
this.updateComplete.then(() => this._attachObserver());
|
||||||
|
}
|
||||||
|
|
||||||
|
public disconnectedCallback(): void {
|
||||||
|
if (this._resizeObserver) {
|
||||||
|
this._resizeObserver.disconnect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private _measureForm() {
|
||||||
|
const form = this.shadowRoot!.querySelector(".form");
|
||||||
|
if (!form) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.calendar?.updateSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
private async _attachObserver(): Promise<void> {
|
||||||
|
if (!this._resizeObserver) {
|
||||||
|
await installResizeObserver();
|
||||||
|
this._resizeObserver = new ResizeObserver(
|
||||||
|
debounce(() => this._measureForm(), 250, false)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
const form = this.shadowRoot!.querySelector(".form");
|
||||||
|
if (!form) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this._resizeObserver.observe(form);
|
||||||
|
}
|
||||||
|
|
||||||
protected render(): TemplateResult {
|
protected render(): TemplateResult {
|
||||||
if (!this.hass) {
|
if (!this.hass) {
|
||||||
return html``;
|
return html``;
|
||||||
@ -397,12 +435,45 @@ class HaScheduleForm extends LitElement {
|
|||||||
--fc-border-color: var(--divider-color);
|
--fc-border-color: var(--divider-color);
|
||||||
--fc-event-border-color: var(--divider-color);
|
--fc-event-border-color: var(--divider-color);
|
||||||
}
|
}
|
||||||
.fc-scroller {
|
|
||||||
overflow-x: visible !important;
|
|
||||||
}
|
|
||||||
.fc-v-event .fc-event-time {
|
.fc-v-event .fc-event-time {
|
||||||
white-space: inherit;
|
white-space: inherit;
|
||||||
}
|
}
|
||||||
|
.fc-theme-standard .fc-scrollgrid {
|
||||||
|
border: 1px solid var(--divider-color);
|
||||||
|
border-radius: var(--mdc-shape-small, 4px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.fc-scrollgrid-section-header td {
|
||||||
|
border: none;
|
||||||
|
}
|
||||||
|
:host([narrow]) .fc-scrollgrid-sync-table {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
table.fc-scrollgrid-sync-table
|
||||||
|
tbody
|
||||||
|
tr:first-child
|
||||||
|
.fc-daygrid-day-top {
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
.fc-scroller::-webkit-scrollbar {
|
||||||
|
width: 0.4rem;
|
||||||
|
height: 0.4rem;
|
||||||
|
}
|
||||||
|
.fc-scroller::-webkit-scrollbar-thumb {
|
||||||
|
-webkit-border-radius: 4px;
|
||||||
|
border-radius: 4px;
|
||||||
|
background: var(--scrollbar-thumb-color);
|
||||||
|
}
|
||||||
|
.fc-scroller {
|
||||||
|
overflow-y: auto;
|
||||||
|
scrollbar-color: var(--scrollbar-thumb-color) transparent;
|
||||||
|
scrollbar-width: thin;
|
||||||
|
}
|
||||||
|
|
||||||
|
.fc-timegrid-event-short .fc-event-time:after {
|
||||||
|
content: ""; /* prevent trailing dash in half hour events since we do not have event titles */
|
||||||
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
color: inherit !important;
|
color: inherit !important;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user