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