From 9ee4ecf07863878880d604ec3516197a73ddec52 Mon Sep 17 00:00:00 2001 From: Daniel Kostro Date: Fri, 5 Jul 2024 15:11:18 +0200 Subject: [PATCH] fix: export useSelect hook's parameter type --- src/components/hooks/useSelect.tsx | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/components/hooks/useSelect.tsx b/src/components/hooks/useSelect.tsx index fa4087e1..358660a4 100644 --- a/src/components/hooks/useSelect.tsx +++ b/src/components/hooks/useSelect.tsx @@ -9,28 +9,30 @@ type FilterType = Pick< }[keyof SourceType] >; -interface ItemOptions { +interface UseSelectCommonOptions { renderItem?: (item: T) => ReactNode; defaultSelectedItem?: T; } -interface BaseOptions extends ItemOptions { +interface UseSelectBaseOptions extends UseSelectCommonOptions { itemTextKey: keyof FilterType; } -interface RenderOptions extends ItemOptions { +interface UseSelectRenderOptions extends UseSelectCommonOptions { getItemText: (item: T) => string; } -type SelectOptions = BaseOptions | RenderOptions; +export type UseSelectOptions = + | UseSelectBaseOptions + | UseSelectRenderOptions; function isAccessLabelByKey( - options: SelectOptions, -): options is BaseOptions { + options: UseSelectOptions, +): options is UseSelectBaseOptions { return 'itemTextKey' in options; } -function getLabel(item: T, options: SelectOptions) { +function getLabel(item: T, options: UseSelectOptions) { const isAccessLByLabelKey = isAccessLabelByKey(options); if (!item || (isAccessLByLabelKey && !options.itemTextKey)) { @@ -44,7 +46,7 @@ function getLabel(item: T, options: SelectOptions) { return options.getItemText(item); } -export function useSelect(options: SelectOptions) { +export function useSelect(options: UseSelectOptions) { const { defaultSelectedItem = null } = options; const [value, setValue] = useState(defaultSelectedItem); @@ -86,7 +88,7 @@ export function useSelect(options: SelectOptions) { }; } -function getItemRenderer(value: T, options: SelectOptions) { +function getItemRenderer(value: T, options: UseSelectOptions) { const selectedLabel = getLabel(value, options); const render: ItemRenderer = (