1 import {Component, Input, Output, EventEmitter, OnInit} from '@angular/core';
2 import {IdlObject} from '@eg/core/idl.service';
3 import {OrgService} from '@eg/core/org.service';
4 import {AuthService} from '@eg/core/auth.service';
5 import {SimpleReporterService} from './simple-reporter.service';
8 selector: 'eg-sr-field',
9 templateUrl: './sr-field.component.html',
10 styleUrls: ['./sr-field.component.css'],
12 export class SRFieldComponent implements OnInit {
17 linkedIdlBaseQuery = {};
19 @Input() field: IdlObject = null;
20 @Output() fieldChange = new EventEmitter<IdlObject>();
21 @Input() withAlias = false;
22 @Input() editAlias = true;
23 @Input() withTransforms = false;
24 @Input() withOperators = false;
25 @Input() withValueInput = false;
26 @Input() withSelect = false;
27 @Input() withDeselect = false;
28 @Input() withSortDirection = false;
29 @Output() selectEvent = new EventEmitter();
30 @Output() deselectEvent = new EventEmitter();
31 @Input() selected = false;
32 @Input() withUpDown = false;
33 @Output() upEvent = new EventEmitter();
34 @Output() downEvent = new EventEmitter();
35 @Input() disableUp = false;
36 @Input() disableDown = false;
39 private org: OrgService,
40 private auth: AuthService,
41 private srSvc: SimpleReporterService
47 if ( this.withTransforms ) {
48 this.transforms = this.srSvc.getTransformsForDatatype(this.field.datatype);
51 if ( this.withOperators ) {
52 this.operators = this.srSvc.getOperatorsForDatatype(this.field.datatype);
55 this.wsContextOrgs = this.org.fullPath(this.auth.user().ws_ou(), true);
56 if (this.field.org_filter_field) {
57 this.linkedIdlBaseQuery[this.field.org_filter_field] = this.wsContextOrgs;
62 this.field.filter_value = this.field.operator.arity > 1 ? [] : null;
63 delete this.field._org_family_includeAncestors;
64 delete this.field._org_family_includeDescendants;
65 delete this.field._org_family_primaryOrgId;
68 operatorChange($event) {
69 const new_op = this.srSvc.getOperatorByName($event.target.value);
70 if (new_op.arity !== this.field.operator.arity) { // param count of the old and new ops are different
71 this.field.operator = new_op;
72 this.clearFilterValue(); // clear the filter value
74 this.field.operator = new_op;
76 this.fieldChange.emit(this.field);
79 transformChange($event) {
80 const new_transform = this.srSvc.getTransformByName($event.target.value);
82 if (new_transform.final_datatype) { // new has a final_datatype
83 if (this.field.transform.final_datatype) { // and so does old
84 if (new_transform.final_datatype !== this.field.transform.final_datatype) { // and they're different
85 this.clearFilterValue(); // clear
87 } else if (new_transform.final_datatype !== this.field.datatype) { // old does not, and base is different from new
88 this.clearFilterValue(); // clear
90 } else if (this.field.transform.final_datatype) {// old has a final_datatype, new doesn't
91 if (this.field.transform.final_datatype !== this.field.datatype) { // and it's different from the base type
92 this.clearFilterValue(); // clear
96 this.field.transform = new_transform;
97 if (new_transform.final_datatype) {
98 this.operators = this.srSvc.getOperatorsForDatatype(new_transform.final_datatype);
100 this.operators = this.srSvc.getOperatorsForDatatype(this.field.datatype);
103 this.selectEvent.emit();
104 this.fieldChange.emit(this.field);
107 firstBetweenValue($event) {
108 if (!Array.isArray(this.field.filter_value)) {
109 this.field.filter_value = [];
111 this.field.filter_value[0] = $event;
112 this.fieldChange.emit(this.field);
115 secondBetweenValue($event) {
116 if (!Array.isArray(this.field.filter_value)) {
117 this.field.filter_value = [];
119 this.field.filter_value[1] = $event;
120 this.fieldChange.emit(this.field);
123 setSingleValue($event) {
124 if (Array.isArray(this.field.filter_value)) {
125 this.field.filter_value = null;
127 this.field.filter_value = $event;
128 this.fieldChange.emit(this.field);
131 getBracketListValue(list_value) {
133 if (Array.isArray(list_value)) {
134 list_value.forEach((v, i) => {
145 setOrgFamilyValue($event) {
146 this.field.filter_value = this.getBracketListValue($event.orgIds);
147 this.field._org_family_includeAncestors = $event.includeAncestors;
148 this.field._org_family_includeDescendants = $event.includeDescendants;
149 this.field._org_family_primaryOrgId = $event.primaryOrgId;
150 this.fieldChange.emit(this.field);
153 setBracketListValue($event) {
154 if (Array.isArray(this.field.filter_value)) {
155 this.field.filter_value = null;
158 valstr = valstr.replace(/^{/, '');
159 valstr = valstr.replace(/}$/, '');
160 const ids = valstr.split(',');
161 this.field.filter_value = [...ids];
162 this.fieldChange.emit(this.field);
165 directionChange($event) {
166 this.field['direction'] = $event.target.value;
167 this.fieldChange.emit(this.field);
171 this.selectEvent.emit();
175 this.deselectEvent.emit();
183 this.downEvent.emit();