2017-11-23 11:40:02 +01:00
|
|
|
import { VisibilityRule } from './models/VisibilityRule';
|
|
|
|
import { VisibilityRulesContext } from './models/VisibilityRulesContext';
|
|
|
|
import { FormGroup } from '@angular/forms';
|
|
|
|
import { Injectable } from '@angular/core';
|
|
|
|
import { Rule } from '../models/Rule'
|
|
|
|
@Injectable()
|
|
|
|
export class VisibilityRulesService {
|
|
|
|
|
|
|
|
public formGroup: FormGroup;
|
|
|
|
public visibilityRuleContext: VisibilityRulesContext;
|
2017-11-23 12:26:22 +01:00
|
|
|
public fieldsPathMemory: any = {};
|
|
|
|
public isElementVisible(pathKey: string, id: string) {
|
|
|
|
if (!this.fieldsPathMemory[id]) this.fieldsPathMemory[id] = pathKey;
|
2017-11-23 11:40:02 +01:00
|
|
|
let visibilityRule = this.visibilityRuleContext.getRulesFromKey(id);
|
2017-11-23 12:26:22 +01:00
|
|
|
if (!visibilityRule) return true;
|
2017-11-23 11:40:02 +01:00
|
|
|
return this.checkElementVisibility(visibilityRule);
|
|
|
|
}
|
|
|
|
|
|
|
|
public checkElementVisibility(visibilityRule: VisibilityRule): boolean {
|
|
|
|
let sourceVisibilityRules = visibilityRule.sourceVisibilityRules;
|
|
|
|
for (let i = 0; i < sourceVisibilityRules.length; i++) {
|
|
|
|
let sourceVisibilityRule = sourceVisibilityRules[i];
|
2017-11-23 12:26:22 +01:00
|
|
|
if (!this.formGroup.get( this.fieldsPathMemory[sourceVisibilityRule.sourceControlId] + '.value')||
|
|
|
|
(sourceVisibilityRule.sourceControlValue != this.formGroup.get( this.fieldsPathMemory[sourceVisibilityRule.sourceControlId] + '.value').value)) return false;
|
2017-11-23 11:40:02 +01:00
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
public buildVisibilityRules(item: Array<Rule>) {
|
|
|
|
this.visibilityRuleContext = new VisibilityRulesContext();
|
|
|
|
this.visibilityRuleContext.buildVisibilityRuleContext(item);
|
|
|
|
}
|
|
|
|
|
2017-11-23 12:26:22 +01:00
|
|
|
private getParentPath(parentId: string): string {
|
2017-11-23 11:40:02 +01:00
|
|
|
return '';
|
|
|
|
}
|
|
|
|
}
|