@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 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,6 @@
1
1
  {
2
2
  "name": "@skbkontur/side-menu",
3
- "version": "1.0.2",
3
+ "version": "1.1.0",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "registry": "https://registry.npmjs.org/"
@@ -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 (props, ref) {
5
- return React.createElement(ClickableElement, __assign({}, props, { ref: ref, element: 'button' }));
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 ? 'id' : 'generatedParentId';
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
  };