special-forms 1.0.0

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 (182) hide show
  1. package/.editorconfig +16 -0
  2. package/.storybook/db-theme.js +8 -0
  3. package/.storybook/main.js +15 -0
  4. package/.storybook/manager.js +7 -0
  5. package/.storybook/preview-head.html +16 -0
  6. package/.storybook/preview.js +20 -0
  7. package/.storybook/tsconfig.json +21 -0
  8. package/.storybook/typings.d.ts +4 -0
  9. package/.vscode/extensions.json +4 -0
  10. package/.vscode/launch.json +20 -0
  11. package/.vscode/tasks.json +42 -0
  12. package/README.md +27 -0
  13. package/angular.json +38 -0
  14. package/documentation.json +10829 -0
  15. package/package.json +65 -0
  16. package/projects/special-forms/README.md +24 -0
  17. package/projects/special-forms/karma.conf.js +44 -0
  18. package/projects/special-forms/ng-package.json +7 -0
  19. package/projects/special-forms/package.json +11 -0
  20. package/projects/special-forms/src/lib/assets/styles.scss +213 -0
  21. package/projects/special-forms/src/lib/assets/themes/dark.scss +80 -0
  22. package/projects/special-forms/src/lib/assets/themes/light.scss +78 -0
  23. package/projects/special-forms/src/lib/aux-storybook-components/form-control-selector/form-control-selector.component.html +5 -0
  24. package/projects/special-forms/src/lib/aux-storybook-components/form-control-selector/form-control-selector.component.scss +6 -0
  25. package/projects/special-forms/src/lib/aux-storybook-components/form-control-selector/form-control-selector.component.spec.ts +21 -0
  26. package/projects/special-forms/src/lib/aux-storybook-components/form-control-selector/form-control-selector.component.ts +21 -0
  27. package/projects/special-forms/src/lib/aux-storybook-components/form-control-selector/form-control-selector.module.ts +36 -0
  28. package/projects/special-forms/src/lib/aux-storybook-components/form-control-viewer/form-control-viewer.component.html +5 -0
  29. package/projects/special-forms/src/lib/aux-storybook-components/form-control-viewer/form-control-viewer.component.scss +18 -0
  30. package/projects/special-forms/src/lib/aux-storybook-components/form-control-viewer/form-control-viewer.component.spec.ts +23 -0
  31. package/projects/special-forms/src/lib/aux-storybook-components/form-control-viewer/form-control-viewer.component.ts +66 -0
  32. package/projects/special-forms/src/lib/aux-storybook-components/form-control-viewer/form-control-viewer.module.ts +16 -0
  33. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/control-dialog.component.html +31 -0
  34. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/control-dialog.component.scss +0 -0
  35. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/control-dialog.component.spec.ts +22 -0
  36. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/control-dialog.component.ts +102 -0
  37. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/autocomplete.form.ts +87 -0
  38. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/checkbox.form.ts +51 -0
  39. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/common.form.interface.ts +24 -0
  40. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/common.form.ts +31 -0
  41. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/datepicker.form.ts +56 -0
  42. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/dropdown.form.ts +80 -0
  43. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/field.form.ts +189 -0
  44. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/input.form.ts +71 -0
  45. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/label.form.ts +33 -0
  46. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/text-area.form.ts +17 -0
  47. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/components/settings-strategy/upload.form.ts +35 -0
  48. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/form-group-viewer.component.html +37 -0
  49. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/form-group-viewer.component.scss +41 -0
  50. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/form-group-viewer.component.spec.ts +22 -0
  51. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/form-group-viewer.component.ts +95 -0
  52. package/projects/special-forms/src/lib/aux-storybook-components/form-group-viewer/form-group-viewer.module.ts +32 -0
  53. package/projects/special-forms/src/lib/components/index.ts +61 -0
  54. package/projects/special-forms/src/lib/components/special-autocomplete/special-autocomplete.component.html +62 -0
  55. package/projects/special-forms/src/lib/components/special-autocomplete/special-autocomplete.component.scss +3 -0
  56. package/projects/special-forms/src/lib/components/special-autocomplete/special-autocomplete.component.spec.ts +24 -0
  57. package/projects/special-forms/src/lib/components/special-autocomplete/special-autocomplete.component.ts +58 -0
  58. package/projects/special-forms/src/lib/components/special-autocomplete/special-autocomplete.interface.ts +20 -0
  59. package/projects/special-forms/src/lib/components/special-autocomplete/special-autocomplete.module.ts +25 -0
  60. package/projects/special-forms/src/lib/components/special-autocomplete/special-autocomplete.stories.ts +81 -0
  61. package/projects/special-forms/src/lib/components/special-checkbox/special-checkbox.component.html +17 -0
  62. package/projects/special-forms/src/lib/components/special-checkbox/special-checkbox.component.scss +3 -0
  63. package/projects/special-forms/src/lib/components/special-checkbox/special-checkbox.component.spec.ts +23 -0
  64. package/projects/special-forms/src/lib/components/special-checkbox/special-checkbox.component.ts +19 -0
  65. package/projects/special-forms/src/lib/components/special-checkbox/special-checkbox.interface.ts +12 -0
  66. package/projects/special-forms/src/lib/components/special-checkbox/special-checkbox.module.ts +25 -0
  67. package/projects/special-forms/src/lib/components/special-checkbox/special-checkbox.stories.ts +76 -0
  68. package/projects/special-forms/src/lib/components/special-datepicker/special-datepicker.component.html +26 -0
  69. package/projects/special-forms/src/lib/components/special-datepicker/special-datepicker.component.scss +3 -0
  70. package/projects/special-forms/src/lib/components/special-datepicker/special-datepicker.component.spec.ts +23 -0
  71. package/projects/special-forms/src/lib/components/special-datepicker/special-datepicker.component.ts +21 -0
  72. package/projects/special-forms/src/lib/components/special-datepicker/special-datepicker.interface.ts +13 -0
  73. package/projects/special-forms/src/lib/components/special-datepicker/special-datepicker.module.ts +26 -0
  74. package/projects/special-forms/src/lib/components/special-datepicker/special-datepicker.stories.ts +69 -0
  75. package/projects/special-forms/src/lib/components/special-dropdown/special-dropdown.component.html +41 -0
  76. package/projects/special-forms/src/lib/components/special-dropdown/special-dropdown.component.scss +15 -0
  77. package/projects/special-forms/src/lib/components/special-dropdown/special-dropdown.component.spec.ts +24 -0
  78. package/projects/special-forms/src/lib/components/special-dropdown/special-dropdown.component.ts +34 -0
  79. package/projects/special-forms/src/lib/components/special-dropdown/special-dropdown.interface.ts +18 -0
  80. package/projects/special-forms/src/lib/components/special-dropdown/special-dropdown.module.ts +22 -0
  81. package/projects/special-forms/src/lib/components/special-dropdown/special-dropdown.stories.ts +83 -0
  82. package/projects/special-forms/src/lib/components/special-form/special-form-array.component.html +208 -0
  83. package/projects/special-forms/src/lib/components/special-form/special-form-array.component.scss +70 -0
  84. package/projects/special-forms/src/lib/components/special-form/special-form-array.component.spec.ts +23 -0
  85. package/projects/special-forms/src/lib/components/special-form/special-form-array.module.ts +18 -0
  86. package/projects/special-forms/src/lib/components/special-form/special-form.component.html +20 -0
  87. package/projects/special-forms/src/lib/components/special-form/special-form.component.scss +3 -0
  88. package/projects/special-forms/src/lib/components/special-form/special-form.component.spec.ts +22 -0
  89. package/projects/special-forms/src/lib/components/special-form/special-form.component.ts +85 -0
  90. package/projects/special-forms/src/lib/components/special-form/special-form.module.ts +40 -0
  91. package/projects/special-forms/src/lib/components/special-form/special-form.stories.ts +45 -0
  92. package/projects/special-forms/src/lib/components/special-input/special-input.component.html +37 -0
  93. package/projects/special-forms/src/lib/components/special-input/special-input.component.scss +3 -0
  94. package/projects/special-forms/src/lib/components/special-input/special-input.component.spec.ts +23 -0
  95. package/projects/special-forms/src/lib/components/special-input/special-input.component.ts +39 -0
  96. package/projects/special-forms/src/lib/components/special-input/special-input.interface.ts +17 -0
  97. package/projects/special-forms/src/lib/components/special-input/special-input.module.ts +24 -0
  98. package/projects/special-forms/src/lib/components/special-input/special-input.stories.ts +91 -0
  99. package/projects/special-forms/src/lib/components/special-label/special-label.component.html +6 -0
  100. package/projects/special-forms/src/lib/components/special-label/special-label.component.scss +3 -0
  101. package/projects/special-forms/src/lib/components/special-label/special-label.component.spec.ts +23 -0
  102. package/projects/special-forms/src/lib/components/special-label/special-label.component.ts +27 -0
  103. package/projects/special-forms/src/lib/components/special-label/special-label.interface.ts +14 -0
  104. package/projects/special-forms/src/lib/components/special-label/special-label.module.ts +25 -0
  105. package/projects/special-forms/src/lib/components/special-label/special-label.stories.ts +99 -0
  106. package/projects/special-forms/src/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.html +82 -0
  107. package/projects/special-forms/src/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.scss +3 -0
  108. package/projects/special-forms/src/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.spec.ts +23 -0
  109. package/projects/special-forms/src/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.component.ts +86 -0
  110. package/projects/special-forms/src/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.interface.ts +20 -0
  111. package/projects/special-forms/src/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.module.ts +28 -0
  112. package/projects/special-forms/src/lib/components/special-multiple-autocomplete/special-multiple-autocomplete.stories.ts +81 -0
  113. package/projects/special-forms/src/lib/components/special-text-area/special-text-area.component.html +29 -0
  114. package/projects/special-forms/src/lib/components/special-text-area/special-text-area.component.scss +3 -0
  115. package/projects/special-forms/src/lib/components/special-text-area/special-text-area.component.spec.ts +23 -0
  116. package/projects/special-forms/src/lib/components/special-text-area/special-text-area.component.ts +20 -0
  117. package/projects/special-forms/src/lib/components/special-text-area/special-text-area.interface.ts +9 -0
  118. package/projects/special-forms/src/lib/components/special-text-area/special-text-area.module.ts +24 -0
  119. package/projects/special-forms/src/lib/components/special-text-area/special-text-area.stories.ts +69 -0
  120. package/projects/special-forms/src/lib/components/special-upload/special-upload.component.html +50 -0
  121. package/projects/special-forms/src/lib/components/special-upload/special-upload.component.scss +29 -0
  122. package/projects/special-forms/src/lib/components/special-upload/special-upload.component.spec.ts +23 -0
  123. package/projects/special-forms/src/lib/components/special-upload/special-upload.component.ts +79 -0
  124. package/projects/special-forms/src/lib/components/special-upload/special-upload.interface.ts +12 -0
  125. package/projects/special-forms/src/lib/components/special-upload/special-upload.module.ts +23 -0
  126. package/projects/special-forms/src/lib/components/special-upload/special-upload.stories.ts +81 -0
  127. package/projects/special-forms/src/lib/core/aux-data/all-icons.ts +99 -0
  128. package/projects/special-forms/src/lib/core/aux-data/control-types.enum.ts +16 -0
  129. package/projects/special-forms/src/lib/core/aux-data/countries.ts +247 -0
  130. package/projects/special-forms/src/lib/core/aux-data/field-basic-data.ts +14 -0
  131. package/projects/special-forms/src/lib/core/aux-data/input-types.ts +23 -0
  132. package/projects/special-forms/src/lib/core/controls/icons.control.ts +8 -0
  133. package/projects/special-forms/src/lib/core/controls/index.ts +2 -0
  134. package/projects/special-forms/src/lib/core/controls/theme.control.ts +1 -0
  135. package/projects/special-forms/src/lib/core/controls/types.control.ts +9 -0
  136. package/projects/special-forms/src/lib/core/directives/control-render.directive.ts +19 -0
  137. package/projects/special-forms/src/lib/core/directives/control-render.module.ts +10 -0
  138. package/projects/special-forms/src/lib/core/forms/special-forms.ts +395 -0
  139. package/projects/special-forms/src/lib/core/interfaces/field-basics.interfaces.ts +22 -0
  140. package/projects/special-forms/src/lib/core/interfaces/form.interfaces.ts +83 -0
  141. package/projects/special-forms/src/lib/core/interfaces/special-control.interface.ts +9 -0
  142. package/projects/special-forms/src/lib/core/masks/currency.mask.ts +11 -0
  143. package/projects/special-forms/src/lib/core/masks/maks.enum.ts +12 -0
  144. package/projects/special-forms/src/lib/core/masks/number.mask.ts +4 -0
  145. package/projects/special-forms/src/lib/core/services/index.ts +3 -0
  146. package/projects/special-forms/src/lib/core/services/special-form-builder/special-form-builder.service.spec.ts +16 -0
  147. package/projects/special-forms/src/lib/core/services/special-form-builder/special-form-builder.service.ts +220 -0
  148. package/projects/special-forms/src/lib/core/utils/enum-to-array.util.ts +6 -0
  149. package/projects/special-forms/src/lib/pipes/controls-list-pipe/controls-list.pipe.module.ts +10 -0
  150. package/projects/special-forms/src/lib/pipes/controls-list-pipe/controls-list.pipe.ts +17 -0
  151. package/projects/special-forms/src/lib/pipes/error-message-pipe/error.pipe.module.ts +13 -0
  152. package/projects/special-forms/src/lib/pipes/error-message-pipe/error.pipe.ts +21 -0
  153. package/projects/special-forms/src/lib/pipes/index.ts +3 -0
  154. package/projects/special-forms/src/lib/pipes/text-by-function/text-by-function.pipe.module.ts +13 -0
  155. package/projects/special-forms/src/lib/pipes/text-by-function/text-by-function.pipe.ts +14 -0
  156. package/projects/special-forms/src/public-api.ts +8 -0
  157. package/projects/special-forms/src/test.ts +27 -0
  158. package/projects/special-forms/tsconfig.lib.json +15 -0
  159. package/projects/special-forms/tsconfig.lib.prod.json +10 -0
  160. package/projects/special-forms/tsconfig.spec.json +17 -0
  161. package/scss-bundle.config.json +6 -0
  162. package/stories/Button.stories.ts +42 -0
  163. package/stories/Header.stories.ts +35 -0
  164. package/stories/Introduction.stories.mdx +211 -0
  165. package/stories/Page.stories.ts +36 -0
  166. package/stories/User.ts +2 -0
  167. package/stories/assets/code-brackets.svg +1 -0
  168. package/stories/assets/colors.svg +1 -0
  169. package/stories/assets/comments.svg +1 -0
  170. package/stories/assets/direction.svg +1 -0
  171. package/stories/assets/flow.svg +1 -0
  172. package/stories/assets/plugin.svg +1 -0
  173. package/stories/assets/repo.svg +1 -0
  174. package/stories/assets/stackalt.svg +1 -0
  175. package/stories/button.component.ts +53 -0
  176. package/stories/button.css +30 -0
  177. package/stories/header.component.ts +75 -0
  178. package/stories/header.css +32 -0
  179. package/stories/page.component.ts +77 -0
  180. package/stories/page.css +69 -0
  181. package/tailwind.config.js +30 -0
  182. package/tsconfig.json +39 -0
@@ -0,0 +1,220 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { AbstractControl, ValidatorFn, Validators } from '@angular/forms';
3
+ import { IAutocompleteSettings } from '../../../components/special-autocomplete/special-autocomplete.interface';
4
+ import { EControlTypes } from '../../aux-data/control-types.enum';
5
+ import {
6
+ SpecialFormArray,
7
+ SpecialFormControl,
8
+ SpecialFormGroup,
9
+ } from '../../forms/special-forms';
10
+ import { IFieldData } from '../../interfaces/field-basics.interfaces';
11
+ import {
12
+ IFormStructure,
13
+ TRawFields,
14
+ TSpecialArray,
15
+ TSpecialFields,
16
+ TSpecialForm,
17
+ TSpecialInput,
18
+ } from '../../interfaces/form.interfaces';
19
+
20
+ interface IControlParams {
21
+ name: string;
22
+ control: SpecialFormArray | SpecialFormGroup | SpecialFormControl<any>;
23
+ }
24
+ @Injectable({
25
+ providedIn: 'root',
26
+ })
27
+ export class SpecialFormBuilderService {
28
+ private readonly defectField: IFieldData = {
29
+ asyncValidators: null,
30
+ validators: null,
31
+ defaultValue: null,
32
+ elementId: '',
33
+ hidden: false,
34
+ icon: '',
35
+ label: '',
36
+ disabled: false,
37
+ length: 0,
38
+ placeholder: '',
39
+ readOnly: false,
40
+ required: false,
41
+ styleClasses: '',
42
+ errorMessages: {},
43
+ tooltip: '',
44
+ };
45
+
46
+ private readonly inputDefectField: TSpecialInput = {
47
+ ...this.defectField,
48
+ settings: {},
49
+ type: EControlTypes.input,
50
+ name: '',
51
+ };
52
+
53
+ private readonly formDefectField: TSpecialForm = {
54
+ ...this.defectField,
55
+ settings: {
56
+ formFields: {},
57
+ },
58
+ type: EControlTypes.form,
59
+ name: '',
60
+ };
61
+
62
+ private readonly arrayDefectField: TSpecialArray = {
63
+ ...this.defectField,
64
+ settings: {
65
+ formFields: {},
66
+ },
67
+ type: EControlTypes.array,
68
+ name: '',
69
+ };
70
+
71
+ constructor() {}
72
+
73
+ public control(field: Partial<TSpecialFields>): SpecialFormControl<any> {
74
+ const formField: TSpecialFields = {
75
+ ...this.inputDefectField,
76
+ ...field,
77
+ } as TSpecialFields;
78
+ const { control } = this.setFormControl(formField);
79
+ return control;
80
+ }
81
+
82
+ public group(
83
+ fields: IFormStructure,
84
+ parentField: Partial<TSpecialForm> = {}
85
+ ) {
86
+ return this.formGenerator(this.fieldDataToArray(fields), parentField);
87
+ }
88
+
89
+ public array() {}
90
+
91
+ public fieldDataToArray(fields: IFormStructure): TSpecialFields[] {
92
+ return Object.entries(fields).map(([name, field]) =>
93
+ this.setDefectFieldOptions(name, field)
94
+ );
95
+ }
96
+
97
+ private setDefectFieldOptions(
98
+ name: string,
99
+ field: Partial<TRawFields>
100
+ ): TSpecialFields {
101
+ return {
102
+ ...this.inputDefectField,
103
+ ...field,
104
+ name,
105
+ } as TSpecialFields;
106
+ }
107
+
108
+ private formGenerator(
109
+ fields: TSpecialFields[],
110
+ parentField: Partial<TSpecialForm> = {}
111
+ ): SpecialFormGroup {
112
+ const formField: TSpecialForm = {
113
+ ...this.formDefectField,
114
+ ...parentField,
115
+ };
116
+ const structure = fields
117
+ .map((field) => this.getControlAndNameByType(field))
118
+ .reduce(
119
+ (prev, { name, control }: IControlParams) => ({
120
+ ...prev,
121
+ [name]: control,
122
+ }),
123
+ {}
124
+ );
125
+ return new SpecialFormGroup(formField, structure);
126
+ }
127
+
128
+ private getControlAndNameByType(field: TSpecialFields) {
129
+ switch (field.type) {
130
+ case EControlTypes.array:
131
+ return this.setFormArray(field);
132
+ case EControlTypes.form:
133
+ return this.setFormGroup(field);
134
+ default:
135
+ return this.setFormControl(field);
136
+ }
137
+ }
138
+
139
+ private setFormGroup(field: TSpecialForm): {
140
+ name: string;
141
+ control: SpecialFormGroup;
142
+ } {
143
+ const control = this.formGenerator(
144
+ this.fieldDataToArray(field.settings.formFields),
145
+ field
146
+ );
147
+ return { control, name: field.name };
148
+ }
149
+
150
+ private setFormArray(field: TSpecialArray): {
151
+ name: string;
152
+ control: SpecialFormArray;
153
+ } {
154
+ const auxForm = (value = {}) => {
155
+ const auxForm = this.formGenerator(
156
+ this.fieldDataToArray(field.settings.formFields),
157
+ {}
158
+ );
159
+ auxForm.reset(value);
160
+ return auxForm;
161
+ };
162
+
163
+ if (field.required) {
164
+ field.validators = this.setValidatorsArray(field.validators, [
165
+ this.arrayLengthRequired,
166
+ ]);
167
+ }
168
+
169
+ return {
170
+ name: field.name,
171
+ control: new SpecialFormArray(field, auxForm, []),
172
+ };
173
+ }
174
+
175
+ private setFormControl(field: TSpecialFields): {
176
+ name: string;
177
+ control: SpecialFormControl<any>;
178
+ } {
179
+ const validators: ValidatorFn[] = [];
180
+
181
+ if (field.required) validators.push(this.setRequiredValidator(field));
182
+ if (field.length) validators.push(Validators.maxLength(field.length));
183
+
184
+ field.validators = this.setValidatorsArray(field.validators, validators);
185
+
186
+ return {
187
+ name: field.name,
188
+ control: new SpecialFormControl(field),
189
+ };
190
+ }
191
+
192
+ private setRequiredValidator(field: TSpecialFields): ValidatorFn {
193
+ if (field.type !== EControlTypes.autocomplete) {
194
+ return Validators.required;
195
+ }
196
+
197
+ return (control: SpecialFormControl<IAutocompleteSettings>) =>
198
+ !!control.value && control.value instanceof Object
199
+ ? null
200
+ : { required: true };
201
+ }
202
+ private setValidatorsArray(
203
+ validators: ValidatorFn | ValidatorFn[] | null,
204
+ newValidators: ValidatorFn[]
205
+ ): ValidatorFn[] {
206
+ if (!validators) {
207
+ return newValidators;
208
+ }
209
+ return validators instanceof Array
210
+ ? [...validators, ...newValidators]
211
+ : [validators, ...newValidators];
212
+ }
213
+
214
+ private arrayLengthRequired(control: AbstractControl) {
215
+ if (control.value.length) {
216
+ return {};
217
+ }
218
+ return { noItems: 'NO_SELECTED_ITEM' };
219
+ }
220
+ }
@@ -0,0 +1,6 @@
1
+ export const EnumToArray = (enu: any) => {
2
+ return Object.keys(enu).map((key) => ({
3
+ id: key,
4
+ value: enu[key],
5
+ }));
6
+ };
@@ -0,0 +1,10 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FormControlsListPipe } from './controls-list.pipe';
4
+
5
+ @NgModule({
6
+ declarations: [FormControlsListPipe],
7
+ imports: [CommonModule],
8
+ exports: [FormControlsListPipe],
9
+ })
10
+ export class FormControlsListPipeModule {}
@@ -0,0 +1,17 @@
1
+ import { Pipe, PipeTransform } from '@angular/core';
2
+ import { AbstractControl } from '@angular/forms';
3
+ import {
4
+ SpecialFormControl,
5
+ } from '../../core/forms/special-forms';
6
+
7
+ @Pipe({ name: 'controlsList' })
8
+ export class FormControlsListPipe implements PipeTransform {
9
+ transform(controls: {
10
+ [key: string]: AbstractControl;
11
+ }): SpecialFormControl<any>[] {
12
+ if (!controls) return [];
13
+ return Object.values(controls)
14
+ .filter((control: SpecialFormControl<any>) => !control.hidden)
15
+ .map((control) => control as SpecialFormControl<any>);
16
+ }
17
+ }
@@ -0,0 +1,13 @@
1
+ import { CommonModule } from "@angular/common";
2
+ import { NgModule } from "@angular/core";
3
+ import { ErrorMessagePipe } from "./error.pipe";
4
+
5
+ @NgModule({
6
+ declarations: [ErrorMessagePipe],
7
+ imports: [
8
+ CommonModule,
9
+
10
+ ],
11
+ exports: [ErrorMessagePipe],
12
+ })
13
+ export class ErrorMessagePipeModule {}
@@ -0,0 +1,21 @@
1
+ import { Pipe, PipeTransform } from "@angular/core";
2
+ import { FormControl } from "@angular/forms";
3
+
4
+ @Pipe({
5
+ name: "errorMessage",
6
+ })
7
+ export class ErrorMessagePipe implements PipeTransform {
8
+ transform(
9
+ errorsObj: { [key: string]: any },
10
+ errorMessages: { [key: string]: any },
11
+ control?: FormControl
12
+ ): any {
13
+ const errors = errorsObj ? Object.keys(errorsObj) : [];
14
+ const error = errors[0];
15
+ const message = errorMessages[error] || error;
16
+ if (control) {
17
+ control.setErrors(errorsObj);
18
+ }
19
+ return message;
20
+ }
21
+ }
@@ -0,0 +1,3 @@
1
+ export { ErrorMessagePipeModule } from './error-message-pipe/error.pipe.module';
2
+ export { TextByFunctionPipeModule } from './text-by-function/text-by-function.pipe.module';
3
+
@@ -0,0 +1,13 @@
1
+ import { CommonModule } from "@angular/common";
2
+ import { NgModule } from "@angular/core";
3
+ import { TextByFunctionPipe } from "./text-by-function.pipe";
4
+
5
+ @NgModule({
6
+ declarations: [TextByFunctionPipe],
7
+ imports: [
8
+ CommonModule,
9
+
10
+ ],
11
+ exports: [TextByFunctionPipe],
12
+ })
13
+ export class TextByFunctionPipeModule {}
@@ -0,0 +1,14 @@
1
+ import { Pipe, PipeTransform } from '@angular/core';
2
+
3
+ @Pipe({ name: 'textByFunction' })
4
+ export class TextByFunctionPipe implements PipeTransform {
5
+ transform(value: any, field: string | ((value: any) => string)): any {
6
+ if (field instanceof Function) {
7
+ return field(value);
8
+ } else if (value instanceof Object) {
9
+ return value[field];
10
+ } else {
11
+ return value;
12
+ }
13
+ }
14
+ }
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Public API Surface of special-forms
3
+ */
4
+
5
+ export * from './lib/components';
6
+ export * from './lib/core/services/index';
7
+ export * from './lib/core/directives/control-render.directive';
8
+
@@ -0,0 +1,27 @@
1
+ // This file is required by karma.conf.js and loads recursively all the .spec and framework files
2
+
3
+ import 'zone.js';
4
+ import 'zone.js/testing';
5
+ import { getTestBed } from '@angular/core/testing';
6
+ import {
7
+ BrowserDynamicTestingModule,
8
+ platformBrowserDynamicTesting
9
+ } from '@angular/platform-browser-dynamic/testing';
10
+
11
+ declare const require: {
12
+ context(path: string, deep?: boolean, filter?: RegExp): {
13
+ <T>(id: string): T;
14
+ keys(): string[];
15
+ };
16
+ };
17
+
18
+ // First, initialize the Angular testing environment.
19
+ getTestBed().initTestEnvironment(
20
+ BrowserDynamicTestingModule,
21
+ platformBrowserDynamicTesting(),
22
+ );
23
+
24
+ // Then we find all the tests.
25
+ const context = require.context('./', true, /\.spec\.ts$/);
26
+ // And load the modules.
27
+ context.keys().forEach(context);
@@ -0,0 +1,15 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../../tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "../../out-tsc/lib",
6
+ "declaration": true,
7
+ "declarationMap": true,
8
+ "inlineSources": true,
9
+ "types": []
10
+ },
11
+ "exclude": [
12
+ "src/test.ts",
13
+ "**/*.spec.ts"
14
+ ]
15
+ }
@@ -0,0 +1,10 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "./tsconfig.lib.json",
4
+ "compilerOptions": {
5
+ "declarationMap": false
6
+ },
7
+ "angularCompilerOptions": {
8
+ "compilationMode": "partial"
9
+ }
10
+ }
@@ -0,0 +1,17 @@
1
+ /* To learn more about this file see: https://angular.io/config/tsconfig. */
2
+ {
3
+ "extends": "../../tsconfig.json",
4
+ "compilerOptions": {
5
+ "outDir": "../../out-tsc/spec",
6
+ "types": [
7
+ "jasmine"
8
+ ]
9
+ },
10
+ "files": [
11
+ "src/test.ts"
12
+ ],
13
+ "include": [
14
+ "**/*.spec.ts",
15
+ "**/*.d.ts"
16
+ ]
17
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "bundlerOptions":{
3
+ "entryFile":"./projects/special-forms/src/lib/assets/styles.scss",
4
+ "outFile":"./dist/special-forms/_special-forms.styles.scss"
5
+ }
6
+ }
@@ -0,0 +1,42 @@
1
+ // also exported from '@storybook/angular' if you can deal with breaking changes in 6.1
2
+ import { Story, Meta } from '@storybook/angular/types-6-0';
3
+ import Button from './button.component';
4
+
5
+ // More on default export: https://storybook.js.org/docs/angular/writing-stories/introduction#default-export
6
+ export default {
7
+ title: 'Example/Button',
8
+ component: Button,
9
+ // More on argTypes: https://storybook.js.org/docs/angular/api/argtypes
10
+ argTypes: {
11
+ backgroundColor: { control: 'color' },
12
+ },
13
+ } as Meta;
14
+
15
+ // More on component templates: https://storybook.js.org/docs/angular/writing-stories/introduction#using-args
16
+ const Template: Story<Button> = (args: Button) => ({
17
+ props: args,
18
+ });
19
+
20
+ export const Primary = Template.bind({});
21
+ // More on args: https://storybook.js.org/docs/angular/writing-stories/args
22
+ Primary.args = {
23
+ primary: true,
24
+ label: 'Button',
25
+ };
26
+
27
+ export const Secondary = Template.bind({});
28
+ Secondary.args = {
29
+ label: 'Button',
30
+ };
31
+
32
+ export const Large = Template.bind({});
33
+ Large.args = {
34
+ size: 'large',
35
+ label: 'Button',
36
+ };
37
+
38
+ export const Small = Template.bind({});
39
+ Small.args = {
40
+ size: 'small',
41
+ label: 'Button',
42
+ };
@@ -0,0 +1,35 @@
1
+ import { moduleMetadata } from '@storybook/angular';
2
+ import { CommonModule } from '@angular/common';
3
+ import type { Story, Meta } from '@storybook/angular';
4
+
5
+ import Button from './button.component';
6
+ import Header from './header.component';
7
+
8
+ export default {
9
+ title: 'Example/Header',
10
+ component: Header,
11
+ decorators: [
12
+ moduleMetadata({
13
+ declarations: [Button],
14
+ imports: [CommonModule],
15
+ }),
16
+ ],
17
+ parameters: {
18
+ // More on Story layout: https://storybook.js.org/docs/angular/configure/story-layout
19
+ layout: 'fullscreen',
20
+ },
21
+ } as Meta;
22
+
23
+ const Template: Story<Header> = (args: Header) => ({
24
+ props: args,
25
+ });
26
+
27
+ export const LoggedIn = Template.bind({});
28
+ LoggedIn.args = {
29
+ user: {
30
+ name: 'Jane Doe',
31
+ },
32
+ };
33
+
34
+ export const LoggedOut = Template.bind({});
35
+ LoggedOut.args = {};