@trend/layout
v0.5.0
Published
Layout state manager for TREND applications using TREND Components.
Maintainers
Readme
Layout
TREND Components layout manager for handling global state. Main use case is for handling Drawer (Overlay) state from another component in the tree.
Installation
## Has peer dependency with react and react-dom
npm install react react-dom
npm install @trend/layoutBasic Usage
With a module bundler like webpack, use as you would anything else:
// Import main Layout provider.
import Layout from '@trend/layout';
// Import layout context.
import { LayoutContext } from '@trend/layout';
// Import higher-order component layout consumer.
import { withLayoutConsumer } from '@trend/layout';Layout Provider
Wrap a TREND application with the main provider near the top of the render tree.
import Layout from '@trend/layout';
function App() {
return <Layout>
{...}
</Layout>
}withLayoutConsumer
Use withLayoutConsumer higher-order component to gain access to layout state.
import { withLayoutConsumer } from '@trend/layout';
function Button({ layout, ...props }) {
return <button onClick={layout.toggleDrawer} type="button">
Menu button
</button>
}
export default withLayoutConsumer(Button);Layout Prop
The consumer will pass in a layout object as a prop to the wrapped component from the withLayoutConsumer higher-order component.
Prop | Type | Description
--- | --- | ---
hasActiveDrawer | Boolean | Maintains the current state of Drawer.
toggleDrawer | Function | Toggles the state of hasActiveDrawer.
hideDrawer | Function | Turns off hasActiveDrawer.
showDrawer | Function | Turns on hasActiveDrawer.
Example
import { OverlayDrawer as Drawer } from '@trend/drawer';
import Topbar from '@trend/topbar';
import Layout, { withLayoutConsumer } from '@trend/layout';
function Button({ layout, ...props }) {
return <button onClick={layout.toggleDrawer} type="button">
Menu button
</button>
}
const EnhancedButton = withLayoutConsumer(Button);
function AppDrawer({ layout }) {
return <Drawer open={layout.hasActiveDrawer} onToggle={layout.toggleDrawer}>
{api => (...)}
</Drawer>
}
const EnhancedDrawer = withLayoutConsumer(AppDrawer);
function App() {
return <Layout>
<Topbar fixed>
{api => (
<EnhancedMenuButton {...api.getIconProps()} />
)}
</Topbar>
<EnhancedDrawer />
</Layout>;
}