import AppIcon from '@/app/components/base/app-icon' import type { AppIconSelection } from '@/app/components/base/app-icon-picker' import AppIconPicker from '@/app/components/base/app-icon-picker' import Input from '@/app/components/base/input' import Textarea from '@/app/components/base/textarea' import type { Member } from '@/models/common' import { DatasetPermission } from '@/models/datasets' import { useMembers } from '@/service/use-common' import type { AppIconType } from '@/types/app' import React, { useCallback, useEffect, useRef, useState } from 'react' import { useTranslation } from 'react-i18next' import PermissionSelector from '../../settings/permission-selector' import Button from '@/app/components/base/button' import { RiCloseLine } from '@remixicon/react' import Toast from '@/app/components/base/toast' import type { CreateFormData } from '@/models/pipeline' const DEFAULT_APP_ICON: AppIconSelection = { type: 'emoji', icon: '📙', background: '#FFF4ED', } type CreateFormProps = { onCreate: (payload: CreateFormData) => void onClose: () => void } const CreateForm = ({ onCreate, onClose, }: CreateFormProps) => { const { t } = useTranslation() const [name, setName] = useState('') const [appIcon, setAppIcon] = useState(DEFAULT_APP_ICON) const [description, setDescription] = useState('') const [permission, setPermission] = useState(DatasetPermission.onlyMe) const [showAppIconPicker, setShowAppIconPicker] = useState(false) const [selectedMemberIDs, setSelectedMemberIDs] = useState([]) const previousAppIcon = useRef(DEFAULT_APP_ICON) const [memberList, setMemberList] = useState([]) const { data: members } = useMembers() useEffect(() => { if (members?.accounts) setMemberList(members.accounts) }, [members]) const handleAppNameChange = useCallback((event: React.ChangeEvent) => { const value = event.target.value setName(value) }, []) const handleOpenAppIconPicker = useCallback(() => { setShowAppIconPicker(true) previousAppIcon.current = appIcon }, [appIcon]) const handleSelectAppIcon = useCallback((icon: AppIconSelection) => { setAppIcon(icon) setShowAppIconPicker(false) }, []) const handleCloseAppIconPicker = useCallback(() => { setAppIcon(previousAppIcon.current) setShowAppIconPicker(false) }, []) const handleDescriptionChange = useCallback((event: React.ChangeEvent) => { const value = event.target.value setDescription(value) }, []) const handlePermissionChange = useCallback((value?: DatasetPermission) => { setPermission(value!) }, []) const handleCreate = useCallback(() => { if (!name) { Toast.notify({ type: 'error', message: 'Please enter a name for the Knowledge Base.', }) return } onCreate({ name, appIcon, description, permission, selectedMemberIDs, }) }, [name, appIcon, description, permission, selectedMemberIDs, onCreate]) return (
{/* Header */}
{t('datasetPipeline.creation.createKnowledge')}
{/* Form */}