mirror of
https://github.com/status-im/safe-react.git
synced 2025-02-11 17:17:09 +00:00
make sidebar toggleable
This commit is contained in:
parent
49ba6d3bd3
commit
ceb44ab206
@ -26,6 +26,6 @@ const EtherscanLink = ({ type, value, currentNetwork }: EtherscanLinkProps) => (
|
|||||||
)
|
)
|
||||||
|
|
||||||
export default connect<Object, Object, ?Function, ?Object>(
|
export default connect<Object, Object, ?Function, ?Object>(
|
||||||
state => ({ currentNetwork: networkSelector(state) }),
|
(state) => ({ currentNetwork: networkSelector(state) }),
|
||||||
null,
|
null,
|
||||||
)(EtherscanLink)
|
)(EtherscanLink)
|
||||||
|
@ -14,6 +14,7 @@ import Row from '~/components/layout/Row'
|
|||||||
import Spacer from '~/components/Spacer'
|
import Spacer from '~/components/Spacer'
|
||||||
import { border, sm, md } from '~/theme/variables'
|
import { border, sm, md } from '~/theme/variables'
|
||||||
import Provider from './Provider'
|
import Provider from './Provider'
|
||||||
|
import SafeListHeader from './SafeListHeader'
|
||||||
|
|
||||||
const logo = require('../assets/gnosis-safe-logo.svg')
|
const logo = require('../assets/gnosis-safe-logo.svg')
|
||||||
|
|
||||||
@ -58,8 +59,9 @@ const Layout = openHoc(({
|
|||||||
</Link>
|
</Link>
|
||||||
</Col>
|
</Col>
|
||||||
<Divider />
|
<Divider />
|
||||||
<Spacer />
|
<SafeListHeader />
|
||||||
<Divider />
|
<Divider />
|
||||||
|
<Spacer />
|
||||||
<Provider open={open} toggle={toggle} info={providerInfo}>
|
<Provider open={open} toggle={toggle} info={providerInfo}>
|
||||||
{(providerRef) => (
|
{(providerRef) => (
|
||||||
<Popper open={open} anchorEl={providerRef.current} placement="bottom-end">
|
<Popper open={open} anchorEl={providerRef.current} placement="bottom-end">
|
||||||
|
60
src/components/Header/component/SafeListHeader/index.jsx
Normal file
60
src/components/Header/component/SafeListHeader/index.jsx
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
// @flow
|
||||||
|
import * as React from 'react'
|
||||||
|
import { connect } from 'react-redux'
|
||||||
|
import { makeStyles } from '@material-ui/core/styles'
|
||||||
|
import IconButton from '@material-ui/core/IconButton'
|
||||||
|
import ExpandMoreIcon from '@material-ui/icons/ExpandMore'
|
||||||
|
import Paragraph from '~/components/layout/Paragraph'
|
||||||
|
import Col from '~/components/layout/Col'
|
||||||
|
import {
|
||||||
|
xs, sm, md, border,
|
||||||
|
} from '~/theme/variables'
|
||||||
|
import { safesCountSelector } from '~/routes/safeList/store/selectors'
|
||||||
|
import { SidebarContext } from '~/components/Sidebar'
|
||||||
|
|
||||||
|
const useStyles = makeStyles({
|
||||||
|
container: {
|
||||||
|
flexGrow: 0,
|
||||||
|
padding: `0 ${md}`,
|
||||||
|
},
|
||||||
|
counter: {
|
||||||
|
background: border,
|
||||||
|
padding: xs,
|
||||||
|
borderRadius: '3px',
|
||||||
|
marginLeft: sm,
|
||||||
|
lineHeight: 'normal',
|
||||||
|
},
|
||||||
|
icon: {
|
||||||
|
marginLeft: sm,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
safesCount: number,
|
||||||
|
}
|
||||||
|
|
||||||
|
const { useContext } = React
|
||||||
|
|
||||||
|
const SafeListHeader = ({ safesCount }: Props) => {
|
||||||
|
const classes = useStyles()
|
||||||
|
const { toggleSidebar } = useContext(SidebarContext)
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Col start="xs" middle="xs" className={classes.container}>
|
||||||
|
Safes
|
||||||
|
{' '}
|
||||||
|
<Paragraph size="xs" className={classes.counter}>
|
||||||
|
{safesCount}
|
||||||
|
</Paragraph>
|
||||||
|
<IconButton onClick={toggleSidebar} className={classes.icon} aria-label="Expand Safe List">
|
||||||
|
<ExpandMoreIcon color="secondary" />
|
||||||
|
</IconButton>
|
||||||
|
</Col>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default connect<Object, Object, ?Function, ?Object>(
|
||||||
|
// $FlowFixMe
|
||||||
|
(state) => ({ safesCount: safesCountSelector(state) }),
|
||||||
|
null,
|
||||||
|
)(SafeListHeader)
|
@ -6,7 +6,6 @@ import React, { Suspense } from 'react'
|
|||||||
import { Provider } from 'react-redux'
|
import { Provider } from 'react-redux'
|
||||||
import { ConnectedRouter } from 'connected-react-router'
|
import { ConnectedRouter } from 'connected-react-router'
|
||||||
import { hot } from 'react-hot-loader/root'
|
import { hot } from 'react-hot-loader/root'
|
||||||
import Sidebar from '~/components/Sidebar'
|
|
||||||
import PageFrame from '../layout/PageFrame'
|
import PageFrame from '../layout/PageFrame'
|
||||||
import Loader from '../Loader'
|
import Loader from '../Loader'
|
||||||
import { history, store } from '~/store'
|
import { history, store } from '~/store'
|
||||||
@ -22,7 +21,6 @@ const Root = () => (
|
|||||||
<PageFrame>
|
<PageFrame>
|
||||||
<Suspense fallback={<Loader />}>
|
<Suspense fallback={<Loader />}>
|
||||||
<AppRoutes />
|
<AppRoutes />
|
||||||
<Sidebar />
|
|
||||||
</Suspense>
|
</Suspense>
|
||||||
</PageFrame>
|
</PageFrame>
|
||||||
</ConnectedRouter>
|
</ConnectedRouter>
|
||||||
|
@ -3,7 +3,12 @@ import React, { useState } from 'react'
|
|||||||
import Drawer from '@material-ui/core/Drawer'
|
import Drawer from '@material-ui/core/Drawer'
|
||||||
import useSidebarStyles from './style'
|
import useSidebarStyles from './style'
|
||||||
|
|
||||||
const Sidebar = () => {
|
export const SidebarContext = React.createContext({
|
||||||
|
isOpen: false,
|
||||||
|
toggleSidebar: () => {},
|
||||||
|
})
|
||||||
|
|
||||||
|
const Sidebar = ({ children }) => {
|
||||||
const [isOpen, setIsOpen] = useState<boolean>(true)
|
const [isOpen, setIsOpen] = useState<boolean>(true)
|
||||||
const classes = useSidebarStyles()
|
const classes = useSidebarStyles()
|
||||||
|
|
||||||
@ -12,6 +17,7 @@ const Sidebar = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
<SidebarContext.Provider value={{ isOpen, toggleSidebar }}>
|
||||||
<Drawer
|
<Drawer
|
||||||
className={classes.sidebar}
|
className={classes.sidebar}
|
||||||
open={isOpen}
|
open={isOpen}
|
||||||
@ -21,6 +27,8 @@ const Sidebar = () => {
|
|||||||
<div className={classes.headerPlaceholder} />
|
<div className={classes.headerPlaceholder} />
|
||||||
Wop
|
Wop
|
||||||
</Drawer>
|
</Drawer>
|
||||||
|
{children}
|
||||||
|
</SidebarContext.Provider>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import { border } from '~/theme/variables'
|
|||||||
|
|
||||||
const style = {
|
const style = {
|
||||||
height: '100%',
|
height: '100%',
|
||||||
borderRight: `solid 1px ${border}`,
|
borderRight: `solid 2px ${border}`,
|
||||||
}
|
}
|
||||||
|
|
||||||
const Divider = () => <div style={style} />
|
const Divider = () => <div style={style} />
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
// @flow
|
// @flow
|
||||||
import React from 'react'
|
import * as React from 'react'
|
||||||
import Footer from '~/components/Footer'
|
import Footer from '~/components/Footer'
|
||||||
import Header from '~/components/Header'
|
import Header from '~/components/Header'
|
||||||
|
import SidebarProvider from '~/components/Sidebar'
|
||||||
import { SharedSnackbarProvider } from '~/components/SharedSnackBar'
|
import { SharedSnackbarProvider } from '~/components/SharedSnackBar'
|
||||||
import styles from './index.scss'
|
import styles from './index.scss'
|
||||||
|
|
||||||
@ -12,9 +13,11 @@ type Props = {
|
|||||||
const PageFrame = ({ children }: Props) => (
|
const PageFrame = ({ children }: Props) => (
|
||||||
<SharedSnackbarProvider>
|
<SharedSnackbarProvider>
|
||||||
<div className={styles.frame}>
|
<div className={styles.frame}>
|
||||||
|
<SidebarProvider>
|
||||||
<Header />
|
<Header />
|
||||||
{children}
|
{children}
|
||||||
<Footer />
|
<Footer />
|
||||||
|
</SidebarProvider>
|
||||||
</div>
|
</div>
|
||||||
</SharedSnackbarProvider>
|
</SharedSnackbarProvider>
|
||||||
)
|
)
|
||||||
|
@ -11,3 +11,8 @@ export const safesListSelector: Selector<GlobalState, {}, List<Safe>> = createSe
|
|||||||
safesMapSelector,
|
safesMapSelector,
|
||||||
(safes: Map<string, Safe>): List<Safe> => safes.toList(),
|
(safes: Map<string, Safe>): List<Safe> => safes.toList(),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
export const safesCountSelector: Selector<GlobalState, {}, number> = createSelector(
|
||||||
|
safesMapSelector,
|
||||||
|
(safes: Map<string, Safe>): number => safes.size,
|
||||||
|
)
|
@ -206,6 +206,11 @@ export default createMuiTheme({
|
|||||||
color: primary,
|
color: primary,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
MuiSvgIcon: {
|
||||||
|
colorSecondary: {
|
||||||
|
color: secondaryText,
|
||||||
|
}
|
||||||
|
},
|
||||||
MuiTab: {
|
MuiTab: {
|
||||||
root: {
|
root: {
|
||||||
fontFamily: 'Averta, monospace',
|
fontFamily: 'Averta, monospace',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user