diff --git a/lib/music_library/collection.ex b/lib/music_library/collection.ex
index 29355f5f..8873df5e 100644
--- a/lib/music_library/collection.ex
+++ b/lib/music_library/collection.ex
@@ -53,6 +53,17 @@ defmodule MusicLibrary.Collection do
Repo.all(q)
end
+ def get_latest_record do
+ q =
+ from r in Record,
+ where: not is_nil(r.purchased_at),
+ order_by: [{:desc, r.purchased_at}, order_alphabetically()],
+ limit: 1,
+ select: ^Records.essential_fields()
+
+ Repo.one(q)
+ end
+
def get_latest_record! do
q =
from r in Record,
diff --git a/lib/music_library_web/components/chart_components.ex b/lib/music_library_web/components/chart_components.ex
index 73a7a7a7..490e70a8 100644
--- a/lib/music_library_web/components/chart_components.ex
+++ b/lib/music_library_web/components/chart_components.ex
@@ -23,7 +23,7 @@ defmodule MusicLibraryWeb.ChartComponents do
attr :class, :string, default: ""
attr :datum_click, :any, default: nil, doc: "the function for handling phx-click on each datum"
- def vertical_bar_chart(assigns) do
+ def vertical_bar_chart(assigns) when assigns.data != [] do
assigns =
assigns
|> assign(:padding, 40)
@@ -95,6 +95,14 @@ defmodule MusicLibraryWeb.ChartComponents do
"""
end
+ def vertical_bar_chart(assigns) do
+ ~H"""
+
+ {gettext("No data available")}
+
+ """
+ end
+
defp max_value(data, value_fn) do
max = Enum.max_by(data, value_fn)
value_fn.(max)
diff --git a/lib/music_library_web/components/stats_components.ex b/lib/music_library_web/components/stats_components.ex
index d01690c0..cc7f67e8 100644
--- a/lib/music_library_web/components/stats_components.ex
+++ b/lib/music_library_web/components/stats_components.ex
@@ -6,13 +6,14 @@ defmodule MusicLibraryWeb.StatsComponents do
alias MusicLibrary.Records
- attr :record, Records.Record, required: true
+ attr :record, Records.Record, required: false
attr :title, :string, required: true
attr :class, :string
def album_preview(assigns) do
~H"""
+
+
+ {gettext("No record found")}
+
+
"""
end
diff --git a/lib/music_library_web/live/stats_live/index.ex b/lib/music_library_web/live/stats_live/index.ex
index ca56aa81..bda0e47d 100644
--- a/lib/music_library_web/live/stats_live/index.ex
+++ b/lib/music_library_web/live/stats_live/index.ex
@@ -13,7 +13,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
def mount(_params, _session, socket) do
current_date = DateTime.now!(socket.assigns.timezone) |> DateTime.to_date()
- latest_record = Collection.get_latest_record!()
+ latest_record = Collection.get_latest_record()
records_by_artists = Collection.count_records_by_artist(limit: 20)
records_by_genre = Collection.count_records_by_genre(limit: 20)
records_on_this_day = Collection.get_records_on_this_day(current_date)
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index e65354d6..d4118250 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -1624,3 +1624,13 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Top %{n} Collection Genres"
msgstr ""
+
+#: lib/music_library_web/components/chart_components.ex
+#, elixir-autogen, elixir-format
+msgid "No data available"
+msgstr ""
+
+#: lib/music_library_web/components/stats_components.ex
+#, elixir-autogen, elixir-format
+msgid "No record found"
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index be69f32a..01d84e63 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -1624,3 +1624,13 @@ msgstr ""
#, elixir-autogen, elixir-format, fuzzy
msgid "Top %{n} Collection Genres"
msgstr ""
+
+#: lib/music_library_web/components/chart_components.ex
+#, elixir-autogen, elixir-format
+msgid "No data available"
+msgstr ""
+
+#: lib/music_library_web/components/stats_components.ex
+#, elixir-autogen, elixir-format
+msgid "No record found"
+msgstr ""