Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
218 changes: 108 additions & 110 deletions src/data/selector.ts
Original file line number Diff line number Diff line change
@@ -1,35 +1,51 @@
export type Selector =
| ActionSelector
| AddonSelector
| AreaSelector
| AttributeSelector
| EntitySelector
| BooleanSelector
| ColorRGBSelector
| ColorTempSelector
| DateSelector
| DateTimeSelector
| DeviceSelector
| DurationSelector
| AreaSelector
| TargetSelector
| EntitySelector
| IconSelector
| LocationSelector
| MediaSelector
| NumberSelector
| BooleanSelector
| TimeSelector
| ActionSelector
| StringSelector
| ObjectSelector
| SelectSelector
| IconSelector
| MediaSelector
| StringSelector
| TargetSelector
| ThemeSelector
| LocationSelector
| ColorTempSelector
| ColorRGBSelector;
| TimeSelector;

export interface EntitySelector {
entity: {
integration?: string;
domain?: string | string[];
device_class?: string;
multiple?: boolean;
includeEntities?: string[];
excludeEntities?: string[];
export interface ActionSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
action: {};
}

export interface AddonSelector {
addon: {
name?: string;
slug?: string;
};
}

export interface AreaSelector {
area: {
entity?: {
integration?: EntitySelector["entity"]["integration"];
domain?: EntitySelector["entity"]["domain"];
device_class?: EntitySelector["entity"]["device_class"];
};
device?: {
integration?: DeviceSelector["device"]["integration"];
manufacturer?: DeviceSelector["device"]["manufacturer"];
model?: DeviceSelector["device"]["model"];
};
};
}

Expand All @@ -39,11 +55,23 @@ export interface AttributeSelector {
};
}

export interface BooleanSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
boolean: {};
}

export interface ColorRGBSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
color_rgb: {};
}

export interface ColorTempSelector {
color_temp: {
min_mireds?: number;
max_mireds?: number;
};
}

export interface DateSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
date: {};
Expand Down Expand Up @@ -72,40 +100,49 @@ export interface DurationSelector {
duration: {};
}

export interface AddonSelector {
addon: {
name?: string;
slug?: string;
export interface EntitySelector {
entity: {
integration?: string;
domain?: string | string[];
device_class?: string;
multiple?: boolean;
includeEntities?: string[];
excludeEntities?: string[];
};
}

export interface AreaSelector {
area: {
entity?: {
integration?: EntitySelector["entity"]["integration"];
domain?: EntitySelector["entity"]["domain"];
device_class?: EntitySelector["entity"]["device_class"];
};
device?: {
integration?: DeviceSelector["device"]["integration"];
manufacturer?: DeviceSelector["device"]["manufacturer"];
model?: DeviceSelector["device"]["model"];
};
export interface IconSelector {
icon: {
placeholder?: string;
fallbackPath?: string;
};
}

export interface TargetSelector {
target: {
entity?: {
integration?: EntitySelector["entity"]["integration"];
domain?: EntitySelector["entity"]["domain"];
device_class?: EntitySelector["entity"]["device_class"];
};
device?: {
integration?: DeviceSelector["device"]["integration"];
manufacturer?: DeviceSelector["device"]["manufacturer"];
model?: DeviceSelector["device"]["model"];
};
export interface LocationSelector {
location: { radius?: boolean; icon?: string };
}

export interface LocationSelectorValue {
latitude: number;
longitude: number;
radius?: number;
}

export interface MediaSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
media: {};
}

export interface MediaSelectorValue {
entity_id?: string;
media_content_id?: string;
media_content_type?: string;
metadata?: {
title?: string;
thumbnail?: string | null;
media_class?: string;
children_media_class?: string | null;
navigateIds?: { media_content_type: string; media_content_id: string }[];
};
}

Expand All @@ -119,26 +156,20 @@ export interface NumberSelector {
};
}

export interface ColorTempSelector {
color_temp: {
min_mireds?: number;
max_mireds?: number;
};
}

export interface BooleanSelector {
export interface ObjectSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
boolean: {};
object: {};
}

export interface TimeSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
time: {};
export interface SelectOption {
value: string;
label: string;
}

export interface ActionSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
action: {};
export interface SelectSelector {
select: {
options: string[] | SelectOption[];
};
}

export interface StringSelector {
Expand All @@ -162,58 +193,25 @@ export interface StringSelector {
};
}

export interface ObjectSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
object: {};
}

export interface SelectOption {
value: string;
label: string;
}

export interface SelectSelector {
select: {
options: string[] | SelectOption[];
};
}

export interface IconSelector {
icon: {
placeholder?: string;
fallbackPath?: string;
export interface TargetSelector {
target: {
entity?: {
integration?: EntitySelector["entity"]["integration"];
domain?: EntitySelector["entity"]["domain"];
device_class?: EntitySelector["entity"]["device_class"];
};
device?: {
integration?: DeviceSelector["device"]["integration"];
manufacturer?: DeviceSelector["device"]["manufacturer"];
model?: DeviceSelector["device"]["model"];
};
};
}

export interface ThemeSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
theme: {};
}

export interface MediaSelector {
export interface TimeSelector {
// eslint-disable-next-line @typescript-eslint/ban-types
media: {};
}

export interface LocationSelector {
location: { radius?: boolean; icon?: string };
}

export interface LocationSelectorValue {
latitude: number;
longitude: number;
radius?: number;
}

export interface MediaSelectorValue {
entity_id?: string;
media_content_id?: string;
media_content_type?: string;
metadata?: {
title?: string;
thumbnail?: string | null;
media_class?: string;
children_media_class?: string | null;
navigateIds?: { media_content_type: string; media_content_id: string }[];
};
time: {};
}