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