flow: real resources!

This commit is contained in:
cha0s 2020-06-28 08:30:38 -05:00
parent 10ec12fe7f
commit 6c1e339e17
7 changed files with 66 additions and 42 deletions

View File

@ -12,6 +12,8 @@ import Sidebar from './sidebar';
import SidebarIcons from './sidebar-icons'; import SidebarIcons from './sidebar-icons';
import { import {
activeResourceUriSelector, activeResourceUriSelector,
activeSidebarIndexSelector,
isSidebarExpandedSelector,
resourceUrisSelector, resourceUrisSelector,
} from './state'; } from './state';
import {all as allTypeRenderers} from './type-renderers.scwp'; import {all as allTypeRenderers} from './type-renderers.scwp';
@ -24,9 +26,9 @@ const typeRenderMap = () => Object.values(allTypeRenderers()).reduce((r, M) => {
const App = () => { const App = () => {
const [typeRenderers] = useState(typeRenderMap()); const [typeRenderers] = useState(typeRenderMap());
const activeResourceUri = useSelector(activeResourceUriSelector); const activeResourceUri = useSelector(activeResourceUriSelector);
const activeSidebarIndex = useSelector(activeSidebarIndexSelector);
const isSidebarExpanded = useSelector(isSidebarExpandedSelector);
const resourceUris = useSelector(resourceUrisSelector); const resourceUris = useSelector(resourceUrisSelector);
const [activeSidebar, setActiveSidebar] = useState(0);
const [isSidebarExpanded, setIsSidebarExpanded] = useState(true);
return ( return (
<div className="app"> <div className="app">
<TypeRenderersContext.Provider value={typeRenderers}> <TypeRenderersContext.Provider value={typeRenderers}>
@ -35,8 +37,8 @@ const App = () => {
className="sidebar-icons-wrapper pane" className="sidebar-icons-wrapper pane"
> >
<SidebarIcons <SidebarIcons
active={[activeSidebar, setActiveSidebar]} activeIndex={activeSidebarIndex}
isExpanded={[isSidebarExpanded, setIsSidebarExpanded]} isExpanded={isSidebarExpanded}
/> />
</div> </div>
<div <div

View File

@ -21,9 +21,11 @@
} }
.sidebar-wrapper { .sidebar-wrapper {
display: none;
max-width: calc(100% - 4em); max-width: calc(100% - 4em);
width: 0; width: 0;
&.expanded { &.expanded {
display: block;
width: 24em; width: 24em;
} }
} }

File diff suppressed because one or more lines are too long

View File

@ -1,7 +1,13 @@
import {compose} from '@avocado/core'; import {compose} from '@avocado/core';
import classnames from 'classnames'; import classnames from 'classnames';
import contempo from 'contempo'; import contempo from 'contempo';
import React, {useState} from 'react'; import PropTypes from 'prop-types';
import React from 'react';
import {useDispatch} from 'react-redux';
import {
setIsSidebarExpanded,
} from './state';
const decorate = compose( const decorate = compose(
contempo(require('./sidebar-icons.raw.scss')), contempo(require('./sidebar-icons.raw.scss')),
@ -9,21 +15,22 @@ const decorate = compose(
const SidebarIcons = (props) => { const SidebarIcons = (props) => {
const { const {
active: [activeSidebar, setActiveSidebar], activeIndex,
isExpanded: [isSidebarExpanded, setIsSidebarExpanded], isExpanded,
} = props; } = props;
const dispatch = useDispatch();
return ( return (
<div className="sidebar-icons"> <div className="sidebar-icons">
<button <button
className={classnames( className={classnames(
'icon', 'icon',
'files', 'files',
{active: 0 === activeSidebar}, {active: 0 === activeIndex},
{expanded: 0 === activeSidebar && isSidebarExpanded}, {expanded: 0 === activeIndex && isExpanded},
)} )}
onClick={() => { onClick={() => {
if (0 === activeSidebar) { if (0 === activeIndex) {
setIsSidebarExpanded(!isSidebarExpanded); dispatch(setIsSidebarExpanded(!isExpanded));
} }
}} }}
type="button" type="button"
@ -42,6 +49,8 @@ const SidebarIcons = (props) => {
}; };
SidebarIcons.propTypes = { SidebarIcons.propTypes = {
activeIndex: PropTypes.number.isRequired,
isExpanded: PropTypes.bool.isRequired,
}; };
export default decorate(SidebarIcons); export default decorate(SidebarIcons);

View File

@ -97,4 +97,4 @@ const Sidebar = () => {
Sidebar.propTypes = { Sidebar.propTypes = {
}; };
export default decorate(Sidebar); export default decorate(Sidebar);

View File

@ -11,9 +11,14 @@ export const activeResourceUriSelector = createSelector(
(app) => app.activeResourceUri, (app) => app.activeResourceUri,
); );
export const sidebarIsOpenedSelector = createSelector( export const activeSidebarIndexSelector = createSelector(
appSelector, appSelector,
(app) => app.sidebarIsOpened, (app) => app.activeSidebarIndex,
);
export const isSidebarExpandedSelector = createSelector(
appSelector,
(app) => app.isSidebarExpanded,
); );
export const resourceUrisSelector = createSelector( export const resourceUrisSelector = createSelector(
@ -25,8 +30,9 @@ const slice = createSlice({
name: 'app', name: 'app',
initialState: { initialState: {
activeResourceUri: '', activeResourceUri: '',
activeSidebarIndex: 0,
isSidebarExpanded: false,
resourceUris: [], resourceUris: [],
sidebarIsOpened: false,
}, },
reducers: { reducers: {
setActiveResourceUri: (state, {payload: uri}) => { setActiveResourceUri: (state, {payload: uri}) => {
@ -35,15 +41,19 @@ const slice = createSlice({
state.resourceUris.push(uri); state.resourceUris.push(uri);
} }
}, },
setSidebarIsOpened: (state, {payload: isOpened}) => { setActiveSidebarIndex: (state, {payload: sidebarIndex}) => {
state.sidebarIsOpened = isOpened; state.activeSidebarIndex = sidebarIndex;
},
setIsSidebarExpanded: (state, {payload: isExpanded}) => {
state.isSidebarExpanded = isExpanded;
}, },
}, },
}); });
export const { export const {
setActiveResourceUri, setActiveResourceUri,
setSidebarIsOpened, setActiveSidebarIndex,
setIsSidebarExpanded,
} = slice.actions; } = slice.actions;
export default slice.reducer; export default slice.reducer;

View File

@ -39,6 +39,7 @@ export function createSocketServer(httpServer) {
: resolve(stats.isDirectory() ? '' : filename) : resolve(stats.isDirectory() ? '' : filename)
)); ));
})); }));
// eslint-disable-next-line no-shadow
Promise.all(promises).then((filenames) => { Promise.all(promises).then((filenames) => {
const resourceUris = filenames const resourceUris = filenames
.filter((filename) => !!filename) .filter((filename) => !!filename)
@ -49,7 +50,6 @@ export function createSocketServer(httpServer) {
} }
}); });
}); });
socketServer.io.use(socketSession(session())); socketServer.io.use(socketSession(session()));
return socketServer; return socketServer;
} }