import uiState from './ui_state' ; enum StorageKeys { model = 'lic_model' , ui = 'ui_defaults' , customFonts = 'custom_fonts' , customBrickColors = 'custom_brick_colors' } interface ColorTable { [ k ] : ColorTableEntry ; } interface API { initialize ( defaultState ) : void ; get : { model ( ) : any ; ui : any ; customFonts : any ; customBrickColors ( ) : ColorTable ; } ; replace : any ; clear : any ; } const api = { initialize ( defaultState ) { if ( localStorage . length === 0 || localStorage . getItem ( StorageKeys . ui ) == null ) { localStorage . setItem ( StorageKeys . ui , JSON . stringify ( defaultState ) ) ; } } , get : { model : createGet ( StorageKeys . model ) , ui : createGet ( StorageKeys . ui ) , customFonts ( ) { const res = localStorage . getItem ( StorageKeys . customFonts ) ; if ( res == null ) { return api . replace . customFonts ( [ ] ) ; } return JSON . parse ( res ) ; } , customBrickColors ( ) { const res = localStorage . getItem ( StorageKeys . customBrickColors ) ; if ( res == null ) { return api . replace . customBrickColors ( { } ) ; } return JSON . parse ( res ) ; } , } , replace : { model : createReplace ( StorageKeys . model ) , ui : createReplace ( StorageKeys . ui ) , customFonts : createReplace ( StorageKeys . customFonts ) , customBrickColors : createReplace ( StorageKeys . customBrickColors ) , } , clear : { model : createClear ( StorageKeys . model ) , customFonts : createClear ( StorageKeys . customFonts ) , customBrickColors : createClear ( StorageKeys . customBrickColors ) , ui : function ( ) { api . replace . ui ( uiState . getDefaultState ( ) ) ; uiState . resetUIState ( ) ; } , everything ( ) { localStorage . clear ( ) ; api . clear . ui ( ) ; } , } , } ; function createGet ( k ) { return function get ( ) { return JSON . parse ( localStorage . getItem ( k ) || 'null' ) ; } ; } function createReplace ( k ) { return function ( json ) { try { localStorage . setItem ( k , JSON . stringify ( json ) ) ; } catch ( e ) { if ( e && e . name === 'QuotaExceededError' ) { return json ; } } return json ; } ; } function createClear ( k ) { return function ( ) { localStorage . removeItem ( k ) ; } ; } export default api ;