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(Select): add max height for Select.Options #1858

Merged
merged 5 commits into from
Feb 26, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@
"@storybook/addon-styling": "^1.3.7",
"@storybook/react": "^7.6.17",
"@storybook/react-webpack5": "^7.6.17",
"@storybook/test": "^7.6.17",
"@storybook/testing-library": "^0.2.2",
"@storybook/testing-react": "^2.0.1",
"@testing-library/jest-dom": "^6.4.2",
Expand Down
1 change: 1 addition & 0 deletions src/components/Select/Select.module.css
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@
* The container for the individual select options.
*/
.select__options {
max-height: 25vh;
z-index: 100;
}

Expand Down
50 changes: 50 additions & 0 deletions src/components/Select/Select.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { StoryObj, Meta } from '@storybook/react';
import { expect } from '@storybook/test';
import { userEvent, within } from '@storybook/testing-library';
import React from 'react';
import { Select } from './Select';
Expand Down Expand Up @@ -474,6 +475,55 @@ export const AdjustedWidth: StoryObj = {
},
};

/**
* We lock the maximum height of the option list to 1/4 of the available screen height. Scrolling is allowed in the list, and
* keyboard navigation (showing the items off the edge of the screen) is handled when used.
*/
export const LongOptionList: StoryObj = {
args: {
...Default.args,
defaultValue: 'test3',
className: 'w-60',
children: (
<>
<Select.Button>
{({ value, open, disabled }) => (
<Select.ButtonWrapper isOpen={open} shouldTruncate>
{value}
</Select.ButtonWrapper>
)}
</Select.Button>
<Select.Options>
{Array(30)
.fill('test')
.map((option, index) => (
// eslint-disable-next-line react/no-array-index-key
<Select.Option key={`${option}-${index}`} value={option + index}>
{option}
{index}
</Select.Option>
))}
</Select.Options>
</>
),
},
play: async (playOptions) => {
const canvas = within(playOptions.canvasElement);
const selectButton = await canvas.findByRole('button');

await openMenu(playOptions);
await userEvent.keyboard('{ArrowDown}{ArrowDown}{ArrowDown}{ArrowDown}');

await expect(selectButton.getAttribute('aria-expanded')).toEqual('true');
},
parameters: {
badges: ['1.2'],
layout: 'centered',
chromatic: { delay: 450 },
},
decorators: [(Story) => <div className="p-8 pb-16">{Story()}</div>],
};

/**
* If you want a different width for the trigger and the dropdown popover, you can control them separately.
*/
Expand Down
1 change: 1 addition & 0 deletions src/components/Select/Select.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import * as stories from './Select.stories';

const {
OpenByDefault,
LongOptionList,
Disabled,
DisabledRequired,
OptionsRightAligned,
Expand Down
177 changes: 173 additions & 4 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1923,6 +1923,7 @@ __metadata:
"@storybook/addon-styling": "npm:^1.3.7"
"@storybook/react": "npm:^7.6.17"
"@storybook/react-webpack5": "npm:^7.6.17"
"@storybook/test": "npm:^7.6.17"
"@storybook/testing-library": "npm:^0.2.2"
"@storybook/testing-react": "npm:^2.0.1"
"@testing-library/jest-dom": "npm:^6.4.2"
Expand Down Expand Up @@ -4808,6 +4809,21 @@ __metadata:
languageName: node
linkType: hard

"@storybook/instrumenter@npm:7.6.17":
version: 7.6.17
resolution: "@storybook/instrumenter@npm:7.6.17"
dependencies:
"@storybook/channels": "npm:7.6.17"
"@storybook/client-logger": "npm:7.6.17"
"@storybook/core-events": "npm:7.6.17"
"@storybook/global": "npm:^5.0.0"
"@storybook/preview-api": "npm:7.6.17"
"@vitest/utils": "npm:^0.34.6"
util: "npm:^0.12.4"
checksum: 10/1be1bbfd93619a70a9b4b1fc2ef1566e9ddf02f66812ca52a149079a37e490d3d7371098464f1c0bc2ad130b0d41affadd9abad5f177e5e1272c2802f8384bab
languageName: node
linkType: hard

"@storybook/manager-api@npm:7.5.3, @storybook/manager-api@npm:^7.0.12":
version: 7.5.3
resolution: "@storybook/manager-api@npm:7.5.3"
Expand Down Expand Up @@ -5103,6 +5119,26 @@ __metadata:
languageName: node
linkType: hard

"@storybook/test@npm:^7.6.17":
version: 7.6.17
resolution: "@storybook/test@npm:7.6.17"
dependencies:
"@storybook/client-logger": "npm:7.6.17"
"@storybook/core-events": "npm:7.6.17"
"@storybook/instrumenter": "npm:7.6.17"
"@storybook/preview-api": "npm:7.6.17"
"@testing-library/dom": "npm:^9.3.1"
"@testing-library/jest-dom": "npm:^6.1.3"
"@testing-library/user-event": "npm:14.3.0"
"@types/chai": "npm:^4"
"@vitest/expect": "npm:^0.34.2"
"@vitest/spy": "npm:^0.34.1"
chai: "npm:^4.3.7"
util: "npm:^0.12.4"
checksum: 10/bf1e04e535817bfbde4651070e60f112d588bcf44b579f8e6061be6ad8a1d6e0eca951628c469f722a960ab21f8188e0495e97423ab052e2f3d01d92b27295d8
languageName: node
linkType: hard

"@storybook/testing-library@npm:^0.2.2":
version: 0.2.2
resolution: "@storybook/testing-library@npm:0.2.2"
Expand Down Expand Up @@ -5357,7 +5393,23 @@ __metadata:
languageName: node
linkType: hard

"@testing-library/jest-dom@npm:^6.4.2":
"@testing-library/dom@npm:^9.3.1":
version: 9.3.4
resolution: "@testing-library/dom@npm:9.3.4"
dependencies:
"@babel/code-frame": "npm:^7.10.4"
"@babel/runtime": "npm:^7.12.5"
"@types/aria-query": "npm:^5.0.1"
aria-query: "npm:5.1.3"
chalk: "npm:^4.1.0"
dom-accessibility-api: "npm:^0.5.9"
lz-string: "npm:^1.5.0"
pretty-format: "npm:^27.0.2"
checksum: 10/510da752ea76f4a10a0a4e3a77917b0302cf03effe576cd3534cab7e796533ee2b0e9fb6fb11b911a1ebd7c70a0bb6f235bf4f816c9b82b95b8fe0cddfd10975
languageName: node
linkType: hard

"@testing-library/jest-dom@npm:^6.1.3, @testing-library/jest-dom@npm:^6.4.2":
version: 6.4.2
resolution: "@testing-library/jest-dom@npm:6.4.2"
dependencies:
Expand Down Expand Up @@ -5404,6 +5456,15 @@ __metadata:
languageName: node
linkType: hard

"@testing-library/user-event@npm:14.3.0":
version: 14.3.0
resolution: "@testing-library/user-event@npm:14.3.0"
peerDependencies:
"@testing-library/dom": ">=7.21.4"
checksum: 10/07aac130b2688ec683819330a661bcc43dd3d58505df83c92484fc9937fabf853a31a75b6ce9a256a69aeddf462ae8c413cf28bbbe458364bf679c24c7134619
languageName: node
linkType: hard

"@testing-library/user-event@npm:^14.4.0":
version: 14.5.1
resolution: "@testing-library/user-event@npm:14.5.1"
Expand Down Expand Up @@ -5526,6 +5587,13 @@ __metadata:
languageName: node
linkType: hard

"@types/chai@npm:^4":
version: 4.3.12
resolution: "@types/chai@npm:4.3.12"
checksum: 10/cf465151048f438b11e562ac431842f440b50817e74516f1fb349860a0db4fcdd665197f9fbee4387250d8d077496a1167fe2c75af88372bac6d8f093ee07b3a
languageName: node
linkType: hard

"@types/connect@npm:*":
version: 3.4.38
resolution: "@types/connect@npm:3.4.38"
Expand Down Expand Up @@ -6251,6 +6319,37 @@ __metadata:
languageName: node
linkType: hard

"@vitest/expect@npm:^0.34.2":
version: 0.34.7
resolution: "@vitest/expect@npm:0.34.7"
dependencies:
"@vitest/spy": "npm:0.34.7"
"@vitest/utils": "npm:0.34.7"
chai: "npm:^4.3.10"
checksum: 10/0d2fbacdd022f8ee24400fadb065d701fe514a61f8d8e35c6ca3aeb6949587d917c821abc8550bb5c65f89b1b50919bd7e2fe970a373dc4626ab02abcbf10f07
languageName: node
linkType: hard

"@vitest/spy@npm:0.34.7, @vitest/spy@npm:^0.34.1":
version: 0.34.7
resolution: "@vitest/spy@npm:0.34.7"
dependencies:
tinyspy: "npm:^2.1.1"
checksum: 10/67d82626e1cc6bf442b7c17d9adcb33f4302d45b8ea02500aa9ec8617a56931759bb6bf1d64cef6469e877d06c094fca8eea1306e6ba94c69f93424f18b791a8
languageName: node
linkType: hard

"@vitest/utils@npm:0.34.7, @vitest/utils@npm:^0.34.6":
version: 0.34.7
resolution: "@vitest/utils@npm:0.34.7"
dependencies:
diff-sequences: "npm:^29.4.3"
loupe: "npm:^2.3.6"
pretty-format: "npm:^29.5.0"
checksum: 10/720b43f8fece1371aaafc722e5d86e1f5e4334db2aac638002a05cd60f097763ff07ae7e3a99db99f7c282d3f60036b76ee91129cf9f2e877812dd5eb432024f
languageName: node
linkType: hard

"@webassemblyjs/ast@npm:1.11.6, @webassemblyjs/ast@npm:^1.11.5":
version: 1.11.6
resolution: "@webassemblyjs/ast@npm:1.11.6"
Expand Down Expand Up @@ -6990,6 +7089,13 @@ __metadata:
languageName: node
linkType: hard

"assertion-error@npm:^1.1.0":
version: 1.1.0
resolution: "assertion-error@npm:1.1.0"
checksum: 10/fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf
languageName: node
linkType: hard

"ast-types-flow@npm:^0.0.8":
version: 0.0.8
resolution: "ast-types-flow@npm:0.0.8"
Expand Down Expand Up @@ -7705,6 +7811,21 @@ __metadata:
languageName: node
linkType: hard

"chai@npm:^4.3.10, chai@npm:^4.3.7":
version: 4.4.1
resolution: "chai@npm:4.4.1"
dependencies:
assertion-error: "npm:^1.1.0"
check-error: "npm:^1.0.3"
deep-eql: "npm:^4.1.3"
get-func-name: "npm:^2.0.2"
loupe: "npm:^2.3.6"
pathval: "npm:^1.1.1"
type-detect: "npm:^4.0.8"
checksum: 10/c6d7aba913a67529c68dbec3673f94eb9c586c5474cc5142bd0b587c9c9ec9e5fbaa937e038ecaa6475aea31433752d5fabdd033b9248bde6ae53befcde774ae
languageName: node
linkType: hard

"chalk@npm:5.3.0, chalk@npm:^5.3.0":
version: 5.3.0
resolution: "chalk@npm:5.3.0"
Expand Down Expand Up @@ -7777,6 +7898,15 @@ __metadata:
languageName: node
linkType: hard

"check-error@npm:^1.0.3":
version: 1.0.3
resolution: "check-error@npm:1.0.3"
dependencies:
get-func-name: "npm:^2.0.2"
checksum: 10/e2131025cf059b21080f4813e55b3c480419256914601750b0fee3bd9b2b8315b531e551ef12560419b8b6d92a3636511322752b1ce905703239e7cc451b6399
languageName: node
linkType: hard

"chokidar@npm:3.5.3, chokidar@npm:^3.3.0, chokidar@npm:^3.5.3":
version: 3.5.3
resolution: "chokidar@npm:3.5.3"
Expand Down Expand Up @@ -9073,6 +9203,15 @@ __metadata:
languageName: node
linkType: hard

"deep-eql@npm:^4.1.3":
version: 4.1.3
resolution: "deep-eql@npm:4.1.3"
dependencies:
type-detect: "npm:^4.0.0"
checksum: 10/12ce93ae63de187e77b076d3d51bfc28b11f98910a22c18714cce112791195e86a94f97788180994614b14562a86c9763f67c69f785e4586f806b5df39bf9301
languageName: node
linkType: hard

"deep-equal@npm:^2.0.5":
version: 2.2.3
resolution: "deep-equal@npm:2.2.3"
Expand Down Expand Up @@ -9325,7 +9464,7 @@ __metadata:
languageName: node
linkType: hard

"diff-sequences@npm:^29.6.3":
"diff-sequences@npm:^29.4.3, diff-sequences@npm:^29.6.3":
version: 29.6.3
resolution: "diff-sequences@npm:29.6.3"
checksum: 10/179daf9d2f9af5c57ad66d97cb902a538bcf8ed64963fa7aa0c329b3de3665ce2eb6ffdc2f69f29d445fa4af2517e5e55e5b6e00c00a9ae4f43645f97f7078cb
Expand Down Expand Up @@ -11127,6 +11266,13 @@ __metadata:
languageName: node
linkType: hard

"get-func-name@npm:^2.0.1, get-func-name@npm:^2.0.2":
version: 2.0.2
resolution: "get-func-name@npm:2.0.2"
checksum: 10/3f62f4c23647de9d46e6f76d2b3eafe58933a9b3830c60669e4180d6c601ce1b4aa310ba8366143f55e52b139f992087a9f0647274e8745621fa2af7e0acf13b
languageName: node
linkType: hard

"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2":
version: 1.2.2
resolution: "get-intrinsic@npm:1.2.2"
Expand Down Expand Up @@ -14179,6 +14325,15 @@ __metadata:
languageName: node
linkType: hard

"loupe@npm:^2.3.6":
version: 2.3.7
resolution: "loupe@npm:2.3.7"
dependencies:
get-func-name: "npm:^2.0.1"
checksum: 10/635c8f0914c2ce7ecfe4e239fbaf0ce1d2c00e4246fafcc4ed000bfdb1b8f89d05db1a220054175cca631ebf3894872a26fffba0124477fcb562f78762848fb1
languageName: node
linkType: hard

"lower-case@npm:^2.0.2":
version: 2.0.2
resolution: "lower-case@npm:2.0.2"
Expand Down Expand Up @@ -15814,6 +15969,13 @@ __metadata:
languageName: node
linkType: hard

"pathval@npm:^1.1.1":
version: 1.1.1
resolution: "pathval@npm:1.1.1"
checksum: 10/b50a4751068aa3a5428f5a0b480deecedc6f537666a3630a0c2ae2d5e7c0f4bf0ee77b48404441ec1220bef0c91625e6030b3d3cf5a32ab0d9764018d1d9dbb6
languageName: node
linkType: hard

"peek-stream@npm:^1.1.0":
version: 1.1.3
resolution: "peek-stream@npm:1.1.3"
Expand Down Expand Up @@ -16669,7 +16831,7 @@ __metadata:
languageName: node
linkType: hard

"pretty-format@npm:^29.0.0, pretty-format@npm:^29.7.0":
"pretty-format@npm:^29.0.0, pretty-format@npm:^29.5.0, pretty-format@npm:^29.7.0":
version: 29.7.0
resolution: "pretty-format@npm:29.7.0"
dependencies:
Expand Down Expand Up @@ -19426,6 +19588,13 @@ __metadata:
languageName: node
linkType: hard

"tinyspy@npm:^2.1.1":
version: 2.2.1
resolution: "tinyspy@npm:2.2.1"
checksum: 10/170d6232e87f9044f537b50b406a38fbfd6f79a261cd12b92879947bd340939a833a678632ce4f5c4a6feab4477e9c21cd43faac3b90b68b77dd0536c4149736
languageName: node
linkType: hard

"tippy.js@npm:^6.3.1":
version: 6.3.7
resolution: "tippy.js@npm:6.3.7"
Expand Down Expand Up @@ -19646,7 +19815,7 @@ __metadata:
languageName: node
linkType: hard

"type-detect@npm:4.0.8":
"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.8":
version: 4.0.8
resolution: "type-detect@npm:4.0.8"
checksum: 10/5179e3b8ebc51fce1b13efb75fdea4595484433f9683bbc2dca6d99789dba4e602ab7922d2656f2ce8383987467f7770131d4a7f06a26287db0615d2f4c4ce7d
Expand Down
Loading