mirror of
https://github.com/Stremio/stremio-web.git
synced 2026-03-13 10:36:03 +00:00
54 lines
1.6 KiB
JavaScript
54 lines
1.6 KiB
JavaScript
const React = require('react');
|
|
const PropTypes = require('prop-types');
|
|
const classnames = require('classnames');
|
|
const styles = require('./styles');
|
|
|
|
const Button = React.forwardRef(({ className, href, disabled, children, ...props }, ref) => {
|
|
const onKeyDown = React.useCallback((event) => {
|
|
if (typeof props.onKeyDown === 'function') {
|
|
props.onKeyDown(event);
|
|
}
|
|
|
|
if (event.key === 'Enter' && !event.nativeEvent.buttonClickPrevented) {
|
|
event.currentTarget.click();
|
|
}
|
|
}, [props.onKeyDown]);
|
|
const onMouseDown = React.useCallback((event) => {
|
|
if (typeof props.onMouseDown === 'function') {
|
|
props.onMouseDown(event);
|
|
}
|
|
|
|
if (!event.nativeEvent.buttonBlurPrevented) {
|
|
event.preventDefault();
|
|
if (document.activeElement instanceof HTMLElement) {
|
|
document.activeElement.blur();
|
|
}
|
|
}
|
|
}, [props.onMouseDown]);
|
|
return React.createElement(
|
|
typeof href === 'string' && href.length > 0 ? 'a' : 'div',
|
|
{
|
|
tabIndex: 0,
|
|
...props,
|
|
ref,
|
|
className: classnames(className, styles['button-container'], { 'disabled': disabled }),
|
|
href,
|
|
onKeyDown,
|
|
onMouseDown
|
|
},
|
|
children
|
|
);
|
|
});
|
|
|
|
Button.displayName = 'Button';
|
|
|
|
Button.propTypes = {
|
|
className: PropTypes.string,
|
|
href: PropTypes.string,
|
|
disabled: PropTypes.bool,
|
|
children: PropTypes.node,
|
|
onKeyDown: PropTypes.func,
|
|
onMouseDown: PropTypes.func
|
|
};
|
|
|
|
module.exports = Button;
|