defmodule Menu.Main do use Hologram.Page alias Menu.Components.Line route "/menu" layout Menu.Scape def init(_params, component, _server) do menu = ( AirTable.Base.all("Menu", filterByFormula: "OR(Engage)") |> Enum.group_by(fn m -> m["fields"]["Section Name"] |> hd end) |> Enum.map(fn {section, records} -> section <> "\n" <> ( records |> Enum.sort_by(& &1["fields"]["Duration"]) |> Enum.map(fn %{"fields" => f } -> [ "\t- #{dura(f["Duration"])}", f["Hanyu"] || (f["Section Hanyu"] |> hd), f["Name"] || (f["Section Name"] |> hd), ] |> Enum.join(" | ") end) |> Enum.join("\n") ) end) |> Enum.join("\n") ) component |> put_state(:menu, menu) |> put_state(:number, 1) end def dura(mins) do case (mins / 60) |> round do 60 -> "1hr " 90 -> "1.5hr" 120 -> "2hr " n -> "#{n}min" end end def action(:renumber, params, c) do c |> put_state(:number, params.number) end def template do ~HOLO"""

PainAway Menu

How many people are you booking for?

We can accommodate a party up to 10 people at once. If you would like to book an appointment for 5 or more people, please call us at 267-690-4138, or email us.

{%for n <- 1..4} {/for}
{%if @number > 1} {@number} people! {/if}
{@menu}
""" end end