UNPKG

@navikt/ds-react

Version:

React components from the Norwegian Labour and Welfare Administration.

53 lines (46 loc) 1.35 kB
import { composeEventHandlers } from "../../../util/composeEventHandlers"; import { mergeRefs } from "../../../util/hooks/useMergeRefs"; import { useTabsContext, useTabsDescendant } from "../../Tabs.context"; export interface UseTabProps { /** * If `true`, the `Tab` won't be toggleable * @default false */ disabled?: boolean; onClick?: React.MouseEventHandler; onFocus?: React.FocusEventHandler; value: string; } export function useTab<P extends UseTabProps>( { value, disabled = false, onFocus: _onFocus, onClick }: P, ref: React.ForwardedRef<HTMLButtonElement>, ) { const { id, setSelectedValue, selectionFollowsFocus, focusedValue, setFocusedValue, selectedValue, makeTabId, makeTabPanelId, } = useTabsContext(); const { register } = useTabsDescendant({ disabled, value, }); const isSelected = value === selectedValue; const onFocus = () => { setFocusedValue(value); selectionFollowsFocus && setSelectedValue(value); }; return { ref: mergeRefs([register, ref]), isSelected, isFocused: focusedValue === value, id: makeTabId(id, value), controlsId: makeTabPanelId(id, value), onClick: composeEventHandlers(onClick, () => setSelectedValue(value)), onFocus: disabled ? undefined : composeEventHandlers(_onFocus, onFocus), }; }