feat(question-classifier): add drag handle styling and props

- Add className and headerClassName props to ClassItem for better styling control
- Conditionally render drag handle based on readonly state and topic count
- Update drag handle styling to only show when hovered and draggable
pull/22066/head
Mminamiyama 11 months ago
parent fdc6f39aa7
commit 769666abb2

@ -11,6 +11,8 @@ import { uniqueId } from 'lodash-es'
const i18nPrefix = 'workflow.nodes.questionClassifiers' const i18nPrefix = 'workflow.nodes.questionClassifiers'
type Props = { type Props = {
className?: string
headerClassName?: string
nodeId: string nodeId: string
payload: Topic payload: Topic
onChange: (payload: Topic) => void onChange: (payload: Topic) => void
@ -21,6 +23,8 @@ type Props = {
} }
const ClassItem: FC<Props> = ({ const ClassItem: FC<Props> = ({
className,
headerClassName,
nodeId, nodeId,
payload, payload,
onChange, onChange,
@ -49,6 +53,8 @@ const ClassItem: FC<Props> = ({
return ( return (
<Editor <Editor
className={className}
headerClassName={headerClassName}
title={`${t(`${i18nPrefix}.class`)} ${index}`} title={`${t(`${i18nPrefix}.class`)} ${index}`}
placeholder={t(`${i18nPrefix}.topicPlaceholder`)!} placeholder={t(`${i18nPrefix}.topicPlaceholder`)!}
value={payload.name} value={payload.name}

@ -76,18 +76,29 @@ const ClassList: FC<Props> = ({
> >
{ {
list.map((item, index) => { list.map((item, index) => {
const canDrag = (() => {
if (readonly)
return false
if (topicCount < 2)
return false
return true
})()
return ( return (
<div key={item.id} <div key={item.id}
className={cn( className={cn(
'group relative rounded-[10px] bg-components-panel-bg', 'group relative rounded-[10px] bg-components-panel-bg',
`-ml-${handleSideWidth} min-h-[40px] px-0 py-0`, `-ml-${handleSideWidth} min-h-[40px] px-0 py-0`,
)}> )}>
<RiDraggable className={cn( {canDrag && <RiDraggable className={cn(
'handle absolute left-0 top-3 hidden h-3 w-3 cursor-pointer text-text-quaternary', 'handle absolute left-0 top-3 hidden h-3 w-3 cursor-pointer text-text-quaternary',
topicCount > 1 && 'group-hover:block', topicCount > 1 && 'group-hover:block',
)} /> )} />}
<div className={`ml-${handleSideWidth}`}> <div className={`ml-${handleSideWidth}`}>
<Item <Item
className={cn(canDrag && 'handle')}
headerClassName={cn(canDrag && 'cursor-grab')}
nodeId={nodeId} nodeId={nodeId}
key={list[index].id} key={list[index].id}
payload={item} payload={item}

Loading…
Cancel
Save