Skip to content

Commit 406ef1c

Browse files
authored
Merge pull request Shopify#2451 from Shopify/rename-keys
Refactor Keys enum to follow naming conventions
2 parents 3fdfb57 + 780586c commit 406ef1c

File tree

14 files changed

+133
-138
lines changed

14 files changed

+133
-138
lines changed

UNRELEASED.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ The autocomplete component is an input field that provides selectable suggestion
5454
- Added padding top and bottom on `Card.Section` when set to full width ([#2280](https://github.com/Shopify/polaris-react/pull/2280))
5555
- Fixed `Portal` rendering by using `componentDidMount` lifecycle hook as opposed to `componentWillMount` ([#2243](https://github.com/Shopify/polaris-react/pull/2243));
5656
- Fixed an issue where clicking a `Link` without a `url` in a form would implicitly submit the form. `Link` can no longer submit forms. Use `<Button submit>` instead.
57+
- Renamed the `Keys` enum to align with Shopify naming standards. It is now singular and the properties are in PascalCase. Replace `import {Keys} from '@shopify/polaris'` with `import {Key} from '@shopify/polaris'` and change the casing of the properties, e.g. replace `Keys.DOWN_ARROW` with `Key.DownArrow` ([#2451](https://github.com/Shopify/polaris-react/pull/2451))
5758

5859
### Documentation
5960

src/components/Autocomplete/components/ComboBox/ComboBox.tsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import OptionList, {OptionDescriptor} from '../../../OptionList';
99
import ActionList from '../../../ActionList';
1010
import Popover from '../../../Popover';
1111
import {PreferredPosition} from '../../../PositionedOverlay';
12-
import {ActionListItemDescriptor, Keys} from '../../../../types';
12+
import {ActionListItemDescriptor, Key} from '../../../../types';
1313
import {contextTypes} from '../types';
1414
import {TextField} from './components';
1515
import KeypressListener from '../../../KeypressListener';
@@ -244,16 +244,13 @@ export default class ComboBox extends React.PureComponent<Props, State> {
244244
tabIndex={0}
245245
>
246246
<KeypressListener
247-
keyCode={Keys.DOWN_ARROW}
247+
keyCode={Key.DownArrow}
248248
handler={this.handleDownArrow}
249249
/>
250+
<KeypressListener keyCode={Key.UpArrow} handler={this.handleUpArrow} />
251+
<KeypressListener keyCode={Key.Enter} handler={this.handleEnter} />
250252
<KeypressListener
251-
keyCode={Keys.UP_ARROW}
252-
handler={this.handleUpArrow}
253-
/>
254-
<KeypressListener keyCode={Keys.ENTER} handler={this.handleEnter} />
255-
<KeypressListener
256-
keyCode={Keys.ESCAPE}
253+
keyCode={Key.Escape}
257254
handler={this.handlePopoverClose}
258255
/>
259256
<Popover

src/components/Autocomplete/components/ComboBox/tests/ComboBox.test.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import ComboBox from '..';
44
import {OptionList, ActionList, Popover} from 'components';
55
import {mountWithAppProvider} from 'tests/utilities';
66
import {TextField} from '../components';
7-
import {Keys} from '../../../../../types';
7+
import {Key} from '../../../../../types';
88

99
interface HandlerMap {
1010
[eventName: string]: (event: any) => void;
@@ -433,7 +433,7 @@ describe('<ComboBox/>', () => {
433433

434434
async () => {
435435
comboBox.find(TextField).simulate('click');
436-
listenerMap.keyup({keyCode: Keys.DOWN_ARROW});
436+
listenerMap.keyup({keyCode: Key.DownArrow});
437437
await expect(comboBox.state('selectedIndex')).toBe(0);
438438
};
439439
});
@@ -451,11 +451,11 @@ describe('<ComboBox/>', () => {
451451

452452
async () => {
453453
comboBox.find(TextField).simulate('click');
454-
await listenerMap.keyup({keyCode: Keys.DOWN_ARROW});
454+
await listenerMap.keyup({keyCode: Key.DownArrow});
455455
};
456456

457457
async () => {
458-
listenerMap.keyup({keyCode: Keys.ENTER});
458+
listenerMap.keyup({keyCode: Key.Enter});
459459
await expect(spy).toHaveBeenCalledTimes(1);
460460
expect(comboBox.prop('selected')[0]).toBe('cheese_pizza');
461461
};
@@ -472,7 +472,7 @@ describe('<ComboBox/>', () => {
472472
);
473473

474474
async () => {
475-
listenerMap.keyup({keyCode: Keys.TAB});
475+
listenerMap.keyup({keyCode: Key.Tab});
476476
await expect(comboBox.state('popoverActive')).toBe(true);
477477
};
478478
});
@@ -489,12 +489,12 @@ describe('<ComboBox/>', () => {
489489

490490
async () => {
491491
comboBox.find(TextField).simulate('click');
492-
await listenerMap.keyup({keyCode: Keys.DOWN_ARROW});
492+
await listenerMap.keyup({keyCode: Key.DownArrow});
493493
expect(comboBox.state('popoverActive')).toBe(true);
494494
};
495495

496496
async () => {
497-
listenerMap.keyup({keyCode: Keys.ESCAPE});
497+
listenerMap.keyup({keyCode: Key.Escape});
498498
await expect(comboBox.state('popoverActive')).toBe(false);
499499
};
500500
});

src/components/Frame/components/Toast/Toast.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react';
22
import {classNames} from '@shopify/react-utilities';
33
import {KeypressListener, ToastProps} from '../../../../components';
44
import Icon from '../../../Icon';
5-
import {Keys} from '../../../../types';
5+
import {Key} from '../../../../types';
66

77
import * as styles from './Toast.scss';
88

@@ -36,7 +36,7 @@ export default class Toast extends React.Component<Props, never> {
3636

3737
return (
3838
<div className={className}>
39-
<KeypressListener keyCode={Keys.ESCAPE} handler={onDismiss} />
39+
<KeypressListener keyCode={Key.Escape} handler={onDismiss} />
4040
{content}
4141
{dismissMarkup}
4242
</div>

src/components/Frame/components/Toast/tests/Toast.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {timer} from '@shopify/jest-dom-mocks';
33
import {mountWithAppProvider} from 'tests/utilities';
44
import {noop} from 'utilities/other';
55
import Toast, {Props} from '../Toast';
6-
import {Keys} from '../../../../../types';
6+
import {Key} from '../../../../../types';
77

88
interface HandlerMap {
99
[eventName: string]: (event: any) => void;
@@ -56,7 +56,7 @@ describe('<Toast />', () => {
5656
const spy = jest.fn();
5757
mountWithAppProvider(<Toast content="Image uploaded" onDismiss={spy} />);
5858

59-
listenerMap.keyup({keyCode: Keys.ESCAPE});
59+
listenerMap.keyup({keyCode: Key.Escape});
6060

6161
document.removeEventListener = jest.fn((event) => {
6262
listenerMap[event] = noop;

src/components/KeypressListener/KeypressListener.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ import {
44
addEventListener,
55
removeEventListener,
66
} from '@shopify/javascript-utilities/events';
7-
import {Keys} from '../../types';
7+
import {Key} from '../../types';
88

99
export interface Props {
10-
keyCode: Keys;
10+
keyCode: Key;
1111
handler(event: KeyboardEvent): void;
1212
}
1313

src/components/KeypressListener/tests/KeypressListener.test.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as React from 'react';
22
import {noop} from '@shopify/javascript-utilities/other';
33
import {mountWithAppProvider} from 'tests/utilities';
4-
import {Keys} from '../../../types';
4+
import {Key} from '../../../types';
55
import KeypressListener from '../KeypressListener';
66

77
interface HandlerMap {
@@ -32,22 +32,22 @@ describe('<KeypressListener />', () => {
3232
const spy = jest.fn();
3333

3434
mountWithAppProvider(
35-
<KeypressListener handler={spy} keyCode={Keys.ESCAPE} />,
35+
<KeypressListener handler={spy} keyCode={Key.Escape} />,
3636
);
3737

38-
listenerMap.keyup({keyCode: Keys.ESCAPE});
39-
listenerMap.keyup({keyCode: Keys.ENTER});
38+
listenerMap.keyup({keyCode: Key.Escape});
39+
listenerMap.keyup({keyCode: Key.Enter});
4040
expect(spy).toHaveBeenCalledTimes(1);
4141
});
4242

4343
it('removes listener for the given key on unmount', () => {
4444
const spy = jest.fn();
4545

4646
mountWithAppProvider(
47-
<KeypressListener handler={spy} keyCode={Keys.ESCAPE} />,
47+
<KeypressListener handler={spy} keyCode={Key.Escape} />,
4848
).unmount();
4949

50-
listenerMap.keyup({keyCode: Keys.ESCAPE});
50+
listenerMap.keyup({keyCode: Key.Escape});
5151
expect(spy).not.toBeCalled();
5252
});
5353
});

src/components/Modal/components/Dialog/Dialog.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {Transition, CSSTransition} from 'react-transition-group';
44
import {KeypressListener, TrapFocus} from '../../../../components';
55
import memoizedBind from '../../../../utilities/memoized-bind';
66
import {Duration} from '../../../shared';
7-
import {AnimationProps, Keys} from '../../../../types';
7+
import {AnimationProps, Key} from '../../../../types';
88
import * as styles from './Dialog.scss';
99

1010
export interface DialogProps {
@@ -65,7 +65,7 @@ export default function Dialog({
6565
tabIndex={-1}
6666
>
6767
<KeypressListener
68-
keyCode={Keys.ESCAPE}
68+
keyCode={Key.Escape}
6969
handler={handleClose}
7070
testID="CloseKeypressListener"
7171
/>

src/components/Pagination/Pagination.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,16 @@ import Icon from '../Icon';
66
import UnstyledLink from '../UnstyledLink';
77
import Tooltip from '../Tooltip';
88
import KeypressListener from '../KeypressListener';
9-
import {Keys} from '../../types';
9+
import {Key} from '../../types';
1010
import {handleMouseUpByBlurring} from '../../utilities/focus';
1111

1212
import * as styles from './Pagination.scss';
1313

1414
export interface PaginationDescriptor {
1515
/** Keyboard shortcuts for the next button */
16-
nextKeys?: Keys[];
16+
nextKeys?: Key[];
1717
/** Keyboard shortcuts for the previous button */
18-
previousKeys?: Keys[];
18+
previousKeys?: Key[];
1919
/** Tooltip for the next button */
2020
nextTooltip?: string;
2121
/** Tooltip for the previous button */

src/components/Pagination/tests/Pagination.test.tsx

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import {noop} from '@shopify/javascript-utilities/other';
33
import {ReactWrapper} from 'enzyme';
44
import {mountWithAppProvider, findByTestID} from 'tests/utilities';
55
import {Tooltip, TextField} from 'components';
6-
import {Keys} from '../../../types';
6+
import {Key} from '../../../types';
77
import Pagination from '../Pagination';
88

99
interface HandlerMap {
@@ -62,10 +62,10 @@ describe('<Pagination />', () => {
6262
it('adds a keypress event for nextKeys', () => {
6363
const spy = jest.fn();
6464
mountWithAppProvider(
65-
<Pagination nextKeys={[Keys.KEY_K]} onNext={spy} nextTooltip="k" />,
65+
<Pagination nextKeys={[Key.KeyK]} onNext={spy} nextTooltip="k" />,
6666
);
6767

68-
listenerMap.keyup({keyCode: Keys.KEY_K});
68+
listenerMap.keyup({keyCode: Key.KeyK});
6969

7070
expect(spy).toHaveBeenCalledTimes(1);
7171
});
@@ -74,13 +74,13 @@ describe('<Pagination />', () => {
7474
const spy = jest.fn();
7575
mountWithAppProvider(
7676
<Pagination
77-
previousKeys={[Keys.KEY_J]}
77+
previousKeys={[Key.KeyJ]}
7878
onPrevious={spy}
7979
previousTooltip="j"
8080
/>,
8181
);
8282

83-
listenerMap.keyup({keyCode: Keys.KEY_J});
83+
listenerMap.keyup({keyCode: Key.KeyJ});
8484

8585
expect(spy).toHaveBeenCalledTimes(1);
8686
});
@@ -93,14 +93,14 @@ describe('<Pagination />', () => {
9393
<TextField label="test" value="" onChange={noop} />
9494
<Pagination
9595
nextTooltip="j"
96-
previousKeys={[Keys.KEY_J]}
96+
previousKeys={[Key.KeyJ]}
9797
onPrevious={spy}
9898
previousTooltip="j"
9999
/>
100100
</div>,
101101
);
102102
focusElement(wrapper, 'input');
103-
listenerMap.keyup({keyCode: Keys.KEY_J});
103+
listenerMap.keyup({keyCode: Key.KeyJ});
104104
expect(spy).not.toHaveBeenCalled();
105105
});
106106
});
@@ -127,15 +127,15 @@ describe('<Pagination />', () => {
127127
const spy = jest.fn();
128128
pagination = mountWithAppProvider(
129129
<Pagination
130-
previousKeys={[Keys.KEY_J]}
130+
previousKeys={[Key.KeyJ]}
131131
previousTooltip="j"
132132
previousURL="https://www.google.com"
133133
/>,
134134
);
135135

136136
const anchor = pagination.find('a').getDOMNode() as HTMLAnchorElement;
137137
anchor.click = spy;
138-
listenerMap.keyup({keyCode: Keys.KEY_J});
138+
listenerMap.keyup({keyCode: Key.KeyJ});
139139

140140
expect(spy).toHaveBeenCalledTimes(1);
141141
});

src/components/Popover/components/PopoverOverlay/PopoverOverlay.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {classNames} from '@shopify/react-utilities/styles';
66
import {isElementOfType, wrapWithComponent} from '@shopify/react-utilities';
77
import {Transition} from 'react-transition-group';
88

9-
import {Keys} from '../../../../types';
9+
import {Key} from '../../../../types';
1010
import {overlay, Duration} from '../../../shared';
1111
import EventListener from '../../../EventListener';
1212
import KeypressListener from '../../../KeypressListener';
@@ -159,7 +159,7 @@ export default class PopoverOverlay extends React.PureComponent<Props, never> {
159159
<div className={className} {...overlay.props}>
160160
<EventListener event="click" handler={this.handleClick} />
161161
<EventListener event="touchstart" handler={this.handleClick} />
162-
<KeypressListener keyCode={Keys.ESCAPE} handler={this.handleEscape} />
162+
<KeypressListener keyCode={Key.Escape} handler={this.handleEscape} />
163163
<div
164164
className={styles.FocusTracker}
165165
// eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex

src/components/Popover/components/PopoverOverlay/tests/PopoverOverlay.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react';
22
import {noop} from '@shopify/javascript-utilities/other';
33
import {mountWithAppProvider} from 'tests/utilities';
44
import {TextContainer} from 'components';
5-
import {Keys} from '../../../../../types';
5+
import {Key} from '../../../../../types';
66
import PositionedOverlay from '../../../../PositionedOverlay';
77
import PopoverOverlay from '../PopoverOverlay';
88

@@ -152,7 +152,7 @@ describe('<PopoverOverlay />', () => {
152152
</PopoverOverlay>,
153153
);
154154

155-
listenerMap.keyup({keyCode: Keys.ESCAPE});
155+
listenerMap.keyup({keyCode: Key.Escape});
156156
expect(spy).toHaveBeenCalledTimes(1);
157157
});
158158
});

src/components/TextField/TextField.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Labelled, {Action, helpTextID, labelID} from '../Labelled';
77
import Connected from '../Connected';
88

99
import {Resizer, Spinner} from './components';
10-
import {Error, Keys} from '../../types';
10+
import {Error, Key} from '../../types';
1111
import * as styles from './TextField.scss';
1212

1313
export type Type =
@@ -353,7 +353,7 @@ export default class TextField extends React.PureComponent<Props, State> {
353353
const {type} = this.props;
354354
const numbersSpec = /[\d.eE+-]$/;
355355

356-
if (type !== 'number' || which === Keys.ENTER || key.match(numbersSpec)) {
356+
if (type !== 'number' || which === Key.Enter || key.match(numbersSpec)) {
357357
return;
358358
}
359359

0 commit comments

Comments
 (0)