hunk.code_window:             return;
           }
           clearTimeout(this.searchTimeoutId);
           const searchTimeoutId = setTimeout(
               () => {
                   searchMoreChannels(
                       term,
  
hunk.labels: keep keep keep replace replace keep keep keep keep
hunk.file_path: webapp/components/more_channels.jsx
hunk.type: replace
file: // Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
  // See License.txt for license information.
  
  import Client from './client.jsx';
  
  import TeamStore from 'stores/team_store.jsx';
  import UserStore from 'stores/user_store.jsx';
  import BrowserStore from 'stores/browser_store.jsx';
  
  import * as GlobalActions from 'actions/global_actions.jsx';
  import {reconnect} from 'actions/websocket_actions.jsx';
  
  import request from 'superagent';
  
  const HTTP_UNAUTHORIZED = 401;
  
  const mfaPaths = [
      '/mfa/setup',
      '/mfa/confirm'
  ];
  
  class WebClientClass extends Client {
      constructor() {
          super();
          this.enableLogErrorsToConsole(true);
          this.hasInternetConnection = true;
          TeamStore.addChangeListener(this.onTeamStoreChanged.bind(this));
      }
  
      onTeamStoreChanged() {
          this.setTeamId(TeamStore.getCurrentId());
      }
      trackEvent(category, event, props) {
          if (global.window && global.window.analytics) {
              const properties = Object.assign({category, type: event, user_id: UserStore.getCurrentId()}, props);
              const options = {
                  context: {
                      ip: '0.0.0.0'
                  },
                  page: {
                      path: '',
                      referrer: '',
                      search: '',
                      title: '',
                      url: ''
                  },
                  anonymousId: '00000000000000000000000000'
              };
              global.window.analytics.track('event', properties, options);
          }
      }
  
      handleError(err, res) {
          if (res && res.body && res.body.id === 'api.context.mfa_required.app_error') {
              if (mfaPaths.indexOf(window.location.pathname) === -1) {
                  window.location.reload();
              }
              return;
          }
  
          if (err.status === HTTP_UNAUTHORIZED && res.req.url !== this.getUsersRoute() + '/login') {
              GlobalActions.emitUserLoggedOutEvent('/login');
          }
  
          if (err.status == null) {
              this.hasInternetConnection = false;
          }
      }
  
      handleSuccess = (res) => { // eslint-disable-line no-unused-vars
          if (res && !this.hasInternetConnection) {
              reconnect();
              this.hasInternetConnection = true;
          }
      }
  
      // not sure why but super.login doesn't work if using an () => arrow functions.
      // I think this might be a webpack issue.
      webLogin(loginId, password, token, success, error) {
          this.login(
              loginId,
              password,
              token,
              (data) => {
                  this.trackEvent('api', 'api_users_login_success');
                  BrowserStore.signalLogin();
  
                  if (success) {
                      success(data);
                  }
              },
              (err) => {
                  this.trackEvent('api', 'api_users_login_fail');
                  if (error) {
                      error(err);
                  }
              }
          );
      }
  
      webLoginByLdap(loginId, password, token, success, error) {
          this.loginByLdap(
              loginId,
              password,
              token,
              (data) => {
                  this.trackEvent('api', 'api_users_login_success');
                  this.trackEvent('api', 'api_users_login_ldap_success');
                  BrowserStore.signalLogin();
  
                  if (success) {
                      success(data);
                  }
              },
              (err) => {
                  this.trackEvent('api', 'api_users_login_fail');
                  this.trackEvent('api', 'api_users_login_ldap_fail');
                  if (error) {
                      error(err);
                  }
              }
          );
      }
  
      getYoutubeVideoInfo(googleKey, videoId, success, error) {
          request.get('https://www.googleapis.com/youtube/v3/videos').
          query({part: 'snippet', id: videoId, key: googleKey}).
          end((err, res) => {
              if (err) {
                  return error(err);
              }
  
              if (!res.body) {
                  console.error('Missing response body for getYoutubeVideoInfo'); // eslint-disable-line no-console
              }
  
              return success(res.body);
          });
      }
  }
  
  var WebClient = new WebClientClass();
  export default WebClient;
  