Skip to content

Commit

Permalink
add tslint type check test
Browse files Browse the repository at this point in the history
try refactoring list type definition
  • Loading branch information
cncolder committed Jul 12, 2017
1 parent 79364f5 commit 42ee7d6
Show file tree
Hide file tree
Showing 11 changed files with 190 additions and 61 deletions.
8 changes: 4 additions & 4 deletions components/list/ListItem.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
/* tslint:disable:jsx-no-multiline-js */
import React from 'react';
import { Image, View, TouchableHighlight, Text } from 'react-native';
import { ListItemProps, BriefProps } from './PropsType';
import { ListItemNativeProps, BriefNativeProps } from './PropsType';
import listItemStyles from './style/index';
import listStyles from './style/index';

export class Brief extends React.Component<BriefProps, any> {
export class Brief extends React.Component<BriefNativeProps, any> {
render() {
const { children, style, styles = listStyles, wrap } = this.props;

Expand All @@ -24,8 +24,8 @@ export class Brief extends React.Component<BriefProps, any> {
}
}

export default class Item extends React.Component<ListItemProps, any> {
static defaultProps: Partial<ListItemProps> = {
export default class Item extends React.Component<ListItemNativeProps, any> {
static defaultProps: Partial<ListItemNativeProps> = {
multipleLine: false,
wrap: false,
styles: listItemStyles,
Expand Down
10 changes: 5 additions & 5 deletions components/list/ListItem.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,24 @@
import React from 'react';
import classNames from 'classnames';
import Touchable from 'rc-touchable';
import { ListItemProps, BriefProps } from './PropsType';
import { ListItemWebProps, BriefWebProps } from './PropsType';
import omit from 'omit.js';

export class Brief extends React.Component<BriefProps, any> {
export class Brief extends React.Component<BriefWebProps, any> {
render() {
return (
<div className="am-list-brief" style={this.props.style}>{this.props.children}</div>
);
}
}

class ListItem extends React.Component<ListItemProps, any> {
static defaultProps: Partial<ListItemProps> = {
class ListItem extends React.Component<ListItemWebProps, any> {
static defaultProps: Partial<ListItemWebProps> = {
prefixCls: 'am-list',
align: 'middle',
error: false,
multipleLine: false,
wrap: false,
// wrap: false,
platform: 'cross',
};

Expand Down
95 changes: 49 additions & 46 deletions components/list/PropsType.tsx
Original file line number Diff line number Diff line change
@@ -1,74 +1,77 @@
import React, { ReactNode } from 'react';
import React from 'react';
import ReactNative from 'react-native';

export interface ListProps {
renderHeader?: Function | JSX.Element;
renderFooter?: Function | JSX.Element;
children?: JSX.Element | JSX.Element[];
style?: React.CSSProperties | {} | Array<{}>;
/* for web */
}

export interface ListWebProps extends ListProps, React.HTMLProps<HTMLDivElement> {
prefixCls?: string;
className?: string;
role?: string;
/* for native */
}

export interface ListNativeProps extends ListProps, ReactNative.ViewProperties {
ref?: any
styles?: {
Header?: {};
Footer?: {};
Body?: {};
BodyBottomLine?: {};
Header?: ReactNative.TextStyle;
Footer?: ReactNative.TextStyle;
Body?: ReactNative.ViewStyle;
BodyBottomLine?: ReactNative.ViewStyle;
};
}

export interface ListItemProps {
align?: 'top'|'middle'|'bottom';
disabled?: boolean;
multipleLine?: boolean;
children?: ReactNode;
thumb?: ReactNode | null;
extra?: ReactNode;
thumb?: React.ReactNode;
extra?: React.ReactNode;
arrow?: 'horizontal'|'down'|'up'|'empty'|'';
wrap?: boolean;
onClick?: (e?: any) => void;
style?: React.CSSProperties | {} | Array<{}>;
/* for web */
prefixCls?: string;
className?: string;
}

role?: string;
export interface ListItemWebProps extends ListItemProps, React.HTMLProps<HTMLDivElement> {
prefixCls?: string;
activeStyle?: React.CSSProperties;
error?: boolean;
platform?: 'android' | 'ios' | 'cross';
// wrap?: boolean; // overwrite React.HTMLAttributes.wrap: string
}

/* for native */
export interface ListItemNativeProps extends ListItemProps,
ReactNative.ViewProperties,
Pick<ReactNative.TouchableHighlightProperties, 'onPressIn' | 'onPressOut'> {
ref?: any
wrap?: boolean;
styles?: {
underlayColor: {},
Content: {},
column: {},
Extra: {},
Arrow: {},
ArrowV: {},
Item: {},
Thumb: {},
multipleThumb: {},
Line: {},
multipleLine: {},
underlayColor: string,
Content: ReactNative.TextStyle,
column: ReactNative.ViewStyle,
Extra: ReactNative.TextStyle,
Arrow: ReactNative.ImageStyle,
ArrowV: ReactNative.ImageStyle,
Item: ReactNative.ViewStyle,
Thumb: ReactNative.ImageStyle,
multipleThumb: ReactNative.ImageStyle,
Line: ReactNative.ViewStyle,
multipleLine: ReactNative.ViewStyle,
};
onPressIn?: () => void;
onPressOut?: () => void;
onClick?: ReactNative.TouchableHighlightProperties['onPress'];
}

export interface BriefProps {
children?: ReactNode;
wrap?: boolean;
style?: React.CSSProperties | {} | Array<{}>;

/* for web */
prefixCls?: string;
className?: string;
}

export interface BriefWebProps extends BriefProps,
Pick<React.HTMLProps<HTMLDivElement>, 'style'> {

role?: string;
/* for native */
styles: {
Brief: {},
BriefText: {},
}

export interface BriefNativeProps extends BriefProps,
Pick<ReactNative.TextProperties, 'style'> {
wrap?: boolean;
styles?: {
Brief: ReactNative.ViewStyle,
BriefText: ReactNative.TextStyle,
};
}
4 changes: 2 additions & 2 deletions components/list/index.tsx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
import React from 'react';
import { View, Text } from 'react-native';
import Item from './ListItem';
import { ListProps } from './PropsType';
import { ListNativeProps } from './PropsType';
import listStyles from './style/index';

export default class List extends React.Component<ListProps, any> {
export default class List extends React.Component<ListNativeProps, any> {
static Item = Item;

render() {
Expand Down
6 changes: 3 additions & 3 deletions components/list/index.web.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
import React from 'react';
import Item from './ListItem.web';
import classNames from 'classnames';
import { ListProps } from './PropsType';
import { ListWebProps } from './PropsType';

export default class List extends React.Component<ListProps, any> {
export default class List extends React.Component<ListWebProps, any> {
static Item = Item;

static defaultProps: Partial<ListProps> = {
static defaultProps: Partial<ListWebProps> = {
prefixCls: 'am-list',
};

Expand Down
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@
"srclint": "eslint site scripts --ext '.js,.jsx'",
"tslint": "antd-tools run ts-lint && npm run compile && rm -rf lib",
"tslint-fix": "antd-tools run ts-lint-fix && npm run compile && rm -rf lib",
"tslint-check": "tslint --type-check -p tests/types/native && tslint --type-check -p tests/types/web",
"demolint": "RUN_ENV=DEMO eslint components/*/demo/*.md --ext '.md'",
"stylelint": "stylelint \"{site,components}/**/*.less\" --syntax less",
"stylelint-fix": "stylelint \"{site,components}/**/*.less\" --syntax less --fix",
Expand Down
56 changes: 56 additions & 0 deletions tests/types/native/native.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import List from 'antd-mobile/lib/list';

const noop = () => { };
const style = { rotation: 0 };

const list = () => (
<List
renderHeader={noop}
renderFooter={noop}
onTouchEnd={noop}
styles={{
Header: style,
Body: style,
BodyBottomLine: style,
Footer: style,
}}
>
<br />
<List.Item
align='top'
disabled
multipleLine
thumb='/'
extra='/'
arrow=''
wrap
styles={{
underlayColor: '',
Content: style,
column: style,
Extra: style,
Arrow: style,
ArrowV: style,
Item: style,
Thumb: style,
multipleThumb: style,
Line: style,
multipleLine: style
}}
onClick={noop}
onTouchEnd={noop}
>
<br />
<List.Item.Brief
wrap
style={style}
styles={{
Brief: style,
BriefText: style
}}
>
<br />
</List.Item.Brief>
</List.Item>
</List>
);
17 changes: 17 additions & 0 deletions tests/types/native/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"extends": "../../../tsconfig",
"compilerOptions": {
"noUnusedLocals": false,
"noEmit": true,
"skipLibCheck": true,
"pretty": true,
"baseUrl": "../../../",
"paths": {
"antd-mobile": ["./components/native"],
"antd-mobile/lib/*": ["./components/*"]
}
},
"files": [
"./native.tsx"
]
}
17 changes: 17 additions & 0 deletions tests/types/web/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
{
"extends": "../../../tsconfig",
"compilerOptions": {
"noUnusedLocals": false,
"noEmit": true,
"skipLibCheck": true,
"pretty": true,
"baseUrl": "../../../",
"paths": {
"antd-mobile": ["./components"],
"antd-mobile/lib/*": ["./components/*/index.web"]
}
},
"files": [
"./web.tsx"
]
}
34 changes: 34 additions & 0 deletions tests/types/web/web.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import List from 'antd-mobile/lib/list';

const noop = () => { };
const style = { color: 'silver' };

const list = () => (
<List
renderHeader={noop}
renderFooter={noop}
prefixCls=''
onClick={noop}
>
<br />
<List.Item
align='top'
disabled
multipleLine
thumb='/'
extra='/'
arrow=''
wrap='soft'
prefixCls=''
activeStyle={style}
error
platform='cross'
onTouchEnd={noop}
>
<br />
<List.Item.Brief style={style}>
<br />
</List.Item.Brief>
</List.Item>
</List>
);
3 changes: 2 additions & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
"exclude": [
"node_modules",
"lib",
"es"
"es",
"tests"
],
"compileOnSave": false
}

0 comments on commit 42ee7d6

Please sign in to comment.