1
|
|
|
import React, { Fragment, useState } from 'react'; |
2
|
|
|
import PropTypes from 'prop-types'; |
3
|
|
|
import { isIterableArray } from '../../helpers/utils'; |
4
|
|
|
import { Card, CardBody, Collapse } from 'reactstrap'; |
5
|
|
|
import FalconCardHeader from '../common/FalconCardHeader'; |
6
|
|
|
import ExperienceSummary from './ExperienceSummary'; |
7
|
|
|
import classNames from 'classnames'; |
8
|
|
|
import Loader from '../common/Loader'; |
9
|
|
|
import ExperienceForm from './ExperienceForm'; |
10
|
|
|
import Flex from '../common/Flex'; |
11
|
|
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; |
12
|
|
|
import useFakeFetch from '../../hooks/useFakeFetch'; |
13
|
|
|
|
14
|
|
|
const Experience = ({ experiences: rawExperiences, isEditable, isOpen, ...rest }) => { |
15
|
|
|
// Data |
16
|
|
|
const { loading: loadingExperiences, data: experiences, setData: setExperiences } = useFakeFetch(rawExperiences); |
17
|
|
|
|
18
|
|
|
const [collapse, setCollapse] = useState(isOpen); |
19
|
|
|
|
20
|
|
|
return ( |
21
|
|
|
<Card {...rest}> |
22
|
|
|
<FalconCardHeader title="Experience" light={!isEditable} /> |
23
|
|
|
<CardBody className={classNames('fs--1', { 'bg-light': isEditable })}> |
24
|
|
|
{isEditable && ( |
25
|
|
|
<Fragment> |
26
|
|
|
<Flex |
27
|
|
|
align="center" |
28
|
|
|
className="mb-4 text-primary cursor-pointer fs-0" |
29
|
|
|
id="togglerAddExperience" |
30
|
|
|
onClick={() => { |
31
|
|
|
setCollapse(!collapse); |
32
|
|
|
}} |
33
|
|
|
> |
34
|
|
|
<span className="circle-dashed"> |
35
|
|
|
<FontAwesomeIcon icon="plus" /> |
36
|
|
|
</span> |
37
|
|
|
<span className="ml-3">Add new experience</span> |
38
|
|
|
</Flex> |
39
|
|
|
<Collapse toggler="#togglerAddExperience" isOpen={collapse}> |
40
|
|
|
<ExperienceForm experiences={experiences} setExperiences={setExperiences} /> |
41
|
|
|
<hr className="border-dashed border-bottom-0 my-4" /> |
42
|
|
|
</Collapse> |
43
|
|
|
</Fragment> |
44
|
|
|
)} |
45
|
|
|
{loadingExperiences ? ( |
46
|
|
|
<Loader /> |
47
|
|
|
) : ( |
48
|
|
|
isIterableArray(experiences) && |
49
|
|
|
experiences.map((experience, index) => ( |
50
|
|
|
<ExperienceSummary {...experience} isEditable={isEditable} key={index} /> |
51
|
|
|
)) |
52
|
|
|
)} |
53
|
|
|
</CardBody> |
54
|
|
|
</Card> |
55
|
|
|
); |
56
|
|
|
}; |
57
|
|
|
|
58
|
|
|
Experience.propTypes = { |
59
|
|
|
experiences: PropTypes.array, |
60
|
|
|
isEditable: PropTypes.bool, |
61
|
|
|
isOpen: PropTypes.bool |
62
|
|
|
}; |
63
|
|
|
|
64
|
|
|
Experience.defaultProps = { isEditable: false, isOpen: false }; |
65
|
|
|
|
66
|
|
|
export default Experience; |
67
|
|
|
|