When updating records, correctly refresh the list view
This commit is contained in:
@@ -63,7 +63,7 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
|
|
||||||
defp apply_action(socket, :index, params) do
|
defp apply_action(socket, :index, params) do
|
||||||
query = params["query"] || ""
|
query = params["query"] || ""
|
||||||
order = params["order"] || "alphabetical"
|
order = parse_order(params["order"] || "alphabetical")
|
||||||
total_records = Collection.search_records_count(query)
|
total_records = Collection.search_records_count(query)
|
||||||
|
|
||||||
record_list_params =
|
record_list_params =
|
||||||
@@ -72,27 +72,12 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
|> merge_order(order)
|
|> merge_order(order)
|
||||||
|> merge_pagination(params, total_records)
|
|> merge_pagination(params, total_records)
|
||||||
|
|
||||||
offset = page_to_offset(record_list_params.page, record_list_params.page_size)
|
load_and_assign_records(socket, record_list_params)
|
||||||
|
|
||||||
opts = [limit: record_list_params.page_size, offset: offset, order: parse_order(order)]
|
|
||||||
|
|
||||||
records =
|
|
||||||
Collection.search_records(query, opts)
|
|
||||||
|
|
||||||
socket
|
|
||||||
|> assign(:page_title, gettext("Collection"))
|
|
||||||
|> assign(:record, nil)
|
|
||||||
|> assign(:record_list_params, record_list_params)
|
|
||||||
|> stream(:records, records, reset: true)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_info({MusicLibraryWeb.RecordLive.FormComponent, {:saved, record}}, socket) do
|
def handle_info({MusicLibraryWeb.RecordLive.FormComponent, {:saved, _record}}, socket) do
|
||||||
# TODO: when a record is updated, there's no guarantee that 1) it will end
|
{:noreply, load_and_assign_records(socket, socket.assigns.record_list_params)}
|
||||||
# up in the same position and 2) it would still be visible given current
|
|
||||||
# filters. Instead of inserting into the stream, we should reload the
|
|
||||||
# collection with the same params.
|
|
||||||
{:noreply, stream_insert(socket, :records, record)}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@@ -142,12 +127,31 @@ defmodule MusicLibraryWeb.CollectionLive.Index do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp load_and_assign_records(socket, record_list_params) do
|
||||||
|
offset = page_to_offset(record_list_params.page, record_list_params.page_size)
|
||||||
|
|
||||||
|
opts = [
|
||||||
|
limit: record_list_params.page_size,
|
||||||
|
offset: offset,
|
||||||
|
order: record_list_params.order
|
||||||
|
]
|
||||||
|
|
||||||
|
records =
|
||||||
|
Collection.search_records(record_list_params.query, opts)
|
||||||
|
|
||||||
|
socket
|
||||||
|
|> assign(:page_title, gettext("Collection"))
|
||||||
|
|> assign(:record, nil)
|
||||||
|
|> assign(:record_list_params, record_list_params)
|
||||||
|
|> stream(:records, records, reset: true)
|
||||||
|
end
|
||||||
|
|
||||||
defp merge_query(record_list_params, query) do
|
defp merge_query(record_list_params, query) do
|
||||||
Map.put(record_list_params, :query, query)
|
Map.put(record_list_params, :query, query)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp merge_order(record_list_params, order) do
|
defp merge_order(record_list_params, order) do
|
||||||
Map.put(record_list_params, :order, parse_order(order))
|
Map.put(record_list_params, :order, order)
|
||||||
end
|
end
|
||||||
|
|
||||||
defp merge_pagination(record_list_params, params, total_records) do
|
defp merge_pagination(record_list_params, params, total_records) do
|
||||||
|
|||||||
@@ -70,29 +70,12 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|
|||||||
|> merge_query(query)
|
|> merge_query(query)
|
||||||
|> merge_pagination(params, total_records)
|
|> merge_pagination(params, total_records)
|
||||||
|
|
||||||
offset = page_to_offset(record_list_params.page, record_list_params.page_size)
|
load_and_assign_records(socket, record_list_params)
|
||||||
|
|
||||||
records =
|
|
||||||
Wishlist.search_records(query,
|
|
||||||
limit: record_list_params.page_size,
|
|
||||||
offset: offset,
|
|
||||||
order: record_list_params.order
|
|
||||||
)
|
|
||||||
|
|
||||||
socket
|
|
||||||
|> assign(:page_title, gettext("Wishlist"))
|
|
||||||
|> assign(:record, nil)
|
|
||||||
|> assign(:record_list_params, record_list_params)
|
|
||||||
|> stream(:records, records, reset: true)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
def handle_info({MusicLibraryWeb.RecordLive.FormComponent, {:saved, record}}, socket) do
|
def handle_info({MusicLibraryWeb.RecordLive.FormComponent, {:saved, _record}}, socket) do
|
||||||
# TODO: when a record is updated, there's no guarantee that 1) it will end
|
{:noreply, load_and_assign_records(socket, socket.assigns.record_list_params)}
|
||||||
# up in the same position and 2) it would still be visible given current
|
|
||||||
# filters. Instead of inserting into the stream, we should reload the
|
|
||||||
# wishlist with the same params.
|
|
||||||
{:noreply, stream_insert(socket, :records, record)}
|
|
||||||
end
|
end
|
||||||
|
|
||||||
@impl true
|
@impl true
|
||||||
@@ -157,6 +140,23 @@ defmodule MusicLibraryWeb.WishlistLive.Index do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp load_and_assign_records(socket, record_list_params) do
|
||||||
|
offset = page_to_offset(record_list_params.page, record_list_params.page_size)
|
||||||
|
|
||||||
|
records =
|
||||||
|
Wishlist.search_records(record_list_params.query,
|
||||||
|
limit: record_list_params.page_size,
|
||||||
|
offset: offset,
|
||||||
|
order: record_list_params.order
|
||||||
|
)
|
||||||
|
|
||||||
|
socket
|
||||||
|
|> assign(:page_title, gettext("Wishlist"))
|
||||||
|
|> assign(:record, nil)
|
||||||
|
|> assign(:record_list_params, record_list_params)
|
||||||
|
|> stream(:records, records, reset: true)
|
||||||
|
end
|
||||||
|
|
||||||
defp merge_query(record_list_params, query) do
|
defp merge_query(record_list_params, query) do
|
||||||
Map.put(record_list_params, :query, query)
|
Map.put(record_list_params, :query, query)
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: lib/music_library_web/components/layouts/app.html.heex:14
|
#: lib/music_library_web/components/layouts/app.html.heex:14
|
||||||
#: lib/music_library_web/live/artist_live/show.html.heex:64
|
#: lib/music_library_web/live/artist_live/show.html.heex:64
|
||||||
#: lib/music_library_web/live/collection_live/index.ex:83
|
#: lib/music_library_web/live/collection_live/index.ex:143
|
||||||
#: lib/music_library_web/live/collection_live/show.ex:115
|
#: lib/music_library_web/live/collection_live/show.ex:115
|
||||||
#: lib/music_library_web/live/collection_live/show.ex:132
|
#: lib/music_library_web/live/collection_live/show.ex:132
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
@@ -59,12 +59,12 @@ msgstr ""
|
|||||||
msgid "Edit"
|
msgid "Edit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/index.ex:133
|
#: lib/music_library_web/live/collection_live/index.ex:118
|
||||||
#: lib/music_library_web/live/collection_live/index.ex:140
|
#: lib/music_library_web/live/collection_live/index.ex:125
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:53
|
#: lib/music_library_web/live/stats_live/index.ex:53
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:59
|
#: lib/music_library_web/live/stats_live/index.ex:59
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:132
|
#: lib/music_library_web/live/wishlist_live/index.ex:115
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:139
|
#: lib/music_library_web/live/wishlist_live/index.ex:122
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Error importing record"
|
msgid "Error importing record"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -188,15 +188,15 @@ msgstr ""
|
|||||||
msgid "Purchased on"
|
msgid "Purchased on"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/collection_live/index.ex:125
|
#: lib/music_library_web/live/collection_live/index.ex:110
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:45
|
#: lib/music_library_web/live/stats_live/index.ex:45
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:124
|
#: lib/music_library_web/live/wishlist_live/index.ex:107
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Record imported successfully"
|
msgid "Record imported successfully"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/record_live/form_component.ex:124
|
#: lib/music_library_web/live/record_live/form_component.ex:124
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:152
|
#: lib/music_library_web/live/wishlist_live/index.ex:135
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex:106
|
#: lib/music_library_web/live/wishlist_live/show.ex:106
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Record updated successfully"
|
msgid "Record updated successfully"
|
||||||
@@ -307,7 +307,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: lib/music_library_web/components/layouts/app.html.heex:20
|
#: lib/music_library_web/components/layouts/app.html.heex:20
|
||||||
#: lib/music_library_web/live/artist_live/show.html.heex:73
|
#: lib/music_library_web/live/artist_live/show.html.heex:73
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:83
|
#: lib/music_library_web/live/wishlist_live/index.ex:154
|
||||||
#: lib/music_library_web/live/wishlist_live/show.ex:130
|
#: lib/music_library_web/live/wishlist_live/show.ex:130
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Wishlist"
|
msgid "Wishlist"
|
||||||
|
|||||||
Reference in New Issue
Block a user