Updated Scheduler and Maintainance Apps
This commit is contained in:
@@ -57,7 +57,11 @@ import { type SparklineContext } from "./renderers/sparkline";
|
||||
import { buildCalendarBuckets, isoDateLocal, type CalendarEvent } from "./helpers/calendar-bucket";
|
||||
import { renderTriggerProgress, renderMiniSparkline } from "./renderers/progress";
|
||||
import { type HistoryContext } from "./renderers/history";
|
||||
import { renderTaskDetail, renderUserBadge, type TaskDetailContext } from "./renderers/task-detail";
|
||||
import { renderUserBadge, type TaskDetailContext } from "./renderers/task-detail";
|
||||
// The task-detail sub-view as a web component (light-DOM, panel styles apply).
|
||||
// Side-effect import: type-only imports get tree-shaken and the element
|
||||
// would never register.
|
||||
import "./components/task-detail-view";
|
||||
import { computeWindow, VIRTUAL_MIN_ROWS } from "./helpers/virtual-window";
|
||||
|
||||
type View = "overview" | "object" | "task" | "all_objects";
|
||||
@@ -1392,6 +1396,38 @@ export class MaintenanceSupporterPanel extends LitElement {
|
||||
this._resetTask(entryId, taskId, result.value || undefined);
|
||||
}
|
||||
|
||||
private async _postponeTask(entryId: string, taskId: string, until: string): Promise<void> {
|
||||
this._actionLoading = true;
|
||||
try {
|
||||
await this.hass.connection.sendMessagePromise({
|
||||
type: "maintenance_supporter/task/postpone",
|
||||
entry_id: entryId,
|
||||
task_id: taskId,
|
||||
until,
|
||||
});
|
||||
this._showToast(t("postponed", this._lang));
|
||||
await this._loadData();
|
||||
} catch {
|
||||
this._showToast(t("action_error", this._lang));
|
||||
} finally {
|
||||
this._actionLoading = false;
|
||||
}
|
||||
}
|
||||
|
||||
private async _promptPostponeTask(entryId: string, taskId: string): Promise<void> {
|
||||
const dlg = this.shadowRoot!.querySelector<MaintenanceConfirmDialog>("maintenance-confirm-dialog");
|
||||
if (!dlg) return;
|
||||
const result = await dlg.prompt({
|
||||
title: t("postpone", this._lang),
|
||||
message: t("postpone_date_prompt", this._lang),
|
||||
confirmText: t("postpone", this._lang),
|
||||
inputLabel: t("postpone_date_label", this._lang),
|
||||
inputType: "date",
|
||||
});
|
||||
if (!result.confirmed || !result.value) return;
|
||||
this._postponeTask(entryId, taskId, result.value);
|
||||
}
|
||||
|
||||
private async _snoozeTask(entryId: string, taskId: string): Promise<void> {
|
||||
this._actionLoading = true;
|
||||
try {
|
||||
@@ -2855,6 +2891,7 @@ export class MaintenanceSupporterPanel extends LitElement {
|
||||
openQr: (taskName) => this._openQrForTask(entryId, taskId, obj?.object.name || "", taskName),
|
||||
duplicateTask: () => this._duplicateTask(entryId, taskId),
|
||||
promptReset: () => this._promptResetTask(entryId, taskId),
|
||||
promptPostpone: () => this._promptPostponeTask(entryId, taskId),
|
||||
snoozeTask: () => this._snoozeTask(entryId, taskId),
|
||||
printWorksheet: () => this._printTaskWorksheet(entryId, taskId),
|
||||
deleteTask: () => this._deleteTask(entryId, taskId),
|
||||
@@ -2869,7 +2906,10 @@ export class MaintenanceSupporterPanel extends LitElement {
|
||||
if (!this._selectedEntryId || !this._selectedTaskId) return nothing;
|
||||
const task = this._getTask(this._selectedEntryId, this._selectedTaskId);
|
||||
if (!task) return html`<p>Task not found.</p>`;
|
||||
return renderTaskDetail(task, this._taskDetailCtx());
|
||||
return html`<maintenance-task-detail-view
|
||||
.task=${task}
|
||||
.ctx=${this._taskDetailCtx()}
|
||||
></maintenance-task-detail-view>`;
|
||||
}
|
||||
|
||||
/** v2.2.0: open the in-place history-edit dialog for the given entry.
|
||||
|
||||
Reference in New Issue
Block a user