@symply.io/basic-components 1.4.4-beta.1 → 1.4.4-beta.3

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/README.md CHANGED
@@ -812,6 +812,8 @@ import SocialInput from '@symply.io/basic-components/SocialInput';
812
812
 
813
813
  Tabs group.
814
814
 
815
+ It is extended from `@mui/material/Tabs`, so it includes all properties of `@mui/material/Tabs`.
816
+
815
817
  <h5>Import</h5>
816
818
 
817
819
  ```typescript
@@ -822,13 +824,12 @@ import TabGroup from '@symply.io/basic-components/TabGroup';
822
824
 
823
825
  <h5>Props</h5>
824
826
 
825
- | Name | Type | Default | Required | Description |
826
- | --------------- | --------------------------------------------- | ------------ | -------- | ------------------------------------------------------------ |
827
- | currentTabIndex | number | 0 | false | the tab index from the higher component |
828
- | onTabChange | func | | true | Callback fired when the `Tab` is changed.<br />**Signature:**<br/>`function(index: number) => void`<br/>*index:* The selected index of the `Tab` element. |
829
- | tabs | Array\<{ text: string; disabled?: boolean }\> | | true | All tab items. |
830
- | textColor | 'primary' \| 'secondary' | 'primary' | false | The color of the tab text. |
831
- | variant | 'standard' \| 'scrollable' \| 'fullWidth' | 'scrollable' | false | Determines additional display behavior of the tabs |
827
+ | Name | Type | Default | Required | Description |
828
+ | --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | -------- | ------------------------------------------------------------ |
829
+ | currentTabIndex | number | 0 | true | the tab index from the higher component |
830
+ | onChange | func | If `onChange` is undefined and the `url` of tab is defined, we will navigate to that url when the tab changed | false | Callback fired when the `Tab` is changed.<br />**Signature:**<br/>`function(args: {tabIndex: number; url?: string}) => void`<br/>*tabIndex:* The selected index of the `Tab` element.<br/>*url*: The url for navigating. |
831
+ | tabs | Array\<{ key: string; text: string; url?: string; disabled?: boolean }\> | | true | All tab items. |
832
+ | variant | 'standard' \| 'scrollable' \| 'fullWidth' | 'scrollable' | false | Determines additional display behavior of the tabs |
832
833
 
833
834
 
834
835
 
@@ -1,5 +1,4 @@
1
- /// <reference types="react" />
2
1
  import type { TabGroupProps } from "./types";
3
- declare const TabGroup: import("react").ForwardRefExoticComponent<TabGroupProps & import("react").RefAttributes<unknown>>;
2
+ declare function TabGroup(props: TabGroupProps): JSX.Element;
4
3
  export default TabGroup;
5
4
  export type { TabGroupProps };
package/TabGroup/index.js CHANGED
@@ -9,34 +9,43 @@ var __assign = (this && this.__assign) || function () {
9
9
  };
10
10
  return __assign.apply(this, arguments);
11
11
  };
12
+ var __rest = (this && this.__rest) || function (s, e) {
13
+ var t = {};
14
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
15
+ t[p] = s[p];
16
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
17
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
18
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
19
+ t[p[i]] = s[p[i]];
20
+ }
21
+ return t;
22
+ };
12
23
  import { jsx as _jsx } from "react/jsx-runtime";
13
- import { useState, useEffect, forwardRef, useImperativeHandle } from "react";
24
+ import { useCallback } from "react";
25
+ import { navigate } from "@reach/router";
14
26
  import Tab from "@mui/material/Tab";
15
27
  import Tabs from "@mui/material/Tabs";
16
28
  import useMediaQuery from "@mui/material/useMediaQuery";
17
29
  import ThemeProvider from "@mui/material/styles/ThemeProvider";
18
30
  import useCustomTheme from "../useCustomTheme";
19
- var TabGroup = forwardRef(function (props, ref) {
20
- var tabs = props.tabs, _a = props.textColor, textColor = _a === void 0 ? "primary" : _a, _b = props.variant, variant = _b === void 0 ? "scrollable" : _b, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, onTabChange = props.onTabChange, outerTabIndex = props.currentTabIndex;
31
+ function TabGroup(props) {
32
+ var tabs = props.tabs, _a = props.textColor, textColor = _a === void 0 ? "primary" : _a, _b = props.variant, variant = _b === void 0 ? "scrollable" : _b, primaryColor = props.primaryColor, secondaryColor = props.secondaryColor, currentTabIndex = props.currentTabIndex, onChange = props.onChange, rest = __rest(props, ["tabs", "textColor", "variant", "primaryColor", "secondaryColor", "currentTabIndex", "onChange"]);
21
33
  var theme = useCustomTheme({ primaryColor: primaryColor, secondaryColor: secondaryColor });
22
34
  var mobileViewport = useMediaQuery(theme.breakpoints.down("md"));
23
- var _c = useState(outerTabIndex || 0), currentTabIndex = _c[0], setCurrentTabIndex = _c[1];
24
- var onClick = function (index) {
25
- setCurrentTabIndex(index);
26
- };
27
- useImperativeHandle(ref, function () { return ({
28
- tabIndex: currentTabIndex
29
- }); });
30
- useEffect(function () {
31
- if (outerTabIndex !== undefined && outerTabIndex !== currentTabIndex) {
32
- setCurrentTabIndex(outerTabIndex);
35
+ var onTabClick = useCallback(function (_, val) {
36
+ var tab = tabs[val];
37
+ if (tab) {
38
+ var url = tab.url;
39
+ if (onChange) {
40
+ onChange({ tabIndex: val, url: url });
41
+ }
42
+ else if (url) {
43
+ navigate(url);
44
+ }
33
45
  }
34
- }, [outerTabIndex, currentTabIndex]);
35
- return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsx(Tabs, __assign({ value: currentTabIndex, TabIndicatorProps: { hidden: true }, variant: mobileViewport ? "scrollable" : variant, textColor: textColor, onChange: function (_, val) {
36
- onClick(val);
37
- onTabChange(val);
38
- } }, { children: tabs.map(function (tab, index) {
39
- var text = tab.text, _a = tab.disabled, disabled = _a === void 0 ? false : _a;
46
+ }, [tabs]);
47
+ return (_jsx(ThemeProvider, __assign({ theme: theme }, { children: _jsx(Tabs, __assign({ value: currentTabIndex, TabIndicatorProps: { hidden: true }, variant: mobileViewport ? "scrollable" : variant, textColor: textColor, onChange: onTabClick }, rest, { children: tabs.map(function (tab, index) {
48
+ var key = tab.key, text = tab.text, _a = tab.disabled, disabled = _a === void 0 ? false : _a;
40
49
  var active = currentTabIndex === index;
41
50
  return (_jsx(Tab, { disableFocusRipple: true, disableRipple: true, label: text, disabled: disabled, sx: {
42
51
  cursor: disabled ? "not-allowed" : "pointer",
@@ -44,7 +53,7 @@ var TabGroup = forwardRef(function (props, ref) {
44
53
  background: active ? "#fff" : undefined,
45
54
  borderRadius: active ? theme.spacing(0.5) : undefined,
46
55
  boxShadow: active ? "0px 4px 6px #acc1c2" : undefined
47
- } }, index));
56
+ } }, key || index));
48
57
  }) })) })));
49
- });
58
+ }
50
59
  export default TabGroup;
@@ -1,14 +1,17 @@
1
1
  import { CSSProperties } from "react";
2
2
  import { TabsProps } from "@mui/material/Tabs";
3
- export interface TabGroupProps {
4
- textColor?: TabsProps["textColor"];
3
+ export interface TabGroupProps extends Omit<TabsProps, "onChange"> {
5
4
  tabs: Array<{
5
+ key: string;
6
6
  text: string;
7
7
  disabled?: boolean;
8
+ url?: string;
8
9
  }>;
9
- variant?: TabsProps["variant"];
10
- currentTabIndex?: number;
10
+ currentTabIndex: number;
11
11
  primaryColor?: CSSProperties["color"];
12
12
  secondaryColor?: CSSProperties["color"];
13
- onTabChange: (index: number) => void;
13
+ onChange?: (args: {
14
+ tabIndex: number;
15
+ url?: string;
16
+ }) => unknown;
14
17
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symply.io/basic-components",
3
- "version": "1.4.4-beta.1",
3
+ "version": "1.4.4-beta.3",
4
4
  "description": "Basic and reusable components for all frontend of Symply apps",
5
5
  "keywords": [
6
6
  "react",