defmodule MoonWeb.Pages.Components.CalendarPage do
@moduledoc false
use MoonWeb, :live_view
alias Moon.Autolayouts.TopToDown
alias Moon.Components.Calendar
alias Moon.Components.Heading
alias Moon.Components.Link
alias MoonWeb.Components.ExampleAndCode
alias MoonWeb.Components.Page
data(breadcrumbs, :any,
default: [
%{
to: "#",
name: "Components v1"
},
%{
to: "/components/calendar",
name: "Calendar"
}
]
)
def mount(_params, _session, socket) do
socket =
assign(socket,
events: generate_events()
)
{:ok, socket}
end
def handle_params(_params, uri, socket) do
{:noreply, assign(socket, uri: uri)}
end
def render(assigns) do
~F"""
Calendar
Figma design
Sourcecode of this page
React implementation
<:example>
<:code>{calendar_1_code()}
<:state>@events = {inspect(@events, pretty: true)}
<:example>
<:code>{calendar_2_code()}
<:state>@events = {inspect(@events, pretty: true)}
<:note>
Use week_starts_on prop. The weekstart can between 1..7, where 1 means Monday. Default value is 1.
"""
end
def generate_events do
[
%{
id: Ecto.UUID.generate(),
started_at: shifted_time(-240),
ended_at: shifted_time(-238),
description: "Syncronite Splitz™",
location: "Yggdrasil"
},
%{
id: Ecto.UUID.generate(),
started_at: shifted_time(46),
ended_at: shifted_time(48),
description: "Miner Donkey Trouble",
location: "Play'n Go"
},
%{
id: Ecto.UUID.generate(),
started_at: shifted_time(3),
ended_at: shifted_time(5),
description: "Bayern Munich vs Augsburg",
location: "Allianz Arena, Munich, Germany"
},
%{
id: Ecto.UUID.generate(),
started_at: shifted_time(1),
ended_at: shifted_time(3),
description: "Aston Villa vs Chelsea",
location: "Villa Park, Aston, England"
},
%{
id: Ecto.UUID.generate(),
started_at: shifted_time(24),
ended_at: shifted_time(28),
description: "Formula 1 Monaco GP 2021",
location: "Monaco"
}
]
end
def shifted_time(hours) do
Timex.now()
|> Timex.to_naive_datetime()
|> NaiveDateTime.truncate(:second)
|> Timex.shift(hours: hours)
end
def calendar_1_code do
"""
alias Moon.Components.Calendar
"""
end
def calendar_2_code do
"""
alias Moon.Components.Calendar
"""
end
end