diff --git a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx index 25b37a670b9..781a0fbaafc 100644 --- a/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx +++ b/apps/sim/app/workspace/[workspaceId]/knowledge/components/create-base-modal/create-base-modal.tsx @@ -9,7 +9,6 @@ import { ChipInput, ChipModal, ChipModalBody, - ChipModalError, ChipModalField, ChipModalFooter, ChipModalHeader, @@ -119,11 +118,6 @@ const FormSchema = z type FormInputValues = z.input type FormValues = z.output -interface SubmitStatus { - type: 'success' | 'error' - message: string -} - export const CreateBaseModal = memo(function CreateBaseModal({ open, onOpenChange, @@ -134,11 +128,10 @@ export const CreateBaseModal = memo(function CreateBaseModal({ const createKnowledgeBaseMutation = useCreateKnowledgeBase(workspaceId) const deleteKnowledgeBaseMutation = useDeleteKnowledgeBase(workspaceId) - const [submitStatus, setSubmitStatus] = useState(null) const [files, setFiles] = useState([]) const [fileError, setFileError] = useState(null) - const { uploadFiles, isUploading, uploadProgress, uploadError, clearError } = useKnowledgeUpload({ + const { uploadFiles, isUploading, uploadProgress, clearError } = useKnowledgeUpload({ workspaceId, }) @@ -149,14 +142,11 @@ export const CreateBaseModal = memo(function CreateBaseModal({ onOpenChange(open) } - const { - register, - handleSubmit, - reset, - watch, - setValue, - formState: { errors }, - } = useForm({ + const { register, handleSubmit, reset, watch, setValue } = useForm< + FormInputValues, + unknown, + FormValues + >({ resolver: zodResolver(FormSchema), defaultValues: { name: '', @@ -178,7 +168,6 @@ export const CreateBaseModal = memo(function CreateBaseModal({ useEffect(() => { if (open) { - setSubmitStatus(null) setFileError(null) setFiles([]) reset({ @@ -236,13 +225,11 @@ export const CreateBaseModal = memo(function CreateBaseModal({ (fieldError) => typeof fieldError?.message === 'string' )?.message toast.error( - typeof firstMessage === 'string' ? firstMessage : 'Please fix the highlighted fields' + typeof firstMessage === 'string' ? firstMessage : 'Please fix the errors and try again' ) } const onSubmit = async (data: FormValues) => { - setSubmitStatus(null) - try { const strategyOptions: StrategyOptions | undefined = data.strategy === 'regex' && data.regexPattern @@ -289,7 +276,8 @@ export const CreateBaseModal = memo(function CreateBaseModal({ } catch (deleteError) { logger.error('Failed to delete orphaned knowledge base:', deleteError) } - throw uploadError + toast.error(getErrorMessage(uploadError, 'Failed to upload files')) + return } } @@ -298,10 +286,6 @@ export const CreateBaseModal = memo(function CreateBaseModal({ handleClose(false) } catch (error) { logger.error('Error creating knowledge base:', error) - setSubmitStatus({ - type: 'error', - message: getErrorMessage(error, 'An unknown error occurred'), - }) } } @@ -325,7 +309,6 @@ export const CreateBaseModal = memo(function CreateBaseModal({ - + @@ -352,7 +334,6 @@ export const CreateBaseModal = memo(function CreateBaseModal({ step={1} placeholder='100' {...register('minChunkSize', { valueAsNumber: true })} - error={Boolean(errors.minChunkSize)} autoComplete='off' data-form-type='other' /> @@ -366,7 +347,6 @@ export const CreateBaseModal = memo(function CreateBaseModal({ step={1} placeholder='1024' {...register('maxChunkSize', { valueAsNumber: true })} - error={Boolean(errors.maxChunkSize)} autoComplete='off' data-form-type='other' /> @@ -385,7 +365,6 @@ export const CreateBaseModal = memo(function CreateBaseModal({ step={1} placeholder='200' {...register('overlapSize', { valueAsNumber: true })} - error={Boolean(errors.overlapSize)} autoComplete='off' data-form-type='other' /> @@ -410,13 +389,11 @@ export const CreateBaseModal = memo(function CreateBaseModal({ @@ -520,8 +497,6 @@ export const CreateBaseModal = memo(function CreateBaseModal({ )} - - {uploadError?.message || submitStatus?.message} (null) - const [descriptionError, setDescriptionError] = useState(null) const [isSubmitting, setIsSubmitting] = useState(false) - const [error, setError] = useState(null) /** * Seed the fields only on the closed → open transition (render-phase reset), @@ -56,34 +51,16 @@ export const EditKnowledgeBaseModal = memo(function EditKnowledgeBaseModal({ if (open) { setName(initialName) setDescription(initialDescription) - setNameError(null) - setDescriptionError(null) - setError(null) } } const validate = (): string | null => { - let firstError: string | null = null - - if (!name.trim()) { - setNameError('Name is required') - firstError ??= 'Name is required' - } else if (name.trim().length > 100) { - setNameError('Name must be less than 100 characters') - firstError ??= 'Name must be less than 100 characters' - } else { - setNameError(null) - } - + if (!name.trim()) return 'Name is required' + if (name.trim().length > 100) return 'Name must be less than 100 characters' if (description.length > KNOWLEDGE_BASE_DESCRIPTION_MAX_LENGTH) { - const message = `Description must be ${KNOWLEDGE_BASE_DESCRIPTION_MAX_LENGTH} characters or less` - setDescriptionError(message) - firstError ??= message - } else { - setDescriptionError(null) + return `Description must be ${KNOWLEDGE_BASE_DESCRIPTION_MAX_LENGTH} characters or less` } - - return firstError + return null } const handleSubmit = async () => { @@ -94,14 +71,12 @@ export const EditKnowledgeBaseModal = memo(function EditKnowledgeBaseModal({ } setIsSubmitting(true) - setError(null) try { await onSave(knowledgeBaseId, name.trim(), description.trim()) onOpenChange(false) } catch (err) { logger.error('Error updating knowledge base:', err) - setError(getErrorMessage(err, 'Failed to update knowledge base')) } finally { setIsSubmitting(false) } @@ -121,7 +96,6 @@ export const EditKnowledgeBaseModal = memo(function EditKnowledgeBaseModal({ onChange={setName} placeholder='Enter knowledge base name' required - error={nameError ?? undefined} autoComplete='off' /> {chunkingConfig && ( @@ -166,7 +139,6 @@ export const EditKnowledgeBaseModal = memo(function EditKnowledgeBaseModal({ )} - {error} onOpenChange(false)} diff --git a/apps/sim/hooks/queries/kb/knowledge.ts b/apps/sim/hooks/queries/kb/knowledge.ts index 03b5d91afc8..0620d8c1d3f 100644 --- a/apps/sim/hooks/queries/kb/knowledge.ts +++ b/apps/sim/hooks/queries/kb/knowledge.ts @@ -619,6 +619,9 @@ export function useCreateKnowledgeBase(workspaceId?: string) { return useMutation({ mutationFn: createKnowledgeBase, + onError: (error) => { + toast.error(error.message, { duration: 5000 }) + }, onSettled: () => { queryClient.invalidateQueries({ queryKey: knowledgeKeys.lists(),