From d7c9ed8398c988bd15b898928b85054fc648f805 Mon Sep 17 00:00:00 2001 From: Inhji Date: Sat, 8 Apr 2023 11:40:41 +0200 Subject: [PATCH] filter notes by channel --- lib/chiya/notes.ex | 9 +++++++++ lib/chiya_web/controllers/note_controller.ex | 16 +++++++++++++++- .../controllers/note_html/index.html.heex | 7 +++++++ 3 files changed, 31 insertions(+), 1 deletion(-) 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) %>