'use client'; /* eslint-disable jsdoc/require-jsdoc */ import * as React from 'react'; import { Icon24Cancel } from '@vkontakte/icons'; import { mergeCalls } from '../../lib/mergeCalls'; import { clickByKeyboardHandler } from '../../lib/utils'; import type { HTMLAttributesWithRootRef } from '../../types'; import { RootComponent } from '../RootComponent/RootComponent'; import { Icon48CancelCircle } from './Icon48CancelCircle'; import { Icon48DoneOutline } from './Icon48DoneOutline'; import { ScreenSpinnerContext } from './context'; import { type ScreenSpinnerProps } from './types'; import styles from './ScreenSpinner.module.css'; type ScreenSpinnerSwapIconProps = HTMLAttributesWithRootRef & { cancelLabel?: ScreenSpinnerProps['cancelLabel']; }; const ScreenSpinnerCancelIcon = ({ onKeyDown, 'aria-label': ariaLabel = 'Отменить', ...restProps }: ScreenSpinnerSwapIconProps) => { const handlers = mergeCalls( { onKeyDown: clickByKeyboardHandler }, { onKeyDown, }, ); let clickableProps: React.HTMLAttributes = { ...handlers, 'tabIndex': 0, 'role': 'button', 'aria-label': ariaLabel, }; return ( ); }; export const ScreenSpinnerSwapIcon = ({ cancelLabel, ...restProps }: ScreenSpinnerSwapIconProps) => { const { state, customIcon } = React.useContext(ScreenSpinnerContext); if (state === 'cancelable') { return ; } const getContent = () => { if (state === 'custom') { return customIcon; } const Icon = { loading: () => null, done: Icon48DoneOutline, error: Icon48CancelCircle, }[state]; return ; }; return ( {getContent()} ); };