tints, yo.

9448f80 · gmorell · 2025-08-26 02:17

20 files +92 -7

Files changed

modified apps/room_sanctum/lib/room_sanctum/configuration.ex
+1 −1
@@ -315,7 +315,7 @@ defmodule RoomSanctum.Configuration do
315 315 end
316 316
317 317 def get_visions_nv(:query, id) do
318 − from(v in Vision, where: ^id not in v.query_ids) |> Repo.all()
318 + from(v in Vision, where: ^id not in v.query_ids or is_nil(v.query_ids) or v.query_ids == []) |> Repo.all()
319 319 end
320 320
321 321 @doc """
modified apps/room_sanctum/lib/room_sanctum/configuration/query.ex
+10 −0
@@ -32,6 +32,10 @@ defmodule RoomSanctum.Configuration.Query do
32 32 field :geom, Geo.PostGIS.Geometry
33 33 field :public, :boolean, default: true
34 34
35 + embeds_one :meta, Meta, on_replace: :delete, primary_key: :false do
36 + field :tint, :string
37 + end
38 +
35 39 timestamps()
36 40 end
37 41
@@ -39,9 +43,15 @@ defmodule RoomSanctum.Configuration.Query do
39 43 def changeset(query, attrs) do
40 44 query
41 45 |> cast(attrs, [:name, :notes, :source_id, :user_id])
46 + |> cast_embed(:meta, required: false, with: &meta_changeset/2)
42 47 |> foreign_key_constraint(:source_id)
43 48 |> foreign_key_constraint(:user_id)
44 49 |> cast_polymorphic_embed(:query, required: true)
45 50 |> validate_required([:name])
46 51 end
52 +
53 + def meta_changeset(meta, attrs \\ %{}) do
54 + meta
55 + |> cast(attrs, [:tint])
56 + end
47 57 end
modified apps/room_sanctum/lib/room_sanctum_web/live/cfg_query_live/form_component.ex
+1 −0
@@ -19,6 +19,7 @@ defmodule RoomSanctumWeb.QueryLive.FormComponent do
19 19 |> assign(assigns)
20 20 |> assign_form(changeset)
21 21 |> assign(:changeset, changeset)
22 + |> assign(:tint_opts, ["amber", "lime", "emerald", "sky", "violet", "fuschia", "rose", "stone", "slate"])
22 23 |> assign(:cfg_sources, list_cfg_sources(assigns.current_user.id))
23 24 |> assign(:cfg_foci, list_cfg_foci(assigns.current_user.id))
24 25 |> assign(:results, [])
modified apps/room_sanctum/lib/room_sanctum_web/live/cfg_query_live/form_component.html.heex
+18 −0
@@ -22,6 +22,24 @@
22 22 <.input field={@form[:notes]} type="text" label="Notes"/>
23 23 </div>
24 24 </div>
25 + <div class="w-1/4">
26 + <.inputs_for :let={meta_nested} field={@form[:meta]}>
27 + <div class="form-control m-10">
28 + <span class="bg-amber-500"></span>
29 + <span class="bg-lime-500"></span>
30 + <span class="bg-emerald-500"></span>
31 + <span class="bg-sky-500"></span>
32 + <span class="bg-violet-500"></span>
33 + <span class="bg-fuschia-500"></span>
34 + <span class="bg-rose-500"></span>
35 + <span class="bg-stone-500"></span>
36 + <span class="bg-slate-500"></span>
37 + <span class="bg-stone-950"></span>
38 + <.input field={meta_nested[:tint]} type="hidden" label="Tint"/>
39 + <.input field={meta_nested[:tint]} type="radio" label="Tint" options={@tint_opts} prompt="color this" checked_value={meta_nested.params["tint"]} />
40 + </div>
41 + </.inputs_for>
42 + </div>
25 43 </div>
26 44 <div class="flex">
27 45 <div class="w-full">
modified apps/room_sanctum/lib/room_sanctum_web/live/cfg_query_live/index.html.heex
+16 −2
@@ -42,8 +42,22 @@
42 42 </td>
43 43 <td><%= query.name %></td>
44 44 <td>
45 − <%= if query.source.meta.tint do %>
46 − <i class={"fa fa-circle text-#{query.source.meta.tint}-500"}></i>
45 + <%= cond do %>
46 + <% query.meta && query.meta.tint && query.source.meta.tint -> %>
47 + <!-- Both query and source tints - use fa-stack -->
48 + <span class="fa-stack">
49 + <i class={"fa-solid fa-circle fa-fw fa-stack-1x z-30 text-#{query.source.meta.tint}-500"}></i>
50 + <i class={"fa-solid fa-circle-half-stroke fa-fw z-40 fa-spin fa-stack-1x text-#{query.meta.tint}-500"}></i>
51 +
52 + </span>
53 + <% query.meta && query.meta.tint -> %>
54 + <!-- Query tint only -->
55 + <i class={"fa-solid fa-circle-half-stroke fa-spin fa-fw text-#{query.meta.tint}-500"}></i>
56 + <% query.source.meta.tint -> %>
57 + <!-- Source tint only -->
58 + <i class={"fa-solid fa-circle text-#{query.source.meta.tint}-500"}></i>
59 + <% true -> %>
60 + <!-- No tints -->
47 61 <% end %>
48 62 </td>
49 63 <td>
modified apps/room_sanctum/lib/room_sanctum_web/live/cfg_query_live/show.html.heex
+20 −1
@@ -34,7 +34,26 @@
34 34 <% end %>
35 35 <div class="card card-compact w-3/4 bg-base-100 shadow-xl m-2">
36 36 <div class="card-body">
37 − <h3 class="card-title">Query</h3>
37 + <h3 class="card-title">
38 + Query
39 + <%= cond do %>
40 + <% @query.meta && @query.meta.tint && @query.source.meta.tint -> %>
41 + <!-- Both query and source tints - use fa-stack -->
42 + <span class="fa-stack">
43 + <i class={"fa-solid fa-circle fa-fw fa-stack-1x z-30 text-#{@query.source.meta.tint}-500"}></i>
44 + <i class={"fa-solid fa-circle-half-stroke fa-fw z-40 fa-spin fa-stack-1x text-#{@query.meta.tint}-500"}></i>
45 +
46 + </span>
47 + <% @query.meta && @query.meta.tint -> %>
48 + <!-- Query tint only -->
49 + <i class={"fa-solid fa-circle-half-stroke fa-spin fa-fw text-#{@query.meta.tint}-500"}></i>
50 + <% @query.source.meta.tint -> %>
51 + <!-- Source tint only -->
52 + <i class={"fa-solid fa-circle text-#{@query.source.meta.tint}-500"}></i>
53 + <% true -> %>
54 + <!-- No tints -->
55 + <% end %>
56 + </h3>
38 57 <pre><%= @query.query |> Poison.encode!( pretty: true) %></pre>
39 58 </div>
40 59 </div>
modified apps/room_sanctum/lib/room_sanctum_web/live/cfg_vision_live/show.html.heex
+17 −3
@@ -28,9 +28,23 @@
28 28 <p>
29 29 <%= for q <- @queries do %>
30 30 <%= live_patch to: Routes.query_show_path(@socket, :show, q.id), class: "btn btn-primary gap-2 float-left mx-2 " do %>
31 − <%= if q.source.meta.tint do %>
32 − <i class={"fa fa-circle text-#{q.source.meta.tint}-500"}></i>
33 − <% end %>
31 + <%= cond do %>
32 + <% q.meta && q.meta.tint && q.source.meta.tint -> %>
33 + <!-- Both query and source tints - use fa-stack -->
34 + <span class="fa-stack">
35 + <i class={"fa-solid fa-circle fa-fw fa-stack-1x z-30 text-#{q.source.meta.tint}-500"}></i>
36 + <i class={"fa-solid fa-circle-half-stroke fa-fw z-40 fa-spin fa-stack-1x text-#{q.meta.tint}-500"}></i>
37 +
38 + </span>
39 + <% q.meta && q.meta.tint -> %>
40 + <!-- Query tint only -->
41 + <i class={"fa-solid fa-circle-half-stroke fa-spin fa-fw text-#{q.meta.tint}-500"}></i>
42 + <% q.source.meta.tint -> %>
43 + <!-- Source tint only -->
44 + <i class={"fa-solid fa-circle text-#{q.source.meta.tint}-500"}></i>
45 + <% true -> %>
46 + <!-- No tints -->
47 + <% end %>
34 48 <i class={"fas #{get_icon(q.source.type)}"}></i>&emsp;<%= q.name %>
35 49 <% end %>
36 50 <% end %>
added apps/room_sanctum/priv/repo/migrations/20250808220752_add_meta_to_cfg_queries.exs
+9 −0
@@ -0,0 +1,9 @@
1 +defmodule RoomSanctum.Repo.Migrations.AddMetaToCfgQueries do
2 + use Ecto.Migration
3 +
4 + def change do
5 + alter table("cfg_queries") do
6 + add :meta, :map, default: %{}
7 + end
8 + end
9 +end

Parents: 1e6fdab