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

53 lines
1.4 KiB
TypeScript
Raw Normal View History

2024-06-07 20:17:03 +03:00
'use client';
2025-02-20 20:22:05 +03:00
import { type Styling } from '@/components/props';
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select';
2025-04-12 21:47:46 +03:00
import { cn } from '@/components/utils';
2025-02-11 20:56:11 +03:00
2025-02-12 15:12:59 +03:00
import { labelVersion } from '../../rsform/labels';
2025-02-20 20:22:05 +03:00
import { type IVersionInfo } from '../backend/types';
import { type CurrentVersion } from '../models/library';
2024-06-07 20:17:03 +03:00
2025-02-20 20:22:05 +03:00
interface SelectVersionProps extends Styling {
2024-06-07 20:17:03 +03:00
id?: string;
2025-02-20 16:36:50 +03:00
value: CurrentVersion;
onChange: (newValue: CurrentVersion) => void;
2024-07-26 21:08:31 +03:00
2025-02-20 16:36:50 +03:00
items: IVersionInfo[];
2024-07-26 21:08:31 +03:00
placeholder?: string;
noBorder?: boolean;
2024-06-07 20:17:03 +03:00
}
2025-04-10 11:03:55 +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));
}
}
2024-06-07 20:17:03 +03:00
return (
<Select onValueChange={handleSelect} defaultValue={String(value)}>
2025-04-10 11:03:55 +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>
2024-06-07 20:17:03 +03:00
);
}