Skip to content

Commit 8dc3510

Browse files
authored
chore: use dumi (#145)
* chore: use dumi * fix lint
1 parent d3a37cc commit 8dc3510

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+165
-35
lines changed

.gitignore

+6
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,9 @@ lib
2626
es
2727
yarn.lock
2828
package-lock.json
29+
# umi
30+
.umi
31+
.umi-production
32+
.umi-test
33+
.env.local
34+
.doc

.umirc.gh.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export default {
2+
base: '/cascader/',
3+
publicPath: '/cascader/',
4+
};

.umirc.ts

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { defineConfig } from 'dumi';
2+
3+
export default defineConfig({
4+
title: 'rc-cascader',
5+
favicon:
6+
'https://avatars0.githubusercontent.com/u/9441414?s=200&v=4',
7+
logo:
8+
'https://avatars0.githubusercontent.com/u/9441414?s=200&v=4',
9+
exportStatic: {},
10+
outputPath: '.doc',
11+
resolve: {
12+
examples: ['none'],
13+
},
14+
styles: [
15+
`
16+
.markdown table {
17+
width: auto !important;
18+
}
19+
`,
20+
]
21+
});

HISTORY.md CHANGELOG.md

-2

README.md

+1-8

docs/demo/adjust-overflow.md

+3

docs/demo/animation.md

+3

docs/demo/change-on-select.md

+3

docs/demo/custom-arrow-icon.md

+3

docs/demo/custom-field-name.md

+3

docs/demo/defaultValue.md

+3

docs/demo/disabled.md

+3

docs/demo/dropdown-render.md

+3

docs/demo/dynamic-options.md

+3

docs/demo/hover.md

+3

docs/demo/rc-form.md

+3

docs/demo/simple.md

+3

docs/demo/text-trigger.md

+3

docs/demo/value.md

+3

docs/demo/visible.md

+3

docs/index.md

+5
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

examples/rc-form.js examples/rc-form.jsx

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* eslint-disable no-console, react/no-multi-comp, react/prop-types, react/button-has-type,prefer-destructuring,max-len */
1+
/* eslint-disable no-console, react/no-multi-comp, react/prop-types, react/button-has-type,prefer-destructuring,max-len, max-classes-per-file */
22
import React, { Component } from 'react';
33
import { createForm } from 'rc-form';
44
import '../assets/index.less';
@@ -59,7 +59,7 @@ const addressOptions = [
5959
];
6060

6161
class CascaderInput extends Component {
62-
onChange = value => {
62+
onChange = (value) => {
6363
const props = this.props;
6464
if (props.onChange) {
6565
props.onChange(value);
@@ -70,7 +70,7 @@ class CascaderInput extends Component {
7070
const props = this.props;
7171
const value = props.value || [];
7272
return arrayTreeFilter(props.options, (o, level) => o.value === value[level])
73-
.map(o => o.label)
73+
.map((o) => o.label)
7474
.join(', ');
7575
}
7676

@@ -85,7 +85,7 @@ class CascaderInput extends Component {
8585
}
8686

8787
class Form extends Component {
88-
onSubmit = e => {
88+
onSubmit = (e) => {
8989
const props = this.props;
9090
const { form } = props;
9191
e.preventDefault();
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.

now.json

+3
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,8 @@
77
"use": "@now/static-build",
88
"config": { "distDir": ".doc" }
99
}
10+
],
11+
"routes": [
12+
{ "src": "/(.*)", "dest": "/dist/$1" }
1013
]
1114
}

package.json

+7-3
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,12 @@
3030
"main": "./lib/index",
3131
"module": "./es/index",
3232
"scripts": {
33-
"start": "cross-env NODE_ENV=development father doc dev --storybook",
34-
"build": "father doc build --storybook",
33+
"start": "dumi dev",
34+
"build": "dumi build",
35+
"deploy": "UMI_ENV=gh npm run build && gh-pages -d .doc",
3536
"compile": "father build",
3637
"prepublishOnly": "npm run compile && np --no-cleanup --yolo --no-publish",
37-
"lint": "eslint src/ examples/ --ext .tsx,.ts,.jsx,.js",
38+
"lint": "eslint src/ examples/ --ext .tsx,.ts,.jsx,.jsx",
3839
"test": "father test",
3940
"coverage": "father test --coverage",
4041
"now-build": "npm run build"
@@ -47,10 +48,13 @@
4748
"@types/react-dom": "^16.8.4",
4849
"@types/warning": "^3.0.0",
4950
"cross-env": "^7.0.0",
51+
"dumi": "^1.1.12",
5052
"enzyme": "^3.3.0",
5153
"enzyme-adapter-react-16": "^1.0.2",
5254
"enzyme-to-json": "^3.2.1",
5355
"father": "^2.13.2",
56+
"gh-pages": "^3.1.0",
57+
"glob": "^7.1.6",
5458
"jest": "^26.0.0",
5559
"np": "^6.0.0",
5660
"rc-form": "^2.4.0",

src/Cascader.tsx

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as React from 'react';
2-
import Trigger, { BuildInPlacements, TriggerProps } from 'rc-trigger';
2+
import type { BuildInPlacements, TriggerProps } from 'rc-trigger';
3+
import Trigger from 'rc-trigger';
34
import warning from 'warning';
45
import KeyCode from 'rc-util/lib/KeyCode';
56
import arrayTreeFilter from 'array-tree-filter';
@@ -59,7 +60,7 @@ interface CascaderState {
5960
}
6061

6162
class Cascader extends React.Component<CascaderProps, CascaderState> {
62-
defaultFieldNames: object;
63+
defaultFieldNames: Record<string, unknown>;
6364

6465
trigger: any;
6566

@@ -158,7 +159,7 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
158159
if (result[result.length - 2]) {
159160
return result[result.length - 2][this.getFieldName('children')];
160161
}
161-
return [...options].filter(o => !o.disabled);
162+
return [...options].filter((o) => !o.disabled);
162163
}
163164

164165
getActiveOptions(activeValue: CascaderValueType): CascaderOption[] {
@@ -185,7 +186,10 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
185186

186187
handleChange = (options: CascaderOption[], { visible }, e: React.KeyboardEvent<HTMLElement>) => {
187188
if (e.type !== 'keydown' || e.keyCode === KeyCode.ENTER) {
188-
this.props.onChange(options.map(o => o[this.getFieldName('value')]), options);
189+
this.props.onChange(
190+
options.map((o) => o[this.getFieldName('value')]),
191+
options,
192+
);
189193
this.setPopupVisible(visible);
190194
}
191195
};
@@ -265,7 +269,7 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
265269
const currentLevel = activeValue.length - 1 < 0 ? 0 : activeValue.length - 1;
266270
const currentOptions = this.getCurrentLevelOptions();
267271
const currentIndex = currentOptions
268-
.map(o => o[this.getFieldName('value')])
272+
.map((o) => o[this.getFieldName('value')])
269273
.indexOf(activeValue[currentLevel]);
270274
if (
271275
e.keyCode !== KeyCode.DOWN &&
@@ -344,7 +348,7 @@ class Cascader extends React.Component<CascaderProps, CascaderState> {
344348
}
345349
};
346350

347-
saveTrigger = node => {
351+
saveTrigger = (node) => {
348352
this.trigger = node;
349353
};
350354

src/Menus.tsx

+8-9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as React from 'react';
22
import arrayTreeFilter from 'array-tree-filter';
3-
import { CascaderOption, CascaderFieldNames } from './Cascader';
3+
import type { CascaderOption, CascaderFieldNames } from './Cascader';
44

55
interface MenusProps {
66
value?: (string | number)[];
@@ -22,9 +22,8 @@ interface MenusProps {
2222
) => void;
2323
}
2424

25-
interface MenuItems {
26-
[index: number]: HTMLLIElement;
27-
}
25+
type MenuItems = Record<number, HTMLLIElement>;
26+
2827
class Menus extends React.Component<MenusProps> {
2928
menuItems: MenuItems = {};
3029

@@ -110,7 +109,7 @@ class Menus extends React.Component<MenusProps> {
110109
title={title}
111110
{...expandProps}
112111
role="menuitem"
113-
onMouseDown={e => e.preventDefault()}
112+
onMouseDown={(e) => e.preventDefault()}
114113
>
115114
{option[this.getFieldName('label')]}
116115
{expandIconNode}
@@ -132,8 +131,8 @@ class Menus extends React.Component<MenusProps> {
132131
getShowOptions(): CascaderOption[][] {
133132
const { options } = this.props;
134133
const result = this.getActiveOptions()
135-
.map(activeOption => activeOption[this.getFieldName('children')])
136-
.filter(activeOption => !!activeOption);
134+
.map((activeOption) => activeOption[this.getFieldName('children')])
135+
.filter((activeOption) => !!activeOption);
137136
result.unshift(options);
138137
return result;
139138
}
@@ -168,7 +167,7 @@ class Menus extends React.Component<MenusProps> {
168167
return activeValue[menuIndex] === option[this.getFieldName('value')];
169168
}
170169

171-
saveMenuItem = index => node => {
170+
saveMenuItem = (index) => (node) => {
172171
this.menuItems[index] = node;
173172
};
174173

@@ -178,7 +177,7 @@ class Menus extends React.Component<MenusProps> {
178177
<div>
179178
{this.getShowOptions().map((options, menuIndex) => (
180179
<ul className={`${prefixCls}-menu`} key={menuIndex} style={dropdownMenuColumnStyle}>
181-
{options.map(option => this.getOption(option, menuIndex))}
180+
{options.map((option) => this.getOption(option, menuIndex))}
182181
</ul>
183182
))}
184183
</div>

src/placements.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BuildInPlacements } from 'rc-trigger';
1+
import type { BuildInPlacements } from 'rc-trigger';
22

33
const BUILT_IN_PLACEMENTS: BuildInPlacements = {
44
bottomLeft: {

tests/__snapshots__/index.spec.js.snap

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ exports[`Cascader should not show title when title is falsy 1`] = `
5454
exports[`Cascader should render custom dropdown correctly 1`] = `
5555
<div
5656
className="rc-cascader-menus"
57-
onMouseDown={[Function]}
58-
onTouchStart={[Function]}
57+
onMouseDownCapture={[Function]}
58+
onTouchStartCapture={[Function]}
5959
style={
6060
Object {
6161
"opacity": 0,

tsconfig.json

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
{
2+
"compilerOptions": {
3+
"target": "esnext",
4+
"moduleResolution": "node",
5+
"baseUrl": "./",
6+
"jsx": "preserve",
7+
"declaration": true,
8+
"skipLibCheck": true,
9+
"esModuleInterop": true,
10+
"paths": {
11+
"@/*": ["src/*"],
12+
"@@/*": ["src/.umi/*"],
13+
"rc-cascader": ["src/index.ts"]
14+
}
15+
}
16+
}

update-example.js

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/*
2+
用于 dumi 改造使用,
3+
可用于将 examples 的文件批量修改为 demo 引入形式,
4+
其他项目根据具体情况使用。
5+
*/
6+
7+
const fs = require('fs');
8+
const glob = require('glob');
9+
10+
const paths = glob.sync('./examples/*.jsx');
11+
12+
paths.forEach(path => {
13+
const name = path.split('/').pop().split('.')[0];
14+
fs.writeFile(
15+
`./docs/demo/${name}.md`,
16+
`## ${name}
17+
18+
<code src="../../examples/${name}.jsx">
19+
`,
20+
'utf8',
21+
function(error) {
22+
if(error){
23+
console.log(error);
24+
return false;
25+
}
26+
console.log(`${name} 更新成功~`);
27+
}
28+
)
29+
});

0 commit comments

Comments
 (0)