ironic-ui/ironic_ui/static/dashboard/admin/ironic/property-collection.service.js
Peter Piela 4ead23c007 Add property-collection-editor directive
Refactor the current code to create a reusable component for editing the
contents of property collections. The new component has replaced code
in the existing port create/edit views, and will do the same for the
node views.

Change-Id: Iea81609450acc6a72ab3cbe6be070f9b845aaa9b
2017-07-24 14:41:47 -04:00

106 lines
3.5 KiB
JavaScript

/*
* Copyright 2017 Cray Inc.
*
* 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.
*/
(function() {
'use strict';
angular
.module('horizon.dashboard.admin.ironic')
.factory('horizon.dashboard.admin.ironic.property-collection.service',
propertyCollectionService);
function propertyCollectionService() {
var service = {
PropertyCollection: PropertyCollection
};
/**
* @description Utility class for managing property collections.
* Used is association with the property-collection-editor directive.
*
* @param {object} args - Base properties are:
* id [string] - Unique id used to create DOM element ids, and
* internal variable names
* title [string] - Label used to identify the collection to the user
* addPropertyLabel [string] - Label used to prompt the user to add a new
* property
* placeholder [string] - Placeholder for text input field
* properties [object] - Dictionary of property values indexed by
* property name
*
* @return {void}
*/
function PropertyCollection(args) {
var collection = this;
collection.id = undefined;
collection.title = undefined;
collection.addPropertyLabel = undefined;
collection.placeholder = undefined;
collection.properties = {};
angular.forEach(args, function(value, arg) {
collection[arg] = value;
});
/**
* @description Test whether this collection contains a property.
*
* @param {string} propertyName - Property name.
* @return {boolean} True if the property already exists, false otherwise.
*/
this.checkPropertyUnique = function(propertyName) {
return !(propertyName in collection.properties);
};
/**
* @description Add a property to the collection.
*
* @param {string} propertyName - Property name.
* @return {void}
*/
this.addProperty = function(propertyName) {
this.properties[propertyName] = null;
};
/**
* @description Delete a specified property.
*
* @param {string} propertyName - Property name.
* @return {void}
*/
this.deleteProperty = function(propertyName) {
delete collection.properties[propertyName];
};
/**
* @description Test whether this collection is in a complete state.
* Complete is defined as all properties having a non-null value.
*
* @return {boolean} True if the collection is complete, false otherwise.
*/
this.complete = function() {
for (var propertyName in this.properties) {
if (this.properties.hasOwnProperty(propertyName) &&
this.properties[propertyName] === null) {
return false;
}
}
return true;
};
}
return service;
}
})();