@fad-producto-portal/ng-fad-signature-fea 1.0.0-alpha.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 (189) hide show
  1. package/README.md +24 -0
  2. package/assets/images/fad-signature-fea/document-approval-list/activeApprove.png +0 -0
  3. package/assets/images/fad-signature-fea/document-approval-list/activeReject.png +0 -0
  4. package/assets/images/fad-signature-fea/document-approval-list/inactiveApprove.png +0 -0
  5. package/assets/images/fad-signature-fea/document-approval-list/inactiveReject.png +0 -0
  6. package/assets/images/fad-signature-fea/generic-error-fea/error.svg +41 -0
  7. package/assets/images/fad-signature-fea/upload-e-signature/check-off.svg +20 -0
  8. package/assets/images/fad-signature-fea/upload-e-signature/check-on.svg +12 -0
  9. package/assets/images/fad-signature-fea/upload-e-signature/file.svg +1 -0
  10. package/assets/images/fad-signature-fea/upload-e-signature/upload.svg +1 -0
  11. package/esm2022/fad-producto-portal-ng-fad-signature-fea.mjs +5 -0
  12. package/esm2022/lib/components/document-approval-list/document-approval-list.component.mjs +237 -0
  13. package/esm2022/lib/components/generic-error-fea/generic-error-fea.component.mjs +28 -0
  14. package/esm2022/lib/components/upload-e-signature/upload-e-signature.component.mjs +252 -0
  15. package/esm2022/lib/components/validate-rfc/validate-rfc.component.mjs +91 -0
  16. package/esm2022/lib/components/validate-signature/validate-signature.component.mjs +76 -0
  17. package/esm2022/lib/constants/configuration/document-approval-list/document-approval-lis-tconfiguration.const.mjs +18 -0
  18. package/esm2022/lib/constants/configuration/document-approval-list/index.mjs +2 -0
  19. package/esm2022/lib/constants/configuration/generic-error-fea/configuration-generic-error-fea.const.mjs +15 -0
  20. package/esm2022/lib/constants/configuration/generic-error-fea/index.mjs +2 -0
  21. package/esm2022/lib/constants/configuration/index.mjs +6 -0
  22. package/esm2022/lib/constants/configuration/upload-e-signature/configuration-upload-e-signature.const.mjs +93 -0
  23. package/esm2022/lib/constants/configuration/upload-e-signature/index.mjs +2 -0
  24. package/esm2022/lib/constants/configuration/validate-rfc/configuration-validate-rfc.const.mjs +18 -0
  25. package/esm2022/lib/constants/configuration/validate-rfc/index.mjs +2 -0
  26. package/esm2022/lib/constants/configuration/validate-signature/index.mjs +2 -0
  27. package/esm2022/lib/constants/configuration/validate-signature/validate-signature.const.mjs +15 -0
  28. package/esm2022/lib/constants/errors/document-approval-list/document-approval-list-error-code.mjs +7 -0
  29. package/esm2022/lib/constants/errors/document-approval-list/document-approval-list-error-description.mjs +13 -0
  30. package/esm2022/lib/constants/errors/document-approval-list/index.mjs +3 -0
  31. package/esm2022/lib/constants/errors/generic-error-fea/generic-error-fea-error-code.mjs +4 -0
  32. package/esm2022/lib/constants/errors/generic-error-fea/generic-error-fea-error-description.mjs +7 -0
  33. package/esm2022/lib/constants/errors/generic-error-fea/index.mjs +3 -0
  34. package/esm2022/lib/constants/errors/index.mjs +6 -0
  35. package/esm2022/lib/constants/errors/upload-e-signature/index.mjs +3 -0
  36. package/esm2022/lib/constants/errors/upload-e-signature/upload-e-signature-error-code.mjs +13 -0
  37. package/esm2022/lib/constants/errors/upload-e-signature/upload-e-signature-error-description.mjs +25 -0
  38. package/esm2022/lib/constants/errors/validate-rfc/index.mjs +3 -0
  39. package/esm2022/lib/constants/errors/validate-rfc/validate-rfc-error-code.mjs +6 -0
  40. package/esm2022/lib/constants/errors/validate-rfc/validate-rfc-error-description.mjs +11 -0
  41. package/esm2022/lib/constants/errors/validate-signature/index.mjs +3 -0
  42. package/esm2022/lib/constants/errors/validate-signature/validate-signature-error-code.mjs +8 -0
  43. package/esm2022/lib/constants/errors/validate-signature/validate-signature-error-description.mjs +15 -0
  44. package/esm2022/lib/constants/index.mjs +3 -0
  45. package/esm2022/lib/models/components/document-approval-list/document-approval-fea.interface.mjs +2 -0
  46. package/esm2022/lib/models/components/document-approval-list/index.mjs +2 -0
  47. package/esm2022/lib/models/components/index.mjs +3 -0
  48. package/esm2022/lib/models/components/upload-e-signature/certificate.interface.mjs +2 -0
  49. package/esm2022/lib/models/components/upload-e-signature/index.mjs +3 -0
  50. package/esm2022/lib/models/components/upload-e-signature/upload-e-signature-complete.interface.mjs +2 -0
  51. package/esm2022/lib/models/configuration/document-approval-list/document-approval-list.interface.mjs +2 -0
  52. package/esm2022/lib/models/configuration/document-approval-list/index.mjs +2 -0
  53. package/esm2022/lib/models/configuration/generic-error-fea/generic-error-fea-configuration.interface.mjs +2 -0
  54. package/esm2022/lib/models/configuration/generic-error-fea/index.mjs +2 -0
  55. package/esm2022/lib/models/configuration/index.mjs +6 -0
  56. package/esm2022/lib/models/configuration/upload-e-signature/index.mjs +2 -0
  57. package/esm2022/lib/models/configuration/upload-e-signature/upload-e-signature-configuration.interface.mjs +2 -0
  58. package/esm2022/lib/models/configuration/validate-rfc/index.mjs +2 -0
  59. package/esm2022/lib/models/configuration/validate-rfc/validate-rfc-configuration.interface.mjs +2 -0
  60. package/esm2022/lib/models/configuration/validate-signature/index.mjs +2 -0
  61. package/esm2022/lib/models/configuration/validate-signature/validate-signature-configuration.interface.mjs +2 -0
  62. package/esm2022/lib/models/customization/index.mjs +3 -0
  63. package/esm2022/lib/models/customization/legends/document-approval-list/document-approval-list-legends.interface.mjs +2 -0
  64. package/esm2022/lib/models/customization/legends/document-approval-list/index.mjs +2 -0
  65. package/esm2022/lib/models/customization/legends/generic-error-fea/generic-error-fea-legends.interface.mjs +2 -0
  66. package/esm2022/lib/models/customization/legends/generic-error-fea/index.mjs +2 -0
  67. package/esm2022/lib/models/customization/legends/index.mjs +6 -0
  68. package/esm2022/lib/models/customization/legends/upload-e-signature/index.mjs +2 -0
  69. package/esm2022/lib/models/customization/legends/upload-e-signature/upload-e-signature-legends.interface.mjs +2 -0
  70. package/esm2022/lib/models/customization/legends/validate-rfc/index.mjs +2 -0
  71. package/esm2022/lib/models/customization/legends/validate-rfc/validate-rfc-legends.interface.mjs +2 -0
  72. package/esm2022/lib/models/customization/legends/validate-signature/index.mjs +2 -0
  73. package/esm2022/lib/models/customization/legends/validate-signature/validate-signature-legends.interface.mjs +2 -0
  74. package/esm2022/lib/models/customization/style/document-approval-list/document-approval-list-style.interface.mjs +2 -0
  75. package/esm2022/lib/models/customization/style/document-approval-list/index.mjs +2 -0
  76. package/esm2022/lib/models/customization/style/generic-error-fea/generic-error-fea-style.interface.mjs +2 -0
  77. package/esm2022/lib/models/customization/style/generic-error-fea/index.mjs +2 -0
  78. package/esm2022/lib/models/customization/style/index.mjs +6 -0
  79. package/esm2022/lib/models/customization/style/upload-e-signature/index.mjs +2 -0
  80. package/esm2022/lib/models/customization/style/upload-e-signature/upload-e-signature-style.interface.mjs +2 -0
  81. package/esm2022/lib/models/customization/style/validate-rfc/index.mjs +2 -0
  82. package/esm2022/lib/models/customization/style/validate-rfc/validate-rfc-style.interface.mjs +2 -0
  83. package/esm2022/lib/models/customization/style/validate-signature/index.mjs +2 -0
  84. package/esm2022/lib/models/customization/style/validate-signature/validate-signature-style.interface.mjs +2 -0
  85. package/esm2022/lib/models/index.mjs +6 -0
  86. package/esm2022/lib/models/path-dependencies/document-approval-list/document-approval-list-dependencies.interface.mjs +2 -0
  87. package/esm2022/lib/models/path-dependencies/document-approval-list/index.mjs +2 -0
  88. package/esm2022/lib/models/path-dependencies/generic-error-fea/generic-error-fea-dependencies.interface.mjs +2 -0
  89. package/esm2022/lib/models/path-dependencies/generic-error-fea/index.mjs +2 -0
  90. package/esm2022/lib/models/path-dependencies/index.mjs +6 -0
  91. package/esm2022/lib/models/path-dependencies/upload-e-signature/index.mjs +2 -0
  92. package/esm2022/lib/models/path-dependencies/upload-e-signature/upload-e-signature-dependencies.interface.mjs +2 -0
  93. package/esm2022/lib/models/path-dependencies/validate-rfc/index.mjs +2 -0
  94. package/esm2022/lib/models/path-dependencies/validate-rfc/validate-rfc-dependencies.interface.mjs +2 -0
  95. package/esm2022/lib/models/path-dependencies/validate-signature/index.mjs +2 -0
  96. package/esm2022/lib/models/path-dependencies/validate-signature/validate-signature-dependencies.interface.mjs +2 -0
  97. package/esm2022/lib/ng-fad-signature-fea.module.mjs +61 -0
  98. package/esm2022/public-api.mjs +15 -0
  99. package/fesm2022/fad-producto-portal-ng-fad-signature-fea.mjs +976 -0
  100. package/fesm2022/fad-producto-portal-ng-fad-signature-fea.mjs.map +1 -0
  101. package/index.d.ts +5 -0
  102. package/lib/components/document-approval-list/document-approval-list.component.d.ts +62 -0
  103. package/lib/components/generic-error-fea/generic-error-fea.component.d.ts +13 -0
  104. package/lib/components/upload-e-signature/upload-e-signature.component.d.ts +52 -0
  105. package/lib/components/validate-rfc/validate-rfc.component.d.ts +29 -0
  106. package/lib/components/validate-signature/validate-signature.component.d.ts +22 -0
  107. package/lib/constants/configuration/document-approval-list/document-approval-lis-tconfiguration.const.d.ts +2 -0
  108. package/lib/constants/configuration/document-approval-list/index.d.ts +1 -0
  109. package/lib/constants/configuration/generic-error-fea/configuration-generic-error-fea.const.d.ts +2 -0
  110. package/lib/constants/configuration/generic-error-fea/index.d.ts +1 -0
  111. package/lib/constants/configuration/index.d.ts +5 -0
  112. package/lib/constants/configuration/upload-e-signature/configuration-upload-e-signature.const.d.ts +2 -0
  113. package/lib/constants/configuration/upload-e-signature/index.d.ts +1 -0
  114. package/lib/constants/configuration/validate-rfc/configuration-validate-rfc.const.d.ts +2 -0
  115. package/lib/constants/configuration/validate-rfc/index.d.ts +1 -0
  116. package/lib/constants/configuration/validate-signature/index.d.ts +1 -0
  117. package/lib/constants/configuration/validate-signature/validate-signature.const.d.ts +2 -0
  118. package/lib/constants/errors/document-approval-list/document-approval-list-error-code.d.ts +5 -0
  119. package/lib/constants/errors/document-approval-list/document-approval-list-error-description.d.ts +2 -0
  120. package/lib/constants/errors/document-approval-list/index.d.ts +2 -0
  121. package/lib/constants/errors/generic-error-fea/generic-error-fea-error-code.d.ts +2 -0
  122. package/lib/constants/errors/generic-error-fea/generic-error-fea-error-description.d.ts +2 -0
  123. package/lib/constants/errors/generic-error-fea/index.d.ts +2 -0
  124. package/lib/constants/errors/index.d.ts +5 -0
  125. package/lib/constants/errors/upload-e-signature/index.d.ts +2 -0
  126. package/lib/constants/errors/upload-e-signature/upload-e-signature-error-code.d.ts +11 -0
  127. package/lib/constants/errors/upload-e-signature/upload-e-signature-error-description.d.ts +2 -0
  128. package/lib/constants/errors/validate-rfc/index.d.ts +2 -0
  129. package/lib/constants/errors/validate-rfc/validate-rfc-error-code.d.ts +4 -0
  130. package/lib/constants/errors/validate-rfc/validate-rfc-error-description.d.ts +2 -0
  131. package/lib/constants/errors/validate-signature/index.d.ts +2 -0
  132. package/lib/constants/errors/validate-signature/validate-signature-error-code.d.ts +6 -0
  133. package/lib/constants/errors/validate-signature/validate-signature-error-description.d.ts +2 -0
  134. package/lib/constants/index.d.ts +2 -0
  135. package/lib/models/components/document-approval-list/document-approval-fea.interface.d.ts +8 -0
  136. package/lib/models/components/document-approval-list/index.d.ts +1 -0
  137. package/lib/models/components/index.d.ts +2 -0
  138. package/lib/models/components/upload-e-signature/certificate.interface.d.ts +5 -0
  139. package/lib/models/components/upload-e-signature/index.d.ts +2 -0
  140. package/lib/models/components/upload-e-signature/upload-e-signature-complete.interface.d.ts +4 -0
  141. package/lib/models/configuration/document-approval-list/document-approval-list.interface.d.ts +8 -0
  142. package/lib/models/configuration/document-approval-list/index.d.ts +1 -0
  143. package/lib/models/configuration/generic-error-fea/generic-error-fea-configuration.interface.d.ts +5 -0
  144. package/lib/models/configuration/generic-error-fea/index.d.ts +1 -0
  145. package/lib/models/configuration/index.d.ts +5 -0
  146. package/lib/models/configuration/upload-e-signature/index.d.ts +1 -0
  147. package/lib/models/configuration/upload-e-signature/upload-e-signature-configuration.interface.d.ts +14 -0
  148. package/lib/models/configuration/validate-rfc/index.d.ts +1 -0
  149. package/lib/models/configuration/validate-rfc/validate-rfc-configuration.interface.d.ts +9 -0
  150. package/lib/models/configuration/validate-signature/index.d.ts +1 -0
  151. package/lib/models/configuration/validate-signature/validate-signature-configuration.interface.d.ts +9 -0
  152. package/lib/models/customization/index.d.ts +2 -0
  153. package/lib/models/customization/legends/document-approval-list/document-approval-list-legends.interface.d.ts +8 -0
  154. package/lib/models/customization/legends/document-approval-list/index.d.ts +1 -0
  155. package/lib/models/customization/legends/generic-error-fea/generic-error-fea-legends.interface.d.ts +5 -0
  156. package/lib/models/customization/legends/generic-error-fea/index.d.ts +1 -0
  157. package/lib/models/customization/legends/index.d.ts +5 -0
  158. package/lib/models/customization/legends/upload-e-signature/index.d.ts +1 -0
  159. package/lib/models/customization/legends/upload-e-signature/upload-e-signature-legends.interface.d.ts +54 -0
  160. package/lib/models/customization/legends/validate-rfc/index.d.ts +1 -0
  161. package/lib/models/customization/legends/validate-rfc/validate-rfc-legends.interface.d.ts +6 -0
  162. package/lib/models/customization/legends/validate-signature/index.d.ts +1 -0
  163. package/lib/models/customization/legends/validate-signature/validate-signature-legends.interface.d.ts +3 -0
  164. package/lib/models/customization/style/document-approval-list/document-approval-list-style.interface.d.ts +2 -0
  165. package/lib/models/customization/style/document-approval-list/index.d.ts +1 -0
  166. package/lib/models/customization/style/generic-error-fea/generic-error-fea-style.interface.d.ts +2 -0
  167. package/lib/models/customization/style/generic-error-fea/index.d.ts +1 -0
  168. package/lib/models/customization/style/index.d.ts +5 -0
  169. package/lib/models/customization/style/upload-e-signature/index.d.ts +1 -0
  170. package/lib/models/customization/style/upload-e-signature/upload-e-signature-style.interface.d.ts +22 -0
  171. package/lib/models/customization/style/validate-rfc/index.d.ts +1 -0
  172. package/lib/models/customization/style/validate-rfc/validate-rfc-style.interface.d.ts +2 -0
  173. package/lib/models/customization/style/validate-signature/index.d.ts +1 -0
  174. package/lib/models/customization/style/validate-signature/validate-signature-style.interface.d.ts +2 -0
  175. package/lib/models/index.d.ts +5 -0
  176. package/lib/models/path-dependencies/document-approval-list/document-approval-list-dependencies.interface.d.ts +9 -0
  177. package/lib/models/path-dependencies/document-approval-list/index.d.ts +1 -0
  178. package/lib/models/path-dependencies/generic-error-fea/generic-error-fea-dependencies.interface.d.ts +6 -0
  179. package/lib/models/path-dependencies/generic-error-fea/index.d.ts +1 -0
  180. package/lib/models/path-dependencies/index.d.ts +5 -0
  181. package/lib/models/path-dependencies/upload-e-signature/index.d.ts +1 -0
  182. package/lib/models/path-dependencies/upload-e-signature/upload-e-signature-dependencies.interface.d.ts +9 -0
  183. package/lib/models/path-dependencies/validate-rfc/index.d.ts +1 -0
  184. package/lib/models/path-dependencies/validate-rfc/validate-rfc-dependencies.interface.d.ts +4 -0
  185. package/lib/models/path-dependencies/validate-signature/index.d.ts +1 -0
  186. package/lib/models/path-dependencies/validate-signature/validate-signature-dependencies.interface.d.ts +4 -0
  187. package/lib/ng-fad-signature-fea.module.d.ts +16 -0
  188. package/package.json +31 -0
  189. package/public-api.d.ts +8 -0
@@ -0,0 +1,976 @@
1
+ import * as i0 from '@angular/core';
2
+ import { EventEmitter, Component, Input, Output, ViewChild, NgModule } from '@angular/core';
3
+ import * as i3 from '@angular/common';
4
+ import { CommonModule } from '@angular/common';
5
+ import * as i1 from '@angular/forms';
6
+ import { Validators, ReactiveFormsModule } from '@angular/forms';
7
+ import * as i5 from '@fad-producto-portal/ng-fad-shared';
8
+ import { ResponseError, SharedUtils, NgFadSharedModule } from '@fad-producto-portal/ng-fad-shared';
9
+ import * as i4 from '@fad-producto/ng-fad-image-inline';
10
+ import { NgFadImageInlineModule } from '@fad-producto/ng-fad-image-inline';
11
+ import * as i5$1 from '@fad-producto-portal/ng-fad-viewer';
12
+ import { GeneralPdfViewerComponent, NgFadViewerModule } from '@fad-producto-portal/ng-fad-viewer';
13
+ import { Utils } from '@fad-producto-portal/fad-common/utils/utils';
14
+ import { Configuration } from '@fad-producto-portal/fad-common/models/core';
15
+ import * as i2 from '@angular/router';
16
+ import * as i2$1 from '@fad-producto-portal/ng-fad-services';
17
+ import { finalize } from 'rxjs';
18
+ import * as i2$2 from '@fad-producto/ng-fad-pdf-reader';
19
+ import { NgFadPdfReaderService } from '@fad-producto/ng-fad-pdf-reader';
20
+
21
+ const DOCUMENT_APPROVAL_LIST_DEFAULT = {
22
+ customization: {
23
+ moduleCustomization: {
24
+ style: {},
25
+ legends: {
26
+ sendTo: 'Enviado por',
27
+ seeDocument: 'Ver documento',
28
+ hideDocument: 'Ocultar documento',
29
+ download: 'Descargar',
30
+ pages: 'Páginas'
31
+ }
32
+ }
33
+ },
34
+ pathDependencies: {
35
+ imageDirectory: 'assets/images/fad-signature-fea/document-approval-list/',
36
+ }
37
+ };
38
+
39
+ const GENERIC_ERROR_FEA_CONFIGURATION_DEFAULT = {
40
+ customization: {
41
+ moduleCustomization: {
42
+ style: {},
43
+ legends: {
44
+ title: 'Aviso',
45
+ instruction: 'No existe un documento que corresponda a este URL (la dirección web). Si copiaste y pegaste la dirección, es posible que hayas cometido un error. Asegúrate de que no sobren o falten caracteres e intenta nuevamente.'
46
+ }
47
+ }
48
+ },
49
+ pathDependencies: {
50
+ imageDirectory: 'assets/images/fad-signature-fea/generic-error-fea/',
51
+ }
52
+ };
53
+
54
+ const UPLOAD_E_SIGNATURE_CONFIGURATION_DEFAULT = {
55
+ services: {
56
+ reject: { loader: true, error: true },
57
+ sign: { loader: true, error: true }
58
+ },
59
+ credentials: {
60
+ key: 'JJQUfgm0i5MJ70NI',
61
+ iv: 'uxQKO3FiCiht0uVU'
62
+ },
63
+ customization: {
64
+ moduleCustomization: {
65
+ style: {
66
+ documents: {
67
+ backgroundColor: '#f5f5f5',
68
+ borderRadius: '15px'
69
+ },
70
+ upload: {
71
+ backgroundColor: '#f4f6fa',
72
+ borderRadius: '10px',
73
+ border: '2px dashed var(--fad-portal-common-legends-tertiary)',
74
+ button: {
75
+ backgroundColor: '#e3e7f0',
76
+ borderRadius: '50px',
77
+ hover: '#cbd7f5'
78
+ }
79
+ },
80
+ file: {
81
+ borderRadius: '10px',
82
+ img: {
83
+ backgroundColor: '#f5f5f5'
84
+ }
85
+ }
86
+ },
87
+ legends: {
88
+ documents: {
89
+ pages: {
90
+ singular: 'Página',
91
+ plural: 'Páginas'
92
+ },
93
+ status: {
94
+ approved: 'Aprobado',
95
+ rejected: 'Rechazado'
96
+ },
97
+ title: {
98
+ plural: 'Documentos para enviar (#TOTAL_DOCS)',
99
+ singular: 'Documento #STATUS_DOC para firma',
100
+ approved: 'aprobado',
101
+ rejected: 'rechazado'
102
+ }
103
+ },
104
+ eSignature: {
105
+ cer: {
106
+ instruction: 'Selecciona o arrastra el archivo .CER',
107
+ label: 'Certificado .CER',
108
+ upload: 'Subir .CER'
109
+ },
110
+ key: {
111
+ instruction: 'Selecciona o arrastra el archivo .KEY',
112
+ label: 'Llave privada .KEY',
113
+ upload: 'Subir .KEY'
114
+ },
115
+ password: {
116
+ hide: 'OCULTAR',
117
+ label: 'Ingresa la contraseña de tu e.firma',
118
+ show: 'MOSTRAR'
119
+ },
120
+ title: 'Ingresa tu e.firma para firmar los documentos',
121
+ upload: 'Seleccionar otro archivo'
122
+ },
123
+ sign: {
124
+ button: {
125
+ reject: {
126
+ plural: 'Rechazar documentos',
127
+ singular: 'Rechazar documento'
128
+ },
129
+ sign: {
130
+ plural: 'Firmar documentos',
131
+ singular: 'Firmar documento'
132
+ }
133
+ },
134
+ validate: {
135
+ plural: 'Valido que he leído y he aceptado firmar los documentos',
136
+ singular: 'Valido que he leído y he aceptado firmar el documento'
137
+ }
138
+ }
139
+ }
140
+ }
141
+ },
142
+ pathDependencies: {
143
+ imageDirectory: 'assets/images/fad-signature-fea/upload-e-signature/',
144
+ }
145
+ };
146
+
147
+ const SIGNATURE_FEA_CONFIGURATION_DEFAULT = {
148
+ maxCharacters: 13,
149
+ regexRFC: '^[A-ZÑ&]{3,4}[0-9]{6}[A-V1-9][A-Z1-9][0-9A]$',
150
+ customization: {
151
+ moduleCustomization: {
152
+ style: {},
153
+ legends: {
154
+ title: 'Código de validación',
155
+ description: 'Ingresa tu RFC para comenzar la firma',
156
+ buttonLegend: 'Validar'
157
+ }
158
+ }
159
+ },
160
+ pathDependencies: {
161
+ imageDirectory: 'assets/images/fad-signature-fea/validate-rfc/',
162
+ }
163
+ };
164
+
165
+ const VALIDATE_SIGNATURE_CONFIGURATION_DEFAULT = {
166
+ services: {
167
+ signerStatusFea: { loader: true, error: true }
168
+ },
169
+ customization: {
170
+ moduleCustomization: {
171
+ style: {},
172
+ legends: {}
173
+ }
174
+ },
175
+ pathDependencies: {
176
+ imageDirectory: 'assets/images/fad-signature-fea/validate-signature/',
177
+ }
178
+ };
179
+
180
+ var DocumentApprovalListErrorCode;
181
+ (function (DocumentApprovalListErrorCode) {
182
+ DocumentApprovalListErrorCode[DocumentApprovalListErrorCode["SERVICE"] = -1] = "SERVICE";
183
+ DocumentApprovalListErrorCode[DocumentApprovalListErrorCode["HTTP"] = -2] = "HTTP";
184
+ DocumentApprovalListErrorCode[DocumentApprovalListErrorCode["ERROR_PDF"] = -3] = "ERROR_PDF";
185
+ })(DocumentApprovalListErrorCode || (DocumentApprovalListErrorCode = {}));
186
+
187
+ const getDocumentApprovalListErrorDescription = (code) => {
188
+ switch (code) {
189
+ case -1:
190
+ return "Service error";
191
+ case -2:
192
+ return "HTTP error";
193
+ case -3:
194
+ return "PDF error";
195
+ default:
196
+ return 'Unknown error';
197
+ }
198
+ };
199
+
200
+ var GenericErrorFeaErrorCode;
201
+ (function (GenericErrorFeaErrorCode) {
202
+ })(GenericErrorFeaErrorCode || (GenericErrorFeaErrorCode = {}));
203
+
204
+ const getGenericErrorFeaErrorDescription = (code) => {
205
+ switch (code) {
206
+ default:
207
+ return 'Unknown error';
208
+ }
209
+ };
210
+
211
+ var UploadESignatureErrorCode;
212
+ (function (UploadESignatureErrorCode) {
213
+ UploadESignatureErrorCode[UploadESignatureErrorCode["SERVICE"] = -1] = "SERVICE";
214
+ UploadESignatureErrorCode[UploadESignatureErrorCode["HTTP"] = -2] = "HTTP";
215
+ UploadESignatureErrorCode[UploadESignatureErrorCode["NO_DOCUMENTS"] = -3] = "NO_DOCUMENTS";
216
+ UploadESignatureErrorCode[UploadESignatureErrorCode["FORMAT_CER"] = -4] = "FORMAT_CER";
217
+ UploadESignatureErrorCode[UploadESignatureErrorCode["FORMAT_KEY"] = -5] = "FORMAT_KEY";
218
+ UploadESignatureErrorCode[UploadESignatureErrorCode["MULTIPLE_FILES"] = -6] = "MULTIPLE_FILES";
219
+ UploadESignatureErrorCode[UploadESignatureErrorCode["ERROR_BASE_64"] = -7] = "ERROR_BASE_64";
220
+ UploadESignatureErrorCode[UploadESignatureErrorCode["NO_SIGNER_ID"] = -8] = "NO_SIGNER_ID";
221
+ UploadESignatureErrorCode[UploadESignatureErrorCode["NO_RFC"] = -9] = "NO_RFC";
222
+ })(UploadESignatureErrorCode || (UploadESignatureErrorCode = {}));
223
+
224
+ const getUploadESignatureErrorDescription = (code) => {
225
+ switch (code) {
226
+ case -1:
227
+ return "Service error";
228
+ case -2:
229
+ return "HTTP error";
230
+ case -3:
231
+ return "Los documentos a procesar son requeridos";
232
+ case -4:
233
+ return "El formato del archivo seleccionado no es .cer";
234
+ case -5:
235
+ return "El formato del archivo seleccionado no es .key";
236
+ case -6:
237
+ return "Solo puedes seleccionar un archivo";
238
+ case -7:
239
+ return "Error al convertir el archivo a base 64";
240
+ case -8:
241
+ return "El ID del firmante es requerido";
242
+ case -9:
243
+ return "El RFC del firmante es requerido";
244
+ default:
245
+ return 'Unknown error';
246
+ }
247
+ };
248
+
249
+ var ValidateRFCErrorCode;
250
+ (function (ValidateRFCErrorCode) {
251
+ ValidateRFCErrorCode[ValidateRFCErrorCode["SERVICE"] = -1] = "SERVICE";
252
+ ValidateRFCErrorCode[ValidateRFCErrorCode["HTTP"] = -2] = "HTTP";
253
+ })(ValidateRFCErrorCode || (ValidateRFCErrorCode = {}));
254
+
255
+ const getValidateRFCErrorDescription = (code) => {
256
+ switch (code) {
257
+ case -1:
258
+ return "Service error";
259
+ case -2:
260
+ return "HTTP error";
261
+ default:
262
+ return 'Unknown error';
263
+ }
264
+ };
265
+
266
+ var ValidateSignatureErrorCode;
267
+ (function (ValidateSignatureErrorCode) {
268
+ ValidateSignatureErrorCode[ValidateSignatureErrorCode["SERVICE"] = -1] = "SERVICE";
269
+ ValidateSignatureErrorCode[ValidateSignatureErrorCode["HTTP"] = -2] = "HTTP";
270
+ ValidateSignatureErrorCode[ValidateSignatureErrorCode["NO_REQUISITION_ID"] = -3] = "NO_REQUISITION_ID";
271
+ ValidateSignatureErrorCode[ValidateSignatureErrorCode["NO_SIGNER_ID"] = -4] = "NO_SIGNER_ID";
272
+ })(ValidateSignatureErrorCode || (ValidateSignatureErrorCode = {}));
273
+
274
+ const getValidateSignatureErrorDescription = (code) => {
275
+ switch (code) {
276
+ case -1:
277
+ return "Service error";
278
+ case -2:
279
+ return "HTTP error";
280
+ case -2:
281
+ return "Requisition ID is required";
282
+ case -3:
283
+ return "Signer ID is required";
284
+ default:
285
+ return 'Unknown error';
286
+ }
287
+ };
288
+
289
+ class ValidateRfcComponent {
290
+ constructor(fb, hostContext, route, fadService) {
291
+ this.fb = fb;
292
+ this.hostContext = hostContext;
293
+ this.route = route;
294
+ this.fadService = fadService;
295
+ this.onerror = new EventEmitter();
296
+ this.onevent = new EventEmitter();
297
+ this.showComponent = true;
298
+ this.requisitionId = '';
299
+ this.signerId = '';
300
+ }
301
+ ngOnInit() {
302
+ this.setCustomizationStyle(this.hostContext.nativeElement);
303
+ this.initializeForm();
304
+ this.route.queryParams.subscribe(params => {
305
+ this.requisitionId = params['req'];
306
+ this.signerId = params['sign'];
307
+ console.log(this.requisitionId, this.signerId);
308
+ });
309
+ }
310
+ initializeForm() {
311
+ const maxCharacters = this.configuration?.maxCharacters || 13;
312
+ const rfcRegex = new RegExp(this.configuration?.regexRFC);
313
+ this.validationForm = this.fb.group({
314
+ code: ['', [
315
+ Validators.required,
316
+ Validators.minLength(maxCharacters),
317
+ Validators.maxLength(maxCharacters),
318
+ Validators.pattern(rfcRegex)
319
+ ]]
320
+ });
321
+ }
322
+ onSubmit() {
323
+ this.validateRFC();
324
+ }
325
+ setCustomizationStyle(targetElement = document.documentElement) {
326
+ this.configuration = Utils.mergeConfiguration(new Configuration(), SIGNATURE_FEA_CONFIGURATION_DEFAULT, this.configuration);
327
+ }
328
+ validateRFC() {
329
+ if (this.validationForm.valid) {
330
+ console.error("Validar rfc ");
331
+ const validateReq = {
332
+ requisitionId: this.requisitionId,
333
+ signerId: this.signerId,
334
+ rfc: this.codeControl?.value
335
+ };
336
+ this.fadService.validateRfc(validateReq).subscribe({
337
+ next: (response) => {
338
+ if (response.success) {
339
+ this.onevent.emit(response);
340
+ }
341
+ else {
342
+ this.onerror.emit(new ResponseError(ValidateRFCErrorCode.SERVICE, getValidateRFCErrorDescription(ValidateRFCErrorCode.SERVICE), 'ng-fad-portal-signature-fea-validate-rfc'));
343
+ }
344
+ },
345
+ error: (error) => {
346
+ this.onerror.emit(new ResponseError(ValidateRFCErrorCode.HTTP, getValidateRFCErrorDescription(ValidateRFCErrorCode.HTTP), 'ng-fad-portal-signature-fea-validate-rfc'));
347
+ }
348
+ });
349
+ }
350
+ }
351
+ get codeControl() {
352
+ return this.validationForm.get('code') ?? null;
353
+ }
354
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidateRfcComponent, deps: [{ token: i1.FormBuilder }, { token: i0.ElementRef }, { token: i2.ActivatedRoute }, { token: i2$1.FadService }], target: i0.ɵɵFactoryTarget.Component }); }
355
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ValidateRfcComponent, selector: "ng-fad-signature-fea-validate-rfc", inputs: { configuration: "configuration" }, outputs: { onerror: "onerror", onevent: "onevent" }, ngImport: i0, template: "<div class=\"validation-container fad-container\" *ngIf=\"showComponent\">\r\n <div class=\"title\">{{ configuration.customization?.moduleCustomization?.legends?.title }}</div>\r\n <div class=\"fad-portal-subtitle\">{{ configuration.customization?.moduleCustomization?.legends?.description }}</div>\r\n <form [formGroup]=\"validationForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"fad-portal-container-input\">\r\n <input id=\"code\" type=\"text\" formControlName=\"code\" maxlength=\"{{ configuration.maxCharacters || 13 }}\" />\r\n </div>\r\n <ng-fad-portal-shared-form-errors \r\n [formData]=\"codeControl!\" \r\n [configuration]=\"configuration.formErrors?.configuration!\">\r\n </ng-fad-portal-shared-form-errors>\r\n\r\n <button type=\"submit\" class=\"fad-portal-primary\" [disabled]=\"validationForm.invalid\">\r\n {{ configuration.customization?.moduleCustomization?.legends?.buttonLegend }}\r\n </button>\r\n </form>\r\n</div>\r\n", styles: [".validation-container{width:100%;display:flex;flex-direction:column;align-items:start;row-gap:var(--fad-portal-common-separation-md)}@media (max-width: 992px){.validation-container{width:100%;align-items:center}}.validation-container .title{font-family:var(--fad-portal-common-title-font-family);font-size:var(--fad-portal-common-title-font-size)}.validation-container form{display:flex;flex-direction:column;width:100%}.validation-container form .fad-portal-container-input{display:flex;flex-direction:column;row-gap:var(--fad-portal-common-separation-xs)}.validation-container form .error-message{color:var(--fad-portal-common-error-color)}.validation-container form button{margin-top:var(--fad-portal-common-separation-md);cursor:pointer}.validation-container form button:disabled{cursor:auto}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5.FormErrorsComponent, selector: "ng-fad-portal-shared-form-errors", inputs: ["configuration", "formData"], outputs: ["onerror"] }] }); }
356
+ }
357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidateRfcComponent, decorators: [{
358
+ type: Component,
359
+ args: [{ selector: 'ng-fad-signature-fea-validate-rfc', template: "<div class=\"validation-container fad-container\" *ngIf=\"showComponent\">\r\n <div class=\"title\">{{ configuration.customization?.moduleCustomization?.legends?.title }}</div>\r\n <div class=\"fad-portal-subtitle\">{{ configuration.customization?.moduleCustomization?.legends?.description }}</div>\r\n <form [formGroup]=\"validationForm\" (ngSubmit)=\"onSubmit()\">\r\n <div class=\"fad-portal-container-input\">\r\n <input id=\"code\" type=\"text\" formControlName=\"code\" maxlength=\"{{ configuration.maxCharacters || 13 }}\" />\r\n </div>\r\n <ng-fad-portal-shared-form-errors \r\n [formData]=\"codeControl!\" \r\n [configuration]=\"configuration.formErrors?.configuration!\">\r\n </ng-fad-portal-shared-form-errors>\r\n\r\n <button type=\"submit\" class=\"fad-portal-primary\" [disabled]=\"validationForm.invalid\">\r\n {{ configuration.customization?.moduleCustomization?.legends?.buttonLegend }}\r\n </button>\r\n </form>\r\n</div>\r\n", styles: [".validation-container{width:100%;display:flex;flex-direction:column;align-items:start;row-gap:var(--fad-portal-common-separation-md)}@media (max-width: 992px){.validation-container{width:100%;align-items:center}}.validation-container .title{font-family:var(--fad-portal-common-title-font-family);font-size:var(--fad-portal-common-title-font-size)}.validation-container form{display:flex;flex-direction:column;width:100%}.validation-container form .fad-portal-container-input{display:flex;flex-direction:column;row-gap:var(--fad-portal-common-separation-xs)}.validation-container form .error-message{color:var(--fad-portal-common-error-color)}.validation-container form button{margin-top:var(--fad-portal-common-separation-md);cursor:pointer}.validation-container form button:disabled{cursor:auto}\n"] }]
360
+ }], ctorParameters: function () { return [{ type: i1.FormBuilder }, { type: i0.ElementRef }, { type: i2.ActivatedRoute }, { type: i2$1.FadService }]; }, propDecorators: { configuration: [{
361
+ type: Input
362
+ }], onerror: [{
363
+ type: Output
364
+ }], onevent: [{
365
+ type: Output
366
+ }] } });
367
+
368
+ class DocumentApprovalListComponent {
369
+ constructor(hostContext, fad, cdr, pdfService) {
370
+ this.hostContext = hostContext;
371
+ this.fad = fad;
372
+ this.cdr = cdr;
373
+ this.pdfService = pdfService;
374
+ this.onloader = new EventEmitter();
375
+ this.onevent = new EventEmitter();
376
+ this.onerror = new EventEmitter();
377
+ this.pagesMap = new Map();
378
+ this.requisitionsFea = [];
379
+ this.documentsApprovalList = [];
380
+ this.approveAll = false;
381
+ this.images = {
382
+ inactive: {
383
+ reject: '',
384
+ approve: ''
385
+ },
386
+ active: {
387
+ reject: '',
388
+ approve: ''
389
+ }
390
+ };
391
+ this.pdfSrc = 'assets/pdf/one-drive.pdf';
392
+ this.pages = [];
393
+ this.page = 1;
394
+ this.height = '500px';
395
+ this.miniView = {
396
+ scrollIntoView: false
397
+ };
398
+ }
399
+ ngOnInit() {
400
+ console.log(this.configuration, this.rfc);
401
+ this.setCustomizationStyle(this.hostContext.nativeElement);
402
+ if (this.configuration?.pathDependencies?.imageDirectory) {
403
+ this.images.inactive.reject = this.configuration.pathDependencies?.images?.inactiveReject ?? `${this.configuration.pathDependencies.imageDirectory}/inactiveReject.png`;
404
+ this.images.inactive.approve = this.configuration.pathDependencies?.images?.inactiveApprove ?? `${this.configuration.pathDependencies.imageDirectory}/inactiveApprove.png`;
405
+ this.images.active.reject = this.configuration.pathDependencies?.images?.activeReject ?? `${this.configuration.pathDependencies.imageDirectory}/activeReject.png`;
406
+ this.images.active.approve = this.configuration.pathDependencies?.images?.activeApprove ?? `${this.configuration.pathDependencies.imageDirectory}/activeApprove.png`;
407
+ this.cdr.detectChanges();
408
+ }
409
+ this.getRequisitionsRfc();
410
+ }
411
+ getRequisitionsRfc() {
412
+ this.onloader.emit(true);
413
+ this.fad.getRequisitionsRfc(this.rfc)
414
+ .pipe(finalize(() => this.onloader.emit(false)))
415
+ .subscribe({
416
+ next: (res) => {
417
+ if (res.success) {
418
+ this.requisitionsFea = res.data.requisitions;
419
+ this.documentsApprovalList = this.requisitionsFea.flatMap(requisition => requisition.documents.map(doc => ({
420
+ doc: doc,
421
+ id: doc.documentId,
422
+ idRequisition: requisition.requisitionId,
423
+ approved: undefined,
424
+ isVisible: false
425
+ })));
426
+ }
427
+ else {
428
+ this.onerror.emit(new ResponseError(DocumentApprovalListErrorCode.SERVICE, getDocumentApprovalListErrorDescription(DocumentApprovalListErrorCode.SERVICE), 'ng-fad-portal-signature-fea-document-approval-list'));
429
+ }
430
+ },
431
+ error: (error) => {
432
+ this.onerror.emit(new ResponseError(DocumentApprovalListErrorCode.HTTP, getDocumentApprovalListErrorDescription(DocumentApprovalListErrorCode.HTTP), 'ng-fad-portal-signature-fea-document-approval-list'));
433
+ }
434
+ });
435
+ }
436
+ toggleApproval(document) {
437
+ document.approved = document.approved === true ? undefined : true;
438
+ this.updateApproveAllState();
439
+ }
440
+ toggleRejection(document) {
441
+ document.approved = document.approved === false ? undefined : false;
442
+ this.updateApproveAllState();
443
+ }
444
+ updateApproveAllState() {
445
+ this.approveAll = this.documentsApprovalList.every(doc => doc.approved === true);
446
+ }
447
+ approveAllDocuments() {
448
+ this.approveAll = !this.approveAll;
449
+ this.documentsApprovalList.forEach(doc => doc.approved = this.approveAll ? true : undefined);
450
+ }
451
+ getApprovedCount() {
452
+ return this.documentsApprovalList.filter(doc => doc.approved === true).length;
453
+ }
454
+ getRejectedCount() {
455
+ return this.documentsApprovalList.filter(doc => doc.approved === false).length;
456
+ }
457
+ emitApprovedDocuments() {
458
+ const approvedDocuments = this.documentsApprovalList.filter(doc => doc.approved !== undefined);
459
+ console.log(approvedDocuments);
460
+ this.onevent.emit(approvedDocuments);
461
+ }
462
+ seeDocumentFea(document) {
463
+ document.isVisible = !document.isVisible;
464
+ if (document.isVisible) {
465
+ this.onloader.emit(true);
466
+ this.fad.getDocumentFea(document.id, { loader: true, error: true })
467
+ .pipe(finalize(() => this.onloader.emit(false)))
468
+ .subscribe({
469
+ next: (res) => {
470
+ if (document.doc) {
471
+ const byteCharacters = atob(res.data.file);
472
+ const byteNumbers = new Array(byteCharacters.length).fill(0).map((_, i) => byteCharacters.charCodeAt(i));
473
+ const byteArray = new Uint8Array(byteNumbers);
474
+ const blob = new Blob([byteArray], { type: 'application/pdf' });
475
+ this.getBase64(blob, document);
476
+ }
477
+ else {
478
+ this.onerror.emit(new ResponseError(DocumentApprovalListErrorCode.SERVICE, getDocumentApprovalListErrorDescription(DocumentApprovalListErrorCode.SERVICE), 'ng-fad-portal-signature-fea-document-approval-list'));
479
+ }
480
+ },
481
+ error: (error) => {
482
+ this.onerror.emit(new ResponseError(DocumentApprovalListErrorCode.HTTP, getDocumentApprovalListErrorDescription(DocumentApprovalListErrorCode.HTTP), 'ng-fad-portal-signature-fea-document-approval-list'));
483
+ }
484
+ });
485
+ }
486
+ }
487
+ downloadDocumentFea(document) {
488
+ this.onloader.emit(true);
489
+ this.fad.getDocumentFea(document.id)
490
+ .pipe(finalize(() => this.onloader.emit(false)))
491
+ .subscribe({
492
+ next: (res) => {
493
+ if (res.success && res.data.file) {
494
+ const byteCharacters = atob(res.data.file);
495
+ const byteNumbers = new Array(byteCharacters.length).fill(0).map((_, i) => byteCharacters.charCodeAt(i));
496
+ const byteArray = new Uint8Array(byteNumbers);
497
+ const blob = new Blob([byteArray], { type: 'application/pdf' });
498
+ const link = window.document.createElement('a');
499
+ link.href = URL.createObjectURL(blob);
500
+ link.download = document.doc?.name || 'document.pdf';
501
+ window.document.body.appendChild(link);
502
+ link.click();
503
+ window.document.body.removeChild(link);
504
+ }
505
+ else {
506
+ this.onerror.emit(new ResponseError(DocumentApprovalListErrorCode.SERVICE, getDocumentApprovalListErrorDescription(DocumentApprovalListErrorCode.SERVICE), 'ng-fad-portal-signature-fea-document-approval-list'));
507
+ }
508
+ },
509
+ error: (error) => {
510
+ this.onerror.emit(new ResponseError(DocumentApprovalListErrorCode.HTTP, getDocumentApprovalListErrorDescription(DocumentApprovalListErrorCode.HTTP), 'ng-fad-portal-signature-fea-document-approval-list'));
511
+ }
512
+ });
513
+ }
514
+ async getBase64(blob, document) {
515
+ console.log(blob);
516
+ const data = new File([blob], 'file.pdf', { type: 'application/pdf' });
517
+ const base64 = await SharedUtils.fileToBase64(data);
518
+ if (base64) {
519
+ this.initializePdf(base64, document);
520
+ }
521
+ else {
522
+ this.onerror.emit(new ResponseError(DocumentApprovalListErrorCode.ERROR_PDF, getDocumentApprovalListErrorDescription(DocumentApprovalListErrorCode.HTTP), 'ng-fad-portal-signature-fea-document-approval-list'));
523
+ }
524
+ }
525
+ initializePdf(pdf, document) {
526
+ if (!this.pagesMap.has(document.id)) {
527
+ this.pagesMap.set(document.id, []);
528
+ }
529
+ else {
530
+ this.pagesMap.get(document.id).length = 0;
531
+ }
532
+ this.pdfService.initialize(pdf, SharedUtils.generateUUID());
533
+ this.getPages(document);
534
+ }
535
+ getPages(document) {
536
+ if (!this.pagesMap.has(document.id)) {
537
+ this.pagesMap.set(document.id, []);
538
+ }
539
+ else {
540
+ this.pagesMap.get(document.id).length = 0;
541
+ }
542
+ if (this.pdfLibrary) {
543
+ this.pdfLibrary.unsubscribe();
544
+ }
545
+ this.pdfLibrary = this.pdfService.pages.subscribe(res => {
546
+ const docPages = this.pagesMap.get(document.id);
547
+ docPages.push(res);
548
+ this.cdr.detectChanges();
549
+ });
550
+ }
551
+ //PDF General viewer methods
552
+ onpagechange(page) {
553
+ this.page = page;
554
+ }
555
+ scrollToPage(page) {
556
+ this.generalPdfViewerComponent.scrollToPage(page);
557
+ }
558
+ onloadpage(data) {
559
+ if (data.page == 1) {
560
+ const id = "fad-viewer-page-v1-1";
561
+ const dynamicDiv = document.getElementById(id);
562
+ ;
563
+ this.height = dynamicDiv.clientHeight + 'px';
564
+ }
565
+ }
566
+ setCustomizationStyle(targetElement = document.documentElement) {
567
+ this.configuration = Utils.mergeConfiguration(new Configuration(), DOCUMENT_APPROVAL_LIST_DEFAULT, this.configuration);
568
+ }
569
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DocumentApprovalListComponent, deps: [{ token: i0.ElementRef }, { token: i2$1.FadService }, { token: i0.ChangeDetectorRef }, { token: i2$2.NgFadPdfReaderService }], target: i0.ɵɵFactoryTarget.Component }); }
570
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: DocumentApprovalListComponent, selector: "ng-fad-signature-fea-document-approval-list", inputs: { configuration: "configuration", rfc: "rfc" }, outputs: { onloader: "onloader", onevent: "onevent", onerror: "onerror" }, providers: [NgFadPdfReaderService], viewQueries: [{ propertyName: "generalPdfViewerComponent", first: true, predicate: GeneralPdfViewerComponent, descendants: true }], ngImport: i0, template: "\r\n <ng-container *ngFor=\"let requisition of requisitionsFea\">\r\n <div class=\"fad-portal-content\" >\r\n <div class=\"header\" >\r\n <div>\r\n <div class=\"fad-portal-title\">\r\n {{ requisition.name }} ({{requisition.documents.length}})\r\n </div>\r\n <div class=\"info\">\r\n {{configuration.customization?.moduleCustomization?.legends?.sendTo}} Alfredo Villanueva {{ requisition.sendBy }}\r\n </div>\r\n <div class=\"info\">\r\n {{ requisition.sendByEmail }}\r\n </div>\r\n </div>\r\n <div class=\"requisition-id\">\r\n <div class=\"fad-portal-subtitle-bold\">ID {{ requisition.requisitionId }}</div>\r\n </div>\r\n </div>\r\n <div class=\"documents-container\">\r\n <ng-container *ngFor=\"let document of documentsApprovalList\">\r\n <ng-container *ngIf=\"document.idRequisition === requisition.requisitionId\" >\r\n <div class=\"document\" >\r\n <div class=\"information\" >\r\n <div class=\"document-name fad-portal-subtitle-bold\" >\r\n {{ document.doc?.name }}\r\n </div>\r\n <div class=\"validate\">\r\n \r\n <ng-fad-image-inline \r\n [src]=\"document.approved === false ? images.active.reject : images.inactive.reject\"\r\n (click)=\"toggleRejection(document)\">\r\n </ng-fad-image-inline>\r\n \r\n \r\n <ng-fad-image-inline \r\n [src]=\"document.approved === true ? images.active.approve : images.inactive.approve\"\r\n (click)=\"toggleApproval(document)\">\r\n </ng-fad-image-inline>\r\n </div>\r\n \r\n </div>\r\n <div class=\"actions\">\r\n <div>\r\n <div class=\"fad-portal-subtitle-bold\" (click)=\"seeDocumentFea(document)\">\r\n {{ document.isVisible ? 'Ocultar documento' : 'Ver documento' }}\r\n </div>\r\n <div class=\"fad-portal-subtitle-bold\" (click)=\"downloadDocumentFea(document)\">{{configuration.customization?.moduleCustomization?.legends?.download}}</div>\r\n </div>\r\n <div>\r\n {{ document.doc?.pages }} {{configuration.customization?.moduleCustomization?.legends?.pages}}\r\n </div>\r\n </div>\r\n <div class=\"pdf-viewer\" *ngIf=\"document.isVisible\" [style.height.px]=\"1000\">\r\n <ng-fad-viewer-general-pdf-viewer\r\n [pages]=\"pagesMap.get(document.id!) ?? []\"\r\n (onpagechange)=\"onpagechange($event)\"\r\n (onloadpage)=\"onloadpage($event)\">\r\n \r\n <ng-fad-viewer-pdf-mini-view\r\n miniView\r\n [configuration]=\"miniView\"\r\n [pages]=\"pagesMap.get(document.id!) ?? []\"\r\n [page]=\"page\"\r\n (onpagechange)=\"scrollToPage($event)\">\r\n </ng-fad-viewer-pdf-mini-view>\r\n \r\n </ng-fad-viewer-general-pdf-viewer>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <div class=\"fad-portal-content selector-document\">\r\n <div class=\"document-status-bar\">\r\n \r\n <div *ngIf=\"getApprovedCount() === 0 && getRejectedCount() === 0\" class=\"document-status-message \">\r\n Aprueba los documentos para firmarlos con tu e.firma\r\n </div>\r\n \r\n \r\n <div *ngIf=\"getApprovedCount() > 0 || getRejectedCount() > 0\" class=\"document-status-content\">\r\n <div class=\"approve-all\">\r\n <ng-fad-image-inline \r\n [src]=\"approveAll ? images.active.approve : images.inactive.approve\"\r\n (click)=\"approveAllDocuments()\">\r\n </ng-fad-image-inline>\r\n <span (click)=\"approveAllDocuments()\">Aprobar todos los documentos ({{ documentsApprovalList.length }})</span>\r\n </div>\r\n \r\n \r\n <div class=\"document-counts\">\r\n <span *ngIf=\"getApprovedCount() > 0 && getRejectedCount() === 0\" class=\"fad-portal-informative-bold\">\r\n {{ getApprovedCount() }} documentos aprobados\r\n </span>\r\n <span *ngIf=\"getRejectedCount() > 0 && getApprovedCount() === 0\" class=\"fad-portal-informative-bold\">\r\n {{ getRejectedCount() }} documentos rechazados\r\n </span>\r\n \r\n <ng-container *ngIf=\"getApprovedCount() > 0 && getRejectedCount() > 0\" >\r\n <span class=\"fad-portal-informative-bold\">\r\n {{ getApprovedCount() }} documentos aprobados\r\n </span>\r\n <span class=\"fad-portal-informative-bold\">\r\n {{ getRejectedCount() }} documentos rechazados\r\n </span>\r\n </ng-container>\r\n </div>\r\n \r\n \r\n <button class=\"fad-portal-primary\" (click)=\"emitApprovedDocuments()\">Continuar</button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n", styles: [":host{box-sizing:border-box}:host .fad-portal-content{display:flex;flex-direction:column;justify-content:center;width:100%;box-sizing:border-box;margin-top:var(--fad-portal-common-separation-lg)}:host .fad-portal-content .header{display:flex;align-items:center;justify-content:space-between;width:100%;background-color:#f5f5f5;border-radius:var(--fad-portal-common-input-border-radius);padding:var(--fad-portal-common-separation-md);overflow:hidden;box-sizing:border-box}:host .fad-portal-content .header div:nth-child(1){display:flex;flex-direction:column;row-gap:var(--fad-portal-common-separation-xs)}:host .fad-portal-content .header .info{color:var(--fad-portal-common-tertiary-color)}@media (max-width: 992px){:host .fad-portal-content .header{flex-direction:column;align-items:start;justify-content:center;row-gap:var(--fad-portal-common-separation-xs);margin-bottom:var(--fad-portal-common-separation-md)}}:host .fad-portal-content .documents-container{box-sizing:border-box}:host .fad-portal-content .documents-container .document{display:flex;align-items:center;flex-direction:column;width:100%;margin-top:var(--fad-portal-common-separation-md);border-radius:var(--fad-portal-common-input-border-radius);border:1px solid #f5f5f5}:host .fad-portal-content .documents-container .document .information{padding:var(--fad-portal-common-separation-md);display:flex;align-items:center;justify-content:space-between;width:100%}:host .fad-portal-content .documents-container .document .information .validate{padding-left:var(--fad-portal-common-separation-md);padding-right:var(--fad-portal-common-separation-md);display:flex;column-gap:var(--fad-portal-common-separation-md)}:host .fad-portal-content .documents-container .document .information .document-name{padding-left:var(--fad-portal-common-separation-md);padding-right:var(--fad-portal-common-separation-md)}:host .fad-portal-content .documents-container .document .actions{display:flex;align-items:center;justify-content:space-between;width:100%;background-color:#f5f5f5;padding:var(--fad-portal-common-separation-md);box-sizing:border-box;border-radius:var(--fad-portal-common-input-border-radius);border-top-left-radius:0;border-top-right-radius:0}:host .fad-portal-content .documents-container .document .actions div:nth-child(1){display:flex;align-items:center;gap:var(--fad-portal-common-separation-md)}:host .fad-portal-content .documents-container .document .actions div:nth-child(1) div{color:var(--fad-portal-common-primary-color)!important;cursor:pointer}:host .selector-document{width:100%;background-color:#262626;color:#fff;padding:var(--fad-portal-common-separation-md);margin-top:var(--fad-portal-common-separation-md);display:flex;align-items:center;justify-content:space-between;border-radius:var(--fad-portal-common-input-border-radius);box-sizing:border-box}:host .selector-document .document-status-message{display:flex;align-items:center;justify-content:center;width:100%;gap:var(--fad-portal-common-separation-md)}:host .selector-document .document-status-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;width:100%;font-size:14px;box-sizing:border-box}:host .selector-document .document-status-bar .document-status-content{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;width:100%;font-size:14px;box-sizing:border-box}:host .selector-document .document-status-bar .approve-all{display:flex;align-items:center;gap:10px;cursor:pointer;box-sizing:border-box}:host .selector-document .document-status-bar .approve-all span{cursor:pointer;-webkit-user-select:none;user-select:none}:host .selector-document .document-status-bar .document-counts{display:flex;flex-direction:column;gap:var(--fad-portal-common-separation-xs);box-sizing:border-box}:host .selector-document .document-status-bar .document-counts span{color:#fff}:host .selector-document .document-status-bar .fad-portal-primary{min-width:0px;width:50%}@media (max-width: 992px){:host .selector-document .document-status-bar .fad-portal-primary{width:100%;margin-top:var(--fad-portal-common-separation-md)}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.NgFadImageInlineComponent, selector: "ng-fad-image-inline", inputs: ["src"] }, { kind: "component", type: i5$1.GeneralPdfViewerComponent, selector: "ng-fad-viewer-general-pdf-viewer", inputs: ["configuration", "onerror", "pages"], outputs: ["onpagechange", "onloadpage"] }, { kind: "component", type: i5$1.PdfMiniViewComponent, selector: "ng-fad-viewer-pdf-mini-view", inputs: ["configuration", "pages", "page"], outputs: ["onpagechange"] }] }); }
571
+ }
572
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DocumentApprovalListComponent, decorators: [{
573
+ type: Component,
574
+ args: [{ selector: 'ng-fad-signature-fea-document-approval-list', providers: [NgFadPdfReaderService], template: "\r\n <ng-container *ngFor=\"let requisition of requisitionsFea\">\r\n <div class=\"fad-portal-content\" >\r\n <div class=\"header\" >\r\n <div>\r\n <div class=\"fad-portal-title\">\r\n {{ requisition.name }} ({{requisition.documents.length}})\r\n </div>\r\n <div class=\"info\">\r\n {{configuration.customization?.moduleCustomization?.legends?.sendTo}} Alfredo Villanueva {{ requisition.sendBy }}\r\n </div>\r\n <div class=\"info\">\r\n {{ requisition.sendByEmail }}\r\n </div>\r\n </div>\r\n <div class=\"requisition-id\">\r\n <div class=\"fad-portal-subtitle-bold\">ID {{ requisition.requisitionId }}</div>\r\n </div>\r\n </div>\r\n <div class=\"documents-container\">\r\n <ng-container *ngFor=\"let document of documentsApprovalList\">\r\n <ng-container *ngIf=\"document.idRequisition === requisition.requisitionId\" >\r\n <div class=\"document\" >\r\n <div class=\"information\" >\r\n <div class=\"document-name fad-portal-subtitle-bold\" >\r\n {{ document.doc?.name }}\r\n </div>\r\n <div class=\"validate\">\r\n \r\n <ng-fad-image-inline \r\n [src]=\"document.approved === false ? images.active.reject : images.inactive.reject\"\r\n (click)=\"toggleRejection(document)\">\r\n </ng-fad-image-inline>\r\n \r\n \r\n <ng-fad-image-inline \r\n [src]=\"document.approved === true ? images.active.approve : images.inactive.approve\"\r\n (click)=\"toggleApproval(document)\">\r\n </ng-fad-image-inline>\r\n </div>\r\n \r\n </div>\r\n <div class=\"actions\">\r\n <div>\r\n <div class=\"fad-portal-subtitle-bold\" (click)=\"seeDocumentFea(document)\">\r\n {{ document.isVisible ? 'Ocultar documento' : 'Ver documento' }}\r\n </div>\r\n <div class=\"fad-portal-subtitle-bold\" (click)=\"downloadDocumentFea(document)\">{{configuration.customization?.moduleCustomization?.legends?.download}}</div>\r\n </div>\r\n <div>\r\n {{ document.doc?.pages }} {{configuration.customization?.moduleCustomization?.legends?.pages}}\r\n </div>\r\n </div>\r\n <div class=\"pdf-viewer\" *ngIf=\"document.isVisible\" [style.height.px]=\"1000\">\r\n <ng-fad-viewer-general-pdf-viewer\r\n [pages]=\"pagesMap.get(document.id!) ?? []\"\r\n (onpagechange)=\"onpagechange($event)\"\r\n (onloadpage)=\"onloadpage($event)\">\r\n \r\n <ng-fad-viewer-pdf-mini-view\r\n miniView\r\n [configuration]=\"miniView\"\r\n [pages]=\"pagesMap.get(document.id!) ?? []\"\r\n [page]=\"page\"\r\n (onpagechange)=\"scrollToPage($event)\">\r\n </ng-fad-viewer-pdf-mini-view>\r\n \r\n </ng-fad-viewer-general-pdf-viewer>\r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n \r\n </div>\r\n \r\n </div>\r\n </ng-container>\r\n <div class=\"fad-portal-content selector-document\">\r\n <div class=\"document-status-bar\">\r\n \r\n <div *ngIf=\"getApprovedCount() === 0 && getRejectedCount() === 0\" class=\"document-status-message \">\r\n Aprueba los documentos para firmarlos con tu e.firma\r\n </div>\r\n \r\n \r\n <div *ngIf=\"getApprovedCount() > 0 || getRejectedCount() > 0\" class=\"document-status-content\">\r\n <div class=\"approve-all\">\r\n <ng-fad-image-inline \r\n [src]=\"approveAll ? images.active.approve : images.inactive.approve\"\r\n (click)=\"approveAllDocuments()\">\r\n </ng-fad-image-inline>\r\n <span (click)=\"approveAllDocuments()\">Aprobar todos los documentos ({{ documentsApprovalList.length }})</span>\r\n </div>\r\n \r\n \r\n <div class=\"document-counts\">\r\n <span *ngIf=\"getApprovedCount() > 0 && getRejectedCount() === 0\" class=\"fad-portal-informative-bold\">\r\n {{ getApprovedCount() }} documentos aprobados\r\n </span>\r\n <span *ngIf=\"getRejectedCount() > 0 && getApprovedCount() === 0\" class=\"fad-portal-informative-bold\">\r\n {{ getRejectedCount() }} documentos rechazados\r\n </span>\r\n \r\n <ng-container *ngIf=\"getApprovedCount() > 0 && getRejectedCount() > 0\" >\r\n <span class=\"fad-portal-informative-bold\">\r\n {{ getApprovedCount() }} documentos aprobados\r\n </span>\r\n <span class=\"fad-portal-informative-bold\">\r\n {{ getRejectedCount() }} documentos rechazados\r\n </span>\r\n </ng-container>\r\n </div>\r\n \r\n \r\n <button class=\"fad-portal-primary\" (click)=\"emitApprovedDocuments()\">Continuar</button>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n\r\n", styles: [":host{box-sizing:border-box}:host .fad-portal-content{display:flex;flex-direction:column;justify-content:center;width:100%;box-sizing:border-box;margin-top:var(--fad-portal-common-separation-lg)}:host .fad-portal-content .header{display:flex;align-items:center;justify-content:space-between;width:100%;background-color:#f5f5f5;border-radius:var(--fad-portal-common-input-border-radius);padding:var(--fad-portal-common-separation-md);overflow:hidden;box-sizing:border-box}:host .fad-portal-content .header div:nth-child(1){display:flex;flex-direction:column;row-gap:var(--fad-portal-common-separation-xs)}:host .fad-portal-content .header .info{color:var(--fad-portal-common-tertiary-color)}@media (max-width: 992px){:host .fad-portal-content .header{flex-direction:column;align-items:start;justify-content:center;row-gap:var(--fad-portal-common-separation-xs);margin-bottom:var(--fad-portal-common-separation-md)}}:host .fad-portal-content .documents-container{box-sizing:border-box}:host .fad-portal-content .documents-container .document{display:flex;align-items:center;flex-direction:column;width:100%;margin-top:var(--fad-portal-common-separation-md);border-radius:var(--fad-portal-common-input-border-radius);border:1px solid #f5f5f5}:host .fad-portal-content .documents-container .document .information{padding:var(--fad-portal-common-separation-md);display:flex;align-items:center;justify-content:space-between;width:100%}:host .fad-portal-content .documents-container .document .information .validate{padding-left:var(--fad-portal-common-separation-md);padding-right:var(--fad-portal-common-separation-md);display:flex;column-gap:var(--fad-portal-common-separation-md)}:host .fad-portal-content .documents-container .document .information .document-name{padding-left:var(--fad-portal-common-separation-md);padding-right:var(--fad-portal-common-separation-md)}:host .fad-portal-content .documents-container .document .actions{display:flex;align-items:center;justify-content:space-between;width:100%;background-color:#f5f5f5;padding:var(--fad-portal-common-separation-md);box-sizing:border-box;border-radius:var(--fad-portal-common-input-border-radius);border-top-left-radius:0;border-top-right-radius:0}:host .fad-portal-content .documents-container .document .actions div:nth-child(1){display:flex;align-items:center;gap:var(--fad-portal-common-separation-md)}:host .fad-portal-content .documents-container .document .actions div:nth-child(1) div{color:var(--fad-portal-common-primary-color)!important;cursor:pointer}:host .selector-document{width:100%;background-color:#262626;color:#fff;padding:var(--fad-portal-common-separation-md);margin-top:var(--fad-portal-common-separation-md);display:flex;align-items:center;justify-content:space-between;border-radius:var(--fad-portal-common-input-border-radius);box-sizing:border-box}:host .selector-document .document-status-message{display:flex;align-items:center;justify-content:center;width:100%;gap:var(--fad-portal-common-separation-md)}:host .selector-document .document-status-bar{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;width:100%;font-size:14px;box-sizing:border-box}:host .selector-document .document-status-bar .document-status-content{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;width:100%;font-size:14px;box-sizing:border-box}:host .selector-document .document-status-bar .approve-all{display:flex;align-items:center;gap:10px;cursor:pointer;box-sizing:border-box}:host .selector-document .document-status-bar .approve-all span{cursor:pointer;-webkit-user-select:none;user-select:none}:host .selector-document .document-status-bar .document-counts{display:flex;flex-direction:column;gap:var(--fad-portal-common-separation-xs);box-sizing:border-box}:host .selector-document .document-status-bar .document-counts span{color:#fff}:host .selector-document .document-status-bar .fad-portal-primary{min-width:0px;width:50%}@media (max-width: 992px){:host .selector-document .document-status-bar .fad-portal-primary{width:100%;margin-top:var(--fad-portal-common-separation-md)}}\n"] }]
575
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i2$1.FadService }, { type: i0.ChangeDetectorRef }, { type: i2$2.NgFadPdfReaderService }]; }, propDecorators: { configuration: [{
576
+ type: Input
577
+ }], rfc: [{
578
+ type: Input
579
+ }], onloader: [{
580
+ type: Output
581
+ }], onevent: [{
582
+ type: Output
583
+ }], onerror: [{
584
+ type: Output
585
+ }], generalPdfViewerComponent: [{
586
+ type: ViewChild,
587
+ args: [GeneralPdfViewerComponent]
588
+ }] } });
589
+
590
+ class UploadESignatureComponent {
591
+ constructor(hostContext, fb, fad, mifiel) {
592
+ this.hostContext = hostContext;
593
+ this.fb = fb;
594
+ this.fad = fad;
595
+ this.mifiel = mifiel;
596
+ this.documents = [];
597
+ this.onerror = new EventEmitter();
598
+ this.onloader = new EventEmitter();
599
+ this.oncomplete = new EventEmitter();
600
+ this.formatCerList = ['cer'];
601
+ this.formatKeyList = ['key'];
602
+ this.passwordInputType = 'password';
603
+ this.isValidated = false;
604
+ this.showComponent = true;
605
+ }
606
+ ngOnInit() {
607
+ this.setCustomizationStyle(this.hostContext.nativeElement);
608
+ this.uploadImg = this.configuration.pathDependencies?.images?.upload || `${this.configuration.pathDependencies?.imageDirectory}upload.svg`;
609
+ this.checkOnImg = this.configuration.pathDependencies?.images?.checkOn || `${this.configuration.pathDependencies?.imageDirectory}check-on.svg`;
610
+ this.checkOffImg = this.configuration.pathDependencies?.images?.checkOff || `${this.configuration.pathDependencies?.imageDirectory}check-off.svg`;
611
+ this.fileImg = this.configuration.pathDependencies?.images?.file || `${this.configuration.pathDependencies?.imageDirectory}file.svg`;
612
+ this.showComponent = this.validateData();
613
+ if (this.showComponent) {
614
+ this.documentPluralTitle = this.configuration.customization?.moduleCustomization?.legends?.documents?.title?.plural?.replace('#TOTAL_DOCS', this.documents?.length.toString()); // poner longitud
615
+ if (this.documents?.length === 1) {
616
+ const status = this.documents[0].approved ? this.configuration.customization?.moduleCustomization?.legends?.documents?.title?.approved : this.configuration.customization?.moduleCustomization?.legends?.documents?.title?.rejected;
617
+ this.documentSingularTitle = this.configuration.customization?.moduleCustomization?.legends?.documents?.title?.singular?.replace('#STATUS_DOC', status); // poner longitud
618
+ }
619
+ this.initForm();
620
+ }
621
+ }
622
+ validateData() {
623
+ if (!this.documents || this.documents.length < 1) {
624
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.NO_DOCUMENTS, getUploadESignatureErrorDescription(UploadESignatureErrorCode.NO_DOCUMENTS), 'ng-fad-signature-fea-upload-e-signature'));
625
+ return false;
626
+ }
627
+ if (!this.signerId) {
628
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.NO_SIGNER_ID, getUploadESignatureErrorDescription(UploadESignatureErrorCode.NO_SIGNER_ID), 'ng-fad-signature-fea-upload-e-signature'));
629
+ return false;
630
+ }
631
+ if (!this.rfc) {
632
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.NO_RFC, getUploadESignatureErrorDescription(UploadESignatureErrorCode.NO_RFC), 'ng-fad-signature-fea-upload-e-signature'));
633
+ return false;
634
+ }
635
+ return true;
636
+ }
637
+ initForm() {
638
+ this.form = this.fb.group({
639
+ cer: [null, [Validators.required]],
640
+ key: [null, [Validators.required]],
641
+ password: [null, [Validators.required]]
642
+ });
643
+ }
644
+ get cer() {
645
+ return this.form.get('cer');
646
+ }
647
+ get key() {
648
+ return this.form.get('key');
649
+ }
650
+ get password() {
651
+ return this.form.get('password');
652
+ }
653
+ openFilePicker(fileInput) {
654
+ fileInput.click();
655
+ }
656
+ onFileChange(event, type) {
657
+ const file = event.target.files[0];
658
+ if (!file)
659
+ return;
660
+ if (event.target.files.length > 1) {
661
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.MULTIPLE_FILES, getUploadESignatureErrorDescription(UploadESignatureErrorCode.MULTIPLE_FILES), 'ng-fad-signature-fea-upload-e-signature'));
662
+ return;
663
+ }
664
+ if (type === 'cer' && !/\.cer$/.test(file.name)) {
665
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.FORMAT_CER, getUploadESignatureErrorDescription(UploadESignatureErrorCode.FORMAT_CER), 'ng-fad-signature-fea-upload-e-signature'));
666
+ return;
667
+ }
668
+ if (type === 'key' && !/\.key$/.test(file.name)) {
669
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.FORMAT_KEY, getUploadESignatureErrorDescription(UploadESignatureErrorCode.FORMAT_KEY), 'ng-fad-signature-fea-upload-e-signature'));
670
+ return;
671
+ }
672
+ type === 'cer' ? this.cer?.setValue(file) : this.key?.setValue(file);
673
+ }
674
+ onfiledropped(files, type) {
675
+ const file = files[0];
676
+ type === 'cer' ? this.cer?.setValue(file) : this.key?.setValue(file);
677
+ }
678
+ onerrorDirective(event, type) {
679
+ if (event.code === -1)
680
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.MULTIPLE_FILES, getUploadESignatureErrorDescription(UploadESignatureErrorCode.MULTIPLE_FILES), 'ng-fad-signature-fea-upload-e-signature'));
681
+ if (event.code === -2 && type === 'cer')
682
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.FORMAT_CER, getUploadESignatureErrorDescription(UploadESignatureErrorCode.FORMAT_CER), 'ng-fad-signature-fea-upload-e-signature'));
683
+ if (event.code === -2 && type === 'key')
684
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.FORMAT_KEY, getUploadESignatureErrorDescription(UploadESignatureErrorCode.FORMAT_KEY), 'ng-fad-signature-fea-upload-e-signature'));
685
+ }
686
+ changePaswordInputType() {
687
+ this.passwordInputType = this.passwordInputType === 'text' ? 'password' : 'text';
688
+ }
689
+ savePassword(value) {
690
+ const inputElement = value.target;
691
+ this.password?.setValue(inputElement.value);
692
+ }
693
+ allIsRejected() {
694
+ return this.documents.every(doc => doc.approved === false);
695
+ }
696
+ async signDocuments() {
697
+ let canContinue = true;
698
+ const rejectedDocuments = this.documents.filter((doc) => !doc.approved);
699
+ if (rejectedDocuments.length > 0) {
700
+ canContinue = await this.rejectDocuments(true);
701
+ }
702
+ if (!canContinue)
703
+ return;
704
+ this.onloader.emit(true);
705
+ const cer = await this.getBase64File(this.cer?.value);
706
+ this.onloader.emit(false);
707
+ if (!cer)
708
+ return;
709
+ this.onloader.emit(true);
710
+ const key = await this.getBase64File(this.key?.value);
711
+ this.onloader.emit(false);
712
+ if (!key)
713
+ return;
714
+ const aprrovedDocuments = this.documents.filter((doc) => doc.approved);
715
+ const body = {
716
+ cer: cer.split(',')[1],
717
+ key: key.split(',')[1],
718
+ password: this.password?.value,
719
+ documents: aprrovedDocuments,
720
+ signerId: this.rfc
721
+ };
722
+ this.onloader.emit(true);
723
+ this.fad.signFea(body, this.configuration.credentials?.key, this.configuration.credentials?.iv, this.configuration.services?.reject).pipe(finalize(() => {
724
+ this.onloader.emit(false);
725
+ })).subscribe({
726
+ next: (res) => {
727
+ if (res.success) {
728
+ const certificate = this.mifiel.parseCertificate(body.cer);
729
+ const data = {
730
+ cer: certificate
731
+ };
732
+ this.oncomplete.emit(data);
733
+ }
734
+ else {
735
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.SERVICE, res.error, 'ng-fad-signature-fea-upload-e-signature'));
736
+ ;
737
+ }
738
+ },
739
+ error: (error) => {
740
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.HTTP, error.error, 'ng-fad-signature-fea-upload-e-signature'));
741
+ ;
742
+ },
743
+ });
744
+ }
745
+ rejectDocuments(fromSign = false) {
746
+ return new Promise((resolve, reject) => {
747
+ const rejectedDocuments = this.documents.filter((doc) => !doc.approved);
748
+ const body = {
749
+ cer: '',
750
+ key: '',
751
+ password: '',
752
+ documents: rejectedDocuments.map(res => {
753
+ return {
754
+ id: res.id,
755
+ idRequisition: res.idRequisition,
756
+ };
757
+ }),
758
+ signerId: this.signerId
759
+ };
760
+ this.onloader.emit(true);
761
+ this.fad.rejectFea(body, this.configuration.credentials?.key, this.configuration.credentials?.iv, this.configuration.services?.reject).pipe(finalize(() => {
762
+ this.onloader.emit(false);
763
+ })).subscribe({
764
+ next: (res) => {
765
+ if (res.success) {
766
+ if (!fromSign)
767
+ this.oncomplete.emit(null);
768
+ resolve(true);
769
+ }
770
+ else {
771
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.SERVICE, res.error, 'ng-fad-signature-fea-upload-e-signature'));
772
+ reject(null);
773
+ }
774
+ },
775
+ error: (error) => {
776
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.HTTP, error.error, 'ng-fad-signature-fea-upload-e-signature'));
777
+ reject(null);
778
+ },
779
+ });
780
+ });
781
+ }
782
+ async onRejectDocument() {
783
+ await this.rejectDocuments();
784
+ }
785
+ async getBase64File(file) {
786
+ const data = await SharedUtils.fileToBase64(file).then(base64 => base64).catch(error => null);
787
+ if (data)
788
+ return data;
789
+ else {
790
+ this.onerror.emit(new ResponseError(UploadESignatureErrorCode.ERROR_BASE_64, getUploadESignatureErrorDescription(UploadESignatureErrorCode.ERROR_BASE_64), 'ng-fad-signature-fea-upload-e-signature'));
791
+ return null;
792
+ }
793
+ }
794
+ setCustomizationStyle(targetElement = document.documentElement) {
795
+ this.configuration = Utils.mergeConfiguration(new Configuration(), UPLOAD_E_SIGNATURE_CONFIGURATION_DEFAULT, this.configuration);
796
+ Utils.setVariableCss('--fad-signature-fea-e-signature-documents-background-color', this.configuration.customization?.moduleCustomization?.style?.documents?.backgroundColor, { targetElement });
797
+ Utils.setVariableCss('--fad-signature-fea-e-signature-documents-border-radius', this.configuration.customization?.moduleCustomization?.style?.documents?.borderRadius, { targetElement });
798
+ Utils.setVariableCss('--fad-signature-fea-e-signature-upload-background-color', this.configuration.customization?.moduleCustomization?.style?.upload?.backgroundColor, { targetElement });
799
+ Utils.setVariableCss('--fad-signature-fea-e-signature-upload-border', this.configuration.customization?.moduleCustomization?.style?.upload?.border, { targetElement });
800
+ Utils.setVariableCss('--fad-signature-fea-e-signature-upload-border-radius', this.configuration.customization?.moduleCustomization?.style?.upload?.borderRadius, { targetElement });
801
+ Utils.setVariableCss('--fad-signature-fea-e-signature-upload-button-background-color', this.configuration.customization?.moduleCustomization?.style?.upload?.button?.backgroundColor, { targetElement });
802
+ Utils.setVariableCss('--fad-signature-fea-e-signature-upload-button-border-radius', this.configuration.customization?.moduleCustomization?.style?.upload?.button?.borderRadius, { targetElement });
803
+ Utils.setVariableCss('--fad-signature-fea-e-signature-upload-button-hover', this.configuration.customization?.moduleCustomization?.style?.upload?.button?.hover, { targetElement });
804
+ Utils.setVariableCss('--fad-signature-fea-e-signature-file-border-radius', this.configuration.customization?.moduleCustomization?.style?.file?.borderRadius, { targetElement });
805
+ Utils.setVariableCss('--fad-signature-fea-e-signature-file-img-background-color', this.configuration.customization?.moduleCustomization?.style?.file?.img?.backgroundColor, { targetElement });
806
+ }
807
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UploadESignatureComponent, deps: [{ token: i0.ElementRef }, { token: i1.FormBuilder }, { token: i2$1.FadService }, { token: i2$1.MifielService }], target: i0.ɵɵFactoryTarget.Component }); }
808
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UploadESignatureComponent, selector: "ng-fad-signature-fea-upload-e-signature", inputs: { configuration: "configuration", documents: "documents", signerId: "signerId", rfc: "rfc" }, outputs: { onerror: "onerror", onloader: "onloader", oncomplete: "oncomplete" }, ngImport: i0, template: "<ng-container *ngIf=\"showComponent\">\r\n <div>\r\n <div *ngIf=\"documents.length > 1\" class=\"fad-portal-title-bold\">{{ documentPluralTitle }}</div>\r\n <div *ngIf=\"documents.length === 1\" class=\"fad-portal-title-bold\">{{ documentSingularTitle }}</div>\r\n\r\n <div class=\"container-document fad-portal-content\">\r\n <div *ngFor=\"let i of documents\" class=\"document\">\r\n <div>{{ i.doc.name }}</div>\r\n <div class=\"status fad-portal-content-bold\">{{ i.approved ? configuration.customization?.moduleCustomization?.legends?.documents?.status?.approved : configuration.customization?.moduleCustomization?.legends?.documents?.status?.rejected }}</div>\r\n <div class=\"pages\">{{ i.doc.pages }} {{ i.doc.pages > 1 ? configuration.customization?.moduleCustomization?.legends?.documents?.pages?.plural : configuration.customization?.moduleCustomization?.legends?.documents?.pages?.singular }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!allIsRejected()\">\r\n <div class=\"fad-portal-title-bold\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.title }}</div>\r\n\r\n <div>\r\n <div class=\"container-instruction-file\">\r\n <div class=\"fad-portal-content\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.cer?.label }}</div>\r\n <div *ngIf=\"cer?.value\" class=\"fad-portal-content select-file\" (click)=\"openFilePicker(fileCerInput)\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.upload }}</div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!cer?.value\"\r\n class=\"container-upload\"\r\n (click)=\"openFilePicker(fileCerInput)\"\r\n dragDropDocument\r\n [formatList]=\"formatCerList\"\r\n [acceptMultipleFiles]=\"false\"\r\n (onfiledropped)=\"onfiledropped($event, 'cer')\"\r\n (onerror)=\"onerrorDirective($event, 'cer')\">\r\n <div class=\"fad-portal-content instruction\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.cer?.instruction }}</div>\r\n <div class=\"fad-portal-content-bold upload-btn\">\r\n <ng-fad-image-inline [src]=\"uploadImg\"></ng-fad-image-inline>\r\n <span>{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.cer?.upload }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"cer?.value\" class=\"container-file\">\r\n <div class=\"document-img\">\r\n <img [src]=\"fileImg\" alt=\"\">\r\n </div>\r\n <div class=\"fad-portal-content\">{{ cer?.value.name }}</div>\r\n </div>\r\n\r\n <input type=\"file\" accept=\".cer\" #fileCerInput style=\"display: none\" (change)=\"onFileChange($event, 'cer')\">\r\n </div>\r\n\r\n <div>\r\n <div class=\"container-instruction-file\">\r\n <div class=\"fad-portal-content\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.key?.label }}</div>\r\n <div *ngIf=\"key?.value\" class=\"fad-portal-content select-file\" (click)=\"openFilePicker(fileKeyInput)\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.upload }}</div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!key?.value\"\r\n class=\"container-upload\"\r\n (click)=\"openFilePicker(fileKeyInput)\"\r\n dragDropDocument\r\n [formatList]=\"formatKeyList\"\r\n [acceptMultipleFiles]=\"false\"\r\n (onfiledropped)=\"onfiledropped($event, 'key')\"\r\n (onerror)=\"onerrorDirective($event, 'key')\">\r\n\r\n <div class=\"fad-portal-content instruction\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.key?.instruction }}</div>\r\n <div class=\"fad-portal-content-bold upload-btn\">\r\n <ng-fad-image-inline [src]=\"uploadImg\"></ng-fad-image-inline>\r\n <span>{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.key?.upload }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"key?.value\" class=\"container-file\">\r\n <div class=\"document-img\">\r\n <img [src]=\"fileImg\" alt=\"\">\r\n </div>\r\n <div class=\"fad-portal-content\">{{ key?.value.name }}</div>\r\n </div>\r\n\r\n <input type=\"file\" accept=\".key\" #fileKeyInput style=\"display: none\" (change)=\"onFileChange($event, 'key')\">\r\n </div>\r\n\r\n <div class=\"fad-portal-container-input\">\r\n <label class=\"fad-portal-content\" for=\"\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.password?.label }}</label>\r\n <div class=\"input-password\">\r\n <input [type]=\"passwordInputType\" (input)=\"savePassword($event)\">\r\n <div class=\"fad-portal-content-bold password-show\">\r\n <div *ngIf=\"passwordInputType === 'text'\" (click)=\"changePaswordInputType()\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.password?.hide }}</div>\r\n <div *ngIf=\"passwordInputType === 'password'\" (click)=\"changePaswordInputType()\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.password?.show }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <div></div>\r\n\r\n <div class=\"fad-portal-content container-confirm\">\r\n <div *ngIf=\"!allIsRejected()\" (click)=\"isValidated = !isValidated\">\r\n <div>\r\n <ng-fad-image-inline *ngIf=\"isValidated\" [src]=\"checkOnImg\"></ng-fad-image-inline>\r\n <ng-fad-image-inline *ngIf=\"!isValidated\" [src]=\"checkOffImg\"></ng-fad-image-inline>\r\n </div>\r\n <div *ngIf=\"documents.length === 1\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.validate?.singular }}</div>\r\n <div *ngIf=\"documents.length > 1\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.validate?.plural }}</div>\r\n </div>\r\n\r\n <div></div>\r\n\r\n <div class=\"action\">\r\n <button type=\"button\" *ngIf=\"documents.length === 1 && !allIsRejected()\" class=\"fad-portal-primary\" [disabled]=\"!form.valid || !isValidated\" (click)=\"signDocuments()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.sign?.singular }}</button>\r\n <button type=\"button\" *ngIf=\"documents.length > 1 && !allIsRejected()\" class=\"fad-portal-primary\" [disabled]=\"!form.valid || !isValidated\" (click)=\"signDocuments()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.sign?.plural }}</button>\r\n <button type=\"button\" *ngIf=\"documents.length === 1 && allIsRejected()\" class=\"fad-portal-primary\" (click)=\"onRejectDocument()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.reject?.singular }}</button>\r\n <button type=\"button\" *ngIf=\"documents.length > 1 && allIsRejected()\" class=\"fad-portal-primary\" (click)=\"onRejectDocument()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.reject?.plural }}</button>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:column;gap:var(--fad-portal-common-separation-md)}:host .container-document{display:flex;flex-direction:column;width:100%;background-color:var(--fad-signature-fea-e-signature-documents-background-color);border-radius:var(--fad-signature-fea-e-signature-documents-border-radius);padding:var(--fad-portal-common-separation-md);box-sizing:border-box;margin-top:var(--fad-portal-common-separation-xs)}:host .container-document .document{display:flex;gap:var(--fad-portal-common-separation-md);justify-content:space-between;border-bottom:1px solid var(--fad-portal-common-border-color);padding:var(--fad-portal-common-separation-md) 0}:host .container-document .document>div{flex:1}:host .container-document .document .status{text-align:center}:host .container-document .document .pages{text-align:end;color:var(--fad-portal-common-legends-secondary)}:host .document:only-child{border-bottom:none!important}:host .container-instruction-file{display:flex;gap:var(--fad-portal-common-separation-md);justify-content:space-between}:host .container-instruction-file .select-file{color:var(--fad-portal-common-primary-color);cursor:pointer}:host .container-upload{width:100%;box-sizing:border-box;border-radius:var(--fad-signature-fea-e-signature-upload-border-radius);border:var(--fad-signature-fea-e-signature-upload-border);padding:var(--fad-portal-common-separation-md);margin-top:var(--fad-portal-common-separation-xs);display:flex;flex-direction:column;gap:var(--fad-portal-common-separation-xs);align-items:center;justify-content:center;text-align:center;background-color:var(--fad-signature-fea-e-signature-upload-background-color)}:host .container-upload .instruction{color:var(--fad-portal-common-legends-secondary)}:host .container-upload .upload-btn{max-width:90%;width:300px;box-sizing:border-box;background-color:var(--fad-signature-fea-e-signature-upload-button-background-color);border-radius:var(--fad-signature-fea-e-signature-upload-button-border-radius);color:var(--fad-portal-common-legends-tertiary);padding:var(--fad-portal-common-separation-xs);cursor:pointer;transition:all .2s ease-out;display:flex;align-items:center;justify-content:center;text-align:center;gap:var(--fad-portal-common-separation-xs)}:host .container-upload .upload-btn:hover{background-color:var(--fad-signature-fea-e-signature-upload-button-hover)}:host .container-file{display:flex;gap:var(--fad-portal-common-separation-md);align-items:center;padding:var(--fad-portal-common-separation-md);border:2px solid var(--fad-portal-common-successful-color);height:71px;border-radius:var(--fad-signature-fea-e-signature-file-border-radius);margin-top:var(--fad-portal-common-separation-xs)}:host .container-file .document-img{background-color:var(--fad-signature-fea-e-signature-file-img-background-color);width:40px;height:40px;border-radius:100%;display:flex;align-items:center;justify-content:center}:host .container-file .document-img img{width:60%;max-width:100%;max-height:100%}:host .fad-portal-container-input .input-password{position:relative}:host .fad-portal-container-input .input-password input{padding-right:100px}:host .fad-portal-container-input .input-password .password-show{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--fad-portal-common-legends-secondary);cursor:pointer}:host .container-confirm{display:flex;justify-content:space-between;align-items:center;gap:var(--fad-portal-common-separation-xs)}:host .container-confirm>div:first-child{display:flex;gap:var(--fad-portal-common-separation-xs)}:host .container-confirm>div:first-child>div:first-child{width:25px;height:25px}:host .container-confirm .action{max-width:80%;width:400px}:host .container-confirm ng-fad-image-inline{cursor:pointer}@media (max-width: 992px){:host .container-document .document{flex-direction:column;gap:var(--fad-portal-common-separation-xs)}:host .container-document .document .status,:host .container-document .document .pages{text-align:start!important}:host .container-confirm{flex-direction:column}:host .container-confirm .action{max-width:100%;width:100%!important}}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.DragDropDocumentDirective, selector: "[dragDropDocument]", inputs: ["formatList", "acceptMultipleFiles"], outputs: ["onfiledropped", "onerror"] }, { kind: "component", type: i4.NgFadImageInlineComponent, selector: "ng-fad-image-inline", inputs: ["src"] }] }); }
809
+ }
810
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UploadESignatureComponent, decorators: [{
811
+ type: Component,
812
+ args: [{ selector: 'ng-fad-signature-fea-upload-e-signature', template: "<ng-container *ngIf=\"showComponent\">\r\n <div>\r\n <div *ngIf=\"documents.length > 1\" class=\"fad-portal-title-bold\">{{ documentPluralTitle }}</div>\r\n <div *ngIf=\"documents.length === 1\" class=\"fad-portal-title-bold\">{{ documentSingularTitle }}</div>\r\n\r\n <div class=\"container-document fad-portal-content\">\r\n <div *ngFor=\"let i of documents\" class=\"document\">\r\n <div>{{ i.doc.name }}</div>\r\n <div class=\"status fad-portal-content-bold\">{{ i.approved ? configuration.customization?.moduleCustomization?.legends?.documents?.status?.approved : configuration.customization?.moduleCustomization?.legends?.documents?.status?.rejected }}</div>\r\n <div class=\"pages\">{{ i.doc.pages }} {{ i.doc.pages > 1 ? configuration.customization?.moduleCustomization?.legends?.documents?.pages?.plural : configuration.customization?.moduleCustomization?.legends?.documents?.pages?.singular }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-container *ngIf=\"!allIsRejected()\">\r\n <div class=\"fad-portal-title-bold\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.title }}</div>\r\n\r\n <div>\r\n <div class=\"container-instruction-file\">\r\n <div class=\"fad-portal-content\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.cer?.label }}</div>\r\n <div *ngIf=\"cer?.value\" class=\"fad-portal-content select-file\" (click)=\"openFilePicker(fileCerInput)\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.upload }}</div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!cer?.value\"\r\n class=\"container-upload\"\r\n (click)=\"openFilePicker(fileCerInput)\"\r\n dragDropDocument\r\n [formatList]=\"formatCerList\"\r\n [acceptMultipleFiles]=\"false\"\r\n (onfiledropped)=\"onfiledropped($event, 'cer')\"\r\n (onerror)=\"onerrorDirective($event, 'cer')\">\r\n <div class=\"fad-portal-content instruction\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.cer?.instruction }}</div>\r\n <div class=\"fad-portal-content-bold upload-btn\">\r\n <ng-fad-image-inline [src]=\"uploadImg\"></ng-fad-image-inline>\r\n <span>{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.cer?.upload }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"cer?.value\" class=\"container-file\">\r\n <div class=\"document-img\">\r\n <img [src]=\"fileImg\" alt=\"\">\r\n </div>\r\n <div class=\"fad-portal-content\">{{ cer?.value.name }}</div>\r\n </div>\r\n\r\n <input type=\"file\" accept=\".cer\" #fileCerInput style=\"display: none\" (change)=\"onFileChange($event, 'cer')\">\r\n </div>\r\n\r\n <div>\r\n <div class=\"container-instruction-file\">\r\n <div class=\"fad-portal-content\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.key?.label }}</div>\r\n <div *ngIf=\"key?.value\" class=\"fad-portal-content select-file\" (click)=\"openFilePicker(fileKeyInput)\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.upload }}</div>\r\n </div>\r\n\r\n <div\r\n *ngIf=\"!key?.value\"\r\n class=\"container-upload\"\r\n (click)=\"openFilePicker(fileKeyInput)\"\r\n dragDropDocument\r\n [formatList]=\"formatKeyList\"\r\n [acceptMultipleFiles]=\"false\"\r\n (onfiledropped)=\"onfiledropped($event, 'key')\"\r\n (onerror)=\"onerrorDirective($event, 'key')\">\r\n\r\n <div class=\"fad-portal-content instruction\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.key?.instruction }}</div>\r\n <div class=\"fad-portal-content-bold upload-btn\">\r\n <ng-fad-image-inline [src]=\"uploadImg\"></ng-fad-image-inline>\r\n <span>{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.key?.upload }}</span>\r\n </div>\r\n </div>\r\n\r\n <div *ngIf=\"key?.value\" class=\"container-file\">\r\n <div class=\"document-img\">\r\n <img [src]=\"fileImg\" alt=\"\">\r\n </div>\r\n <div class=\"fad-portal-content\">{{ key?.value.name }}</div>\r\n </div>\r\n\r\n <input type=\"file\" accept=\".key\" #fileKeyInput style=\"display: none\" (change)=\"onFileChange($event, 'key')\">\r\n </div>\r\n\r\n <div class=\"fad-portal-container-input\">\r\n <label class=\"fad-portal-content\" for=\"\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.password?.label }}</label>\r\n <div class=\"input-password\">\r\n <input [type]=\"passwordInputType\" (input)=\"savePassword($event)\">\r\n <div class=\"fad-portal-content-bold password-show\">\r\n <div *ngIf=\"passwordInputType === 'text'\" (click)=\"changePaswordInputType()\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.password?.hide }}</div>\r\n <div *ngIf=\"passwordInputType === 'password'\" (click)=\"changePaswordInputType()\">{{ configuration.customization?.moduleCustomization?.legends?.eSignature?.password?.show }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n </ng-container>\r\n\r\n <div></div>\r\n\r\n <div class=\"fad-portal-content container-confirm\">\r\n <div *ngIf=\"!allIsRejected()\" (click)=\"isValidated = !isValidated\">\r\n <div>\r\n <ng-fad-image-inline *ngIf=\"isValidated\" [src]=\"checkOnImg\"></ng-fad-image-inline>\r\n <ng-fad-image-inline *ngIf=\"!isValidated\" [src]=\"checkOffImg\"></ng-fad-image-inline>\r\n </div>\r\n <div *ngIf=\"documents.length === 1\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.validate?.singular }}</div>\r\n <div *ngIf=\"documents.length > 1\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.validate?.plural }}</div>\r\n </div>\r\n\r\n <div></div>\r\n\r\n <div class=\"action\">\r\n <button type=\"button\" *ngIf=\"documents.length === 1 && !allIsRejected()\" class=\"fad-portal-primary\" [disabled]=\"!form.valid || !isValidated\" (click)=\"signDocuments()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.sign?.singular }}</button>\r\n <button type=\"button\" *ngIf=\"documents.length > 1 && !allIsRejected()\" class=\"fad-portal-primary\" [disabled]=\"!form.valid || !isValidated\" (click)=\"signDocuments()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.sign?.plural }}</button>\r\n <button type=\"button\" *ngIf=\"documents.length === 1 && allIsRejected()\" class=\"fad-portal-primary\" (click)=\"onRejectDocument()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.reject?.singular }}</button>\r\n <button type=\"button\" *ngIf=\"documents.length > 1 && allIsRejected()\" class=\"fad-portal-primary\" (click)=\"onRejectDocument()\">{{ configuration.customization?.moduleCustomization?.legends?.sign?.button?.reject?.plural }}</button>\r\n </div>\r\n </div>\r\n</ng-container>\r\n", styles: [":host{display:flex;flex-direction:column;gap:var(--fad-portal-common-separation-md)}:host .container-document{display:flex;flex-direction:column;width:100%;background-color:var(--fad-signature-fea-e-signature-documents-background-color);border-radius:var(--fad-signature-fea-e-signature-documents-border-radius);padding:var(--fad-portal-common-separation-md);box-sizing:border-box;margin-top:var(--fad-portal-common-separation-xs)}:host .container-document .document{display:flex;gap:var(--fad-portal-common-separation-md);justify-content:space-between;border-bottom:1px solid var(--fad-portal-common-border-color);padding:var(--fad-portal-common-separation-md) 0}:host .container-document .document>div{flex:1}:host .container-document .document .status{text-align:center}:host .container-document .document .pages{text-align:end;color:var(--fad-portal-common-legends-secondary)}:host .document:only-child{border-bottom:none!important}:host .container-instruction-file{display:flex;gap:var(--fad-portal-common-separation-md);justify-content:space-between}:host .container-instruction-file .select-file{color:var(--fad-portal-common-primary-color);cursor:pointer}:host .container-upload{width:100%;box-sizing:border-box;border-radius:var(--fad-signature-fea-e-signature-upload-border-radius);border:var(--fad-signature-fea-e-signature-upload-border);padding:var(--fad-portal-common-separation-md);margin-top:var(--fad-portal-common-separation-xs);display:flex;flex-direction:column;gap:var(--fad-portal-common-separation-xs);align-items:center;justify-content:center;text-align:center;background-color:var(--fad-signature-fea-e-signature-upload-background-color)}:host .container-upload .instruction{color:var(--fad-portal-common-legends-secondary)}:host .container-upload .upload-btn{max-width:90%;width:300px;box-sizing:border-box;background-color:var(--fad-signature-fea-e-signature-upload-button-background-color);border-radius:var(--fad-signature-fea-e-signature-upload-button-border-radius);color:var(--fad-portal-common-legends-tertiary);padding:var(--fad-portal-common-separation-xs);cursor:pointer;transition:all .2s ease-out;display:flex;align-items:center;justify-content:center;text-align:center;gap:var(--fad-portal-common-separation-xs)}:host .container-upload .upload-btn:hover{background-color:var(--fad-signature-fea-e-signature-upload-button-hover)}:host .container-file{display:flex;gap:var(--fad-portal-common-separation-md);align-items:center;padding:var(--fad-portal-common-separation-md);border:2px solid var(--fad-portal-common-successful-color);height:71px;border-radius:var(--fad-signature-fea-e-signature-file-border-radius);margin-top:var(--fad-portal-common-separation-xs)}:host .container-file .document-img{background-color:var(--fad-signature-fea-e-signature-file-img-background-color);width:40px;height:40px;border-radius:100%;display:flex;align-items:center;justify-content:center}:host .container-file .document-img img{width:60%;max-width:100%;max-height:100%}:host .fad-portal-container-input .input-password{position:relative}:host .fad-portal-container-input .input-password input{padding-right:100px}:host .fad-portal-container-input .input-password .password-show{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--fad-portal-common-legends-secondary);cursor:pointer}:host .container-confirm{display:flex;justify-content:space-between;align-items:center;gap:var(--fad-portal-common-separation-xs)}:host .container-confirm>div:first-child{display:flex;gap:var(--fad-portal-common-separation-xs)}:host .container-confirm>div:first-child>div:first-child{width:25px;height:25px}:host .container-confirm .action{max-width:80%;width:400px}:host .container-confirm ng-fad-image-inline{cursor:pointer}@media (max-width: 992px){:host .container-document .document{flex-direction:column;gap:var(--fad-portal-common-separation-xs)}:host .container-document .document .status,:host .container-document .document .pages{text-align:start!important}:host .container-confirm{flex-direction:column}:host .container-confirm .action{max-width:100%;width:100%!important}}\n"] }]
813
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.FormBuilder }, { type: i2$1.FadService }, { type: i2$1.MifielService }]; }, propDecorators: { configuration: [{
814
+ type: Input
815
+ }], documents: [{
816
+ type: Input
817
+ }], signerId: [{
818
+ type: Input
819
+ }], rfc: [{
820
+ type: Input
821
+ }], onerror: [{
822
+ type: Output
823
+ }], onloader: [{
824
+ type: Output
825
+ }], oncomplete: [{
826
+ type: Output
827
+ }] } });
828
+
829
+ class GenericErrorFeaComponent {
830
+ ngOnInit() {
831
+ this.setCustomizationStyle();
832
+ this.errorIgm = this.configuration.pathDependencies?.images?.error || `${this.configuration.pathDependencies?.imageDirectory}error.svg`;
833
+ }
834
+ setCustomizationStyle(targetElement = document.documentElement) {
835
+ this.configuration = Utils.mergeConfiguration(new Configuration(), GENERIC_ERROR_FEA_CONFIGURATION_DEFAULT, this.configuration);
836
+ }
837
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GenericErrorFeaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
838
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GenericErrorFeaComponent, selector: "ng-fad-signature-fea-generic-error-fea", inputs: { configuration: "configuration", title: "title", instruction: "instruction" }, ngImport: i0, template: "<ng-fad-image-inline [src]=\"errorIgm\"></ng-fad-image-inline>\n<div class=\"fad-portal-title-bold\">{{ title ? title : configuration.customization?.moduleCustomization?.legends?.title }}</div>\n<div class=\"fad-portal-content\">{{ instruction ? instruction : configuration.customization?.moduleCustomization?.legends?.instruction }}</div>\n", styles: [":host{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:var(--fad-portal-common-separation-md)}\n"], dependencies: [{ kind: "component", type: i4.NgFadImageInlineComponent, selector: "ng-fad-image-inline", inputs: ["src"] }] }); }
839
+ }
840
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GenericErrorFeaComponent, decorators: [{
841
+ type: Component,
842
+ args: [{ selector: 'ng-fad-signature-fea-generic-error-fea', template: "<ng-fad-image-inline [src]=\"errorIgm\"></ng-fad-image-inline>\n<div class=\"fad-portal-title-bold\">{{ title ? title : configuration.customization?.moduleCustomization?.legends?.title }}</div>\n<div class=\"fad-portal-content\">{{ instruction ? instruction : configuration.customization?.moduleCustomization?.legends?.instruction }}</div>\n", styles: [":host{display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;gap:var(--fad-portal-common-separation-md)}\n"] }]
843
+ }], propDecorators: { configuration: [{
844
+ type: Input
845
+ }], title: [{
846
+ type: Input
847
+ }], instruction: [{
848
+ type: Input
849
+ }] } });
850
+
851
+ class ValidateSignatureComponent {
852
+ constructor(fad) {
853
+ this.fad = fad;
854
+ this.onloader = new EventEmitter();
855
+ this.onerror = new EventEmitter();
856
+ this.oncomplete = new EventEmitter();
857
+ this.onsigned = new EventEmitter();
858
+ }
859
+ ngOnInit() {
860
+ this.setCustomizationStyle();
861
+ const canContinue = this.validateData();
862
+ if (canContinue)
863
+ this.getSignerStatusFea();
864
+ }
865
+ validateData() {
866
+ if (!this.requisitionId) {
867
+ this.onerror.emit(new ResponseError(ValidateSignatureErrorCode.NO_REQUISITION_ID, getValidateSignatureErrorDescription(ValidateSignatureErrorCode.NO_REQUISITION_ID), 'ng-fad-signature-fea-validate-signature'));
868
+ return false;
869
+ }
870
+ if (!this.signerId) {
871
+ this.onerror.emit(new ResponseError(ValidateSignatureErrorCode.NO_SIGNER_ID, getValidateSignatureErrorDescription(ValidateSignatureErrorCode.NO_SIGNER_ID), 'ng-fad-signature-fea-validate-signature'));
872
+ return false;
873
+ }
874
+ return true;
875
+ }
876
+ getSignerStatusFea() {
877
+ this.onloader.emit(true);
878
+ this.fad.getSignerStatusFea(this.requisitionId, this.signerId, this.configuration.services?.signerStatusFea)
879
+ .pipe(finalize(() => this.onloader.emit(false)))
880
+ .subscribe({
881
+ next: (res) => {
882
+ if (res.success) {
883
+ res.data === 'COMPLETED' ? this.onsigned.emit(res.data) : this.oncomplete.emit(res.data);
884
+ }
885
+ else {
886
+ this.onerror.emit(new ResponseError(ValidateSignatureErrorCode.SERVICE, res.error, 'ng-fad-signature-fea-validate-signature'));
887
+ }
888
+ },
889
+ error: (error) => {
890
+ this.onerror.emit(new ResponseError(ValidateSignatureErrorCode.HTTP, error.error, 'ng-fad-signature-fea-validate-signature'));
891
+ }
892
+ });
893
+ }
894
+ setCustomizationStyle(targetElement = document.documentElement) {
895
+ this.configuration = Utils.mergeConfiguration(new Configuration(), VALIDATE_SIGNATURE_CONFIGURATION_DEFAULT, this.configuration);
896
+ }
897
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidateSignatureComponent, deps: [{ token: i2$1.FadService }], target: i0.ɵɵFactoryTarget.Component }); }
898
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ValidateSignatureComponent, selector: "ng-fad-signature-fea-validate-signature", inputs: { configuration: "configuration", signerId: "signerId", requisitionId: "requisitionId" }, outputs: { onloader: "onloader", onerror: "onerror", oncomplete: "oncomplete", onsigned: "onsigned" }, ngImport: i0, template: "", styles: [""] }); }
899
+ }
900
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ValidateSignatureComponent, decorators: [{
901
+ type: Component,
902
+ args: [{ selector: 'ng-fad-signature-fea-validate-signature', template: "" }]
903
+ }], ctorParameters: function () { return [{ type: i2$1.FadService }]; }, propDecorators: { configuration: [{
904
+ type: Input
905
+ }], signerId: [{
906
+ type: Input
907
+ }], requisitionId: [{
908
+ type: Input
909
+ }], onloader: [{
910
+ type: Output
911
+ }], onerror: [{
912
+ type: Output
913
+ }], oncomplete: [{
914
+ type: Output
915
+ }], onsigned: [{
916
+ type: Output
917
+ }] } });
918
+
919
+ class NgFadSignatureFeaModule {
920
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgFadSignatureFeaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
921
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: NgFadSignatureFeaModule, declarations: [ValidateRfcComponent,
922
+ DocumentApprovalListComponent,
923
+ UploadESignatureComponent,
924
+ GenericErrorFeaComponent,
925
+ ValidateSignatureComponent], imports: [CommonModule,
926
+ ReactiveFormsModule,
927
+ NgFadSharedModule,
928
+ NgFadImageInlineModule,
929
+ NgFadViewerModule], exports: [ValidateRfcComponent,
930
+ DocumentApprovalListComponent,
931
+ UploadESignatureComponent,
932
+ GenericErrorFeaComponent,
933
+ ValidateSignatureComponent] }); }
934
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgFadSignatureFeaModule, imports: [CommonModule,
935
+ ReactiveFormsModule,
936
+ NgFadSharedModule,
937
+ NgFadImageInlineModule,
938
+ NgFadViewerModule] }); }
939
+ }
940
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: NgFadSignatureFeaModule, decorators: [{
941
+ type: NgModule,
942
+ args: [{
943
+ declarations: [
944
+ ValidateRfcComponent,
945
+ DocumentApprovalListComponent,
946
+ UploadESignatureComponent,
947
+ GenericErrorFeaComponent,
948
+ ValidateSignatureComponent
949
+ ],
950
+ imports: [
951
+ CommonModule,
952
+ ReactiveFormsModule,
953
+ NgFadSharedModule,
954
+ NgFadImageInlineModule,
955
+ NgFadViewerModule,
956
+ ],
957
+ exports: [
958
+ ValidateRfcComponent,
959
+ DocumentApprovalListComponent,
960
+ UploadESignatureComponent,
961
+ GenericErrorFeaComponent,
962
+ ValidateSignatureComponent
963
+ ]
964
+ }]
965
+ }] });
966
+
967
+ /*
968
+ * Public API Surface of ng-fad-signature-fea
969
+ */
970
+
971
+ /**
972
+ * Generated bundle index. Do not edit.
973
+ */
974
+
975
+ export { DOCUMENT_APPROVAL_LIST_DEFAULT, DocumentApprovalListComponent, DocumentApprovalListErrorCode, GENERIC_ERROR_FEA_CONFIGURATION_DEFAULT, GenericErrorFeaComponent, GenericErrorFeaErrorCode, NgFadSignatureFeaModule, SIGNATURE_FEA_CONFIGURATION_DEFAULT, UPLOAD_E_SIGNATURE_CONFIGURATION_DEFAULT, UploadESignatureComponent, UploadESignatureErrorCode, VALIDATE_SIGNATURE_CONFIGURATION_DEFAULT, ValidateRFCErrorCode, ValidateRfcComponent, ValidateSignatureComponent, ValidateSignatureErrorCode, getDocumentApprovalListErrorDescription, getGenericErrorFeaErrorDescription, getUploadESignatureErrorDescription, getValidateRFCErrorDescription, getValidateSignatureErrorDescription };
976
+ //# sourceMappingURL=fad-producto-portal-ng-fad-signature-fea.mjs.map