few more tint-showers

d65faeb · gmorell · 2025-08-26 04:44

8 files +69 -3

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