PromucFlow_constructor/app/client/src/components/utils/TreeStructure.tsx

90 lines
2.1 KiB
TypeScript
Raw Normal View History

2020-06-11 07:24:19 +00:00
import React from "react";
import styled from "styled-components";
type TreeStructureProps = {
label: string;
level: number;
start: boolean;
levelSeparator?: string;
};
const TreeStructureHorizontalWrapper = styled.div<{
level: number;
label: string;
}>`
position: absolute;
width: ${props => (props.level - 1) * 2 + 9}px;
height: 2px;
background: #a2a6a8;
top: ${props => (props.label ? "65%" : "50%")};
left: ${props => (props.level - 1) * 18 + 9}px;
z-index: 1;
`;
const TreeStructureVerticalWrapper = styled.div<{
level: number;
label: string;
start: boolean;
}>`
position: absolute;
height: ${props => (props.start ? (props.label ? "77%" : "70%") : "100%")};
width: 2px;
background: #a2a6a8;
top: ${props =>
props.start
? props.label
? "-12%"
: "-16%"
: props.label
? "-35%"
: "-49%"};
left: ${props => (props.level - 1) * 18 + 9}px;
z-index: 1;
`;
const TreeStructure = (props: TreeStructureProps) => {
return (
<React.Fragment>
{props.level ? (
<TreeStructureHorizontalWrapper
label={props.label}
level={props.level}
/>
) : null}
{(() => {
if (
props.level &&
props.levelSeparator &&
props.levelSeparator === "odd"
) {
const treeStructureVerticalWrappers = new Array(props.level)
.fill("")
.map((i, index) => {
return (
<TreeStructureVerticalWrapper
key={index}
label={props.label}
level={index + 1}
start={index === props.level - 1 ? props.start : false}
/>
);
});
return treeStructureVerticalWrappers;
} else if (props.level) {
return (
<TreeStructureVerticalWrapper
label={props.label}
level={props.level}
start={props.start}
/>
);
} else {
return [];
}
})()}
</React.Fragment>
);
};
export default TreeStructure;