fabi / frontend /src /components /Connection /SampleSelector.tsx
Osman2010
Deploy DataLine with Gemini integration to HF Spaces
9470652
import { Description, Fieldset, Label, Legend } from "@catalyst/fieldset";
import { Radio, RadioField, RadioGroup } from "@catalyst/radio";
import { Text } from "@catalyst/text";
import { useState } from "react";
import { SampleResult } from "../../api";
import { enqueueSnackbar } from "notistack";
import { Button } from "@catalyst/button";
import { useCreateSampleConnection, useGetSamples } from "@/hooks";
import { useNavigate } from "@tanstack/react-router";
export const SampleSelector = ({ name = null }: { name: string | null }) => {
const navigate = useNavigate();
const { data } = useGetSamples();
const samples = data || [];
const { mutate } = useCreateSampleConnection({
onSuccess: () => {
enqueueSnackbar({
variant: "success",
message: "Sample connection created",
});
navigate({ to: "/" });
},
});
const [selectedSample, setSelectedSample] = useState<SampleResult | null>(
null
);
const handleButtonClick = async () => {
if (selectedSample !== null) {
if (name === null || name === "") {
name = selectedSample.title + " (Sample)";
} else {
name = name + " (Sample)";
}
mutate({ key: selectedSample.key, name });
} else {
enqueueSnackbar("Please select a sample dataset.", { variant: "info" });
}
};
const handleRadioChange = (selection: string) => {
const selectedValue = selection as string;
const selectedSample = samples.find(
(sample) => sample.key === selectedValue
);
setSelectedSample(selectedSample || null);
};
return (
<Fieldset>
<Legend>Data Samples</Legend>
<Text>Pick a sample dataset to get started.</Text>
<RadioGroup name="sample" defaultValue="" onChange={handleRadioChange}>
{samples.map((sample, index) => (
<RadioField key={index}>
<Radio value={sample.key} color="white" />
<Label className="cursor-pointer">{sample.title}</Label>
<Description>{sample.link}</Description>
</RadioField>
))}
</RadioGroup>
<Button className="cursor-pointer mt-4" onClick={handleButtonClick}>
Create sample
</Button>
</Fieldset>
);
};