all files / src/layouts/ layouts.ui.js

78.79% Statements 52/66
44.44% Branches 4/9
66.67% Functions 20/30
82.26% Lines 51/62
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 144 145 146 147 148 149 150 151 152                                                                                                                                                                                                         
/* 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 _ = require('lodash');
var Layouts = require('./layouts');
var ui = require('../ui/elements.ui');
var react_1 = require("react");
var LayoutsTopNavItem = function (props) {
    return React.createElement("li", {className: "slds-context-bar__item slds-context-bar__dropdown-trigger slds-dropdown-trigger slds-dropdown-trigger--hover", "aria-haspopup": "true"}, 
        React.createElement("a", {href: "javascript:void(0);", className: "slds-context-bar__label-action", title: "Layouts"}, 
            React.createElement("span", {className: "slds-truncate"}, "Layout")
        ), 
        React.createElement("div", {className: "slds-context-bar__icon-action slds-p-left--none", tabIndex: "0"}, 
            React.createElement("button", {className: "slds-button slds-button--icon slds-context-bar__button", tabIndex: "-1"}, 
                React.createElement("svg", {"aria-hidden": "true", className: "slds-button__icon"}, 
                    React.createElement("use", {xlinkHref: "assets/icons/utility-sprite/svg/symbols.svg#chevrondown"})
                ), 
                React.createElement("span", {className: "slds-assistive-text"}, "Open Layout submenu"))
        ), 
        React.createElement("div", {className: "slds-dropdown slds-dropdown--right"}, 
            React.createElement("ul", {className: "dropdown__list", role: "menu"}, 
                React.createElement(SaveLayout, null), 
                React.createElement(ResetLayoutButton, {text: "Reset Current Layout", icon: "undo"}), 
                React.createElement(SaveLayoutButton, {text: "Save Layout", icon: "package"}), 
                React.createElement("li", {className: "slds-dropdown__header slds-has-divider--top-space", role: "separator"}, 
                    React.createElement("span", {className: "slds-text-title--caps"}, "Layouts")
                ), 
                props.layouts.map(function (layout) {
                    return React.createElement(LayoutItem, {text: layout.name, icon: "plus", layout: layout, key: layout.id});
                }))
        ));
};
LayoutsTopNavItem.propTypes = {
    layouts: react_1.PropTypes.arrayOf(react_1.PropTypes.shape({
        name: react_1.PropTypes.string
    })),
    widgets: react_1.PropTypes.object,
    currentLayout: react_1.PropTypes.object
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = react_redux_1.connect(function (state) {
    return {
        layouts: _.valuesIn(state.layouts),
        currentLayout: state.currentLayout,
        widgets: state.widgets
    };
}, function (dispatch) {
    return {};
})(LayoutsTopNavItem);
var SaveInput = (function (_super) {
    __extends(SaveInput, _super);
    function SaveInput() {
        _super.apply(this, arguments);
    }
    SaveInput.prototype.onEnter = function (e) {
        if (e.key === 'Enter') {
            this.save();
        }
    };
    SaveInput.prototype.save = function () {
        this.props.onEnter(this.refs.input.value, this.props);
        this.refs.input.value = '';
    };
    SaveInput.prototype.render = function () {
        var _this = this;
        return React.createElement("div", {className: "slds-form-element"}, 
            React.createElement("div", {className: "slds-form-element__control slds-input-has-icon slds-input-has-icon--right"}, 
                React.createElement("svg", {"aria-hidden": "true", className: "slds-input__icon slds-icon-text-default", onClick: function () { return _this.save(); }}, 
                    React.createElement("use", {xlinkHref: "assets/icons/utility-sprite/svg/symbols.svg#add"})
                ), 
                React.createElement("input", {id: "text-input-save-layout", className: "slds-input", type: "text", placeholder: "Save as ...", ref: "input", onKeyPress: this.onEnter.bind(this)}))
        );
    };
    return SaveInput;
}(React.Component));
SaveInput.propTypes = {
    onEnter: react_1.PropTypes.func,
    widgets: react_1.PropTypes.object
};
var SaveLayout = react_redux_1.connect(function (state) {
    return {
        layouts: _.valuesIn(state.layouts),
        widgets: state.widgets
    };
}, function (dispatch, props) {
    return {
        onEnter: function (name, props) {
            dispatch(Layouts.addLayout(name, props.widgets));
        }
    };
})(SaveInput);
var MyLayoutItem = (function (_super) {
    __extends(MyLayoutItem, _super);
    function MyLayoutItem() {
        _super.apply(this, arguments);
    }
    MyLayoutItem.prototype.render = function () {
        var props = this.props;
        var selected = props.currentLayout.id == props.layout.id;
        return React.createElement(ui.DropdownItem, {onClick: function () { return props.onClick(props); }, selected: selected, isCheckbox: "true", icon: "check", iconRight: "delete", iconRightClick: function () {
            props.deleteLayout(props);
        }, text: props.text});
    };
    return MyLayoutItem;
}(React.Component));
MyLayoutItem.propTypes = {
    deleteLayout: react_1.PropTypes.func.isRequired,
    onClick: react_1.PropTypes.func.isRequired,
    layout: react_1.PropTypes.object.isRequired,
    currentLayout: react_1.PropTypes.object
};
var LayoutItem = react_redux_1.connect(function (state) {
    return {
        currentLayout: state.currentLayout
    };
}, function (dispatch, props) {
    return {
        deleteLayout: function (props) { return dispatch(Layouts.deleteLayout(props.layout.id)); },
        onClick: function (props) { return dispatch(Layouts.loadLayout(props.layout.id)); }
    };
})(MyLayoutItem);
var ResetLayoutButton = react_redux_1.connect(function (state) {
    return {
        id: state.currentLayout.id,
        disabled: !state.currentLayout.id
    };
}, function (dispatch, props) {
    return {
        onClick: function (props) { return dispatch(Layouts.loadLayout(props.id)); }
    };
})(ui.DropdownItem);
var SaveLayoutButton = react_redux_1.connect(function (state) {
    return {
        id: state.currentLayout.id,
        widgets: state.widgets,
        disabled: !state.currentLayout.id
    };
}, function (dispatch) {
    return {
        onClick: function (props) { return dispatch(Layouts.updateLayout(props.id, props.widgets)); }
    };
})(ui.DropdownItem);