๐Ÿ“ฆ sleepyfran / duets

๐Ÿ“„ Phone.fs ยท 75 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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75module Duets.Cli.Scenes.Phone.Root

open Duets.Agents
open Duets.Cli.Components
open Duets.Cli.SceneIndex
open Duets.Cli.Text
open Duets.Entities
open Duets.Simulation

type private PhoneMenuOption =
    | Bank
    | BnB
    | Calendar
    | ConcertAssistant
    | Duber
    | Flights
    | FoodDelivery
    | Jobs
    | Mastodon
    | Statistics
    | Weather

let private textFromOption opt =
    match opt with
    | Bank -> "Bank"
    | BnB -> "DuetsBnB"
    | Calendar -> "Calendar"
    | ConcertAssistant -> "Concert Assistant"
    | Duber -> "Duber Taxi"
    | Flights -> "Flights"
    | FoodDelivery -> "Duelivery"
    | Jobs -> "Jobs"
    | Mastodon -> "Mastodon"
    | Statistics -> "Statistics"
    | Weather -> "Weather"

let private availableApps =
    [ Bank
      BnB
      Calendar
      ConcertAssistant
      Duber
      Flights
      FoodDelivery
      Jobs
      Mastodon
      Statistics
      Weather ]

let rec phoneScene () =
    let currentDate = State.get () |> Queries.Calendar.today

    let dayMoment = Calendar.Query.dayMomentOf currentDate

    let selection =
        showOptionalChoicePrompt
            (Phone.prompt currentDate dayMoment)
            Phone.putDown
            textFromOption
            availableApps

    match selection with
    | Some Bank -> Apps.Bank.Root.bankApp ()
    | Some BnB -> Apps.BnB.Root.bnbApp ()
    | Some Calendar -> Apps.Calendar.Root.calendarApp ()
    | Some ConcertAssistant -> Apps.ConcertAssistant.Root.concertAssistantApp ()
    | Some Duber -> Apps.Duber.Root.duberApp ()
    | Some Flights -> Apps.Flights.Root.flightsApp ()
    | Some FoodDelivery -> Apps.FoodDelivery.foodDeliveryApp ()
    | Some Jobs -> Apps.Jobs.Root.jobsApp ()
    | Some Mastodon -> Apps.Mastodon.Root.mastodonApp ()
    | Some Statistics -> Apps.Statistics.Root.statisticsApp ()
    | Some Weather -> Apps.Weather.Root.weatherApp ()
    | None -> Scene.World