2 // ========================LICENSE_START=================================
5 // Copyright (C) 2021: Nordix Foundation
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 // ========================LICENSE_END===================================
21 import { animate, state, style, transition, trigger } from '@angular/animations';
22 import { Component, Input, OnInit } from '@angular/core';
23 import { JsonPointer } from 'angular6-json-schema-form';
26 selector: "nrcp-typed-policy-editor",
27 templateUrl: "./typed-policy-editor.component.html",
28 styleUrls: ["./typed-policy-editor.component.scss"],
30 trigger("expandSection", [
31 state("in", style({ height: "*" })),
32 transition(":enter", [style({ height: 0 }), animate(100)]),
33 transition(":leave", [
34 style({ height: "*" }),
35 animate(100, style({ height: 0 })),
40 export class TypedPolicyEditorComponent implements OnInit {
41 jsonFormOptions: any = {
42 addSubmit: false, // Add a submit button if layout does not have one
43 debug: false, // Don't show inline debugging information
44 loadExternalAssets: false, // Load external css and JavaScript for frameworks
45 returnEmptyFields: false, // Don't return values for empty input fields
46 setSchemaDefaults: true, // Always use schema defaults for empty fields
47 defautWidgetOptions: { feedback: true }, // Show inline feedback icons
50 @Input() jsonSchemaObject: any = {};
51 @Input() jsonObject: any = {};
52 @Input() darkMode: boolean;
59 liveFormData: any = {};
60 formIsValid: boolean = false;
61 formValidationErrors: any;
67 public onChanges(formData: any) {
68 this.liveFormData = formData;
71 get prettyLiveFormData(): string {
72 return JSON.stringify(this.liveFormData, null, 2);
75 get schemaAsString(): string {
76 return JSON.stringify(this.jsonSchemaObject, null, 2);
79 get jsonAsString(): string {
80 return JSON.stringify(this.jsonObject, null, 2);
83 isValid(isValid: boolean): void {
84 this.formIsValid = isValid;
87 validationErrors(validationErrors: any): void {
88 this.formValidationErrors = validationErrors;
91 get prettyValidationErrors() {
92 if (!this.formValidationErrors) {
95 const errorArray = [];
96 for (const error of this.formValidationErrors) {
97 const message = error.message;
98 const dataPathArray = JsonPointer.parse(error.dataPath);
99 if (dataPathArray.length) {
100 let field = dataPathArray[0];
101 for (let i = 1; i < dataPathArray.length; i++) {
102 const key = dataPathArray[i];
103 field += /^\d+$/.test(key) ? `[${key}]` : `.${key}`;
105 errorArray.push(`${field}: ${message}`);
107 errorArray.push(message);
110 return errorArray.join("<br>");
113 public toggleVisible(item: string) {
114 this.isVisible[item] = !this.isVisible[item];