import {BasicSyncProviderInterface, ProviderGlobalOptions, ProviderSourceConfig} from '../Controller'; import {ContainerProps, getRuntimeContext} from '../../Container/types'; import {isExpression, parseExpressionString} from '../../../util/vm'; import {isEmpty} from 'lodash'; export interface LocalStorageConfig extends ProviderSourceConfig { config: string[]; } export class LocalStorageDataProvider implements BasicSyncProviderInterface { configCheck(provider: LocalStorageConfig) { return provider.config instanceof Array; } parse(provider: LocalStorageConfig, props: ContainerProps, context: any) { let config = provider.config; let runtime = getRuntimeContext(props, context); provider.config = config.map(key => { if (isExpression(key)) { return parseExpressionString(key, runtime); } return key; }); return provider; } retCheck(ret: Object, provider: LocalStorageConfig) { return !isEmpty(ret); } retParse(ret: Object, provider: LocalStorageConfig, props: ContainerProps, context: any) { return ret; } run (provider: LocalStorageConfig, options?: ProviderGlobalOptions) { let items = provider.config; let ret = {}; items.forEach(key => { let result = localStorage.getItem(key); if (typeof result === 'string') { try { result = JSON.parse(result); } catch (e) {} } ret[key] = result; }); return ret; } onError(errmsg: string) { console.error(errmsg); } }