neiam
/apollos_crib
It's Apollo's Crib
public · Issues · Pulls 1 · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
few more tint-showers
d65faeb · gmorell · 2025-08-26 04:44
Files changed
modified
apps/room_sanctum/lib/room_sanctum_web/live/cfg_source_live/show.ex
+49
−1
@@ -16,6 +16,8 @@ defmodule RoomSanctumWeb.SourceLive.Show do
| 16 | 16 | |> assign(:status_val, 0) |
| 17 | 17 | |> assign(:stats, %{}) |
| 18 | 18 | |> assign(:queries, []) |
| 19 | + |> assign(:tint, nil) | |
| 20 | + |> assign(:available_tints, []) | |
| 19 | 21 | |> assign(:tester, false) |
| 20 | 22 | |> assign(:tester_query, nil) |
| 21 | 23 | |> assign(:tester_results, []) |
@@ -35,7 +37,11 @@ defmodule RoomSanctumWeb.SourceLive.Show do
| 35 | 37 | def handle_info(:update_sec, socket) do |
| 36 | 38 | Process.send_after(self(), :update_sec, 10000) |
| 37 | 39 | queries = Configuration.get_queries(:source, socket.assigns.source_id) |
| 38 | − {:noreply, socket |> assign(:queries, queries)} | |
| 40 | + available_tints = get_available_tints(queries) | |
| 41 | + | |
| 42 | + {:noreply, socket | |
| 43 | + |> assign(:queries, queries) | |
| 44 | + |> assign(:available_tints, available_tints)} | |
| 39 | 45 | end |
| 40 | 46 | |
| 41 | 47 | @impl true |
@@ -219,6 +225,14 @@ defmodule RoomSanctumWeb.SourceLive.Show do
| 219 | 225 | {:noreply, socket} |
| 220 | 226 | end |
| 221 | 227 | |
| 228 | + def handle_event("set-tint", %{"tint"=> tint}, socket) do | |
| 229 | + IO.inspect({"set-tint", tint, socket.assigns.tint}) | |
| 230 | + case socket.assigns.tint == tint do | |
| 231 | + true -> {:noreply, socket |> assign(:tint, nil)} | |
| 232 | + false -> {:noreply, socket |> assign(:tint, tint)} | |
| 233 | + end | |
| 234 | + end | |
| 235 | + | |
| 222 | 236 | defp percent(num, denom) do |
| 223 | 237 | (num / denom * 100) |
| 224 | 238 | |> Float.floor() |
@@ -367,6 +381,40 @@ defmodule RoomSanctumWeb.SourceLive.Show do
| 367 | 381 | coords |> Tuple.to_list() |> Poison.encode!() |
| 368 | 382 | end |
| 369 | 383 | |
| 384 | + defp get_available_tints(queries) do | |
| 385 | + queries | |
| 386 | + |> Enum.flat_map(fn query -> | |
| 387 | + tints = [] | |
| 388 | + | |
| 389 | + # Add query tint if it exists | |
| 390 | + tints = if query.meta && query.meta.tint do | |
| 391 | + [query.meta.tint | tints] | |
| 392 | + else | |
| 393 | + tints | |
| 394 | + end | |
| 395 | + | |
| 396 | + # Add source tint if it exists | |
| 397 | + tints = if query.source && query.source.meta && query.source.meta.tint do | |
| 398 | + [query.source.meta.tint | tints] | |
| 399 | + else | |
| 400 | + tints | |
| 401 | + end | |
| 402 | + | |
| 403 | + tints | |
| 404 | + end) | |
| 405 | + |> Enum.uniq() | |
| 406 | + |> Enum.sort() | |
| 407 | + end | |
| 408 | + | |
| 409 | + defp filter_queries_by_tint(queries, nil), do: queries | |
| 410 | + defp filter_queries_by_tint(queries, tint) do | |
| 411 | + queries | |
| 412 | + |> Enum.filter(fn query -> | |
| 413 | + (query.meta && query.meta.tint == tint) || | |
| 414 | + (query.source && query.source.meta && query.source.meta.tint == tint) | |
| 415 | + end) | |
| 416 | + end | |
| 417 | + | |
| 370 | 418 | def get_icon_url(true) do |
| 371 | 419 | "/images/elixir-icon.png" |
| 372 | 420 | end |
modified
apps/room_sanctum/lib/room_sanctum_web/live/cfg_source_live/show.html.heex
+20
−2
@@ -222,7 +222,25 @@ current_user={@current_user}
| 222 | 222 | <div class="card card-compact w-full bg-base-100 shadow-xl m-2"> |
| 223 | 223 | <div class="card-body"> |
| 224 | 224 | <h3 class="card-title flex justify-between"> |
| 225 | − Queries | |
| 225 | + <div class="flex items-center gap-2"> | |
| 226 | + Queries | |
| 227 | + | |
| 228 | + <!-- Available tints - clickable filters --> | |
| 229 | + <span class="text-amber-500"></span> | |
| 230 | + <span class="text-violet-500"></span> | |
| 231 | + <span class="text-rose-500"></span> | |
| 232 | + <span class="text-emerald-500"></span> | |
| 233 | + <span class="text-sky-500"></span> | |
| 234 | + <span class="text-stone-500"></span> | |
| 235 | + <span class="text-stone-950"></span> | |
| 236 | + | |
| 237 | + <%= for tint <- @available_tints do %> | |
| 238 | + <span class="cursor-pointer mx-1" phx-click="set-tint" phx-value-tint={tint}> | |
| 239 | + <i class={"fa-solid fa-circle text-#{tint}-500 hover:text-#{tint}-700 #{if @tint == tint, do: "text-lg", else: ""}"}></i> | |
| 240 | + </span> | |
| 241 | + <% end %> | |
| 242 | + </div> | |
| 243 | + | |
| 226 | 244 | <%= case @source.type do %> |
| 227 | 245 | <% val when val in [:gtfs, :gbfs] -> %> |
| 228 | 246 | <span class="" phx-click="add-tester"><i class="fa-solid fa-plus"></i>Test</span> |
@@ -230,7 +248,7 @@ current_user={@current_user}
| 230 | 248 | <% end %> |
| 231 | 249 | </h3> |
| 232 | 250 | <div class="flex flex-wrap gap-2"> |
| 233 | − <%= for q <- @queries do %> | |
| 251 | + <%= for q <- filter_queries_by_tint(@queries, @tint) do %> | |
| 234 | 252 | <%= live_patch to: Routes.query_show_path(@socket, :show, q.id), class: "btn btn-primary float-left" do %> |
| 235 | 253 | <%= cond do %> |
| 236 | 254 | <% q.meta && q.meta.tint && q.source.meta.tint -> %> |
Parents: db9b870