'use strict';Object.defineProperty(exports, "__esModule", { value: true });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;}; // Copyright 2015-2017 Parity Technologies (UK) Ltd.
// This file is part of Parity.

// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.

// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.

// You should have received a copy of the GNU General Public License
// along with Parity.  If not, see <http://www.gnu.org/licenses/>.

var _reduxActions = require('redux-actions');

var initialState = {
  finished: [],
  pending: [] };


function removeWithId(pending, id) {
  return pending.filter(function (tx) {return tx.id !== id;}).slice();
}

function setIsSending(pending, id, isSending) {
  return pending.map(function (p) {
    if (p.id === id) {
      p.isSending = isSending;
    }
    return p;
  }).slice();
}exports.default =

(0, _reduxActions.handleActions)({
  signerRequestsToConfirm: function signerRequestsToConfirm(state, action) {var
    pending = action.pending;

    return Object.assign({}, state, {
      pending: pending.map(function (request) {var
        id = request.id;
        var oldRequest = state.pending.find(function (r) {return r.id === id;});

        request.date = oldRequest && oldRequest.date ?
        oldRequest.date :
        new Date();

        return request;
      }) });

  },

  signerStartConfirmRequest: function signerStartConfirmRequest(state, action) {
    return _extends({},
    state, {
      pending: setIsSending(state.pending, action.payload.id, true) });

  },

  signerSuccessConfirmRequest: function signerSuccessConfirmRequest(state, action) {var _action$payload =
    action.payload,id = _action$payload.id,txHash = _action$payload.txHash;
    var confirmed = Object.assign(
    state.pending.find(function (p) {return p.id === id;}) || { id: id },
    { result: txHash, status: 'confirmed' });


    return _extends({},
    state, {
      pending: removeWithId(state.pending, id),
      finished: [confirmed].concat(state.finished) });

  },

  signerErrorConfirmRequest: function signerErrorConfirmRequest(state, action) {
    return _extends({},
    state, {
      pending: setIsSending(state.pending, action.payload.id, false) });

  },

  signerStartRejectRequest: function signerStartRejectRequest(state, action) {
    return _extends({},
    state, {
      pending: setIsSending(state.pending, action.payload.id, true) });

  },

  signerSuccessRejectRequest: function signerSuccessRejectRequest(state, action) {var
    id = action.payload.id;
    var rejected = Object.assign(
    state.pending.find(function (p) {return p.id === id;}) || { id: id },
    { status: 'rejected' });


    return _extends({},
    state, {
      pending: removeWithId(state.pending, id),
      finished: [rejected].concat(state.finished) });

  },

  signerErrorRejectRequest: function signerErrorRejectRequest(state, action) {
    return _extends({},
    state, {
      pending: setIsSending(state.pending, action.payload.id, false) });

  } },

initialState);