mirror of
https://github.com/home-assistant/frontend.git
synced 2025-04-19 10:57:19 +00:00
Rename entity filter to entity domain filter (#24587)
This commit is contained in:
parent
e8805be561
commit
616c1fda81
@ -1,27 +1,27 @@
|
||||
import { computeDomain } from "./compute_domain";
|
||||
|
||||
export type FilterFunc = (entityId: string) => boolean;
|
||||
export type EntityDomainFilterFunc = (entityId: string) => boolean;
|
||||
|
||||
export interface EntityFilter {
|
||||
export interface EntityDomainFilter {
|
||||
include_domains: string[];
|
||||
include_entities: string[];
|
||||
exclude_domains: string[];
|
||||
exclude_entities: string[];
|
||||
}
|
||||
|
||||
export const isEmptyFilter = (filter: EntityFilter) =>
|
||||
export const isEmptyEntityDomainFilter = (filter: EntityDomainFilter) =>
|
||||
filter.include_domains.length +
|
||||
filter.include_entities.length +
|
||||
filter.exclude_domains.length +
|
||||
filter.exclude_entities.length ===
|
||||
0;
|
||||
|
||||
export const generateFilter = (
|
||||
export const generateEntityDomainFilter = (
|
||||
includeDomains?: string[],
|
||||
includeEntities?: string[],
|
||||
excludeDomains?: string[],
|
||||
excludeEntities?: string[]
|
||||
): FilterFunc => {
|
||||
): EntityDomainFilterFunc => {
|
||||
const includeDomainsSet = new Set(includeDomains);
|
||||
const includeEntitiesSet = new Set(includeEntities);
|
||||
const excludeDomainsSet = new Set(excludeDomains);
|
@ -1,4 +1,4 @@
|
||||
import type { EntityFilter } from "../common/entity/entity_filter";
|
||||
import type { EntityDomainFilter } from "../common/entity/entity_domain_filter";
|
||||
import type { HomeAssistant } from "../types";
|
||||
|
||||
type StrictConnectionMode = "disabled" | "guard_page" | "drop_connection";
|
||||
@ -36,10 +36,10 @@ export interface CloudStatusLoggedIn {
|
||||
cloud_last_disconnect_reason: { clean: boolean; reason: string } | null;
|
||||
email: string;
|
||||
google_registered: boolean;
|
||||
google_entities: EntityFilter;
|
||||
google_entities: EntityDomainFilter;
|
||||
google_domains: string[];
|
||||
alexa_registered: boolean;
|
||||
alexa_entities: EntityFilter;
|
||||
alexa_entities: EntityDomainFilter;
|
||||
prefs: CloudPreferences;
|
||||
remote_domain: string | undefined;
|
||||
remote_connected: boolean;
|
||||
|
@ -4,7 +4,7 @@ import { css, html, LitElement, nothing } from "lit";
|
||||
import { property, state } from "lit/decorators";
|
||||
import memoizeOne from "memoize-one";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { isEmptyFilter } from "../../../common/entity/entity_filter";
|
||||
import { isEmptyEntityDomainFilter } from "../../../common/entity/entity_domain_filter";
|
||||
import "../../../components/ha-alert";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-settings-row";
|
||||
@ -56,7 +56,9 @@ export class CloudAlexaPref extends LitElement {
|
||||
const alexa_registered = this.cloudStatus.alexa_registered;
|
||||
const { alexa_enabled, alexa_report_state } = this.cloudStatus!.prefs;
|
||||
|
||||
const manualConfig = !isEmptyFilter(this.cloudStatus.alexa_entities);
|
||||
const manualConfig = !isEmptyEntityDomainFilter(
|
||||
this.cloudStatus.alexa_entities
|
||||
);
|
||||
|
||||
return html`
|
||||
<ha-card outlined>
|
||||
|
@ -4,7 +4,7 @@ import { css, html, LitElement, nothing } from "lit";
|
||||
import { property, state } from "lit/decorators";
|
||||
import memoizeOne from "memoize-one";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { isEmptyFilter } from "../../../common/entity/entity_filter";
|
||||
import { isEmptyEntityDomainFilter } from "../../../common/entity/entity_domain_filter";
|
||||
import "../../../components/ha-alert";
|
||||
import "../../../components/ha-card";
|
||||
import "../../../components/ha-settings-row";
|
||||
@ -62,7 +62,9 @@ export class CloudGooglePref extends LitElement {
|
||||
const { google_enabled, google_report_state, google_secure_devices_pin } =
|
||||
this.cloudStatus.prefs;
|
||||
|
||||
const manualConfig = !isEmptyFilter(this.cloudStatus.google_entities);
|
||||
const manualConfig = !isEmptyEntityDomainFilter(
|
||||
this.cloudStatus.google_entities
|
||||
);
|
||||
|
||||
return html`
|
||||
<ha-card outlined>
|
||||
|
@ -6,13 +6,13 @@ import memoizeOne from "memoize-one";
|
||||
import { isComponentLoaded } from "../../../common/config/is_component_loaded";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import type {
|
||||
EntityFilter,
|
||||
FilterFunc,
|
||||
} from "../../../common/entity/entity_filter";
|
||||
EntityDomainFilter,
|
||||
EntityDomainFilterFunc,
|
||||
} from "../../../common/entity/entity_domain_filter";
|
||||
import {
|
||||
generateFilter,
|
||||
isEmptyFilter,
|
||||
} from "../../../common/entity/entity_filter";
|
||||
generateEntityDomainFilter,
|
||||
isEmptyEntityDomainFilter,
|
||||
} from "../../../common/entity/entity_domain_filter";
|
||||
import "../../../components/ha-aliases-editor";
|
||||
import "../../../components/ha-settings-row";
|
||||
import "../../../components/ha-switch";
|
||||
@ -101,14 +101,14 @@ export class EntityVoiceSettings extends SubscribeMixin(LitElement) {
|
||||
}
|
||||
|
||||
private _getEntityFilterFuncs = memoizeOne(
|
||||
(googleFilter: EntityFilter, alexaFilter: EntityFilter) => ({
|
||||
google: generateFilter(
|
||||
(googleFilter: EntityDomainFilter, alexaFilter: EntityDomainFilter) => ({
|
||||
google: generateEntityDomainFilter(
|
||||
googleFilter.include_domains,
|
||||
googleFilter.include_entities,
|
||||
googleFilter.exclude_domains,
|
||||
googleFilter.exclude_entities
|
||||
),
|
||||
alexa: generateFilter(
|
||||
alexa: generateEntityDomainFilter(
|
||||
alexaFilter.include_domains,
|
||||
alexaFilter.include_entities,
|
||||
alexaFilter.exclude_domains,
|
||||
@ -131,10 +131,12 @@ export class EntityVoiceSettings extends SubscribeMixin(LitElement) {
|
||||
|
||||
const alexaManual =
|
||||
alexaEnabled &&
|
||||
!isEmptyFilter((this._cloudStatus as CloudStatusLoggedIn).alexa_entities);
|
||||
!isEmptyEntityDomainFilter(
|
||||
(this._cloudStatus as CloudStatusLoggedIn).alexa_entities
|
||||
);
|
||||
const googleManual =
|
||||
googleEnabled &&
|
||||
!isEmptyFilter(
|
||||
!isEmptyEntityDomainFilter(
|
||||
(this._cloudStatus as CloudStatusLoggedIn).google_entities
|
||||
);
|
||||
|
||||
@ -159,8 +161,8 @@ export class EntityVoiceSettings extends SubscribeMixin(LitElement) {
|
||||
|
||||
let manFilterFuncs:
|
||||
| {
|
||||
google: FilterFunc;
|
||||
alexa: FilterFunc;
|
||||
google: EntityDomainFilterFunc;
|
||||
alexa: EntityDomainFilterFunc;
|
||||
}
|
||||
| undefined;
|
||||
|
||||
|
@ -13,11 +13,11 @@ import memoize from "memoize-one";
|
||||
import type { HASSDomEvent } from "../../../common/dom/fire_event";
|
||||
import { fireEvent } from "../../../common/dom/fire_event";
|
||||
import { computeStateName } from "../../../common/entity/compute_state_name";
|
||||
import type { EntityFilter } from "../../../common/entity/entity_filter";
|
||||
import type { EntityDomainFilter } from "../../../common/entity/entity_domain_filter";
|
||||
import {
|
||||
generateFilter,
|
||||
isEmptyFilter,
|
||||
} from "../../../common/entity/entity_filter";
|
||||
generateEntityDomainFilter,
|
||||
isEmptyEntityDomainFilter,
|
||||
} from "../../../common/entity/entity_domain_filter";
|
||||
import { navigate } from "../../../common/navigate";
|
||||
import type {
|
||||
DataTableColumnContainer,
|
||||
@ -257,14 +257,14 @@ export class VoiceAssistantsExpose extends LitElement {
|
||||
);
|
||||
|
||||
private _getEntityFilterFuncs = memoize(
|
||||
(googleFilter: EntityFilter, alexaFilter: EntityFilter) => ({
|
||||
google: generateFilter(
|
||||
(googleFilter: EntityDomainFilter, alexaFilter: EntityDomainFilter) => ({
|
||||
google: generateEntityDomainFilter(
|
||||
googleFilter.include_domains,
|
||||
googleFilter.include_entities,
|
||||
googleFilter.exclude_domains,
|
||||
googleFilter.exclude_entities
|
||||
),
|
||||
amazon: generateFilter(
|
||||
amazon: generateEntityDomainFilter(
|
||||
alexaFilter.include_domains,
|
||||
alexaFilter.include_entities,
|
||||
alexaFilter.exclude_domains,
|
||||
@ -320,12 +320,12 @@ export class VoiceAssistantsExpose extends LitElement {
|
||||
|
||||
const alexaManual =
|
||||
alexaEnabled &&
|
||||
!isEmptyFilter(
|
||||
!isEmptyEntityDomainFilter(
|
||||
(this.cloudStatus as CloudStatusLoggedIn).alexa_entities
|
||||
);
|
||||
const googleManual =
|
||||
googleEnabled &&
|
||||
!isEmptyFilter(
|
||||
!isEmptyEntityDomainFilter(
|
||||
(this.cloudStatus as CloudStatusLoggedIn).google_entities
|
||||
);
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
import { assert, describe, it } from "vitest";
|
||||
|
||||
import { generateFilter } from "../../../src/common/entity/entity_filter";
|
||||
import { generateEntityDomainFilter } from "../../../src/common/entity/entity_domain_filter";
|
||||
|
||||
describe("EntityFilter", () => {
|
||||
// case 1
|
||||
it("passes all when no filters passed in", () => {
|
||||
const filter = generateFilter();
|
||||
const filter = generateEntityDomainFilter();
|
||||
|
||||
assert(filter("sensor.test"));
|
||||
assert(filter("sun.sun"));
|
||||
@ -14,14 +14,14 @@ describe("EntityFilter", () => {
|
||||
|
||||
// case 2
|
||||
it("allows entities by entity id", () => {
|
||||
const filter = generateFilter(undefined, ["light.kitchen"]);
|
||||
const filter = generateEntityDomainFilter(undefined, ["light.kitchen"]);
|
||||
|
||||
assert(filter("light.kitchen"));
|
||||
assert(!filter("light.living_room"));
|
||||
});
|
||||
|
||||
it("allows entities by domain", () => {
|
||||
const filter = generateFilter(["switch"]);
|
||||
const filter = generateEntityDomainFilter(["switch"]);
|
||||
|
||||
assert(filter("switch.bla"));
|
||||
assert(!filter("light.kitchen"));
|
||||
@ -29,7 +29,7 @@ describe("EntityFilter", () => {
|
||||
|
||||
// case 3
|
||||
it("excluding entities by entity id", () => {
|
||||
const filter = generateFilter(undefined, undefined, undefined, [
|
||||
const filter = generateEntityDomainFilter(undefined, undefined, undefined, [
|
||||
"light.kitchen",
|
||||
]);
|
||||
|
||||
@ -38,7 +38,7 @@ describe("EntityFilter", () => {
|
||||
});
|
||||
|
||||
it("excluding entities by domain", () => {
|
||||
const filter = generateFilter(undefined, undefined, ["switch"]);
|
||||
const filter = generateEntityDomainFilter(undefined, undefined, ["switch"]);
|
||||
|
||||
assert(!filter("switch.bla"));
|
||||
assert(filter("light.kitchen"));
|
||||
@ -46,9 +46,12 @@ describe("EntityFilter", () => {
|
||||
|
||||
// case 4a
|
||||
it("allows domain and excluding entity", () => {
|
||||
const filter = generateFilter(["switch"], undefined, undefined, [
|
||||
"switch.kitchen",
|
||||
]);
|
||||
const filter = generateEntityDomainFilter(
|
||||
["switch"],
|
||||
undefined,
|
||||
undefined,
|
||||
["switch.kitchen"]
|
||||
);
|
||||
|
||||
assert(filter("switch.living_room"));
|
||||
assert(!filter("switch.kitchen"));
|
||||
@ -56,7 +59,7 @@ describe("EntityFilter", () => {
|
||||
});
|
||||
|
||||
it("allows entity while other domains", () => {
|
||||
const filter = generateFilter(["switch"], ["light.kitchen"]);
|
||||
const filter = generateEntityDomainFilter(["switch"], ["light.kitchen"]);
|
||||
|
||||
assert(filter("switch.living_room"));
|
||||
assert(filter("light.kitchen"));
|
||||
@ -65,7 +68,11 @@ describe("EntityFilter", () => {
|
||||
|
||||
// case 4b
|
||||
it("excluding domain and entity", () => {
|
||||
const filter = generateFilter(undefined, ["switch.kitchen"], ["switch"]);
|
||||
const filter = generateEntityDomainFilter(
|
||||
undefined,
|
||||
["switch.kitchen"],
|
||||
["switch"]
|
||||
);
|
||||
|
||||
assert(filter("switch.kitchen"));
|
||||
assert(!filter("switch.living_room"));
|
||||
@ -73,7 +80,7 @@ describe("EntityFilter", () => {
|
||||
});
|
||||
|
||||
it("excluding domain and excluding entities", () => {
|
||||
const filter = generateFilter(
|
||||
const filter = generateEntityDomainFilter(
|
||||
undefined,
|
||||
undefined,
|
||||
["switch"],
|
||||
@ -87,7 +94,7 @@ describe("EntityFilter", () => {
|
||||
|
||||
// case 4c
|
||||
it("allows entities", () => {
|
||||
const filter = generateFilter(undefined, ["light.kitchen"]);
|
||||
const filter = generateEntityDomainFilter(undefined, ["light.kitchen"]);
|
||||
|
||||
assert(filter("light.kitchen"));
|
||||
assert(!filter("switch.living_room"));
|
Loading…
x
Reference in New Issue
Block a user