chore/fix(studio): add placeholder dropdowns for dataset subset and splits in disabled state

This commit is contained in:
Shine1i 2026-03-10 20:27:11 +01:00
commit 18a60b930a
2 changed files with 62 additions and 4 deletions

View file

@ -641,6 +641,19 @@ export function DatasetSection() {
datasetEvalSplit={datasetEvalSplit}
setDatasetEvalSplit={setDatasetEvalSplit}
/>
) : !selectedDatasetName ? (
<HfDatasetSubsetSplitSelectors
variant="studio"
enabled={false}
datasetName={null}
accessToken={hfToken || undefined}
datasetSubset={datasetSubset}
setDatasetSubset={setDatasetSubset}
datasetSplit={datasetSplit}
setDatasetSplit={setDatasetSplit}
datasetEvalSplit={datasetEvalSplit}
setDatasetEvalSplit={setDatasetEvalSplit}
/>
) : datasetSource === "upload" && selectedLocalDataset ? (
<div className="rounded-lg border bg-muted/20 px-3.5 py-3">
<div className="mb-3 flex items-center justify-between gap-3">

View file

@ -56,6 +56,8 @@ export function HfDatasetSubsetSplitSelectors({
} = useHfDatasetSplits(enabled ? datasetName : null, datasetSubset, {
accessToken,
});
const showPlaceholderDropdowns =
variant === "studio" && !enabled && !datasetName;
// Auto-select subset and split in one pass to avoid racing effects
useEffect(() => {
@ -83,12 +85,48 @@ export function HfDatasetSubsetSplitSelectors({
setDatasetSplit,
]);
if (!enabled || !datasetName) return null;
const showDropdowns = !isLoading && !error && hfSubsets.length > 0;
return (
<>
{showPlaceholderDropdowns && (
<>
<div className="grid gap-3 sm:grid-cols-2">
<SelectorDropdown
variant={variant}
label="Subset"
tooltip="Select which subset (config) of the dataset to use."
value={null}
onChange={setDatasetSubset}
options={[]}
placeholder="Select a subset..."
disabled={true}
/>
<SelectorDropdown
variant={variant}
label="Train Split"
tooltip="Select which split to use for training."
value={null}
onChange={setDatasetSplit}
options={[]}
placeholder="Select a split..."
disabled={true}
/>
</div>
<SelectorDropdown
variant={variant}
label="Eval Split"
tooltip="Select which split to use for evaluation. None means no evaluation during training."
value={null}
onChange={setDatasetEvalSplit}
options={[]}
placeholder="None"
allowNone
disabled={true}
/>
</>
)}
{isLoading && (
<div
className={
@ -184,6 +222,7 @@ function SelectorDropdown({
options,
placeholder,
allowNone = false,
disabled = false,
}: {
variant: "wizard" | "studio";
label: string;
@ -193,7 +232,11 @@ function SelectorDropdown({
options: string[];
placeholder: string;
allowNone?: boolean;
disabled?: boolean;
}) {
const selectValue =
value ?? (allowNone && !disabled ? "_none" : undefined);
if (variant === "wizard") {
return (
<Field>
@ -217,8 +260,9 @@ function SelectorDropdown({
</Tooltip>
</FieldLabel>
<Select
value={value ?? "_none"}
value={selectValue}
onValueChange={(v) => onChange(v === "_none" ? null : v)}
disabled={disabled}
>
<SelectTrigger className="w-full">
<SelectValue placeholder={placeholder} />
@ -260,8 +304,9 @@ function SelectorDropdown({
</Tooltip>
</span>
<Select
value={value ?? "_none"}
value={selectValue}
onValueChange={(v) => onChange(v === "_none" ? null : v)}
disabled={disabled}
>
<SelectTrigger className="w-full">
<SelectValue placeholder={placeholder} />