Sliding pane component used for react, providing the following features:
- Stack panes in top of each other
- Open a pane side by side
- Open a pane in fullscreen mode
npm install @unparallel/react-sliding-panes
Basic usage example showing all the features
import {Pane, PaneManager, PaneManagerControls, ViewMode} from "@unparallel/react-sliding-panes";
import "@unparallel/react-sliding-panes/dist/main.css";
interface SideContentProps {
title: string,
paneManagerControls:PaneManagerControls
}
interface ContentProps {
title: string,
paneManagerControls:PaneManagerControls
}
function SideContent({paneManagerControls, title}:SideContentProps){
const {closeSidePane} = paneManagerControls
return (
(
<div>
<h1>{title}</h1>
<button onClick={closeSidePane}>Close</button>
</div>
)
)
}
function Content({title,paneManagerControls}:ContentProps){
const {setSidePane, closeSidePane,addPane,closeLastPane} = paneManagerControls
function setSidePaneBtn(){
setSidePane({content:()=><SideContent title={"Side Content"} paneManagerControls={paneManagerControls} />,shouldClose:()=>confirm("Should close side pane?")})
}
function openNewPane(){
addPane({content:()=><Content title={"Other panes"} paneManagerControls={paneManagerControls} />,shouldClose:()=>confirm("Should close pane?")})
}
function openNewPaneAsFullscreen(){
addPane({content:()=><Content title={"Second Pane as fullscreen"} paneManagerControls={paneManagerControls} />,viewMode:ViewMode.FullScreen,shouldClose:()=>confirm("Should close pane?")})
}
return(
<div>
<h1>{title}</h1>
<button onClick={()=>closeLastPane()}>Close Pane</button>
<button onClick={()=>closeSidePane()}>Close side Pane</button>
<button onClick={()=>setSidePaneBtn()}>Set side pane</button>
<button onClick={()=>openNewPane()}>Open new pane</button>
<button onClick={()=>openNewPaneAsFullscreen()}>Open new pane as fullscreen</button>
</div>
)
}
export const Main = function(){
const pane:Pane = {
content:((paneManagerControls) =><Content title={"First Pane"} paneManagerControls={paneManagerControls}/> ),shouldClose:()=>confirm("Should close pane?")
}
return (
<PaneManager>
{(paneManagerControls)=>(
<div>
<h1>Root Content</h1>
<button onClick={()=>{paneManagerControls.addPane(pane)}}>Add first pane</button>
</div>
)}
</PaneManager>
)
}
Wrapper component which will provide the "paneManagerControls" object containing methods required to open and close panes
Name | Type | is Optional | Default Value | Description |
---|---|---|---|---|
children | (paneManagerControls: PaneManagerControls)=>React.ReactNode | no | Render of Pane Manager root content, the object "paneManagerControls" is provided and could be used to launch new panes | |
minPaneDistance | number | yes | 10 | Minimum distance (in px) between panes |
maxPaneDistance | number | yes | 200 | Maximum distance (in px) between panes |
paneWidth | number | yes | 300 | Width for each pane |
timeoutMS | number | yes | 500 | Duration of the animation during pane opening, close and adjustment |
baseZIndex | number | yes | 2000 | Where the z index should start, defining this value could be required ensure that pane manager is rendered as the last layer |
paneStartPadding | number | yes | 0 | X position of the first pane |
paneClassName | string | yes | null | Custom classname for sliding pane container |
paneBackgroundClassName | string | yes | null | Custom classname for sliding pane background |
paneContentClassName | string | yes | null | Custom classname for sliding pane content |
onPaneClose | (index:number)=>void | yes | null | Event fired after closing the pane |
paneWillClose | (index: number)=>void | yes | null | Event fired before closing a pane |
onPaneOpen | (index: number, pane:Pane)=>void | yes | null | Event fired after open the pane |
onSidePaneOpen | (paneIndex: number, sidePane:SidePane)=>void | yes | null | Event fired after opened the side pane |
Object containing several methods to control the behaviour of the Pane manager
Name | Type | Description |
---|---|---|
addPane | (pane:Pane)=>void | Used to add a new pane |
closeLastPane | ()=>void | Close the last pane |
closePane | (index: number)=>void | Close a specific pane |
setSidePane | (sidePane: SidePane)=>void | Add a side pane to the last pane |
closeSidePane | ()=>void | Close side pane |
updateLastPaneProps | (props:object)=>void | Update props sent to the last pane, this update will re fire a render of the pane content |
updateSidePaneProps | (props:object)=>void | Update props sent to the side pane, this update will re fire a render of the side pane content |
compressPanes | ()=>void | Forces all panes to collapses until the meet the "minPaneDistance" regarding its distance |
decompressPanes | ()=>void | Set panes distance to their default distance |
getPaneCount | ()=>number or null | Number of panes stacked on the pane manager |
Object describing a pane
Name | Type | is Optional | Default Value | Description |
---|---|---|---|---|
content | (paneManagerControls: PaneManagerControls, props: object)=>React.ReactNode | no | null | Content of the new pane, a "paneManagerControls" object will be sent to the content |
viewMode | ViewMode | yes | ViewMode.Default | View mode of the new pane, allowed options ViewMode.Default or ViewMode.Fullscreen |
shouldClose | ()=>boolean | yes | ()=>true | Confirmation step before closing the pane |
onClose | ()=>void | yes | Fired after closing the pane | |
willClose | ()=>void | yes | Fired before closing the pane | |
props | object | yes | Properties object sent on the content method |
Object describing a side pane
Name | Type | is Optional | Default Value | Description |
---|---|---|---|---|
content | (paneManagerControls)=>React.ReactNode | no | null | Content of the new pane, a "paneManagerControls" object is sent to the content |
shouldClose | ()=>boolean | yes | ()=>true | Confirmation step before closing the pane |
onClose | ()=>void | yes | Fired after closing the side pane | |
willClose | ()=>void | yes | Fired before closing the side pane | |
props | object | yes | Properties object sent on the content method |
npm install
npm start