baveshraam's picture
FIX: SurrealDB 2.0 migration syntax and Frontend/CORS link
f871fed
"use client"
import { Control, Controller } from "react-hook-form"
import { FormSection } from "@/components/ui/form-section"
import { CheckboxList } from "@/components/ui/checkbox-list"
import { Checkbox } from "@/components/ui/checkbox"
import { Transformation } from "@/lib/types/transformations"
import { SettingsResponse } from "@/lib/types/api"
interface CreateSourceFormData {
type: 'link' | 'upload' | 'text'
title?: string
url?: string
content?: string
file?: FileList | File
notebooks?: string[]
transformations?: string[]
embed: boolean
async_processing: boolean
}
interface ProcessingStepProps {
control: Control<CreateSourceFormData>
transformations: Transformation[]
selectedTransformations: string[]
onToggleTransformation: (transformationId: string) => void
loading?: boolean
settings?: SettingsResponse
}
export function ProcessingStep({
control,
transformations,
selectedTransformations,
onToggleTransformation,
loading = false,
settings
}: ProcessingStepProps) {
const transformationItems = transformations.map((transformation) => ({
id: transformation.id,
title: transformation.title,
description: transformation.description
}))
return (
<div className="space-y-8">
<FormSection
title="Transformations (optional)"
description="Apply AI transformations to analyze and extract insights from your content."
>
<CheckboxList
items={transformationItems}
selectedIds={selectedTransformations}
onToggle={onToggleTransformation}
loading={loading}
emptyMessage="No transformations found."
/>
</FormSection>
<FormSection
title="Processing Settings"
description="Configure how your source will be processed and stored."
>
<div className="space-y-4">
{settings?.default_embedding_option === 'ask' && (
<Controller
control={control}
name="embed"
render={({ field }) => (
<label className="flex items-start gap-3 cursor-pointer p-3 rounded-md hover:bg-muted">
<Checkbox
checked={field.value}
onCheckedChange={field.onChange}
className="mt-0.5"
/>
<div className="flex-1">
<span className="text-sm font-medium block">Enable embedding for search</span>
<p className="text-xs text-muted-foreground mt-1">
Allows this source to be found in vector searches and AI queries
</p>
</div>
</label>
)}
/>
)}
{settings?.default_embedding_option === 'always' && (
<div className="p-3 rounded-md bg-primary/10 border border-primary/30">
<div className="flex items-start gap-3">
<div className="w-4 h-4 bg-primary rounded-full mt-0.5 flex-shrink-0"></div>
<div className="flex-1">
<span className="text-sm font-medium block text-primary">Embedding enabled automatically</span>
<p className="text-xs text-primary mt-1">
Your settings are configured to always embed content for vector search.
You can change this in <span className="font-medium">Settings</span>.
</p>
</div>
</div>
</div>
)}
{settings?.default_embedding_option === 'never' && (
<div className="p-3 rounded-md bg-muted border border-border">
<div className="flex items-start gap-3">
<div className="w-4 h-4 bg-muted-foreground rounded-full mt-0.5 flex-shrink-0"></div>
<div className="flex-1">
<span className="text-sm font-medium block text-foreground">Embedding disabled</span>
<p className="text-xs text-muted-foreground mt-1">
Your settings are configured to skip embedding. Vector search won&apos;t be available for this source.
You can change this in <span className="font-medium">Settings</span>.
</p>
</div>
</div>
</div>
)}
</div>
</FormSection>
</div>
)
}