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
64namespace Duets.Cli.Components.Commands
open Duets.Agents
open Duets.Cli.Components
open Duets.Cli.SceneIndex
open Duets.Cli.Text
open Duets.Common
open Duets.Entities
open Duets.Simulation
open Duets.Simulation.Bands.Members
[<RequireQualifiedAccess>]
module FireMemberCommand =
let private textFromMember (bandMember: CurrentMember) =
let character =
Queries.Characters.find (State.get ()) bandMember.CharacterId
Rehearsal.fireMemberListItem (character.Name, bandMember.Role)
let rec private promptForMember bandMembers =
let selectedMember =
showOptionalChoicePrompt
Rehearsal.fireMemberPrompt
Generic.cancel
textFromMember
bandMembers
match selectedMember with
| Some bandMember -> promptForConfirmFiring bandMember
| None -> ()
and private promptForConfirmFiring bandMember =
let character =
Queries.Characters.find (State.get ()) bandMember.CharacterId
let confirmed =
showConfirmationPrompt (
Rehearsal.fireMemberConfirmation character.Name
)
if confirmed then
let state = State.get ()
let currentBand = Queries.Bands.currentBand state
fireMember state currentBand bandMember
|> Result.unwrap
|> Duets.Cli.Effect.apply
else
()
/// Command fire a member of the band.
let create bandMembers =
{ Name = "fire member"
Description = Command.fireMemberDescription
Handler =
(fun _ ->
if List.isEmpty bandMembers then
Rehearsal.fireMemberNoMembersToFire |> showMessage
else
promptForMember bandMembers
Scene.World) }