all files / src/ui/ settingsForm.ui.js

47.62% Statements 30/63
17.39% Branches 4/23
18.75% Functions 3/16
48.33% Lines 29/60
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143                                                                                                                                                                                                                                   
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
var __extends = (this && this.__extends) || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var React = require('react');
var react_redux_1 = require('react-redux');
var ui = require('./elements.ui');
var redux_form_1 = require('redux-form');
var collection_1 = require('../util/collection');
var _ = require('lodash');
var react_1 = require("react");
var SettingsForm = (function (_super) {
    __extends(SettingsForm, _super);
    function SettingsForm() {
        _super.apply(this, arguments);
    }
    SettingsForm.prototype.componentDidMount = function () {
        this._initSemanticUi();
    };
    SettingsForm.prototype.componentDidUpdate = function () {
        this._initSemanticUi();
    };
    SettingsForm.prototype._initSemanticUi = function () {
        $('.icon.help.circle')
            .popup({
            position: "top left",
            offset: -10
        });
        $('.ui.checkbox')
            .checkbox();
    };
    SettingsForm.prototype.render = function () {
        var props = this.props;
        return React.createElement("form", {className: "ui form"}, collection_1.chunk(this.props.settings, 1).map(function (chunk) {
            return React.createElement("div", {key: chunk[0].id, className: "field"}, chunk.map(function (setting) {
                return React.createElement(LabeledField, {key: setting.id, setting: setting});
            }));
        }));
    };
    return SettingsForm;
}(React.Component));
SettingsForm.propTypes = {
    initialValues: react_1.PropTypes.object.isRequired,
    settings: react_1.PropTypes.arrayOf(react_1.PropTypes.shape({
        id: react_1.PropTypes.string.isRequired
    })).isRequired
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = redux_form_1.reduxForm({ enableReinitialize: "true" })(SettingsForm);
function LabeledField(props) {
    var setting = props.setting;
    return React.createElement("div", {className: "field"}, 
        React.createElement("label", null, 
            setting.name, 
            setting.description && setting.type !== 'boolean' ?
                React.createElement(ui.Icon, {type: "help circle", "data-content": setting.description}) : null), 
        React.createElement(SettingsInput, {setting: props.setting}));
}
LabeledField.propTypes = {
    setting: react_1.PropTypes.shape({
        id: react_1.PropTypes.string.isRequired,
        type: react_1.PropTypes.string.isRequired,
        name: react_1.PropTypes.string.isRequired,
        description: react_1.PropTypes.string
    }).isRequired
};
function SettingsInput(props) {
    var setting = props.setting;
    switch (setting.type) {
        case "text":
            return React.createElement(redux_form_1.Field, {name: setting.id, component: "textarea", rows: "3", placeholder: setting.description});
        case "string":
            return React.createElement(redux_form_1.Field, {name: setting.id, component: "input", type: "text", placeholder: setting.description});
        case "json":
            return React.createElement(redux_form_1.Field, {name: setting.id, component: "textarea", rows: "3", placeholder: setting.description});
        case "number":
            return React.createElement(redux_form_1.Field, {name: setting.id, component: "input", type: "number", min: setting.min, max: setting.max, placeholder: setting.description});
        case "boolean":
            return React.createElement(redux_form_1.Field, {name: setting.id, component: "input", type: "checkbox"});
        case "option":
            return React.createElement(redux_form_1.Field, {name: setting.id, component: "select", className: "ui fluid dropdown"}, 
                React.createElement("option", null, "Select " + props.name + " ..."), 
                setting.options.map(function (option) {
                    var optionValue = _.isObject(option) ? option.value : option;
                    var optionName = _.isObject(option) ? option.name : option;
                    return React.createElement("option", {key: optionValue, value: optionValue}, optionName);
                }));
        case "datasource":
            return React.createElement(DatasourceInputContainer, {setting: setting});
        default:
            console.error("Unknown type for settings field with id '" + setting.id + "': " + setting.type);
            return React.createElement("input", {placeholder: setting.description, readonly: true, value: "Unknown field type: " + setting.type});
    }
}
SettingsInput.propTypes = {
    setting: react_1.PropTypes.shape({
        type: react_1.PropTypes.string.isRequired,
        id: react_1.PropTypes.string.isRequired,
        name: react_1.PropTypes.string.isRequired,
        description: react_1.PropTypes.string,
        defaultValue: react_1.PropTypes.any,
        min: react_1.PropTypes.number,
        max: react_1.PropTypes.number,
        options: react_1.PropTypes.oneOfType([
            react_1.PropTypes.arrayOf(// For option
            react_1.PropTypes.shape({
                name: react_1.PropTypes.string,
                value: react_1.PropTypes.string.isRequired
            }.isRequired)).isRequired,
            react_1.PropTypes.arrayOf(react_1.PropTypes.string).isRequired
        ])
    }).isRequired
};
var DatasourceInput = function (props) {
    var datasources = props.datasources;
    var setting = props.setting;
    return React.createElement(redux_form_1.Field, {name: setting.id, component: "select", className: "ui fluid dropdown"}, 
        React.createElement("option", null, "Select " + setting.name + " ..."), 
        _.toPairs(datasources).map(function (_a) {
            var id = _a[0], ds = _a[1];
            return React.createElement("option", {key: id, value: id}, ds.settings.name + " (" + ds.type + ")");
        }));
};
DatasourceInput.propTypes = {
    datasources: react_1.PropTypes.object.isRequired,
    setting: react_1.PropTypes.shape({
        id: react_1.PropTypes.string.isRequired,
        type: react_1.PropTypes.string.isRequired,
        name: react_1.PropTypes.string.isRequired
    }).isRequired
};
var DatasourceInputContainer = react_redux_1.connect(function (state) {
    return {
        datasources: state.datasources
    };
})(DatasourceInput);