Skip to content

Commit e5ee243

Browse files
authored
fix: 修复 Proptype 的错误, 优化开发体验 (#73)
* fix: 修复 Proptype 的错误, 优化开发体验 * fix: ci with node 10
1 parent 68c51c0 commit e5ee243

15 files changed

+553
-66
lines changed

.npmrc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package-lock=false

.travis.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ notifications:
77
88

99
node_js:
10-
- 6
10+
- 10
1111

1212
before_install:
1313
- |
@@ -29,4 +29,4 @@ env:
2929
matrix:
3030
- TEST_TYPE=lint
3131
- TEST_TYPE=test
32-
- TEST_TYPE=coverage
32+
- TEST_TYPE=coverage

examples/base.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import '../assets/index.less';
22
import PullToRefresh from '../src';
3-
import React from 'react';
4-
import ReactDOM from 'react-dom';
3+
import * as React from 'react';
4+
import * as ReactDOM from 'react-dom';
55

66
class App extends React.Component {
77
state = {

examples/base1.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import '../assets/index.less';
22
import PullToRefresh from '../src';
3-
import React from 'react';
4-
import ReactDOM from 'react-dom';
3+
import * as React from 'react';
4+
import * as ReactDOM from 'react-dom';
55

66
class Lv extends React.Component {
77
componentDidMount() {

package.json

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,14 @@
3838
"prepublishOnly": "rc-tools run guard",
3939
"pub": "rc-tools run pub --babel-runtime",
4040
"lint": "rc-tools run lint --no-js-lint",
41-
"test": "jest",
42-
"coverage": "jest --coverage"
41+
"test": "tsc && jest",
42+
"coverage": "npm run test -- --coverage"
4343
},
4444
"jest": {
45+
"setupFiles": [
46+
"./tests/setup.js"
47+
],
4548
"testMatch": [
46-
"**/__tests__/**/*.ts?(x)",
4749
"**/?(*.)(spec|test).ts?(x)"
4850
],
4951
"coverageDirectory": "./coverage/",
@@ -65,21 +67,19 @@
6567
"classnames": "^2.2.5"
6668
},
6769
"devDependencies": {
68-
"@types/classnames": "^2.2.3",
69-
"@types/enzyme": "^2.8.6",
70-
"@types/enzyme-to-json": "^1.5.0",
71-
"@types/jest": "^20.0.7",
72-
"@types/react": "^15.0.27",
73-
"@types/react-dom": "^15.5.0",
70+
"@types/classnames": "^2.2.7",
71+
"@types/enzyme": "^3.9.0",
72+
"@types/jest": "^24.0.11",
73+
"@types/react": "^16.8.8",
74+
"@types/react-dom": "^16.8.2",
7475
"coveralls": "^2.13.1",
75-
"enzyme": "^2.9.1",
76-
"enzyme-to-json": "^1.5.1",
77-
"jest": "^20.0.4",
76+
"enzyme": "^3.9.0",
77+
"enzyme-adapter-react-16": "^1.11.2",
78+
"jest": "^24.5.0",
7879
"pre-commit": "1.x",
79-
"rc-tools": "6.x",
80+
"rc-tools": "9.x",
8081
"react": "16.x",
81-
"react-dom": "16.x",
82-
"react-test-renderer": "^15.5.0"
82+
"react-dom": "16.x"
8383
},
8484
"pre-commit": [
8585
"lint"

src/PropsType.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React from 'react';
1+
import * as React from 'react';
22

33
export interface Indicator {
44
activate?: React.ReactNode;
@@ -7,15 +7,15 @@ export interface Indicator {
77
finish?: React.ReactNode;
88
}
99

10-
export interface PropsType {
11-
getScrollContainer: () => React.ReactNode;
12-
direction: 'down' | 'up';
13-
refreshing?: boolean;
14-
distanceToRefresh: number;
10+
export interface IPropsType {
1511
onRefresh: () => void;
16-
indicator: Indicator;
12+
getScrollContainer?: () => React.ReactNode;
13+
direction?: 'down' | 'up';
14+
refreshing?: boolean;
15+
distanceToRefresh?: number;
16+
indicator?: Indicator;
1717
prefixCls?: string;
1818
className?: string;
19+
damping?: number;
1920
style?: React.CSSProperties;
20-
damping: number;
2121
}

src/PullToRefresh.tsx

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
1-
import React from 'react';
21
import classNames from 'classnames';
3-
import { PropsType, Indicator } from './PropsType';
4-
5-
class StaticRenderer extends React.Component<any, any> {
6-
shouldComponentUpdate(nextProps: any) {
7-
return nextProps.shouldUpdate;
8-
}
9-
render() {
10-
return <div>{this.props.render()}</div>;
11-
}
12-
}
2+
import * as React from 'react';
3+
import { IPropsType } from './PropsType';
4+
import StaticRenderer from './StaticRenderer';
135

146
function setTransform(nodeStyle: any, value: any) {
157
nodeStyle.transform = value;
@@ -37,20 +29,27 @@ try {
3729
const willPreventDefault = supportsPassive ? { passive: false } : false;
3830
// const willNotPreventDefault = supportsPassive ? { passive: true } : false;
3931

40-
export default class PullToRefresh extends React.Component<PropsType, any> {
32+
type ICurrSt = 'activate' | 'deactivate' | 'release' | 'finish';
33+
34+
interface IState {
35+
currSt: ICurrSt;
36+
dragOnEdge: boolean;
37+
}
38+
39+
export default class PullToRefresh extends React.Component<IPropsType, IState> {
4140
static defaultProps = {
4241
prefixCls: 'rmc-pull-to-refresh',
4342
getScrollContainer: () => undefined,
4443
direction: DOWN,
4544
distanceToRefresh: 25,
4645
damping: 100,
47-
indicator: INDICATOR as Indicator,
48-
} as PropsType;
46+
indicator: INDICATOR,
47+
};
4948

5049
// https://github.com/yiminghe/zscroller/blob/2d97973287135745818a0537712235a39a6a62a1/src/Scroller.js#L355
5150
// currSt: `activate` / `deactivate` / `release` / `finish`
5251
state = {
53-
currSt: 'deactivate',
52+
currSt: 'deactivate' as ICurrSt,
5453
dragOnEdge: false,
5554
};
5655

@@ -163,6 +162,8 @@ export default class PullToRefresh extends React.Component<PropsType, any> {
163162
if (direction === DOWN) {
164163
return ele.scrollTop <= 0;
165164
}
165+
// 补全 branch, test 才过的了,但是实际上代码永远不会走到这里,这里为了保证代码的一致性,返回 undefined
166+
return undefined;
166167
}
167168

168169
damping = (dy: number): number => {
@@ -263,7 +264,7 @@ export default class PullToRefresh extends React.Component<PropsType, any> {
263264

264265
const {
265266
className, prefixCls, children, getScrollContainer,
266-
direction, onRefresh, refreshing, indicator, distanceToRefresh, ...restProps,
267+
direction, onRefresh, refreshing, indicator, distanceToRefresh, ...restProps
267268
} = props;
268269

269270
const renderChildren = <StaticRenderer
@@ -276,7 +277,7 @@ export default class PullToRefresh extends React.Component<PropsType, any> {
276277
<div className={cla} ref={el => this.contentRef = el}>
277278
{direction === UP ? renderChildren : null}
278279
<div className={`${prefixCls}-indicator`}>
279-
{(indicator as any)[this.state.currSt] || (INDICATOR as any)[this.state.currSt]}
280+
{indicator[this.state.currSt] || INDICATOR[this.state.currSt]}
280281
</div>
281282
{direction === DOWN ? renderChildren : null}
282283
</div>

src/StaticRenderer.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import * as React from 'react';
2+
3+
export default class StaticRenderer extends React.Component<any, any> {
4+
shouldComponentUpdate(nextProps: any) {
5+
return nextProps.shouldUpdate;
6+
}
7+
render() {
8+
return <div>{this.props.render()}</div>;
9+
}
10+
}

tests/PullToRefresh.spec.js

Lines changed: 0 additions & 15 deletions
This file was deleted.

tests/PullToRefresh.spec.tsx

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { render } from 'enzyme';
2+
import * as React from 'react';
3+
import PullToRefresh from '../src';
4+
5+
describe('basic', () => {
6+
it('base.', () => {
7+
const wrapper = render(
8+
<PullToRefresh
9+
onRefresh={() => null}
10+
>
11+
<div style={{ height: 50 }}>Item 1</div>
12+
</PullToRefresh>
13+
);
14+
expect(wrapper).toMatchSnapshot();
15+
});
16+
it('all props', () => {
17+
const noop = () => null;
18+
const style = { width: 100 };
19+
20+
const wrapper = render(
21+
<PullToRefresh
22+
onRefresh={noop}
23+
getScrollContainer={noop}
24+
direction="up"
25+
refreshing={false}
26+
distanceToRefresh={1}
27+
indicator={{}}
28+
prefixCls="rmc"
29+
className="rmc"
30+
damping={2}
31+
style={style}
32+
>
33+
<span>111</span>
34+
</PullToRefresh>
35+
);
36+
expect(wrapper).toMatchSnapshot();
37+
})
38+
});

0 commit comments

Comments
 (0)