ConceptPortal-public/rsconcept/frontend/src/components/select/SelectVersion.tsx

51 lines
1.2 KiB
TypeScript
Raw Normal View History

'use client';
2024-03-24 19:25:42 +03:00
import clsx from 'clsx';
2024-05-27 20:42:34 +03:00
import { IVersionInfo, VersionID } from '@/models/library';
import { labelVersion } from '@/utils/labels';
2024-03-24 19:25:42 +03:00
import { CProps } from '../props';
2024-03-20 15:27:32 +03:00
import SelectSingle from '../ui/SelectSingle';
2024-05-16 22:39:28 +03:00
interface SelectVersionProps extends CProps.Styling {
2024-03-24 19:25:42 +03:00
id?: string;
items?: IVersionInfo[];
2024-05-27 20:42:34 +03:00
value?: VersionID;
onSelectValue: (newValue?: VersionID) => void;
2024-07-26 21:09:16 +03:00
placeholder?: string;
noBorder?: boolean;
}
2024-05-16 22:39:28 +03:00
function SelectVersion({ id, className, items, value, onSelectValue, ...restProps }: SelectVersionProps) {
const options = [
{
value: undefined,
label: labelVersion(undefined)
},
...(items?.map(version => ({
value: version.id,
label: version.version
})) ?? [])
];
const valueLabel = (() => {
const version = items?.find(ver => ver.id === value);
return version ? version.version : labelVersion(undefined);
})();
return (
<SelectSingle
2024-03-24 19:25:42 +03:00
id={id}
2024-09-21 20:04:07 +03:00
className={clsx('min-w-[12rem] text-ellipsis', className)}
options={options}
value={{ value: value, label: valueLabel }}
onChange={data => onSelectValue(data?.value)}
2024-03-24 19:25:42 +03:00
{...restProps}
/>
);
}
2024-05-16 22:39:28 +03:00
export default SelectVersion;