All Downloads are FREE. Search and download functionalities are using the official Maven repository.

contexts.SidebarContext.tsx Maven / Gradle / Ivy

import { useSidebarContext } from 'hooks/sidebar';
import { Function0 } from 'lodash';
import React, { createContext } from 'react';

type SidebarType = "sidebar" | "menu" | "overlay"

interface SidebarContextProps {
  level: number,
  handleMenuClose: Function0,
  sidebarType: SidebarType,
  filter?: string
}

interface SidebarProviderProps extends SidebarContextProps {
  children: React.ReactElement,
  addLevel: boolean,
  reset?: boolean
}

interface PartialSidebarProviderProps extends Partial {}

export const defaultContext: SidebarContextProps = {level: 0, handleMenuClose: () => {}, sidebarType: "sidebar"}
export const SidebarContext = createContext(defaultContext);

const SidebarContextProvider = ({children, addLevel, reset, ...context}: PartialSidebarProviderProps)  => {
  const ctx             = useSidebarContext()  
  const currentLevel    = context?.level != undefined ? context.level : (ctx?.level != undefined ? ctx.level : undefined)
  const level           = currentLevel != undefined ? (addLevel == true ? currentLevel + 1 : currentLevel) : 0
  const handleMenuClose = () => { ctx.handleMenuClose(); context.handleMenuClose?.(); }

  const value = reset 
    ? defaultContext
    : {
      ...ctx, 
      ...context, 
      level, 
      handleMenuClose,
      reset: false
    }

  return (
    
      {children}
    
  )
 
}

export default SidebarContextProvider;




© 2015 - 2024 Weber Informatics LLC | Privacy Policy