Passed
Push — master ( 4762c7...2b838c )
by Guangyu
08:55
created

src/Main.js   A

Complexity

Total Complexity 2
Complexity/F 0

Size

Lines of Code 114
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 2
eloc 98
mnd 2
bc 2
fnc 0
dl 0
loc 114
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
rs 10
1
import React, { useState, useEffect } from 'react';
2
import PropTypes from 'prop-types';
3
import AppContext from './context/Context';
4
import toggleStylesheet from './helpers/toggleStylesheet';
5
import { getItemFromStore, setItemToStore, themeColors } from './helpers/utils';
6
import i18n from "i18next";
7
8
const Main = props => {
9
  const [isFluid, setIsFluid] = useState(getItemFromStore('isFluid', true));
10
  const [isRTL, setIsRTL] = useState(getItemFromStore('isRTL', false));
11
  const [isDark, setIsDark] = useState(getItemFromStore('isDark', true));
12
  const [isTopNav, setIsTopNav] = useState(getItemFromStore('isTopNav', true));
13
  const [isNavbarVerticalCollapsed, setIsNavbarVerticalCollapsed] = useState(
14
    getItemFromStore('isNavbarVerticalCollapsed', false)
15
  );
16
  const [currency, setCurrency] = useState('$');
17
  const [showBurgerMenu, setShowBurgerMenu] = useState(false);
18
  const [isLoaded, setIsLoaded] = useState(false);
19
  const [isOpenSidePanel, setIsOpenSidePanel] = useState(false);
20
  const [navbarStyle, setNavbarStyle] = useState(getItemFromStore('navbarStyle', 'vibrant'));
21
  const [language, setLanguage] = useState(getItemFromStore('language', 'zh_cn'));
22
23
  const toggleModal = () => setIsOpenSidePanel(prevIsOpenSidePanel => !prevIsOpenSidePanel);
24
25
  const value = {
26
    isRTL,
27
    isDark,
28
    isFluid,
29
    setIsRTL,
30
    isTopNav,
31
    currency,
32
    setIsDark,
33
    setIsFluid,
34
    toggleModal,
35
    setIsTopNav,
36
    navbarStyle,
37
    setCurrency,
38
    showBurgerMenu,
39
    setNavbarStyle,
40
    language,
41
    setLanguage,
42
    isOpenSidePanel,
43
    setShowBurgerMenu,
44
    setIsOpenSidePanel,
45
    isNavbarVerticalCollapsed,
46
    setIsNavbarVerticalCollapsed
47
  };
48
49
  const setStylesheetMode = mode => {
50
    setIsLoaded(false);
51
    setItemToStore(mode, value[mode]);
52
    toggleStylesheet({ isRTL, isDark }, () => setIsLoaded(true));
53
  };
54
55
  useEffect(() => {
56
    setStylesheetMode('isFluid');
57
    // eslint-disable-next-line
58
  }, [isFluid]);
59
60
  useEffect(() => {
61
    setStylesheetMode('isRTL');
62
    // eslint-disable-next-line
63
  }, [isRTL]);
64
65
  useEffect(() => {
66
    setStylesheetMode('isDark');
67
    // eslint-disable-next-line
68
  }, [isDark]);
69
70
  useEffect(() => {
71
    setItemToStore('isNavbarVerticalCollapsed', isNavbarVerticalCollapsed);
72
    // eslint-disable-next-line
73
  }, [isNavbarVerticalCollapsed]);
74
75
  useEffect(() => {
76
    setItemToStore('isTopNav', isTopNav);
77
    // eslint-disable-next-line
78
  }, [isTopNav]);
79
80
  useEffect(() => {
81
    setItemToStore('navbarStyle', navbarStyle);
82
    // eslint-disable-next-line
83
  }, [navbarStyle]);
84
85
  useEffect(() => {
86
    setItemToStore('language', language);
87
    i18n.changeLanguage(language)
88
    // eslint-disable-next-line
89
  }, [language]);
90
91
  if (!isLoaded) {
92
    toggleStylesheet({ isRTL, isDark }, () => setIsLoaded(true));
93
94
    return (
95
      <div
96
        style={{
97
          position: 'fixed',
98
          top: 0,
99
          right: 0,
100
          bottom: 0,
101
          left: 0,
102
          backgroundColor: isDark ? themeColors.dark : themeColors.light
103
        }}
104
      />
105
    );
106
  }
107
108
  return <AppContext.Provider value={value}>{props.children}</AppContext.Provider>;
109
};
110
111
Main.propTypes = { children: PropTypes.node };
112
113
export default Main;
114