package Ġcom . mor c ine k . players . ui . teams Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . widget . do On TextChanged Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . mor c ine k . players . R Ċ import Ġcom . mor c ine k . players . core . Base Fragment Ċ import Ġcom . mor c ine k . players . core . Selection ListAdapter Ċ import Ġcom . mor c ine k . players . core . data . Player Data Ċ import Ġcom . mor c ine k . players . core . data . Team Data Ċ import Ġcom . mor c ine k . players . core . database . Firebase References Ċ import Ġcom . mor c ine k . players . core . database . players Without Team LiveData ForValue Listener Ċ import Ġcom . mor c ine k . players . core . extensions . map Ċ import Ġcom . mor c ine k . players . core . extensions . observe Ċ import Ġcom . mor c ine k . players . core . item Callback Ċ import Ġcom . mor c ine k . players . ui . lazy Nav Controller Ċ import Ġkotlinx . android . synt hetic . main . fragment _ create _ player . view .* Ċ import Ġkotlinx . android . synt hetic . main . fragment _ create _ team .* Ċ import Ġkotlinx . android . synt hetic . main . vh _ selectable _ player . view .* Ċ import Ġorg . k oin . android x . view model . dsl . viewModel Ċ import Ġorg . k oin . android x . view model . ext . android . viewModel Ċ import Ġorg . k oin . dsl . module Ċ Ċ class ĠCreate Team Fragment Ġ: ĠBase Fragment ( R . layout . fragment _ create _ team ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby ĠviewModel < Create Team ViewModel >() ĊĊĠĠĠ Ġprivate Ġval Ġnav Controller Ġby Ġlazy Nav Controller () ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġview . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname TextInput Layout . edit Text ?. do On TextChanged Ġ{ Ġtext , Ġ_, Ġ_, Ġ_ Ġ-> ĠviewModel . update Value Ġ{ Ġname Ġ= Ġtext . toString () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= ĠSelection ListAdapter < Player Data >( R . layout . vh _ selectable _ player , Ġitem Callback ()) Ġ{ Ġ_, Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname . text Ġ= Ġ"$ item " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselected Items Ġ= ĠviewModel . selected Players ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserve ( viewModel . players ) Ġ{ Ġsubmit List ( it ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Selected Items Changed Ġ{ ĠviewModel . selected Players Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnext Button . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobserve ( viewModel . is Next Enabled ) Ġ{ Ġis Enabled Ġ= Ġit Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĠviewModel . create Team Ġ{ Ġnav Controller . pop Back Stack () Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġclass ĠCreate Team ViewModel ( val Ġreferences : ĠFirebase References ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġteam Ġ= ĠMutable LiveData ( Team Data ()) ĊĊĠĠĠ Ġvar Ġselected Players Ġ= Ġset Of < Player Data >() ĊĊĠĠĠ Ġval Ġis Next Enabled Ġ= Ġteam . map Ġ{ Ġit . name . isNotBlank () Ġ} ĊĊĠĠĠ Ġfun Ġupdate Value ( function : ĠTeam Data . () Ġ-> ĠUnit ) Ġ= Ġteam . post Value ( team . value ?. apply ( function )) ĊĊĠĠĠ Ġfun Ġcreate Team ( do On Complete : Ġ() Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchild Updates Ġ= ĠHashMap < String , ĠAny >() ĊĠĠĠĠĠĠĠ Ġreferences . teams Reference (). push (). key !!. let Ġ{ Ġkey Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchild Updates [" / teams /$ key "] Ġ= Ġteam . value !!. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselected Players . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchild Updates [" / players /${ it . key }/ team Key "] Ġ= Ġkey ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreferences . root Reference (). update Children ( child Updates ). add On Complete Listener Ġ{ Ġdo On Complete () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġplayers Ġ= Ġreferences . players Without Team LiveData ForValue Listener () Ċ } Ċ Ċ val Ġcreate Team Module Ġ= Ġmodule Ġ{ ĊĠĠĠ ĠviewModel Ġ{ ĠCreate Team ViewModel ( get ()) Ġ} Ċ } Ċ