Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(combobox): fix virtualization ref bug #1922

Merged
merged 6 commits into from
Oct 13, 2021

Conversation

andioneto
Copy link
Contributor

@andioneto andioneto commented Oct 6, 2021

Description

Fixes bug where virtualized combobox options are not correctly resized, and adds virtualization for comboboxes that use an option template 🥳

Summary of changes

  • ensure that measureRef from the return of useVirtual is passed as a configuration options to the getItemProps getter function (Downshift.js)
  • memoize templatized items and render virtualized items only when not using grouped items.

@changeset-bot
Copy link

changeset-bot bot commented Oct 6, 2021

🦋 Changeset detected

Latest commit: b83ef38

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@twilio-paste/combobox Minor
@twilio-paste/core Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions github-actions bot added Area: Components Related to the component library (core) of this system Status: Do Not Merge This PR is not yet ready to be merged back into the main branch labels Oct 6, 2021
paddingStart: remToPx(theme.space.space30, 'number') as number,
});

const defaultState = useComboboxPrimitive({
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ Removed the conditional use of the virtualizer and the primitive hooks because according to the rules of hooks, hooks should not be called conditionally.

...(inputValue != null && {inputValue}),
...(selectedItem != null && {selectedItem}),
});
} = state || defaultState;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conditionally destructure the targets.

getItemProps={getItemProps}
highlightedIndex={highlightedIndex}
optionTemplate={optionTemplate}
groupItemsBy={groupItemsBy}
groupLabelTemplate={groupLabelTemplate}
totalSize={rowVirtualizer.totalSize}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Flattening the props to the extent that we can, general good practice for performance in React.


// Use option template if provided
// otherwise, return the items array.
const templatizedItems = React.useMemo(() => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Create a memoized list of the items that uses the option template if it exists, and doesn't use it if it doesn't exist.

}) => {
const UIDSeed = useUIDSeed();
const uidSeed = useUIDSeed();
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🐫 case

@netlify
Copy link

netlify bot commented Oct 6, 2021

✔️ Deploy Preview for paste-theme-designer ready!

🔨 Explore the source changes: b83ef38

🔍 Inspect the deploy log: https://app.netlify.com/sites/paste-theme-designer/deploys/61670c98462c1400081c2833

😎 Browse the preview: https://deploy-preview-1922--paste-theme-designer.netlify.app

variant="default"
virtualItem={virtualItem}
aria-setsize={items.length}
aria-posinset={items.indexOf(item)}
aria-setsize={totalSize}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For resizing accuracy, we should use the list size from the virtualized list.

// @ts-ignore
ref={(currentElement) => virtualItem.measureRef(currentElement)}
{...getItemProps({item, index: itemIndex})}
{...getItemProps({item, index: itemIndex, ref: virtualItem.measureRef})}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getItemProps allows for a ref to be passed in this invocation. This allows us to "combine" the refs from the virtualization and the combobox primitive. Check out the Downshift.js docs for more context.

@netlify
Copy link

netlify bot commented Oct 6, 2021

✔️ Deploy Preview for paste-docs ready!

🔨 Explore the source changes: aac7932

🔍 Inspect the deploy log: https://app.netlify.com/sites/paste-docs/deploys/615e3507dd0c7c0007d7e638

😎 Browse the preview: https://deploy-preview-1922--paste-docs.netlify.app

@github-actions
Copy link
Contributor

github-actions bot commented Oct 7, 2021

Size Change: +37 B (0%)

Total Size: 654 kB

Filename Size Change
packages/paste-core/components/combobox/dist/index.es.js 13.4 kB +20 B (0%)
packages/paste-core/components/combobox/dist/index.js 13.7 kB +17 B (0%)
ℹ️ View Unchanged
Filename Size
packages/paste-color-contrast-utils/dist/index.es.js 14.9 kB
packages/paste-color-contrast-utils/dist/index.js 15.3 kB
packages/paste-core/components/alert-dialog/dist/index.es.js 1.69 kB
packages/paste-core/components/alert-dialog/dist/index.js 1.99 kB
packages/paste-core/components/alert/dist/index.es.js 1.26 kB
packages/paste-core/components/alert/dist/index.js 1.61 kB
packages/paste-core/components/anchor/dist/index.es.js 1.53 kB
packages/paste-core/components/anchor/dist/index.js 1.85 kB
packages/paste-core/components/avatar/dist/index.es.js 1.74 kB
packages/paste-core/components/avatar/dist/index.js 2.06 kB
packages/paste-core/components/badge/dist/index.es.js 1.86 kB
packages/paste-core/components/badge/dist/index.js 2.17 kB
packages/paste-core/components/base-radio-checkbox/dist/index.es.js 1.2 kB
packages/paste-core/components/base-radio-checkbox/dist/index.js 1.57 kB
packages/paste-core/components/breadcrumb/dist/index.es.js 1.24 kB
packages/paste-core/components/breadcrumb/dist/index.js 1.57 kB
packages/paste-core/components/button/dist/index.es.js 5.64 kB
packages/paste-core/components/button/dist/index.js 5.89 kB
packages/paste-core/components/card/dist/index.es.js 726 B
packages/paste-core/components/card/dist/index.js 1.07 kB
packages/paste-core/components/checkbox/dist/index.es.js 2.34 kB
packages/paste-core/components/checkbox/dist/index.js 2.65 kB
packages/paste-core/components/data-grid/dist/index.es.js 4.26 kB
packages/paste-core/components/data-grid/dist/index.js 4.56 kB
packages/paste-core/components/date-picker/dist/index.es.js 8.51 kB
packages/paste-core/components/date-picker/dist/index.js 8.83 kB
packages/paste-core/components/disclosure/dist/index.es.js 2.4 kB
packages/paste-core/components/disclosure/dist/index.js 2.73 kB
packages/paste-core/components/display-pill-group/dist/index.es.js 924 B
packages/paste-core/components/display-pill-group/dist/index.js 1.25 kB
packages/paste-core/components/form-pill-group/dist/index.es.js 1.54 kB
packages/paste-core/components/form-pill-group/dist/index.js 1.88 kB
packages/paste-core/components/form/dist/index.es.js 256 B
packages/paste-core/components/form/dist/index.js 692 B
packages/paste-core/components/heading/dist/index.es.js 918 B
packages/paste-core/components/heading/dist/index.js 1.25 kB
packages/paste-core/components/help-text/dist/index.es.js 931 B
packages/paste-core/components/help-text/dist/index.js 1.27 kB
packages/paste-core/components/inline-control-group/dist/index.es.js 964 B
packages/paste-core/components/inline-control-group/dist/index.js 1.31 kB
packages/paste-core/components/input-box/dist/index.es.js 2.05 kB
packages/paste-core/components/input-box/dist/index.js 2.33 kB
packages/paste-core/components/input/dist/index.es.js 1.51 kB
packages/paste-core/components/input/dist/index.js 1.86 kB
packages/paste-core/components/label/dist/index.es.js 1.23 kB
packages/paste-core/components/label/dist/index.js 1.56 kB
packages/paste-core/components/list/dist/index.es.js 984 B
packages/paste-core/components/list/dist/index.js 1.31 kB
packages/paste-core/components/menu/dist/index.es.js 2.04 kB
packages/paste-core/components/menu/dist/index.js 2.38 kB
packages/paste-core/components/modal/dist/index.es.js 2.83 kB
packages/paste-core/components/modal/dist/index.js 3.15 kB
packages/paste-core/components/pagination/dist/index.es.js 3.37 kB
packages/paste-core/components/pagination/dist/index.js 3.65 kB
packages/paste-core/components/paragraph/dist/index.es.js 642 B
packages/paste-core/components/paragraph/dist/index.js 984 B
packages/paste-core/components/popover/dist/index.es.js 1.48 kB
packages/paste-core/components/popover/dist/index.js 1.83 kB
packages/paste-core/components/radio-group/dist/index.es.js 1.59 kB
packages/paste-core/components/radio-group/dist/index.js 1.93 kB
packages/paste-core/components/screen-reader-only/dist/index.es.js 652 B
packages/paste-core/components/screen-reader-only/dist/index.js 996 B
packages/paste-core/components/select/dist/index.es.js 1.67 kB
packages/paste-core/components/select/dist/index.js 1.99 kB
packages/paste-core/components/separator/dist/index.es.js 778 B
packages/paste-core/components/separator/dist/index.js 1.11 kB
packages/paste-core/components/skeleton-loader/dist/index.es.js 1.07 kB
packages/paste-core/components/skeleton-loader/dist/index.js 1.41 kB
packages/paste-core/components/spinner/dist/index.es.js 1.17 kB
packages/paste-core/components/spinner/dist/index.js 1.59 kB
packages/paste-core/components/table/dist/index.es.js 1.8 kB
packages/paste-core/components/table/dist/index.js 2.13 kB
packages/paste-core/components/tabs/dist/index.es.js 2.33 kB
packages/paste-core/components/tabs/dist/index.js 2.65 kB
packages/paste-core/components/textarea/dist/index.es.js 4.95 kB
packages/paste-core/components/textarea/dist/index.js 5 kB
packages/paste-core/components/time-picker/dist/index.es.js 8.54 kB
packages/paste-core/components/time-picker/dist/index.js 8.86 kB
packages/paste-core/components/toast/dist/index.es.js 3.15 kB
packages/paste-core/components/toast/dist/index.js 3.44 kB
packages/paste-core/components/tooltip/dist/index.es.js 1.16 kB
packages/paste-core/components/tooltip/dist/index.js 1.51 kB
packages/paste-core/components/truncate/dist/index.es.js 604 B
packages/paste-core/components/truncate/dist/index.js 947 B
packages/paste-core/core-bundle/dist/alert-dialog.js 210 B
packages/paste-core/core-bundle/dist/alert.js 194 B
packages/paste-core/core-bundle/dist/anchor.js 197 B
packages/paste-core/core-bundle/dist/animation-library.js 211 B
packages/paste-core/core-bundle/dist/aspect-ratio.js 205 B
packages/paste-core/core-bundle/dist/avatar.js 200 B
packages/paste-core/core-bundle/dist/badge.js 199 B
packages/paste-core/core-bundle/dist/base-radio-checkbox.js 218 B
packages/paste-core/core-bundle/dist/box.js 195 B
packages/paste-core/core-bundle/dist/breadcrumb.js 204 B
packages/paste-core/core-bundle/dist/button.js 201 B
packages/paste-core/core-bundle/dist/card.js 199 B
packages/paste-core/core-bundle/dist/checkbox.js 201 B
packages/paste-core/core-bundle/dist/clipboard-copy-library.js 219 B
packages/paste-core/core-bundle/dist/color-contrast-utils.js 219 B
packages/paste-core/core-bundle/dist/combobox-primitive.js 213 B
packages/paste-core/core-bundle/dist/combobox.js 203 B
packages/paste-core/core-bundle/dist/customization.js 206 B
packages/paste-core/core-bundle/dist/data-grid.js 204 B
packages/paste-core/core-bundle/dist/date-picker.js 205 B
packages/paste-core/core-bundle/dist/design-tokens.js 209 B
packages/paste-core/core-bundle/dist/disclosure-primitive.js 213 B
packages/paste-core/core-bundle/dist/disclosure.js 204 B
packages/paste-core/core-bundle/dist/display-pill-group.js 217 B
packages/paste-core/core-bundle/dist/dropdown-library.js 211 B
packages/paste-core/core-bundle/dist/flex.js 196 B
packages/paste-core/core-bundle/dist/form-pill-group.js 215 B
packages/paste-core/core-bundle/dist/form.js 197 B
packages/paste-core/core-bundle/dist/grid.js 196 B
packages/paste-core/core-bundle/dist/heading.js 199 B
packages/paste-core/core-bundle/dist/help-text.js 204 B
packages/paste-core/core-bundle/dist/index.js 1.19 kB
packages/paste-core/core-bundle/dist/inline-control-group.js 218 B
packages/paste-core/core-bundle/dist/input-box.js 206 B
packages/paste-core/core-bundle/dist/input.js 200 B
packages/paste-core/core-bundle/dist/label.js 196 B
packages/paste-core/core-bundle/dist/list.js 195 B
packages/paste-core/core-bundle/dist/media-object.js 202 B
packages/paste-core/core-bundle/dist/menu-primitive.js 210 B
packages/paste-core/core-bundle/dist/menu.js 196 B
packages/paste-core/core-bundle/dist/modal-dialog-primitive.js 219 B
packages/paste-core/core-bundle/dist/modal.js 196 B
packages/paste-core/core-bundle/dist/non-modal-dialog-primitive.js 224 B
packages/paste-core/core-bundle/dist/pagination.js 199 B
packages/paste-core/core-bundle/dist/paragraph.js 202 B
packages/paste-core/core-bundle/dist/popover.js 201 B
packages/paste-core/core-bundle/dist/radio-group.js 208 B
packages/paste-core/core-bundle/dist/reakit-library.js 211 B
packages/paste-core/core-bundle/dist/screen-reader-only.js 214 B
packages/paste-core/core-bundle/dist/select.js 197 B
packages/paste-core/core-bundle/dist/separator.js 199 B
packages/paste-core/core-bundle/dist/sibling-box.js 206 B
packages/paste-core/core-bundle/dist/skeleton-loader.js 211 B
packages/paste-core/core-bundle/dist/spinner.js 198 B
packages/paste-core/core-bundle/dist/stack.js 200 B
packages/paste-core/core-bundle/dist/style-props.js 202 B
packages/paste-core/core-bundle/dist/styling-library.js 210 B
packages/paste-core/core-bundle/dist/table.js 195 B
packages/paste-core/core-bundle/dist/tabs-primitive.js 210 B
packages/paste-core/core-bundle/dist/tabs.js 196 B
packages/paste-core/core-bundle/dist/text.js 195 B
packages/paste-core/core-bundle/dist/textarea.js 198 B
packages/paste-core/core-bundle/dist/theme.js 196 B
packages/paste-core/core-bundle/dist/time-picker.js 206 B
packages/paste-core/core-bundle/dist/toast.js 195 B
packages/paste-core/core-bundle/dist/tooltip-primitive.js 212 B
packages/paste-core/core-bundle/dist/tooltip.js 198 B
packages/paste-core/core-bundle/dist/truncate.js 198 B
packages/paste-core/core-bundle/dist/types.js 196 B
packages/paste-core/core-bundle/dist/uid-library.js 208 B
packages/paste-core/core-bundle/dist/utils.js 200 B
packages/paste-core/layout/aspect-ratio/dist/index.es.js 709 B
packages/paste-core/layout/aspect-ratio/dist/index.js 1.11 kB
packages/paste-core/layout/flex/dist/index.es.js 2.1 kB
packages/paste-core/layout/flex/dist/index.js 2.42 kB
packages/paste-core/layout/grid/dist/index.es.js 2.1 kB
packages/paste-core/layout/grid/dist/index.js 2.4 kB
packages/paste-core/layout/media-object/dist/index.es.js 982 B
packages/paste-core/layout/media-object/dist/index.js 1.3 kB
packages/paste-core/layout/stack/dist/index.es.js 1.18 kB
packages/paste-core/layout/stack/dist/index.js 1.51 kB
packages/paste-core/primitives/box/dist/index.es.js 3.15 kB
packages/paste-core/primitives/box/dist/index.js 3.42 kB
packages/paste-core/primitives/combobox/dist/index.es.js 168 B
packages/paste-core/primitives/combobox/dist/index.js 579 B
packages/paste-core/primitives/disclosure/dist/index.es.js 155 B
packages/paste-core/primitives/disclosure/dist/index.js 570 B
packages/paste-core/primitives/menu/dist/index.es.js 209 B
packages/paste-core/primitives/menu/dist/index.js 622 B
packages/paste-core/primitives/modal-dialog/dist/index.es.js 23.5 kB
packages/paste-core/primitives/modal-dialog/dist/index.js 23.4 kB
packages/paste-core/primitives/non-modal-dialog/dist/index.es.js 176 B
packages/paste-core/primitives/non-modal-dialog/dist/index.js 590 B
packages/paste-core/primitives/sibling-box/dist/index.es.js 1.09 kB
packages/paste-core/primitives/sibling-box/dist/index.js 1.44 kB
packages/paste-core/primitives/tabs/dist/index.es.js 153 B
packages/paste-core/primitives/tabs/dist/index.js 572 B
packages/paste-core/primitives/text/dist/index.es.js 2.73 kB
packages/paste-core/primitives/text/dist/index.js 3.02 kB
packages/paste-core/primitives/tooltip/dist/index.es.js 163 B
packages/paste-core/primitives/tooltip/dist/index.js 578 B
packages/paste-customization/dist/index.es.js 2.08 kB
packages/paste-customization/dist/index.js 2.38 kB
packages/paste-design-tokens/dist/themes/console/tokens.common.js 3.86 kB
packages/paste-design-tokens/dist/themes/console/tokens.es6.js 3.8 kB
packages/paste-design-tokens/dist/themes/dark/tokens.common.js 3.3 kB
packages/paste-design-tokens/dist/themes/dark/tokens.es6.js 3.25 kB
packages/paste-design-tokens/dist/themes/sendgrid/tokens.common.js 3.24 kB
packages/paste-design-tokens/dist/themes/sendgrid/tokens.es6.js 3.2 kB
packages/paste-design-tokens/dist/tokens.common.js 3.9 kB
packages/paste-design-tokens/dist/tokens.es6.js 3.85 kB
packages/paste-libraries/animation/dist/index.es.js 24.2 kB
packages/paste-libraries/animation/dist/index.js 24.5 kB
packages/paste-libraries/clipboard-copy/dist/index.es.js 1.67 kB
packages/paste-libraries/clipboard-copy/dist/index.js 1.7 kB
packages/paste-libraries/dropdown/dist/index.es.js 26.4 kB
packages/paste-libraries/dropdown/dist/index.js 26.5 kB
packages/paste-libraries/reakit/dist/index.es.js 48.4 kB
packages/paste-libraries/reakit/dist/index.js 48.6 kB
packages/paste-libraries/styling/dist/index.es.js 26.6 kB
packages/paste-libraries/styling/dist/index.js 27 kB
packages/paste-libraries/uid/dist/index.es.js 1.72 kB
packages/paste-libraries/uid/dist/index.js 2.1 kB
packages/paste-style-props/dist/index.es.js 5.15 kB
packages/paste-style-props/dist/index.js 5.68 kB
packages/paste-theme/dist/index.es.js 3.32 kB
packages/paste-theme/dist/index.js 3.56 kB
packages/paste-types/dist/index.es.js 20 B
packages/paste-types/dist/index.js 20 B
packages/paste-utils/dist/index.es.js 2.06 kB
packages/paste-utils/dist/index.js 2.42 kB

compressed-size-action

@cypress
Copy link

cypress bot commented Oct 7, 2021



Test summary

4 0 0 0Flakiness 0


Run details

Project Paste
Status Passed
Commit b83ef38
Started Oct 13, 2021 5:08 PM
Ended Oct 13, 2021 5:09 PM
Duration 01:02 💡
OS Linux Ubuntu - 20.04
Browser Electron 83

View run in Cypress Dashboard ➡️


This comment has been generated by cypress-bot as a result of this project's GitHub integration settings. You can manage this integration in this project's settings in the Cypress Dashboard

@codesandbox-ci
Copy link

codesandbox-ci bot commented Oct 7, 2021

This pull request is automatically built and testable in CodeSandbox.

To see build info of the built libraries, click here or the icon next to each commit SHA.

Latest deployment of this branch, based on commit b83ef38:

Sandbox Source
@twilio-paste/nextjs-template Configuration

@github-actions github-actions bot added the Type: Tests Adds tests to the code label Oct 7, 2021
@netlify
Copy link

netlify bot commented Oct 7, 2021

✔️ Deploy Preview for paste-docs ready!

🔨 Explore the source changes: b83ef38

🔍 Inspect the deploy log: https://app.netlify.com/sites/paste-docs/deploys/61670c9843783300070f3d98

😎 Browse the preview: https://deploy-preview-1922--paste-docs.netlify.app

@github-actions
Copy link
Contributor

github-actions bot commented Oct 7, 2021

Size Change: +4 B (0%)

Total Size: 529 kB

Filename Size Change
packages/paste-core/components/combobox/dist/index.js 13.7 kB +4 B (0%)
ℹ️ View Unchanged
Filename Size
./packages/paste-icons/cjs/AgentIcon.js 1.33 kB
./packages/paste-icons/cjs/ArrowBackIcon.js 1.08 kB
./packages/paste-icons/cjs/ArrowDownIcon.js 1.08 kB
./packages/paste-icons/cjs/ArrowForwardIcon.js 1.08 kB
./packages/paste-icons/cjs/ArrowUpIcon.js 1.1 kB
./packages/paste-icons/cjs/AttachIcon.js 1.23 kB
./packages/paste-icons/cjs/AttachmentIcon.js 1.14 kB
./packages/paste-icons/cjs/BoldIcon.js 1.29 kB
./packages/paste-icons/cjs/BuiltInIcon.js 1.12 kB
./packages/paste-icons/cjs/CalendarIcon.js 1.17 kB
./packages/paste-icons/cjs/ChatIcon.js 1.2 kB
./packages/paste-icons/cjs/CheckboxCheckIcon.js 992 B
./packages/paste-icons/cjs/CheckboxLineIcon.js 941 B
./packages/paste-icons/cjs/CheckmarkCircleIcon.js 1.07 kB
./packages/paste-icons/cjs/ChevronDisclosureCollapsedIcon.js 1.01 kB
./packages/paste-icons/cjs/ChevronDisclosureExpandedIcon.js 1.01 kB
./packages/paste-icons/cjs/ChevronDisclosureIcon.js 1 kB
./packages/paste-icons/cjs/ChevronDoubleLeftIcon.js 1.03 kB
./packages/paste-icons/cjs/ChevronDoubleRightIcon.js 1.05 kB
./packages/paste-icons/cjs/ChevronDownIcon.js 975 B
./packages/paste-icons/cjs/ChevronExpandIcon.js 1.02 kB
./packages/paste-icons/cjs/ChevronLeftIcon.js 973 B
./packages/paste-icons/cjs/ChevronRightIcon.js 975 B
./packages/paste-icons/cjs/ChevronUpIcon.js 972 B
./packages/paste-icons/cjs/CloseIcon.js 977 B
./packages/paste-icons/cjs/ColorPickerIcon.js 1.21 kB
./packages/paste-icons/cjs/ConnectivityAvailableIcon.js 901 B
./packages/paste-icons/cjs/ConnectivityBusyIcon.js 899 B
./packages/paste-icons/cjs/ConnectivityOfflineIcon.js 948 B
./packages/paste-icons/cjs/ConnectivityUnavailableIcon.js 904 B
./packages/paste-icons/cjs/CopyIcon.js 1.19 kB
./packages/paste-icons/cjs/CreditCardIcon.js 1.01 kB
./packages/paste-icons/cjs/CustomIcon.js 1.27 kB
./packages/paste-icons/cjs/DarkModeIcon.js 1.04 kB
./packages/paste-icons/cjs/DataBarChartIcon.js 1.03 kB
./packages/paste-icons/cjs/DataLineChartIcon.js 1.04 kB
./packages/paste-icons/cjs/DataPieChartIcon.js 1.03 kB
./packages/paste-icons/cjs/DataTableIcon.js 1.03 kB
./packages/paste-icons/cjs/DeleteIcon.js 1.16 kB
./packages/paste-icons/cjs/DownloadIcon.js 1.02 kB
./packages/paste-icons/cjs/EditIcon.js 1.16 kB
./packages/paste-icons/cjs/ElasticSIPTrunkingCapableIcon.js 1.46 kB
./packages/paste-icons/cjs/ErrorIcon.js 1.06 kB
./packages/paste-icons/cjs/ExpandIcon.js 1.14 kB
./packages/paste-icons/cjs/ExportIcon.js 1.02 kB
./packages/paste-icons/cjs/FaxCapableIcon.js 1.32 kB
./packages/paste-icons/cjs/FileIcon.js 1.02 kB
./packages/paste-icons/cjs/FilterIcon.js 929 B
./packages/paste-icons/cjs/helpers/IconWrapper.js 703 B
./packages/paste-icons/cjs/HideIcon.js 1.39 kB
./packages/paste-icons/cjs/HistoryIcon.js 1.08 kB
./packages/paste-icons/cjs/InformationIcon.js 974 B
./packages/paste-icons/cjs/ItalicIcon.js 1.02 kB
./packages/paste-icons/cjs/LightModeIcon.js 1.16 kB
./packages/paste-icons/cjs/LinkExternalIcon.js 1.08 kB
./packages/paste-icons/cjs/LinkIcon.js 1.22 kB
./packages/paste-icons/cjs/LoadingIcon.js 1.29 kB
./packages/paste-icons/cjs/LogoTwilioIcon.js 1.03 kB
./packages/paste-icons/cjs/MinusIcon.js 979 B
./packages/paste-icons/cjs/MMSCapableIcon.js 1.26 kB
./packages/paste-icons/cjs/MoreIcon.js 942 B
./packages/paste-icons/cjs/NeutralIcon.js 1.2 kB
./packages/paste-icons/cjs/NewIcon.js 1.28 kB
./packages/paste-icons/cjs/OrderedListIcon.js 1.24 kB
./packages/paste-icons/cjs/PauseIcon.js 1.01 kB
./packages/paste-icons/cjs/PinIcon.js 1.21 kB
./packages/paste-icons/cjs/PlayIcon.js 1.03 kB
./packages/paste-icons/cjs/PlusIcon.js 948 B
./packages/paste-icons/cjs/ProcessDisabledIcon.js 979 B
./packages/paste-icons/cjs/ProcessDraftIcon.js 1.25 kB
./packages/paste-icons/cjs/ProcessErrorIcon.js 968 B
./packages/paste-icons/cjs/ProcessInProgressIcon.js 990 B
./packages/paste-icons/cjs/ProcessNeutralIcon.js 982 B
./packages/paste-icons/cjs/ProcessSuccessIcon.js 898 B
./packages/paste-icons/cjs/ProcessWarningIcon.js 1.01 kB
./packages/paste-icons/cjs/ProductAddOnsIcon.js 1.38 kB
./packages/paste-icons/cjs/ProductAdminAccessControlIcon.js 1.6 kB
./packages/paste-icons/cjs/ProductAdminAccountsIcon.js 1.11 kB
./packages/paste-icons/cjs/ProductAdminDomainsIcon.js 1.85 kB
./packages/paste-icons/cjs/ProductAdminResoldCustomersIcon.js 1.41 kB
./packages/paste-icons/cjs/ProductAdminSSOIcon.js 1.59 kB
./packages/paste-icons/cjs/ProductAdminUsersIcon.js 1.49 kB
./packages/paste-icons/cjs/ProductAPIExplorerIcon.js 1.27 kB
./packages/paste-icons/cjs/ProductAssetsIcon.js 1.07 kB
./packages/paste-icons/cjs/ProductAuthyIcon.js 1.22 kB
./packages/paste-icons/cjs/ProductAutopilotIcon.js 1.43 kB
./packages/paste-icons/cjs/ProductBillingIcon.js 1.32 kB
./packages/paste-icons/cjs/ProductChannelsIcon.js 1.05 kB
./packages/paste-icons/cjs/ProductChatIcon.js 1.16 kB
./packages/paste-icons/cjs/ProductCLIIcon.js 1.1 kB
./packages/paste-icons/cjs/ProductCodeExchangeCommunityIcon.js 1.75 kB
./packages/paste-icons/cjs/ProductCodeExchangePartnerIcon.js 1.66 kB
./packages/paste-icons/cjs/ProductConnectedDevicesIcon.js 1.53 kB
./packages/paste-icons/cjs/ProductConversationsIcon.js 1.23 kB
./packages/paste-icons/cjs/ProductDebuggerIcon.js 1.45 kB
./packages/paste-icons/cjs/ProductElasticSIPTrunkingIcon.js 1.46 kB
./packages/paste-icons/cjs/ProductEmailAPIIcon.js 1.09 kB
./packages/paste-icons/cjs/ProductEngagementIntelligencePlatformIcon.js 1.26 kB
./packages/paste-icons/cjs/ProductEventStreamsIcon.js 1.32 kB
./packages/paste-icons/cjs/ProductFaxIcon.js 1.34 kB
./packages/paste-icons/cjs/ProductFlexIcon.js 1.09 kB
./packages/paste-icons/cjs/ProductFrontlineIcon.js 1.09 kB
./packages/paste-icons/cjs/ProductFunctionsIcon.js 1.22 kB
./packages/paste-icons/cjs/ProductInsightsIcon.js 1.37 kB
./packages/paste-icons/cjs/ProductInterconnectIcon.js 1.09 kB
./packages/paste-icons/cjs/ProductInternetOfThingsEmbeddedSIMIcon.js 1.13 kB
./packages/paste-icons/cjs/ProductInternetOfThingsIcon.js 1.15 kB
./packages/paste-icons/cjs/ProductInternetOfThingsNarrowbandIcon.js 1.28 kB
./packages/paste-icons/cjs/ProductInternetOfThingsSuperSIMIcon.js 1.32 kB
./packages/paste-icons/cjs/ProductInternetOfThingsTrustOnboardIcon.js 1.35 kB
./packages/paste-icons/cjs/ProductInternetOfThingsWirelessIcon.js 1.24 kB
./packages/paste-icons/cjs/ProductKeysIcon.js 1.44 kB
./packages/paste-icons/cjs/ProductLiveIcon.js 1.25 kB
./packages/paste-icons/cjs/ProductLogsIcon.js 1.28 kB
./packages/paste-icons/cjs/ProductLookupIcon.js 1.02 kB
./packages/paste-icons/cjs/ProductMarketingCampaignsIcon.js 1.15 kB
./packages/paste-icons/cjs/ProductMessagingIcon.js 1.12 kB
./packages/paste-icons/cjs/ProductNotifyIcon.js 1.23 kB
./packages/paste-icons/cjs/ProductPhoneNumbersIcon.js 1.23 kB
./packages/paste-icons/cjs/ProductProxyIcon.js 1.29 kB
./packages/paste-icons/cjs/ProductRegionalIcon.js 1.81 kB
./packages/paste-icons/cjs/ProductSDKIcon.js 1.18 kB
./packages/paste-icons/cjs/ProductSettingsIcon.js 1.58 kB
./packages/paste-icons/cjs/ProductStudioIcon.js 1.03 kB
./packages/paste-icons/cjs/ProductSupportIcon.js 1.1 kB
./packages/paste-icons/cjs/ProductSyncIcon.js 1.26 kB
./packages/paste-icons/cjs/ProductTaskRouterIcon.js 1.07 kB
./packages/paste-icons/cjs/ProductTrustHubIcon.js 1.3 kB
./packages/paste-icons/cjs/ProductTwilioOrgIcon.js 1.3 kB
./packages/paste-icons/cjs/ProductTwiMLBinsIcon.js 1.01 kB
./packages/paste-icons/cjs/ProductUsageIcon.js 1.47 kB
./packages/paste-icons/cjs/ProductVerifyIcon.js 1.21 kB
./packages/paste-icons/cjs/ProductVideoIcon.js 1.12 kB
./packages/paste-icons/cjs/ProductVoiceIcon.js 1.33 kB
./packages/paste-icons/cjs/SearchIcon.js 983 B
./packages/paste-icons/cjs/ShowIcon.js 1.26 kB
./packages/paste-icons/cjs/ShrinkIcon.js 1.18 kB
./packages/paste-icons/cjs/SkipBackIcon.js 1.09 kB
./packages/paste-icons/cjs/SkipForwardIcon.js 1.1 kB
./packages/paste-icons/cjs/SMSCapableIcon.js 1.04 kB
./packages/paste-icons/cjs/StrikethroughIcon.js 1.22 kB
./packages/paste-icons/cjs/SuccessIcon.js 1 kB
./packages/paste-icons/cjs/SupportIcon.js 1.11 kB
./packages/paste-icons/cjs/ThemeIcon.js 1.37 kB
./packages/paste-icons/cjs/ThumbsDownIcon.js 1.68 kB
./packages/paste-icons/cjs/ThumbsUpIcon.js 1.67 kB
./packages/paste-icons/cjs/UnderlineIcon.js 1.07 kB
./packages/paste-icons/cjs/UnorderedListIcon.js 1.02 kB
./packages/paste-icons/cjs/UnpinIcon.js 1.08 kB
./packages/paste-icons/cjs/UnsortedIcon.js 1.1 kB
./packages/paste-icons/cjs/UploadToCloudIcon.js 1.46 kB
./packages/paste-icons/cjs/UserIcon.js 998 B
./packages/paste-icons/cjs/VoiceCapableIcon.js 1.25 kB
./packages/paste-icons/cjs/VolumeOffIcon.js 1.26 kB
./packages/paste-icons/cjs/VolumeOnIcon.js 1.36 kB
./packages/paste-icons/cjs/WarningIcon.js 1.11 kB
packages/paste-color-contrast-utils/dist/index.js 15.3 kB
packages/paste-core/components/alert-dialog/dist/index.js 1.99 kB
packages/paste-core/components/alert/dist/index.js 1.67 kB
packages/paste-core/components/anchor/dist/index.js 1.85 kB
packages/paste-core/components/avatar/dist/index.js 2.06 kB
packages/paste-core/components/badge/dist/index.js 2.17 kB
packages/paste-core/components/base-radio-checkbox/dist/index.js 1.57 kB
packages/paste-core/components/breadcrumb/dist/index.js 1.57 kB
packages/paste-core/components/button/dist/index.js 5.89 kB
packages/paste-core/components/card/dist/index.js 1.07 kB
packages/paste-core/components/checkbox/dist/index.js 2.8 kB
packages/paste-core/components/data-grid/dist/index.js 4.56 kB
packages/paste-core/components/date-picker/dist/index.js 8.83 kB
packages/paste-core/components/disclosure/dist/index.js 2.73 kB
packages/paste-core/components/display-pill-group/dist/index.js 1.25 kB
packages/paste-core/components/form-pill-group/dist/index.js 1.88 kB
packages/paste-core/components/form/dist/index.js 692 B
packages/paste-core/components/heading/dist/index.js 1.25 kB
packages/paste-core/components/help-text/dist/index.js 1.27 kB
packages/paste-core/components/inline-control-group/dist/index.js 1.4 kB
packages/paste-core/components/input-box/dist/index.js 2.33 kB
packages/paste-core/components/input/dist/index.js 1.86 kB
packages/paste-core/components/label/dist/index.js 1.56 kB
packages/paste-core/components/list/dist/index.js 1.31 kB
packages/paste-core/components/menu/dist/index.js 2.38 kB
packages/paste-core/components/modal/dist/index.js 3.15 kB
packages/paste-core/components/pagination/dist/index.js 3.65 kB
packages/paste-core/components/paragraph/dist/index.js 984 B
packages/paste-core/components/popover/dist/index.js 1.88 kB
packages/paste-core/components/radio-group/dist/index.js 1.93 kB
packages/paste-core/components/screen-reader-only/dist/index.js 996 B
packages/paste-core/components/select/dist/index.js 1.99 kB
packages/paste-core/components/separator/dist/index.js 1.11 kB
packages/paste-core/components/skeleton-loader/dist/index.js 1.41 kB
packages/paste-core/components/spinner/dist/index.js 1.59 kB
packages/paste-core/components/table/dist/index.js 2.13 kB
packages/paste-core/components/tabs/dist/index.js 2.65 kB
packages/paste-core/components/textarea/dist/index.js 5 kB
packages/paste-core/components/time-picker/dist/index.js 8.86 kB
packages/paste-core/components/toast/dist/index.js 3.44 kB
packages/paste-core/components/tooltip/dist/index.js 1.51 kB
packages/paste-core/components/truncate/dist/index.js 947 B
packages/paste-core/core-bundle/dist/alert-dialog.js 210 B
packages/paste-core/core-bundle/dist/alert.js 194 B
packages/paste-core/core-bundle/dist/anchor.js 197 B
packages/paste-core/core-bundle/dist/animation-library.js 211 B
packages/paste-core/core-bundle/dist/aspect-ratio.js 205 B
packages/paste-core/core-bundle/dist/avatar.js 200 B
packages/paste-core/core-bundle/dist/badge.js 199 B
packages/paste-core/core-bundle/dist/base-radio-checkbox.js 218 B
packages/paste-core/core-bundle/dist/box.js 195 B
packages/paste-core/core-bundle/dist/breadcrumb.js 204 B
packages/paste-core/core-bundle/dist/button.js 201 B
packages/paste-core/core-bundle/dist/card.js 199 B
packages/paste-core/core-bundle/dist/checkbox.js 201 B
packages/paste-core/core-bundle/dist/clipboard-copy-library.js 219 B
packages/paste-core/core-bundle/dist/color-contrast-utils.js 219 B
packages/paste-core/core-bundle/dist/combobox-primitive.js 213 B
packages/paste-core/core-bundle/dist/combobox.js 203 B
packages/paste-core/core-bundle/dist/customization.js 206 B
packages/paste-core/core-bundle/dist/data-grid.js 204 B
packages/paste-core/core-bundle/dist/date-picker.js 205 B
packages/paste-core/core-bundle/dist/design-tokens.js 209 B
packages/paste-core/core-bundle/dist/disclosure-primitive.js 213 B
packages/paste-core/core-bundle/dist/disclosure.js 204 B
packages/paste-core/core-bundle/dist/display-pill-group.js 217 B
packages/paste-core/core-bundle/dist/dropdown-library.js 211 B
packages/paste-core/core-bundle/dist/flex.js 196 B
packages/paste-core/core-bundle/dist/form-pill-group.js 215 B
packages/paste-core/core-bundle/dist/form.js 197 B
packages/paste-core/core-bundle/dist/grid.js 196 B
packages/paste-core/core-bundle/dist/heading.js 199 B
packages/paste-core/core-bundle/dist/help-text.js 204 B
packages/paste-core/core-bundle/dist/index.js 1.19 kB
packages/paste-core/core-bundle/dist/inline-control-group.js 218 B
packages/paste-core/core-bundle/dist/input-box.js 206 B
packages/paste-core/core-bundle/dist/input.js 200 B
packages/paste-core/core-bundle/dist/label.js 196 B
packages/paste-core/core-bundle/dist/list.js 195 B
packages/paste-core/core-bundle/dist/media-object.js 202 B
packages/paste-core/core-bundle/dist/menu-primitive.js 210 B
packages/paste-core/core-bundle/dist/menu.js 196 B
packages/paste-core/core-bundle/dist/modal-dialog-primitive.js 219 B
packages/paste-core/core-bundle/dist/modal.js 196 B
packages/paste-core/core-bundle/dist/non-modal-dialog-primitive.js 224 B
packages/paste-core/core-bundle/dist/pagination.js 199 B
packages/paste-core/core-bundle/dist/paragraph.js 202 B
packages/paste-core/core-bundle/dist/popover.js 201 B
packages/paste-core/core-bundle/dist/radio-group.js 208 B
packages/paste-core/core-bundle/dist/reakit-library.js 211 B
packages/paste-core/core-bundle/dist/screen-reader-only.js 214 B
packages/paste-core/core-bundle/dist/select.js 197 B
packages/paste-core/core-bundle/dist/separator.js 199 B
packages/paste-core/core-bundle/dist/sibling-box.js 206 B
packages/paste-core/core-bundle/dist/skeleton-loader.js 211 B
packages/paste-core/core-bundle/dist/spinner.js 198 B
packages/paste-core/core-bundle/dist/stack.js 200 B
packages/paste-core/core-bundle/dist/style-props.js 202 B
packages/paste-core/core-bundle/dist/styling-library.js 210 B
packages/paste-core/core-bundle/dist/table.js 195 B
packages/paste-core/core-bundle/dist/tabs-primitive.js 210 B
packages/paste-core/core-bundle/dist/tabs.js 196 B
packages/paste-core/core-bundle/dist/text.js 195 B
packages/paste-core/core-bundle/dist/textarea.js 198 B
packages/paste-core/core-bundle/dist/theme.js 196 B
packages/paste-core/core-bundle/dist/time-picker.js 206 B
packages/paste-core/core-bundle/dist/toast.js 195 B
packages/paste-core/core-bundle/dist/tooltip-primitive.js 212 B
packages/paste-core/core-bundle/dist/tooltip.js 198 B
packages/paste-core/core-bundle/dist/truncate.js 198 B
packages/paste-core/core-bundle/dist/types.js 196 B
packages/paste-core/core-bundle/dist/uid-library.js 208 B
packages/paste-core/core-bundle/dist/utils.js 200 B
packages/paste-core/layout/aspect-ratio/dist/index.js 1.11 kB
packages/paste-core/layout/flex/dist/index.js 2.42 kB
packages/paste-core/layout/grid/dist/index.js 2.4 kB
packages/paste-core/layout/media-object/dist/index.js 1.3 kB
packages/paste-core/layout/stack/dist/index.js 1.51 kB
packages/paste-core/primitives/box/dist/index.js 3.42 kB
packages/paste-core/primitives/combobox/dist/index.js 579 B
packages/paste-core/primitives/disclosure/dist/index.js 570 B
packages/paste-core/primitives/menu/dist/index.js 622 B
packages/paste-core/primitives/modal-dialog/dist/index.js 23.4 kB
packages/paste-core/primitives/non-modal-dialog/dist/index.js 590 B
packages/paste-core/primitives/sibling-box/dist/index.js 1.44 kB
packages/paste-core/primitives/tabs/dist/index.js 572 B
packages/paste-core/primitives/text/dist/index.js 3.02 kB
packages/paste-core/primitives/tooltip/dist/index.js 578 B
packages/paste-customization/dist/index.js 2.38 kB
packages/paste-design-tokens/dist/themes/console/tokens.common.js 3.86 kB
packages/paste-design-tokens/dist/themes/dark/tokens.common.js 3.3 kB
packages/paste-design-tokens/dist/themes/sendgrid/tokens.common.js 3.24 kB
packages/paste-design-tokens/dist/tokens.common.js 3.9 kB
packages/paste-libraries/animation/dist/index.js 24.5 kB
packages/paste-libraries/clipboard-copy/dist/index.js 1.7 kB
packages/paste-libraries/dropdown/dist/index.js 26.5 kB
packages/paste-libraries/reakit/dist/index.js 48.6 kB
packages/paste-libraries/styling/dist/index.js 27 kB
packages/paste-libraries/uid/dist/index.js 2.1 kB
packages/paste-style-props/dist/index.js 5.68 kB
packages/paste-theme/dist/index.js 3.56 kB
packages/paste-types/dist/index.js 20 B
packages/paste-utils/dist/index.js 2.42 kB

compressed-size-action

@andioneto andioneto force-pushed the fix/combobox-virtualization-sizing branch from cf94a17 to 14128a1 Compare October 7, 2021 23:25
@andioneto andioneto marked this pull request as ready for review October 7, 2021 23:27
@andioneto andioneto requested review from a team as code owners October 7, 2021 23:27
@andioneto andioneto requested a review from TheSisb October 7, 2021 23:27

const mockMeasureRef = jest.fn();

jest.mock('react-virtual', () => {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👂 LMK if this isn't clear, but basically I mocked the ref here as a backdoor way to "spy" on the ref being used. I implemented it with itself because I wanted to also confirm that it correctly sets the height and ARIA attributes on virtualized items.

@@ -0,0 +1,198 @@
import * as React from 'react';
Copy link
Contributor Author

@andioneto andioneto Oct 7, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ℹ️ This is in it's own test file because I wanted to mock part of the return value from the useVirtual hook from react-virtual. It's very possible to "turn off" or reset mocks within a single test file, but I felt this would be less confusing.

@SiTaggart
Copy link
Contributor

This has seemed to introduce a weird bug with scrolling. If I scroll the list, and move my mouse out of the listbox, it resets the scroll position to the top of the virtual list.

recording

Browser metadata
Path:      /components/combobox
Browser:   Edge 94.0.992.38 on Mac OS 10.15.7
Viewport:  3008 x 1556 @2x
Language:  en-AU
Cookies:   Enabled

Open in BrowserStack

Open Deploy Preview · Mark as Resolved

@SiTaggart
Copy link
Contributor

Demo or the scroll behaviour. I don't think it's a huge deal, its definitely better than it was.

recording

Browser metadata
Path:      /components/combobox
Browser:   Edge 94.0.992.38 on Mac OS 10.15.7
Viewport:  1541 x 1200 @2x
Language:  en-AU
Cookies:   Enabled

Open in BrowserStack

Open Deploy Preview · Mark as Resolved

@andioneto andioneto force-pushed the fix/combobox-virtualization-sizing branch from ecaa331 to 01c278c Compare October 11, 2021 18:58
Copy link
Contributor

@SiTaggart SiTaggart left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this is in a good enough state to call the initial bug fixed 🎉

@@ -45,7 +56,7 @@ const ComboboxToTest = ({element = 'COMBOBOX'}): React.ReactElement => (

describe('Combobox data-paste-element attributes', () => {
it('should set the correct attributes on all Combobox components', () => {
const {container} = render(<ComboboxToTest />);
const {container} = render(<ComboboxToTest />, {wrapper: initCustomizationWrapper()});
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice refactors

@@ -50,23 +51,25 @@ const smallGroupedItems = [
{label: 'Design Tokens'},
];

const ThemeWrapper: RenderOptions['wrapper'] = ({children}) => (
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TY for explaining the differences between these wrappers yesterday!

@andioneto andioneto force-pushed the fix/combobox-virtualization-sizing branch from 4c1650a to b83ef38 Compare October 13, 2021 16:43
@andioneto andioneto merged commit b17344d into main Oct 13, 2021
@andioneto andioneto deleted the fix/combobox-virtualization-sizing branch October 13, 2021 17:13
@TwilioPasteBot TwilioPasteBot mentioned this pull request Oct 13, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: Components Related to the component library (core) of this system Status: Do Not Merge This PR is not yet ready to be merged back into the main branch Type: Tests Adds tests to the code
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants