survery-lib 0.1.11 → 0.1.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/assets/style.css.map +1 -1
  2. package/esm2022/lib/components/question-boolean-template/question-boolean-template.component.mjs +99 -0
  3. package/esm2022/lib/components/question-check-box-template/question-check-box-template.component.mjs +110 -0
  4. package/esm2022/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.mjs +95 -0
  5. package/esm2022/lib/components/question-dropdown-template/question-dropdown-template.component.mjs +83 -0
  6. package/esm2022/lib/components/question-matrix-template/question-matrix-template.component.mjs +101 -0
  7. package/esm2022/lib/components/question-radio-button-template/question-radio-button-template.component.mjs +99 -0
  8. package/esm2022/lib/components/question-text-template/question-text-template.component.mjs +99 -0
  9. package/esm2022/lib/pipes/default-question-answer.pipe.mjs +19 -0
  10. package/esm2022/lib/pipes/default-question-answers.pipe.mjs +19 -0
  11. package/esm2022/lib/pipes/filter-question.pipe.mjs +16 -0
  12. package/esm2022/lib/services/survey-lib.service.mjs +30 -0
  13. package/esm2022/lib/survery-lib.component.mjs +302 -0
  14. package/esm2022/lib/survery-lib.module.mjs +63 -0
  15. package/esm2022/lib/usecases/base/use-case.mjs +2 -0
  16. package/esm2022/lib/usecases/check-rule-exps.usecase.mjs +154 -0
  17. package/esm2022/public-api.mjs +8 -0
  18. package/esm2022/shared/dtos/default-question-answers.dto.mjs +3 -0
  19. package/esm2022/shared/dtos/rule-exp-answer.dto.mjs +2 -0
  20. package/esm2022/shared/dtos/rule-exp.dto.mjs +2 -0
  21. package/esm2022/shared/dtos/rule-result-question.dto.mjs +2 -0
  22. package/esm2022/shared/dtos/survey-answer.dto.mjs +2 -0
  23. package/esm2022/shared/dtos/survey-answers-subject.dto.mjs +3 -0
  24. package/esm2022/shared/dtos/survey-page.dto.mjs +2 -0
  25. package/esm2022/shared/dtos/survey-question-group.dto.mjs +2 -0
  26. package/esm2022/shared/dtos/survey-question.dto.mjs +2 -0
  27. package/esm2022/shared/dtos/survey-rule.dto.mjs +2 -0
  28. package/esm2022/shared/dtos/survey-sub-question.dto.mjs +2 -0
  29. package/esm2022/shared/dtos/survey.dto.mjs +2 -0
  30. package/esm2022/shared/enums/Logic-Property.enum.mjs +14 -0
  31. package/esm2022/shared/enums/logic-action.enum.mjs +9 -0
  32. package/esm2022/shared/enums/operator.enum.mjs +6 -0
  33. package/esm2022/shared/enums/question-type.enum.mjs +11 -0
  34. package/esm2022/shared/form-interfaces/question-boolean-template.form-interface.mjs +2 -0
  35. package/esm2022/shared/form-interfaces/question-check-box-template.form-interface.mjs +3 -0
  36. package/esm2022/shared/form-interfaces/question-dropdown-multi-template.form-interface.mjs +3 -0
  37. package/esm2022/shared/form-interfaces/question-dropdown-template.form-interface.mjs +3 -0
  38. package/esm2022/shared/form-interfaces/question-matrix-template.form-interface.mjs +2 -0
  39. package/esm2022/shared/form-interfaces/question-radio-button-template.form-interface.mjs +3 -0
  40. package/esm2022/shared/form-interfaces/question-text-template.form-interface.mjs +2 -0
  41. package/esm2022/shared/form-interfaces/survery-lib.form-interface.mjs +2 -0
  42. package/esm2022/shared/models/question-answer.model.mjs +3 -0
  43. package/esm2022/shared/models/survery-question-result.model.mjs +3 -0
  44. package/esm2022/survery-lib.mjs +5 -0
  45. package/fesm2022/survery-lib.mjs +1240 -0
  46. package/fesm2022/survery-lib.mjs.map +1 -0
  47. package/index.d.ts +5 -0
  48. package/lib/components/question-boolean-template/question-boolean-template.component.d.ts +36 -0
  49. package/lib/components/question-check-box-template/question-check-box-template.component.d.ts +37 -0
  50. package/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.d.ts +35 -0
  51. package/lib/components/question-dropdown-template/question-dropdown-template.component.d.ts +33 -0
  52. package/lib/components/question-matrix-template/question-matrix-template.component.d.ts +33 -0
  53. package/lib/components/question-radio-button-template/question-radio-button-template.component.d.ts +36 -0
  54. package/lib/components/question-text-template/question-text-template.component.d.ts +35 -0
  55. package/lib/pipes/default-question-answer.pipe.d.ts +8 -0
  56. package/lib/pipes/default-question-answers.pipe.d.ts +8 -0
  57. package/lib/pipes/filter-question.pipe.d.ts +9 -0
  58. package/lib/services/survey-lib.service.d.ts +14 -0
  59. package/lib/survery-lib.component.d.ts +49 -0
  60. package/lib/survery-lib.module.d.ts +24 -0
  61. package/{src/lib/usecases/base/use-case.ts → lib/usecases/base/use-case.d.ts} +7 -9
  62. package/lib/usecases/check-rule-exps.usecase.d.ts +21 -0
  63. package/package.json +28 -15
  64. package/{src/public-api.ts → public-api.d.ts} +1 -5
  65. package/shared/dtos/default-question-answers.dto.d.ts +9 -0
  66. package/{src/shared/dtos/rule-exp-answer.dto.ts → shared/dtos/rule-exp-answer.dto.d.ts} +5 -5
  67. package/{src/shared/dtos/rule-exp.dto.ts → shared/dtos/rule-exp.dto.d.ts} +13 -14
  68. package/{src/shared/dtos/rule-result-question.dto.ts → shared/dtos/rule-result-question.dto.d.ts} +4 -5
  69. package/{src/shared/dtos/survey-answer.dto.ts → shared/dtos/survey-answer.dto.d.ts} +16 -16
  70. package/{src/shared/dtos/survey-answers-subject.dto.ts → shared/dtos/survey-answers-subject.dto.d.ts} +5 -6
  71. package/{src/shared/dtos/survey-page.dto.ts → shared/dtos/survey-page.dto.d.ts} +9 -10
  72. package/{src/shared/dtos/survey-question-group.dto.ts → shared/dtos/survey-question-group.dto.d.ts} +8 -9
  73. package/{src/shared/dtos/survey-question.dto.ts → shared/dtos/survey-question.dto.d.ts} +18 -19
  74. package/{src/shared/dtos/survey-rule.dto.ts → shared/dtos/survey-rule.dto.d.ts} +10 -11
  75. package/{src/shared/dtos/survey-sub-question.dto.ts → shared/dtos/survey-sub-question.dto.d.ts} +9 -9
  76. package/{src/shared/dtos/survey.dto.ts → shared/dtos/survey.dto.d.ts} +16 -17
  77. package/shared/enums/Logic-Property.enum.d.ts +12 -0
  78. package/{src/shared/enums/logic-action.enum.ts → shared/enums/logic-action.enum.d.ts} +7 -7
  79. package/shared/enums/operator.enum.d.ts +4 -0
  80. package/{src/shared/enums/question-type.enum.ts → shared/enums/question-type.enum.d.ts} +9 -9
  81. package/shared/form-interfaces/question-boolean-template.form-interface.d.ts +15 -0
  82. package/shared/form-interfaces/question-check-box-template.form-interface.d.ts +15 -0
  83. package/shared/form-interfaces/question-dropdown-multi-template.form-interface.d.ts +15 -0
  84. package/shared/form-interfaces/question-dropdown-template.form-interface.d.ts +9 -0
  85. package/{src/shared/form-interfaces/question-matrix-template.form-interface.ts → shared/form-interfaces/question-matrix-template.form-interface.d.ts} +11 -13
  86. package/shared/form-interfaces/question-radio-button-template.form-interface.d.ts +15 -0
  87. package/shared/form-interfaces/question-text-template.form-interface.d.ts +10 -0
  88. package/shared/form-interfaces/survery-lib.form-interface.d.ts +24 -0
  89. package/shared/models/question-answer.model.d.ts +6 -0
  90. package/shared/models/survery-question-result.model.d.ts +8 -0
  91. package/ng-package.json +0 -11
  92. package/scss/style.scss +0 -88
  93. package/src/lib/components/question-boolean-template/question-boolean-template.component.html +0 -13
  94. package/src/lib/components/question-boolean-template/question-boolean-template.component.scss +0 -0
  95. package/src/lib/components/question-boolean-template/question-boolean-template.component.spec.ts +0 -21
  96. package/src/lib/components/question-boolean-template/question-boolean-template.component.ts +0 -109
  97. package/src/lib/components/question-check-box-template/question-check-box-template.component.html +0 -13
  98. package/src/lib/components/question-check-box-template/question-check-box-template.component.scss +0 -0
  99. package/src/lib/components/question-check-box-template/question-check-box-template.component.spec.ts +0 -21
  100. package/src/lib/components/question-check-box-template/question-check-box-template.component.ts +0 -124
  101. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.html +0 -10
  102. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.scss +0 -3
  103. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.spec.ts +0 -21
  104. package/src/lib/components/question-dropdown-multi-template/question-dropdown-multi-template.component.ts +0 -100
  105. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.html +0 -10
  106. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.scss +0 -0
  107. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.spec.ts +0 -21
  108. package/src/lib/components/question-dropdown-template/question-dropdown-template.component.ts +0 -87
  109. package/src/lib/components/question-matrix-template/question-matrix-template.component.html +0 -36
  110. package/src/lib/components/question-matrix-template/question-matrix-template.component.scss +0 -0
  111. package/src/lib/components/question-matrix-template/question-matrix-template.component.spec.ts +0 -21
  112. package/src/lib/components/question-matrix-template/question-matrix-template.component.ts +0 -110
  113. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.html +0 -13
  114. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.scss +0 -0
  115. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.spec.ts +0 -21
  116. package/src/lib/components/question-radio-button-template/question-radio-button-template.component.ts +0 -111
  117. package/src/lib/components/question-text-template/question-text-template.component.html +0 -13
  118. package/src/lib/components/question-text-template/question-text-template.component.scss +0 -0
  119. package/src/lib/components/question-text-template/question-text-template.component.spec.ts +0 -21
  120. package/src/lib/components/question-text-template/question-text-template.component.ts +0 -105
  121. package/src/lib/pipes/default-question-answer.pipe.spec.ts +0 -8
  122. package/src/lib/pipes/default-question-answer.pipe.ts +0 -18
  123. package/src/lib/pipes/default-question-answers.pipe.spec.ts +0 -8
  124. package/src/lib/pipes/default-question-answers.pipe.ts +0 -17
  125. package/src/lib/pipes/filter-question.pipe.spec.ts +0 -8
  126. package/src/lib/pipes/filter-question.pipe.ts +0 -14
  127. package/src/lib/services/survey-lib.service.spec.ts +0 -16
  128. package/src/lib/services/survey-lib.service.ts +0 -31
  129. package/src/lib/survery-lib.component.spec.ts +0 -21
  130. package/src/lib/survery-lib.component.ts +0 -308
  131. package/src/lib/survery-lib.module.ts +0 -47
  132. package/src/lib/survey-lib.component.html +0 -67
  133. package/src/lib/survey-lib.component.scss +0 -4
  134. package/src/lib/usecases/check-rule-exps.usecase.ts +0 -188
  135. package/src/shared/dtos/default-question-answers.dto.ts +0 -10
  136. package/src/shared/enums/logic-property.enum.ts +0 -12
  137. package/src/shared/enums/operator.enum.ts +0 -4
  138. package/src/shared/form-interfaces/question-boolean-template.form-interface.ts +0 -17
  139. package/src/shared/form-interfaces/question-check-box-template.form-interface.ts +0 -18
  140. package/src/shared/form-interfaces/question-dropdown-multi-template.form-interface.ts +0 -17
  141. package/src/shared/form-interfaces/question-dropdown-template.form-interface.ts +0 -10
  142. package/src/shared/form-interfaces/question-radio-button-template.form-interface.ts +0 -17
  143. package/src/shared/form-interfaces/question-text-template.form-interface.ts +0 -11
  144. package/src/shared/form-interfaces/survery-lib.form-interface.ts +0 -27
  145. package/src/shared/models/question-answer.model.ts +0 -6
  146. package/src/shared/models/survery-question-result.model.ts +0 -8
  147. package/tsconfig.lib.json +0 -14
  148. package/tsconfig.lib.prod.json +0 -10
  149. package/tsconfig.spec.json +0 -14
@@ -1,31 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { BehaviorSubject, Subject } from 'rxjs';
3
- import { SurveyDto } from '../../shared/dtos/survey.dto';
4
- import { surveyAnswersSubjectDto } from '../../shared/dtos/survey-answers-subject.dto';
5
-
6
- @Injectable({
7
- providedIn: 'root'
8
- })
9
- export class SurveyLibService {
10
-
11
- private surveyDataSubject: Subject<SurveyDto> = new Subject<SurveyDto>();
12
- private surveyAnswersSubject: Subject<surveyAnswersSubjectDto> = new Subject<surveyAnswersSubjectDto>();
13
-
14
- get surveyDataObsrv() {
15
- return this.surveyDataSubject.asObservable();
16
- }
17
-
18
- get surveyAnswersObsrv() {
19
- return this.surveyAnswersSubject.asObservable();
20
- }
21
-
22
- constructor() { }
23
-
24
- setSurveyData(survey: SurveyDto) {
25
- this.surveyDataSubject.next(survey);
26
- }
27
-
28
- setsurveyAnswers(model: surveyAnswersSubjectDto) {
29
- this.surveyAnswersSubject.next(model);
30
- }
31
- }
@@ -1,21 +0,0 @@
1
- import { ComponentFixture, TestBed } from '@angular/core/testing';
2
-
3
- import { SurveryLibComponent } from './survery-lib.component';
4
-
5
- describe('SurveryLibComponent', () => {
6
- let component: SurveryLibComponent;
7
- let fixture: ComponentFixture<SurveryLibComponent>;
8
-
9
- beforeEach(() => {
10
- TestBed.configureTestingModule({
11
- declarations: [SurveryLibComponent]
12
- });
13
- fixture = TestBed.createComponent(SurveryLibComponent);
14
- component = fixture.componentInstance;
15
- fixture.detectChanges();
16
- });
17
-
18
- it('should create', () => {
19
- expect(component).toBeTruthy();
20
- });
21
- });
@@ -1,308 +0,0 @@
1
- import { Component, EventEmitter, OnInit, Output, QueryList, ViewChildren } from '@angular/core';
2
- import { SurveyLibService } from './services/survey-lib.service';
3
- import { SurveyDto } from '../shared/dtos/survey.dto';
4
- import { FormBuilder, FormGroup } from '@ng-stack/forms';
5
- import { QuestionChildOfSurveryLibFormInterface, RuleQuestionChildOfSurveryLibFormInterface, SurveryLibFormInterface } from '../shared/form-interfaces/survery-lib.form-interface';
6
- import { QuestionTypeEnum } from '../shared/enums/question-type.enum';
7
- import { v4 as guidGenerator } from 'uuid';
8
- import { QuestionAnswerModel } from '../shared/models/question-answer.model';
9
- import { Observable, of } from 'rxjs';
10
- import { LogicPropertyEnum } from '../shared/enums/Logic-Property.enum';
11
- import { RuleExpDto } from '../shared/dtos/rule-exp.dto';
12
- import { OperatorEnum } from '../shared/enums/operator.enum';
13
- import { LogicActionEnum } from '../shared/enums/logic-action.enum';
14
- import { CheckRuleExpsUsecase } from './usecases/check-rule-exps.usecase';
15
- import { SurveyQuestionResult } from '../shared/models/survery-question-result.model';
16
- import { DefaultQuestionAnswerDto } from '../shared/dtos/default-question-answers.dto';
17
- import { QuestionBooleanTemplateComponent } from './components/question-boolean-template/question-boolean-template.component';
18
- import { QuestionTextTemplateComponent } from './components/question-text-template/question-text-template.component';
19
- import { QuestionRadioButtonTemplateComponent } from './components/question-radio-button-template/question-radio-button-template.component';
20
- import { QuestionDropdownTemplateComponent } from './components/question-dropdown-template/question-dropdown-template.component';
21
- import { QuestionCheckBoxTemplateComponent } from './components/question-check-box-template/question-check-box-template.component';
22
- import { QuestionMatrixTemplateComponent } from './components/question-matrix-template/question-matrix-template.component';
23
- declare var $: any;
24
-
25
- @Component({
26
- selector: 'lib-survery-lib',
27
- templateUrl: './survey-lib.component.html',
28
- styleUrls: ['./survey-lib.component.scss']
29
- })
30
- export class SurveryLibComponent implements OnInit {
31
-
32
- reloadDefaultAnswerId = guidGenerator() as string;
33
- surveyData: SurveyDto;
34
- defaultAnswers: DefaultQuestionAnswerDto[];
35
- rForm: FormGroup<SurveryLibFormInterface>;
36
-
37
- get fCtrls() {
38
- return this.rForm.controls;
39
- }
40
-
41
- get questionTypeEnum() {
42
- return QuestionTypeEnum;
43
- }
44
-
45
- get isFirstPage() {
46
- return this.fCtrls.currentPageIndex.value == 0;
47
- }
48
-
49
- get isLastPage() {
50
- return this.fCtrls.currentPageIndex.value == (this.surveyData?.surveyPages.length - 1);
51
- }
52
-
53
- get surveyResult(): { answers: SurveyQuestionResult[], currentPageIndex: number } {
54
- return {
55
- currentPageIndex: this.fCtrls.currentPageIndex.value,
56
- answers:
57
- this.fCtrls.questionArray.value.filter(x => x.isMatrixGroup != true).map(x => {
58
- return {
59
- SurveyPageIndex: x.surveyPageIndex,
60
- QuestionId: x.questionId,
61
- QuestionType: x.questionType,
62
- AnswerId: x.answerId,
63
- AnswerText: x.answerText,
64
- AnswerIdArr: x.answerIdArr
65
- } as SurveyQuestionResult
66
- })
67
- }
68
- }
69
-
70
- @Output() surveyResultEmit = new EventEmitter<SurveyQuestionResult[]>();
71
-
72
- constructor(private _surveyLibService: SurveyLibService
73
- , private _formBuilder: FormBuilder, private _checkRuleExpsUsecase: CheckRuleExpsUsecase) {
74
-
75
- this.rForm = this._formBuilder.group<SurveryLibFormInterface>({
76
- currentPageIndex: [0],
77
- questionArray: this._formBuilder.array<QuestionChildOfSurveryLibFormInterface>([]),
78
- ruleQuestionArray: this._formBuilder.array<RuleQuestionChildOfSurveryLibFormInterface>([])
79
- });
80
- }
81
-
82
- ngOnInit(): void {
83
- this._surveyLibService.surveyDataObsrv.subscribe(survey => {
84
- this.fCtrls.questionArray.clear();
85
- this.fCtrls.ruleQuestionArray.clear();
86
- this.surveyData = null;
87
-
88
- if (survey != null) {
89
- this.surveyData = survey;
90
- this.loadQuestions(survey);
91
- }
92
- });
93
-
94
- this._surveyLibService.surveyAnswersObsrv.subscribe(value => {
95
- this.defaultAnswers = [];
96
-
97
- if (value != null) {
98
- this.defaultAnswers =[...value.defaultAnswers];
99
- this.fCtrls.currentPageIndex.setValue(value.currentpage);
100
- }
101
-
102
- console.log( this.reloadDefaultAnswerId);
103
- this.reloadDefaultAnswerId = guidGenerator() as string;
104
- console.log( this.reloadDefaultAnswerId);
105
- });
106
- }
107
-
108
- onPaggingNext() {
109
- var isHaveInvalidRecords = this.haveInValidateQuestions();
110
- if (isHaveInvalidRecords == false) {
111
-
112
- var currentPageIndex = this.fCtrls.currentPageIndex.value;
113
-
114
- if (currentPageIndex < (this.surveyData.surveyPages.length - 1)) {
115
- currentPageIndex = Number(currentPageIndex) + 1;
116
- this.fCtrls.currentPageIndex.setValue(currentPageIndex);
117
- } else {
118
- var questionArr = this.fCtrls.questionArray.value.filter(x => x.isMatrixGroup != true).map(x => {
119
- return {
120
- SurveyPageIndex: x.surveyPageIndex,
121
- QuestionId: x.questionId,
122
- QuestionType: x.questionType,
123
- AnswerId: x.answerId,
124
- AnswerText: x.answerText,
125
- AnswerIdArr: x.answerIdArr
126
- } as SurveyQuestionResult
127
- });
128
- this.surveyResultEmit.emit(questionArr);
129
- }
130
- }
131
- }
132
-
133
- onPaggingChange(index) {
134
- const formValue = this.rForm.value;
135
- if (index < formValue.currentPageIndex) {
136
- this.fCtrls.currentPageIndex.setValue(index);
137
- } else if (index == (formValue.currentPageIndex + 1)) {
138
- this.onPaggingNext();
139
- }
140
- }
141
-
142
- onPaggingBack() {
143
- var currentPageIndex = this.fCtrls.currentPageIndex.value;
144
- if (currentPageIndex > 0) {
145
- currentPageIndex = Number(currentPageIndex) - 1;
146
- this.fCtrls.currentPageIndex.setValue(currentPageIndex);
147
- }
148
- }
149
-
150
- onUpdateAnswers(model: QuestionAnswerModel[]) {
151
- model.forEach(elem => {
152
- this.onUpdateAnswer(elem);
153
- });
154
- }
155
-
156
- onUpdateAnswer(model: QuestionAnswerModel) {
157
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == model.QuestionId);
158
- var questionGroup = this.fCtrls.questionArray.controls[index];
159
- questionGroup.controls.isValid.setValue(model.IsValid);
160
-
161
- if (questionGroup.value.questionType == this.questionTypeEnum.TextInput) {
162
- questionGroup.patchValue({
163
- answerId: model.SurveyAnswerId,
164
- answerText: model.Answer
165
- });
166
- } else if (questionGroup.value.questionType == this.questionTypeEnum.CheckBox || questionGroup.value.questionType == this.questionTypeEnum.DropDownMulti) {
167
- questionGroup.controls.answerIdArr.setValue(model.Answer);
168
- } else {
169
- questionGroup.controls.answerId.setValue(model.Answer);
170
- }
171
-
172
- if (this.fCtrls.ruleQuestionArray.value.findIndex(x => x.questionId == model.QuestionId) > -1) {
173
- this.checkRules()
174
- }
175
- }
176
-
177
- private loadQuestions(survey: SurveyDto) {
178
- survey.surveyPages.forEach((page, pageIndex) => {
179
- page.surveyQuestionGroups.forEach(group => {
180
-
181
- group.surveyQuestions.forEach(question => {
182
-
183
- if (question.questionTypeId != 6) {
184
- this.fCtrls.questionArray.push(this._formBuilder.group<QuestionChildOfSurveryLibFormInterface>({
185
- surveyPageIndex: pageIndex,
186
- questionId: [question.questionId],
187
- questionType: [question.questionTypeId],
188
- isMatrixGroup: [false],
189
- answerId: [null],
190
- answerIdArr: [null],
191
- answerText: [null],
192
- isRequired: [question.isRequired],
193
- isValid: [null],
194
- isDisabled: [question.isReadOnly],
195
- isShow: [question.isVisable],
196
- isDisabled_default: [question.isReadOnly],
197
- isShow_default: [question.isVisable]
198
- }));
199
- } else {
200
- this.fCtrls.questionArray.push(this._formBuilder.group<QuestionChildOfSurveryLibFormInterface>({
201
- surveyPageIndex: pageIndex,
202
- questionId: [question.questionId],
203
- questionType: [question.questionTypeId],
204
- isMatrixGroup: [true],
205
- answerId: [null],
206
- answerIdArr: [null],
207
- answerText: [null],
208
- isRequired: [question.isRequired],
209
- isValid: [null],
210
- isDisabled: [question.isReadOnly],
211
- isShow: [question.isVisable],
212
- isDisabled_default: [question.isReadOnly],
213
- isShow_default: [question.isVisable],
214
- }));
215
-
216
- question.surveySubQuestions.forEach(subQuestion => {
217
- this.fCtrls.questionArray.push(this._formBuilder.group<QuestionChildOfSurveryLibFormInterface>({
218
- surveyPageIndex: pageIndex,
219
- questionId: [subQuestion.questionId],
220
- questionType: [subQuestion.questionTypeId],
221
- isMatrixGroup: [false],
222
- answerId: [null],
223
- answerIdArr: [null],
224
- answerText: [null],
225
- isRequired: [question.isRequired],
226
- isValid: [null],
227
- isDisabled: [subQuestion.isReadOnly],
228
- isShow: [subQuestion.isVisable],
229
- isDisabled_default: [subQuestion.isReadOnly],
230
- isShow_default: [subQuestion.isVisable]
231
- }));
232
- })
233
- }
234
- });
235
-
236
- });
237
- });
238
-
239
- survey.surveyRules.forEach(rule => {
240
- rule.ruleExps.forEach(ruleExp => {
241
- this.fCtrls.ruleQuestionArray.push(this._formBuilder.group<RuleQuestionChildOfSurveryLibFormInterface>({
242
- questionId: ruleExp.questionId
243
- }));
244
- });
245
- })
246
- }
247
-
248
- private haveInValidateQuestions() {
249
- const currentPageIndex = this.fCtrls.currentPageIndex.value;
250
- var invalidRecords = this.fCtrls.questionArray.value.filter(x => x.surveyPageIndex == currentPageIndex
251
- && x.isRequired == true && x.isValid != true
252
- && x.isDisabled == false && x.isShow == true && x.isMatrixGroup != true);
253
- if (invalidRecords.length > 0) {
254
- $(`#survey-page_${currentPageIndex}`).addClass('survey-page_submitted');
255
- }
256
-
257
- if (invalidRecords.length > 0) {
258
- console.log(invalidRecords);
259
- }
260
- return invalidRecords.length > 0;
261
- }
262
-
263
- private checkRules() {
264
-
265
- this.surveyData.surveyRules.forEach(rule => {
266
- this._checkRuleExpsUsecase.execute({
267
- ruleExps: rule.ruleExps,
268
- questions: this.fCtrls.questionArray.value
269
- }).subscribe(result => {
270
-
271
- var isPassed = result.exprestionResultArr.filter(x => x == false).length == 0;
272
- if (isPassed) {
273
-
274
- rule.ruleResultQuestions.forEach(resultQuestion => {
275
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
276
- var questionGroup = this.fCtrls.questionArray.at(index);
277
- if (rule.logicActionId == LogicActionEnum.Show) {
278
- questionGroup.controls.isShow.setValue(true);
279
- } else if (rule.logicActionId == LogicActionEnum.Hide) {
280
- questionGroup.controls.isShow.setValue(false);
281
- } else if (rule.logicActionId == LogicActionEnum.Enable) {
282
- questionGroup.controls.isDisabled.setValue(false);
283
- } else if (rule.logicActionId == LogicActionEnum.Disable) {
284
- questionGroup.controls.isDisabled.setValue(true);
285
- } else if (rule.logicActionId == LogicActionEnum.SetAnswer) {
286
-
287
- }
288
-
289
- });
290
- }
291
- else {
292
- rule.ruleResultQuestions.forEach(resultQuestion => {
293
- const index = this.fCtrls.questionArray.value.findIndex(x => x.questionId == resultQuestion.questionId);
294
- var questionGroup = this.fCtrls.questionArray.at(index);
295
- questionGroup.patchValue({
296
- isShow: questionGroup.value.isShow_default,
297
- isDisabled: questionGroup.value.isDisabled_default
298
- })
299
- });
300
- }
301
- });
302
-
303
- });
304
- }
305
-
306
-
307
-
308
- }
@@ -1,47 +0,0 @@
1
- import { ModuleWithProviders, NgModule } from '@angular/core';
2
- import { SurveryLibComponent } from './survery-lib.component';
3
- import { CommonModule } from '@angular/common';
4
- import { HttpClientModule } from '@angular/common/http';
5
- import { ReactiveFormsModule, FormsModule } from '@angular/forms';
6
- import { NgsFormsModule } from '@ng-stack/forms';
7
- import { QuestionTextTemplateComponent } from './components/question-text-template/question-text-template.component';
8
- import { QuestionRadioButtonTemplateComponent } from './components/question-radio-button-template/question-radio-button-template.component';
9
- import { QuestionCheckBoxTemplateComponent } from './components/question-check-box-template/question-check-box-template.component';
10
- import { QuestionDropdownTemplateComponent } from './components/question-dropdown-template/question-dropdown-template.component';
11
- import { QuestionMatrixTemplateComponent } from './components/question-matrix-template/question-matrix-template.component';
12
- import { QuestionBooleanTemplateComponent } from './components/question-boolean-template/question-boolean-template.component';
13
- import { FilterQuestionPipe } from './pipes/filter-question.pipe';
14
- import { DefaultQuestionAnswerPipe } from './pipes/default-question-answer.pipe';
15
- import { DefaultQuestionAnswersPipe } from './pipes/default-question-answers.pipe';
16
- import { QuestionDropdownMultiTemplateComponent } from './components/question-dropdown-multi-template/question-dropdown-multi-template.component';
17
- import { NgSelectModule } from '@ng-select/ng-select';
18
-
19
-
20
- @NgModule({
21
- declarations: [
22
- SurveryLibComponent,
23
- QuestionTextTemplateComponent,
24
- QuestionRadioButtonTemplateComponent,
25
- QuestionCheckBoxTemplateComponent,
26
- QuestionDropdownTemplateComponent,
27
- QuestionMatrixTemplateComponent,
28
- QuestionBooleanTemplateComponent,
29
- QuestionDropdownMultiTemplateComponent,
30
- FilterQuestionPipe,
31
- DefaultQuestionAnswerPipe,
32
- DefaultQuestionAnswersPipe
33
- ],
34
- imports: [
35
- CommonModule, HttpClientModule, ReactiveFormsModule, FormsModule , NgsFormsModule ,NgSelectModule
36
- ],
37
- exports: [
38
- SurveryLibComponent
39
- ]
40
- })
41
- export class SurveryLibModule {
42
- public static forRoot(): ModuleWithProviders<SurveryLibModule> {
43
- return {
44
- ngModule: SurveryLibModule
45
- }
46
- }
47
- }
@@ -1,67 +0,0 @@
1
- <div class="survay-card" *ngIf="surveyData != null">
2
- <div *ngFor="let surveyPage of surveyData?.surveyPages; let surveyPageIndex = index"
3
- [attr.id]="'survey-page_'+surveyPageIndex" [ngClass]="{'d-none': surveyPageIndex != fCtrls.currentPageIndex.value}">
4
- <ng-container *ngFor="let item of surveyPage.surveyQuestionGroups">
5
- <div class="survay-card">
6
- <div class="survay-card-body">
7
- <div class="survay-group">
8
- <div class="title">
9
- <h2 class="group-title">
10
- {{item.questionGroupName}}
11
- </h2>
12
- <span class="group-sub-title ">
13
- {{item.questionGroupDescription}}
14
- </span>
15
- </div>
16
- <ng-container *ngFor="let question of item.surveyQuestions">
17
- <lib-question-boolean-template #questionBooleanTemplate [setQuestion]="question" (emitter)="onUpdateAnswer($event)"
18
- *ngIf="question.questionTypeId == questionTypeEnum.Boolean"
19
- [isShow]=" (question|filterQuestion : fCtrls.questionArray.value).isShow"
20
- [isDisabled]="(question|filterQuestion : fCtrls.questionArray.value).isDisabled" ></lib-question-boolean-template>
21
-
22
- <lib-question-text-template #questionTextTemplate [setQuestion]="question" (emitter)="onUpdateAnswer($event)"
23
- *ngIf="question.questionTypeId == questionTypeEnum.TextInput"
24
- [isShow]=" (question|filterQuestion : fCtrls.questionArray.value).isShow"
25
- [isDisabled]="(question|filterQuestion : fCtrls.questionArray.value).isDisabled"
26
- [isTextArea]="question.isAdvanceTextArea" ></lib-question-text-template>
27
-
28
- <lib-question-radio-button-template #questionRadioButtonTemplate [setQuestion]="question" (emitter)="onUpdateAnswer($event)"
29
- *ngIf="question.questionTypeId == questionTypeEnum.RadioButton"
30
- [isShow]=" (question|filterQuestion : fCtrls.questionArray.value).isShow"
31
- [isDisabled]="(question|filterQuestion : fCtrls.questionArray.value).isDisabled" ></lib-question-radio-button-template>
32
-
33
- <lib-question-dropdown-template #questionDropdownTemplate [setQuestion]="question" (emitter)="onUpdateAnswer($event)"
34
- *ngIf="question.questionTypeId == questionTypeEnum.DropDown"
35
- [isShow]=" (question|filterQuestion : fCtrls.questionArray.value).isShow"
36
- [isDisabled]="(question|filterQuestion : fCtrls.questionArray.value).isDisabled" ></lib-question-dropdown-template>
37
-
38
- <lib-question-dropdown-multi-template [setQuestion]="question" (emitter)="onUpdateAnswer($event)"
39
- *ngIf="question.questionTypeId == questionTypeEnum.DropDownMulti"
40
- [isShow]=" (question|filterQuestion : fCtrls.questionArray.value).isShow"
41
- [isDisabled]="(question|filterQuestion : fCtrls.questionArray.value).isDisabled"></lib-question-dropdown-multi-template>
42
-
43
- <lib-question-check-box-template #questionCheckBoxTemplate [setQuestion]="question" (emitter)="onUpdateAnswer($event)"
44
- *ngIf="question.questionTypeId == questionTypeEnum.CheckBox"
45
- [isShow]=" (question|filterQuestion : fCtrls.questionArray.value).isShow"
46
- [isDisabled]="(question|filterQuestion : fCtrls.questionArray.value).isDisabled" ></lib-question-check-box-template>
47
-
48
- <lib-question-matrix-template #questionMatrixTemplate [setQuestion]="question" (emitter)="onUpdateAnswer($event)"
49
- *ngIf="question.questionTypeId == questionTypeEnum.Matrix"
50
- [isShow]=" (question|filterQuestion : fCtrls.questionArray.value).isShow"
51
- [isDisabled]="(question|filterQuestion : fCtrls.questionArray.value).isDisabled" ></lib-question-matrix-template>
52
- </ng-container>
53
- </div>
54
- </div>
55
- </div>
56
- </ng-container>
57
- </div>
58
- <div class="survay-card-footr" *ngIf="surveyData != null">
59
- <div class="container" style=" justify-content: start;">
60
- <div class="survay-pagination fw-bold" >
61
- <span>{{fCtrls.currentPageIndex.value + 1}}</span>
62
- <span class="ms-2 me-2">of</span>
63
- <span>{{surveyData.surveyPages.length}}</span>
64
- </div>
65
- </div>
66
- </div>
67
- </div>
@@ -1,4 +0,0 @@
1
- .disable__btn {
2
- background-color: gray !important;
3
- cursor: not-allowed;
4
- }
@@ -1,188 +0,0 @@
1
- import { Observable, of } from "rxjs";
2
- import { UseCase } from "./base/use-case";
3
- import { SurveyRuleDto } from "../../shared/dtos/survey-rule.dto";
4
- import { Injectable } from "@angular/core";
5
- import { QuestionChildOfSurveryLibFormInterface } from "../../shared/form-interfaces/survery-lib.form-interface";
6
- import { RuleExpDto } from "../../shared/dtos/rule-exp.dto";
7
- import { QuestionTypeEnum } from "../../shared/enums/question-type.enum";
8
- import { LogicPropertyEnum } from "../../shared/enums/Logic-Property.enum";
9
- import { OperatorEnum } from "../../shared/enums/operator.enum";
10
-
11
- @Injectable({
12
- providedIn: 'root'
13
- })
14
- export class CheckRuleExpsUsecase implements UseCase<CheckRulesUsecaseModel, CheckRulesUsecaseResult>{
15
-
16
- constructor() {
17
-
18
- }
19
-
20
- execute(params: CheckRulesUsecaseModel): Observable<CheckRulesUsecaseResult> {
21
-
22
- var useCaseResult: CheckRulesUsecaseResult = {
23
- exprestionResultArr: []
24
- };
25
-
26
- params.ruleExps.forEach(ruleExp => {
27
- const index = params.questions.findIndex(x => x.questionId == ruleExp.questionId);
28
- var questionGroupValue = params.questions.at(index);
29
-
30
- var result: boolean;
31
-
32
- if (questionGroupValue.questionType == QuestionTypeEnum.TextInput) {
33
- result = this.checkRuleExpForAnswerText(ruleExp, questionGroupValue.answerText)
34
- }
35
- else if (questionGroupValue.questionType == QuestionTypeEnum.CheckBox) {
36
- result = this.checkRuleExpForAnswerIdArr(ruleExp, questionGroupValue.answerIdArr);
37
- }
38
- else {
39
- result = this.checkRuleExpForAnswerId(ruleExp, questionGroupValue.answerId);
40
- }
41
-
42
- var answers =ruleExp.ruleExpAnswers.map(x=>x.answerId+'-'+x.answerTitle);
43
- console.log(`Question ${questionGroupValue.questionId} type ${QuestionTypeEnum[questionGroupValue.questionType]} --- ${result == true ?'passed':'not passed'} ---`,
44
- ` answers (${answers.join(' , ')}) logic (${ LogicPropertyEnum[ruleExp.logicPropertyId]}) operator (${OperatorEnum [ruleExp.opporator]})`);
45
-
46
- useCaseResult.exprestionResultArr.push(result);
47
- });
48
-
49
- return of(useCaseResult);
50
- }
51
-
52
- private checkRuleExpForAnswerId(ruleExp: RuleExpDto, answerId: number) {
53
- var ruleExpResultArr: boolean[] = [];
54
- if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThan) {
55
-
56
- ruleExp.ruleExpAnswers.forEach(answer => {
57
- var result = answerId > answer.answerId
58
- ruleExpResultArr.push(result);
59
- });
60
-
61
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.GreaterThanOrEqual) {
62
-
63
- ruleExp.ruleExpAnswers.forEach(answer => {
64
- var result = answerId >= answer.answerId
65
- ruleExpResultArr.push(result);
66
- });
67
-
68
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThan) {
69
-
70
- ruleExp.ruleExpAnswers.forEach(answer => {
71
- var result = answerId < answer.answerId
72
- ruleExpResultArr.push(result);
73
- });
74
-
75
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.LessThanOrEqual) {
76
-
77
- ruleExp.ruleExpAnswers.forEach(answer => {
78
- var result = answerId <= answer.answerId
79
- ruleExpResultArr.push(result);
80
- });
81
-
82
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.Equal) {
83
-
84
- ruleExp.ruleExpAnswers.forEach(answer => {
85
- var result = answerId == answer.answerId
86
- ruleExpResultArr.push(result);
87
- });
88
-
89
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.NotEqual) {
90
-
91
- ruleExp.ruleExpAnswers.forEach(answer => {
92
- var result = answerId != answer.answerId
93
- ruleExpResultArr.push(result);
94
- });
95
-
96
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
97
-
98
- var result = answerId == null
99
- ruleExpResultArr.push(result);
100
-
101
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
102
-
103
- var result = answerId != null
104
- ruleExpResultArr.push(result);
105
-
106
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.AnyOf) {
107
-
108
- var answerIdArr: number[] = ruleExp.ruleExpAnswers.map(x => x.answerId);
109
- var result = answerIdArr.findIndex(x => x == answerId) > -1
110
- ruleExpResultArr.push(result);
111
-
112
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.Then) {
113
-
114
- var answerIdArr: number[] = ruleExp.ruleExpAnswers.map(x => x.answerId);
115
- var result = answerIdArr.findIndex(x => x == answerId) == -1
116
- ruleExpResultArr.push(result);
117
-
118
- }
119
-
120
- if (ruleExpResultArr.length == 0) {
121
- return false;
122
- }
123
- else if (ruleExp.ruleExpAnswers.length == 1) {
124
- return ruleExpResultArr.filter(x => x == true).length > 0
125
- }
126
- else if (ruleExp.opporator == OperatorEnum.Or) {
127
- return ruleExpResultArr.filter(x => x == true).length > 0
128
- } else {
129
- return ruleExpResultArr.filter(x => x == false).length == 0
130
- }
131
- }
132
-
133
- private checkRuleExpForAnswerIdArr(ruleExp: RuleExpDto, answerIdArr: number[]) {
134
- var ruleExpResultArr: boolean[] = [];
135
-
136
- answerIdArr?.forEach(answer => {
137
- var isResult = this.checkRuleExpForAnswerId(ruleExp, answer);
138
- ruleExpResultArr.push(isResult);
139
- })
140
-
141
- if (ruleExpResultArr.length == 0) {
142
- return false;
143
- }
144
- else if (ruleExp.ruleExpAnswers.length == 1) {
145
- return ruleExpResultArr.filter(x => x == true).length > 0
146
- }
147
- else if (ruleExp.opporator == OperatorEnum.Or) {
148
- return ruleExpResultArr.filter(x => x == true).length > 0
149
- } else {
150
- return ruleExpResultArr.filter(x => x == false).length == 0
151
- }
152
- }
153
-
154
- private checkRuleExpForAnswerText(ruleExp: RuleExpDto, answer: string) {
155
- var ruleExpResultArr: boolean[] = [];
156
- if (ruleExp.logicPropertyId == LogicPropertyEnum.IsEmpty) {
157
-
158
- var result = answer == null || answer == ''
159
- ruleExpResultArr.push(result);
160
-
161
- } else if (ruleExp.logicPropertyId == LogicPropertyEnum.IsNotEmpty) {
162
-
163
- var result = answer != null && answer != ''
164
- ruleExpResultArr.push(result);
165
-
166
- }
167
-
168
-
169
- if (ruleExp.ruleExpAnswers.length == 1) {
170
- return ruleExpResultArr.filter(x => x == true).length > 0
171
- }
172
- else if (ruleExp.opporator == OperatorEnum.Or) {
173
- return ruleExpResultArr.filter(x => x == true).length > 0
174
- } else {
175
- return ruleExpResultArr.filter(x => x == false).length == 0
176
- }
177
- }
178
-
179
- }
180
-
181
- export class CheckRulesUsecaseModel {
182
- ruleExps: RuleExpDto[];
183
- questions: QuestionChildOfSurveryLibFormInterface[];
184
- }
185
-
186
- export class CheckRulesUsecaseResult {
187
- exprestionResultArr: boolean[];
188
- }
@@ -1,10 +0,0 @@
1
- import { QuestionTypeEnum } from "../enums/question-type.enum";
2
-
3
- export class DefaultQuestionAnswerDto{
4
- QuestionId;
5
- QuestionType :QuestionTypeEnum;
6
- AnswerId;
7
- AnswerText;
8
- AnswerIdArr :string[];
9
- ParentQuestionId;
10
- }