feat: add custom field slug

This commit is contained in:
Moritz 2025-11-13 19:17:18 +01:00
parent bc75a5853a
commit edf8b2b79e
Signed by: moritz
GPG key ID: 1020A035E5DD0824
10 changed files with 756 additions and 9 deletions

View file

@ -19,6 +19,9 @@ defmodule MvWeb.CustomFieldLive.Form do
- immutable - If true, values cannot be changed after creation (default: false)
- required - If true, all members must have this custom field (default: false)
**Read-only (Edit mode only):**
- slug - Auto-generated URL-friendly identifier (immutable)
## Value Type Selection
- `:string` - Text data (unlimited length)
- `:integer` - Numeric data
@ -48,6 +51,20 @@ defmodule MvWeb.CustomFieldLive.Form do
<.form for={@form} id="custom_field-form" phx-change="validate" phx-submit="save">
<.input field={@form[:name]} type="text" label={gettext("Name")} />
<%!-- Show slug in edit mode (read-only) --%>
<div :if={@custom_field} class="mb-4">
<label class="block text-sm font-semibold leading-6 text-zinc-800">
{gettext("Slug")}
</label>
<div class="mt-2 p-3 bg-zinc-50 border border-zinc-300 rounded-lg text-sm text-zinc-700">
{@custom_field.slug}
</div>
<p class="mt-2 text-sm leading-6 text-zinc-600">
{gettext("Auto-generated identifier (immutable)")}
</p>
</div>
<.input
field={@form[:value_type]}
type="select"

View file

@ -11,6 +11,7 @@ defmodule MvWeb.CustomFieldLive.Index do
- Delete custom fields (if no custom field values use them)
## Displayed Information
- Slug: URL-friendly identifier (auto-generated from name)
- Name: Unique identifier for the custom field
- Value type: Data type constraint (string, integer, boolean, date, email)
- Description: Human-readable explanation
@ -43,7 +44,7 @@ defmodule MvWeb.CustomFieldLive.Index do
rows={@streams.custom_fields}
row_click={fn {_id, custom_field} -> JS.navigate(~p"/custom_fields/#{custom_field}") end}
>
<:col :let={{_id, custom_field}} label="Id">{custom_field.id}</:col>
<:col :let={{_id, custom_field}} label="Slug">{custom_field.slug}</:col>
<:col :let={{_id, custom_field}} label="Name">{custom_field.name}</:col>

View file

@ -9,6 +9,8 @@ defmodule MvWeb.CustomFieldLive.Show do
- Return to custom field list
## Displayed Information
- ID: Internal UUID identifier
- Slug: URL-friendly identifier (auto-generated, immutable)
- Name: Unique identifier
- Value type: Data type constraint
- Description: Optional explanation
@ -29,7 +31,7 @@ defmodule MvWeb.CustomFieldLive.Show do
~H"""
<Layouts.app flash={@flash} current_user={@current_user}>
<.header>
Custom field {@custom_field.id}
Custom field {@custom_field.slug}
<:subtitle>This is a custom_field record from your database.</:subtitle>
<:actions>
@ -48,6 +50,8 @@ defmodule MvWeb.CustomFieldLive.Show do
<.list>
<:item title="Id">{@custom_field.id}</:item>
<:item title="Slug">{@custom_field.slug}</:item>
<:item title="Name">{@custom_field.name}</:item>
<:item title="Description">{@custom_field.description}</:item>