2021-02-16 10:29:08 +00:00
|
|
|
import React from "react";
|
2023-01-13 11:05:59 +00:00
|
|
|
import styled from "styled-components";
|
2023-05-19 18:37:06 +00:00
|
|
|
import { Collapse } from "@blueprintjs/core";
|
|
|
|
|
import { Icon } from "design-system";
|
2021-02-16 10:29:08 +00:00
|
|
|
|
|
|
|
|
const CollapseWrapper = styled.div`
|
|
|
|
|
position: relative;
|
|
|
|
|
.collapse-title {
|
2023-05-19 18:37:06 +00:00
|
|
|
color: var(--ads-v2-color-fg);
|
2021-02-16 10:29:08 +00:00
|
|
|
letter-spacing: 0.04em;
|
|
|
|
|
font-weight: 500;
|
|
|
|
|
font-size: 12px;
|
|
|
|
|
line-height: 16px;
|
|
|
|
|
display: flex;
|
2022-05-25 11:28:30 +00:00
|
|
|
align-items: center;
|
|
|
|
|
gap: 8px;
|
2021-07-07 03:46:16 +00:00
|
|
|
cursor: pointer;
|
2021-02-16 10:29:08 +00:00
|
|
|
.icon {
|
|
|
|
|
transition: transform 0.3s;
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
&.collapse {
|
2023-05-19 18:37:06 +00:00
|
|
|
transform: rotate(-180deg);
|
2021-02-16 10:29:08 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
2021-07-07 03:46:16 +00:00
|
|
|
&& .bp3-collapse-body {
|
|
|
|
|
position: relative;
|
|
|
|
|
border: none;
|
|
|
|
|
box-shadow: none;
|
|
|
|
|
padding: 0;
|
2021-02-16 10:29:08 +00:00
|
|
|
}
|
|
|
|
|
`;
|
|
|
|
|
|
2021-04-28 10:28:39 +00:00
|
|
|
function CollapseComponent(props: {
|
2021-02-16 10:29:08 +00:00
|
|
|
children?: React.ReactNode;
|
2023-04-06 07:31:01 +00:00
|
|
|
openTitle?: string;
|
2021-02-16 10:29:08 +00:00
|
|
|
title?: string;
|
|
|
|
|
isOpen?: boolean;
|
2021-07-29 08:13:10 +00:00
|
|
|
titleStyle?: React.CSSProperties;
|
2021-04-28 10:28:39 +00:00
|
|
|
}) {
|
2021-07-07 03:46:16 +00:00
|
|
|
const [open, toggleOpen] = React.useState(false);
|
2021-02-16 10:29:08 +00:00
|
|
|
const handleIsOpen = () => {
|
|
|
|
|
toggleOpen(!open);
|
|
|
|
|
};
|
|
|
|
|
if (!props.title) {
|
|
|
|
|
return <div>{props.children ? props.children : null}</div>;
|
|
|
|
|
}
|
|
|
|
|
return (
|
|
|
|
|
<CollapseWrapper>
|
2021-07-29 08:13:10 +00:00
|
|
|
<div
|
|
|
|
|
className="collapse-title"
|
2022-06-16 06:18:44 +00:00
|
|
|
data-testid="datasource-collapse-wrapper"
|
2021-07-29 08:13:10 +00:00
|
|
|
onClick={handleIsOpen}
|
|
|
|
|
style={props.titleStyle}
|
|
|
|
|
>
|
2023-04-06 07:31:01 +00:00
|
|
|
{open && props.openTitle ? props.openTitle : props.title}
|
2021-02-16 10:29:08 +00:00
|
|
|
<Icon
|
2022-05-25 11:28:30 +00:00
|
|
|
className={`icon ${open ? "collapse" : ""}`}
|
2022-06-16 06:18:44 +00:00
|
|
|
data-testid="datasource-collapse-icon"
|
2023-05-19 18:37:06 +00:00
|
|
|
name="down-arrow"
|
|
|
|
|
size="sm"
|
2021-02-16 10:29:08 +00:00
|
|
|
/>
|
|
|
|
|
</div>
|
|
|
|
|
<Collapse isOpen={open} keepChildrenMounted>
|
|
|
|
|
<div className="inner-content">
|
|
|
|
|
{props.children ? props.children : null}
|
|
|
|
|
</div>
|
|
|
|
|
</Collapse>
|
|
|
|
|
</CollapseWrapper>
|
|
|
|
|
);
|
2021-04-28 10:28:39 +00:00
|
|
|
}
|
2021-02-16 10:29:08 +00:00
|
|
|
|
|
|
|
|
export default CollapseComponent;
|