implemented shift template delete modal
This commit is contained in:
parent
9322e98fef
commit
5c4a4ea793
7 changed files with 102 additions and 61 deletions
|
@ -22,7 +22,7 @@ defmodule Shift73k.ShiftTemplates do
|
|||
end
|
||||
|
||||
def list_shift_templates_by_user_id(user_id) do
|
||||
(from s in ShiftTemplate, where: s.user_id == ^user_id)
|
||||
from(s in ShiftTemplate, where: s.user_id == ^user_id)
|
||||
|> Repo.all()
|
||||
end
|
||||
|
||||
|
@ -42,6 +42,8 @@ defmodule Shift73k.ShiftTemplates do
|
|||
"""
|
||||
def get_shift_template!(id), do: Repo.get!(ShiftTemplate, id)
|
||||
|
||||
def get_shift_template(id), do: Repo.get(ShiftTemplate, id)
|
||||
|
||||
@doc """
|
||||
Creates a shift_template.
|
||||
|
||||
|
|
|
@ -0,0 +1,44 @@
|
|||
defmodule Shift73kWeb.ShiftTemplateLive.DeleteComponent do
|
||||
use Shift73kWeb, :live_component
|
||||
|
||||
alias Shift73k.ShiftTemplates
|
||||
|
||||
@impl true
|
||||
def update(assigns, socket) do
|
||||
socket
|
||||
|> assign(assigns)
|
||||
|> live_okreply()
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("cancel", _, socket) do
|
||||
{:noreply, push_event(socket, "modal-please-hide", %{})}
|
||||
end
|
||||
|
||||
@impl true
|
||||
def handle_event("confirm", %{"id" => id, "subject" => subject}, socket) do
|
||||
id
|
||||
|> ShiftTemplates.get_shift_template()
|
||||
|> ShiftTemplates.delete_shift_template()
|
||||
|> case do
|
||||
{:ok, _} ->
|
||||
flash = {:info, "Shift template deleted successfully: \"#{subject}\""}
|
||||
send(self(), {:put_flash_message, flash})
|
||||
|
||||
socket
|
||||
|> push_event("modal-please-hide", %{})
|
||||
|> live_noreply()
|
||||
|
||||
{:error, _} ->
|
||||
flash =
|
||||
{:error,
|
||||
"Some error trying to delete shift template \"#{subject}\". Possibly already deleted? Reloading list..."}
|
||||
|
||||
send(self(), {:put_flash_message, flash})
|
||||
|
||||
socket
|
||||
|> push_event("modal-please-hide", %{})
|
||||
|> live_noreply()
|
||||
end
|
||||
end
|
||||
end
|
|
@ -0,0 +1,23 @@
|
|||
<div class="modal-body">
|
||||
|
||||
Are you sure you want to delete "<%= @delete_shift_template.subject %>
|
||||
(<%= @delete_shift_template.start_time |> Calendar.strftime("%I:%M%P") %>
|
||||
—
|
||||
<%=
|
||||
@delete_shift_template.start_time
|
||||
|> Time.add((60 * 60 * @delete_shift_template.length_hours) + ((@delete_shift_template.length_minutes || 0) * 60))
|
||||
|> Calendar.strftime("%I:%M%P")
|
||||
%>)"?
|
||||
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
|
||||
<%= link "Cancel", to: "#", class: "btn me-2", phx_click: "cancel", phx_target: @myself %>
|
||||
<%= link "Confirm Delete", to: "#",
|
||||
class: "btn btn-danger",
|
||||
phx_click: "confirm",
|
||||
phx_target: @myself,
|
||||
phx_value_id: @delete_shift_template.id,
|
||||
phx_value_subject: @delete_shift_template.subject %>
|
||||
|
||||
</div>
|
|
@ -19,7 +19,6 @@ defmodule Shift73kWeb.ShiftTemplateLive.Index do
|
|||
live_action = socket.assigns.live_action
|
||||
shift_template = shift_template_from_params(params)
|
||||
|
||||
|
||||
if Roles.can?(current_user, shift_template, live_action) do
|
||||
socket
|
||||
|> assign_shift_templates()
|
||||
|
@ -66,15 +65,19 @@ defmodule Shift73kWeb.ShiftTemplateLive.Index do
|
|||
|
||||
defp shift_template_from_params(_params), do: %ShiftTemplate{}
|
||||
|
||||
|
||||
@impl true
|
||||
def handle_event("delete", %{"id" => id}, socket) do
|
||||
shift_template = ShiftTemplates.get_shift_template!(id)
|
||||
{:ok, _} = ShiftTemplates.delete_shift_template(shift_template)
|
||||
|
||||
{:noreply, assign_shift_templates(socket)}
|
||||
def handle_event("delete-modal", %{"id" => id}, socket) do
|
||||
{:noreply, assign(socket, :delete_shift_template, ShiftTemplates.get_shift_template!(id))}
|
||||
end
|
||||
|
||||
# @impl true
|
||||
# def handle_event("delete", %{"id" => id}, socket) do
|
||||
# shift_template = ShiftTemplates.get_shift_template!(id)
|
||||
# {:ok, _} = ShiftTemplates.delete_shift_template(shift_template)
|
||||
|
||||
# {:noreply, assign_shift_templates(socket)}
|
||||
# end
|
||||
|
||||
@impl true
|
||||
def handle_info({:close_modal, _}, %{assigns: %{modal_return_to: to}} = socket) do
|
||||
socket |> copy_flash() |> push_patch(to: to) |> live_noreply()
|
||||
|
@ -84,5 +87,4 @@ defmodule Shift73kWeb.ShiftTemplateLive.Index do
|
|||
def handle_info({:put_flash_message, {flash_type, msg}}, socket) do
|
||||
socket |> put_flash(flash_type, msg) |> live_noreply()
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -7,6 +7,14 @@
|
|||
current_user: @current_user %>
|
||||
<% end %>
|
||||
|
||||
<%= if @delete_shift_template do %>
|
||||
<%= live_modal @socket, Shift73kWeb.ShiftTemplateLive.DeleteComponent,
|
||||
id: @delete_shift_template.id,
|
||||
title: "Delete Shift Template",
|
||||
delete_shift_template: @delete_shift_template,
|
||||
current_user: @current_user %>
|
||||
<% end %>
|
||||
|
||||
|
||||
<div class="row justify-content-start justify-content-sm-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-9">
|
||||
|
@ -83,22 +91,20 @@
|
|||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="text-end">
|
||||
|
||||
<%= if Roles.can?(@current_user, shift, :delete) do %>
|
||||
<%= link to: "#", phx_click: "delete", phx_value_id: shift.id, data: [confirm: "Are you sure?"], class: "btn btn-outline-danger btn-sm text-nowrap" do %>
|
||||
<%= icon_div @socket, "bi-trash", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
|
||||
Delete
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<%= if Roles.can?(@current_user, shift, :edit) do %>
|
||||
<%= live_patch to: Routes.shift_template_index_path(@socket, :edit, shift), class: "btn btn-primary btn-sm text-nowrap" do %>
|
||||
<%= icon_div @socket, "bi-pencil", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
|
||||
Edit
|
||||
<% end %>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<%= if Roles.can?(@current_user, shift, :delete) do %>
|
||||
<button class="btn btn-outline-danger btn-sm text-nowrap" phx-click="delete-modal" phx-value-id="<%= shift.id %>">
|
||||
<%= icon_div @socket, "bi-trash", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
|
||||
Delete
|
||||
</button>
|
||||
<% end %>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
@ -108,41 +114,5 @@
|
|||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<div class="table-responsive">
|
||||
<table class="table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Subject</th>
|
||||
<th>Description</th>
|
||||
<th>Location</th>
|
||||
<th>Timezone</th>
|
||||
<th>Start time</th>
|
||||
<th>Length</th>
|
||||
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="shift_templates">
|
||||
<%= for shift <- @shift_templates do %>
|
||||
<tr id="shift_template-<%= shift.id %>">
|
||||
<td><%= shift.subject %></td>
|
||||
<td><%= shift.description %></td>
|
||||
<td><%= shift.location %></td>
|
||||
<td><%= shift.timezone %></td>
|
||||
<td><%= shift.start_time |> Calendar.strftime("%I:%M %p") %></td>
|
||||
<td><%= shift.length_hours %>h <%= shift.length_minutes || 0 %>m</td>
|
||||
|
||||
<td>
|
||||
<span><%= live_patch "Edit", to: Routes.shift_template_index_path(@socket, :edit, shift) %></span>
|
||||
<span><%= link "Delete", to: "#", phx_click: "delete", phx_value_id: shift.id, data: [confirm: "Are you sure?"] %></span>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -97,7 +97,7 @@ defmodule Shift73kWeb.UserManagementLive.Index do
|
|||
|
||||
@impl true
|
||||
def handle_event("delete-modal", %{"id" => id}, socket) do
|
||||
{:noreply, assign(socket, :delete_user, Accounts.get_user(id))}
|
||||
{:noreply, assign(socket, :delete_user, Accounts.get_user!(id))}
|
||||
end
|
||||
|
||||
@impl true
|
||||
|
|
|
@ -94,7 +94,7 @@
|
|||
</dl>
|
||||
|
||||
<%= if Roles.can?(@current_user, user, :edit) do %>
|
||||
<%= live_patch to: Routes.user_management_index_path(@socket, :edit, user.id, Enum.into(@query, [])), class: "btn btn-outline-primary btn-sm text-nowrap" do %>
|
||||
<%= live_patch to: Routes.user_management_index_path(@socket, :edit, user.id, Enum.into(@query, [])), class: "btn btn-primary btn-sm text-nowrap" do %>
|
||||
<%= icon_div @socket, "bi-pencil", [class: "icon baseline", style: "margin-right:0.125rem;"] %>
|
||||
Edit
|
||||
<% end %>
|
||||
|
|
Loading…
Reference in a new issue