2023-02-09 22:22:16 +00:00
|
|
|
import { useState, ReactNode } from "react";
|
2023-02-06 21:42:47 +00:00
|
|
|
|
2023-03-02 17:47:02 +00:00
|
|
|
import Icon from "Icons/Icon";
|
2023-02-06 21:42:47 +00:00
|
|
|
import ShowMore from "Element/ShowMore";
|
|
|
|
|
|
|
|
interface CollapsedProps {
|
2023-02-07 20:04:50 +00:00
|
|
|
text?: string;
|
|
|
|
children: ReactNode;
|
|
|
|
collapsed: boolean;
|
|
|
|
setCollapsed(b: boolean): void;
|
2023-02-06 21:42:47 +00:00
|
|
|
}
|
|
|
|
|
2023-02-09 12:26:54 +00:00
|
|
|
const Collapsed = ({ text, children, collapsed, setCollapsed }: CollapsedProps) => {
|
2023-02-06 21:42:47 +00:00
|
|
|
return collapsed ? (
|
|
|
|
<div className="collapsed">
|
|
|
|
<ShowMore text={text} onClick={() => setCollapsed(false)} />
|
|
|
|
</div>
|
|
|
|
) : (
|
2023-02-07 20:04:50 +00:00
|
|
|
<div className="uncollapsed">{children}</div>
|
|
|
|
);
|
|
|
|
};
|
2023-02-06 21:42:47 +00:00
|
|
|
|
2023-02-09 11:24:15 +00:00
|
|
|
interface CollapsedIconProps {
|
|
|
|
icon: ReactNode;
|
|
|
|
collapsed: boolean;
|
|
|
|
}
|
|
|
|
|
2023-02-13 10:47:52 +00:00
|
|
|
export const CollapsedIcon = ({ icon, collapsed }: CollapsedIconProps) => {
|
|
|
|
return collapsed ? <div className="collapsed">{icon}</div> : <div className="uncollapsed">{icon}</div>;
|
2023-02-09 11:24:15 +00:00
|
|
|
};
|
|
|
|
|
2023-02-09 22:22:16 +00:00
|
|
|
interface CollapsedSectionProps {
|
|
|
|
title: ReactNode;
|
|
|
|
children: ReactNode;
|
|
|
|
}
|
|
|
|
|
|
|
|
export const CollapsedSection = ({ title, children }: CollapsedSectionProps) => {
|
|
|
|
const [collapsed, setCollapsed] = useState(true);
|
|
|
|
const icon = (
|
|
|
|
<div className={`collapse-icon ${collapsed ? "" : "flip"}`} onClick={() => setCollapsed(!collapsed)}>
|
2023-03-02 17:47:02 +00:00
|
|
|
<Icon name="chevronDown" />
|
2023-02-09 22:22:16 +00:00
|
|
|
</div>
|
|
|
|
);
|
|
|
|
return (
|
2023-02-13 10:47:52 +00:00
|
|
|
<>
|
|
|
|
<div className="collapsable-section">
|
|
|
|
<h3 onClick={() => setCollapsed(!collapsed)}>{title}</h3>
|
|
|
|
<CollapsedIcon icon={icon} collapsed={collapsed} />
|
|
|
|
</div>
|
|
|
|
|
|
|
|
{collapsed ? null : children}
|
|
|
|
</>
|
2023-02-09 22:22:16 +00:00
|
|
|
);
|
|
|
|
};
|
|
|
|
|
2023-02-07 20:04:50 +00:00
|
|
|
export default Collapsed;
|