|
|
|
@@ -1,6 +1,5 @@ |
|
|
|
import { useState } from 'react' |
|
|
|
import { useCallback, useState } from 'react' |
|
|
|
import type { ChangeEvent, FC, KeyboardEvent } from 'react' |
|
|
|
import { } from 'use-context-selector' |
|
|
|
import { useTranslation } from 'react-i18next' |
|
|
|
import AutosizeInput from 'react-18-input-autosize' |
|
|
|
import { RiAddLine, RiCloseLine } from '@remixicon/react' |
|
|
|
@@ -40,6 +39,29 @@ const TagInput: FC<TagInputProps> = ({ |
|
|
|
onChange(copyItems) |
|
|
|
} |
|
|
|
|
|
|
|
const handleNewTag = useCallback((value: string) => { |
|
|
|
const valueTrimmed = value.trim() |
|
|
|
if (!valueTrimmed) { |
|
|
|
notify({ type: 'error', message: t('datasetDocuments.segment.keywordEmpty') }) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
if ((items.find(item => item === valueTrimmed))) { |
|
|
|
notify({ type: 'error', message: t('datasetDocuments.segment.keywordDuplicate') }) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
if (valueTrimmed.length > 20) { |
|
|
|
notify({ type: 'error', message: t('datasetDocuments.segment.keywordError') }) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
onChange([...items, valueTrimmed]) |
|
|
|
setTimeout(() => { |
|
|
|
setValue('') |
|
|
|
}) |
|
|
|
}, [items, onChange, notify, t]) |
|
|
|
|
|
|
|
const handleKeyDown = (e: KeyboardEvent) => { |
|
|
|
if (isSpecialMode && e.key === 'Enter') |
|
|
|
setValue(`${value}↵`) |
|
|
|
@@ -48,24 +70,12 @@ const TagInput: FC<TagInputProps> = ({ |
|
|
|
if (isSpecialMode) |
|
|
|
e.preventDefault() |
|
|
|
|
|
|
|
const valueTrimmed = value.trim() |
|
|
|
if (!valueTrimmed || (items.find(item => item === valueTrimmed))) |
|
|
|
return |
|
|
|
|
|
|
|
if (valueTrimmed.length > 20) { |
|
|
|
notify({ type: 'error', message: t('datasetDocuments.segment.keywordError') }) |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
onChange([...items, valueTrimmed]) |
|
|
|
setTimeout(() => { |
|
|
|
setValue('') |
|
|
|
}) |
|
|
|
handleNewTag(value) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
const handleBlur = () => { |
|
|
|
setValue('') |
|
|
|
handleNewTag(value) |
|
|
|
setFocused(false) |
|
|
|
} |
|
|
|
|