tuain-ng-forms-lib 14.0.0 → 14.0.2

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 (99) hide show
  1. package/.browserslistrc +16 -0
  2. package/.yarn/cache/nanoid-npm-4.0.0-924f5c6312-7d5946df5c.zip +0 -0
  3. package/.yarn/cache/tslib-npm-2.4.0-9cb6dc5030-8c4aa6a3c5.zip +0 -0
  4. package/.yarn/cache/yn-npm-5.0.0-b001dab23c-f0ec7710d3.zip +0 -0
  5. package/.yarn/install-state.gz +0 -0
  6. package/karma.conf.js +44 -0
  7. package/ng-package.json +11 -0
  8. package/package.json +2 -22
  9. package/src/lib/classes/forms/action.ts +55 -0
  10. package/src/lib/classes/forms/element.ts +98 -0
  11. package/src/lib/classes/forms/field.ts +408 -0
  12. package/src/lib/classes/forms/form.constants.ts +28 -0
  13. package/src/lib/classes/forms/form.ts +495 -0
  14. package/src/lib/classes/forms/section.ts +154 -0
  15. package/src/lib/classes/forms/subsection.ts +91 -0
  16. package/src/lib/classes/forms/table/action.ts +41 -0
  17. package/src/lib/classes/forms/table/column.ts +91 -0
  18. package/src/lib/classes/forms/table/row-data.ts +118 -0
  19. package/src/lib/classes/forms/table/table.ts +438 -0
  20. package/src/lib/components/elements/action.component.ts +53 -0
  21. package/src/lib/components/elements/field.component.ts +118 -0
  22. package/src/lib/components/elements/layout/element.component.ts +28 -0
  23. package/src/lib/components/elements/layout/form-error.component.ts +11 -0
  24. package/src/lib/components/elements/layout/form-header.component.ts +17 -0
  25. package/src/lib/components/elements/layout/section.component.ts +16 -0
  26. package/src/lib/components/elements/layout/sub-section.component.ts +17 -0
  27. package/src/lib/components/elements/tables/table-record-action.component.ts +37 -0
  28. package/src/lib/components/elements/tables/table-record-field.component.ts +19 -0
  29. package/src/lib/components/elements/tables/table.component.ts +102 -0
  30. package/src/lib/components/forms/basic-form.ts +1496 -0
  31. package/src/lib/services/event-manager.service.ts +21 -0
  32. package/src/lib/services/file-manager.service.ts +6 -0
  33. package/src/lib/services/form-manager.service.ts +89 -0
  34. package/src/lib/services/icon-dictionary.service.ts +159 -0
  35. package/src/lib/tuain-ng-forms-lib.module.ts +40 -0
  36. package/{public-api.d.ts → src/public-api.ts} +5 -0
  37. package/src/test.ts +27 -0
  38. package/tsconfig.lib.json +15 -0
  39. package/tsconfig.lib.prod.json +10 -0
  40. package/tsconfig.spec.json +17 -0
  41. package/esm2020/lib/classes/forms/action.mjs +0 -35
  42. package/esm2020/lib/classes/forms/element.mjs +0 -76
  43. package/esm2020/lib/classes/forms/field.mjs +0 -321
  44. package/esm2020/lib/classes/forms/form.constants.mjs +0 -26
  45. package/esm2020/lib/classes/forms/form.mjs +0 -422
  46. package/esm2020/lib/classes/forms/section.mjs +0 -132
  47. package/esm2020/lib/classes/forms/subsection.mjs +0 -70
  48. package/esm2020/lib/classes/forms/table/action.mjs +0 -22
  49. package/esm2020/lib/classes/forms/table/column.mjs +0 -61
  50. package/esm2020/lib/classes/forms/table/row-data.mjs +0 -111
  51. package/esm2020/lib/classes/forms/table/table.mjs +0 -372
  52. package/esm2020/lib/components/elements/action.component.mjs +0 -58
  53. package/esm2020/lib/components/elements/field.component.mjs +0 -90
  54. package/esm2020/lib/components/elements/layout/element.component.mjs +0 -31
  55. package/esm2020/lib/components/elements/layout/form-error.component.mjs +0 -20
  56. package/esm2020/lib/components/elements/layout/form-header.component.mjs +0 -30
  57. package/esm2020/lib/components/elements/layout/section.component.mjs +0 -22
  58. package/esm2020/lib/components/elements/layout/sub-section.component.mjs +0 -24
  59. package/esm2020/lib/components/elements/tables/table-record-action.component.mjs +0 -40
  60. package/esm2020/lib/components/elements/tables/table-record-field.component.mjs +0 -25
  61. package/esm2020/lib/components/elements/tables/table.component.mjs +0 -95
  62. package/esm2020/lib/components/forms/basic-form.mjs +0 -1425
  63. package/esm2020/lib/services/event-manager.service.mjs +0 -18
  64. package/esm2020/lib/services/file-manager.service.mjs +0 -6
  65. package/esm2020/lib/services/form-manager.service.mjs +0 -80
  66. package/esm2020/lib/tuain-ng-forms-lib.module.mjs +0 -71
  67. package/esm2020/public-api.mjs +0 -19
  68. package/esm2020/tuain-ng-forms-lib.mjs +0 -5
  69. package/fesm2015/tuain-ng-forms-lib.mjs +0 -3803
  70. package/fesm2015/tuain-ng-forms-lib.mjs.map +0 -1
  71. package/fesm2020/tuain-ng-forms-lib.mjs +0 -3634
  72. package/fesm2020/tuain-ng-forms-lib.mjs.map +0 -1
  73. package/lib/classes/forms/action.d.ts +0 -22
  74. package/lib/classes/forms/element.d.ts +0 -41
  75. package/lib/classes/forms/field.d.ts +0 -109
  76. package/lib/classes/forms/form.constants.d.ts +0 -25
  77. package/lib/classes/forms/form.d.ts +0 -134
  78. package/lib/classes/forms/section.d.ts +0 -39
  79. package/lib/classes/forms/subsection.d.ts +0 -26
  80. package/lib/classes/forms/table/action.d.ts +0 -20
  81. package/lib/classes/forms/table/column.d.ts +0 -33
  82. package/lib/classes/forms/table/row-data.d.ts +0 -14
  83. package/lib/classes/forms/table/table.d.ts +0 -100
  84. package/lib/components/elements/action.component.d.ts +0 -21
  85. package/lib/components/elements/field.component.d.ts +0 -43
  86. package/lib/components/elements/layout/element.component.d.ts +0 -14
  87. package/lib/components/elements/layout/form-error.component.d.ts +0 -8
  88. package/lib/components/elements/layout/form-header.component.d.ts +0 -12
  89. package/lib/components/elements/layout/section.component.d.ts +0 -10
  90. package/lib/components/elements/layout/sub-section.component.d.ts +0 -11
  91. package/lib/components/elements/tables/table-record-action.component.d.ts +0 -15
  92. package/lib/components/elements/tables/table-record-field.component.d.ts +0 -11
  93. package/lib/components/elements/tables/table.component.d.ts +0 -47
  94. package/lib/components/forms/basic-form.d.ts +0 -307
  95. package/lib/services/event-manager.service.d.ts +0 -9
  96. package/lib/services/file-manager.service.d.ts +0 -5
  97. package/lib/services/form-manager.service.d.ts +0 -28
  98. package/lib/tuain-ng-forms-lib.module.d.ts +0 -20
  99. package/tuain-ng-forms-lib.d.ts +0 -5
@@ -0,0 +1,91 @@
1
+ import { FormAction } from './action';
2
+ import { elementTypes } from './form.constants';
3
+
4
+ export class RecordFormSubSection {
5
+ visible: boolean;
6
+ _customRender: string;
7
+ subsectionId: string;
8
+ subsectionCode: string;
9
+ subsectionTitle: string;
10
+ visibleStates: string[];
11
+
12
+ subSectionElements: any[];
13
+ subSectionFields: any[];
14
+ subSectionTables: any[];
15
+ subSectionActions: any[];
16
+ elementsArray: any;
17
+
18
+ constructor(subsectionReceived, formObject) {
19
+ if (!subsectionReceived) { return; }
20
+ this._customRender = null;
21
+ this.visible = true;
22
+ this.subSectionElements = [];
23
+ this.subSectionFields = [];
24
+ this.subSectionTables = [];
25
+ this.subSectionActions = [];
26
+ this.elementsArray = {};
27
+ this.subsectionId = (subsectionReceived.subsectionId) ? subsectionReceived.subsectionId.toString() : '';
28
+ this.subsectionCode = (subsectionReceived.subsectionCode) ? subsectionReceived.subsectionCode : '';
29
+ this.subsectionTitle = (subsectionReceived.subsectionTitle) ? subsectionReceived.subsectionTitle : '';
30
+ this.visibleStates = subsectionReceived.visibleStates || [];
31
+ if (subsectionReceived.elements) {
32
+ for (const receivedElement of subsectionReceived.elements) {
33
+ let elementObject = null;
34
+ let arrayToAdd = null;
35
+ const { type, code } = receivedElement;
36
+ switch (type) {
37
+ case elementTypes.field:
38
+ elementObject = formObject.getField(code);
39
+ arrayToAdd = this.subSectionFields;
40
+ break;
41
+ case elementTypes.table:
42
+ elementObject = formObject.getTable(code);
43
+ arrayToAdd = this.subSectionTables;
44
+ break;
45
+ case elementTypes.action:
46
+ elementObject = formObject.getAction(code);
47
+ arrayToAdd = this.subSectionActions;
48
+ break;
49
+ }
50
+ if (elementObject) {
51
+ elementObject.elementType = type;
52
+ arrayToAdd.push(elementObject);
53
+ this.subSectionElements.push(elementObject);
54
+ this.elementsArray[code] = elementObject;
55
+ }
56
+ }
57
+ }
58
+ }
59
+
60
+ show() { this.visible = true; }
61
+ hide() { this.visible = false; }
62
+
63
+ get customRender() { return this._customRender; }
64
+ set customRender(customRenderName) { this._customRender = customRenderName; }
65
+
66
+ getField(name) {
67
+ return this.subSectionFields.find(fld => fld.name === name);
68
+ }
69
+
70
+ getFields() {
71
+ return this.subSectionFields;
72
+ }
73
+
74
+ getFieldNames() {
75
+ return this.subSectionFields.map(field => field.fieldCode);
76
+ }
77
+
78
+ getActions(): FormAction[] {
79
+ return this.subSectionActions;
80
+ }
81
+
82
+ getActionNames(): string[] {
83
+ return this.subSectionActions.map(action => action.actionCode);
84
+ }
85
+
86
+ viewOnState(state) {
87
+ return this.visibleStates.includes(state);
88
+ }
89
+
90
+ supportMode(state) { return this.viewOnState(state); }
91
+ }
@@ -0,0 +1,41 @@
1
+ export class TableAction {
2
+ visibleStates: string[];
3
+ enabledStates: string[];
4
+ newState: string;
5
+
6
+ actionCode: string;
7
+ actionTitle: string;
8
+ iconName: string;
9
+ actionType: string;
10
+ actionClass: string;
11
+ stateField: string;
12
+
13
+ backend: boolean;
14
+ restrictedOnField: string;
15
+ restrictedOnValue: string;
16
+ restrictedOnOperator: string;
17
+ customAttributes: any;
18
+
19
+ constructor(actionDefinition) {
20
+ this.actionCode = actionDefinition.actionCode;
21
+ this.actionTitle = actionDefinition.actionTitle;
22
+ this.iconName = actionDefinition.iconName || this.actionCode;
23
+ this.actionType = actionDefinition.actionType || 'STANDARD';
24
+ this.actionClass = actionDefinition.actionClass || 'INLINE';
25
+ this.newState = actionDefinition.newState;
26
+ this.stateField = actionDefinition.stateField || '';
27
+
28
+ this.visibleStates = actionDefinition.visibleStates || [];
29
+ this.enabledStates = actionDefinition.enabledStates || [];
30
+ this.backend = actionDefinition?.serverAction ?? false;
31
+ this.restrictedOnField = actionDefinition.fieldRestrictedCode || '';
32
+ this.restrictedOnValue = actionDefinition.valueRestricted ?? '';
33
+ this.restrictedOnOperator = actionDefinition.operatorRestricted || '';
34
+ this.customAttributes = actionDefinition?.customAttributes ?? {};
35
+ }
36
+
37
+ supportMode(state) { return this.viewOnState(state); }
38
+
39
+ viewOnState(state) { return this.visibleStates.includes(state); }
40
+ enabledOnState(state) { return this.enabledStates.includes(state); }
41
+ }
@@ -0,0 +1,91 @@
1
+ export interface FilterDef {
2
+ operators: string[];
3
+ options: any[];
4
+ }
5
+
6
+ export interface FilterSetup {
7
+ fieldCode: string;
8
+ operator: string;
9
+ values: any[];
10
+ }
11
+ export class RecordTableColumn {
12
+ _formConfig: any;
13
+ fieldCode: string;
14
+ fieldTitle: string;
15
+ fieldType: string;
16
+ fieldAlignment: string;
17
+ fieldFormat: string;
18
+ visible: boolean;
19
+ sortable: boolean;
20
+ sortDirections: string[];
21
+ customAttributes: any;
22
+ // Filtros
23
+ filterVisible: boolean = false;
24
+ filterDef: FilterDef;
25
+ filterSetup: FilterSetup;
26
+
27
+ constructor(recTableColReceived, formConfig) {
28
+ this._formConfig = formConfig;
29
+ this.filterDef = null;
30
+ if (recTableColReceived) {
31
+ this.fieldCode = recTableColReceived.fieldCode;
32
+ this.fieldTitle = recTableColReceived.fieldTitle;
33
+ this.fieldType = recTableColReceived.fieldTypeCode || this._formConfig.fieldTypes.text;
34
+ const defaultTypeAlignment = (this._formConfig.tableFieldStyles[this.fieldType] != null) ? this._formConfig.tableFieldStyles[this.fieldType]['text-align'] : 'left';
35
+ this.fieldAlignment = (recTableColReceived.alignment != null) ? recTableColReceived.alignment.toLowerCase() : defaultTypeAlignment;
36
+ this.visible = recTableColReceived?.visible ?? true;
37
+ this.sortable = recTableColReceived?.sortable ?? false;
38
+ this.sortDirections = (this.sortable) ? ['ascend', 'descend'] : [null];
39
+ this.fieldFormat = recTableColReceived.format || '';
40
+ this.customAttributes = recTableColReceived?.customAttributes ?? {};
41
+ }
42
+ }
43
+
44
+ hideFilter() {
45
+ this.filterVisible = false;
46
+ }
47
+
48
+ addFilterDefinition(filterDefinition) {
49
+ this.filterDef = {
50
+ operators: filterDefinition.operators,
51
+ options: filterDefinition.options ?? null,
52
+ };
53
+ }
54
+
55
+ get filterDefinition() {
56
+ return this.filterDef;
57
+ }
58
+
59
+ addFilter(columnValues, operator) {
60
+ this.filterSetup = {
61
+ fieldCode: this.fieldCode,
62
+ operator: operator ?? this.filterDef.operators[0],
63
+ values: columnValues,
64
+ }
65
+ }
66
+
67
+ get filter() {
68
+ return this.filterSetup;
69
+ }
70
+
71
+ removeFilter() {
72
+ this.filterSetup = null;
73
+ }
74
+
75
+ get options() {
76
+ if (this.filterDef?.operators?.length === 1 && this.filterDef?.operators[0] === 'IN') {
77
+ return this.filterDef?.options;
78
+ }
79
+ return null;
80
+ }
81
+
82
+ serSortDirections(ascend: boolean, descend: boolean) {
83
+ this.sortDirections = [];
84
+ if (ascend) {
85
+ this.sortDirections.unshift('ascend');
86
+ }
87
+ if (descend) {
88
+ this.sortDirections.unshift('descend');
89
+ }
90
+ }
91
+ }
@@ -0,0 +1,118 @@
1
+ import { RecordTableColumn } from './column';
2
+ import { operators } from '../form.constants';
3
+
4
+ export class TableRecordData {
5
+ recordId: string;
6
+ selected: boolean;
7
+ recordData: any = {};
8
+
9
+ constructor(recordReceived, recordDefinition: RecordTableColumn[], selectionFieldName = null) {
10
+ const { tableRecordId, recordData } = recordReceived;
11
+ this.recordId = tableRecordId;
12
+ this.selected = false;
13
+ this.recordData = {};
14
+ if (!recordDefinition || recordDefinition.length === 0 || !recordData || recordData.length === 0) {
15
+ return;
16
+ }
17
+ const fieldNames = recordDefinition.map(column => column.fieldCode);
18
+ if (Array.isArray(recordData)) {
19
+ const rawRecordData = recordData.filter(fieldData => fieldData.fieldCode && fieldNames.includes(fieldData.fieldCode));
20
+ rawRecordData.forEach(fieldData => {
21
+ const { fieldCode, fieldValue } = fieldData;
22
+ const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);
23
+ this.recordData[fieldCode] = fieldValue ?? '';
24
+ if (fieldCode === selectionFieldName) {
25
+ this.selected = fieldValue;
26
+ }
27
+ });
28
+ } else {
29
+ const fields = Object.keys(recordData);
30
+ fields.forEach(fieldCode => {
31
+ const fieldValue = recordData[fieldCode];
32
+ const fieldDef = recordDefinition.find(column => column.fieldCode === fieldCode);
33
+ this.recordData[fieldCode] = fieldValue ?? '';
34
+ });
35
+ }
36
+ }
37
+
38
+ toggleSelect() { this.selected = !this.selected; }
39
+ select() { this.selected = true; }
40
+ unselect() { this.selected = false; }
41
+
42
+ get recordIdKey() {
43
+ return (typeof this.recordId === 'object')
44
+ ? JSON.stringify(this.recordId) : this.recordId;
45
+ }
46
+
47
+ getFieldValue(fieldCode): any {
48
+ return (fieldCode && this.recordData) ? this.recordData[fieldCode] : null;
49
+ }
50
+
51
+ hasPattern(words, columnObj) {
52
+ if (!words || words.length === 0) {
53
+ return true;
54
+ }
55
+ for (const fieldCode in this.recordData) {
56
+ const columnDef = columnObj?.[fieldCode];
57
+ if (columnDef && columnDef?.visible && this.recordData.hasOwnProperty(fieldCode)) {
58
+ for (const word of words) {
59
+ const term = word.toUpperCase();
60
+ let fieldValue;
61
+ if (columnDef.fieldType.toUpperCase().includes('DATE')) {
62
+ fieldValue = this.recordData[fieldCode].substring(0,16);
63
+ }else {
64
+ fieldValue = this.recordData[fieldCode];
65
+ }
66
+ if (fieldValue.toString().toUpperCase().includes(term)) {
67
+ return true;
68
+ }
69
+ }
70
+ }
71
+ }
72
+ return false;
73
+ }
74
+
75
+ hasCondition(columnFilters) {
76
+ if (!columnFilters || columnFilters.length === 0) {
77
+ return true;
78
+ }
79
+ for (const condition of columnFilters) {
80
+ const { fieldCode, operator, values } = condition;
81
+ if (this.recordData.hasOwnProperty(fieldCode)) {
82
+ const fieldValue = this.recordData[fieldCode];
83
+ const stringValue = fieldValue.toString().toUpperCase();
84
+ if (operator === operators.G && fieldValue <= values[0]) {
85
+ return false;
86
+ }
87
+ if (operator === operators.L && fieldValue >= values[0]) {
88
+ return false;
89
+ }
90
+ if (operator === operators.GE && fieldValue < values[0]) {
91
+ return false;
92
+ }
93
+ if (operator === operators.LE && fieldValue > values[0]) {
94
+ return false;
95
+ }
96
+ if (operator === operators.IN && !values.includes(fieldValue)) {
97
+ return false;
98
+ }
99
+ if (operator === operators.EQ) {
100
+ return fieldValue === values[0];
101
+ }
102
+ if (operator === operators.NEQ && fieldValue === values[0]) {
103
+ return false;
104
+ }
105
+ if (operator === operators.HAS && !stringValue.includes(values[0].toString().toUpperCase())) {
106
+ return false;
107
+ }
108
+ if (operator === operators.NOTHAS && stringValue.includes(values[0].toString().toUpperCase())) {
109
+ return false;
110
+ }
111
+ if (operator === operators.BETWEEN && (fieldValue < values[0] || fieldValue > values[1])) {
112
+ return false;
113
+ }
114
+ }
115
+ }
116
+ return true;
117
+ }
118
+ }