feat(settings): toggle copy buttons

This commit is contained in:
EnixCoda 2018-10-28 15:44:22 +08:00
parent 9384e2d45f
commit 50c4eaae70
No known key found for this signature in database
GPG key ID: 0C1A07377913A1DD
6 changed files with 82 additions and 14 deletions

View file

@ -8,6 +8,8 @@ import { version } from '../../package'
const wikiLinks = {
compressSingletonFolder: 'https://github.com/EnixCoda/Gitako/wiki/Compress-Singleton-Folder',
changeLog: 'https://github.com/EnixCoda/Gitako/wiki/Change-Log',
copyFileButton: 'https://github.com/EnixCoda/Gitako/wiki/Copy-file-and-snippet',
copySnippet: 'https://github.com/EnixCoda/Gitako/wiki/Copy-file-and-snippet',
}
const ACCESS_TOKEN_REGEXP = /^[0-9a-f]{40}$/
@ -65,12 +67,12 @@ export default class SettingsBar extends React.PureComponent {
}
componentWillMount() {
const { toggleShowSideBarShortcut, compressSingletonFolder } = this.props
this.setState({ toggleShowSideBarShortcut, compressSingletonFolder })
const { toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton } = this.props
this.setState({ toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton })
}
componentWillReceiveProps({ toggleShowSideBarShortcut, compressSingletonFolder }) {
this.setState({ toggleShowSideBarShortcut, compressSingletonFolder })
componentWillReceiveProps({ toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton }) {
this.setState({ toggleShowSideBarShortcut, compressSingletonFolder, copyFileButton, copySnippetButton })
}
onInputAccessToken = event => {
@ -145,11 +147,27 @@ export default class SettingsBar extends React.PureComponent {
})
}
setCopyFile = async e => {
const enabled = e.target.checked
await configHelper.setOne(config.copyFileButton, enabled)
const { setCopyFile } = this.props
setCopyFile(enabled)
}
setCopySnippet = async e => {
const enabled = e.target.checked
await configHelper.setOne(config.copySnippetButton, enabled)
const { setCopySnippet } = this.props
setCopySnippet(enabled)
}
render() {
const {
accessTokenHint,
toggleShowSideBarShortcut,
compressSingletonFolder,
copyFileButton,
copySnippetButton,
shortcutHint,
accessToken,
compressHint,
@ -228,6 +246,42 @@ export default class SettingsBar extends React.PureComponent {
</label>
{compressHint && <div className={'hint'}>{compressHint}</div>}
</div>
<div className={'gitako-settings-bar-content-section copy-file'}>
<h4>
Copy File&nbsp;
<a href={wikiLinks.copyFileButton} target={'_blank'}>
(?)
</a>
</h4>
<label htmlFor={'copy-file'}>
<input
id={'copy-file'}
name={'copy-file'}
type={'checkbox'}
onChange={this.setCopyFile}
checked={copyFileButton}
/>
&nbsp; {copyFileButton ? 'enabled' : 'disabled'}
</label>
</div>
<div className={'gitako-settings-bar-content-section copy-snippet'}>
<h4>
Copy Snippet&nbsp;
<a href={wikiLinks.copySnippet} target={'_blank'}>
(?)
</a>
</h4>
<label htmlFor={'copy-snippet'}>
<input
id={'copy-snippet'}
name={'copy-snippet'}
type={'checkbox'}
onChange={this.setCopySnippet}
checked={copySnippetButton}
/>
&nbsp; {copySnippetButton ? 'enabled' : 'disabled'}
</label>
</div>
<div className={'gitako-settings-bar-content-section issue'}>
<h4>Issue</h4>
<span>

View file

@ -131,6 +131,8 @@ export default class Gitako extends React.PureComponent {
showSettings,
accessToken,
compressSingletonFolder,
copyFileButton,
copySnippetButton,
toggleShowSideBarShortcut,
logoContainerElement,
toggleShowSideBar,
@ -138,6 +140,8 @@ export default class Gitako extends React.PureComponent {
onShortcutChange,
onAccessTokenChange,
setCompressSingleton,
setCopyFile,
setCopySnippet,
} = this.props
return (
<div className={'gitako-side-bar'}>
@ -158,8 +162,12 @@ export default class Gitako extends React.PureComponent {
activated={showSettings}
accessToken={accessToken}
compressSingletonFolder={compressSingletonFolder}
copyFileButton={copyFileButton}
copySnippetButton={copySnippetButton}
toggleShowSideBarShortcut={toggleShowSideBarShortcut}
setCompressSingleton={setCompressSingleton}
setCopyFile={setCopyFile}
setCopySnippet={setCopySnippet}
/>
</div>
</Resizable>

View file

@ -1,7 +1,4 @@
import DOMHelper from 'utils/DOMHelper'
const init = dispatch => () => {
DOMHelper.decorateGitHubPageContent()
}
export default {

View file

@ -11,8 +11,9 @@ const init = dispatch => async () => {
let nothingWentWrong = true
const metaData = URLHelper.parse()
dispatch(setMetaData, metaData)
const { access_token: accessToken, shortcut, compressSingletonFolder } = await configHelper.get()
dispatch({ accessToken, toggleShowSideBarShortcut: shortcut, compressSingletonFolder })
const { access_token: accessToken, shortcut, compressSingletonFolder, copyFileButton, copySnippetButton } = await configHelper.get()
DOMHelper.decorateGitHubPageContent({ copyFileButton, copySnippetButton })
dispatch({ accessToken, toggleShowSideBarShortcut: shortcut, compressSingletonFolder, copyFileButton, copySnippetButton })
const detectedBranchName = DOMHelper.getCurrentBranch() || 'master'
let aggressivelyGotTreeData = GitHubHelper.getTreeData({
...metaData,
@ -69,9 +70,9 @@ const handleError = dispatch => async (err) => {
}
const onPJAXEnd = dispatch => () => {
dispatch(({ metaData }) => {
dispatch(({ metaData, copyFileButton, copySnippetButton }) => {
DOMHelper.unmountTopProgressBar()
DOMHelper.decorateGitHubPageContent()
DOMHelper.decorateGitHubPageContent({ copyFileButton, copySnippetButton })
DOMHelper.focusSearchInput()
const mergedMetaData = { ...metaData, ...URLHelper.parse() }
dispatch(setShouldShow, URLHelper.isInCodePage(mergedMetaData))
@ -113,6 +114,10 @@ const setMetaData = dispatch => metaData => dispatch({ metaData })
const setCompressSingleton = dispatch => compressSingletonFolder => dispatch({ compressSingletonFolder })
const setCopyFile = dispatch => copyFileButton => dispatch({ copyFileButton })
const setCopySnippet = dispatch => copySnippetButton => dispatch({ copySnippetButton })
export default {
init,
onPJAXEnd,
@ -125,6 +130,8 @@ export default {
onShortcutChange,
setMetaData,
setCompressSingleton,
setCopyFile,
setCopySnippet,
setError,
handleError,
}

View file

@ -327,9 +327,9 @@ function clickOnNodeElement(index = 0) {
/**
* a combination of few above functions
*/
function decorateGitHubPageContent() {
attachCopyFileBtn()
attachCopySnippet()
function decorateGitHubPageContent({ copyFileButton, copySnippetButton }) {
if (copyFileButton) attachCopyFileBtn()
if (copySnippetButton) attachCopySnippet()
}
function mountTopProgressBar() {

View file

@ -5,6 +5,8 @@ export const config = {
shortcut: 'shortcut',
accessToken: 'access_token',
compressSingletonFolder: 'compressSingletonFolder',
copyFileButton: 'copyFileButton',
copySnippetButton: 'copySnippetButton',
}
const configKeys = Object.values(config)