/* * Copyright 2007-2017 Charles du Jeu - Abstrium SAS * This file is part of Pydio. * * Pydio is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Pydio 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 Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with Pydio. If not, see . * * The latest code can be found at . */ 'use strict'; exports.__esModule = 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; }; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _ReplicatedGroup = require('./ReplicatedGroup'); var _ReplicatedGroup2 = _interopRequireDefault(_ReplicatedGroup); var React = require('react'); var _require = require('material-ui'); var IconButton = _require.IconButton; var LangUtils = require('pydio/util/lang'); /** * Sub form replicating itself (+/-) */ exports['default'] = React.createClass({ displayName: 'ReplicationPanel', propTypes: { parameters: React.PropTypes.array.isRequired, values: React.PropTypes.object, onChange: React.PropTypes.func, disabled: React.PropTypes.bool, binary_context: React.PropTypes.string, depth: React.PropTypes.number }, buildSubValue: function buildSubValue(values) { var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1]; var subVal = undefined; var suffix = index == 0 ? '' : '_' + index; this.props.parameters.map(function (p) { var pName = p['name']; if (values[pName + suffix] !== undefined) { if (!subVal) subVal = {}; subVal[pName] = values[pName + suffix]; } }); return subVal || false; }, indexedValues: function indexedValues(rowsArray) { var index = 0, values = {}; rowsArray.map(function (row) { var suffix = index == 0 ? '' : '_' + index; for (var p in row) { if (!row.hasOwnProperty(p)) continue; values[p + suffix] = row[p]; } index++; }); return values; }, indexValues: function indexValues(rowsArray, removeLastRow) { var _this = this; var indexed = this.indexedValues(rowsArray); if (this.props.onChange) { if (removeLastRow) { (function () { var lastRow = {}, nextIndex = rowsArray.length - 1; _this.props.parameters.map(function (p) { lastRow[p['name'] + (nextIndex > 0 ? '_' + nextIndex : '')] = ''; }); _this.props.onChange(indexed, true, lastRow); })(); } else { this.props.onChange(indexed, true); } } }, instances: function instances() { var _this2 = this; // Analyze current value to grab number of rows. var rows = [], subVal = undefined, index = 0; while (subVal = this.buildSubValue(this.props.values, index)) { index++; rows.push(subVal); } var firstParam = this.props.parameters[0]; if (!rows.length && firstParam['replicationMandatory'] === 'true') { (function () { var emptyValue = {}; _this2.props.parameters.map(function (p) { emptyValue[p['name']] = p['default'] || ''; }); rows.push(emptyValue); })(); } return rows; }, addRow: function addRow() { var newValue = {}, currentValues = this.instances(); this.props.parameters.map(function (p) { newValue[p['name']] = p['default'] || ''; }); currentValues.push(newValue); this.indexValues(currentValues); }, removeRow: function removeRow(index) { var instances = this.instances(); var removeInst = instances[index]; instances = LangUtils.arrayWithout(this.instances(), index); instances.push(removeInst); this.indexValues(instances, true); }, swapRows: function swapRows(i, j) { var instances = this.instances(); var tmp = instances[j]; instances[j] = instances[i]; instances[i] = tmp; this.indexValues(instances); }, onChange: function onChange(index, newValues, dirty) { var instances = this.instances(); instances[index] = newValues; this.indexValues(instances); }, onParameterChange: function onParameterChange(index, paramName, newValue, oldValue) { var instances = this.instances(); instances[index][paramName] = newValue; this.indexValues(instances); }, render: function render() { var _this3 = this; var parameters = this.props.parameters; var firstParam = parameters[0]; var replicationTitle = firstParam['replicationTitle'] || firstParam['label']; var replicationDescription = firstParam['replicationDescription'] || firstParam['description']; var replicationMandatory = firstParam['replicationMandatory'] === 'true'; var instances = this.instances(); var multiple = instances.length > 1; var rows = instances.map(function (subValues, index) { var onSwapUp = undefined, onSwapDown = undefined, onRemove = undefined; var onParameterChange = function onParameterChange(paramName, newValue, oldValue) { _this3.onParameterChange(index, paramName, newValue, oldValue); }; if (multiple && index > 0) { onSwapUp = function () { _this3.swapRows(index, index - 1); }; } if (multiple && index < instances.length - 1) { onSwapDown = function () { _this3.swapRows(index, index + 1); }; } if (multiple || !replicationMandatory) { onRemove = function () { _this3.removeRow(index); }; } var props = { onSwapUp: onSwapUp, onSwapDown: onSwapDown, onRemove: onRemove, onParameterChange: onParameterChange }; return React.createElement(_ReplicatedGroup2['default'], _extends({ key: index }, _this3.props, props, { subValues: subValues })); }); return React.createElement( 'div', { className: 'replicable-field' }, React.createElement( 'div', { className: 'title-bar' }, React.createElement(IconButton, { key: 'add', style: { float: 'right' }, iconClassName: 'mdi mdi-plus', iconStyle: { fontSize: 24 }, tooltip: 'Add value', onClick: this.addRow }), React.createElement( 'div', { className: 'title' }, replicationTitle ), React.createElement( 'div', { className: 'legend' }, replicationDescription ) ), rows ); } }); module.exports = exports['default'];