3.0.0 • Published 8 months ago

ngx-iso-form v3.0.0

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
8 months ago

NgxIsoForm

This form is used to design Angular Reactive Form using any given JSON - XSD. The primary use of this UI library is to design ISO 20022 forms dynamically.

Features

  • 🔥 Automatic forms generation
  • 📝 Easy to extend with custom field types
  • ⚡️ Supports ISO 20022 schemas:
    • XSD - JSON Schema using XSDService nuget
    • Support all validation like required, pattern, minlength, maxlength
    • Support translation labels, errors and date formats.
  • 💪 Built on top of Angular Reactive Forms

Live Demo

StackBlitz Demo

NOTE

The library don't support direct execution of XSD and user need to convert XSD to JSON using xsd-json-converter npm package

How to consume

Add angular material v19

ng add @angular/material

Install npm package ngx-iso-form.

npm i ngx-iso-form

Import Module & SCSS

import { NgxIsoFormModule } from 'ngx-iso-form';
import { HttpClient, provideHttpClient } from '@angular/common/http';

@NgModule({
  ...
  imports: [
    ...
    NgxIsoFormModule
  ],
  provider:[provideHttpClient()]
  TranslateModule.forRoot({
      defaultLanguage: 'en',
      loader: {
        provide: TranslateLoader,
        useFactory: HttpLoaderFactory,
        deps: [HttpClient]
      }
    })
    ...
})

export function HttpLoaderFactory(http: HttpClient) {
  return new TranslateHttpLoader(http, '/i18n/', '.json');
}

Add style file to angular.json file

styles:[
     "node_modules/ngx-iso-form/lib/styles/index.scss"
]

View

New Option excludes

<ngx-iso-form #isoForm [schema]="schema" [form]="form" [excludes]="excludes"></ngx-iso-form>

**NOTE: excludes (optional) takes string[] and excludes all the mentioned Ids from the form. It will help you to minimize the form and include only the required fields for your business requirements.

Public APIs

  • model: Get the form data in the json format
  • invalid: Get the validation status of the form. true | false
@ViewChild('isoForm') isoForm: NgxIsoFormComponent;

get model():string {
    const data = this.isoForm.model;
    this.formData = JSON.stringify(data)
  }
get invalid():boolean {
  return this.isoForm.invalid;
}

Component

export class AppComponent implements OnInit {
    @ViewChild('isoForm') isoForm: NgxIsoFormComponent;

    form: IsoForm;
    schema: SchemaElement;
    // exclude the MsgId field from loading
    excludes:['Document_BkToCstmrStmt_GrpHdr_MsgId']
    
    this.httpClient.get(sample).subscribe((data) => {
      this.schema = data as SchemaElement
    });

    this.httpClient.get(sampleLoad).subscribe((model) => {
      this.form = new IsoForm(model)
    });

    //To get the form object
    get model():string {
      const data = this.isoForm.model;
      this.formData = JSON.stringify(data)
    }

  //To get the form validation status
    get invalid():boolean {
      return this.isoForm.invalid;
    }

}

Supported JSON Schema

export interface SchemaElement {
  id: string;
  name: string;
  dataType: string;
  minOccurs: string;
  maxOccurs: string;
  minLength: string;
  maxLength: string;
  pattern: string;
  fractionDigits: string;
  totalDigits: string;
  minInclusive: string;
  maxInclusive: string;
  values: string[];
  isCurrency: boolean;
  xpath: string;
  expanded: boolean;
  elements: SchemaElement[];
}

Translation Support

It support name and id properties of the SchemaElement Please declare all your translation rules under 'iso' object.

{
  "iso": {
    "BkToCstmrStmt": {
      "label": "Bank To Customer Statement"
    },
    "GrpHdr": {
      "label": "Group Header"
    },
    "Document_BkToCstmrStmt_GrpHdr_CreDtTm": {
      "label": "Create Datetime",
      "general": {
        "format": "YYYY-MM-DDThh:mm:ss.sss+/-"
      },
      "error": {
        "required": "This field is required"
      }
    }
  }
}

Convert XSD to JSON

Global (For CLI)

    npm install -g xsd-json-converter

Local (For SCRIPT)

    npm install xsd-json-converter

CLI

xjc <source-path> <output-path>

Example

Linux
xjc /mnt/c/source/xsd/camt.053.001.10.xsd /mnt/c/source/xsd/camt.053.json
Windows
xjc C:/source/xsd/camt.053.001.10.xsd C:/source/xsd/camt.053.json

Script

JavaScript

const xsd = require("xsd-json-converter").default;

xsd
  .convert("./camt.053.001.10.xsd")
  .then((output) => console.log(output))
  .catch((error) => console.error(error));

TypeScript

import xsd from "xsd-json-converter";

xsd
  .convert("./camt.053.001.10.xsd")
  .then((output) => console.log(output))
  .catch((error) => console.error(error));

NOTE: For script please install the package locally

3.0.0

8 months ago

2.3.0

10 months ago

2.3.2

10 months ago

2.3.1

10 months ago

2.3.3

10 months ago

2.2.1

1 year ago

2.1.2

1 year ago

2.2.0

1 year ago

2.1.1

1 year ago

2.2.2

12 months ago

2.1.3

1 year ago

2.1.0

1 year ago

2.0.1

1 year ago

2.0.0

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.0

2 years ago