1 | import _extends from "@babel/runtime/helpers/esm/extends";
|
2 | import _objectWithoutPropertiesLoose from "@babel/runtime/helpers/esm/objectWithoutPropertiesLoose";
|
3 | var _excluded = ["as", "disabled", "onKeyDown"];
|
4 | import React from 'react';
|
5 | import createChainedFunction from './createChainedFunction';
|
6 |
|
7 | function isTrivialHref(href) {
|
8 | return !href || href.trim() === '#';
|
9 | }
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 | var SafeAnchor = React.forwardRef(function (_ref, ref) {
|
20 | var _ref$as = _ref.as,
|
21 | Component = _ref$as === void 0 ? 'a' : _ref$as,
|
22 | disabled = _ref.disabled,
|
23 | onKeyDown = _ref.onKeyDown,
|
24 | props = _objectWithoutPropertiesLoose(_ref, _excluded);
|
25 |
|
26 | var handleClick = function handleClick(event) {
|
27 | var href = props.href,
|
28 | onClick = props.onClick;
|
29 |
|
30 | if (disabled || isTrivialHref(href)) {
|
31 | event.preventDefault();
|
32 | }
|
33 |
|
34 | if (disabled) {
|
35 | event.stopPropagation();
|
36 | return;
|
37 | }
|
38 |
|
39 | if (onClick) {
|
40 | onClick(event);
|
41 | }
|
42 | };
|
43 |
|
44 | var handleKeyDown = function handleKeyDown(event) {
|
45 | if (event.key === ' ') {
|
46 | event.preventDefault();
|
47 | handleClick(event);
|
48 | }
|
49 | };
|
50 |
|
51 | if (isTrivialHref(props.href)) {
|
52 | props.role = props.role || 'button';
|
53 |
|
54 |
|
55 | props.href = props.href || '#';
|
56 | }
|
57 |
|
58 | if (disabled) {
|
59 | props.tabIndex = -1;
|
60 | props['aria-disabled'] = true;
|
61 | }
|
62 |
|
63 | return React.createElement(Component, _extends({
|
64 | ref: ref
|
65 | }, props, {
|
66 | onClick: handleClick,
|
67 | onKeyDown: createChainedFunction(handleKeyDown, onKeyDown)
|
68 | }));
|
69 | });
|
70 | SafeAnchor.displayName = 'SafeAnchor';
|
71 | export default SafeAnchor; |
\ | No newline at end of file |