-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathMainCard.jsx
More file actions
135 lines (117 loc) · 3.98 KB
/
Copy pathMainCard.jsx
File metadata and controls
135 lines (117 loc) · 3.98 KB
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
import PropTypes from 'prop-types';
import { useState } from 'react';
// react-bootstrap
import { Dropdown, Card, Collapse } from 'react-bootstrap';
// third party
import { Link } from 'react-router-dom';
// project imports
import useWindowSize from 'hooks/useWindowSize';
// -----------------------|| MAIN CARD ||-----------------------//
export default function MainCard({ isOption, title, children, cardClass, optionClass, CardBodyClass }) {
const [fullCard, setFullCard] = useState(false);
const [collapseCard, setCollapseCard] = useState(false);
const [loadCard, setloadCard] = useState(false);
const [cardRemove, setCardRemove] = useState(false);
const windowSize = useWindowSize();
const cardReloadHandler = () => {
setloadCard(true);
setInterval(() => {
setloadCard(false);
}, 3000);
};
const cardRemoveHandler = () => {
setCardRemove(true);
};
let loader;
let cardHeaderRight = <></>;
let cardHeader = <></>;
let mainCardClass = [];
let mainCardBodyClass = [];
if (isOption) {
cardHeaderRight = (
<div className={`card-header-right ${optionClass}`}>
<Dropdown align="end" className="btn-group card-option">
<Dropdown.Toggle id="dropdown-basic" className="btn-icon">
<i className="feather icon-more-horizontal" title="More" />
</Dropdown.Toggle>
<Dropdown.Menu as="ul" className="list-unstyled card-option">
<Dropdown.Item as="li" className="dropdown-item" onClick={() => setFullCard(!fullCard)}>
<i className={fullCard ? 'feather icon-minimize' : 'feather icon-maximize'} />
<Link to="#"> {fullCard ? 'Restore' : 'Maximize'} </Link>
</Dropdown.Item>
<Dropdown.Item as="li" className="dropdown-item" onClick={() => setCollapseCard(!collapseCard)}>
<i className={collapseCard ? 'feather icon-plus' : 'feather icon-minus'} />
<Link to="#"> {collapseCard ? 'Expand' : 'Collapse'} </Link>
</Dropdown.Item>
<Dropdown.Item as="li" className="dropdown-item" onClick={cardReloadHandler}>
<i className="feather icon-refresh-cw" />
<Link to="#"> Reload </Link>
</Dropdown.Item>
<Dropdown.Item as="li" className="dropdown-item" onClick={cardRemoveHandler}>
<i className="feather icon-trash" />
<Link to="#"> Remove </Link>
</Dropdown.Item>
</Dropdown.Menu>
</Dropdown>
</div>
);
}
cardHeader = (
<Card.Header>
<Card.Title as="h5">{title}</Card.Title>
{cardHeaderRight}
</Card.Header>
);
if (fullCard) {
mainCardClass = [...mainCardClass, 'full-card'];
}
if (loadCard) {
mainCardClass = [...mainCardClass, 'card-load'];
loader = (
<div className="card-loader">
<i className="pct-loader1 anim-rotate" />
</div>
);
}
if (cardRemove) {
mainCardClass = [...mainCardClass, 'd-none'];
}
if (cardClass) {
mainCardClass = [...mainCardClass, cardClass];
}
if (CardBodyClass) {
mainCardBodyClass = [...mainCardBodyClass, CardBodyClass];
}
return fullCard ? (
<Card
className={mainCardClass.join(' ')}
style={{ position: 'fixed', top: 0, left: 0, right: 0, width: windowSize.width, height: windowSize.height }}
>
{cardHeader}
<Collapse in={!collapseCard}>
<div>
<Card.Body className={mainCardBodyClass.join(' ')}>{children}</Card.Body>
</div>
</Collapse>
{loader}
</Card>
) : (
<Card className={mainCardClass.join(' ')}>
{cardHeader}
<Collapse in={!collapseCard}>
<div>
<Card.Body className={mainCardBodyClass.join(' ')}>{children}</Card.Body>
</div>
</Collapse>
{loader}
</Card>
);
}
MainCard.propTypes = {
isOption: PropTypes.bool,
title: PropTypes.string,
children: PropTypes.node,
cardClass: PropTypes.string,
optionClass: PropTypes.string,
CardBodyClass: PropTypes.string
};