Repair: load translations for all integrations with issues (#13252)

This commit is contained in:
Bram Kragten 2022-07-21 16:52:44 +02:00 committed by GitHub
parent c99f00ba50
commit 38f19b6180
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 50 additions and 47 deletions

View File

@ -11,7 +11,7 @@ export const createCloseHeading = (
hass: HomeAssistant, hass: HomeAssistant,
title: string | TemplateResult title: string | TemplateResult
) => html` ) => html`
<span class="header_title">${title}</span> <div class="header_title">${title}</div>
<ha-icon-button <ha-icon-button
.label=${hass.localize("ui.dialogs.generic.close")} .label=${hass.localize("ui.dialogs.generic.close")}
.path=${mdiClose} .path=${mdiClose}
@ -95,8 +95,8 @@ export class HaDialog extends DialogBase {
color: inherit; color: inherit;
} }
.header_title { .header_title {
margin-right: 40px; margin-right: 32px;
margin-inline-end: 40px; margin-inline-end: 32px;
margin-inline-start: initial; margin-inline-start: initial;
direction: var(--direction); direction: var(--direction);
} }

View File

@ -124,7 +124,10 @@ class HaConfigDashboard extends LitElement {
@state() private _tip?: string; @state() private _tip?: string;
@state() private _repairsIssues: [RepairsIssue[], number] = [[], 0]; @state() private _repairsIssues: { issues: RepairsIssue[]; total: number } = {
issues: [],
total: 0,
};
private _pages = memoizeOne((clouStatus, isLoaded) => { private _pages = memoizeOne((clouStatus, isLoaded) => {
const pages: PageNavigation[] = []; const pages: PageNavigation[] = [];
@ -142,10 +145,11 @@ class HaConfigDashboard extends LitElement {
}); });
protected render(): TemplateResult { protected render(): TemplateResult {
const [canInstallUpdates, totalUpdates] = const { updates: canInstallUpdates, total: totalUpdates } =
this._filterUpdateEntitiesWithInstall(this.hass.states); this._filterUpdateEntitiesWithInstall(this.hass.states);
const [repairsIssues, totalRepairIssues] = this._repairsIssues; const { issues: repairsIssues, total: totalRepairIssues } =
this._repairsIssues;
return html` return html`
<ha-app-layout> <ha-app-layout>
@ -264,31 +268,31 @@ class HaConfigDashboard extends LitElement {
} }
private _filterUpdateEntitiesWithInstall = memoizeOne( private _filterUpdateEntitiesWithInstall = memoizeOne(
(entities: HassEntities): [UpdateEntity[], number] => { (entities: HassEntities): { updates: UpdateEntity[]; total: number } => {
const updates = filterUpdateEntitiesWithInstall(entities); const updates = filterUpdateEntitiesWithInstall(entities);
return [ return {
updates.slice(0, updates.length === 3 ? updates.length : 2), updates: updates.slice(0, updates.length === 3 ? updates.length : 2),
updates.length, total: updates.length,
]; };
} }
); );
private async _fetchIssues(): Promise<void> { private async _fetchIssues(): Promise<void> {
const [, repairsIssues] = await Promise.all([ const repairsIssues = (await fetchRepairsIssues(this.hass)).issues;
this.hass.loadBackendTranslation("issues"),
fetchRepairsIssues(this.hass),
]);
this._repairsIssues = [ this._repairsIssues = {
repairsIssues.issues issues: repairsIssues
.sort((a, b) => severitySort[a.severity] - severitySort[b.severity]) .sort((a, b) => severitySort[a.severity] - severitySort[b.severity])
.slice( .slice(0, repairsIssues.length === 3 ? repairsIssues.length : 2),
0, total: repairsIssues.length,
repairsIssues.issues.length === 3 ? repairsIssues.issues.length : 2 };
),
repairsIssues.issues.length, const integrations: Set<string> = new Set();
]; for (const issue of this._repairsIssues.issues) {
integrations.add(issue.domain);
}
this.hass.loadBackendTranslation("issues", [...integrations]);
} }
private _showQuickBar(): void { private _showQuickBar(): void {

View File

@ -2,8 +2,8 @@ import "@material/mwc-button/mwc-button";
import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit";
import { customElement, property, state } from "lit/decorators"; import { customElement, property, state } from "lit/decorators";
import { fireEvent } from "../../../common/dom/fire_event"; import { fireEvent } from "../../../common/dom/fire_event";
import "../../../components/ha-alert";
import { createCloseHeading } from "../../../components/ha-dialog"; import { createCloseHeading } from "../../../components/ha-dialog";
import "../../../components/ha-markdown";
import type { RepairsIssue } from "../../../data/repairs"; import type { RepairsIssue } from "../../../data/repairs";
import { haStyleDialog } from "../../../resources/styles"; import { haStyleDialog } from "../../../resources/styles";
import type { HomeAssistant } from "../../../types"; import type { HomeAssistant } from "../../../types";
@ -17,8 +17,6 @@ class DialogRepairsIssue extends LitElement {
@state() private _params?: RepairsIssueDialogParams; @state() private _params?: RepairsIssueDialogParams;
@state() private _error?: string;
public showDialog(params: RepairsIssueDialogParams): void { public showDialog(params: RepairsIssueDialogParams): void {
this._params = params; this._params = params;
this._issue = this._params.issue; this._issue = this._params.issue;
@ -27,7 +25,6 @@ class DialogRepairsIssue extends LitElement {
public closeDialog() { public closeDialog() {
this._params = undefined; this._params = undefined;
this._issue = undefined; this._issue = undefined;
this._error = undefined;
fireEvent(this, "dialog-closed", { dialog: this.localName }); fireEvent(this, "dialog-closed", { dialog: this.localName });
} }
@ -42,6 +39,7 @@ class DialogRepairsIssue extends LitElement {
@closed=${this.closeDialog} @closed=${this.closeDialog}
scrimClickAction scrimClickAction
escapeKeyAction escapeKeyAction
.hideActions=${!this._issue.learn_more_url}
.heading=${createCloseHeading( .heading=${createCloseHeading(
this.hass, this.hass,
this.hass.localize( this.hass.localize(
@ -52,27 +50,28 @@ class DialogRepairsIssue extends LitElement {
)} )}
> >
<div> <div>
${this._error <ha-markdown
? html`<ha-alert alert-type="error">${this._error}</ha-alert>` allowsvg
: ""} breaks
${this.hass.localize( .content=${this.hass.localize(
`component.${this._issue.domain}.issues.${ `component.${this._issue.domain}.issues.${
this._issue.translation_key || this._issue.issue_id this._issue.translation_key || this._issue.issue_id
}.description }.description`,
}`,
this._issue.translation_placeholders this._issue.translation_placeholders
)} )}
></ha-markdown>
${this._issue.breaks_in_ha_version ${this._issue.breaks_in_ha_version
? html` ? html`
This will no longer work as of the <br />This will no longer work as of the
${this._issue.breaks_in_ha_version} release of Home Assistant. ${this._issue.breaks_in_ha_version} release of Home Assistant.
` `
: ""} : ""}
The issue is ${this._issue.severity} severity <br />The issue is ${this._issue.severity} severity.<br />We can not
${this._issue.is_fixable ? "and fixable" : "but not fixable"}. automatically repair this issue for you.
${this._issue.dismissed_version ${this._issue.dismissed_version
? html` ? html`
This issue has been dismissed in version <br />This issue has been dismissed in version
${this._issue.dismissed_version}. ${this._issue.dismissed_version}.
` `
: ""} : ""}

View File

@ -55,12 +55,12 @@ class HaConfigRepairsDashboard extends LitElement {
} }
private async _fetchIssues(): Promise<void> { private async _fetchIssues(): Promise<void> {
const [, repairsIssues] = await Promise.all([ this._repairsIssues = (await fetchRepairsIssues(this.hass)).issues;
this.hass.loadBackendTranslation("issues"), const integrations: Set<string> = new Set();
fetchRepairsIssues(this.hass), for (const issue of this._repairsIssues) {
]); integrations.add(issue.domain);
}
this._repairsIssues = repairsIssues.issues; this.hass.loadBackendTranslation("issues", [...integrations]);
} }
static styles = css` static styles = css`