]> source.dussan.org Git - sonarqube.git/commitdiff
expose Select ref
authorStas Vilchik <stas.vilchik@sonarsource.com>
Thu, 2 Nov 2017 15:35:56 +0000 (16:35 +0100)
committerStas Vilchik <stas.vilchik@sonarsource.com>
Fri, 3 Nov 2017 13:28:18 +0000 (14:28 +0100)
server/sonar-web/src/main/js/apps/quality-gates/components/Condition.js
server/sonar-web/src/main/js/components/controls/Select.tsx

index f1d109abc76c14383265adb9ce9848f265d2eeb6..c66890153f30b828cf027cb28af972e6286fa15f 100644 (file)
@@ -29,7 +29,6 @@ import { formatMeasure } from '../../../helpers/measures';
 export default class Condition extends Component {
   constructor(props) {
     super(props);
-    this.handleChange = this.handleChange.bind(this);
     this.state = {
       changed: false,
       period: props.condition.period,
@@ -40,34 +39,27 @@ export default class Condition extends Component {
   }
 
   componentDidMount() {
-    const { condition } = this.props;
-
-    // TODO looks like `this.opetator` is always null or undefined
-    if (!condition.id && this.operator) {
+    if (!this.props.condition.id && this.operator) {
       this.operator.focus();
     }
   }
 
-  handleChange() {
-    this.setState({ changed: true });
-  }
-
   handleOperatorChange = ({ value }) => {
     this.setState({ changed: true, op: value });
   };
 
-  handlePeriodChange(checked) {
+  handlePeriodChange = checked => {
     const period = checked ? '1' : undefined;
     this.setState({ changed: true, period });
-  }
+  };
 
-  handleWarningChange(value) {
+  handleWarningChange = value => {
     this.setState({ changed: true, warning: value });
-  }
+  };
 
-  handleErrorChange(value) {
+  handleErrorChange = value => {
     this.setState({ changed: true, error: value });
-  }
+  };
 
   handleSaveClick = e => {
     const { qualityGate, condition, metric, onSaveCondition, onError, onResetError } = this.props;
@@ -177,7 +169,7 @@ export default class Condition extends Component {
       return this.renderPeriodValue();
     }
 
-    return <Checkbox checked={isLeakSelected} onCheck={this.handlePeriodChange.bind(this)} />;
+    return <Checkbox checked={isLeakSelected} onCheck={this.handlePeriodChange} />;
   }
 
   renderOperator() {
@@ -201,14 +193,14 @@ export default class Condition extends Component {
 
     return (
       <Select
-        ref={node => (this.operator = node)}
         className="input-medium"
-        name="operator"
-        value={this.state.op}
         clearable={false}
-        searchable={false}
-        options={operatorOptions}
+        innerRef={node => (this.operator = node)}
+        name="operator"
         onChange={this.handleOperatorChange}
+        options={operatorOptions}
+        searchable={false}
+        value={this.state.op}
       />
     );
   }
@@ -234,7 +226,7 @@ export default class Condition extends Component {
               name="warning"
               value={this.state.warning}
               metric={metric}
-              onChange={value => this.handleWarningChange(value)}
+              onChange={this.handleWarningChange}
             />
           ) : (
             formatMeasure(condition.warning, metric.type)
@@ -247,7 +239,7 @@ export default class Condition extends Component {
               name="error"
               value={this.state.error}
               metric={metric}
-              onChange={value => this.handleErrorChange(value)}
+              onChange={this.handleErrorChange}
             />
           ) : (
             formatMeasure(condition.error, metric.type)
index 240b4164bf29728fc9839a73424e0386e614d153..b4fd4864189e2a46ef2515794c4c21703244b869 100644 (file)
@@ -38,13 +38,19 @@ function renderInput() {
   );
 }
 
-export default function Select(props: ReactSelectProps) {
+interface WithInnerRef {
+  innerRef?: (element: ReactSelect) => void;
+}
+
+export default function Select({ innerRef, ...props }: WithInnerRef & ReactSelectProps) {
   // TODO try to define good defaults, if any
   // ReactSelect doesn't declare `clearRenderer` prop
   const ReactSelectAny = ReactSelect as any;
   // hide the "x" icon when select is empty
   const clearable = props.clearable ? Boolean(props.value) : false;
-  return <ReactSelectAny {...props} clearable={clearable} clearRenderer={renderInput} />;
+  return (
+    <ReactSelectAny {...props} clearable={clearable} clearRenderer={renderInput} ref={innerRef} />
+  );
 }
 
 export function Creatable(props: ReactCreatableSelectProps) {