diff --git a/src/components/FileExplorer.tsx b/src/components/FileExplorer.tsx index 1bbb612..418e766 100644 --- a/src/components/FileExplorer.tsx +++ b/src/components/FileExplorer.tsx @@ -31,9 +31,9 @@ class FileExplorer extends React.Component { } componentWillMount() { - const { init, setUpTree, treeData } = this.props + const { init, setUpTree, treeData, metaData, compressSingletonFolder, accessToken } = this.props init() - setUpTree(treeData) + setUpTree({ treeData, metaData, compressSingletonFolder, accessToken }) } componentDidMount() { @@ -43,8 +43,8 @@ class FileExplorer extends React.Component { componentWillReceiveProps(nextProps: Props & ConnectorState) { if (nextProps.treeData !== this.props.treeData) { - const { setUpTree } = nextProps - setUpTree() + const { setUpTree, treeData, metaData, compressSingletonFolder, accessToken } = nextProps + setUpTree({ treeData, metaData, compressSingletonFolder, accessToken }) } } diff --git a/src/driver/connect.ts b/src/driver/connect.ts index 880dbca..b80b27b 100644 --- a/src/driver/connect.ts +++ b/src/driver/connect.ts @@ -34,10 +34,7 @@ function run([method, args]: [M, Parameters]) { } export type DispatchState = React.Component['setState'] -export type PreDispatch = ( - dispatchCallback: (state: State, props: Props) => Props | Promise | void, - callback?: () => void, -) => void +export type GetState = () => State export type TriggerOtherMethod = >( methodCreator: MC, ...args: Parameters> @@ -45,7 +42,7 @@ export type TriggerOtherMethod = = { set: DispatchState - get: PreDispatch + get: GetState call: TriggerOtherMethod } @@ -81,13 +78,7 @@ function link(instance: React.Component, sources: Sources): Wr const dispatchState: DispatchState = (updater, callback) => { instance.setState(updater, callback) } - const prepareState: PreDispatch = async updater => { - try { - await updater(instance.state, instance.props) - } catch (error) { - raiseError(error) - } - } + const prepareState: GetState = () => instance.state const dispatch: Dispatch = { call: dispatchCall, get: prepareState, @@ -124,8 +115,3 @@ export default function connect(mapping: Sources) } } -export function promisifyGetState( - get: PreDispatch, -): () => Promise { - return () => new Promise(resolve => get(state => resolve(state))) -} diff --git a/src/driver/core/FileExplorer.ts b/src/driver/core/FileExplorer.ts index 09e7ef5..b6f940c 100644 --- a/src/driver/core/FileExplorer.ts +++ b/src/driver/core/FileExplorer.ts @@ -125,8 +125,11 @@ function handleParsed(root: TreeNode, parsed: Parsed) { }) } -const setUpTree: MethodCreator = dispatch => () => - dispatch.get(async (_, { treeData, metaData, compressSingletonFolder, accessToken }) => { +const setUpTree: MethodCreator< + Props, + ConnectorState, + [Pick] +> = dispatch => async ({ treeData, metaData, compressSingletonFolder, accessToken }) => { if (!treeData) return dispatch.call(setStateText, 'Rendering File List...') const { root, gitModules } = treeParser.parse(treeData, metaData) @@ -153,7 +156,7 @@ const setUpTree: MethodCreator = dispatch => () => tasksAfterRender.push(DOMHelper.focusSearchInput) dispatch.call(setStateText, '') dispatch.call(goTo, URLHelper.getCurrentPath(metaData.branchName)) - }) +} const execAfterRender: MethodCreator = dispatch => () => { for (const task of tasksAfterRender) { @@ -175,8 +178,8 @@ const handleKeyDown: MethodCreator< Props, ConnectorState, [React.KeyboardEvent] -> = dispatch => event => - dispatch.get(({ searched, visibleNodes }) => { +> = dispatch => event => { + const { searched, visibleNodes } = dispatch.get() if (!visibleNodes) return const { nodes, focusedNode, expandedNodes, depths } = visibleNodes function handleVerticalMove(index: number) { @@ -278,7 +281,7 @@ const handleKeyDown: MethodCreator< } } } - }) +} const onFocusSearchBar: MethodCreator = dispatch => () => dispatch.call(focusNode, null, false) @@ -337,12 +340,12 @@ const toggleNodeExpansion: MethodCreator = dispatch => ( node: TreeNode | null, skipScroll = false, -) => - dispatch.get(({ visibleNodes }) => { +) => { + const { visibleNodes } = dispatch.get() if (!visibleNodes) return visibleNodesGenerator.focusNode(node) dispatch.call(updateVisibleNodes) - }) +} const onNodeClick: MethodCreator = dispatch => node => { if (node.type === 'tree') { diff --git a/src/driver/core/SideBar.ts b/src/driver/core/SideBar.ts index cba88d4..66c4adf 100644 --- a/src/driver/core/SideBar.ts +++ b/src/driver/core/SideBar.ts @@ -56,7 +56,7 @@ export type ConnectorState = { } const init: MethodCreator = dispatch => async () => { - const { initializingPromise } = await promisifyGetState(dispatch.get)() + const { initializingPromise } = dispatch.get() if (initializingPromise) await initializingPromise let done: any = null // cannot use type `(() => void) | null` here @@ -178,28 +178,26 @@ const handleError: MethodCreator = dispatch => a } const onPJAXEnd: MethodCreator = dispatch => () => { - dispatch.get(({ metaData, copyFileButton, copySnippetButton }) => { + const { metaData, copyFileButton, copySnippetButton } = dispatch.get() DOMHelper.unmountTopProgressBar() DOMHelper.decorateGitHubPageContent({ copyFileButton, copySnippetButton }) const mergedMetaData = { ...metaData, ...URLHelper.parse() } dispatch.call(setShouldShow, URLHelper.isInCodePage(mergedMetaData)) dispatch.call(setMetaData, mergedMetaData) - }) } const onKeyDown: MethodCreator = dispatch => e => { - dispatch.get(({ toggleShowSideBarShortcut }) => { + const { toggleShowSideBarShortcut } = dispatch.get() if (toggleShowSideBarShortcut) { const keys = keyHelper.parseEvent(e) if (keys === toggleShowSideBarShortcut) { dispatch.call(toggleShowSideBar) } } - }) } const toggleShowSideBar: MethodCreator = dispatch => () => - dispatch.get(({ shouldShow }) => dispatch.call(setShouldShow, !shouldShow)) + dispatch.call(setShouldShow, !dispatch.get().shouldShow) const setShouldShow: MethodCreator< Props, @@ -276,7 +274,7 @@ const useListeners: MethodCreator = dispatch = const $onPJAXEnd = dispatch.call.bind(dispatch, onPJAXEnd) const $onKeyDown = dispatch.call.bind(dispatch, onKeyDown) return on => { - dispatch.get(({ disabled }, _) => { + const { disabled } = dispatch.get() if (on && !disabled) { window.addEventListener('pjax:complete', $onPJAXEnd) window.addEventListener('keydown', $onKeyDown) @@ -284,7 +282,6 @@ const useListeners: MethodCreator = dispatch = window.removeEventListener('pjax:complete', $onPJAXEnd) window.removeEventListener('keydown', $onKeyDown) } - }) } }