The status of multiple accordions can be managed collectively and linked.
import Accordion
import Accordion.List as AccordionList
type alias model =
{ multiOpen : Bool
, status : AccordionList.Status String
}
type Msg
= Toggled
| UpdateAccordion String
update msg model =
case msg of
Toggled ->
({ model
| multiOpen = not model.multiOpen
, status =
if model.multiOpen then
AccordionList.singleOpen Nothing
else
AccordionList.multiOpen []
}
, Cmd.none
)
UpdateStatus id_ ->
( { model | AccordionList.uodate id_ model.status }
, Cmd.none
)
view model =
let
id_ index_ =
"example-accordion-" ++ String.fromInt index_
accordion_ index_ =
Accordion.accordion [ id (id_ index_) ]
( Accordion.head
[ onClick (UpdateStatus <| id_ index_) ]
headChildren
)
( Accordion.body [] bodyChildren )
( AccordionList.isOpen (id_ index_) model.status )
in
Html.div []
List.map accordion_ <|
List.range 1 5Initialize multiple open Status.
values List of values associated with open accordions(e.g. List of id).Initialize single open Status.
value A value of associated with open accoedion(e.g. id).Toggle the state of the argument value.
Check value status if it is open.
Multiple accordions status type