fix: tags

This commit is contained in:
StyleZhang 2024-11-05 17:35:18 +08:00
parent 1003190dc0
commit 08bb6bf858
8 changed files with 82 additions and 57 deletions

View File

@ -123,7 +123,7 @@ const ModelProviderPage = ({ searchText }: Props) => {
const [collapse, setCollapse] = useState(false) const [collapse, setCollapse] = useState(false)
const { const {
plugins, plugins = [],
queryPlugins, queryPlugins,
queryPluginsWithDebounced, queryPluginsWithDebounced,
isLoading: isPluginsLoading, isLoading: isPluginsLoading,

View File

@ -1,72 +1,87 @@
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
type Tag = {
name: string
label: string
}
export const useTags = () => { export const useTags = () => {
const { t } = useTranslation() const { t } = useTranslation()
return [ const tags = [
{ {
name: 'search', name: 'search',
label: t('pluginTags.search'), label: t('pluginTags.tags.search'),
}, },
{ {
name: 'image', name: 'image',
label: t('pluginTags.image'), label: t('pluginTags.tags.image'),
}, },
{ {
name: 'videos', name: 'videos',
label: t('pluginTags.videos'), label: t('pluginTags.tags.videos'),
}, },
{ {
name: 'weather', name: 'weather',
label: t('pluginTags.weather'), label: t('pluginTags.tags.weather'),
}, },
{ {
name: 'finance', name: 'finance',
label: t('pluginTags.finance'), label: t('pluginTags.tags.finance'),
}, },
{ {
name: 'design', name: 'design',
label: t('pluginTags.design'), label: t('pluginTags.tags.design'),
}, },
{ {
name: 'travel', name: 'travel',
label: t('pluginTags.travel'), label: t('pluginTags.tags.travel'),
}, },
{ {
name: 'social', name: 'social',
label: t('pluginTags.social'), label: t('pluginTags.tags.social'),
}, },
{ {
name: 'news', name: 'news',
label: t('pluginTags.news'), label: t('pluginTags.tags.news'),
}, },
{ {
name: 'medical', name: 'medical',
label: t('pluginTags.medical'), label: t('pluginTags.tags.medical'),
}, },
{ {
name: 'productivity', name: 'productivity',
label: t('pluginTags.productivity'), label: t('pluginTags.tags.productivity'),
}, },
{ {
name: 'education', name: 'education',
label: t('pluginTags.education'), label: t('pluginTags.tags.education'),
}, },
{ {
name: 'business', name: 'business',
label: t('pluginTags.business'), label: t('pluginTags.tags.business'),
}, },
{ {
name: 'entertainment', name: 'entertainment',
label: t('pluginTags.entertainment'), label: t('pluginTags.tags.entertainment'),
}, },
{ {
name: 'utilities', name: 'utilities',
label: t('pluginTags.utilities'), label: t('pluginTags.tags.utilities'),
}, },
{ {
name: 'other', name: 'other',
label: t('pluginTags.other'), label: t('pluginTags.tags.other'),
}, },
] ]
const tagsMap = tags.reduce((acc, tag) => {
acc[tag.name] = tag
return acc
}, {} as Record<string, Tag>)
return {
tags,
tagsMap,
}
} }

View File

@ -1,6 +1,7 @@
'use client' 'use client'
import { useState } from 'react' import { useState } from 'react'
import { useTranslation } from 'react-i18next'
import { import {
RiArrowDownSLine, RiArrowDownSLine,
RiCloseCircleFill, RiCloseCircleFill,
@ -26,9 +27,10 @@ const TagsFilter = ({
onTagsChange, onTagsChange,
size, size,
}: TagsFilterProps) => { }: TagsFilterProps) => {
const { t } = useTranslation()
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
const [searchText, setSearchText] = useState('') const [searchText, setSearchText] = useState('')
const options = useTags() const { tags: options, tagsMap } = useTags()
const filteredOptions = options.filter(option => option.label.toLowerCase().includes(searchText.toLowerCase())) const filteredOptions = options.filter(option => option.label.toLowerCase().includes(searchText.toLowerCase()))
const handleCheck = (id: string) => { const handleCheck = (id: string) => {
if (tags.includes(id)) if (tags.includes(id))
@ -65,10 +67,10 @@ const TagsFilter = ({
size === 'small' && 'px-0.5 py-1', size === 'small' && 'px-0.5 py-1',
)}> )}>
{ {
!selectedTagsLength && 'All Tags' !selectedTagsLength && t('pluginTags.allTags')
} }
{ {
!!selectedTagsLength && tags.slice(0, 2).join(',') !!selectedTagsLength && tags.map(tag => tagsMap[tag].label).slice(0, 2).join(',')
} }
{ {
selectedTagsLength > 2 && ( selectedTagsLength > 2 && (
@ -100,7 +102,7 @@ const TagsFilter = ({
showLeftIcon showLeftIcon
value={searchText} value={searchText}
onChange={e => setSearchText(e.target.value)} onChange={e => setSearchText(e.target.value)}
placeholder='Search tags' placeholder={t('pluginTags.searchTags') || ''}
/> />
</div> </div>
<div className='p-1 max-h-[448px] overflow-y-auto'> <div className='p-1 max-h-[448px] overflow-y-auto'>

View File

@ -27,7 +27,7 @@ const LabelFilter: FC<LabelFilterProps> = ({
const { t } = useTranslation() const { t } = useTranslation()
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
const labelList = useTags() const { tags: labelList } = useTags()
const [keywords, setKeywords] = useState('') const [keywords, setKeywords] = useState('')
const [searchKeywords, setSearchKeywords] = useState('') const [searchKeywords, setSearchKeywords] = useState('')

View File

@ -26,7 +26,7 @@ const LabelSelector: FC<LabelSelectorProps> = ({
const { t } = useTranslation() const { t } = useTranslation()
const [open, setOpen] = useState(false) const [open, setOpen] = useState(false)
const labelList = useTags() const { tags: labelList } = useTags()
const [keywords, setKeywords] = useState('') const [keywords, setKeywords] = useState('')
const [searchKeywords, setSearchKeywords] = useState('') const [searchKeywords, setSearchKeywords] = useState('')

View File

@ -66,7 +66,7 @@ const AllTools = ({
const { const {
queryPluginsWithDebounced: fetchPlugins, queryPluginsWithDebounced: fetchPlugins,
plugins: notInstalledPlugins, plugins: notInstalledPlugins = [],
} = useMarketplacePlugins() } = useMarketplacePlugins()
useEffect(() => { useEffect(() => {

View File

@ -1,4 +1,7 @@
const translation = { const translation = {
allTags: 'All Tags',
searchTags: 'Search Tags',
tags: {
search: 'Search', search: 'Search',
image: 'Image', image: 'Image',
videos: 'Videos', videos: 'Videos',
@ -15,6 +18,7 @@ const translation = {
entertainment: 'Entertainment', entertainment: 'Entertainment',
utilities: 'Utilities', utilities: 'Utilities',
other: 'Other', other: 'Other',
},
} }
export default translation export default translation

View File

@ -1,4 +1,7 @@
const translation = { const translation = {
allTags: '所有标签',
searchTags: '搜索标签',
tags: {
search: '搜索', search: '搜索',
image: '图片', image: '图片',
videos: '视频', videos: '视频',
@ -15,6 +18,7 @@ const translation = {
entertainment: '娱乐', entertainment: '娱乐',
utilities: '工具', utilities: '工具',
other: '其他', other: '其他',
},
} }
export default translation export default translation