nw-skeleton

Source: app-wrapper/components/form/form-control-object/form-control-object.js

/**
 * @fileOverview form-control-object component file
 * @author Dino Ivankov <dinoivankov@gmail.com>
 * @version 1.3.1
 */
const _ = require('lodash');

var _appWrapper = window.getAppWrapper();
var appState = _appWrapper.getAppState();
/**
 * Form control object component
 *
 * @name form-control-object
 * @memberOf components
 * @property {string}   name        Name of the component
 * @property {string}   template    Component template contents
 * @property {string[]} props       Component properties
 * @property {Function} data        Data function
 * @property {Object}   methods     Component methods
 * @property {Object}   watch       Component watchers
 * @property {Object}   computed    Computed properties
 * @property {Object}   components  Child components
 */
exports.component = {
    name: 'form-control-object',
    template: '',
    props: ['control'],
    data: function () {
        return appState.appInfo;
    },
    methods: {
        addNewObjectRow: function(e){
            console.log(this.$props.control);
            e.preventDefault();
            let utilHelper = _appWrapper.getHelper('util');
            let value = '';
            let newType = prompt('Property type:\n    -form-control-text (default),\n    -form-control-array,\n    -form-control-checkbox,\n    -form-control-object');
            if (newType){
                if (newType == 'form-control-checkbox'){
                    value = false;
                }
                if (newType == 'form-control-array'){
                    value = [];
                }
                if (newType == 'form-control-object'){
                    value = {};
                }
            }


            let newName = prompt('Property name', 'newProperty');
            if (newName){
                let found = _.find(this.$props.control.value, {name: newName});
                if (!found){
                    let newValue = utilHelper.getControlObject (value, newName, this.$props.control.path);
                    this.$props.control.value.push(newValue);
                } else {
                    _appWrapper.addNotification('Property with name "{1}" already exists', 'error', [newName], false);
                }
            }
        },
        removeObjectRow: function(e){
            var target = e.target;
            var subRow = target.parentNode;
            var parentRow = subRow.parentNode;
            var currentIndex;
            _.each(parentRow.childNodes, function(node, i){
                if (node == subRow){
                    currentIndex = i;
                }
            });
            if (currentIndex || currentIndex === 0){
                var newValue = [];
                var values = _.cloneDeep(this.$props.control.value);
                _.each(values, function(value, index){
                    if (index != currentIndex){
                        newValue.push(value);
                    }
                });
                this.$props.control.value = newValue;
            }
        }
    }
};