diff --git a/lib/chiya/notes.ex b/lib/chiya/notes.ex index 84d168d..8b1c5e0 100644 --- a/lib/chiya/notes.ex +++ b/lib/chiya/notes.ex @@ -26,6 +26,15 @@ defmodule Chiya.Notes do |> Repo.preload(@preloads) end + def list_notes_by_channel(%Chiya.Channels.Channel{} = channel) do + Note + |> join(:inner, [n], c in assoc(n, :channels)) + |> where([n, c], c.id == ^channel.id) + |> order_by([n], desc: n.updated_at, desc: n.published_at) + |> Repo.all() + |> Repo.preload(@preloads) + end + @doc """ Preloads a note diff --git a/lib/chiya_web/controllers/note_controller.ex b/lib/chiya_web/controllers/note_controller.ex index 747c887..da02d0c 100644 --- a/lib/chiya_web/controllers/note_controller.ex +++ b/lib/chiya_web/controllers/note_controller.ex @@ -4,9 +4,23 @@ defmodule ChiyaWeb.NoteController do alias Chiya.Notes alias Chiya.Notes.{Note, NoteImport} + def index(conn, %{"channel" => channel_slug}) do + channels = + Chiya.Channels.list_channels() + |> Chiya.Channels.preload_channel() + + channel = Chiya.Channels.get_channel_by_slug!(channel_slug) + notes = Notes.list_notes_by_channel(channel) + render(conn, :index, notes: notes, channels: channels) + end + def index(conn, _params) do + channels = + Chiya.Channels.list_channels() + |> Chiya.Channels.preload_channel() + notes = Notes.list_notes() - render(conn, :index, notes: notes) + render(conn, :index, notes: notes, channels: channels) end def new(conn, _params) do diff --git a/lib/chiya_web/controllers/note_html/index.html.heex b/lib/chiya_web/controllers/note_html/index.html.heex index 169b784..1854965 100644 --- a/lib/chiya_web/controllers/note_html/index.html.heex +++ b/lib/chiya_web/controllers/note_html/index.html.heex @@ -11,6 +11,13 @@ +
+ All + <%= for channel <- @channels do %> + <%= channel.name %> (<%= Enum.count(channel.notes) %>) + <% end %> +
+ <.table id="notes" rows={@notes} row_click={&JS.navigate(~p"/admin/notes/#{&1}")}> <:col :let={note} label="Name"><%= note.name %> <:col :let={note} label="Updated at"><%= from_now(note.updated_at) %>