import ngModule from '../../module';
import Component from 'core/lib/component';
import './style.scss';

/**
 * Simple component to display a label with it's correspoding value. If @info
 * property is provided it displays an aditional icon with the provided
 * information.
 *
 * IMPORTANT!
 *
 * Please keep this component as simple as possible and without persistent
 * watchers because it's used a lot of times in the application and could cause
 * performance issues.
 *
 * @property {String} label The label
 * @property {*} value The value
 * @property {String} info Aditional information to display
 */
export default class Controller extends Component {
    get label() {
        return this._label;
    }

    set label(value) {
        this._label = value;

        let label = this.element.querySelector('vn-label');
        label.textContent = this.$t(value);
    }

    get value() {
        return this._value;
    }

    set value(value) {
        this._value = value;

        let span = this.element.querySelector('span');
        span.title = value;
        span.textContent = value != null && value != '' ? value : '-';
    }
}

ngModule.vnComponent('vnLabelValue', {
    controller: Controller,
    template: require('./index.html'),
    transclude: true,
    bindings: {
        label: '@',
        value: '@?',
        info: '@?'
    }
});