'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = bindAutoBindMethods; /** * Copyright 2013-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of React source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * Original: * https://github.com/facebook/react/blob/6508b1ad273a6f371e8d90ae676e5390199461b4/src/isomorphic/classic/class/ReactClass.js#L650-L713 */ function bindAutoBindMethod(component, method) { var boundMethod = method.bind(component); boundMethod.__reactBoundContext = component; boundMethod.__reactBoundMethod = method; boundMethod.__reactBoundArguments = null; var componentName = component.constructor.displayName, _bind = boundMethod.bind; boundMethod.bind = function (newThis) { var args = Array.prototype.slice.call(arguments, 1); if (newThis !== component && newThis !== null) { console.warn('bind(): React component methods may only be bound to the ' + 'component instance. See ' + componentName); } else if (!args.length) { console.warn('bind(): You are binding a component method to the component. ' + 'React does this for you automatically in a high-performance ' + 'way, so you can safely remove this call. See ' + componentName); return boundMethod; } var reboundMethod = _bind.apply(boundMethod, arguments); reboundMethod.__reactBoundContext = component; reboundMethod.__reactBoundMethod = method; reboundMethod.__reactBoundArguments = args; return reboundMethod; }; return boundMethod; } function bindAutoBindMethodsFromMap(component) { for (var autoBindKey in component.__reactAutoBindMap) { if (!component.__reactAutoBindMap.hasOwnProperty(autoBindKey)) { return; } // Tweak: skip methods that are already bound. // This is to preserve method reference in case it is used // as a subscription handler that needs to be detached later. if (component.hasOwnProperty(autoBindKey) && component[autoBindKey].__reactBoundContext === component) { continue; } var method = component.__reactAutoBindMap[autoBindKey]; component[autoBindKey] = bindAutoBindMethod(component, method); } } function bindAutoBindMethods(component) { if (component.__reactAutoBindPairs) { bindAutoBindMethodsFromArray(component); } else if (component.__reactAutoBindMap) { bindAutoBindMethodsFromMap(component); } } function bindAutoBindMethodsFromArray(component) { var pairs = component.__reactAutoBindPairs; if (!pairs) { return; } for (var i = 0; i < pairs.length; i += 2) { var autoBindKey = pairs[i]; if (component.hasOwnProperty(autoBindKey) && component[autoBindKey].__reactBoundContext === component) { continue; } var method = pairs[i + 1]; component[autoBindKey] = bindAutoBindMethod(component, method); } }