package Ġui . resource Ċ Ċ import Ġdata . Project Store Ċ import Ġdata . export ers . Export Project Data Ċ import Ġkotlinx . coroutines . flow . Flow Ċ import Ġkotlinx . coroutines . flow . Mutable State Flow Ċ import Ġkotlinx . coroutines . flow . combine Ċ import Ġkotlinx . coroutines . flow . map Ċ import Ġlocales . Locale Ċ import Ġlocales . Locale Iso Code Ċ import Ġproject . Platform Ċ import Ġproject . ResourceGroup Ċ import Ġproject . ResourceId Ċ import Ġproject . ResourceType Ċ Ċ class ĠResource ViewModel ( project Store : ĠProject Store ) Ġ{ ĊĠĠĠ Ġval Ġexcluded Locales Ġ= ĠMutable State Flow ( set Of < Locale Iso Code >()) ĊĠĠĠ Ġval Ġselected Tab Ġ= ĠMutable State Flow ( ResourceType . STRING S ) ĊĠĠĠ Ġval Ġis Multi Select Enabled Ġ= ĠMutable State Flow ( false ) ĊĠĠĠ Ġval Ġexcluded Groups Ġ= ĠMutable State Flow ( set Of < ResourceGroup >()) ĊĊĠĠĠ Ġval ĠprojectName Ġ= Ġproject Store . name ĊĠĠĠ Ġval Ġdefault Locale Ġ= Ġproject Store . default Locale ĊĠĠĠ Ġval Ġlocales Ġ= Ġproject Store . locales ĊĠĠĠ Ġval Ġexport Urls Ġ= Ġproject Store . export Urls ĊĊĠĠĠ Ġval Ġstrings Ġ= ĠString Resource ViewModel ( project Store ) ĊĠĠĠ Ġval Ġpl urals Ġ= ĠPl ural Resource ViewModel ( project Store ) ĊĠĠĠ Ġval Ġarrays Ġ= ĠArray Resource ViewModel ( project Store ) ĊĊĠĠĠ Ġval Ġgroups : ĠFlow < Set < ResourceGroup >> Ġ= Ġcombine ( strings . resourceGroups , Ġpl urals . resourceGroups , Ġarrays . resourceGroups ) Ġ{ Ġstrings , Ġpl urals , Ġarrays Ġ-> ĊĠĠĠĠĠĠĠ Ġ( strings . keys Ġ+ Ġpl urals . keys Ġ+ Ġarrays . keys ). to Sorted Set () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġresource ViewModel ( type : ĠResource Type ) Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠResource Type . STRING S Ġ-> Ġstrings ĊĠĠĠĠĠĠĠ ĠResource Type . PL UR ALS Ġ-> Ġpl urals ĊĠĠĠĠĠĠĠ ĠResource Type . ARRAY S Ġ-> Ġarrays ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfind First Invalid Resource (): ĠPair < ResourceType , ĠResource Id >? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtab Ġ= Ġselected Tab . value ĊĠĠĠĠĠĠĠ Ġresource ViewModel ( tab ). findFirst Invalid Resource ()?. let Ġ{ Ġreturn Ġtab Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠ ĠResource Type . values (). forEach Ġ{ Ġresource Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tab Ġ!= Ġresource Type ) Ġresource ViewModel ( resourceType ). findFirst Invalid Resource ()?. let Ġ{ Ġreturn Ġresource Type Ġto Ġit Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġcomparator Ġ= Ġdefault Locale . map Ġ{ Ġdefault Locale Ġ-> ĊĠĠĠĠĠĠĠ ĠComparator < Locale Iso Code > Ġ{ Ġo 1 , Ġo 2 Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo 1 Ġ== Ġdefault Locale Ġ-> Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo 2 Ġ== Ġdefault Locale Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLocale [ o 1 ]. displayName (). compareTo ( Locale [ o 2 ]. displayName ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġdisplayed Locales Ġ= Ġcombine ( comparator , Ġlocales , Ġexcluded Locales ) Ġ{ Ġcomparator , Ġlocales , Ġexcluded Locales Ġ-> ĊĠĠĠĠĠĠĠ Ġlocales . minus ( excluded Locales ). sorted With ( comparator ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġadd Locale ( iso Code : ĠLocale Iso Code ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( iso Code . is Base Language ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocales . value Ġ+= Ġiso Code ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocales . value Ġ+= ĠlistOf ( Locale [ iso Code ]. copy ( region Ġ= Ġnull ). iso Code , Ġiso Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Locale ( iso Code : ĠLocale Iso Code ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġbase Ġlanguage Ġis Ġrequired , Ġso Ġif Ġthat 's Ġremoved , Ġremove Ġthe Ġdialect s Ġthat Ġdepend Ġon Ġit ĊĠĠĠĠĠĠĠ Ġval Ġlocales ToRemove Ġ= Ġif Ġ( iso Code . is Base Language ) ĠlistOf ( iso Code ) Ġelse Ġlocales . value . filter Ġ{ Ġit . value . startsWith ( iso Code . value ) Ġ} ĊĠĠĠĠĠĠĠ Ġlocales . value Ġ-= Ġlocales ToRemove ĊĠĠĠĠĠĠĠ Ġlocales ToRemove . forEach Ġ{ Ġlocale Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResource Type . values (). forEach Ġ{ Ġtype Ġ-> Ġresource ViewModel ( type ). delete Locale ( locale ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġexport Project Data ( platform : ĠPlatform ): ĠExport Project Data Ġ= ĠExport Project Data ( ĊĠĠĠĠĠĠĠ Ġdefault Locale Ġ= Ġdefault Locale . value , ĊĠĠĠĠĠĠĠ Ġlocales Ġ= Ġlocales . value , ĊĠĠĠĠĠĠĠ Ġexport Url Ġ= Ġexport Urls . value [ platform ] Ġ?: Ġplatform . default Output Url , ĊĠĠĠĠĠĠĠ Ġstrings Ġ= Ġstrings . export Resource Data (), ĊĠĠĠĠĠĠĠ Ġpl urals Ġ= Ġpl urals . export Resource Data (), ĊĠĠĠĠĠĠĠ Ġarrays Ġ= Ġarrays . export Resource Data () ĊĠĠĠ Ġ) Ċ } Ċ