Add logbook to device info page (#12714)

This commit is contained in:
Paulus Schoutsen 2022-05-17 11:02:23 -07:00 committed by GitHub
parent 90c234ffad
commit c37e1f0c9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 16 deletions

View File

@ -63,6 +63,7 @@ import {
loadDeviceRegistryDetailDialog, loadDeviceRegistryDetailDialog,
showDeviceRegistryDetailDialog, showDeviceRegistryDetailDialog,
} from "./device-registry-detail/show-dialog-device-registry-detail"; } from "./device-registry-detail/show-dialog-device-registry-detail";
import "../../logbook/ha-logbook";
export interface EntityRegistryStateEntry extends EntityRegistryEntry { export interface EntityRegistryStateEntry extends EntityRegistryEntry {
stateName?: string | null; stateName?: string | null;
@ -99,6 +100,8 @@ export class HaConfigDevicePage extends LitElement {
@state() private _deleteButtons?: (TemplateResult | string)[]; @state() private _deleteButtons?: (TemplateResult | string)[];
private _logbookTime = { recent: 86400 };
private _device = memoizeOne( private _device = memoizeOne(
( (
deviceId: string, deviceId: string,
@ -131,6 +134,11 @@ export class HaConfigDevicePage extends LitElement {
) )
); );
private _entityIds = memoizeOne(
(entries: EntityRegistryStateEntry[]): string[] =>
entries.map((entry) => entry.entity_id)
);
private _entitiesByCategory = memoizeOne( private _entitiesByCategory = memoizeOne(
(entities: EntityRegistryEntry[]) => { (entities: EntityRegistryEntry[]) => {
const result = groupBy(entities, (entry) => const result = groupBy(entities, (entry) =>
@ -574,6 +582,25 @@ export class HaConfigDevicePage extends LitElement {
` `
: "" : ""
)} )}
${
isComponentLoaded(this.hass, "logbook")
? html`
<ha-card outlined>
<h1 class="card-header">
${this.hass.localize("panel.logbook")}
</h1>
<ha-logbook
.hass=${this.hass}
.time=${this._logbookTime}
.entityId=${this._entityIds(entities)}
virtualize
narrow
no-icon
></ha-logbook>
</ha-card>
`
: ""
}
</div> </div>
<div class="column"> <div class="column">
${ ${
@ -1228,6 +1255,13 @@ export class HaConfigDevicePage extends LitElement {
.items { .items {
padding-bottom: 16px; padding-bottom: 16px;
} }
ha-logbook {
height: 400px;
}
:host([narrow]) ha-logbook {
height: 235px;
}
`, `,
]; ];
} }

View File

@ -173,19 +173,27 @@ export class HaLogbook extends LitElement {
endTime = new Date(); endTime = new Date();
} }
const entityIdFilter = this.entityId
? ensureArray(this.entityId)
: undefined;
let newEntries: LogbookEntry[];
if (entityIdFilter?.length === 0) {
// filtering by 0 entities, means we never can have any results
newEntries = [];
} else {
this._updateUsers(); this._updateUsers();
if (this.hass.user?.is_admin) { if (this.hass.user?.is_admin) {
this._updateTraceContexts(); this._updateTraceContexts();
} }
let newEntries: LogbookEntry[];
try { try {
newEntries = await getLogbookData( newEntries = await getLogbookData(
this.hass, this.hass,
startTime.toISOString(), startTime.toISOString(),
endTime.toISOString(), endTime.toISOString(),
this.entityId ? ensureArray(this.entityId).toString() : undefined entityIdFilter ? entityIdFilter.toString() : undefined
); );
} catch (err: any) { } catch (err: any) {
if (renderId === this._renderId) { if (renderId === this._renderId) {
@ -193,6 +201,7 @@ export class HaLogbook extends LitElement {
} }
return; return;
} }
}
// New render happening. // New render happening.
if (renderId !== this._renderId) { if (renderId !== this._renderId) {
@ -243,8 +252,11 @@ export class HaLogbook extends LitElement {
static get styles() { static get styles() {
return [ return [
css` css`
:host([virtualize]) { :host {
display: block; display: block;
}
:host([virtualize]) {
height: 100%; height: 100%;
} }