Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

优化代码 #479

Merged
merged 5 commits into from
Apr 3, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,9 @@ jobs:
with:
path: node_modules
key: node_modules-${{ hashFiles('**/package-temp-dir/package-lock.json') }}

- name: tsc
run: npm run lint:tsc
- name: coverage
run: npm test -- --coverage && bash <(curl -s https://codecov.io/bash)

needs: setup
needs: setup
44 changes: 16 additions & 28 deletions examples/adjust-overflow.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
/* eslint-disable no-console, react/prop-types */
import type { BuildInPlacements } from 'rc-trigger/lib/interface';
import React from 'react';
import React, { useState } from 'react';
import type { BuildInPlacements } from '@rc-component/trigger/lib/interface';
import '../assets/index.less';
import Cascader from '../src';

Expand Down Expand Up @@ -58,35 +57,24 @@ const addressOptions = [
},
];

class MyCascader extends React.Component<{ builtinPlacements?: BuildInPlacements }> {
state = {
inputValue: '',
};
const MyCascader = ({ builtinPlacements }: { builtinPlacements?: BuildInPlacements }) => {
const [inputValue, setInputValue] = useState('');

onChange = (value, selectedOptions) => {
const onChange = (value, selectedOptions) => {
console.log(value, selectedOptions);
this.setState({
inputValue: selectedOptions.map(o => o.label).join(', '),
});
setInputValue(selectedOptions.map(o => o.label).join(', '));
};

render() {
const { builtinPlacements } = this.props;
return (
<Cascader
options={addressOptions}
builtinPlacements={builtinPlacements}
onChange={this.onChange}
>
<input
placeholder={builtinPlacements ? 'Will not adjust position' : 'Will adjust position'}
value={this.state.inputValue}
style={{ width: 170 }}
/>
</Cascader>
);
}
}
return (
<Cascader options={addressOptions} builtinPlacements={builtinPlacements} onChange={onChange}>
<input
placeholder={builtinPlacements ? 'Will not adjust position' : 'Will adjust position'}
value={inputValue}
style={{ width: 170 }}
/>
</Cascader>
);
};

const placements = {
bottomLeft: {
Expand Down
29 changes: 11 additions & 18 deletions examples/animation.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/* eslint-disable no-console */
import React from 'react';
import React, { useState } from 'react';
import '../assets/index.less';
import Cascader from '../src';

Expand Down Expand Up @@ -56,25 +55,19 @@ const addressOptions = [
},
];

class Demo extends React.Component {
state = {
inputValue: '',
};
const Demo = () => {
const [inputValue, setInputValue] = useState('');

onChange = (value, selectedOptions) => {
const onChange = (value, selectedOptions) => {
console.log(value, selectedOptions);
this.setState({
inputValue: selectedOptions.map(o => o.label).join(', '),
});
setInputValue(selectedOptions.map(o => o.label).join(', '));
};

render() {
return (
<Cascader options={addressOptions} onChange={this.onChange} animation="slide-up">
<input value={this.state.inputValue} readOnly />
</Cascader>
);
}
}
return (
<Cascader options={addressOptions} onChange={onChange} animation="slide-up">
<input value={inputValue} readOnly />
</Cascader>
);
};

export default Demo;
88 changes: 44 additions & 44 deletions examples/change-on-select.tsx
Original file line number Diff line number Diff line change
@@ -1,79 +1,79 @@
/* eslint-disable no-console */
import React from 'react';
import '../assets/index.less';
import Cascader from '../src';

const options = [
{
label: "Women Clothing",
value: "Women Clothing",
label: 'Women Clothing',
value: 'Women Clothing',
children: [
{
label: "Women Tops, Blouses & Tee",
value: "Women Tops, Blouses & Tee",
label: 'Women Tops, Blouses & Tee',
value: 'Women Tops, Blouses & Tee',
children: [
{
label: "Women T-Shirts",
value: "Women T-Shirts"
label: 'Women T-Shirts',
value: 'Women T-Shirts',
},
{
label: "Women Tops",
value: "Women Tops"
label: 'Women Tops',
value: 'Women Tops',
},
{
label: "Women Tank Tops & Camis",
value: "Women Tank Tops & Camis"
label: 'Women Tank Tops & Camis',
value: 'Women Tank Tops & Camis',
},
{
label: "Women Blouses",
value: "Women Blouses"
}
]
label: 'Women Blouses',
value: 'Women Blouses',
},
],
},
{
label: "Women Suits",
value: "Women Suits",
label: 'Women Suits',
value: 'Women Suits',
children: [
{
label: "Women Suit Pants",
value: "Women Suit Pants"
label: 'Women Suit Pants',
value: 'Women Suit Pants',
},
{
label: "Women Suit Sets",
value: "Women Suit Sets"
label: 'Women Suit Sets',
value: 'Women Suit Sets',
},
{
label: "Women Blazers",
value: "Women Blazers"
}
]
label: 'Women Blazers',
value: 'Women Blazers',
},
],
},
{
label: "Women Co-ords",
value: "Women Co-ords",
label: 'Women Co-ords',
value: 'Women Co-ords',
children: [
{
label: "Two-piece Outfits",
value: "Two-piece Outfits"
}
]
}
]
}
label: 'Two-piece Outfits',
value: 'Two-piece Outfits',
},
],
},
],
},
];

const onChange = (value, selectedOptions) => {
console.log(value, selectedOptions);
console.log(value, selectedOptions);
};


const Demo = () => <Cascader
showSearch
options={options}
onChange={onChange}
changeOnSelect
expandTrigger="hover"
loadData={() => console.log('loadData')}
/>;
const Demo = () => (
<Cascader
showSearch
options={options}
onChange={onChange}
changeOnSelect
expandTrigger="hover"
loadData={() => console.log('loadData')}
/>
);

export default Demo;
106 changes: 47 additions & 59 deletions examples/custom-arrow-icon.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/* eslint-disable no-console */
import React from 'react';
import React, { useState } from 'react';
import '../assets/index.less';
import Cascader from '../src';

Expand Down Expand Up @@ -81,39 +80,33 @@ const loadingPath =
' 7.9 4.1 11.4 1.3C854.5 760.8 912 649.1 912 523.9c0-' +
'221.1-179.4-400.2-400.6-399.9z';

class Demo extends React.Component {
state = {
inputValue: '',
dynamicInputValue: '',
options: [
{
label: '福建',
isLeaf: false,
value: 'fj',
},
{
label: '浙江',
isLeaf: false,
value: 'zj',
},
],
};
const Demo = () => {
const [inputValue, setInputValue] = useState('');
const [dynamicInputValue, setDynamicInputValue] = useState('');
const [options, setOptions] = useState([
{
label: '福建',
isLeaf: false,
value: 'fj',
},
{
label: '浙江',
isLeaf: false,
value: 'zj',
},
]);

onChange = (value, selectedOptions) => {
const onChange = (value, selectedOptions) => {
console.log(value, selectedOptions);
this.setState({
inputValue: selectedOptions.map(o => o.label).join(', '),
});
setInputValue(selectedOptions.map(o => o.label).join(', '));
};

onChangeDynamic = (value, selectedOptions) => {
const onChangeDynamic = (value, selectedOptions) => {
console.log(value, selectedOptions);
this.setState({
dynamicInputValue: selectedOptions.map(o => o.label).join(', '),
});
setDynamicInputValue(selectedOptions.map(o => o.label).join(', '));
};

expandIcon = (
const expandIcon = (
<i>
<svg
viewBox="0 0 1024 1024"
Expand All @@ -130,7 +123,7 @@ class Demo extends React.Component {
</i>
);

loadingIcon = (
const loadingIcon = (
<i
style={{
position: 'absolute',
Expand All @@ -153,7 +146,7 @@ class Demo extends React.Component {
</i>
);

loadData = selectedOptions => {
const loadData = selectedOptions => {
const targetOption = selectedOptions[selectedOptions.length - 1];
targetOption.loading = true;
// 动态加载下级数据
Expand All @@ -169,37 +162,32 @@ class Demo extends React.Component {
value: 'dynamic2',
},
];
this.setState({
// eslint-disable-next-line react/no-access-state-in-setstate
options: [...this.state.options],
});
setOptions([...options]);
}, 1500);
};

render() {
return (
<div style={{ padding: '2rem' }}>
<Cascader
style={{ marginBottom: '2rem' }}
options={addressOptions}
onChange={this.onChange}
expandIcon={this.expandIcon}
>
<input placeholder="please select address" value={this.state.inputValue} />
</Cascader>
<Cascader
options={this.state.options}
loadData={this.loadData}
onChange={this.onChangeDynamic}
expandIcon={this.expandIcon}
loadingIcon={this.loadingIcon}
changeOnSelect
>
<input value={this.state.dynamicInputValue} readOnly />
</Cascader>
</div>
);
}
}
return (
<div style={{ padding: '2rem' }}>
<Cascader
style={{ marginBottom: '2rem' }}
options={addressOptions}
onChange={onChange}
expandIcon={expandIcon}
>
<input placeholder="please select address" value={inputValue} />
</Cascader>
<Cascader
options={options}
loadData={loadData}
onChange={onChangeDynamic}
expandIcon={expandIcon}
loadingIcon={loadingIcon}
changeOnSelect
>
<input value={dynamicInputValue} readOnly />
</Cascader>
</div>
);
};

export default Demo;
Loading
Loading