refactor: add frontend debounce constants (#13250)

This commit is contained in:
Jesse Yang 2021-02-19 15:47:44 -10:00 committed by GitHub
parent 42ff4fc19a
commit 571b53e9cf
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 31 additions and 12 deletions

View File

@ -25,6 +25,7 @@ import { debounce } from 'lodash';
import ModalTrigger from 'src/components/ModalTrigger';
import { ConfigEditor } from 'src/components/AsyncAceEditor';
import { FAST_DEBOUNCE } from 'src/constants';
const propTypes = {
onChange: PropTypes.func,
@ -80,7 +81,7 @@ function TemplateParamsEditor({ code, language, onChange }) {
mode={language}
minLines={25}
maxLines={50}
onChange={debounce(onChange, 200)}
onChange={debounce(onChange, FAST_DEBOUNCE)}
width="100%"
editorProps={{ $blockScrolling: true }}
enableLiveAutocompletion

View File

@ -27,3 +27,13 @@ export const URL_PARAMS = {
standalone: 'standalone',
preselectFilters: 'preselect_filters',
};
/**
* Faster debounce delay for inputs without expensive operation.
*/
export const FAST_DEBOUNCE = 250;
/**
* Slower debounce delay for inputs with expensive API calls.
*/
export const SLOW_DEBOUNCE = 500;

View File

@ -22,7 +22,11 @@ import { FormControl } from 'react-bootstrap';
import { Column } from 'react-table';
import debounce from 'lodash/debounce';
import { BOOL_FALSE_DISPLAY, BOOL_TRUE_DISPLAY } from 'src/constants';
import {
BOOL_FALSE_DISPLAY,
BOOL_TRUE_DISPLAY,
SLOW_DEBOUNCE,
} from 'src/constants';
import Button from 'src/components/Button';
import {
applyFormattingToTabularData,
@ -67,7 +71,7 @@ export const FilterInput = ({
}: {
onChangeHandler(filterText: string): void;
}) => {
const debouncedChangeHandler = debounce(onChangeHandler, 500);
const debouncedChangeHandler = debounce(onChangeHandler, SLOW_DEBOUNCE);
return (
<FormControl
placeholder={t('Search')}

View File

@ -27,8 +27,9 @@ import {
} from '@superset-ui/chart-controls';
import { debounce } from 'lodash';
import { matchSorter, rankings } from 'match-sorter';
import { ExploreActions } from '../actions/exploreActions';
import Control from './Control';
import { FAST_DEBOUNCE } from 'src/constants';
import { ExploreActions } from 'src/explore/actions/exploreActions';
import Control from 'src/explore/components/Control';
interface DatasourceControl extends ControlConfig {
datasource?: DatasourceMeta;
@ -162,7 +163,7 @@ export default function DataSourcePanel({
String(a.rankedValue).localeCompare(b.rankedValue),
}),
});
}, 200);
}, FAST_DEBOUNCE);
useEffect(() => {
setList({

View File

@ -22,11 +22,12 @@ import { FormGroup, FormControl } from 'react-bootstrap';
import { debounce } from 'lodash';
import { t } from '@superset-ui/core';
import { FAST_DEBOUNCE } from 'src/constants';
import Button from 'src/components/Button';
import { TextAreaEditor } from 'src/components/AsyncAceEditor';
import ModalTrigger from 'src/components/ModalTrigger';
import ControlHeader from '../ControlHeader';
import ControlHeader from 'src/explore/components/ControlHeader';
const propTypes = {
name: PropTypes.string,
@ -63,7 +64,7 @@ export default class TextAreaControl extends React.Component {
super();
this.onAceChangeDebounce = debounce(value => {
this.onAceChange(value);
}, 300);
}, FAST_DEBOUNCE);
}
onControlChange(event) {

View File

@ -24,7 +24,11 @@ import { AsyncCreatableSelect, CreatableSelect } from 'src/components/Select';
import Button from 'src/components/Button';
import { t, SupersetClient } from '@superset-ui/core';
import { BOOL_FALSE_DISPLAY, BOOL_TRUE_DISPLAY } from 'src/constants';
import {
BOOL_FALSE_DISPLAY,
BOOL_TRUE_DISPLAY,
SLOW_DEBOUNCE,
} from 'src/constants';
import FormLabel from 'src/components/FormLabel';
import DateFilterControl from 'src/explore/components/controls/DateFilterControl';
import ControlRow from 'src/explore/components/ControlRow';
@ -184,7 +188,7 @@ class FilterBox extends React.PureComponent {
if (!(key in this.debouncerCache)) {
this.debouncerCache[key] = debounce((input, callback) => {
this.loadOptions(key, input).then(callback);
}, 500);
}, SLOW_DEBOUNCE);
}
return this.debouncerCache[key];
}
@ -298,7 +302,6 @@ class FilterBox extends React.PureComponent {
datasourceFilters.push(
<ControlRow
key="sqla-filters"
className="control-row"
controls={sqlaFilters.map(control => (
<Control {...this.getControlData(control)} />
))}
@ -309,7 +312,6 @@ class FilterBox extends React.PureComponent {
datasourceFilters.push(
<ControlRow
key="druid-filters"
className="control-row"
controls={druidFilters.map(control => (
<Control {...this.getControlData(control)} />
))}