'use strict';

Object.defineProperty(exports, "__esModule", {
    value: true
});

var _checkbox = require('../mixins/checkbox');

exports['default'] = {
    name: 'SnCheckbox',
    mixins: [(0, _checkbox.CheckboxMixin)({
        role: 'checkbox',
        parent: 'snCheckbox'
    })],

    computed: {
        checked: {
            get: function get() {
                if (this.parent) {
                    return this.parent.value.indexOf(this.name) !== -1;
                }
                return this.value;
            },
            set: function set(val) {
                if (this.parent) {
                    this.setParentValue(val);
                } else {
                    this.$emit('input', val);
                }
            }
        }
    },

    watch: {
        value: function value(val) {
            this.$emit('change', val);
        }
    },

    methods: {
        toggle: function toggle() {
            var _this = this;

            var checked = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : !this.checked;

            clearTimeout(this.toggleTask);
            this.toggleTask = setTimeout(function () {
                _this.checked = checked;
            });
        },
        setParentValue: function setParentValue(val) {
            var parent = this.parent;

            var value = parent.value.slice();

            if (val) {
                if (parent.max && value.length >= parent.max) {
                    return;
                }

                /* istanbul ignore else */
                if (value.indexOf(this.name) === -1) {
                    value.push(this.name);
                    parent.$emit('input', value);
                }
            } else {
                var index = value.indexOf(this.name);

                /* istanbul ignore else */
                if (index !== -1) {
                    value.splice(index, 1);
                    parent.$emit('input', value);
                }
            }
        }
    }
};
module.exports = exports.default;