kafka-ui/kafka-ui-react-app/src/components/common/JSONViewer/DynamicButton.tsx
GneyHabub f0b1e9c7d9 Refactor
Abstract dynamic button to a separate component;
Move buttons to the JSONViewer;
Move data-saving to a hook;
2021-03-15 11:04:21 +03:00

44 lines
905 B
TypeScript

import React from 'react';
interface ButtonProps {
callback: () => void;
classes?: string;
title: string;
style?: { [key: string]: string | number };
text: {
default: string;
dynamic: string;
};
}
const DynamicButton: React.FC<ButtonProps> = ({
callback,
classes,
title,
style,
text,
children,
}) => {
const [buttonText, setButtonText] = React.useState(text.default);
let timeout: number;
const clickHandler = () => {
callback();
setButtonText(text.dynamic);
timeout = window.setTimeout(() => setButtonText(text.default), 3000);
};
React.useEffect(() => () => window.clearTimeout(timeout), [callback]);
return (
<button
className={classes}
title={title}
type="button"
style={style}
onClick={clickHandler}
>
{children}
<span>{buttonText}</span>
</button>
);
};
export default DynamicButton;