Add grouped upper-air and ducting layer buttons to weather map
This commit is contained in:
parent
9cbf8b91f4
commit
08844d3515
1 changed files with 46 additions and 19 deletions
|
|
@ -12,12 +12,24 @@ defmodule MicrowavepropWeb.WeatherMapLive do
|
|||
}
|
||||
|
||||
@layers [
|
||||
%{id: "refractivity_gradient", label: "Refractivity Gradient", unit: "N/km"},
|
||||
%{id: "bl_height", label: "Boundary Layer", unit: "m"},
|
||||
%{id: "dewpoint_depression", label: "Dewpoint Depression", unit: "°C"},
|
||||
%{id: "pwat", label: "Precipitable Water", unit: "mm"},
|
||||
%{id: "temperature", label: "Temperature", unit: "°C"},
|
||||
%{id: "ducting", label: "Ducting Detected", unit: ""}
|
||||
# Surface
|
||||
%{id: "temperature", label: "Temperature", unit: "°C", group: "Surface"},
|
||||
%{id: "dewpoint_depression", label: "Td Depression", unit: "°C", group: "Surface"},
|
||||
%{id: "surface_rh", label: "Humidity", unit: "%", group: "Surface"},
|
||||
%{id: "pwat", label: "PWAT", unit: "mm", group: "Surface"},
|
||||
%{id: "surface_refractivity", label: "Refractivity", unit: "N", group: "Surface"},
|
||||
%{id: "refractivity_gradient", label: "N-Gradient", unit: "N/km", group: "Surface"},
|
||||
%{id: "bl_height", label: "BL Height", unit: "m", group: "Surface"},
|
||||
# Upper Air
|
||||
%{id: "temp_850mb", label: "T @ 850mb", unit: "°C", group: "Upper Air"},
|
||||
%{id: "dewpoint_850mb", label: "Td @ 850mb", unit: "°C", group: "Upper Air"},
|
||||
%{id: "lapse_rate", label: "Lapse Rate", unit: "°C/km", group: "Upper Air"},
|
||||
%{id: "inversion_strength", label: "Inversion", unit: "°C", group: "Upper Air"},
|
||||
%{id: "inversion_base_m", label: "Inv. Base", unit: "m", group: "Upper Air"},
|
||||
# Ducting
|
||||
%{id: "ducting", label: "Ducting", unit: "", group: "Ducting"},
|
||||
%{id: "duct_base_m", label: "Duct Base", unit: "m", group: "Ducting"},
|
||||
%{id: "duct_strength", label: "Duct Strength", unit: "M", group: "Ducting"}
|
||||
]
|
||||
|
||||
@impl true
|
||||
|
|
@ -79,6 +91,14 @@ defmodule MicrowavepropWeb.WeatherMapLive do
|
|||
{:noreply, socket}
|
||||
end
|
||||
|
||||
@group_order ["Surface", "Upper Air", "Ducting"]
|
||||
|
||||
defp group_layers(layers) do
|
||||
layers
|
||||
|> Enum.group_by(& &1.group)
|
||||
|> Enum.sort_by(fn {group, _} -> Enum.find_index(@group_order, &(&1 == group)) || 99 end)
|
||||
end
|
||||
|
||||
@impl true
|
||||
def render(assigns) do
|
||||
~H"""
|
||||
|
|
@ -121,19 +141,26 @@ defmodule MicrowavepropWeb.WeatherMapLive do
|
|||
</div>
|
||||
</div>
|
||||
|
||||
<%!-- Layer pill buttons --%>
|
||||
<div class="flex flex-wrap gap-1">
|
||||
<button
|
||||
:for={layer <- @layers}
|
||||
phx-click="select_layer"
|
||||
phx-value-layer={layer.id}
|
||||
class={[
|
||||
"btn btn-xs rounded-full",
|
||||
if(@selected_layer == layer.id, do: "btn-primary", else: "btn-ghost")
|
||||
]}
|
||||
>
|
||||
{layer.label}
|
||||
</button>
|
||||
<%!-- Layer pill buttons grouped --%>
|
||||
<div class="flex flex-col gap-1.5">
|
||||
<div :for={{group, layers} <- group_layers(@layers)}>
|
||||
<div class="text-[10px] font-semibold opacity-50 uppercase tracking-wider px-1 mb-0.5">
|
||||
{group}
|
||||
</div>
|
||||
<div class="flex flex-wrap gap-1">
|
||||
<button
|
||||
:for={layer <- layers}
|
||||
phx-click="select_layer"
|
||||
phx-value-layer={layer.id}
|
||||
class={[
|
||||
"btn btn-xs rounded-full",
|
||||
if(@selected_layer == layer.id, do: "btn-primary", else: "btn-ghost")
|
||||
]}
|
||||
>
|
||||
{layer.label}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<%!-- Links --%>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue