Wire up Chat component in CollectionLive.Index
This commit is contained in:
@@ -6,6 +6,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
import MusicLibraryWeb.LiveHelpers.Params
|
import MusicLibraryWeb.LiveHelpers.Params
|
||||||
import MusicLibraryWeb.RecordComponents
|
import MusicLibraryWeb.RecordComponents
|
||||||
|
|
||||||
|
alias MusicLibrary.Chats
|
||||||
alias MusicLibrary.Collection
|
alias MusicLibrary.Collection
|
||||||
alias MusicLibrary.Records
|
alias MusicLibrary.Records
|
||||||
|
|
||||||
@@ -47,6 +48,20 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
<.barcode_icon class="icon fill-current" />
|
<.barcode_icon class="icon fill-current" />
|
||||||
{gettext("Scan")}
|
{gettext("Scan")}
|
||||||
</.button>
|
</.button>
|
||||||
|
<.button
|
||||||
|
variant="solid"
|
||||||
|
size="sm"
|
||||||
|
phx-click={MusicLibraryWeb.Components.Chat.open("collection-chat-sheet")}
|
||||||
|
>
|
||||||
|
<.icon
|
||||||
|
name="hero-chat-bubble-left-right"
|
||||||
|
class="icon"
|
||||||
|
aria-hidden="true"
|
||||||
|
data-slot="icon"
|
||||||
|
/>
|
||||||
|
{gettext("Chat")}
|
||||||
|
<span :if={@chat_count > 0} class="text-xs font-medium">{@chat_count}</span>
|
||||||
|
</.button>
|
||||||
</.button_group>
|
</.button_group>
|
||||||
</div>
|
</div>
|
||||||
</header>
|
</header>
|
||||||
@@ -189,6 +204,19 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
</.structured_modal>
|
</.structured_modal>
|
||||||
|
|
||||||
<.pagination id={:bottom_pagination} pagination_params={@record_list_params} />
|
<.pagination id={:bottom_pagination} pagination_params={@record_list_params} />
|
||||||
|
|
||||||
|
<.live_component
|
||||||
|
id="collection-chat"
|
||||||
|
sheet_id="collection-chat-sheet"
|
||||||
|
module={MusicLibraryWeb.Components.Chat}
|
||||||
|
title={gettext("Collection")}
|
||||||
|
entity={:collection}
|
||||||
|
musicbrainz_id={Chats.collection_musicbrainz_id()}
|
||||||
|
chat_module={MusicLibrary.Chats.CollectionChat}
|
||||||
|
chat_context={@collection_summary}
|
||||||
|
placeholder={gettext("Ask about your collection...")}
|
||||||
|
empty_prompt={gettext("Ask anything about your music collection")}
|
||||||
|
/>
|
||||||
</Layouts.app>
|
</Layouts.app>
|
||||||
"""
|
"""
|
||||||
end
|
end
|
||||||
@@ -199,7 +227,9 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
socket
|
socket
|
||||||
|> assign(:current_section, :collection)
|
|> assign(:current_section, :collection)
|
||||||
|> assign(:import_query, "")
|
|> assign(:import_query, "")
|
||||||
|> assign(:display, :grid)}
|
|> assign(:display, :grid)
|
||||||
|
|> assign(:collection_summary, Collection.collection_summary())
|
||||||
|
|> assign(:chat_count, Chats.count_chats(:collection, Chats.collection_musicbrainz_id()))}
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@@ -252,6 +282,11 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
{:noreply, load_and_assign_records(socket, socket.assigns.record_list_params)}
|
{:noreply, load_and_assign_records(socket, socket.assigns.record_list_params)}
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def handle_info({MusicLibraryWeb.Components.Chat, :chats_changed}, socket) do
|
||||||
|
chat_count = Chats.count_chats(:collection, Chats.collection_musicbrainz_id())
|
||||||
|
{:noreply, assign(socket, :chat_count, chat_count)}
|
||||||
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_event("delete", %{"id" => id}, socket) do
|
def handle_event("delete", %{"id" => id}, socket) do
|
||||||
record = Records.get_record!(id)
|
record = Records.get_record!(id)
|
||||||
|
|||||||
@@ -2407,3 +2407,18 @@ msgstr[1] ""
|
|||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Copy message"
|
msgid "Copy message"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/collection_live/index.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Ask about your collection..."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/collection_live/index.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Ask anything about your music collection"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/collection_live/index.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Chat"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
@@ -23,6 +23,12 @@ defmodule MusicLibraryWeb.CollectionLive.IndexTest do
|
|||||||
describe "Collection" do
|
describe "Collection" do
|
||||||
setup [:fill_collection]
|
setup [:fill_collection]
|
||||||
|
|
||||||
|
test "shows the chat button", %{conn: conn} do
|
||||||
|
conn
|
||||||
|
|> visit(~p"/collection")
|
||||||
|
|> assert_has("button", "Chat")
|
||||||
|
end
|
||||||
|
|
||||||
test "does not show wishlist records", %{conn: conn} do
|
test "does not show wishlist records", %{conn: conn} do
|
||||||
wishlist_records = Enum.map(1..3, fn _ -> record(%{purchased_at: nil}) end)
|
wishlist_records = Enum.map(1..3, fn _ -> record(%{purchased_at: nil}) end)
|
||||||
session = visit(conn, ~p"/collection")
|
session = visit(conn, ~p"/collection")
|
||||||
|
|||||||
Reference in New Issue
Block a user