Skip to content

Commit 0d24e60

Browse files
committed
collapse component
1 parent c68ae3f commit 0d24e60

File tree

4 files changed

+74
-2
lines changed

4 files changed

+74
-2
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import React, { useState, useEffect } from 'react';
2+
import { bool, node, string } from 'prop-types';
3+
4+
import styles from './Collapse.module.scss';
5+
6+
const Collapse = ({ title, children, collapsed: beginCollapsed }) => {
7+
const [collapsed, setCollapsed] = useState(beginCollapsed);
8+
const toggleCollapse = () => setCollapsed(!collapsed);
9+
10+
useEffect(() => {
11+
setCollapsed(beginCollapsed);
12+
}, [beginCollapsed]);
13+
14+
return (
15+
<div>
16+
<button type="button" className={styles.button} onClick={toggleCollapse}>
17+
<div>
18+
{title}
19+
</div>
20+
<div className={styles.right}>
21+
{collapsed ? '+' : '-'}
22+
</div>
23+
</button>
24+
{collapsed ? null : children}
25+
</div>
26+
);
27+
};
28+
29+
Collapse.propTypes = {
30+
title: string.isRequired,
31+
children: node.isRequired,
32+
collapsed: bool,
33+
};
34+
35+
Collapse.defaultProps = {
36+
collapsed: true,
37+
};
38+
39+
export default Collapse;
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
.button {
2+
background-color: #8f8f8f;
3+
color: #ffffff;
4+
font-size: 1rem;
5+
width: 100%;
6+
7+
display: flex;
8+
justify-content: space-between;
9+
border: none;
10+
cursor: pointer;
11+
12+
padding-bottom: 0.5rem;
13+
padding-top: 0.5rem;
14+
padding-left: 1rem;
15+
padding-right: 1rem;
16+
17+
margin-bottom: 0.2rem;
18+
}
19+
20+
.button:hover {
21+
background-color: #707070;
22+
}
23+
24+
.right {
25+
font-weight: bold;
26+
}

src/components/Collapse/index.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import Collapse from './Collapse';
2+
3+
export default Collapse;

src/index.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import Alignment from './components/Alignment';
2-
import Sentence from './components/Alignment/Sentence';
2+
import Collapse from './components/Collapse';
33
import Segment from './components/Alignment/Segment';
4+
import Sentence from './components/Alignment/Sentence';
45

56
export {
6-
Alignment, Sentence, Segment,
7+
Alignment,
8+
Collapse,
9+
Segment,
10+
Sentence,
711
};

0 commit comments

Comments
 (0)