diff options
author | Guillermo Ramos | 2020-02-12 16:17:23 +0100 |
---|---|---|
committer | Guillermo Ramos | 2020-02-12 17:29:24 +0100 |
commit | 31f6eac1a6d81e217095e8e6aa4935bfd43c98b2 (patch) | |
tree | 930a4d05e94d601442ab1883f11fdac98389d172 /lib/waev_web/views | |
parent | 9f6af45d54a6a6ac0297969034212ad845c104ce (diff) | |
download | waev-31f6eac1a6d81e217095e8e6aa4935bfd43c98b2.tar.gz |
Group messages by date
Diffstat (limited to 'lib/waev_web/views')
-rw-r--r-- | lib/waev_web/views/exports_view.ex | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/lib/waev_web/views/exports_view.ex b/lib/waev_web/views/exports_view.ex index 3e0195f..bbdc2c7 100644 --- a/lib/waev_web/views/exports_view.ex +++ b/lib/waev_web/views/exports_view.ex @@ -1,6 +1,71 @@ defmodule WaevWeb.ExportsView do use WaevWeb, :view + defp consolidate_block({side, messages}), do: {side, Enum.reverse(messages)} + + defp consolidate_day({datestr, blocks}) do + # TODO use timex to pretty-print dates (translations??) + [d, m, y] = String.split(datestr, "/") |> Enum.map(&String.to_integer/1) + y = 2000 + y + + m = + Enum.at( + [ + "enero", + "febrero", + "marzo", + "abril", + "mayo", + "junio", + "julio", + "agosto", + "septiembre", + "octubre", + "noviembre", + "diciembre" + ], + m - 1 + ) + + date = "#{d} de #{m} de #{y}" + {date, Enum.reverse(blocks)} + end + + # Organize messages to make them easier to display + # [Waev.Export.Message] -> [{Date, [{Side, [Waev.Export.Message]}]}] + # Naming: ^-Days ^-Blocks^-Block + def process_messages(messages) do + messages + |> Enum.reduce([], fn message, days -> + [datestr, timestr] = String.split(message.date, " ") + side = message.side + + case days do + # Insert message on the last block (same date, same side) + [{^datestr, [{^side, block} | old_blocks]} | old_days] -> + [{datestr, [{side, [message | block]} | old_blocks]} | old_days] + + # Insert message on new block (same date) + # Old block must be reversed to keep messages in the correct order + [{^datestr, [{old_side, old_block} | old_blocks]} | old_days] -> + [ + {datestr, [{side, [message]}, consolidate_block({old_side, old_block}) | old_blocks]} + | old_days + ] + + # Insert message on new date + # Old blocks must be reversed to keep days in the correct order + [{old_datestr, old_blocks} | old_days] -> + [{datestr, [{side, [message]}]}, consolidate_day({old_datestr, old_blocks}) | old_days] + + # Ez. + [] -> + [{datestr, [{side, [message]}]}] + end + end) + |> Enum.reverse() + end + def party_peek(assigns, party) do ~E""" <div class="party-peek"> |