@@ -3,7 +3,7 @@ port module Main exposing (..)
33import Browser
44import Browser.Navigation as Nav
55import Html exposing (..)
6- import Html.Attributes exposing (class , id , type_ , value )
6+ import Html.Attributes exposing (class , disabled , hidden , id , type_ , value )
77import Html.Events exposing (onClick , onInput , onSubmit )
88import Js.Commands
99import Js.Events
@@ -14,6 +14,7 @@ import Lib.Icons as Icons
1414import Lib.ListExtras exposing (assign , rotate , uncons )
1515import Mobbers exposing (Mobber , Mobbers )
1616import Random
17+ import Random.List
1718import SharedEvents
1819import Sound.Library
1920import Svg exposing (Svg , svg )
@@ -100,6 +101,7 @@ type Msg
100101 | UnknownEvent
101102 | MobberNameChanged String
102103 | AddMobber
104+ | ShuffleMobbers
103105
104106
105107update : Msg -> Model -> ( Model , Cmd Msg )
@@ -176,6 +178,9 @@ update msg model =
176178 |> sendEvent
177179 )
178180
181+ ShuffleMobbers ->
182+ ( model, Random . generate ( ShareEvent << SharedEvents . ShuffledMobbers ) <| Random . List . shuffle model. mobbers )
183+
179184
180185hasTurnEnded : Model -> Bool
181186hasTurnEnded model =
@@ -186,6 +191,7 @@ hasTurnEnded model =
186191 _ ->
187192 False
188193
194+
189195end : ClockState -> ClockState
190196end clockState =
191197 case clockState of
@@ -237,6 +243,12 @@ applyTo state event =
237243 ( SharedEvents . DeletedMobber mobber, _ ) ->
238244 ( { state | mobbers = List . filter ( \ m -> m /= mobber) state. mobbers }, Cmd . none )
239245
246+ ( SharedEvents . RotatedMobbers , _ ) ->
247+ ( { state | mobbers = rotate state. mobbers }, Cmd . none )
248+
249+ ( SharedEvents . ShuffledMobbers mobbers, _ ) ->
250+ ( { state | mobbers = mobbers }, Cmd . none )
251+
240252 _ ->
241253 ( state, Cmd . none )
242254
@@ -301,6 +313,24 @@ view model =
301313 [ input [ type_ " text" , onInput MobberNameChanged , value model. mobberName ] []
302314 , button [ type_ " submit" ] [ Icons . plus ]
303315 ]
316+ , div [ class " button-row" ]
317+ [ button
318+ [ class " labelled-icon-button"
319+ , disabled ( List . length model. mobbers < 2 )
320+ , onClick <| ShareEvent <| SharedEvents . RotatedMobbers
321+ ]
322+ [ Icons . rotate
323+ , text " Rotate"
324+ ]
325+ , button
326+ [ class " labelled-icon-button"
327+ , disabled ( List . length model. mobbers < 3 )
328+ , onClick ShuffleMobbers
329+ ]
330+ [ Icons . shuffle
331+ , text " Shuffle"
332+ ]
333+ ]
304334 , ul []
305335 ( model. mobbers
306336 |> assign [ " Driver" , " Navigator" ]
0 commit comments