From ea1123bfecb8d207cdc39dee5fab898adc68b349 Mon Sep 17 00:00:00 2001 From: EnixCoda Date: Sun, 29 Mar 2020 15:50:21 +0800 Subject: [PATCH] feat: separate config between platforms --- src/utils/configHelper.ts | 33 +++++++++++++++++++++++++++++---- src/utils/storageHelper.ts | 2 +- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/src/utils/configHelper.ts b/src/utils/configHelper.ts index 95c0b04..421e50f 100644 --- a/src/utils/configHelper.ts +++ b/src/utils/configHelper.ts @@ -1,3 +1,4 @@ +import { getPlatformName } from 'platforms' import * as storageHelper from 'utils/storageHelper' export type Config = { @@ -22,7 +23,7 @@ export enum configKeys { icons = 'icons', } -export const defaultConfigs: Config = { +const defaultConfigs: Config = { sideBarWidth: 260, shortcut: undefined, access_token: undefined, @@ -43,11 +44,35 @@ function applyDefaultConfigs(configs: Partial) { }, {} as Config) } +type Storage = { + // save root level `configVersion` for easier future migrating + [key in 'configVersion' | string]: string + + // separate different platform configs to simplify interactions with browser storage API + // e.g. + // platform_GitHub?: Config +} + +async function migrateConfig() { + const config = await storageHelper.get(configKeyArray) + if (!config || !('configVersion' in config) || config.configVersion < '1.0.1') { + await storageHelper.set({ platform_GitHub: config, configVersion: '1.0.1' }) + } +} + +let platformName: string +const prepareConfig = new Promise(async resolve => { + await migrateConfig() + platformName = `platform_` + (await getPlatformName()) + resolve() +}) + export async function get(): Promise { - const config = await storageHelper.get(configKeyArray) - return applyDefaultConfigs(config || {}) + await prepareConfig + const config = await storageHelper.get>([platformName]) + return applyDefaultConfigs((config && config[platformName]) || {}) } export async function set(partialConfig: Partial) { - return await storageHelper.set(partialConfig) + return await storageHelper.set({ [platformName]: partialConfig }) } diff --git a/src/utils/storageHelper.ts b/src/utils/storageHelper.ts index 5125506..5357034 100644 --- a/src/utils/storageHelper.ts +++ b/src/utils/storageHelper.ts @@ -4,7 +4,7 @@ export async function get< T extends { [key: string]: any } ->(mapping: string[] | null): Promise { +>(mapping: string | string[] | null = null): Promise { try { return (await localStorage.get(mapping || undefined)) as T } catch (err) {}