Files
FastGPT/projects/app/src/components/SideTabs/index.tsx
Archer 911512b36d 4.7-production (#1053)
* 4.7-alpha3 (#62)

* doc

* Optimize possible null Pointers and parts of Ux

* fix: mulity index training error

* feat: doc and rename question guide

* fix ios speech input (#59)

* fix: prompt editor variables nowrap (#61)

* change openapi import in http module with curl import (#60)

* chore(ui): dataset import modal ui (#58)

* chore(ui): dataset import modal ui

* use component

* fix height

* 4.7 (#63)

* fix: claude3 image type verification failed (#1038) (#1040)

* perf: curl import modal

* doc img

* perf: adapt cohere rerank

* perf: code

* perf: input style

* doc

---------

Co-authored-by: xiaotian <dimsky@163.com>

* fix: ts

* docker deploy

* perf: prompt call

* doc

* ts

* finish ui

* perf: outlink detail ux

* perf: user schema

* fix: plugin update

* feat: get current time plugin

* fix: ts

* perf: fetch anamation

* perf: mark ux

* doc

* perf: select app ux

* fix: split text custom string conflict

* peref: inform readed

* doc

* memo flow component

* perf: version

* faq

* feat: flow max runtimes

* feat: similarity tip

* feat: auto detect file encoding

* Supports asymmetric vector model

* fix: ts

* perf: max w

* move code

* perf: hide whisper

* fix: ts

* feat: system msg modal

* perf: catch error

* perf: inform tip

* fix: inform

---------

Co-authored-by: heheer <71265218+newfish-cmyk@users.noreply.github.com>
Co-authored-by: xiaotian <dimsky@163.com>
2024-03-26 12:09:31 +08:00

74 lines
1.8 KiB
TypeScript

import React, { useMemo } from 'react';
import { Box, Flex } from '@chakra-ui/react';
import type { GridProps } from '@chakra-ui/react';
import MyIcon from '@fastgpt/web/components/common/Icon';
import type { IconNameType } from '@fastgpt/web/components/common/Icon/type.d';
// @ts-ignore
export interface Props extends GridProps {
list: { id: string; label: string; icon: string }[];
activeId: string;
size?: 'sm' | 'md' | 'lg';
onChange: (id: string) => void;
}
const SideTabs = ({ list, size = 'md', activeId, onChange, ...props }: Props) => {
const sizeMap = useMemo(() => {
switch (size) {
case 'sm':
return {
fontSize: 'sm',
inlineP: 1
};
case 'md':
return {
fontSize: 'md',
inlineP: 2
};
case 'lg':
return {
fontSize: 'lg',
inlineP: 3
};
}
}, [size]);
return (
<Box fontSize={sizeMap.fontSize} {...props}>
{list.map((item) => (
<Flex
key={item.id}
py={sizeMap.inlineP}
borderRadius={'md'}
px={3}
mb={2}
fontWeight={'medium'}
alignItems={'center'}
{...(activeId === item.id
? {
bg: ' primary.100 !important',
color: 'primary.600 ',
cursor: 'default'
}
: {
cursor: 'pointer',
color: 'myGray.600'
})}
_hover={{
bg: 'myGray.05'
}}
onClick={() => {
if (activeId === item.id) return;
onChange(item.id);
}}
>
<MyIcon mr={2} name={item.icon as IconNameType} w={'20px'} />
{item.label}
</Flex>
))}
</Box>
);
};
export default React.memo(SideTabs);