designate-dashboard/designatedashboard/static/designatedashboard/resources/os-designate-zone/actions/common-forms.service.js

186 lines
5.2 KiB
JavaScript

/**
*
* (c) Copyright 2016 Hewlett Packard Enterprise Development Company LP
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use self 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('designatedashboard.resources.os-designate-zone.actions')
.factory('designatedashboard.resources.os-designate-zone.actions.common-forms', service);
service.$inject = [
];
/**
* Service to return a schema form config for action forms. Especially useful for forms
* like create and update that differ only in the readonly state of certain form fields.
*
* @returns {object} A schema form config
*/
function service() {
var service = {
getCreateFormConfig: getCreateFormConfig,
getUpdateFormConfig: getUpdateFormConfig
};
return service;
/////////////////
/*
* Returns the create zone form config
* @returns {{schema, form, model}|*}
*/
function getCreateFormConfig() {
return getCreateUpdateFormConfig(false);
}
/*
* Return the update zone form config
* @returns {{schema, form, model}|*}
*/
function getUpdateFormConfig() {
return getCreateUpdateFormConfig(true);
}
/*
* Return the create/update zone form. The two forms are identical except for
* during update, some fields are read-only.
*
* @param readonly - sets readonly value on form fields that change between update and create
* @returns {object} a schema form config, including default model
*/
function getCreateUpdateFormConfig(readonly) {
return {
schema: {
type: "object",
properties: {
name: {
type: "string",
pattern: /^.+\.$/
},
description: {
type: "string"
},
email: {
type: "string",
format: "email",
pattern: /^[^@]+@[^@]+$/
},
type: {
type: "string",
enum: [
"PRIMARY",
"SECONDARY"
]
},
ttl: {
type: "integer",
minimum: 1,
maximum: 2147483647
},
masters: {
type: "array",
items: {
type: "object",
properties: {
address: {
type: "string"
}
}
},
minItems: 1,
uniqueItems: true
}
}
},
form: [
{
key: "name",
readonly: readonly,
title: gettext("Name"),
description: gettext("Zone name ending in '.'"),
validationMessage: gettext("Zone must end with '.'"),
placeholder: "example.com.",
type: "text",
required: true
},
{
key: "description",
type: "textarea",
title: gettext("Description"),
description: gettext("Details about the zone.")
},
{
key: "email",
title: gettext("Email Address"),
description: gettext("Email address to contact the zone owner."),
validationMessage: gettext("Email address must contain a single '@' character"),
type: "text",
condition: "model.type == 'PRIMARY'",
required: true
},
{
key: "ttl",
title: gettext("TTL"),
description: gettext("Time To Live in seconds."),
type: "number",
condition: "model.type == 'PRIMARY'",
required: true
},
{
key: "type",
readonly: readonly,
title: gettext("Type"),
description: gettext("Select the type of zone"),
type: "select",
titleMap: [
{
value: "PRIMARY",
name: gettext("Primary")
},
{
value: "SECONDARY",
name: gettext("Secondary")
}
]
},
{
key: "masters",
readonly: readonly,
title: gettext("Masters"),
type: "array",
description: gettext("DNS master(s) for the Secondary zone."),
condition: "model.type == 'SECONDARY'",
add: gettext("Add Master"),
items: [
{
key: "masters[].address",
title: gettext("IP Address")
}
]
}
],
model: {
type: "PRIMARY",
ttl: 3600
}
};
}
}
})();