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.

110 lines
3.5 KiB
TypeScript

import React, { useEffect, useState } from 'react';
import styles from './style/index.module.less';
import CustomCard from '@/components/CustomCard/index';
import CollapseBox from './collapseBox';
import { Space, Input, Button, Tabs, Tag } from '@arco-design/web-react';
const TabPane = Tabs.TabPane;
function ComponentLibrary() {
const userInfo = JSON.parse(sessionStorage.getItem('userInfo') || '{}');
const componentData = JSON.parse(sessionStorage.getItem(`compLibs${userInfo.userId}`));
const [inputValue, setInputValue] = useState('');
const [activeKey, setActiveKey] = useState<'myLibs' | 'pubLibs' | 'teamLibs'>('myLibs');
const [componentsTree, setComponentsTree] = useState([]);
const [filteredComponentsTree, setFilteredComponentsTree] = useState([]);
const handelChangeTabs = (key) => {
if (componentData && Object.keys(componentData).length > 0) setComponentsTree(componentData[key]);
setActiveKey(key);
};
const handelSearch = () => {
const newTree = componentsTree.map(item => {
const filteredChildren = item.children.filter(sub => sub.label.toLowerCase().includes(inputValue.toLowerCase()));
return {
...item,
children: filteredChildren
};
})
.filter(item => item.children.length > 0);
setFilteredComponentsTree(newTree);
};
useEffect(() => {
handelSearch();
}, [inputValue, activeKey]);
return (
<>
<div className={styles['comp-library-container']}>
<CustomCard>
<Space
size={20}
style={{ marginBottom: '5px' }}
>
<Input
value={inputValue || ''}
onChange={(value) => setInputValue(value)}
allowClear
placeholder="输入名称搜索组件"
style={{ width: 350 }} />
{/*<Button type="primary">组件推荐</Button>*/}
</Space>
<Tabs
defaultActiveTab={activeKey}
onChange={(e) => handelChangeTabs(e)}
>
<TabPane
key="myLibs"
title={
<span>
<span></span>
<Tag color="arcoblue">
{componentData.myLibs.length}
</Tag>
</span>
}
>
<CollapseBox
componentType="myLibs"
data={inputValue ? filteredComponentsTree : componentData.myLibs} />
</TabPane>
<TabPane
key="pubLibs"
title={
<span>
<span></span>
<Tag color="arcoblue">
{componentData.pubLibs.length}
</Tag>
</span>
}>
<CollapseBox
componentType="pubLibs"
data={inputValue ? filteredComponentsTree : componentData.pubLibs} />
</TabPane>
<TabPane
key="teamLibs"
title={
<span>
<span></span>
<Tag color="arcoblue">
{componentData.teamLibs.length}
</Tag>
</span>
}
>
<CollapseBox
componentType="teamLibs"
data={inputValue ? filteredComponentsTree : componentData.teamLibs} />
</TabPane>
</Tabs>
</CustomCard>
</div>
</>
);
}
export default ComponentLibrary;