daily-tracker

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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