var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }

function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }

import React, { Component } from 'react';
import { findDOMNode } from 'react-dom';
import { Keyboard } from 'grommet/es6/components/Keyboard';

import { focusedChildIndex, focusChildByIndex, focusNextElement, focusPrevElement, hasKeyboardChildren } from '../DOM';

import { StyledTrComponent } from '../StyledPagingTable';

var TrComponent = function (_Component) {
  _inherits(TrComponent, _Component);

  function TrComponent() {
    var _temp, _this, _ret;

    _classCallCheck(this, TrComponent);

    for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
      args[_key] = arguments[_key];
    }

    return _ret = (_temp = (_this = _possibleConstructorReturn(this, _Component.call.apply(_Component, [this].concat(args))), _this), _this.selectNextRow = function () {
      var selectRow = _this.props.selectRow;

      var activeChild = focusedChildIndex(_this.container);
      return selectRow(true, activeChild);
    }, _this.selectPrevRow = function () {
      var selectRow = _this.props.selectRow;

      var activeChild = focusedChildIndex(_this.container);
      return selectRow(false, activeChild);
    }, _this.selectNextChild = function () {
      if (focusNextElement(_this.container)) {
        return true;
      }
      return _this.selectNextRow();
    }, _this.selectPrevChild = function () {
      if (focusPrevElement(_this.container)) {
        return true;
      }
      return _this.selectPrevRow();
    }, _this.selectFirstChild = function (activeIndex) {
      return focusChildByIndex(_this.container, activeIndex);
    }, _temp), _possibleConstructorReturn(_this, _ret);
  }

  TrComponent.prototype.render = function render() {
    var _this2 = this;

    return React.createElement(
      Keyboard,
      {
        onTab: function onTab(e) {
          e.preventDefault();
          if (e.shiftKey) {
            _this2.selectPrevChild();
          } else {
            _this2.selectNextChild();
          }
        },
        onLeft: function onLeft(e) {
          if (!hasKeyboardChildren(document.activeElement)) {
            e.preventDefault();
            _this2.selectPrevChild();
          }
        },
        onRight: function onRight(e) {
          if (!hasKeyboardChildren(document.activeElement)) {
            e.preventDefault();
            _this2.selectNextChild();
          }
        },
        onUp: function onUp(e) {
          if (!hasKeyboardChildren(document.activeElement)) {
            e.preventDefault();
            _this2.selectPrevRow();
          }
        },
        onDown: function onDown(e) {
          if (!hasKeyboardChildren(document.activeElement)) {
            e.preventDefault();
            _this2.selectNextRow();
          }
        }
      },
      React.createElement(StyledTrComponent, _extends({
        direction: 'row',
        role: 'row',
        ref: function ref(el) {
          _this2.container = findDOMNode(el);
        }
      }, this.props))
    );
  };

  return TrComponent;
}(Component);

export default TrComponent;