/* * 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; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _mixinsFormMixin = require('../mixins/FormMixin'); var _mixinsFormMixin2 = _interopRequireDefault(_mixinsFormMixin); var _mixinsFieldWithChoices = require('../mixins/FieldWithChoices'); var _mixinsFieldWithChoices2 = _interopRequireDefault(_mixinsFieldWithChoices); /** * Select box input conforming to Pydio standard form parameter. */ var React = require('react'); var _require = require('material-ui'); var SelectField = _require.SelectField; var MenuItem = _require.MenuItem; var Chip = _require.Chip; var LangUtils = require('pydio/util/lang'); var InputSelectBox = React.createClass({ displayName: 'InputSelectBox', mixins: [_mixinsFormMixin2['default']], getDefaultProps: function getDefaultProps() { return { skipBufferChanges: true }; }, onDropDownChange: function onDropDownChange(event, index, value) { this.onChange(event, value); this.toggleEditMode(); }, onMultipleSelect: function onMultipleSelect(event, index, newValue) { if (newValue == -1) return; var currentValue = this.state.value; var currentValues = typeof currentValue === 'string' ? currentValue.split(',') : currentValue; if (!currentValues.indexOf(newValue) !== -1) { currentValues.push(newValue); this.onChange(event, currentValues.join(',')); } this.toggleEditMode(); }, onMultipleRemove: function onMultipleRemove(value) { var currentValue = this.state.value; var currentValues = typeof currentValue === 'string' ? currentValue.split(',') : currentValue; if (currentValues.indexOf(value) !== -1) { currentValues = LangUtils.arrayWithout(currentValues, currentValues.indexOf(value)); this.onChange(null, currentValues.join(',')); } }, render: function render() { var _this = this; var currentValue = this.state.value; var menuItems = [], multipleOptions = [], mandatory = true; if (!this.props.attributes['mandatory'] || this.props.attributes['mandatory'] != "true") { mandatory = false; menuItems.push(React.createElement(MenuItem, { value: -1, primaryText: this.props.attributes['label'] + '...' })); } var choices = this.props.choices; choices.forEach(function (value, key) { menuItems.push(React.createElement(MenuItem, { value: key, primaryText: value })); multipleOptions.push({ value: key, label: value }); }); if (this.isDisplayGrid() && !this.state.editMode || this.props.disabled) { var value = this.state.value; if (choices.get(value)) value = choices.get(value); return React.createElement( 'div', { onClick: this.props.disabled ? function () {} : this.toggleEditMode, className: value ? '' : 'paramValue-empty' }, !value ? 'Empty' : value, '   ', React.createElement('span', { className: 'icon-caret-down' }) ); } else { var hasValue = false; if (this.props.multiple && this.props.multiple == true) { var currentValues = currentValue; if (typeof currentValue === "string") { currentValues = currentValue.split(","); } hasValue = currentValues.length ? true : false; return React.createElement( 'span', { className: "multiple has-value" }, React.createElement( 'div', { style: { display: 'flex', flexWrap: 'wrap' } }, currentValues.map(function (v) { return React.createElement( Chip, { onRequestDelete: function () { _this.onMultipleRemove(v); } }, v ); }) ), React.createElement( SelectField, { value: -1, onChange: this.onMultipleSelect, fullWidth: true, className: this.props.className }, menuItems ) ); } else { return React.createElement( 'span', null, React.createElement( SelectField, { floatingLabelText: this.props.attributes.label, value: currentValue, onChange: this.onDropDownChange, fullWidth: true, className: this.props.className }, menuItems ) ); } } } }); exports['default'] = InputSelectBox = _mixinsFieldWithChoices2['default'](InputSelectBox); exports['default'] = InputSelectBox; module.exports = exports['default'];