summaryrefslogtreecommitdiffstats
path: root/front/odiparpack/app/containers/App/ThemeWrapper.js
blob: f39945f47e5c9a4c9d4d95e2643065e6a4668071 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import React, { useState, useEffect } from 'react';
import { PropTypes } from 'prop-types';
import { connect } from 'react-redux';
import Loading from 'react-loading-bar';
import { bindActionCreators } from 'redux';
import {
  withStyles,
  createMuiTheme,
  MuiThemeProvider
} from '@material-ui/core/styles';
import 'ba-styles/vendors/react-loading-bar/index.css';
import { changeThemeAction } from 'ba-actions/UiActions';
import themePallete from 'ba-api/themePalette';
import TemplateSettings from 'ba-components/TemplateSettings';
//import { Button, Icon } from '@material-ui/core';
import styles from '../Templates/appStyles-jss';
import { esES } from '@material-ui/core/locale';

function ThemeWrapper(props) {
  const {
    classes,
    children,
    palette,
    color,
    changeTheme
  } = props;

  const [pageLoaded, setPageLoaded] = useState(true);
  const [open, setOpen] = useState(false);
  const [newPalette, setNewPalette] = useState(undefined);
  const [theme, setTheme] = useState(
    createMuiTheme(themePallete(color),esES)
  );

  useEffect(() => {
    setNewPalette(palette);
    setPageLoaded(true);
    setTimeout(() => {
      setPageLoaded(false);
    }, 500);
    return () => {
      setPageLoaded(true);
    };
  }, []);

  const handleOpenPallete = () => {
    setOpen(true);
  };

  const handleClose = () => {
    setOpen(false);
  };

  const handleChangeTheme = event => {
    setTheme(createMuiTheme(themePallete(event.target.value),esES));
    changeTheme(event.target.value);
  };

  return (
    <MuiThemeProvider theme={theme}>
      
      <div className={classes.root}>
        <Loading
          show={pageLoaded}
          color="rgba(255,255,255,.9)"
          showSpinner={false}
        />
        {/* <Button onClick={handleOpenPallete} className={classes.btnPicker}>
          <span className={classes.btn}>
            <Icon className={classes.icon}>palette</Icon>
            Theme
          </span>
        </Button> */}
        <TemplateSettings
          open={open}
          palette={newPalette}
          changeTheme={handleChangeTheme}
          selectedValue={color}
          close={handleClose}
        />
        {children}
      </div>
    </MuiThemeProvider>
  );
}

ThemeWrapper.propTypes = {
  classes: PropTypes.object.isRequired,
  children: PropTypes.node.isRequired,
  color: PropTypes.string.isRequired,
  changeTheme: PropTypes.func.isRequired,
  palette: PropTypes.object.isRequired,
};

const reducer = 'ui';
const mapStateToProps = state => ({
  ...state,
  color: state.getIn([reducer, 'theme']),
  palette: state.getIn([reducer, 'palette']),
});

const dispatchToProps = dispatch => ({
  changeTheme: bindActionCreators(changeThemeAction, dispatch),
});

const ThemeWrapperMapped = connect(
  mapStateToProps,
  dispatchToProps
)(ThemeWrapper);

export default withStyles(styles)(ThemeWrapperMapped);