import { useStartChatIcon } from 'domains/config/hooks'
import { useI18n } from 'domains/i18n/hooks'
import { selectHasError } from 'domains/interrupt/selectors'
import { useVisibility } from 'domains/visibility/hooks'
import { className } from 'lib/css'
import { TargetedMouseEvent } from 'preact'
import { useCallback } from 'preact/hooks'
import { useSelector } from 'react-redux'
import Icon from 'ui/components/layout/icon'
import InOutTransition, {
transitionStartStates,
} from 'ui/components/widgets/in-out-transition'
import {
useSkiplinkElementFocusing,
useSkiplinkTargetFocusing,
} from 'ui/hooks/focus-helper-hooks'
import { useSeamlyHasConversation } from 'ui/hooks/seamly-api-hooks'
import { useSeamlyStateContext } from 'ui/hooks/seamly-hooks'
import {
useSeamlyCurrentAgent,
useSeamlyUnreadCount,
} from 'ui/hooks/seamly-state-hooks'
const ButtonIcon = () => {
const startChatIcon = useStartChatIcon()
const currentAgent = useSeamlyCurrentAgent()
const hasError = useSelector(selectHasError)
const isActiveConversation = currentAgent && !hasError
const src = isActiveConversation ? currentAgent.avatar : startChatIcon
return src ? (
) : (
)
}
const WindowOpenButton = ({ onClick }) => {
const hasConversation = useSeamlyHasConversation()
const { t } = useI18n()
const ariaLabel = hasConversation()
? t('window.openButton.srContinue')
: t('window.openButton.srStart')
const focusSkipLinkELement = useSkiplinkElementFocusing()
const focusSkiplinkTarget = useSkiplinkTargetFocusing()
const { isOpen } = useVisibility()
const { windowOpenButtonId } = useSeamlyStateContext()
const count = useSeamlyUnreadCount()
const handleClick = useCallback(
(event: TargetedMouseEvent) => {
onClick()
if (event.detail > 0) {
// Mouse was used: focus the input element
focusSkiplinkTarget()
} else {
// Keyboard was used: focus the skiplink element instead to improve
// accessibility for keyboard users.
focusSkipLinkELement()
}
},
[focusSkipLinkELement, focusSkiplinkTarget, onClick],
)
return (
)
}
export default WindowOpenButton