feat(configHelper): create

This commit is contained in:
EnixCoda 2018-06-24 23:10:54 +08:00
parent ddd3820afc
commit 8cd73671c0
5 changed files with 61 additions and 36 deletions

View file

@ -1,6 +1,6 @@
import React from 'react'
import Icon from './Icon'
import storageHelper from '../utils/storageHelper'
import configHelper, { config } from '../utils/configHelper'
import keyHelper from '../utils/keyHelper'
const ACCESS_TOKEN_REGEXP = /^[0-9a-f]{40}$/
@ -66,7 +66,7 @@ export default class SettingsBar extends React.PureComponent {
const { onAccessTokenChange } = this.props
const { accessToken } = this.state
if (accessToken) {
await storageHelper.setAccessToken(accessToken)
await configHelper.setOne(config.accessToken, accessToken)
onAccessTokenChange(accessToken)
this.setState({
accessToken: '',
@ -77,7 +77,7 @@ export default class SettingsBar extends React.PureComponent {
clearToken = async () => {
const { onAccessTokenChange } = this.props
await storageHelper.setAccessToken('')
await configHelper.setOne(config.accessToken, '')
onAccessTokenChange('')
this.setState({ accessToken: '' })
}
@ -85,7 +85,7 @@ export default class SettingsBar extends React.PureComponent {
saveShortcut = async () => {
const { onShortcutChange } = this.props
const { toggleShowSideBarShortcut } = this.state
await storageHelper.setShortcut(toggleShowSideBarShortcut)
await configHelper.setOne(config.shortcut, toggleShowSideBarShortcut)
onShortcutChange(toggleShowSideBarShortcut)
this.setState({
shortcutHint: 'Shortcut is saved!',

View file

@ -1,6 +1,6 @@
import DOMHelper, { REPO_TYPE_PRIVATE } from '../utils/DOMHelper'
import GitHubHelper, { NOT_FOUND, BAD_CREDENTIALS } from '../utils/GitHubHelper'
import storageHelper from '../utils/storageHelper'
import configHelper from '../utils/configHelper'
import URLHelper from '../utils/URLHelper'
import keyHelper from '../utils/keyHelper'
@ -9,10 +9,7 @@ const init = dispatch => async () => {
DOMHelper.decorateGitHubPageContent()
const metaData = URLHelper.parse()
dispatch(setMetaData, metaData)
const [accessToken, shortcut] = await Promise.all([
storageHelper.getAccessToken(),
storageHelper.getShortcut(),
])
const { access_token: accessToken, shortcut } = await configHelper.get()
dispatch({ accessToken, toggleShowSideBarShortcut: shortcut })
const metaDataFromAPI = await GitHubHelper.getRepoMeta({ ...metaData, accessToken })
const branchName = metaData.branchName || metaDataFromAPI['default_branch']

34
src/utils/configHelper.js Normal file
View file

@ -0,0 +1,34 @@
import storageHelper from './storageHelper'
import { pick } from './general'
export const config = {
shortcut: 'shortcut',
accessToken: 'access_token',
}
const configKeys = Object.values(config)
function get() {
return storageHelper.get(configKeys)
}
function getOne(key) {
return get()[key]
}
function set(partialConfig) {
return storageHelper.set(pick(partialConfig, configKeys))
}
function setOne(key, value) {
return set({
[key]: value,
})
}
export default {
get,
getOne,
set,
setOne,
}

View file

@ -1 +1,17 @@
export default {}
/**
* @param {Object} source
* @param {Object|Array} keys
* @returns
*/
export function pick(source, keys) {
if (keys && typeof keys === 'object') {
return (
Array.isArray(keys) ? keys : Object.keys(keys)
).reduce((copy, key) => {
copy[key] = source[key]
return copy
}, {})
}
return {}
}

View file

@ -1,36 +1,14 @@
const localStorage = chrome.storage.local
const ACCESS_TOKEN_KEY = 'access_token'
const SHORTCUT_KEY = 'shortcut'
function get(key) {
return new Promise(resolve => localStorage.get(key, items => resolve(items[key])))
function get(mapping) {
return new Promise(resolve => localStorage.get(mapping, resolve))
}
function set(key, value) {
return new Promise(resolve => localStorage.set({ [key]: value }, resolve))
}
function getAccessToken() {
return get(ACCESS_TOKEN_KEY)
}
function setAccessToken(accessToken) {
return set(ACCESS_TOKEN_KEY, accessToken)
}
function getShortcut() {
return get(SHORTCUT_KEY)
}
function setShortcut(shortcut) {
return set(SHORTCUT_KEY, shortcut)
function set(value) {
return new Promise(resolve => localStorage.set(value, resolve))
}
export default {
get,
set,
getAccessToken,
setAccessToken,
getShortcut,
setShortcut,
}