๐Ÿ“ฆ sleepyfran / duets

๐Ÿ“„ ConcertDetails.fs ยท 49 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49[<AutoOpen>]
module Duets.Cli.Components.ConcertDetails

open Duets.Agents
open Duets.Cli.Text
open Duets.Common
open Duets.Entities
open Duets.Simulation
open Spectre.Console

/// Shows a social network post posted by the given account.
let showConcertDetails (concert: Concert) =
    let state = State.get ()
    let place = Queries.World.placeInCityById concert.CityId concert.VenueId
    let cityName = Generic.cityName concert.CityId
    let band = Queries.Bands.currentBand state

    let title =
        match concert.ParticipationType with
        | Headliner -> band.Name |> Styles.title
        | OpeningAct(headlinerId, _) ->
            let headliner = Queries.Bands.byId state headlinerId
            $"{headliner.Name |> Styles.title}, support: {band.Name |> Styles.faded}"

    lineBreak ()

    Panel(
        Rows(
            Markup(title),
            Markup($"Venue: {place.Name |> Styles.place}, {cityName}"),
            Markup(
                $"Scheduled for {concert.Date |> Generic.dateWithDay} at {concert.DayMoment |> Generic.dayMomentName |> String.lowercase}"
            )
        ),
        Header =
            PanelHeader($"{Emoji.concert} Concert scheduled" |> Styles.header),
        Border = BoxBorder.Rounded,
        Expand = true
    )
    |> AnsiConsole.Write

    showTips
        [ "Make sure to be at the venue at least 2 day moments before the concert so that you can set up the merch stand and do a sound check."
          "You can order merchandise from the Merchandise Workshop to sell at your concerts. They take a week to deliver, so make sure you order them in time!" ]

    lineBreak ()

    showContinuationPrompt ()