diff --git a/apps/coin_info/settings.js b/apps/coin_info/settings.js index 1727a0cbf..f9218894d 100644 --- a/apps/coin_info/settings.js +++ b/apps/coin_info/settings.js @@ -1,54 +1,51 @@ (function(back) { const SETTINGS_FILE = "coin_info.settings.json"; - - // Initialize with default settings... - // TODO: retrieve from upload-storage - const token_options = ['bitcoin', 'ethereum', 'tether']; - let settings = {'tokens':token_options, 'tokenSelected':['bitcoin'], 'getRateMin':60} - // ...and overwrite them with any saved values - // This way saved values are preserved if a new version adds more settings const storage = require('Storage'); - settings = Object.assign(settings, storage.readJSON(SETTINGS_FILE, 1)||{}); + + // Default settings with sorted tokens + let settings = Object.assign({ + // TODO: MZw - retrieve from upload-storage + tokens: ['bitcoin', 'ethereum', 'tether'], + tokenSelected: ['bitcoin'], + getRateMin: 60 + }, storage.readJSON(SETTINGS_FILE, 1) || {}); function save() { storage.write(SETTINGS_FILE, settings); } - function createMultiSelectMenu() { + function createMenu() { const menu = { - '': { 'title': 'Crpyto-Coin Info' }, + '': { 'title': 'Crypto-Coin Info' }, '< Back': () => Bangle.showClock() }; // Dynamic checkbox creation - settings.tokens.forEach((token, index) => { + settings.tokens.sort().forEach(token => { menu[token] = { value: settings.tokenSelected.includes(token), onchange: v => { - if (v) { - settings.tokenSelected.push(token); - } else { - settings.tokenSelected = settings.tokenSelected.filter(f => f !== token); - } + settings.tokenSelected = v + ? [...new Set([...settings.tokenSelected, token])] // Prevent duplicates + : settings.tokenSelected.filter(t => t !== token); save(); } }; }); // update time - menu['Req. Rate in Min'] = { - value: !!settings.getRateMin, + menu['Refresh Rate (min)'] = { + value: settings.getRateMin, + min: 1, + max: 1440, onchange: v => { settings.getRateMin = v; save(); } - } + }; - E.showMenu(menu); + return menu; } - Bangle.setUI({ - mode: 'custom', - btn: createMultiSelectMenu - }); + E.showMenu(createMenu()); }) \ No newline at end of file