import MaterialIcon, { AvailableUnfilledIcon, } from '@/shared/components/material-icon' import { forwardRef, ReactElement, useCallback } from 'react' import { Dropdown, DropdownToggle, } from '@/shared/components/dropdown/dropdown-menu' import OLTooltip from '@/shared/components/ol/ol-tooltip' import { DropdownToggle as BS5DropdownToggle } from 'react-bootstrap' type RailActionButton = { key: string icon: AvailableUnfilledIcon title: string action: () => void hide?: boolean ref?: React.Ref } type RailDropdown = { key: string icon: AvailableUnfilledIcon title: string dropdown: ReactElement hide?: boolean ref?: React.Ref } export type RailAction = RailDropdown | RailActionButton const RailActionElement = forwardRef( ({ action }, ref) => { const onActionClick = useCallback(() => { if ('action' in action) { action.action() } }, [action]) if (action.hide) { return null } if ('dropdown' in action) { return ( } id={`rail-dropdown-btn-${action.key}`} className="ide-rail-tab-link ide-rail-tab-button ide-rail-tab-dropdown" as="button" aria-label={action.title} > {action.dropdown} ) } else { return ( ) } } ) RailActionElement.displayName = 'RailActionElement' export default RailActionElement