| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| import React from 'react'; |
| import { Tabs, TabPane, Tag } from '@douyinfe/semi-ui'; |
| import { CHANNEL_OPTIONS } from '../../../constants'; |
| import { getChannelIcon } from '../../../helpers'; |
|
|
| const ChannelsTabs = ({ |
| enableTagMode, |
| activeTypeKey, |
| setActiveTypeKey, |
| channelTypeCounts, |
| availableTypeKeys, |
| loadChannels, |
| activePage, |
| pageSize, |
| idSort, |
| setActivePage, |
| t, |
| }) => { |
| if (enableTagMode) return null; |
|
|
| const handleTabChange = (key) => { |
| setActiveTypeKey(key); |
| setActivePage(1); |
| loadChannels(1, pageSize, idSort, enableTagMode, key); |
| }; |
|
|
| return ( |
| <Tabs |
| activeKey={activeTypeKey} |
| type='card' |
| collapsible |
| onChange={handleTabChange} |
| className='mb-2' |
| > |
| <TabPane |
| itemKey='all' |
| tab={ |
| <span className='flex items-center gap-2'> |
| {t('全部')} |
| <Tag |
| color={activeTypeKey === 'all' ? 'red' : 'grey'} |
| shape='circle' |
| > |
| {channelTypeCounts['all'] || 0} |
| </Tag> |
| </span> |
| } |
| /> |
| |
| {CHANNEL_OPTIONS.filter((opt) => |
| availableTypeKeys.includes(String(opt.value)), |
| ).map((option) => { |
| const key = String(option.value); |
| const count = channelTypeCounts[option.value] || 0; |
| return ( |
| <TabPane |
| key={key} |
| itemKey={key} |
| tab={ |
| <span className='flex items-center gap-2'> |
| {getChannelIcon(option.value)} |
| {option.label} |
| <Tag |
| color={activeTypeKey === key ? 'red' : 'grey'} |
| shape='circle' |
| > |
| {count} |
| </Tag> |
| </span> |
| } |
| /> |
| ); |
| })} |
| </Tabs> |
| ); |
| }; |
|
|
| export default ChannelsTabs; |
|
|