fix: make TagSelector always visible for accessibility and mobile support (#23515)

This commit is contained in:
lyzno1
2025-08-07 09:25:26 +08:00
committed by GitHub
parent d253ca192a
commit f6c7175828
10 changed files with 19 additions and 26 deletions

View File

@@ -9,10 +9,10 @@ import { useQuery } from '@tanstack/react-query'
// Components // Components
import ExternalAPIPanel from '../../components/datasets/external-api/external-api-panel' import ExternalAPIPanel from '../../components/datasets/external-api/external-api-panel'
import Datasets from './Datasets' import Datasets from './datasets'
import DatasetFooter from './DatasetFooter' import DatasetFooter from './dataset-footer'
import ApiServer from '../../components/develop/ApiServer' import ApiServer from '../../components/develop/ApiServer'
import Doc from './Doc' import Doc from './doc'
import TabSliderNew from '@/app/components/base/tab-slider-new' import TabSliderNew from '@/app/components/base/tab-slider-new'
import TagManagementModal from '@/app/components/base/tag-management' import TagManagementModal from '@/app/components/base/tag-management'
import TagFilter from '@/app/components/base/tag-management/filter' import TagFilter from '@/app/components/base/tag-management/filter'

View File

@@ -162,24 +162,19 @@ const DatasetCard = ({
</div> </div>
<div <div
className={cn( className={cn(
'mb-2 max-h-[72px] grow px-[14px] text-xs leading-normal text-text-tertiary group-hover:line-clamp-2 group-hover:max-h-[36px]', 'mb-2 line-clamp-2 max-h-[36px] grow px-[14px] text-xs leading-normal text-text-tertiary',
tags.length ? 'line-clamp-2' : 'line-clamp-4',
!dataset.embedding_available && 'opacity-50 hover:opacity-100', !dataset.embedding_available && 'opacity-50 hover:opacity-100',
)} )}
title={dataset.description}> title={dataset.description}>
{dataset.description} {dataset.description}
</div> </div>
<div className={cn( <div className='mt-4 flex h-[42px] shrink-0 items-center pb-[6px] pl-[14px] pr-[6px] pt-1'>
'mt-4 h-[42px] shrink-0 items-center pb-[6px] pl-[14px] pr-[6px] pt-1',
tags.length ? 'flex' : '!hidden group-hover:!flex',
)}>
<div className={cn('flex w-0 grow items-center gap-1', !dataset.embedding_available && 'opacity-50 hover:opacity-100')} onClick={(e) => { <div className={cn('flex w-0 grow items-center gap-1', !dataset.embedding_available && 'opacity-50 hover:opacity-100')} onClick={(e) => {
e.stopPropagation() e.stopPropagation()
e.preventDefault() e.preventDefault()
}}> }}>
<div className={cn( <div className={cn(
'mr-[41px] w-full grow group-hover:!mr-0 group-hover:!block', 'mr-[41px] w-full grow group-hover:!mr-0',
tags.length ? '!block' : '!hidden',
)}> )}>
<TagSelector <TagSelector
position='bl' position='bl'

View File

@@ -3,8 +3,8 @@
import { useCallback, useEffect, useRef } from 'react' import { useCallback, useEffect, useRef } from 'react'
import useSWRInfinite from 'swr/infinite' import useSWRInfinite from 'swr/infinite'
import { debounce } from 'lodash-es' import { debounce } from 'lodash-es'
import NewDatasetCard from './NewDatasetCard' import NewDatasetCard from './new-dataset-card'
import DatasetCard from './DatasetCard' import DatasetCard from './dataset-card'
import type { DataSetListResponse, FetchDatasetsParams } from '@/models/datasets' import type { DataSetListResponse, FetchDatasetsParams } from '@/models/datasets'
import { fetchDatasets } from '@/service/datasets' import { fetchDatasets } from '@/service/datasets'
import { useAppContext } from '@/context/app-context' import { useAppContext } from '@/context/app-context'

View File

@@ -1,6 +1,6 @@
'use client' 'use client'
import { useTranslation } from 'react-i18next' import { useTranslation } from 'react-i18next'
import Container from './Container' import Container from './container'
import useDocumentTitle from '@/hooks/use-document-title' import useDocumentTitle from '@/hooks/use-document-title'
const AppList = () => { const AppList = () => {

View File

@@ -370,20 +370,14 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
{app.description} {app.description}
</div> </div>
</div> </div>
<div className={cn( <div className='absolute bottom-1 left-0 right-0 flex h-[42px] shrink-0 items-center pb-[6px] pl-[14px] pr-[6px] pt-1'>
'absolute bottom-1 left-0 right-0 h-[42px] shrink-0 items-center pb-[6px] pl-[14px] pr-[6px] pt-1',
tags.length ? 'flex' : '!hidden group-hover:!flex',
)}>
{isCurrentWorkspaceEditor && ( {isCurrentWorkspaceEditor && (
<> <>
<div className={cn('flex w-0 grow items-center gap-1')} onClick={(e) => { <div className={cn('flex w-0 grow items-center gap-1')} onClick={(e) => {
e.stopPropagation() e.stopPropagation()
e.preventDefault() e.preventDefault()
}}> }}>
<div className={cn( <div className='mr-[41px] w-full grow group-hover:!mr-0'>
'mr-[41px] w-full grow group-hover:!mr-0 group-hover:!block',
tags.length ? '!block' : '!hidden',
)}>
<TagSelector <TagSelector
position='bl' position='bl'
type='app' type='app'
@@ -395,7 +389,7 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
/> />
</div> </div>
</div> </div>
<div className='mx-1 !hidden h-[14px] w-[1px] shrink-0 group-hover:!flex' /> <div className='mx-1 !hidden h-[14px] w-[1px] shrink-0 bg-divider-regular group-hover:!flex' />
<div className='!hidden shrink-0 group-hover:!flex'> <div className='!hidden shrink-0 group-hover:!flex'>
<CustomPopover <CustomPopover
htmlContent={<Operations />} htmlContent={<Operations />}

View File

@@ -238,12 +238,16 @@ const TagSelector: FC<TagSelectorProps> = ({
}, [selectedTags, tagList]) }, [selectedTags, tagList])
const Trigger = () => { const Trigger = () => {
const hasNoTags = !triggerContent
return ( return (
<div className={cn( <div className={cn(
'group/tip relative flex w-full cursor-pointer items-center gap-1 rounded-md px-2 py-[7px] hover:bg-state-base-hover', 'group/tip relative flex w-full cursor-pointer items-center gap-1 rounded-md px-2 py-[7px] hover:bg-state-base-hover',
)}> )}>
<Tag01 className='h-3 w-3 shrink-0 text-components-input-text-placeholder' /> <Tag01 className='h-3 w-3 shrink-0 text-components-input-text-placeholder' />
<div className='system-sm-regular grow truncate text-start text-components-input-text-placeholder'> <div className={cn(
'system-sm-regular grow truncate text-start',
hasNoTags ? 'italic text-components-input-text-placeholder' : 'font-medium text-components-input-text-placeholder',
)}>
{!triggerContent ? t('common.tag.addTag') : triggerContent} {!triggerContent ? t('common.tag.addTag') : triggerContent}
</div> </div>
</div> </div>

View File

@@ -70,7 +70,7 @@ export const useUpdateAccessMode = () => {
}) })
} }
export const useGetUserCanAccessApp = ({ appId, isInstalledApp = true }: { appId?: string; isInstalledApp?: boolean; }) => { export const useGetUserCanAccessApp = ({ appId, isInstalledApp = true, enabled }: { appId?: string; isInstalledApp?: boolean; enabled?: boolean }) => {
const systemFeatures = useGlobalPublicStore(s => s.systemFeatures) const systemFeatures = useGlobalPublicStore(s => s.systemFeatures)
return useQuery({ return useQuery({
queryKey: [NAME_SPACE, 'user-can-access-app', appId], queryKey: [NAME_SPACE, 'user-can-access-app', appId],
@@ -80,7 +80,7 @@ export const useGetUserCanAccessApp = ({ appId, isInstalledApp = true }: { appId
else else
return { result: true } return { result: true }
}, },
enabled: !!appId, enabled: enabled !== undefined ? enabled : !!appId,
staleTime: 0, staleTime: 0,
gcTime: 0, gcTime: 0,
}) })