dynamic style and class from xml

This commit is contained in:
annampak 2017-10-06 17:33:08 +03:00
parent eefe053701
commit 8c44b7c128
6 changed files with 42 additions and 17 deletions

View File

@ -1,4 +1,4 @@
<div [formGroup]="form" class="form-group"> <div [formGroup]="form" [ngStyle] = "customStyle" [class]="classFromJson" >
<h4 [id]= "group.key">{{group.title}}</h4> <h4 [id]= "group.key">{{group.title}}</h4>
<div *ngFor="let field of group.groupFields" > <div *ngFor="let field of group.groupFields" >
<df-field [field]="field" [form]="form" [dataModel] = "dataModel"></df-field> <df-field [field]="field" [form]="form" [dataModel] = "dataModel"></df-field>
@ -6,4 +6,4 @@
</div> </div>
<!-- class = "form-group" [class]="customStyle" [ngStyle] = "customStyle"-->

View File

@ -1,6 +1,6 @@
import { DataModel } from '../../entities/DataModel'; import { DataModel } from '../../entities/DataModel';
import { GroupBase } from './group-base'; import { GroupBase } from './group-base';
import { Component,Input, OnInit } from '@angular/core'; import { Component, Input, OnInit } from '@angular/core';
import { FormGroup, Validators } from '@angular/forms'; import { FormGroup, Validators } from '@angular/forms';
import { NgForm } from '@angular/forms'; import { NgForm } from '@angular/forms';
@ -15,20 +15,31 @@ export class DynamicFormGroupComponent implements OnInit {
@Input() dataModel: DataModel; @Input() dataModel: DataModel;
@Input() group: GroupBase<any>; @Input() group: GroupBase<any>;
@Input() form: FormGroup; @Input() form: FormGroup;
@Input() customStyle: {};
@Input() classFromJson: string ;
constructor() { constructor() {
} }
ngOnInit() { ngOnInit() {
let st = this.group.style == "any" ? "" : this.group.style;
this.classFromJson = this.group.class == "" ? "" : this.group.class;
this.customStyle = {};
if (st != "") {
} st.replace(/"/g, '\\"');
var attributes = st.split(';');
for (var i = 0; i < attributes.length; i++) {
var entry = attributes[i].split(':');
entry[1].replace(/["]/g, " ");
//this.customStyle[entry[0]] = '2px solid #c1baba';
var a = entry[0];
this.customStyle[a] = entry[1];
}
}
}
} }

View File

@ -10,7 +10,9 @@ export class GroupBase<T>{
order:number; order:number;
controlType:string; controlType:string;
section:string; section:string;
style:string;
class: string;
constructor(options: { constructor(options: {
value?: T, value?: T,
key?: string, key?: string,
@ -20,7 +22,9 @@ export class GroupBase<T>{
visible?: boolean, visible?: boolean,
order?: number, order?: number,
controlType?: string controlType?: string
section?: string section?: string,
style?:string
class?:string
} = {}) { } = {}) {
this.value = options.value; this.value = options.value;
this.key = options.key || ''; this.key = options.key || '';
@ -31,5 +35,7 @@ export class GroupBase<T>{
this.order = options.order === undefined ? 1 : options.order; this.order = options.order === undefined ? 1 : options.order;
this.controlType = options.controlType || ''; this.controlType = options.controlType || '';
this.section = options.section || ''; this.section = options.section || '';
this.style = options.style || '';
this.class = options.class || '';
} }
} }

View File

@ -128,7 +128,9 @@ export class DynamicFormFieldComponent {
} }
}); });
this.form.controls[field].setValidators(arrayVal); this.form.controls[field].setValidators(arrayVal); //Multiple Validators, Usage of array because setValidator override any validators that are provided during initialistaion
} }
} }

View File

@ -135,6 +135,8 @@ export class dataModelBuilder {
newfldGroup.title = fieldGroup.title.__cdata; newfldGroup.title = fieldGroup.title.__cdata;
newfldGroup.key = fieldGroup._id; newfldGroup.key = fieldGroup._id;
newfldGroup.section = fieldGroup._section; newfldGroup.section = fieldGroup._section;
newfldGroup.style = fieldGroup.visible._style;
newfldGroup.class = fieldGroup.visible._cssclass;
groups.push(newfldGroup) groups.push(newfldGroup)
}); });
} }

View File

@ -61,4 +61,8 @@ body {
.form-control.ng-invalid { .form-control.ng-invalid {
border-left: 5px solid #a94442; /* red */ border-left: 5px solid #a94442; /* red */
} }
.form-groupCustom {
border: 2px solid #A11515;
}