diff options
Diffstat (limited to 'lib/waev_web/views/exports_view.ex')
-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"> |