Signal drop!
Relay (operand.online) is unreachable.
Usually, a dropped signal means an upgrade is happening. Hold on!
Sorry, no connección.
Hang in there while we get back on track
gram: pain
> ./app/menu/main.ex
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"""
<h1>PainAway Menu</h1>
<h2>How many people are you booking for?</h2>
<p class="accommodation">
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 <a href="mailto:painawayphilly@gmail.com">email us</a>.
</p>
<section id="number-people">
<div class="join">
{%for n <- 1..4}
<button
class="btn join-item {if (@number == n) do "btn-active" end}"
$click={action: :renumber, params: %{ number: n }}
> {case n do
1 -> "Only me"
n -> "+ #{n - 1}"
end}
</button>
{/for}
</div>
{%if @number > 1}
<span class="px-4">{@number} people!</span>
{/if}
</section>
<pre><code>{@menu}</code></pre>
"""
end
end