You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.2 KiB
TypeScript
51 lines
1.2 KiB
TypeScript
import React, { useState, useEffect } from 'react';
|
|
import { Collapse, Tag } from '@arco-design/web-react';
|
|
import { getLocalStorageData } from '@/utils/storage';
|
|
|
|
const CollapseItem = Collapse.Item;
|
|
|
|
interface CollapseBoxProps {
|
|
componentType: string;
|
|
}
|
|
|
|
const CollapseBox: React.FC<CollapseBoxProps> = ({ componentType }) => {
|
|
const [collapseData, setCollapseData] = useState([]);
|
|
|
|
useEffect(() => {
|
|
const data = getLocalStorageData('componentsData')[`${componentType}`];
|
|
setCollapseData(data);
|
|
}, [componentType]);
|
|
|
|
return (
|
|
<>
|
|
<Collapse>
|
|
{collapseData.map((v, i) => {
|
|
return (
|
|
<CollapseItem
|
|
key={i}
|
|
name={`${v.label}_${i}`}
|
|
header={
|
|
<span>
|
|
<span style={{ marginRight: 8 }}>{v.label}</span>
|
|
<Tag color="arcoblue">{v.children.length}</Tag>
|
|
</span>
|
|
}
|
|
>
|
|
{v.children.map((v, i) => {
|
|
return (
|
|
<div key={i}>
|
|
<Tag>{v.label}</Tag>
|
|
</div>
|
|
);
|
|
})}
|
|
</CollapseItem>
|
|
);
|
|
})}
|
|
</Collapse>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default CollapseBox;
|
|
|