diff --git a/src/components/FileExplorer.js b/src/components/FileExplorer.js
index eac0f62..fa72dca 100644
--- a/src/components/FileExplorer.js
+++ b/src/components/FileExplorer.js
@@ -29,8 +29,9 @@ function getVisibleParentNode(nodes, focusedNode, depths) {
const tasksAfterRender = []
const visibleNodesGenerator = new VisibleNodesGenerator()
-const init = dispatch => () => dispatch(async (state, { treeData, metaData, accessToken }) => {
+const init = dispatch => () => dispatch(async (state, { treeData, metaData, compressSingletonFolder }) => {
const { root } = treeParser.parse(treeData, metaData)
+ visibleNodesGenerator.setCompress(compressSingletonFolder)
await visibleNodesGenerator.plantTree(root)
const currentPath = URLHelper.getCurrentPath(true)
tasksAfterRender.push(DOMHelper.focusSearchInput)
diff --git a/src/components/SettingsBar.js b/src/components/SettingsBar.js
index 2904424..79ba35a 100644
--- a/src/components/SettingsBar.js
+++ b/src/components/SettingsBar.js
@@ -1,8 +1,14 @@
import React from 'react'
+import PropTypes from 'prop-types'
+
import Icon from './Icon'
import configHelper, { config } from '../utils/configHelper'
import keyHelper from '../utils/keyHelper'
+const wikiLinks = {
+ compressSingletonFolder: 'https://github.com/EnixCoda/Gitako/wiki/Compress-Singleton-Folder',
+}
+
const ACCESS_TOKEN_REGEXP = /^[0-9a-f]{40}$/
const OperatingSystems = {
@@ -38,20 +44,32 @@ function friendlyFormatShortcut(shortcut) {
}
export default class SettingsBar extends React.PureComponent {
+ static propTypes = {
+ accessToken: PropTypes.string.isRequired,
+ activated: PropTypes.bool.isRequired,
+ compressSingletonFolder: PropTypes.bool.isRequired,
+ onAccessTokenChange: PropTypes.func.isRequired,
+ onShortcutChange: PropTypes.func.isRequired,
+ setCompressSingleton: PropTypes.func.isRequired,
+ toggleShowSettings: PropTypes.func.isRequired,
+ toggleShowSideBarShortcut: PropTypes.string.isRequired,
+ }
+
state = {
- accessTokenHint: null,
accessToken: '',
- shortcutHint: null,
+ accessTokenHint: '',
+ shortcutHint: '',
toggleShowSideBarShortcut: '',
+ compressHint: '',
}
componentWillMount() {
- const { toggleShowSideBarShortcut } = this.props
- this.setState({ toggleShowSideBarShortcut })
+ const { toggleShowSideBarShortcut, compressSingletonFolder } = this.props
+ this.setState({ toggleShowSideBarShortcut, compressSingletonFolder })
}
- componentWillReceiveProps({ toggleShowSideBarShortcut }) {
- this.setState({ toggleShowSideBarShortcut })
+ componentWillReceiveProps({ toggleShowSideBarShortcut, compressSingletonFolder }) {
+ this.setState({ toggleShowSideBarShortcut, compressSingletonFolder })
}
onInputAccessToken = event => {
@@ -101,8 +119,18 @@ export default class SettingsBar extends React.PureComponent {
this.setState({ toggleShowSideBarShortcut: shortcut })
}
+ setCompressSingletonFolder = async e => {
+ const compress = e.target.checked
+ await configHelper.setOne(config.compressSingletonFolder, compress)
+ const { setCompressSingleton } = this.props
+ setCompressSingleton(compress)
+ this.setState({
+ compressHint: 'Saved, reload page to apply!',
+ })
+ }
+
render() {
- const { accessTokenHint, toggleShowSideBarShortcut, shortcutHint, accessToken } = this.state
+ const { accessTokenHint, toggleShowSideBarShortcut, compressSingletonFolder, shortcutHint, accessToken, compressHint } = this.state
const { toggleShowSettings, activated, accessToken: hasAccessToken } = this.props
return (
@@ -168,6 +196,17 @@ export default class SettingsBar extends React.PureComponent {
{shortcutHint && {shortcutHint}}
+
+
+ Compress singleton folder
+ (?)
+
+
+ {compressHint &&
{compressHint}
}
+
Position of Gitako (WIP)
diff --git a/src/components/SideBar.js b/src/components/SideBar.js
index fdf6dca..fbf89b8 100644
--- a/src/components/SideBar.js
+++ b/src/components/SideBar.js
@@ -32,6 +32,8 @@ export default class Gitako extends React.PureComponent {
metaData: PropTypes.object,
// file tree data
treeData: PropTypes.object,
+ // compress singleton folder
+ compressSingletonFolder: PropTypes.bool,
init: PropTypes.func.isRequired,
onPJAXEnd: PropTypes.func.isRequired,
@@ -55,6 +57,7 @@ export default class Gitako extends React.PureComponent {
toggleShowSideBarShortcut: '',
metaData: null,
treeData: null,
+ compressSingletonFolder: false,
}
constructor(props) {
@@ -88,14 +91,14 @@ export default class Gitako extends React.PureComponent {
}
renderContent() {
- const { errorDueToAuth, metaData, treeData, showSettings, accessToken } = this.props
+ const { errorDueToAuth, metaData, treeData, showSettings, accessToken, compressSingletonFolder } = this.props
return (
{metaData && }
{errorDueToAuth && this.renderAccessDeniedError()}
{metaData &&
treeData && (
-
+
)}
)
@@ -107,6 +110,7 @@ export default class Gitako extends React.PureComponent {
shouldShow,
showSettings,
accessToken,
+ compressSingletonFolder,
toggleShowSideBarShortcut,
logoContainerElement,
toggleShowSideBar,
@@ -114,6 +118,7 @@ export default class Gitako extends React.PureComponent {
toggleShowSettings,
onShortcutChange,
onAccessTokenChange,
+ setCompressSingleton,
} = this.props
return (
@@ -130,7 +135,9 @@ export default class Gitako extends React.PureComponent {
onAccessTokenChange={onAccessTokenChange}
activated={showSettings}
accessToken={accessToken}
+ compressSingletonFolder={compressSingletonFolder}
toggleShowSideBarShortcut={toggleShowSideBarShortcut}
+ setCompressSingleton={setCompressSingleton}
/>
diff --git a/src/content.less b/src/content.less
index 936c787..b0bb0c5 100644
--- a/src/content.less
+++ b/src/content.less
@@ -340,6 +340,11 @@
box-shadow: none;
}
}
+ .singleton {
+ .hint {
+ color: #6a737d;
+ }
+ }
.placeholder-row {
flex-shrink: 0;
display: flex;
diff --git a/src/driver/core.js b/src/driver/core.js
index 9f03175..298f9d7 100644
--- a/src/driver/core.js
+++ b/src/driver/core.js
@@ -9,8 +9,8 @@ const init = dispatch => async () => {
DOMHelper.decorateGitHubPageContent()
const metaData = URLHelper.parse()
dispatch(setMetaData, metaData)
- const { access_token: accessToken, shortcut } = await configHelper.get()
- dispatch({ accessToken, toggleShowSideBarShortcut: shortcut })
+ const { access_token: accessToken, shortcut, compressSingletonFolder } = await configHelper.get()
+ dispatch({ accessToken, toggleShowSideBarShortcut: shortcut, compressSingletonFolder })
const metaDataFromAPI = await GitHubHelper.getRepoMeta({ ...metaData, accessToken })
const branchName = metaData.branchName || metaDataFromAPI['default_branch']
Object.assign(metaData, { branchName, api: metaDataFromAPI })
@@ -82,6 +82,8 @@ const onShortcutChange = dispatch => shortcut => dispatch({ toggleShowSideBarSho
const setMetaData = dispatch => metaData => dispatch({ metaData })
+const setCompressSingleton = dispatch => compressSingletonFolder => dispatch({ compressSingletonFolder })
+
export default {
init,
onPJAXEnd,
@@ -93,4 +95,5 @@ export default {
onShortcutChange,
onResize,
setMetaData,
+ setCompressSingleton,
}
diff --git a/src/utils/configHelper.js b/src/utils/configHelper.js
index dceba79..17f67be 100644
--- a/src/utils/configHelper.js
+++ b/src/utils/configHelper.js
@@ -4,6 +4,7 @@ import { pick } from './general'
export const config = {
shortcut: 'shortcut',
accessToken: 'access_token',
+ compressSingletonFolder: 'compressSingletonFolder',
}
const configKeys = Object.values(config)