blob: 89fdd761b36d3c7455ce473cc53b2164c36fbd42 [file] [log] [blame]
/*
* Copyright 2017-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import './field.scss';
import {IXosConfigHelpersService} from '../services/helpers/config.helpers';
import {IXosFormHelpersService} from '../form/form-helpers';
import * as _ from 'lodash';
class FieldCtrl {
static $inject = ['$attrs', '$scope', 'ConfigHelpers', 'XosFormHelpers'];
// $inject = ['$onInit'];
public field: any;
public name: string;
public ngModel: any;
public getType = this.XosFormHelpers._getFieldFormat;
public formatLabel = this.ConfigHelpers.toLabel;
constructor(
private $attrs: ng.IAttributes,
private $scope: ng.IScope,
private ConfigHelpers: IXosConfigHelpersService,
private XosFormHelpers: IXosFormHelpersService
) {
}
public isEmptyObject = (o: any) => o ? Object.keys(o).length === 0 : true;
$onInit() {
if (!this.name) {
throw new Error('[xosField] Please provide a field name');
}
if (!this.field) {
throw new Error('[xosField] Please provide a field definition');
}
if (!this.field.type) {
throw new Error('[xosField] Please provide a type in the field definition');
}
if (!this.$attrs['ngModel']) {
throw new Error('[xosField] Please provide an ng-model');
}
// NOTE set default value (if any)
if (this.field.default && !angular.isDefined(this.ngModel)) {
if (this.field.type === 'number') {
this.ngModel = parseInt(this.field.default, 10);
}
else {
this.ngModel = this.field.default;
}
}
if (this.field.type === 'array') {
this.$scope.$watch(() => this.ngModel.length, () => {
this.field.availableOptions = _.difference(this.field.options, this.ngModel);
});
}
}
}
export const xosField: angular.IComponentOptions = {
template: require('./field.html'),
controllerAs: 'vm',
controller: FieldCtrl,
bindings: {
ngModel: '=',
name: '=',
field: '='
}
};