@skbkontur/side-menu 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -0
- package/README.md +24 -2
- package/package.json +1 -1
- package/src/SideMenuItem/SideMenuItem.d.ts +1 -0
- package/src/SideMenuItem/SideMenuItem.js +4 -3
- package/src/SideMenuLink/SideMenuLink.d.ts +1 -0
- package/src/SideMenuLink/SideMenuLink.js +2 -2
- package/src/internal/ClickableElement.d.ts +1 -1
- package/src/internal/ClickableElement.js +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,17 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.1.0](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@1.0.2...@skbkontur/side-menu@1.1.0) (2023-08-07)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* **SideMenu:** add component prop to link ([2beb8b3](https://git.skbkontur.ru/ui/ui-parking/commits/2beb8b3cbd81830542554a18fbc26a9a7b2119b0))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
6
17
|
## [1.0.2](https://git.skbkontur.ru/ui/ui-parking/compare/@skbkontur/side-menu@1.0.1...@skbkontur/side-menu@1.0.2) (2023-08-04)
|
|
7
18
|
|
|
8
19
|
|
package/README.md
CHANGED
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
### Бета-версия компонента SideMenu
|
|
2
|
-
|
|
3
1
|
SideMenu в фирменном стиле (макеты живут [здесь](https://www.figma.com/file/XA8Ytcx8bxemYAkF7eGVSv/%D0%9A%D0%BE%D0%BC%D0%BF%D0%BE%D0%BD%D0%B5%D0%BD%D1%82-%D0%BB%D0%B5%D0%B2%D0%BE%D0%B3%D0%BE-%D0%BC%D0%B5%D0%BD%D1%8E?node-id=0%3A1)).
|
|
4
2
|
|
|
5
3
|
[Пример в песочнице](https://codesandbox.io/s/competent-wiles-k85wlm)
|
|
@@ -591,6 +589,30 @@ import { useHistory } from "react-router-dom";
|
|
|
591
589
|
|
|
592
590
|
При необходимости вы можете повторить часть этой логики в своей обёртке.
|
|
593
591
|
|
|
592
|
+
---
|
|
593
|
+
|
|
594
|
+
Также можно использовать `SideMenu.Link` передав туда компонент ссылки, например обертку со ссылкой из `react-router-dom`:
|
|
595
|
+
|
|
596
|
+
```ts static
|
|
597
|
+
import { Link } from 'react-router-dom';
|
|
598
|
+
|
|
599
|
+
interface SideMenuReactRouterLinkProps extends SideMenuLinkProps {
|
|
600
|
+
href: string;
|
|
601
|
+
}
|
|
602
|
+
|
|
603
|
+
const LinkWrapper = React.forwardRef<HTMLAnchorElement, SideMenuReactRouterLinkProps>(({ href, ...rest }, ref) => (
|
|
604
|
+
<Link {...rest} to={href} ref={ref} />
|
|
605
|
+
));
|
|
606
|
+
|
|
607
|
+
const SideMenuReactRouterLink: React.FunctionComponent<SideMenuReactRouterLinkProps> = (props) => (
|
|
608
|
+
<SideMenu.Link {...props} component={LinkWrapper} />
|
|
609
|
+
);
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
Если вы используете кастомную ссылку, то убедитесь, что она прокидывает `ref` и остальные пропсы в корневой элемент.
|
|
613
|
+
|
|
614
|
+
Пример в [песочнице](https://codesandbox.io/s/side-menu-react-router-dom-vtv6r8)
|
|
615
|
+
|
|
594
616
|
#### Пример кастомизации
|
|
595
617
|
|
|
596
618
|
```jsx harmony
|
package/package.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { CommonClickableElementProps } from '../internal/ClickableElement';
|
|
3
3
|
export interface SideMenuItemProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, CommonClickableElementProps {
|
|
4
|
+
component?: React.ComponentType<any>;
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
6
7
|
* Элемент списка
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { __assign } from "tslib";
|
|
1
|
+
import { __assign, __rest } from "tslib";
|
|
2
2
|
import React, { forwardRef } from 'react';
|
|
3
3
|
import { ClickableElement } from '../internal/ClickableElement';
|
|
4
|
-
var SideMenuItemInner = forwardRef(function (
|
|
5
|
-
|
|
4
|
+
var SideMenuItemInner = forwardRef(function (_a, ref) {
|
|
5
|
+
var component = _a.component, rest = __rest(_a, ["component"]);
|
|
6
|
+
return React.createElement(ClickableElement, __assign({}, rest, { ref: ref, element: component !== null && component !== void 0 ? component : 'button' }));
|
|
6
7
|
});
|
|
7
8
|
SideMenuItemInner.displayName = 'SideMenuItem';
|
|
8
9
|
/**
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { CommonClickableElementProps } from '../internal/ClickableElement';
|
|
3
3
|
export interface SideMenuLinkProps extends React.AnchorHTMLAttributes<HTMLAnchorElement>, CommonClickableElementProps {
|
|
4
|
+
component?: React.ComponentType<any>;
|
|
4
5
|
}
|
|
5
6
|
/**
|
|
6
7
|
* Ссылка для `SideMenu`
|
|
@@ -5,8 +5,8 @@ import { jsStyles } from './SideMenuLink.styles';
|
|
|
5
5
|
import { cx } from '@skbkontur/react-ui/lib/theming/Emotion';
|
|
6
6
|
var SideMenuLinkInner = forwardRef(function (_a, ref) {
|
|
7
7
|
var _b;
|
|
8
|
-
var className = _a.className, rest = __rest(_a, ["className"]);
|
|
9
|
-
return React.createElement(ClickableElement, __assign({}, rest, { ref: ref, element: 'a', className: cx((_b = {}, _b[jsStyles.link()] = true, _b), className) }));
|
|
8
|
+
var className = _a.className, component = _a.component, rest = __rest(_a, ["className", "component"]);
|
|
9
|
+
return (React.createElement(ClickableElement, __assign({}, rest, { ref: ref, element: component !== null && component !== void 0 ? component : 'a', className: cx((_b = {}, _b[jsStyles.link()] = true, _b), className) })));
|
|
10
10
|
});
|
|
11
11
|
SideMenuLinkInner.displayName = 'SideMenuLink';
|
|
12
12
|
/**
|
|
@@ -21,7 +21,7 @@ export interface CommonClickableElementProps extends CommonProps {
|
|
|
21
21
|
_isBackButton?: boolean;
|
|
22
22
|
}
|
|
23
23
|
export interface ClickableElementProps extends CommonClickableElementProps {
|
|
24
|
-
element: 'a' | 'button'
|
|
24
|
+
element: 'a' | 'button' | React.ComponentType<any>;
|
|
25
25
|
href?: string;
|
|
26
26
|
onClick?: React.EventHandler<React.MouseEvent<Element>>;
|
|
27
27
|
onKeyDown?: React.EventHandler<React.KeyboardEvent<Element>>;
|
|
@@ -25,7 +25,7 @@ var ClickableElement = forwardRef(function (_a, ref) {
|
|
|
25
25
|
var isOpened = useOpenedState(id || rest.href, _generatedId, context.openedParents, isActive, children, context.isSeparatedMenuShown, context.isMobile && context.isSeparatedMenu);
|
|
26
26
|
var hasChildren = function (id, generatedId) {
|
|
27
27
|
var _a, _b;
|
|
28
|
-
var parentId = id ? '
|
|
28
|
+
var parentId = id ? 'parentId' : 'generatedParentId';
|
|
29
29
|
var childId = id !== null && id !== void 0 ? id : generatedId;
|
|
30
30
|
return (_b = (_a = context.flattedArrayOfAllElements) === null || _a === void 0 ? void 0 : _a.filter(function (el) { return el[parentId] === childId; })) === null || _b === void 0 ? void 0 : _b.length;
|
|
31
31
|
};
|