ngx-xml-message
Version:
This form is used to design Angular Reactive Form using any given XML. The primary use of this Readonly UI library is to design ISO 20022 XML messages in forms dynamically.
1 lines • 18.1 kB
Source Map (JSON)
{"version":3,"file":"ngx-xml-message.mjs","sources":["../../../projects/ngx-xml-message/src/lib/ngx-xml-message.component.ts","../../../projects/ngx-xml-message/src/lib/ngx-xml-message.component.html","../../../projects/ngx-xml-message/src/lib/ngx-xml-message.module.ts","../../../projects/ngx-xml-message/src/public-api.ts","../../../projects/ngx-xml-message/src/ngx-xml-message.ts"],"sourcesContent":["import { Component, Input, SimpleChanges } from '@angular/core';\r\nimport { XmlMessageConfig } from './Model/Config';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { MatButtonModule } from '@angular/material/button';\r\n\r\n@Component({\r\n selector: 'ngx-xml-message',\r\n templateUrl: './ngx-xml-message.component.html',\r\n styleUrls: ['./ngx-xml-message.component.scss'],\r\n standalone: false\r\n})\r\nexport class NgxXmlMessageComponent {\r\n @Input({ required: true }) xmlMessage: string;\r\n @Input() config: XmlMessageConfig;\r\n protected namespace: any = {};\r\n protected jsonMessage: any;\r\n protected documentName: string;\r\n constructor() {\r\n }\r\n\r\n public ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['xmlMessage'] && changes['xmlMessage'].currentValue) {\r\n this.namespace = {};\r\n const parser: DOMParser = new DOMParser();\r\n const xmlDoc = parser.parseFromString(this.xmlMessage, 'text/xml');\r\n const document = this.parseXML(xmlDoc.childNodes[0]);\r\n \r\n if (document) {\r\n this.jsonMessage = document;\r\n }else{\r\n this.jsonMessage = [];\r\n }\r\n \r\n }\r\n }\r\n\r\n protected isArray(myKey: Object | Array<any>): boolean {\r\n if (myKey instanceof Array) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected isObject(object: Object | Array<any>): boolean {\r\n if (!(object instanceof Array) && object instanceof Object) {\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n protected getKeys(object: Object): string[] {\r\n if (object) {\r\n return Object.keys(object);\r\n }\r\n return [];\r\n }\r\n\r\n protected getKeyName(object: Object): string {\r\n if (object) {\r\n return Object.keys(object)[0];\r\n }\r\n return '';\r\n }\r\n\r\n protected copyToClipboard(value: string){\r\n navigator.clipboard.writeText(value);\r\n }\r\n \r\n private parseXML(node: any) {\r\n if (node.nodeType === Node.ELEMENT_NODE) {\r\n const obj: Record<string, any> = {};\r\n obj[node.nodeName] = {};\r\n\r\n if (node.hasChildNodes()) {\r\n for (let childNode of Array.from(node.childNodes) as any) {\r\n const childObj = this.parseXML(childNode);\r\n if (typeof childObj === 'object' && childNode.nodeType !== Node.TEXT_NODE && Object.keys(childObj).length > 0) {\r\n if (obj[node.nodeName][childNode.nodeName]) {\r\n obj[node.nodeName][childNode.nodeName] = [structuredClone(obj[node.nodeName][childNode.nodeName])];\r\n obj[node.nodeName][childNode.nodeName].push(childObj[childNode.nodeName]);\r\n } else {\r\n obj[node.nodeName][childNode.nodeName] = {};\r\n obj[node.nodeName][childNode.nodeName] = childObj[childNode.nodeName];\r\n }\r\n } else if (childObj && node.attributes && node.attributes.length) {\r\n obj[node.nodeName] = { value: childObj };\r\n } else if (childObj && Object.keys(childObj).length > 0) {\r\n obj[node.nodeName] = childObj;\r\n }\r\n }\r\n }\r\n\r\n if (node.attributes && node.attributes.length > 0) {\r\n for (const attribute of Array.from(node.attributes) as any) {\r\n if (attribute.nodeName === 'xmlns')\r\n {\r\n this.namespace[node.nodeName] = attribute.nodeValue;\r\n }\r\n else\r\n {\r\n if (![node.nodeName]['_attributes'])\r\n {\r\n obj[node.nodeName]['_attributes'] = {};\r\n }\r\n obj[node.nodeName]['_attributes'][attribute.nodeName] = attribute.nodeValue;\r\n }\r\n }\r\n }\r\n\r\n return obj;\r\n } else if (node.nodeType === Node.TEXT_NODE || node.nodeType === Node.CDATA_SECTION_NODE) {\r\n return node.nodeValue.trim();\r\n }\r\n\r\n return {};\r\n }\r\n}\r\n","<form *ngIf=\"jsonMessage\">\r\n <div class=\"form-group\">\r\n <ng-template #nodeTemplateRef let-node=\"node\" let-index=\"index\" let-key=\"key\">\r\n <ng-container *ngIf=\"isArray(node) then arr else obj\"></ng-container>\r\n <ng-template #arr>\r\n <ng-template *ngFor=\"let model of node;let i = index\" [ngTemplateOutlet]=\"nodeTemplateRef\"\r\n [ngTemplateOutletContext]=\"{\r\n node: model,\r\n key: key,\r\n }\">\r\n </ng-template>\r\n </ng-template>\r\n <ng-template #obj>\r\n <ng-container *ngIf=\"isObject(node)\">\r\n <mat-accordion>\r\n <mat-expansion-panel multi [expanded]=\"true\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n {{namespace[key] && config.showNamespace ? key + ' - ' + namespace[key] : key | translate}}\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <ng-container>\r\n <div *ngIf=\"node._attributes === undefined\">\r\n <ng-template *ngFor=\"let key of getKeys(node);let i = index\"\r\n [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: node[key],\r\n key: key\r\n }\">\r\n </ng-template>\r\n </div>\r\n <div *ngIf=\"node._attributes !== undefined\">\r\n <mat-form-field class=\"form-control form-control-s\"\r\n *ngFor=\"let attr of getKeys(node._attributes)\">\r\n <mat-label>{{ attr | translate }}</mat-label>\r\n <input matInput [readonly]=\"true\" value=\"{{node._attributes[attr]}}\">\r\n <button *ngIf=\"config.showCopy\" mat-icon-button matSuffix (click)=\"copyToClipboard(node._attributes[attr])\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n <mat-form-field class=\"form-control form-control-m\">\r\n <mat-label>{{ node.value | translate }}</mat-label>\r\n <input matInput [readonly]=\"true\" value=\"{{node.value}}\">\r\n <button *ngIf=\"config.showCopy\" mat-icon-button matSuffix (click)=\"copyToClipboard(node.value)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </div>\r\n </ng-container>\r\n\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </ng-container>\r\n <ng-container *ngIf=\"!isObject(node)\">\r\n <mat-form-field *ngIf=\"node && node.length <= 70\" class=\"form-control {{node && node.length > 70 ? 'form-control-l': 'form-control-m'}}\">\r\n <mat-label>{{ key | translate }}</mat-label>\r\n <input matInput [readonly]=\"true\" value=\"{{node}}\">\r\n <button *ngIf=\"config.showCopy\" mat-icon-button matSuffix (click)=\"copyToClipboard(node)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n <mat-form-field *ngIf=\"node && node.length > 70\" class=\"form-control form-control-full\">\r\n <mat-label>{{ key | translate }}</mat-label>\r\n <textarea matInput [readonly]=\"true\">{{node}}</textarea>\r\n <button *ngIf=\"config.showCopy\" mat-icon-button matSuffix (click)=\"copyToClipboard(node)\">\r\n <mat-icon>content_copy</mat-icon>\r\n </button>\r\n </mat-form-field>\r\n </ng-container>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <ng-container>\r\n <ng-template *ngFor=\"let key of getKeys(jsonMessage);\"\r\n [ngTemplateOutlet]=\"nodeTemplateRef\" [ngTemplateOutletContext]=\"{\r\n node: jsonMessage[key],\r\n key: key\r\n }\">\r\n </ng-template>\r\n </ng-container>\r\n </div>\r\n</form>","import { NgModule } from '@angular/core';\nimport { NgxXmlMessageComponent } from './ngx-xml-message.component';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { MatButtonModule } from '@angular/material/button';\n\n\n@NgModule({\n declarations:[\n NgxXmlMessageComponent\n ],\n imports: [\n BrowserModule,\n BrowserAnimationsModule,\n MatIconModule,\n TranslateModule,\n FormsModule,\n ReactiveFormsModule,\n MatExpansionModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule\n ],\n exports:[NgxXmlMessageComponent]\n})\nexport class NgxXmlMessageModule { }\n","/*\n * Public API Surface of ngx-xml-message\n */\n\nexport * from './lib/ngx-xml-message.component';\nexport * from './lib/ngx-xml-message.module';\nexport * from './lib/Model/Config'","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}