4ead23c007
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
106 lines
3.5 KiB
JavaScript
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;
|
|
}
|
|
})();
|