src/django-spa/cdk/Controls/Button/Button.tsx
import React from 'react'
import { Button as ChakraButton } from '@chakra-ui/react'
import type { ButtonProps } from '@chakra-ui/button'
import { useIsMounted, usePropState } from '@cdk/Hooks'
import { ensurePromise } from '../../../../DetailView/utils/dataAccess'
export const Button = (props: ButtonProps): JSX.Element => {
const { onClick, isDisabled: initialDisabled } = props
const [isDisabled, setIsDisabled] = usePropState<boolean>(initialDisabled || false)
const isMountedRef = useIsMounted()
const handleClick = async (e: React.MouseEvent<HTMLButtonElement, MouseEvent>): Promise<void> => {
if (onClick) {
setIsDisabled(true)
return ensurePromise(onClick(e)).finally(() => {
if (isMountedRef.current) {
setIsDisabled(false)
}
})
}
}
// Подавлено, так как компонент-обёртка
// eslint-disable-next-line react/jsx-props-no-spreading
return <ChakraButton {...props} isDisabled={isDisabled} onClick={handleClick} />
}