E2E-Frontend-Data-Eyond / src /app /components /analysis /BusinessQuestionsEditor.tsx
harryagasi
fix: resizable report sidebar, stable chat layout, guided empty state
15d8afd
Raw
History Blame Contribute Delete
2.7 kB
import { Plus, X } from "lucide-react";
import { compactQuestions } from "./utils";
interface BusinessQuestionsEditorProps {
value: string[];
onChange: (questions: string[]) => void;
disabled?: boolean;
}
export function BusinessQuestionsEditor({ value, onChange, disabled }: BusinessQuestionsEditorProps) {
const questions = value.length ? value : [""];
const update = (index: number, next: string) => {
const copy = [...questions];
copy[index] = next;
onChange(copy);
};
const remove = (index: number) => {
if (questions.length <= 2) return;
const next = questions.filter((_, i) => i !== index);
onChange(next.length ? next : [""]);
};
const canAdd = questions.length < 5;
const canRemove = questions.length > 2;
return (
<div className="space-y-2">
<div className="flex items-center justify-between">
<label className="text-xs font-medium text-slate-600">Business questions ({questions.length}/5)</label>
{canAdd && (
<button
type="button"
onClick={() => onChange([...questions, ""])}
disabled={disabled}
className="inline-flex items-center gap-1 rounded-md px-2 py-1 text-xs font-medium text-emerald-700 hover:bg-emerald-50 disabled:opacity-40"
>
<Plus className="h-3 w-3" />
Add
</button>
)}
</div>
<div className="space-y-2">
{questions.map((question, index) => (
<div key={index} className="flex gap-2">
<input
value={question}
onChange={(event) => update(index, event.target.value)}
disabled={disabled}
placeholder={index === 0 ? "What should this analysis answer?" : "Add another question"}
className="min-w-0 flex-1 rounded-lg border border-slate-200 bg-white px-3 py-2 text-sm text-slate-800 outline-none transition placeholder:text-slate-400 focus:border-emerald-500 focus:ring-2 focus:ring-emerald-100 disabled:bg-slate-50"
/>
{canRemove && (
<button
type="button"
aria-label="Remove question"
onClick={() => remove(index)}
disabled={disabled}
className="rounded-lg border border-slate-200 p-2 text-slate-500 hover:border-red-200 hover:bg-red-50 hover:text-red-600 disabled:opacity-40"
>
<X className="h-4 w-4" />
</button>
)}
</div>
))}
</div>
{compactQuestions(questions).length < 2 && <p className="text-xs text-red-600">Add at least 2 questions (max 5).</p>}
</div>
);
}