@zohodesk/components 1.2.39 → 1.2.41

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.
@@ -11,6 +11,10 @@ var _react = _interopRequireWildcard(require("react"));
11
11
 
12
12
  var _useEffectCallOnlyAfterState = _interopRequireDefault(require("@zohodesk/hooks/es/utils/useEffectCallOnlyAfterState"));
13
13
 
14
+ var _TextBoxIcon = _interopRequireDefault(require("../TextBoxIcon/TextBoxIcon"));
15
+
16
+ var _EmptySearch = _interopRequireDefault(require("@zohodesk/svg/lib/emptystate/version3/EmptySearch"));
17
+
14
18
  var _Tab = _interopRequireDefault(require("./Tab"));
15
19
 
16
20
  var _defaultProps = require("./props/defaultProps");
@@ -86,6 +90,11 @@ var Tabs = function Tabs(props) {
86
90
  tabKeys = _useState8[0],
87
91
  setTabKeys = _useState8[1];
88
92
 
93
+ var _useState9 = (0, _react.useState)(''),
94
+ _useState10 = _slicedToArray(_useState9, 2),
95
+ searchValue = _useState10[0],
96
+ setSearchValue = _useState10[1];
97
+
89
98
  var tabsObserver = (0, _react.useRef)(new _ResizeObserver["default"](onResize));
90
99
  var tabObserver = (0, _react.useRef)({});
91
100
  var highlight = (0, _react.useRef)(null);
@@ -114,7 +123,60 @@ var Tabs = function Tabs(props) {
114
123
  childType = props.childType,
115
124
  containerClass = props.containerClass,
116
125
  dataSelectorId = props.dataSelectorId,
117
- selectedTab = props.selectedTab;
126
+ selectedTab = props.selectedTab,
127
+ showTitleInMoreOptions = props.showTitleInMoreOptions,
128
+ searchErrorText = props.searchErrorText,
129
+ placeHolderText = props.placeHolderText,
130
+ searchBoxSize = props.searchBoxSize,
131
+ isPopupOpen = props.isPopupOpen,
132
+ closePopupOnly = props.closePopupOnly;
133
+
134
+ function handleChange(value, e) {
135
+ setSearchValue(value);
136
+ }
137
+
138
+ function handleSearchValueClear(e) {
139
+ setSearchValue('');
140
+ }
141
+
142
+ function getMoreList(_ref) {
143
+ var moreTabs = _ref.moreTabs;
144
+ var validElements = [];
145
+
146
+ _react["default"].Children.map(moreTabs, function (child) {
147
+ var isValidElement = /*#__PURE__*/_react["default"].isValidElement(child);
148
+
149
+ if (isValidElement) {
150
+ validElements.push(child.props);
151
+ }
152
+ });
153
+
154
+ return validElements;
155
+ }
156
+
157
+ function handleFilterSuggestions(_ref2) {
158
+ var moreTabs = _ref2.moreTabs;
159
+ var options = getMoreList({
160
+ moreTabs: moreTabs
161
+ });
162
+ var filteredOptions = options.filter(function (list) {
163
+ var text = list.text,
164
+ title = list.title;
165
+ var value = text ? text : showTitleInMoreOptions ? title : '';
166
+ return value.toLowerCase().includes(searchValue.toLowerCase());
167
+ });
168
+ return filteredOptions;
169
+ }
170
+
171
+ function renderEmptyState() {
172
+ return /*#__PURE__*/_react["default"].createElement("div", {
173
+ className: _v1TabsModule["default"].emptyStateContainer
174
+ }, /*#__PURE__*/_react["default"].createElement(_EmptySearch["default"], {
175
+ size: "small"
176
+ }), /*#__PURE__*/_react["default"].createElement("div", {
177
+ className: _v1TabsModule["default"].emptyStateTitle
178
+ }, searchErrorText));
179
+ }
118
180
 
119
181
  function onTabResize(size, target) {
120
182
  var newDim = Object.assign({}, tabDimensions);
@@ -167,6 +229,11 @@ var Tabs = function Tabs(props) {
167
229
  }
168
230
  };
169
231
  }, []);
232
+ (0, _react.useEffect)(function () {
233
+ if (searchValue.length) {
234
+ handleSearchValueClear();
235
+ }
236
+ }, [isPopupOpen]);
170
237
 
171
238
  function setMaxDim() {
172
239
  var totalDimension = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
@@ -393,6 +460,7 @@ var Tabs = function Tabs(props) {
393
460
 
394
461
  e.preventDefault();
395
462
  onSelect(tab);
463
+ closePopupOnly();
396
464
  }
397
465
 
398
466
  function onScrollLocal(e) {
@@ -407,8 +475,8 @@ var Tabs = function Tabs(props) {
407
475
  togglePopup(e, boxPosition);
408
476
  }
409
477
 
410
- function responsiveFunc(_ref) {
411
- var mediaQueryOR = _ref.mediaQueryOR;
478
+ function responsiveFunc(_ref3) {
479
+ var mediaQueryOR = _ref3.mediaQueryOR;
412
480
  return {
413
481
  tabletMode: mediaQueryOR([{
414
482
  maxWidth: 700
@@ -445,8 +513,14 @@ var Tabs = function Tabs(props) {
445
513
  _customProps$ListItem = customProps.ListItemProps,
446
514
  ListItemProps = _customProps$ListItem === void 0 ? {} : _customProps$ListItem,
447
515
  _customProps$MoreButt = customProps.MoreButtonProps,
448
- MoreButtonProps = _customProps$MoreButt === void 0 ? {} : _customProps$MoreButt;
516
+ MoreButtonProps = _customProps$MoreButt === void 0 ? {} : _customProps$MoreButt,
517
+ _customProps$TextBoxI = customProps.TextBoxIconProps,
518
+ TextBoxIconProps = _customProps$TextBoxI === void 0 ? {} : _customProps$TextBoxI;
449
519
  var popupClass = align === 'vertical' ? _v1TabsModule["default"][position] ? _v1TabsModule["default"][position] : '' : '';
520
+ var moreTabsListItems = handleFilterSuggestions({
521
+ moreTabs: moreTabs
522
+ });
523
+ var hasSearch = moreTabs.length > 4;
450
524
  return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, _react["default"].Children.map(mainTabs, function (child) {
451
525
  if (!child) {
452
526
  return null;
@@ -495,8 +569,8 @@ var Tabs = function Tabs(props) {
495
569
  })), isPopupOpen && /*#__PURE__*/_react["default"].createElement(_CustomResponsive.ResponsiveReceiver, {
496
570
  query: responsiveFunc,
497
571
  responsiveId: "Helmet"
498
- }, function (_ref2) {
499
- var tabletMode = _ref2.tabletMode;
572
+ }, function (_ref4) {
573
+ var tabletMode = _ref4.tabletMode;
500
574
  return /*#__PURE__*/_react["default"].createElement(_ResponsiveDropBox["default"], _extends({
501
575
  isActive: isPopupReady,
502
576
  isAnimate: true,
@@ -512,29 +586,39 @@ var Tabs = function Tabs(props) {
512
586
  isResponsivePadding: true,
513
587
  needFocusScope: true,
514
588
  onClose: togglePopupLocal,
589
+ onClick: removeClose,
515
590
  dataId: "".concat(dataId, "_dropbox")
516
- }), getCustomDropBoxHeaderPlaceHolder && getCustomDropBoxHeaderPlaceHolder(props), /*#__PURE__*/_react["default"].createElement(_Layout.Box, {
591
+ }), getCustomDropBoxHeaderPlaceHolder && getCustomDropBoxHeaderPlaceHolder(props), hasSearch ? /*#__PURE__*/_react["default"].createElement(_Layout.Box, {
592
+ className: _v1TabsModule["default"].search
593
+ }, /*#__PURE__*/_react["default"].createElement(_TextBoxIcon["default"], _extends({
594
+ placeHolder: placeHolderText,
595
+ onChange: handleChange,
596
+ value: searchValue,
597
+ onClear: handleSearchValueClear,
598
+ size: searchBoxSize,
599
+ customProps: {
600
+ TextBoxProps: {
601
+ 'data-a11y-autofocus': true
602
+ }
603
+ },
604
+ dataId: "".concat(dataId, "_search")
605
+ }, TextBoxIconProps))) : null, /*#__PURE__*/_react["default"].createElement(_Layout.Box, {
517
606
  flexible: true,
518
607
  shrink: true,
519
608
  scroll: "vertical",
520
- className: "".concat(tabletMode ? '' : _v1TabsModule["default"].menuBox, " ").concat(moreBoxClass),
609
+ className: "".concat(_v1TabsModule["default"].listWrapper, " ").concat(tabletMode ? '' : _v1TabsModule["default"].menuBox, " ").concat(moreBoxClass),
521
610
  onScroll: onScrollLocal,
522
611
  dataId: "".concat(dataId, "_Tabs")
523
- }, _react["default"].Children.map(moreTabs, function (child) {
524
- if (!child) {
525
- return null;
526
- }
527
-
528
- var _child$props = child.props,
529
- text = _child$props.text,
530
- id = _child$props.id,
531
- title = _child$props.title,
532
- isLink = _child$props.isLink,
533
- href = _child$props.href,
534
- children = _child$props.children,
535
- dataId = _child$props.dataId;
612
+ }, moreTabsListItems.length ? moreTabsListItems.map(function (data) {
613
+ var text = data.text,
614
+ id = data.id,
615
+ title = data.title,
616
+ isLink = data.isLink,
617
+ href = data.href,
618
+ children = data.children,
619
+ dataId = data.dataId;
536
620
  var value = text ? text : showTitleInMoreOptions ? title : null;
537
- return /*#__PURE__*/_react["default"].isValidElement(child) && /*#__PURE__*/_react["default"].createElement(_ListItem["default"], _extends({
621
+ return /*#__PURE__*/_react["default"].createElement(_ListItem["default"], _extends({
538
622
  key: id,
539
623
  value: value,
540
624
  onClick: moreTabSelect,
@@ -549,7 +633,7 @@ var Tabs = function Tabs(props) {
549
633
  target: "self",
550
634
  dataId: "".concat(dataId, "_Tab")
551
635
  }, ListItemProps), !showTitleInMoreOptions ? children : null);
552
- })));
636
+ }) : renderEmptyState()));
553
637
  })) : null);
554
638
  }
555
639
 
@@ -39,7 +39,10 @@ var Tabs_defaultProps = {
39
39
  iconSize: '7',
40
40
  containerClass: '',
41
41
  customProps: {},
42
- dataSelectorId: 'tabs'
42
+ dataSelectorId: 'tabs',
43
+ searchBoxSize: 'small',
44
+ searchErrorText: 'No results',
45
+ placeHolderText: 'Search'
43
46
  };
44
47
  exports.Tabs_defaultProps = Tabs_defaultProps;
45
48
  var TabWrapper_defaultProps = {
@@ -97,12 +97,17 @@ var Tabs_propTypes = {
97
97
  getTargetRef: _propTypes["default"].func,
98
98
  containerClass: _propTypes["default"].string,
99
99
  customProps: _propTypes["default"].shape({
100
+ TextBoxIconProps: _propTypes["default"].object,
100
101
  DropBoxProps: _propTypes["default"].object,
101
102
  ListItemProps: _propTypes["default"].object,
102
103
  MoreButtonProps: _propTypes["default"].object
103
104
  }),
104
105
  getCustomDropBoxHeaderPlaceHolder: _propTypes["default"].func,
105
- dataSelectorId: _propTypes["default"].string
106
+ dataSelectorId: _propTypes["default"].string,
107
+ placeHolderText: _propTypes["default"].string,
108
+ searchBoxSize: _propTypes["default"].string,
109
+ searchErrorText: _propTypes["default"].string,
110
+ closePopupOnly: _propTypes["default"].func
106
111
  };
107
112
  exports.Tabs_propTypes = Tabs_propTypes;
108
113
  var TabWrapper_propTypes = {
@@ -123,15 +123,45 @@
123
123
  .bottomRightToLeft,
124
124
  .topRightToLeft,
125
125
  .bottomCenterToLeft {
126
- right: calc(var(--tab_position_gap) * -1);
126
+ right: calc(var(--tab_position_gap) * -1);
127
127
  }
128
128
 
129
129
  .bottomLeftToRight,
130
130
  .topLeftToRight,
131
131
  .bottomCenterToRight {
132
- left: calc(var(--tab_position_gap) * -1);
132
+ left: calc(var(--tab_position_gap) * -1);
133
133
  }
134
134
 
135
135
  .hidden {
136
136
  visibility: hidden;
137
+ }
138
+
139
+ .search {
140
+ padding: 0 var(--zd_size20) 0 ;
141
+ }
142
+
143
+ .emptyStateContainer {
144
+ padding-bottom: var(--zd_size15) ;
145
+ }
146
+
147
+ .emptyStateTitle {
148
+ font-family: var(--zd_semibold);
149
+ word-wrap: break-word;
150
+ font-size: var(--zd_font_size16) ;
151
+ max-width: var(--zd_size430) ;
152
+ text-align: center;
153
+ }
154
+
155
+ [dir=ltr] .emptyStateTitle {
156
+ margin-left: auto ;
157
+ margin-right: auto ;
158
+ }
159
+
160
+ [dir=rtl] .emptyStateTitle {
161
+ margin-right: auto ;
162
+ margin-left: auto ;
163
+ }
164
+
165
+ .listWrapper {
166
+ padding-top: var(--zd_size10) ;
137
167
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zohodesk/components",
3
- "version": "1.2.39",
3
+ "version": "1.2.41",
4
4
  "main": "es/index.js",
5
5
  "module": "es/index.js",
6
6
  "private": false,
@@ -42,7 +42,8 @@
42
42
  "postpublish": "node postPublish.js",
43
43
  "report": "react-cli publish:report",
44
44
  "test": "react-cli test",
45
- "snap-update": "npm run test -- -u",
45
+ "test-clean": "react-cli clean coverage",
46
+ "snap-update": "npm run test-clean && npm run test -- -u",
46
47
  "sstest": "npm run init && react-cli sstest",
47
48
  "build:external": "npm run clean && npm run init && npm run docsjs:build && npm run build:externalDocCopy && react-cli build:component:umd && npm run externalDocHTMLChange",
48
49
  "download": "react-cli clean ./node_modules ./package-lock.json && npm install",
@@ -69,10 +70,10 @@
69
70
  "@zohodesk-private/react-prop-validator": "1.2.3",
70
71
  "@zohodesk/a11y": "2.2.3",
71
72
  "@zohodesk/docstool": "1.0.0-alpha-2",
72
- "@zohodesk/hooks": "2.0.4",
73
- "@zohodesk/icons": "1.0.50",
74
- "@zohodesk/svg": "1.1.14",
75
- "@zohodesk/utils": "1.3.13",
73
+ "@zohodesk/hooks": "2.0.5",
74
+ "@zohodesk/icons": "1.0.56",
75
+ "@zohodesk/svg": "1.1.19",
76
+ "@zohodesk/utils": "1.3.14",
76
77
  "@zohodesk/variables": "1.0.0",
77
78
  "@zohodesk/virtualizer": "1.0.3",
78
79
  "react-sortable-hoc": "^0.8.3",
@@ -85,14 +86,14 @@
85
86
  "selectn": "1.1.2"
86
87
  },
87
88
  "peerDependencies": {
88
- "@zohodesk/icons": "1.0.50",
89
+ "@zohodesk/icons": "1.0.56",
89
90
  "@zohodesk/variables": "1.0.0",
90
- "@zohodesk/svg": "1.1.14",
91
+ "@zohodesk/svg": "1.1.19",
91
92
  "@zohodesk/virtualizer": "1.0.3",
92
93
  "velocity-react": "1.4.3",
93
94
  "react-sortable-hoc": "^0.8.3",
94
- "@zohodesk/hooks": "2.0.4",
95
- "@zohodesk/utils": "1.3.13",
95
+ "@zohodesk/hooks": "2.0.5",
96
+ "@zohodesk/utils": "1.3.14",
96
97
  "@zohodesk/a11y": "2.2.3"
97
98
  }
98
- }
99
+ }