This repository has been archived on 2023-11-18. You can view files and clone it, but cannot push or open issues or pull requests.
ha_client/lib/panels/panel_class.dart

71 lines
2.2 KiB
Dart
Raw Normal View History

2019-03-13 16:39:23 +02:00
part of '../main.dart';
class Panel {
static const iconsByComponent = {
"config": "mdi:settings",
"history": "mdi:poll-box",
"map": "mdi:tooltip-account",
"logbook": "mdi:format-list-bulleted-type",
"custom": "mdi:home-assistant"
};
final String id;
final String componentName;
2019-03-13 16:39:23 +02:00
final String title;
final String urlPath;
final Map config;
String icon;
2019-03-13 17:23:23 +02:00
bool isHidden = true;
bool isWebView = false;
2019-03-13 16:39:23 +02:00
Panel({this.id, this.componentName, this.title, this.urlPath, this.icon, this.config}) {
2019-03-13 16:39:23 +02:00
if (icon == null || !icon.startsWith("mdi:")) {
icon = Panel.iconsByComponent[componentName];
2019-03-13 16:39:23 +02:00
}
isHidden = (componentName == 'kiosk' || componentName == 'states' || componentName == 'profile' || componentName == 'developer-tools');
2020-05-01 16:47:41 +03:00
isWebView = (componentName != 'lovelace' && !componentName.startsWith('haclient'));
2019-03-13 17:23:23 +02:00
}
void handleOpen(BuildContext context) {
2020-05-03 13:00:32 +03:00
if (componentName.startsWith('haclient')) {
2020-04-01 20:04:32 +03:00
Navigator.of(context).pushNamed(urlPath);
} else if (componentName == 'lovelace') {
HomeAssistant().lovelaceDashboardUrl = this.urlPath;
HomeAssistant().autoUi = false;
SharedPreferences.getInstance().then((prefs) {
prefs.setString('lovelace_dashboard_url', this.urlPath);
eventBus.fire(ReloadUIEvent());
});
2019-03-13 17:23:23 +02:00
} else {
2020-05-13 15:46:25 +03:00
Launcher.launchAuthenticatedWebView(context: context, url: "${AppSettings().httpWebHost}/$urlPath", title: "${this.title}");
2019-03-13 17:23:23 +02:00
}
2019-03-13 16:39:23 +02:00
}
Widget getMenuItemWidget(BuildContext context) {
return ListTile(
leading: Icon(MaterialDesignIcons.getIconDataFromIconName(this.icon)),
title: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text("${this.title}"),
Container(width: 4.0,),
isWebView ? Text("webview", style: Theme.of(context).textTheme.overline) : Container(width: 1.0,)
],
),
onTap: () {
Navigator.of(context).pop();
this.handleOpen(context);
}
);
}
2019-03-13 16:39:23 +02:00
Widget getWidget() {
switch (componentName) {
2019-03-13 16:39:23 +02:00
default: {
return Text("Unsupported panel component: $componentName");
2019-03-13 16:39:23 +02:00
}
}
}
}