package Ġdev . stro hm native . view models Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Transform ations Ċ import Ġdev . stro hm native .* Ċ Ċ open Ġclass ĠKey ed Array ViewModel < Entry Type >( ĊĠĠĠ Ġinitial Data : ĠList < Entry Type >, ĊĠĠĠ Ġprop Name : ĠProp Name , ĊĠĠĠ Ġprop Path : ĠProp Path , ĊĠĠĠ Ġprivate Ġval Ġinstance Factory : ĠConstruct able From Dictionary < Entry Type > Ċ ) Ġ: ĠViewModel Base < List < Entry Type >>( initial Data , Ġprop Name , Ġprop Path ) Ġ{ ĊĠĠĠ Ġvar Ġsort er : ĠComparator < Entry Type >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġentries : ĠLive Data < List < Entry Type >> Ġ= ĠTransform ations . map ( data ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Ġ-> Ġdata Ġas ĠList < Entry Type > ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġprop To Data ( prop : ĠProp ): ĠList < Entry Type >? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( prop . first Ġ!= Ġprop Name ) Ġ{ Ġreturn Ġnull ; Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġprop . second Ġas ? ĠMap < *, Ġ*> Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġraw Data Ġ= Ġm . as Map OfType < Prop Name , ĠMap < String , ĠAny >>() Ġ?: Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġdata Ġ= Ġraw Data . values . map NotNull ( instance Factory :: createFrom Dict ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsort er ?. let Ġ{ Ġdata . sorted With ( it ) Ġ} Ġ?: Ġdata ĊĠĠĠ Ġ} Ċ } Ċ