forked from shibao/cannery
		
	fix chart to sum by day
This commit is contained in:
		| @@ -1,5 +1,6 @@ | ||||
| # v0.6.1 | ||||
| - Add shading to table component | ||||
| - Fix chart to sum by day | ||||
|  | ||||
| # v0.6.0 | ||||
| - Update translations | ||||
|   | ||||
| @@ -11,22 +11,23 @@ export default { | ||||
|       data: { | ||||
|         datasets: [{ | ||||
|           label: el.dataset.label, | ||||
|           data: data.map(({ date, count, labels }) => ({ | ||||
|             labels, | ||||
|           data: data.map(({ date, count, label }) => ({ | ||||
|             label, | ||||
|             x: date, | ||||
|             y: count | ||||
|           })), | ||||
|           backgroundColor: el.dataset.color, | ||||
|           backgroundColor: `${el.dataset.color}77`, | ||||
|           borderColor: el.dataset.color, | ||||
|           fill: true, | ||||
|           borderWidth: 4 | ||||
|           borderWidth: 3, | ||||
|           pointBorderWidth: 1 | ||||
|         }] | ||||
|       }, | ||||
|       options: { | ||||
|         elements: { | ||||
|           point: { | ||||
|             radius: 7, | ||||
|             hoverRadius: 10 | ||||
|             radius: 9, | ||||
|             hoverRadius: 12 | ||||
|           } | ||||
|         }, | ||||
|         plugins: { | ||||
| @@ -39,7 +40,8 @@ export default { | ||||
|           tooltip: { | ||||
|             displayColors: false, | ||||
|             callbacks: { | ||||
|               label: ({ raw: { labels } }) => labels | ||||
|               title: (contexts) => contexts.map(({ raw: { x } }) => Intl.DateTimeFormat([], { timeZone: 'Etc/UTC', dateStyle: 'short' }).format(new Date(x))), | ||||
|               label: ({ raw: { label } }) => label | ||||
|             } | ||||
|           } | ||||
|         }, | ||||
|   | ||||
| @@ -88,13 +88,7 @@ defmodule CanneryWeb.RangeLive.Index do | ||||
|       shot_groups | ||||
|       |> Enum.map(fn shot_group -> shot_group |> get_row_data_for_shot_group(columns) end) | ||||
|  | ||||
|     chart_data = | ||||
|       shot_groups | ||||
|       |> Enum.map(fn shot_group -> | ||||
|         shot_group | ||||
|         |> get_chart_data_for_shot_group([:name, :count, :notes, :date]) | ||||
|       end) | ||||
|       |> Enum.sort_by(fn %{date: date} -> date end, Date) | ||||
|     chart_data = shot_groups |> get_chart_data_for_shot_group() | ||||
|  | ||||
|     socket | ||||
|     |> assign( | ||||
| @@ -106,40 +100,21 @@ defmodule CanneryWeb.RangeLive.Index do | ||||
|     ) | ||||
|   end | ||||
|  | ||||
|   @spec get_chart_data_for_shot_group(ShotGroup.t(), keys :: [atom()]) :: map() | ||||
|   defp get_chart_data_for_shot_group(shot_group, keys) do | ||||
|     shot_group = shot_group |> Repo.preload(ammo_group: :ammo_type) | ||||
|   @spec get_chart_data_for_shot_group([ShotGroup.t()]) :: [map()] | ||||
|   defp get_chart_data_for_shot_group(shot_groups) do | ||||
|     shot_groups | ||||
|     |> Repo.preload(ammo_group: :ammo_type) | ||||
|     |> Enum.group_by(fn %{date: date} -> date end, fn %{count: count} -> count end) | ||||
|     |> Enum.map(fn {date, rounds} -> | ||||
|       sum = Enum.sum(rounds) | ||||
|  | ||||
|     labels = | ||||
|       if shot_group.notes do | ||||
|         [gettext("Notes: %{notes}", notes: shot_group.notes)] | ||||
|       else | ||||
|         [] | ||||
|       end | ||||
|  | ||||
|     labels = [ | ||||
|       gettext( | ||||
|         "Name: %{name}", | ||||
|         name: shot_group.ammo_group.ammo_type.name | ||||
|       ), | ||||
|       gettext( | ||||
|         "Rounds shot: %{count}", | ||||
|         count: shot_group.count | ||||
|       ) | ||||
|       | labels | ||||
|     ] | ||||
|  | ||||
|     keys | ||||
|     |> Map.new(fn key -> | ||||
|       value = | ||||
|         case key do | ||||
|           :name -> shot_group.ammo_group.ammo_type.name | ||||
|           key -> shot_group |> Map.get(key) | ||||
|         end | ||||
|  | ||||
|       {key, value} | ||||
|       %{ | ||||
|         date: date, | ||||
|         count: sum, | ||||
|         label: gettext("Rounds shot: %{count}", count: sum) | ||||
|       } | ||||
|     end) | ||||
|     |> Map.put(:labels, labels) | ||||
|     |> Enum.sort_by(fn %{date: date} -> date end) | ||||
|   end | ||||
|  | ||||
|   @spec get_row_data_for_shot_group(ShotGroup.t(), [map()]) :: map() | ||||
|   | ||||
| @@ -59,9 +59,9 @@ | ||||
|       phx-update="ignore" | ||||
|       class="max-h-72" | ||||
|       data-chart-data={Jason.encode!(@chart_data)} | ||||
|       data-label={gettext("Rounds fired")} | ||||
|       data-label={gettext("Rounds shot")} | ||||
|       data-color={random_color()} | ||||
|       aria-label={gettext("Rounds fired chart")} | ||||
|       aria-label={gettext("Rounds shot chart")} | ||||
|       role="img" | ||||
|     > | ||||
|       <%= dgettext("errors", "Your browser does not support the canvas element.") %> | ||||
|   | ||||
| @@ -567,6 +567,7 @@ msgstr "Patronen verbleibend" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:87 | ||||
| #: lib/cannery_web/live/range_live/index.ex:81 | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot" | ||||
| msgstr "Patronen abgefeuert" | ||||
| @@ -932,27 +933,7 @@ msgstr "" | ||||
| msgid "%{percentage}%" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:121 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Name: %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:115 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Notes: %{notes}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds fired" | ||||
| msgstr "Patronen verbraucht" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds fired chart" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:125 | ||||
| #: lib/cannery_web/live/range_live/index.ex:114 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot: %{count}" | ||||
| msgstr "Patronen abgefeuert" | ||||
| @@ -1018,3 +999,8 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Used up!" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot chart" | ||||
| msgstr "Patronen abgefeuert" | ||||
|   | ||||
| @@ -214,7 +214,7 @@ msgid "Are you sure you want to unstage this ammo?" | ||||
| msgstr "Sind sie sicher, dass Sie diese Munition demarkieren möchten?" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:132 | ||||
| #: lib/cannery_web/live/range_live/index.ex:184 | ||||
| #: lib/cannery_web/live/range_live/index.ex:159 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Are you sure you want to delete this shot record?" | ||||
| msgstr "Sind sie sicher, dass sie die Schießkladde löschen möchten?" | ||||
|   | ||||
| @@ -550,6 +550,7 @@ msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:87 | ||||
| #: lib/cannery_web/live/range_live/index.ex:81 | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot" | ||||
| msgstr "" | ||||
| @@ -915,27 +916,7 @@ msgstr "" | ||||
| msgid "%{percentage}%" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:121 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Name: %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:115 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Notes: %{notes}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds fired" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds fired chart" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:125 | ||||
| #: lib/cannery_web/live/range_live/index.ex:114 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot: %{count}" | ||||
| msgstr "" | ||||
| @@ -1001,3 +982,8 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Used up!" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot chart" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -551,6 +551,7 @@ msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:87 | ||||
| #: lib/cannery_web/live/range_live/index.ex:81 | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot" | ||||
| msgstr "" | ||||
| @@ -916,27 +917,7 @@ msgstr "" | ||||
| msgid "%{percentage}%" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:121 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Name: %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:115 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Notes: %{notes}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds fired" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds fired chart" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:125 | ||||
| #: lib/cannery_web/live/range_live/index.ex:114 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot: %{count}" | ||||
| msgstr "" | ||||
| @@ -1002,3 +983,8 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Used up!" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot chart" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -194,7 +194,7 @@ msgid "Are you sure you want to unstage this ammo?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:132 | ||||
| #: lib/cannery_web/live/range_live/index.ex:184 | ||||
| #: lib/cannery_web/live/range_live/index.ex:159 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Are you sure you want to delete this shot record?" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -565,6 +565,7 @@ msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:87 | ||||
| #: lib/cannery_web/live/range_live/index.ex:81 | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot" | ||||
| msgstr "" | ||||
| @@ -930,27 +931,7 @@ msgstr "" | ||||
| msgid "%{percentage}%" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:121 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Name: %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:115 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Notes: %{notes}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds fired" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds fired chart" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:125 | ||||
| #: lib/cannery_web/live/range_live/index.ex:114 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot: %{count}" | ||||
| msgstr "" | ||||
| @@ -1016,3 +997,8 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Used up!" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot chart" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -213,7 +213,7 @@ msgid "Are you sure you want to unstage this ammo?" | ||||
| msgstr "Está seguro que desea desmontar esta munición?" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:132 | ||||
| #: lib/cannery_web/live/range_live/index.ex:184 | ||||
| #: lib/cannery_web/live/range_live/index.ex:159 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Are you sure you want to delete this shot record?" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -569,6 +569,7 @@ msgstr "Cartouches restantes" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:87 | ||||
| #: lib/cannery_web/live/range_live/index.ex:81 | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot" | ||||
| msgstr "Cartouches tirées" | ||||
| @@ -935,27 +936,7 @@ msgstr "" | ||||
| msgid "%{percentage}%" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:121 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Name: %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:115 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Notes: %{notes}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds fired" | ||||
| msgstr "Cartouches utilisées" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds fired chart" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:125 | ||||
| #: lib/cannery_web/live/range_live/index.ex:114 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot: %{count}" | ||||
| msgstr "Cartouches tirées" | ||||
| @@ -1021,3 +1002,8 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Used up!" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot chart" | ||||
| msgstr "Cartouches tirées" | ||||
|   | ||||
| @@ -215,7 +215,7 @@ msgid "Are you sure you want to unstage this ammo?" | ||||
| msgstr "Êtes-vous certain·e de vouloir désélectionner cette munition ?" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:132 | ||||
| #: lib/cannery_web/live/range_live/index.ex:184 | ||||
| #: lib/cannery_web/live/range_live/index.ex:159 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Are you sure you want to delete this shot record?" | ||||
| msgstr "Êtes-vous certain·e de vouloir supprimer cet enregistrement de tir ?" | ||||
|   | ||||
| @@ -561,6 +561,7 @@ msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:87 | ||||
| #: lib/cannery_web/live/range_live/index.ex:81 | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds shot" | ||||
| msgstr "" | ||||
| @@ -926,27 +927,7 @@ msgstr "" | ||||
| msgid "%{percentage}%" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:121 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Name: %{name}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:115 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Notes: %{notes}" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:62 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds fired" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Rounds fired chart" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.ex:125 | ||||
| #: lib/cannery_web/live/range_live/index.ex:114 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot: %{count}" | ||||
| msgstr "" | ||||
| @@ -1012,3 +993,8 @@ msgstr "" | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Used up!" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/range_live/index.html.heex:64 | ||||
| #, elixir-autogen, elixir-format, fuzzy | ||||
| msgid "Rounds shot chart" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -204,7 +204,7 @@ msgid "Are you sure you want to unstage this ammo?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:132 | ||||
| #: lib/cannery_web/live/range_live/index.ex:184 | ||||
| #: lib/cannery_web/live/range_live/index.ex:159 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Are you sure you want to delete this shot record?" | ||||
| msgstr "" | ||||
|   | ||||
| @@ -193,7 +193,7 @@ msgid "Are you sure you want to unstage this ammo?" | ||||
| msgstr "" | ||||
|  | ||||
| #: lib/cannery_web/live/ammo_group_live/show.ex:132 | ||||
| #: lib/cannery_web/live/range_live/index.ex:184 | ||||
| #: lib/cannery_web/live/range_live/index.ex:159 | ||||
| #, elixir-autogen, elixir-format | ||||
| msgid "Are you sure you want to delete this shot record?" | ||||
| msgstr "" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user