Membership Fee 6 - UI Components & LiveViews closes #280 #304

Open
moritz wants to merge 65 commits from feature/280_membership_fee_ui into main
3 changed files with 5 additions and 14 deletions
Showing only changes of commit 03aacefb6e - Show all commits

View file

@ -184,7 +184,7 @@ defmodule MvWeb.MemberLive.Show do
value={MembershipFeeHelpers.format_interval(@member.membership_fee_type.interval)} value={MembershipFeeHelpers.format_interval(@member.membership_fee_type.interval)}
class="w-28" class="w-28"
/> />
<.data_field label={gettext("Last Cycle")} class="w-28"> <.data_field label={gettext("Last Cycle")} class="w-28 whitespace-nowrap">
<%= if @member.last_cycle_status do %> <%= if @member.last_cycle_status do %>
<% status = @member.last_cycle_status %> <% status = @member.last_cycle_status %>
<span class={["badge", MembershipFeeHelpers.status_color(status)]}> <span class={["badge", MembershipFeeHelpers.status_color(status)]}>
@ -194,7 +194,7 @@ defmodule MvWeb.MemberLive.Show do
<span class="badge badge-ghost">{gettext("No cycles")}</span> <span class="badge badge-ghost">{gettext("No cycles")}</span>
<% end %> <% end %>
</.data_field> </.data_field>
<.data_field label={gettext("Current Cycle")} class="w-28"> <.data_field label={gettext("Current Cycle")} class="w-32 whitespace-nowrap">
<%= if @member.current_cycle_status do %> <%= if @member.current_cycle_status do %>
<% status = @member.current_cycle_status %> <% status = @member.current_cycle_status %>
<span class={["badge", MembershipFeeHelpers.status_color(status)]}> <span class={["badge", MembershipFeeHelpers.status_color(status)]}>

View file

@ -49,18 +49,11 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
phx-click="regenerate_cycles" phx-click="regenerate_cycles"
phx-target={@myself} phx-target={@myself}
class={["btn btn-sm btn-outline", if(@regenerating, do: "btn-disabled", else: "")]} class={["btn btn-sm btn-outline", if(@regenerating, do: "btn-disabled", else: "")]}
title={gettext("Generate cycles from the last existing cycle to today")}
> >
<.icon name="hero-arrow-path" class="size-4" /> <.icon name="hero-arrow-path" class="size-4" />
{if(@regenerating, do: gettext("Regenerating..."), else: gettext("Regenerate Cycles"))} {if(@regenerating, do: gettext("Regenerating..."), else: gettext("Regenerate Cycles"))}
</.button> </.button>
<.button
phx-click="regenerate_missing_cycles"
phx-target={@myself}
class={["btn btn-sm btn-outline", if(@regenerating, do: "btn-disabled", else: "")]}
>
<.icon name="hero-plus-circle" class="size-4" />
{gettext("Regenerate Missing Cycles")}
</.button>
</div> </div>
<%!-- Cycles Table --%> <%!-- Cycles Table --%>
@ -431,10 +424,6 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
end end
end end
def handle_event("regenerate_missing_cycles", _params, socket) do
# Same as regenerate_cycles - CycleGenerator already handles missing cycles only
handle_event("regenerate_cycles", %{}, socket)
end
def handle_event("edit_cycle_amount", %{"cycle_id" => cycle_id}, socket) do def handle_event("edit_cycle_amount", %{"cycle_id" => cycle_id}, socket) do
cycle = find_cycle(socket.assigns.cycles, cycle_id) cycle = find_cycle(socket.assigns.cycles, cycle_id)

View file

@ -47,6 +47,8 @@ defmodule MvWeb.MembershipFeeTypeLive.Form do
step="0.01" step="0.01"
min="0" min="0"
pattern="[0-9]+(\.[0-9]{1,2})?" pattern="[0-9]+(\.[0-9]{1,2})?"
moritz marked this conversation as resolved

Interval is neccessary to create a fee type, but it is not marked as required. So when I leave it out there is no error message but my fee type is not created.

Interval is neccessary to create a fee type, but it is not marked as required. So when I leave it out there is no error message but my fee type is not created.
phx-debounce="blur"
oninput="this.setCustomValidity(''); if (!this.validity.valid) { this.setCustomValidity('Please enter a valid number'); }"
required required
/> />