Portal/rsconcept/frontend/src/features/library/components/SelectVersion.tsx

49 lines
1.2 KiB
TypeScript
Raw Normal View History

2024-06-07 20:17:03 +03:00
'use client';
import clsx from 'clsx';
import { SelectSingle } from '@/components/Input';
2025-01-28 23:23:03 +03:00
import { CProps } from '@/components/props';
2025-02-11 20:56:11 +03:00
2025-02-12 15:12:59 +03:00
import { labelVersion } from '../../rsform/labels';
2025-02-18 19:39:54 +03:00
import { IVersionInfo } from '../backend/types';
2024-06-07 20:17:03 +03:00
interface SelectVersionProps extends CProps.Styling {
id?: string;
value: number | undefined;
onChange: (newValue: number | undefined) => void;
2024-07-26 21:08:31 +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-02-12 15:12:59 +03:00
export function SelectVersion({ id, className, items, value, onChange, ...restProps }: SelectVersionProps) {
const options = [
{
value: undefined,
label: labelVersion(undefined)
},
...(items?.map(version => ({
value: version.id,
label: version.version
})) ?? [])
];
const valueLabel = (() => {
2024-06-07 20:17:03 +03:00
const version = items?.find(ver => ver.id === value);
return version ? version.version : labelVersion(undefined);
})();
2024-06-07 20:17:03 +03:00
return (
<SelectSingle
id={id}
2024-09-21 20:03:49 +03:00
className={clsx('min-w-[12rem] text-ellipsis', className)}
2024-06-07 20:17:03 +03:00
options={options}
value={{ value: value, label: valueLabel }}
onChange={data => onChange(data?.value)}
2024-06-07 20:17:03 +03:00
{...restProps}
/>
);
}