mirror of
https://github.com/home-assistant/frontend
synced 2024-09-28 00:43:28 +02:00
Add error checking to download button (#19596)
Clean up history panel + add better error checking
This commit is contained in:
parent
b6bc88e460
commit
8a410d6c82
@ -54,6 +54,7 @@ import { SubscribeMixin } from "../../mixins/subscribe-mixin";
|
|||||||
import { haStyle } from "../../resources/styles";
|
import { haStyle } from "../../resources/styles";
|
||||||
import { HomeAssistant } from "../../types";
|
import { HomeAssistant } from "../../types";
|
||||||
import { fileDownload } from "../../util/file_download";
|
import { fileDownload } from "../../util/file_download";
|
||||||
|
import { showAlertDialog } from "../../dialogs/generic/show-dialog-box";
|
||||||
|
|
||||||
class HaPanelHistory extends SubscribeMixin(LitElement) {
|
class HaPanelHistory extends SubscribeMixin(LitElement) {
|
||||||
@property({ attribute: false }) hass!: HomeAssistant;
|
@property({ attribute: false }) hass!: HomeAssistant;
|
||||||
@ -176,7 +177,7 @@ class HaPanelHistory extends SubscribeMixin(LitElement) {
|
|||||||
<ha-icon-button
|
<ha-icon-button
|
||||||
slot="actionItems"
|
slot="actionItems"
|
||||||
@click=${this._downloadHistory}
|
@click=${this._downloadHistory}
|
||||||
.disabled=${this._isLoading || !this._targetPickerValue}
|
.disabled=${this._isLoading}
|
||||||
.path=${mdiDownload}
|
.path=${mdiDownload}
|
||||||
.label=${this.hass.localize("ui.panel.history.download_data")}
|
.label=${this.hass.localize("ui.panel.history.download_data")}
|
||||||
></ha-icon-button>
|
></ha-icon-button>
|
||||||
@ -371,14 +372,12 @@ class HaPanelHistory extends SubscribeMixin(LitElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _getStats() {
|
private async _getStats() {
|
||||||
const entityIds = this._getEntityIds();
|
const statisticIds = this._getEntityIds();
|
||||||
if (!entityIds) {
|
if (!statisticIds) {
|
||||||
|
this._statisticsHistory = undefined;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this._getStatistics(entityIds);
|
|
||||||
}
|
|
||||||
|
|
||||||
private async _getStatistics(statisticIds: string[]): Promise<void> {
|
|
||||||
try {
|
try {
|
||||||
const statistics = await fetchStatistics(
|
const statistics = await fetchStatistics(
|
||||||
this.hass!,
|
this.hass!,
|
||||||
@ -433,23 +432,14 @@ class HaPanelHistory extends SubscribeMixin(LitElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async _getHistory() {
|
private async _getHistory() {
|
||||||
if (!this._targetPickerValue) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this._isLoading = true;
|
|
||||||
const entityIds = this._getEntityIds();
|
const entityIds = this._getEntityIds();
|
||||||
|
|
||||||
if (entityIds === undefined) {
|
if (!entityIds) {
|
||||||
this._isLoading = false;
|
|
||||||
this._stateHistory = undefined;
|
this._stateHistory = undefined;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entityIds.length === 0) {
|
this._isLoading = true;
|
||||||
this._isLoading = false;
|
|
||||||
this._stateHistory = { line: [], timeline: [] };
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this._subscribed) {
|
if (this._subscribed) {
|
||||||
this._unsubscribeHistory();
|
this._unsubscribeHistory();
|
||||||
@ -639,10 +629,20 @@ class HaPanelHistory extends SubscribeMixin(LitElement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private _downloadHistory() {
|
private _downloadHistory() {
|
||||||
|
const entities = this._getEntityIds();
|
||||||
|
if (!entities || !this._mungedStateHistory) {
|
||||||
|
showAlertDialog(this, {
|
||||||
|
title: this.hass.localize("ui.panel.history.download_data_error"),
|
||||||
|
text: this.hass.localize("ui.panel.history.error_no_data"),
|
||||||
|
warning: true,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const csv: string[] = ["entity_id,state,last_changed\n"];
|
const csv: string[] = ["entity_id,state,last_changed\n"];
|
||||||
const formatDate = (number) => new Date(number).toISOString();
|
const formatDate = (number) => new Date(number).toISOString();
|
||||||
|
|
||||||
for (const line of this._mungedStateHistory!.line) {
|
for (const line of this._mungedStateHistory.line) {
|
||||||
for (const entity of line.data) {
|
for (const entity of line.data) {
|
||||||
const entityId = entity.entity_id;
|
const entityId = entity.entity_id;
|
||||||
for (const data of [entity.states, entity.statistics]) {
|
for (const data of [entity.states, entity.statistics]) {
|
||||||
@ -655,7 +655,7 @@ class HaPanelHistory extends SubscribeMixin(LitElement) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const timeline of this._mungedStateHistory!.timeline) {
|
for (const timeline of this._mungedStateHistory.timeline) {
|
||||||
const entityId = timeline.entity_id;
|
const entityId = timeline.entity_id;
|
||||||
for (const s of timeline.data) {
|
for (const s of timeline.data) {
|
||||||
csv.push(`${entityId},${s.state},${formatDate(s.last_changed)}\n`);
|
csv.push(`${entityId},${s.state},${formatDate(s.last_changed)}\n`);
|
||||||
|
@ -6505,7 +6505,9 @@
|
|||||||
"start_search": "Start by selecting an area, device or entity above",
|
"start_search": "Start by selecting an area, device or entity above",
|
||||||
"add_all": "Add all entities",
|
"add_all": "Add all entities",
|
||||||
"remove_all": "Remove all selections",
|
"remove_all": "Remove all selections",
|
||||||
"download_data": "Download data"
|
"download_data": "Download data",
|
||||||
|
"download_data_error": "Unable to download data",
|
||||||
|
"error_no_data": "You need to select data first."
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"tips": {
|
"tips": {
|
||||||
|
Loading…
Reference in New Issue
Block a user