@toptal/picasso-select 4.0.18-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.43 → 4.0.19-alpha-bill-optimize-select-performance-381ce8200.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"NonNativeSelectOption.d.ts","sourceRoot":"","sources":["../../../src/NonNativeSelectOption/NonNativeSelectOption.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEjE,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,SAAS;IAC3D,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CAClB;AAED,QAAA,MAAM,qBAAqB,qJA0B1B,CAAA;AAID,eAAe,qBAAqB,CAAA"}
1
+ {"version":3,"file":"NonNativeSelectOption.d.ts","sourceRoot":"","sources":["../../../src/NonNativeSelectOption/NonNativeSelectOption.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AACtC,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAEjE,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,SAAS,CAAE,SAAQ,SAAS;IAC3D,QAAQ,CAAC,EAAE,SAAS,CAAA;IACpB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,EAAE,OAAO,CAAA;IACpB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;CAClB;AA4BD,QAAA,MAAM,qBAAqB,qJAY1B,CAAA;AAID,eAAe,qBAAqB,CAAA"}
@@ -11,9 +11,17 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import React from 'react';
13
13
  import { MenuItem } from '@toptal/picasso-menu';
14
- const NonNativeSelectOption = React.memo((_a) => {
14
+ const NonNativeSelectOptionComponent = (_a) => {
15
15
  var { option, selected, highlighted, description, children } = _a, itemProps = __rest(_a, ["option", "selected", "highlighted", "description", "children"]);
16
16
  return (React.createElement(MenuItem, Object.assign({ value: option.value, selected: highlighted, checkmarked: selected, titleCase: false, description: description, role: 'option', "aria-selected": selected, "data-highlighted": highlighted, disabled: option.disabled }, itemProps), children));
17
+ };
18
+ const NonNativeSelectOption = React.memo(NonNativeSelectOptionComponent, (prevProps, nextProps) => {
19
+ return (prevProps.selected === nextProps.selected &&
20
+ prevProps.highlighted === nextProps.highlighted &&
21
+ prevProps.option === nextProps.option &&
22
+ prevProps.option.disabled === nextProps.option.disabled &&
23
+ prevProps.description === nextProps.description &&
24
+ prevProps.children === nextProps.children);
17
25
  });
18
26
  NonNativeSelectOption.displayName = 'NonNativeSelectOption';
19
27
  export default NonNativeSelectOption;
@@ -1 +1 @@
1
- {"version":3,"file":"NonNativeSelectOption.js","sourceRoot":"","sources":["../../../src/NonNativeSelectOption/NonNativeSelectOption.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAY/C,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CACtC,CAAsB,EAOX,EAAE,EAAE;QAPO,EACpB,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,OAEC,EADN,SAAS,cANQ,gEAOrB,CADa;IAEZ,OAAO,CACL,oBAAC,QAAQ,kBACP,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,KAAK,EAChB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,QAAQ,mBACE,QAAQ,sBACL,WAAW,EAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IACrB,SAAS,GAEZ,QAAQ,CACA,CACZ,CAAA;AACH,CAAC,CACF,CAAA;AAED,qBAAqB,CAAC,WAAW,GAAG,uBAAuB,CAAA;AAE3D,eAAe,qBAAqB,CAAA"}
1
+ {"version":3,"file":"NonNativeSelectOption.js","sourceRoot":"","sources":["../../../src/NonNativeSelectOption/NonNativeSelectOption.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAY/C,MAAM,8BAA8B,GAAG,CAAsB,EAOlD,EAAE,EAAE;QAP8C,EAC3D,MAAM,EACN,QAAQ,EACR,WAAW,EACX,WAAW,EACX,QAAQ,OAEC,EADN,SAAS,cAN+C,gEAO5D,CADa;IAEZ,OAAO,CACL,oBAAC,QAAQ,kBACP,KAAK,EAAE,MAAM,CAAC,KAAK,EACnB,QAAQ,EAAE,WAAW,EACrB,WAAW,EAAE,QAAQ,EACrB,SAAS,EAAE,KAAK,EAChB,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,QAAQ,mBACE,QAAQ,sBACL,WAAW,EAC7B,QAAQ,EAAE,MAAM,CAAC,QAAQ,IACrB,SAAS,GAEZ,QAAQ,CACA,CACZ,CAAA;AACH,CAAC,CAAA;AAED,MAAM,qBAAqB,GAAG,KAAK,CAAC,IAAI,CACtC,8BAA8B,EAC9B,CAAC,SAAS,EAAE,SAAS,EAAE,EAAE;IACvB,OAAO,CACL,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;QACzC,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;QACrC,SAAS,CAAC,MAAM,CAAC,QAAQ,KAAK,SAAS,CAAC,MAAM,CAAC,QAAQ;QACvD,SAAS,CAAC,WAAW,KAAK,SAAS,CAAC,WAAW;QAC/C,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ,CAC1C,CAAA;AACH,CAAC,CACF,CAAA;AAED,qBAAqB,CAAC,WAAW,GAAG,uBAAuB,CAAA;AAE3D,eAAe,qBAAqB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"NonNativeSelectOptions.d.ts","sourceRoot":"","sources":["../../../src/NonNativeSelectOptions/NonNativeSelectOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,MAAM,EACN,YAAY,EACZ,WAAW,EACX,SAAS,EACV,MAAM,eAAe,CAAA;AAkCtB,oBAAY,KAAK,GAAG,IAAI,CACtB,WAAW,EACX,UAAU,GAAG,eAAe,GAAG,cAAc,CAC9C,GAAG;IACF,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAAA;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;IAC1D,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF,CAAA;AAkFD,QAAA,MAAM,sBAAsB;0JAYzB,KAAK;;CAiDP,CAAA;AAID,eAAe,sBAAsB,CAAA"}
1
+ {"version":3,"file":"NonNativeSelectOptions.d.ts","sourceRoot":"","sources":["../../../src/NonNativeSelectOptions/NonNativeSelectOptions.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAQtC,OAAO,KAAK,EACV,cAAc,EACd,SAAS,EACT,MAAM,EACN,YAAY,EACZ,WAAW,EACX,SAAS,EACV,MAAM,eAAe,CAAA;AAkCtB,oBAAY,KAAK,GAAG,IAAI,CACtB,WAAW,EACX,UAAU,GAAG,eAAe,GAAG,cAAc,CAC9C,GAAG;IACF,OAAO,EAAE,MAAM,EAAE,GAAG,YAAY,CAAA;IAChC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,kBAAkB,EAAE,MAAM,CAAA;IAC1B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,SAAS,CAAA;IAC1D,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,WAAW,CAAC,EAAE,SAAS,CAAA;IACvB,SAAS,EAAE,SAAS,CAAA;IACpB,OAAO,CAAC,EAAE;QACR,SAAS,CAAC,EAAE,MAAM,CAAA;KACnB,CAAA;CACF,CAAA;AAwFD,QAAA,MAAM,sBAAsB;0JAYzB,KAAK;;CAsEP,CAAA;AAID,eAAe,sBAAsB,CAAA"}
@@ -22,9 +22,13 @@ const MenuGroup = (props) => {
22
22
  React.createElement(Typography, { size: 'xsmall', weight: 'semibold', color: 'dark-grey' }, group)),
23
23
  children));
24
24
  };
25
+ const MemoizedNonNativeSelectOption = React.memo(NonNativeSelectOption);
25
26
  const renderOptions = ({ options, getItemProps, selection, highlightedIndex, offset = 0, renderOption, }) => {
26
27
  return options.map((option, index) => {
27
- return (React.createElement(NonNativeSelectOption, Object.assign({ key: option.key || option.value, option: option, selected: selection.isOptionSelected(option), highlighted: highlightedIndex === index + offset, description: option.description }, getItemProps(option, index + offset)), renderOption === null || renderOption === void 0 ? void 0 : renderOption(option)));
28
+ const optionIndex = index + offset;
29
+ const isHighlighted = highlightedIndex === optionIndex;
30
+ const isSelected = selection.isOptionSelected(option);
31
+ return (React.createElement(MemoizedNonNativeSelectOption, Object.assign({ key: option.key || option.value, option: option, selected: isSelected, highlighted: isHighlighted, description: option.description }, getItemProps(option, optionIndex)), renderOption === null || renderOption === void 0 ? void 0 : renderOption(option)));
28
32
  });
29
33
  };
30
34
  const renderGroups = ({ groups, getItemProps, selection, highlightedIndex, renderOption, }) => {
@@ -56,27 +60,42 @@ const addOffsetToHighlightedIndex = (groups, highlightedIndex) => {
56
60
  };
57
61
  const NonNativeSelectOptions = ({ options, renderOption = () => null, highlightedIndex, getItemProps, onBlur, selection, filterOptionsValue, noOptionsText, fixedHeader, fixedFooter, testIds, }) => {
58
62
  const flatOptions = useMemo(() => flattenOptions(options), [options]);
59
- if (!flatOptions.length && filterOptionsValue) {
60
- return (React.createElement(SelectOptions, { "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.noOptions, role: 'listbox', fixedHeader: fixedHeader },
61
- React.createElement(MenuItem, { titleCase: false, disabled: true }, noOptionsText)));
62
- }
63
- return (React.createElement(SelectOptions, { fixedHeader: fixedHeader, onBlur: onBlur, selectedIndex: isOptionsType(options)
64
- ? highlightedIndex
65
- : addOffsetToHighlightedIndex(options, highlightedIndex), fixedFooter: fixedFooter, role: 'listbox' }, isOptionsType(options)
66
- ? renderOptions({
67
- options,
68
- getItemProps,
69
- selection,
70
- highlightedIndex,
71
- renderOption,
72
- })
73
- : renderGroups({
63
+ const renderedContent = useMemo(() => {
64
+ if (!flatOptions.length && filterOptionsValue) {
65
+ return (React.createElement(MenuItem, { titleCase: false, disabled: true }, noOptionsText));
66
+ }
67
+ if (isOptionsType(options)) {
68
+ return renderOptions({
69
+ options,
70
+ getItemProps,
71
+ selection,
72
+ highlightedIndex,
73
+ renderOption,
74
+ });
75
+ }
76
+ return renderGroups({
74
77
  groups: options,
75
78
  getItemProps,
76
79
  selection,
77
80
  highlightedIndex,
78
81
  renderOption,
79
- })));
82
+ });
83
+ }, [
84
+ options,
85
+ flatOptions,
86
+ filterOptionsValue,
87
+ getItemProps,
88
+ selection,
89
+ highlightedIndex,
90
+ renderOption,
91
+ noOptionsText,
92
+ ]);
93
+ if (!flatOptions.length && filterOptionsValue) {
94
+ return (React.createElement(SelectOptions, { "data-testid": testIds === null || testIds === void 0 ? void 0 : testIds.noOptions, role: 'listbox', fixedHeader: fixedHeader }, renderedContent));
95
+ }
96
+ return (React.createElement(SelectOptions, { fixedHeader: fixedHeader, onBlur: onBlur, selectedIndex: isOptionsType(options)
97
+ ? highlightedIndex
98
+ : addOffsetToHighlightedIndex(options, highlightedIndex), fixedFooter: fixedFooter, role: 'listbox' }, renderedContent));
80
99
  };
81
100
  NonNativeSelectOptions.displayName = 'NonNativeSelectOptions';
82
101
  export default NonNativeSelectOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"NonNativeSelectOptions.js","sourceRoot":"","sources":["../../../src/NonNativeSelectOptions/NonNativeSelectOptions.tsx"],"names":[],"mappings":";;;;;;;;;;;AACA,OAAO,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAEtC,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAA;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAA;AAChE,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAShD,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAY7D,MAAM,SAAS,GAAG,CAAC,KAAqB,EAAE,EAAE;IAC1C,MAAM,EAAE,KAAK,EAAE,QAAQ,KAAc,KAAK,EAAd,IAAI,UAAK,KAAK,EAApC,qBAA4B,CAAQ,CAAA;IAE1C,OAAO,CACL;QACE,oBAAC,QAAQ,kBACP,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,KAAK,EAChB,aAAa,QACb,SAAS,EAAC,qBAAqB,IAC3B,IAAI;YAER,oBAAC,UAAU,IAAC,IAAI,EAAC,QAAQ,EAAC,MAAM,EAAC,UAAU,EAAC,KAAK,EAAC,WAAW,IAC1D,KAAK,CACK,CACJ;QACV,QAAQ,CACR,CACJ,CAAA;AACH,CAAC,CAAA;AAmBD,MAAM,aAAa,GAAG,CAAC,EACrB,OAAO,EACP,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,MAAM,GAAG,CAAC,EACV,YAAY,GAI4B,EAAE,EAAE;IAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACnC,OAAO,CACL,oBAAC,qBAAqB,kBACpB,GAAG,EAAE,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,KAAK,EAC/B,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,SAAS,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAC5C,WAAW,EAAE,gBAAgB,KAAK,KAAK,GAAG,MAAM,EAChD,WAAW,EAAE,MAAM,CAAC,WAAW,IAC3B,YAAY,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,GAEvC,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAG,MAAM,CAAC,CACD,CACzB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,EACpB,MAAM,EACN,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,YAAY,GAIc,EAAE,EAAE;IAC9B,IAAI,YAAY,GAAG,CAAC,CAAA;IAEpB,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACrC,MAAM,UAAU,GAAG,CACjB,oBAAC,SAAS,IAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAChC,aAAa,CAAC;YACb,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;YACtB,YAAY;YACZ,SAAS;YACT,gBAAgB;YAChB,MAAM,EAAE,YAAY;YACpB,YAAY;SACb,CAAC,CACQ,CACb,CAAA;QAED,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAA;QAEpC,OAAO,UAAU,CAAA;IACnB,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,2BAA2B,GAAG,CAClC,MAAoB,EACpB,gBAA+B,EAC/B,EAAE;IACF,IAAI,CAAC,gBAAgB,EAAE;QACrB,OAAO,gBAAgB,CAAA;KACxB;IAED,IAAI,YAAY,GAAG,CAAC,CAAA;IAEpB,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACtC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAA;QAC5B,MAAM,0BAA0B,GAAG,gBAAgB,GAAG,YAAY,CAAA;QAElE,OAAO,0BAA0B,CAAA;IACnC,CAAC,CAAC,GAAG,CAAC,CAAA;IAER,OAAO,gBAAgB,GAAG,MAAM,CAAA;AAClC,CAAC,CAAA;AAED,MAAM,sBAAsB,GAAG,CAAC,EAC9B,OAAO,EACP,YAAY,GAAG,GAAG,EAAE,CAAC,IAAI,EACzB,gBAAgB,EAChB,YAAY,EACZ,MAAM,EACN,SAAS,EACT,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,WAAW,EACX,OAAO,GACD,EAAE,EAAE;IACV,MAAM,WAAW,GAAa,OAAO,CACnC,GAAG,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,EAC7B,CAAC,OAAO,CAAC,CACV,CAAA;IAED,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,kBAAkB,EAAE;QAC7C,OAAO,CACL,oBAAC,aAAa,mBACC,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,SAAS,EAC/B,IAAI,EAAC,SAAS,EACd,WAAW,EAAE,WAAW;YAExB,oBAAC,QAAQ,IAAC,SAAS,EAAE,KAAK,EAAE,QAAQ,UACjC,aAAa,CACL,CACG,CACjB,CAAA;KACF;IAED,OAAO,CACL,oBAAC,aAAa,IACZ,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,aAAa,EACX,aAAa,CAAC,OAAO,CAAC;YACpB,CAAC,CAAC,gBAAgB;YAClB,CAAC,CAAC,2BAA2B,CAAC,OAAO,EAAE,gBAAgB,CAAC,EAE5D,WAAW,EAAE,WAAW,EACxB,IAAI,EAAC,SAAS,IAEb,aAAa,CAAC,OAAO,CAAC;QACrB,CAAC,CAAC,aAAa,CAAC;YACZ,OAAO;YACP,YAAY;YACZ,SAAS;YACT,gBAAgB;YAChB,YAAY;SACb,CAAC;QACJ,CAAC,CAAC,YAAY,CAAC;YACX,MAAM,EAAE,OAAO;YACf,YAAY;YACZ,SAAS;YACT,gBAAgB;YAChB,YAAY;SACb,CAAC,CACQ,CACjB,CAAA;AACH,CAAC,CAAA;AAED,sBAAsB,CAAC,WAAW,GAAG,wBAAwB,CAAA;AAE7D,eAAe,sBAAsB,CAAA"}
1
+ {"version":3,"file":"NonNativeSelectOptions.js","sourceRoot":"","sources":["../../../src/NonNativeSelectOptions/NonNativeSelectOptions.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@toptal/picasso-select",
3
- "version": "4.0.18-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.43+1b2e25b97",
3
+ "version": "4.0.19-alpha-bill-optimize-select-performance-381ce8200.1+381ce8200",
4
4
  "description": "Toptal UI components library - Select",
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -22,18 +22,18 @@
22
22
  },
23
23
  "homepage": "https://github.com/toptal/picasso/tree/master/packages/picasso#readme",
24
24
  "dependencies": {
25
- "@toptal/picasso-container": "3.1.2-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.83+1b2e25b97",
26
- "@toptal/picasso-form": "6.1.8-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.59+1b2e25b97",
27
- "@toptal/picasso-icons": "1.11.1-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.59+1b2e25b97",
28
- "@toptal/picasso-input": "4.0.18-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.43+1b2e25b97",
29
- "@toptal/picasso-input-adornment": "3.0.9-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.59+1b2e25b97",
30
- "@toptal/picasso-loader": "3.0.3-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.83+1b2e25b97",
31
- "@toptal/picasso-menu": "3.0.14-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.59+1b2e25b97",
32
- "@toptal/picasso-outlined-input": "4.0.18-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.43+1b2e25b97",
33
- "@toptal/picasso-popper": "1.0.6-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.83+1b2e25b97",
34
- "@toptal/picasso-shared": "15.0.1-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.336+1b2e25b97",
35
- "@toptal/picasso-typography": "4.0.3-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.83+1b2e25b97",
36
- "@toptal/picasso-utils": "3.0.1-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.83+1b2e25b97",
25
+ "@toptal/picasso-container": "3.1.2-alpha-bill-optimize-select-performance-381ce8200.83+381ce8200",
26
+ "@toptal/picasso-form": "6.1.9-alpha-bill-optimize-select-performance-381ce8200.1+381ce8200",
27
+ "@toptal/picasso-icons": "1.12.1-alpha-bill-optimize-select-performance-381ce8200.1+381ce8200",
28
+ "@toptal/picasso-input": "4.0.19-alpha-bill-optimize-select-performance-381ce8200.1+381ce8200",
29
+ "@toptal/picasso-input-adornment": "3.0.10-alpha-bill-optimize-select-performance-381ce8200.1+381ce8200",
30
+ "@toptal/picasso-loader": "3.0.3-alpha-bill-optimize-select-performance-381ce8200.83+381ce8200",
31
+ "@toptal/picasso-menu": "3.0.15-alpha-bill-optimize-select-performance-381ce8200.1+381ce8200",
32
+ "@toptal/picasso-outlined-input": "4.0.19-alpha-bill-optimize-select-performance-381ce8200.1+381ce8200",
33
+ "@toptal/picasso-popper": "1.0.6-alpha-bill-optimize-select-performance-381ce8200.83+381ce8200",
34
+ "@toptal/picasso-shared": "15.0.1-alpha-bill-optimize-select-performance-381ce8200.336+381ce8200",
35
+ "@toptal/picasso-typography": "4.0.3-alpha-bill-optimize-select-performance-381ce8200.83+381ce8200",
36
+ "@toptal/picasso-utils": "3.0.1-alpha-bill-optimize-select-performance-381ce8200.83+381ce8200",
37
37
  "ap-style-title-case": "^1.1.2"
38
38
  },
39
39
  "sideEffects": [
@@ -46,9 +46,9 @@
46
46
  "react": ">=16.12.0 < 19.0.0"
47
47
  },
48
48
  "devDependencies": {
49
- "@toptal/picasso-tailwind": "3.0.1-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.123+1b2e25b97",
50
- "@toptal/picasso-tailwind-merge": "2.0.3-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.83+1b2e25b97",
51
- "@toptal/picasso-test-utils": "1.1.2-alpha-FF-4-migrate-icons-to-tw-1b2e25b97.336+1b2e25b97",
49
+ "@toptal/picasso-tailwind": "3.0.1-alpha-bill-optimize-select-performance-381ce8200.123+381ce8200",
50
+ "@toptal/picasso-tailwind-merge": "2.0.3-alpha-bill-optimize-select-performance-381ce8200.83+381ce8200",
51
+ "@toptal/picasso-test-utils": "1.1.2-alpha-bill-optimize-select-performance-381ce8200.336+381ce8200",
52
52
  "popper.js": "^1.16.1"
53
53
  },
54
54
  "exports": {
@@ -59,5 +59,5 @@
59
59
  "!dist-package/tsconfig.tsbuildinfo",
60
60
  "src"
61
61
  ],
62
- "gitHead": "1b2e25b972648340794d6105110e86a036165edb"
62
+ "gitHead": "381ce8200c401760a75f271244b2c2310970d0a3"
63
63
  }
@@ -12,30 +12,42 @@ export interface Props<T extends ValueType> extends ItemProps {
12
12
  option: Option<T>
13
13
  }
14
14
 
15
+ const NonNativeSelectOptionComponent = <T extends ValueType>({
16
+ option,
17
+ selected,
18
+ highlighted,
19
+ description,
20
+ children,
21
+ ...itemProps
22
+ }: Props<T>) => {
23
+ return (
24
+ <MenuItem
25
+ value={option.value}
26
+ selected={highlighted}
27
+ checkmarked={selected}
28
+ titleCase={false}
29
+ description={description}
30
+ role='option'
31
+ aria-selected={selected}
32
+ data-highlighted={highlighted}
33
+ disabled={option.disabled}
34
+ {...itemProps}
35
+ >
36
+ {children}
37
+ </MenuItem>
38
+ )
39
+ }
40
+
15
41
  const NonNativeSelectOption = React.memo(
16
- <T extends ValueType>({
17
- option,
18
- selected,
19
- highlighted,
20
- description,
21
- children,
22
- ...itemProps
23
- }: Props<T>) => {
42
+ NonNativeSelectOptionComponent,
43
+ (prevProps, nextProps) => {
24
44
  return (
25
- <MenuItem
26
- value={option.value}
27
- selected={highlighted}
28
- checkmarked={selected}
29
- titleCase={false}
30
- description={description}
31
- role='option'
32
- aria-selected={selected}
33
- data-highlighted={highlighted}
34
- disabled={option.disabled}
35
- {...itemProps}
36
- >
37
- {children}
38
- </MenuItem>
45
+ prevProps.selected === nextProps.selected &&
46
+ prevProps.highlighted === nextProps.highlighted &&
47
+ prevProps.option === nextProps.option &&
48
+ prevProps.option.disabled === nextProps.option.disabled &&
49
+ prevProps.description === nextProps.description &&
50
+ prevProps.children === nextProps.children
39
51
  )
40
52
  }
41
53
  )
@@ -16,7 +16,7 @@ import type {
16
16
  } from '../SelectBase'
17
17
  import { flattenOptions, isOptionsType } from '../SelectBase'
18
18
 
19
- // TODO: Replace with a real component as soon as it's implemented
19
+ // TODO: Replace with a real component as soon as it's implemented [FX-1479]
20
20
  // https://toptal-core.atlassian.net/browse/FX-1479
21
21
  // Note: In the current implementation children are siblings for the group node.
22
22
  // If in the new MenuGroup children are inside the group node, that will
@@ -64,6 +64,8 @@ export type Props = Pick<
64
64
  }
65
65
  }
66
66
 
67
+ const MemoizedNonNativeSelectOption = React.memo(NonNativeSelectOption)
68
+
67
69
  const renderOptions = ({
68
70
  options,
69
71
  getItemProps,
@@ -76,17 +78,21 @@ const renderOptions = ({
76
78
  'getItemProps' | 'selection' | 'highlightedIndex' | 'renderOption'
77
79
  > & { options: Option[]; offset?: number }) => {
78
80
  return options.map((option, index) => {
81
+ const optionIndex = index + offset
82
+ const isHighlighted = highlightedIndex === optionIndex
83
+ const isSelected = selection.isOptionSelected(option)
84
+
79
85
  return (
80
- <NonNativeSelectOption
86
+ <MemoizedNonNativeSelectOption
81
87
  key={option.key || option.value}
82
88
  option={option}
83
- selected={selection.isOptionSelected(option)}
84
- highlighted={highlightedIndex === index + offset}
89
+ selected={isSelected}
90
+ highlighted={isHighlighted}
85
91
  description={option.description}
86
- {...getItemProps(option, index + offset)}
92
+ {...getItemProps(option, optionIndex)}
87
93
  >
88
94
  {renderOption?.(option)}
89
- </NonNativeSelectOption>
95
+ </MemoizedNonNativeSelectOption>
90
96
  )
91
97
  })
92
98
  }
@@ -162,6 +168,43 @@ const NonNativeSelectOptions = ({
162
168
  [options]
163
169
  )
164
170
 
171
+ const renderedContent = useMemo(() => {
172
+ if (!flatOptions.length && filterOptionsValue) {
173
+ return (
174
+ <MenuItem titleCase={false} disabled>
175
+ {noOptionsText}
176
+ </MenuItem>
177
+ )
178
+ }
179
+
180
+ if (isOptionsType(options)) {
181
+ return renderOptions({
182
+ options,
183
+ getItemProps,
184
+ selection,
185
+ highlightedIndex,
186
+ renderOption,
187
+ })
188
+ }
189
+
190
+ return renderGroups({
191
+ groups: options,
192
+ getItemProps,
193
+ selection,
194
+ highlightedIndex,
195
+ renderOption,
196
+ })
197
+ }, [
198
+ options,
199
+ flatOptions,
200
+ filterOptionsValue,
201
+ getItemProps,
202
+ selection,
203
+ highlightedIndex,
204
+ renderOption,
205
+ noOptionsText,
206
+ ])
207
+
165
208
  if (!flatOptions.length && filterOptionsValue) {
166
209
  return (
167
210
  <SelectOptions
@@ -169,9 +212,7 @@ const NonNativeSelectOptions = ({
169
212
  role='listbox'
170
213
  fixedHeader={fixedHeader}
171
214
  >
172
- <MenuItem titleCase={false} disabled>
173
- {noOptionsText}
174
- </MenuItem>
215
+ {renderedContent}
175
216
  </SelectOptions>
176
217
  )
177
218
  }
@@ -188,21 +229,7 @@ const NonNativeSelectOptions = ({
188
229
  fixedFooter={fixedFooter}
189
230
  role='listbox'
190
231
  >
191
- {isOptionsType(options)
192
- ? renderOptions({
193
- options,
194
- getItemProps,
195
- selection,
196
- highlightedIndex,
197
- renderOption,
198
- })
199
- : renderGroups({
200
- groups: options,
201
- getItemProps,
202
- selection,
203
- highlightedIndex,
204
- renderOption,
205
- })}
232
+ {renderedContent}
206
233
  </SelectOptions>
207
234
  )
208
235
  }