"""Frontend registration for Wall Panel.""" from __future__ import annotations import time from pathlib import Path from homeassistant.components.frontend import async_register_built_in_panel from homeassistant.components.http import StaticPathConfig from homeassistant.core import HomeAssistant from .const import ( CONF_FRONTEND_URL_PATH, CONF_PANEL_URL, CONF_REQUIRE_ADMIN, CONF_SIDEBAR_ICON, CONF_SIDEBAR_TITLE, CONF_SYNC_TOKEN, DEFAULT_FRONTEND_URL_PATH, DEFAULT_SIDEBAR_ICON, DEFAULT_SIDEBAR_TITLE, DOMAIN, ) async def async_setup_frontend(hass: HomeAssistant, entry) -> str: """Register the custom panel and static frontend assets.""" frontend_dir = Path(__file__).parent / "frontend" state = hass.data.setdefault(DOMAIN, {}) if not state.get("_static_paths_registered"): await hass.http.async_register_static_paths([ StaticPathConfig( f"/api/{DOMAIN}/frontend", str(frontend_dir), cache_headers=False, ), ]) state["_static_paths_registered"] = True panel_url_path = str(entry.options.get(CONF_FRONTEND_URL_PATH, DEFAULT_FRONTEND_URL_PATH) or DEFAULT_FRONTEND_URL_PATH).strip() sidebar_title = str(entry.options.get(CONF_SIDEBAR_TITLE, DEFAULT_SIDEBAR_TITLE) or DEFAULT_SIDEBAR_TITLE).strip() sidebar_icon = str(entry.options.get(CONF_SIDEBAR_ICON, DEFAULT_SIDEBAR_ICON) or DEFAULT_SIDEBAR_ICON).strip() require_admin = bool(entry.options.get(CONF_REQUIRE_ADMIN, False)) panel_url = str(entry.options.get(CONF_PANEL_URL, "") or "").strip() sync_token = str(entry.options.get(CONF_SYNC_TOKEN, "") or "").strip() asset_version = str(int(time.time())) async_register_built_in_panel( hass, component_name="custom", sidebar_title=sidebar_title, sidebar_icon=sidebar_icon, frontend_url_path=panel_url_path, config={ "_panel_custom": { "name": "striker-panel-panel", "module_url": f"/api/{DOMAIN}/frontend/panel.js?v={asset_version}", "embed_iframe": False, "trust_external": False, "config": { "panel_url": panel_url, "panel_url_path": panel_url_path, "entry_id": entry.entry_id, "sync_token": sync_token, }, } }, require_admin=require_admin, update=True, ) return panel_url_path