blob: a5df5e77fd078375ed7c1fca0aa10431e4fa8029 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import React from "react";
import ReactDOM from "react-dom";
import ReactSelect from "react-select";
export class ThrottledReactSelectAsync extends React.Component {
constructor(props) {
super(props);
this.lastCall = undefined;
}
wrapThrottler(loadOptions) {
if (!loadOptions) {
return () => {};
}
return (id, callback) => {
if (this.lastCall) {
clearTimeout(this.lastCall);
}
this.lastCall = setTimeout(() => {
loadOptions(id, callback);
}, 400);
};
}
render() {
// wrapThrottler() must be called here to ensure a new
// function is created when props.loadOptions is updated
const throttledLoadOptions = this.wrapThrottler(
this.props.loadOptions
).bind(this);
const newProps = {
...this.props,
loadOptions: throttledLoadOptions,
onBlurResetsInput: false
};
return <ReactSelect.Async {...newProps} />;
}
}