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 { AppIconType } from '@/types/app' import { RiCloseLine } from '@remixicon/react' import React, { useCallback, useRef, useState } from 'react' import PermissionSelector from '../../settings/permission-selector' import { DatasetPermission } from '@/models/datasets' import { useMembers } from '@/service/use-common' import Button from '@/app/components/base/button' import { useTranslation } from 'react-i18next' import Toast from '@/app/components/base/toast' type CreateFromScratchProps = { onClose: () => void onCreate: () => void } const DEFAULT_APP_ICON: AppIconSelection = { type: 'emoji', icon: '📙', background: '#FFF4ED', } const CreateFromScratch = ({ onClose, onCreate, }: CreateFromScratchProps) => { 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 { data: memberList } = useMembers() 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() onClose() }, [name, onCreate, onClose]) return (
{/* Header */}
Create Knowledge
{/* Form */}