2020-10-16 13:16:01 +00:00
|
|
|
import React from "react";
|
|
|
|
import PropTypes from "prop-types";
|
2021-02-20 14:54:12 +00:00
|
|
|
import styled from "styled-components";
|
2019-07-22 14:48:06 +00:00
|
|
|
|
2021-02-04 14:54:32 +00:00
|
|
|
import { ArrowContentIcon } from "./svg";
|
|
|
|
import Heading from "../heading";
|
|
|
|
import { StyledContent, StyledContainer } from "./styled-toggle-content";
|
2021-02-25 12:16:52 +00:00
|
|
|
import commonIconsStyles from "../utils/common-icons-style";
|
2019-07-22 14:48:06 +00:00
|
|
|
|
2021-02-20 14:54:12 +00:00
|
|
|
const StyledArrowContentIcon = styled(ArrowContentIcon)`
|
|
|
|
${commonIconsStyles}
|
|
|
|
`;
|
2019-12-03 13:50:14 +00:00
|
|
|
// eslint-disable-next-line react/prop-types, no-unused-vars
|
2019-07-22 14:48:06 +00:00
|
|
|
class ToggleContent extends React.Component {
|
2019-07-22 15:39:53 +00:00
|
|
|
constructor(props) {
|
|
|
|
super(props);
|
2019-07-22 14:48:06 +00:00
|
|
|
|
2020-01-13 16:01:09 +00:00
|
|
|
const { isOpen } = props;
|
|
|
|
|
2019-07-22 14:48:06 +00:00
|
|
|
this.state = {
|
2020-10-16 13:16:01 +00:00
|
|
|
isOpen,
|
2019-07-22 14:48:06 +00:00
|
|
|
};
|
|
|
|
}
|
|
|
|
|
2020-01-13 16:01:09 +00:00
|
|
|
toggleContent = () => this.setState({ isOpen: !this.state.isOpen });
|
2019-07-22 14:48:06 +00:00
|
|
|
|
2019-07-22 15:39:53 +00:00
|
|
|
componentDidUpdate(prevProps) {
|
2020-01-13 16:01:09 +00:00
|
|
|
const { isOpen } = this.props;
|
|
|
|
if (isOpen !== prevProps.isOpen) {
|
|
|
|
this.setState({ isOpen });
|
2019-07-22 15:39:53 +00:00
|
|
|
}
|
2019-09-10 07:03:36 +00:00
|
|
|
}
|
2019-07-22 15:39:53 +00:00
|
|
|
|
2019-07-22 14:48:06 +00:00
|
|
|
render() {
|
2020-01-13 16:01:09 +00:00
|
|
|
// console.log("ToggleContent render");
|
|
|
|
|
2020-10-16 13:16:01 +00:00
|
|
|
const { children, className, id, label, style } = this.props;
|
2020-01-13 16:01:09 +00:00
|
|
|
|
|
|
|
const { isOpen } = this.state;
|
|
|
|
|
2019-07-22 14:48:06 +00:00
|
|
|
return (
|
2021-02-04 14:54:32 +00:00
|
|
|
<StyledContainer
|
|
|
|
className={className}
|
|
|
|
isOpen={isOpen}
|
|
|
|
id={id}
|
|
|
|
style={style}
|
|
|
|
>
|
2020-10-16 13:16:01 +00:00
|
|
|
<span className="span-toggle-content" onClick={this.toggleContent}>
|
2021-02-20 14:54:12 +00:00
|
|
|
<StyledArrowContentIcon
|
|
|
|
className="arrow-toggle-content"
|
|
|
|
size="medium"
|
|
|
|
/>
|
2020-10-16 13:16:01 +00:00
|
|
|
<Heading
|
|
|
|
className="heading-toggle-content"
|
|
|
|
level={2}
|
|
|
|
size="small"
|
|
|
|
isInline={true}
|
|
|
|
>
|
|
|
|
{label}
|
|
|
|
</Heading>
|
2020-01-13 16:01:09 +00:00
|
|
|
</span>
|
|
|
|
<StyledContent isOpen={isOpen}>{children}</StyledContent>
|
|
|
|
</StyledContainer>
|
2020-10-16 13:16:01 +00:00
|
|
|
);
|
2019-07-22 14:48:06 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-07-22 15:39:53 +00:00
|
|
|
ToggleContent.propTypes = {
|
2019-12-03 13:50:14 +00:00
|
|
|
children: PropTypes.any,
|
2021-03-11 22:51:58 +00:00
|
|
|
/** Accepts class */
|
2020-01-13 16:01:09 +00:00
|
|
|
className: PropTypes.string,
|
2021-03-11 22:51:58 +00:00
|
|
|
/** Accepts id */
|
2019-12-03 13:50:14 +00:00
|
|
|
id: PropTypes.string,
|
2021-03-11 22:51:58 +00:00
|
|
|
/** State of component */
|
2020-01-13 16:01:09 +00:00
|
|
|
isOpen: PropTypes.bool,
|
2021-03-11 22:51:58 +00:00
|
|
|
/** Define label for header */
|
2020-01-13 16:01:09 +00:00
|
|
|
label: PropTypes.string.isRequired,
|
|
|
|
onChange: PropTypes.func,
|
2021-03-11 22:51:58 +00:00
|
|
|
/** Accepts css style */
|
2020-10-16 13:16:01 +00:00
|
|
|
style: PropTypes.oneOfType([PropTypes.object, PropTypes.array]),
|
|
|
|
};
|
2019-07-22 15:39:53 +00:00
|
|
|
|
2019-07-22 14:48:06 +00:00
|
|
|
ToggleContent.defaultProps = {
|
2019-07-22 15:39:53 +00:00
|
|
|
isOpen: false,
|
2020-10-16 13:16:01 +00:00
|
|
|
label: "",
|
|
|
|
};
|
2019-07-22 14:48:06 +00:00
|
|
|
|
|
|
|
export default ToggleContent;
|