new-marketplace
59 строк · 2.0 Кб
1'use client';
2import React, { useState, createContext } from 'react';
3import { LayoutState, ChildContainerProps, LayoutConfig, LayoutContextProps } from '@/types';
4export const LayoutContext = createContext({} as LayoutContextProps);
5
6export const LayoutProvider = ({ children }: ChildContainerProps) => {
7const [layoutConfig, setLayoutConfig] = useState<LayoutConfig>({
8ripple: false,
9inputStyle: 'outlined',
10menuMode: 'static',
11colorScheme: 'light',
12theme: 'lara-light-indigo',
13scale: 14
14});
15
16const [layoutState, setLayoutState] = useState<LayoutState>({
17staticMenuDesktopInactive: false,
18overlayMenuActive: false,
19profileSidebarVisible: false,
20configSidebarVisible: false,
21staticMenuMobileActive: false,
22menuHoverActive: false
23});
24
25const onMenuToggle = () => {
26if (isOverlay()) {
27setLayoutState((prevLayoutState) => ({ ...prevLayoutState, overlayMenuActive: !prevLayoutState.overlayMenuActive }));
28}
29
30if (isDesktop()) {
31setLayoutState((prevLayoutState) => ({ ...prevLayoutState, staticMenuDesktopInactive: !prevLayoutState.staticMenuDesktopInactive }));
32} else {
33setLayoutState((prevLayoutState) => ({ ...prevLayoutState, staticMenuMobileActive: !prevLayoutState.staticMenuMobileActive }));
34}
35};
36
37const showProfileSidebar = () => {
38setLayoutState((prevLayoutState) => ({ ...prevLayoutState, profileSidebarVisible: !prevLayoutState.profileSidebarVisible }));
39};
40
41const isOverlay = () => {
42return layoutConfig.menuMode === 'overlay';
43};
44
45const isDesktop = () => {
46return window.innerWidth > 991;
47};
48
49const value: LayoutContextProps = {
50layoutConfig,
51setLayoutConfig,
52layoutState,
53setLayoutState,
54onMenuToggle,
55showProfileSidebar
56};
57
58return <LayoutContext.Provider value={value}>{children}</LayoutContext.Provider>;
59};
60