Skip to content

Commit 6742c05

Browse files
committed
fix(types): type clean up for eventKey and removal of some unneeded type helpers
1 parent d11cfed commit 6742c05

12 files changed

+41
-45
lines changed

.eslintignore

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ coverage/
44
**/node_modules/**
55
www/.cache
66
www/public
7-
www/plugins
7+
www/plugins
8+
**/*.d.ts

types/components/Accordion.d.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,13 @@ import { BsPrefixComponent } from './helpers';
44
import AccordionToggle from './AccordionToggle';
55
import AccordionCollapse from './AccordionCollapse';
66

7-
export interface AccordionProps extends React.HTMLProps<Accordion> {
7+
export interface AccordionProps {
88
activeKey?: string;
9-
defaultActiveKey?: string
9+
defaultActiveKey?: string;
1010
}
1111

1212
declare class Accordion<
13-
As extends React.ElementType = 'div'
13+
As extends React.ElementType = 'div'
1414
> extends BsPrefixComponent<As, AccordionProps> {
1515
static Toggle: typeof AccordionToggle;
1616
static Collapse: typeof AccordionCollapse;

types/components/AccordionCollapse.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import { BsPrefixComponent } from './helpers';
77
export interface AccordionCollapseProps
88
extends CollapseProps,
99
React.HTMLAttributes<HTMLDivElement> {
10-
eventKey: string;
11-
}
10+
eventKey: string;
11+
}
1212

1313
declare class AccordionCollapse extends BsPrefixComponent<
1414
typeof Collapse,

types/components/DropdownButton.d.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ import * as React from 'react';
33
import DropdownToggle from './DropdownToggle';
44
import Dropdown from './Dropdown';
55

6-
import { ReplaceProps, PropsOf } from './helpers';
6+
import { ReplaceProps } from './helpers';
77

88
type PropsFromToggle = Partial<
9-
Pick<PropsOf<typeof DropdownToggle>, 'href' | 'size' | 'variant' | 'disabled'>
9+
Pick<
10+
React.ComponentPropsWithRef<typeof DropdownToggle>,
11+
'href' | 'size' | 'variant' | 'disabled'
12+
>
1013
>;
1114

1215
export interface DropdownButtonProps extends PropsFromToggle {

types/components/DropdownItem.d.ts

+5-6
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@ import * as React from 'react';
22

33
import SafeAnchor from './SafeAnchor';
44

5-
import { BsPrefixComponent } from './helpers';
5+
import { BsPrefixComponent, SelectCallback } from './helpers';
66

7-
export interface DropdownItemProps<T> {
7+
export interface DropdownItemProps {
88
active?: boolean;
99
disabled?: boolean;
10-
eventKey?: T;
10+
eventKey?: string;
1111
href?: string;
1212
onClick?: React.MouseEventHandler<this>;
13-
onSelect?: (eventKey: T, e: React.SyntheticEvent<this>) => void;
13+
onSelect?: SelectCallback;
1414
}
1515

1616
declare class DropdownItem<
17-
EventKey,
1817
As extends React.ReactType = typeof SafeAnchor
19-
> extends BsPrefixComponent<As, DropdownItemProps<EventKey>> {}
18+
> extends BsPrefixComponent<As, DropdownItemProps> {}
2019

2120
export default DropdownItem;

types/components/DropdownToggle.d.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@ import * as React from 'react';
22

33
import Button from './Button';
44

5-
import { BsPrefixComponent, PropsOf } from './helpers';
5+
import { BsPrefixComponent } from './helpers';
66

7-
export interface DropdownToggleProps extends PropsOf<typeof Button> {
7+
export interface DropdownToggleProps
8+
extends React.ComponentPropsWithRef<typeof Button> {
89
id: string;
910
split?: boolean;
1011
childBsPrefix?: string;

types/components/NavDropdown.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as React from 'react';
22

33
import Dropdown from './Dropdown';
44

5-
import { ReplaceProps, PropsOf } from './helpers';
5+
import { ReplaceProps } from './helpers';
66

77
export interface NavDropdownProps {
88
id: string;

types/components/OverlayTrigger.d.ts

+2-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,10 @@ import * as React from 'react';
22

33
import Overlay from './Overlay';
44

5-
import { PropsOf } from './helpers';
6-
75
type TriggerType = 'hover' | 'click' | 'focus';
86

9-
export interface OverlayTriggerProps extends PropsOf<typeof Overlay> {
7+
export interface OverlayTriggerProps
8+
extends React.ComponentPropsWithRef<typeof Overlay> {
109
children: React.ReactNode;
1110
trigger?: TriggerType | TriggerType[];
1211
delay?: number | { show: number; hide: number };

types/components/SplitButton.d.ts

+5-2
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,13 @@ import * as React from 'react';
33
import DropdownToggle from './DropdownToggle';
44
import Dropdown from './Dropdown';
55

6-
import { ReplaceProps, PropsOf } from './helpers';
6+
import { ReplaceProps } from './helpers';
77

88
type PropsFromToggle = Partial<
9-
Pick<PropsOf<typeof DropdownToggle>, 'size' | 'variant' | 'disabled'>
9+
Pick<
10+
React.ComponentPropsWithRef<typeof DropdownToggle>,
11+
'size' | 'variant' | 'disabled'
12+
>
1013
>;
1114

1215
export interface SplitButtonProps extends PropsFromToggle {

types/components/Tab.d.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ import TabContainer from './TabContainer';
44
import TabContent from './TabContent';
55
import TabPane from './TabPane';
66

7-
import { BsPrefixComponent, PropsOf } from './helpers';
7+
import { BsPrefixComponent } from './helpers';
88

9-
export interface TabProps extends PropsOf<typeof TabPane> {
9+
export interface TabProps extends React.ComponentPropsWithRef<typeof TabPane> {
1010
eventKey?: unknown;
1111
title: React.ReactNode;
1212
disabled?: boolean;

types/components/helpers.d.ts

+3-15
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,8 @@ import * as React from 'react';
22

33
export type Omit<T, U> = Pick<T, Exclude<keyof T, keyof U>>;
44

5-
export type PropsOf<
6-
Tag extends React.ReactType
7-
> = Tag extends keyof JSX.IntrinsicElements
8-
? JSX.IntrinsicElements[Tag]
9-
: Tag extends React.SFC<infer Props>
10-
? Props & React.Attributes
11-
: Tag extends React.ComponentClass<infer Props2>
12-
? (Tag extends new (...args: any[]) => infer Instance
13-
? Props2 & React.ClassAttributes<Instance>
14-
: never)
15-
: never;
16-
175
export type ReplaceProps<Inner extends React.ReactType, P> = Omit<
18-
PropsOf<Inner>,
6+
React.ComponentPropsWithRef<Inner>,
197
P
208
> &
219
P;
@@ -31,8 +19,8 @@ export class BsPrefixComponent<
3119
> extends React.Component<ReplaceProps<As, BsPrefixProps<As> & P>> {}
3220

3321
export type SelectCallback = (
34-
eventKey: any,
35-
e: React.SyntheticEvent<{}>,
22+
eventKey: string,
23+
e: React.SyntheticEvent<unknown>,
3624
) => void;
3725

3826
export interface TransitionCallbacks {

types/simple.test.tsx

+8-6
Original file line numberDiff line numberDiff line change
@@ -35,24 +35,26 @@ import {
3535
ToggleButton,
3636
} from 'react-bootstrap';
3737

38-
<Alert dismissible>Woop woop</Alert>;
38+
<Alert ref={React.createRef<HTMLDivElement>()} dismissible>
39+
Woop woop
40+
</Alert>;
3941
<Alert.Link as="a" href="blah" />;
4042
<Alert.Heading as="h3" />;
4143

4244
<Accordion defaultActiveKey="0">
4345
<Card>
4446
<Card.Header>
45-
<Accordion.Toggle eventKey="0">
46-
Click me!
47-
</Accordion.Toggle>
47+
<Accordion.Toggle eventKey="0">Click me!</Accordion.Toggle>
4848
</Card.Header>
4949
<Accordion.Collapse eventKey="0">
5050
<Card.Body>Hello! I'm the body</Card.Body>
5151
</Accordion.Collapse>
5252
</Card>
5353
</Accordion>;
5454

55-
<Badge pill={false}>42</Badge>;
55+
<Badge pill={false} ref={React.createRef<HTMLSpanElement>()}>
56+
42
57+
</Badge>;
5658

5759
<Breadcrumb listProps={{ type: 'I' }}>
5860
<Breadcrumb.Item />
@@ -147,7 +149,7 @@ import {
147149
</Dropdown.Toggle>
148150

149151
<Dropdown.Menu>
150-
<Dropdown.Item href="#/action-1">Action</Dropdown.Item>
152+
<Dropdown.Item eventKey="key">Action</Dropdown.Item>
151153
<Dropdown.Item href="#/action-2">Another action</Dropdown.Item>
152154
<Dropdown.Item href="#/action-3">Something else</Dropdown.Item>
153155
</Dropdown.Menu>

0 commit comments

Comments
 (0)