import { IconButton } from '@mui/material'
import { SearchOutlined } from '@mui/icons-material'
import { useCallback, useEffect } from 'react'
import type { SearcherToggleProps, SearcherState } from './types'
import { actionButtonStyles } from '../shared/styles'
import { Tooltip } from '../../../components'
import { widgetStoreActions } from '../../stores/widget-store'
import { useWidgetSelector } from '../../stores/use-widget-selector'
/**
* Widget action button to toggle search functionality.
*
* Stores the enabled state in the widget store using the provided id.
* When search is active, the button shows an active state with a light background.
* Use in conjunction with the Searcher component to display the search input.
*
* @example
* ```tsx
*
*
* ```
*/
export function SearcherToggle({
id,
defaultEnabled = false,
labels,
Icon,
IconButtonProps,
}: SearcherToggleProps) {
const { storeIsEnabled } = useWidgetSelector(id, (w) => ({
storeIsEnabled: (w as SearcherState | undefined)?.isSearchEnabled,
}))
const isEnabled = storeIsEnabled ?? defaultEnabled
// Initialize store with default value on mount
useEffect(() => {
const currentValue =
widgetStoreActions.getWidget(id)?.isSearchEnabled
if (currentValue === undefined) {
widgetStoreActions.setWidget(id, { isSearchEnabled: defaultEnabled })
}
}, [defaultEnabled, id])
const handleToggle = useCallback(() => {
widgetStoreActions.setWidget(id, { isSearchEnabled: !isEnabled })
}, [id, isEnabled])
const tooltipLabel = isEnabled
? (labels?.disable ?? 'Disable search')
: (labels?.enable ?? 'Enable search')
const ariaLabel = labels?.ariaLabel ?? tooltipLabel
return (
{Icon ?? }
)
}