This commit is contained in:
parent
b0623b20ed
commit
6311eebb0c
2 changed files with 43 additions and 1 deletions
|
|
@ -57,6 +57,9 @@ defmodule Mv.Membership do
|
||||||
# Settings should be created via seed script
|
# Settings should be created via seed script
|
||||||
define :update_settings, action: :update
|
define :update_settings, action: :update
|
||||||
define :update_member_field_visibility, action: :update_member_field_visibility
|
define :update_member_field_visibility, action: :update_member_field_visibility
|
||||||
|
|
||||||
|
define :update_single_member_field_visibility,
|
||||||
|
action: :update_single_member_field_visibility
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -186,4 +189,42 @@ defmodule Mv.Membership do
|
||||||
})
|
})
|
||||||
|> Ash.update(domain: __MODULE__)
|
|> Ash.update(domain: __MODULE__)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@doc """
|
||||||
|
Atomically updates a single field in the member field visibility configuration.
|
||||||
|
|
||||||
|
This action uses PostgreSQL's jsonb_set function to atomically update a single key
|
||||||
|
in the JSONB map, preventing lost updates in concurrent scenarios. This is the
|
||||||
|
preferred method for updating individual field visibility settings.
|
||||||
|
|
||||||
|
## Parameters
|
||||||
|
|
||||||
|
- `settings` - The settings record to update
|
||||||
|
- `field` - The member field name as a string (e.g., "street", "house_number")
|
||||||
|
- `show_in_overview` - Boolean value indicating visibility
|
||||||
|
|
||||||
|
## Returns
|
||||||
|
|
||||||
|
- `{:ok, updated_settings}` - Successfully updated settings
|
||||||
|
- `{:error, error}` - Validation or update error
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
iex> {:ok, settings} = Mv.Membership.get_settings()
|
||||||
|
iex> {:ok, updated} = Mv.Membership.update_single_member_field_visibility(settings, field: "street", show_in_overview: false)
|
||||||
|
iex> updated.member_field_visibility["street"]
|
||||||
|
false
|
||||||
|
|
||||||
|
"""
|
||||||
|
def update_single_member_field_visibility(settings,
|
||||||
|
field: field,
|
||||||
|
show_in_overview: show_in_overview
|
||||||
|
) do
|
||||||
|
settings
|
||||||
|
|> Ash.Changeset.new()
|
||||||
|
|> Ash.Changeset.set_argument(:field, field)
|
||||||
|
|> Ash.Changeset.set_argument(:show_in_overview, show_in_overview)
|
||||||
|
|> Ash.Changeset.for_update(:update_single_member_field_visibility, %{})
|
||||||
|
|> Ash.update(domain: __MODULE__)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -692,10 +692,11 @@ defmodule MvWeb.CoreComponents do
|
||||||
"""
|
"""
|
||||||
attr :name, :string, required: true
|
attr :name, :string, required: true
|
||||||
attr :class, :string, default: "size-4"
|
attr :class, :string, default: "size-4"
|
||||||
|
attr :rest, :global, include: ~w(aria-hidden)
|
||||||
|
|
||||||
def icon(%{name: "hero-" <> _} = assigns) do
|
def icon(%{name: "hero-" <> _} = assigns) do
|
||||||
~H"""
|
~H"""
|
||||||
<span class={[@name, @class]} />
|
<span class={[@name, @class]} {@rest} />
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue