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.
tints, yo.
9448f80 · gmorell · 2025-08-26 02:17
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> <%= 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