ConceptPortal-public/rsconcept/frontend/src/features/library/components/select-version.tsx

53 lines
1.4 KiB
TypeScript
Raw Normal View History

'use client';
2025-04-13 22:29:23 +03:00
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/input/select';
import { type Styling } from '@/components/props';
import { cn } from '@/components/utils';
2025-02-11 20:56:24 +03:00
2025-02-12 15:13:37 +03:00
import { labelVersion } from '../../rsform/labels';
import { type IVersionInfo } from '../backend/types';
import { type CurrentVersion } from '../models/library';
interface SelectVersionProps extends Styling {
2024-03-24 19:25:42 +03:00
id?: string;
2025-02-20 16:37:56 +03:00
value: CurrentVersion;
onChange: (newValue: CurrentVersion) => void;
2024-07-26 21:09:16 +03:00
2025-02-20 16:37:56 +03:00
items: IVersionInfo[];
2024-07-26 21:09:16 +03:00
placeholder?: string;
noBorder?: boolean;
}
2025-04-10 11:07:26 +03:00
export function SelectVersion({
id,
className,
items,
value,
placeholder,
onChange,
...restProps
}: SelectVersionProps) {
function handleSelect(newValue: string) {
if (newValue === 'latest') {
onChange(newValue);
} else {
onChange(Number(newValue));
}
}
return (
<Select onValueChange={handleSelect} defaultValue={String(value)}>
2025-04-10 11:07:26 +03:00
<SelectTrigger id={id} className={cn('min-w-48', className)} {...restProps}>
<SelectValue placeholder={placeholder} />
</SelectTrigger>
<SelectContent>
<SelectItem value='latest'>{labelVersion('latest', items)}</SelectItem>
{items?.map(version => (
<SelectItem key={`version-${version.id}`} value={String(version.id)}>
{version.version}
</SelectItem>
))}
</SelectContent>
</Select>
);
}