index.ex (2248B)
1 defmodule DailyTrackerWeb.EntryLive.Index do 2 use DailyTrackerWeb, :live_view 3 4 alias DailyTracker.Tracker 5 6 @impl true 7 def render(assigns) do 8 ~H""" 9 <Layouts.app flash={@flash}> 10 <.header> 11 Listing Entries 12 <:actions> 13 <.button variant="primary" navigate={~p"/entries/new"}> 14 <.icon name="hero-plus" /> New Entry 15 </.button> 16 </:actions> 17 </.header> 18 19 <.table 20 id="entries" 21 rows={@streams.entries} 22 row_click={fn {_id, entry} -> JS.navigate(~p"/entries/#{entry}") end} 23 > 24 <:col :let={{_id, entry}} label="Date">{entry.date}</:col> 25 <:col :let={{_id, entry}} label="Mood">{entry.mood}</:col> 26 <:col :let={{_id, entry}} label="Headache">{entry.headache}</:col> 27 <:col :let={{_id, entry}} label="Water glasses">{entry.water_glasses}</:col> 28 <:col :let={{_id, entry}} label="Worked out">{entry.worked_out}</:col> 29 <:col :let={{_id, entry}} label="Bowel movement">{entry.bowel_movement}</:col> 30 <:col :let={{_id, entry}} label="Hunger level">{entry.hunger_level}</:col> 31 <:col :let={{_id, entry}} label="Period">{entry.period}</:col> 32 <:col :let={{_id, entry}} label="Notes">{entry.notes}</:col> 33 <:action :let={{_id, entry}}> 34 <div class="sr-only"> 35 <.link navigate={~p"/entries/#{entry}"}>Show</.link> 36 </div> 37 <.link navigate={~p"/entries/#{entry}/edit"}>Edit</.link> 38 </:action> 39 <:action :let={{id, entry}}> 40 <.link 41 phx-click={JS.push("delete", value: %{id: entry.id}) |> hide("##{id}")} 42 data-confirm="Are you sure?" 43 > 44 Delete 45 </.link> 46 </:action> 47 </.table> 48 </Layouts.app> 49 """ 50 end 51 52 @impl true 53 def mount(_params, _session, socket) do 54 {:ok, 55 socket 56 |> assign(:page_title, "Listing Entries") 57 |> stream(:entries, Tracker.list_entries(socket.assigns.current_scope))} 58 end 59 60 @impl true 61 def handle_event("delete", %{"id" => id}, socket) do 62 entry = Tracker.get_entry!(socket.assigns.current_scope, id) 63 {:ok, _} = Tracker.delete_entry(entry) 64 65 {:noreply, stream_delete(socket, :entries, entry)} 66 end 67 end