herum-shared 0.1.25

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 (236) hide show
  1. package/README.md +63 -0
  2. package/animations/index.d.ts +5 -0
  3. package/assets/feed/exercise/exerciseAchivment.svg +11 -0
  4. package/assets/feed/icons/active/audio.svg +5 -0
  5. package/assets/feed/icons/active/collection.svg +15 -0
  6. package/assets/feed/icons/active/exercise.svg +13 -0
  7. package/assets/feed/icons/active/generic-file.svg +8 -0
  8. package/assets/feed/icons/active/image.svg +11 -0
  9. package/assets/feed/icons/active/link.svg +6 -0
  10. package/assets/feed/icons/active/pdf.svg +14 -0
  11. package/assets/feed/icons/active/presentation.svg +11 -0
  12. package/assets/feed/icons/active/quiz.svg +17 -0
  13. package/assets/feed/icons/active/story.svg +7 -0
  14. package/assets/feed/icons/active/video.svg +11 -0
  15. package/assets/feed/icons/comment.svg +12 -0
  16. package/assets/feed/icons/error/audio.svg +5 -0
  17. package/assets/feed/icons/error/collection.svg +15 -0
  18. package/assets/feed/icons/error/exercise.svg +13 -0
  19. package/assets/feed/icons/error/generic-file.svg +8 -0
  20. package/assets/feed/icons/error/image.svg +11 -0
  21. package/assets/feed/icons/error/pdf.svg +14 -0
  22. package/assets/feed/icons/error/presentation.svg +11 -0
  23. package/assets/feed/icons/error/quiz.svg +17 -0
  24. package/assets/feed/icons/error/story.svg +7 -0
  25. package/assets/feed/icons/error/video.svg +11 -0
  26. package/assets/feed/icons/eye.svg +13 -0
  27. package/assets/feed/icons/garbage-secondary.svg +14 -0
  28. package/assets/feed/icons/garbage.svg +14 -0
  29. package/assets/feed/icons/green-x.svg +165 -0
  30. package/assets/feed/icons/hamburger.svg +2 -0
  31. package/assets/feed/icons/inactive/audio.svg +5 -0
  32. package/assets/feed/icons/inactive/exercise.svg +17 -0
  33. package/assets/feed/icons/inactive/link.svg +6 -0
  34. package/assets/feed/icons/inactive/pdf.svg +19 -0
  35. package/assets/feed/icons/inactive/presentation.svg +13 -0
  36. package/assets/feed/icons/inactive/quiz.svg +25 -0
  37. package/assets/feed/icons/inactive/story.svg +7 -0
  38. package/assets/feed/icons/inactive/video.svg +13 -0
  39. package/assets/feed/icons/status/Group 856.svg +11 -0
  40. package/assets/feed/icons/status/almostDone.svg +11 -0
  41. package/assets/feed/icons/status/done.svg +11 -0
  42. package/assets/feed/icons/status/inProgress.svg +13 -0
  43. package/assets/feed/icons/white-chevron.svg +3 -0
  44. package/assets/feed/icons/wide-mode.png +0 -0
  45. package/assets/feed/icons/wide-mode.svg +7 -0
  46. package/assets/feed/icons/wide-mode2.svg +8 -0
  47. package/assets/files-icons/.image.svg +11 -0
  48. package/assets/files-icons/.mp4.png +0 -0
  49. package/assets/files-icons/.mp4.svg +12 -0
  50. package/assets/files-icons/.pdf.png +0 -0
  51. package/assets/files-icons/.pdf.svg +16 -0
  52. package/assets/files-icons/.pptx.png +0 -0
  53. package/assets/files-icons/.pptx.svg +12 -0
  54. package/assets/files-icons/.video.svg +12 -0
  55. package/assets/files-icons/default-file.png +0 -0
  56. package/assets/files-icons/generic-file.svg +8 -0
  57. package/assets/files-icons/story.png +0 -0
  58. package/assets/files-icons/story.svg +3 -0
  59. package/assets/files-icons/upload-file.svg +4 -0
  60. package/assets/general/calendar.svg +12 -0
  61. package/assets/general/chevron.svg +3 -0
  62. package/assets/general/clock.svg +4 -0
  63. package/assets/general/closed-chevron.png +0 -0
  64. package/assets/general/college-calendar.svg +12 -0
  65. package/assets/general/comment-icon.svg +12 -0
  66. package/assets/general/dialogX.png +0 -0
  67. package/assets/general/errorOwl.png +0 -0
  68. package/assets/general/green-x.svg +4 -0
  69. package/assets/general/grey-chevron.svg +3 -0
  70. package/assets/general/keyboardLink.svg +15 -0
  71. package/assets/general/logo.png +0 -0
  72. package/assets/general/noCollectionsMessage.svg +59 -0
  73. package/assets/general/open-chevron.png +0 -0
  74. package/assets/general/owl-logo.svg +98 -0
  75. package/assets/general/secondary-x.svg +3 -0
  76. package/assets/general/user.svg +15 -0
  77. package/assets/general/white-chevron.svg +3 -0
  78. package/assets/quiz/greenHeaderArrow.svg +12 -0
  79. package/assets/quiz/greyHeaderArrow.svg +12 -0
  80. package/assets/quiz/happyOwl.svg +126 -0
  81. package/assets/quiz/sadOwl.svg +94 -0
  82. package/assets/quiz/skip.svg +5 -0
  83. package/assets/shared/atoms/inputs/herum-inputs.component.scss +56 -0
  84. package/assets/shared/atoms/selects/herum-selects.component.scss +141 -0
  85. package/assets/shared/atoms/uploadingStatuses/error.svg +8 -0
  86. package/assets/shared/atoms/uploadingStatuses/information.svg +6 -0
  87. package/assets/shared/atoms/uploadingStatuses/success.svg +9 -0
  88. package/assets/shared/audio-images/gray-pause.svg +4 -0
  89. package/assets/shared/audio-images/gray-play.svg +3 -0
  90. package/assets/shared/audio-images/next15.svg +7 -0
  91. package/assets/shared/audio-images/pause.svg +4 -0
  92. package/assets/shared/audio-images/play.svg +3 -0
  93. package/assets/shared/audio-images/previous15.svg +7 -0
  94. package/assets/shared/background/cubes.png +0 -0
  95. package/assets/shared/background/cubes.svg +1900 -0
  96. package/assets/shared/icons/V.svg +3 -0
  97. package/assets/shared/icons/X.svg +3 -0
  98. package/assets/shared/icons/active-clipboard.svg +7 -0
  99. package/assets/shared/icons/active-drag.svg +44 -0
  100. package/assets/shared/icons/active-upload.svg +3 -0
  101. package/assets/shared/icons/add.svg +3 -0
  102. package/assets/shared/icons/attachUsers.png +0 -0
  103. package/assets/shared/icons/big-no-result-owl.png +0 -0
  104. package/assets/shared/icons/bigV.svg +3 -0
  105. package/assets/shared/icons/celeb-owl.png +0 -0
  106. package/assets/shared/icons/clock.svg +3 -0
  107. package/assets/shared/icons/drag.svg +44 -0
  108. package/assets/shared/icons/edit.svg +3 -0
  109. package/assets/shared/icons/editCollection.png +0 -0
  110. package/assets/shared/icons/femaleAvatar.svg +80 -0
  111. package/assets/shared/icons/inactive-clipboard.svg +7 -0
  112. package/assets/shared/icons/input/X.png +0 -0
  113. package/assets/shared/icons/input/X.svg +3 -0
  114. package/assets/shared/icons/input/drag.svg +6 -0
  115. package/assets/shared/icons/input/green-search.png +0 -0
  116. package/assets/shared/icons/input/grey-search.png +0 -0
  117. package/assets/shared/icons/input/search.svg +4 -0
  118. package/assets/shared/icons/maleAvatar.svg +55 -0
  119. package/assets/shared/icons/no-result-owl.png +0 -0
  120. package/assets/shared/icons/resources.svg +6 -0
  121. package/assets/shared/icons/secondary-x.svg +3 -0
  122. package/assets/shared/icons/settings.png +0 -0
  123. package/assets/shared/icons/stepper/white-v.svg +3 -0
  124. package/assets/shared/icons/table/edit.svg +3 -0
  125. package/assets/shared/icons/target.png +0 -0
  126. package/assets/shared/icons/upload.png +0 -0
  127. package/assets/shared/icons/upload.svg +7 -0
  128. package/assets/shared/icons/user.svg +8 -0
  129. package/assets/shared/icons/video/Play.PNG +0 -0
  130. package/assets/shared/icons/video/back10.PNG +0 -0
  131. package/assets/shared/icons/video/back10.svg +7 -0
  132. package/assets/shared/icons/video/download.PNG +0 -0
  133. package/assets/shared/icons/video/download.svg +4 -0
  134. package/assets/shared/icons/video/fullScreen.PNG +0 -0
  135. package/assets/shared/icons/video/fullScreen.svg +7 -0
  136. package/assets/shared/icons/video/minimize.png +0 -0
  137. package/assets/shared/icons/video/mute.png +0 -0
  138. package/assets/shared/icons/video/mute.svg +7 -0
  139. package/assets/shared/icons/video/next10.PNG +0 -0
  140. package/assets/shared/icons/video/next10.svg +7 -0
  141. package/assets/shared/icons/video/pause.PNG +0 -0
  142. package/assets/shared/icons/video/pause.svg +5 -0
  143. package/assets/shared/icons/video/pictureInPicture.png +0 -0
  144. package/assets/shared/icons/video/pictureInPicture.svg +5 -0
  145. package/assets/shared/icons/video/pictureInPictureOff.svg +7 -0
  146. package/assets/shared/icons/video/play.svg +4 -0
  147. package/assets/shared/icons/video/primary-play.png +0 -0
  148. package/assets/shared/icons/video/primaryPlay.svg +22 -0
  149. package/assets/shared/icons/video/sound.svg +8 -0
  150. package/assets/shared/icons/video/speaker.PNG +0 -0
  151. package/assets/shared/trackChanges/edit.svg +11 -0
  152. package/assets/shared/trackChanges/message-plus.svg +14 -0
  153. package/assets/shared/trackChanges/show-comments.svg +5 -0
  154. package/assets/shared/trackChanges/text-reference.svg +3 -0
  155. package/assets/shared/trackChanges/trash.svg +9 -0
  156. package/atoms/index.d.ts +836 -0
  157. package/constants/index.d.ts +795 -0
  158. package/decorators/index.d.ts +3 -0
  159. package/dialogs/index.d.ts +41 -0
  160. package/directives/index.d.ts +55 -0
  161. package/environment/index.d.ts +129 -0
  162. package/errors/index.d.ts +26 -0
  163. package/fesm2022/herum-shared-animations.mjs +41 -0
  164. package/fesm2022/herum-shared-animations.mjs.map +1 -0
  165. package/fesm2022/herum-shared-atoms.mjs +2919 -0
  166. package/fesm2022/herum-shared-atoms.mjs.map +1 -0
  167. package/fesm2022/herum-shared-constants.mjs +711 -0
  168. package/fesm2022/herum-shared-constants.mjs.map +1 -0
  169. package/fesm2022/herum-shared-decorators.mjs +12 -0
  170. package/fesm2022/herum-shared-decorators.mjs.map +1 -0
  171. package/fesm2022/herum-shared-dialogs.mjs +113 -0
  172. package/fesm2022/herum-shared-dialogs.mjs.map +1 -0
  173. package/fesm2022/herum-shared-directives.mjs +226 -0
  174. package/fesm2022/herum-shared-directives.mjs.map +1 -0
  175. package/fesm2022/herum-shared-environment.mjs +10 -0
  176. package/fesm2022/herum-shared-environment.mjs.map +1 -0
  177. package/fesm2022/herum-shared-errors.mjs +71 -0
  178. package/fesm2022/herum-shared-errors.mjs.map +1 -0
  179. package/fesm2022/herum-shared-fetched-message.mjs +118 -0
  180. package/fesm2022/herum-shared-fetched-message.mjs.map +1 -0
  181. package/fesm2022/herum-shared-herum-types.mjs +106 -0
  182. package/fesm2022/herum-shared-herum-types.mjs.map +1 -0
  183. package/fesm2022/herum-shared-molecules.mjs +1530 -0
  184. package/fesm2022/herum-shared-molecules.mjs.map +1 -0
  185. package/fesm2022/herum-shared-mongo-molecules.mjs +269 -0
  186. package/fesm2022/herum-shared-mongo-molecules.mjs.map +1 -0
  187. package/fesm2022/herum-shared-mongo-services.mjs +441 -0
  188. package/fesm2022/herum-shared-mongo-services.mjs.map +1 -0
  189. package/fesm2022/herum-shared-mongo.mjs +729 -0
  190. package/fesm2022/herum-shared-mongo.mjs.map +1 -0
  191. package/fesm2022/herum-shared-objectsExample.mjs +190 -0
  192. package/fesm2022/herum-shared-objectsExample.mjs.map +1 -0
  193. package/fesm2022/herum-shared-pipes.mjs +406 -0
  194. package/fesm2022/herum-shared-pipes.mjs.map +1 -0
  195. package/fesm2022/herum-shared-services.mjs +1107 -0
  196. package/fesm2022/herum-shared-services.mjs.map +1 -0
  197. package/fesm2022/herum-shared-static-services.mjs +140 -0
  198. package/fesm2022/herum-shared-static-services.mjs.map +1 -0
  199. package/fesm2022/herum-shared-table.mjs +837 -0
  200. package/fesm2022/herum-shared-table.mjs.map +1 -0
  201. package/fesm2022/herum-shared-testsObjects.mjs +5722 -0
  202. package/fesm2022/herum-shared-testsObjects.mjs.map +1 -0
  203. package/fesm2022/herum-shared-tokens.mjs +13 -0
  204. package/fesm2022/herum-shared-tokens.mjs.map +1 -0
  205. package/fesm2022/herum-shared-utils.mjs +380 -0
  206. package/fesm2022/herum-shared-utils.mjs.map +1 -0
  207. package/fesm2022/herum-shared-validators.mjs +76 -0
  208. package/fesm2022/herum-shared-validators.mjs.map +1 -0
  209. package/fesm2022/herum-shared.mjs +11709 -0
  210. package/fesm2022/herum-shared.mjs.map +1 -0
  211. package/fetched-message/index.d.ts +49 -0
  212. package/herum-types/index.d.ts +198 -0
  213. package/index.d.ts +2946 -0
  214. package/molecules/index.d.ts +458 -0
  215. package/mongo/index.d.ts +175 -0
  216. package/mongo/molecules/index.d.ts +76 -0
  217. package/mongo/services/index.d.ts +98 -0
  218. package/objectsExample/index.d.ts +11 -0
  219. package/package.json +128 -0
  220. package/pipes/index.d.ts +93 -0
  221. package/services/index.d.ts +266 -0
  222. package/static-services/index.d.ts +25 -0
  223. package/styles/_mixin.scss +86 -0
  224. package/styles/collection-wizard-layout.component.scss +70 -0
  225. package/styles/dialogs.scss +49 -0
  226. package/styles/forms.scss +18 -0
  227. package/styles/overView.scss +115 -0
  228. package/styles/variables/_colors.college.scss +65 -0
  229. package/styles/variables/_colors.scss +161 -0
  230. package/styles/variables/_sizes.scss +73 -0
  231. package/styles/wizard-steps-layout.scss +21 -0
  232. package/table/index.d.ts +233 -0
  233. package/testsObjects/index.d.ts +91 -0
  234. package/tokens/index.d.ts +8 -0
  235. package/utils/index.d.ts +92 -0
  236. package/validators/index.d.ts +20 -0
@@ -0,0 +1,729 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Inject, Injectable, ViewChildren, Component, HostListener, NgModule } from '@angular/core';
3
+ import { ErrorMessageDialogComponent } from 'herum-shared/errors';
4
+ import { dialogsDescriptions, dialogsTitles, getToastsTemplates, toastStatuses, toastContext, toastStates, uploadsManagerKeys, uploadStatuses, svgsStrings } from 'herum-shared/constants';
5
+ import { Subject, EMPTY, forkJoin, BehaviorSubject } from 'rxjs';
6
+ import { HERUM_SHARED_CONFIG_TOKEN } from 'herum-shared/environment';
7
+ import * as i1 from '@angular/material/dialog';
8
+ import * as i2 from '@angular/common/http';
9
+ import * as i3 from 'herum-shared/static-services';
10
+ import { StorageService } from 'herum-shared/static-services';
11
+ import { catchError, switchMap, takeUntil, shareReplay } from 'rxjs/operators';
12
+ import * as i1$1 from 'herum-shared/mongo/services';
13
+ import * as i2$1 from '@angular/common';
14
+ import { CommonModule } from '@angular/common';
15
+ import * as i4 from 'herum-shared/pipes';
16
+ import { PipesModule } from 'herum-shared/pipes';
17
+ import { isTruncatedTitleElement } from 'herum-shared/utils';
18
+ import * as i3$1 from 'herum-shared/atoms';
19
+ import { AtomsModule } from 'herum-shared/atoms';
20
+ import { MAT_DATE_LOCALE } from '@angular/material/core';
21
+
22
+ class ErrorsHandlerService {
23
+ dialog;
24
+ http;
25
+ utilsService;
26
+ environmentConfig;
27
+ isErrorPopupCurrentlyOpened = false;
28
+ failedReportUploadProgressRequests = [];
29
+ failedDependentsRequestsContext = {};
30
+ dependentRequestId$ = new Subject();
31
+ reportUploadProgressRequest$ = new Subject();
32
+ commonDependentsErrorToast$ = new Subject();
33
+ errorToast$ = new Subject();
34
+ constructor(dialog, http, utilsService, environmentConfig) {
35
+ this.dialog = dialog;
36
+ this.http = http;
37
+ this.utilsService = utilsService;
38
+ this.environmentConfig = environmentConfig;
39
+ }
40
+ handleError(errorStatus, errorData) {
41
+ if (!errorData)
42
+ return;
43
+ let url = errorData?.url;
44
+ if (errorData.headers?.dependentId) {
45
+ const commonDependentsErrorToast = { commonDependentsId: errorData.commonDependentsId, numberOfObservableArrowFunctions: errorData.numberOfObservableArrowFunctions, errorStatus };
46
+ this.handleDependentRequestError(commonDependentsErrorToast, errorData.headers?.dependentId);
47
+ }
48
+ if (errorData.headers?.reportUploadProgressId)
49
+ this.handleReportUploadProgressRequestError(errorData.headers.reportUploadProgressId);
50
+ const isErrorToastNeeded = this.isErrorToastNeeded(errorData, errorStatus);
51
+ if (isErrorToastNeeded)
52
+ this.handleErrorToast(errorData);
53
+ if (errorData == 'CRITICAL')
54
+ this.handleInternalServerError(true);
55
+ switch (errorStatus) {
56
+ case 401:
57
+ this.handleUnauthorizedError();
58
+ break;
59
+ case 403:
60
+ this.handleForbiddenError(!isErrorToastNeeded);
61
+ break;
62
+ case 409:
63
+ this.handleConflictError();
64
+ break;
65
+ case 500:
66
+ this.handleInternalServerError();
67
+ break;
68
+ case 504:
69
+ this.handleTimeoutError(!isErrorToastNeeded);
70
+ break;
71
+ default: break;
72
+ }
73
+ if (!url?.includes('Activity'))
74
+ this.http.post(this.environmentConfig?.environment?.userAction, errorData).subscribe();
75
+ }
76
+ setFailedReportUploadProgressRequests(failedReportUploadProgressRequest) {
77
+ this.failedReportUploadProgressRequests.push(failedReportUploadProgressRequest);
78
+ }
79
+ handleUnauthorizedError() {
80
+ console.error("Unauthorized error");
81
+ }
82
+ handleConflictError() {
83
+ console.error("Conflict error");
84
+ }
85
+ handleForbiddenError(isErrorPopupNeeded) {
86
+ if (this.isErrorPopupCurrentlyOpened || !isErrorPopupNeeded)
87
+ return;
88
+ this.isErrorPopupCurrentlyOpened = true;
89
+ const dialogRef = this.dialog.open(ErrorMessageDialogComponent, {
90
+ data: { title: dialogsTitles.userError, description: dialogsDescriptions.forbiddenServerError }
91
+ });
92
+ dialogRef.afterClosed().subscribe(result => this.isErrorPopupCurrentlyOpened = false);
93
+ }
94
+ handleTimeoutError(isErrorPopupNeeded) {
95
+ if (this.isErrorPopupCurrentlyOpened || !isErrorPopupNeeded)
96
+ return;
97
+ this.isErrorPopupCurrentlyOpened = true;
98
+ const dialogRef = this.dialog.open(ErrorMessageDialogComponent, {
99
+ data: { title: dialogsTitles.timeoutError, description: dialogsDescriptions.timeoutError }
100
+ });
101
+ dialogRef.afterClosed().subscribe(result => this.isErrorPopupCurrentlyOpened = false);
102
+ }
103
+ handleInternalServerError(isCritical = false) {
104
+ if (this.isErrorPopupCurrentlyOpened)
105
+ return;
106
+ this.isErrorPopupCurrentlyOpened = true;
107
+ const dialogRef = this.dialog.open(ErrorMessageDialogComponent, {
108
+ data: {
109
+ title: dialogsTitles.serverError, description: isCritical ?
110
+ dialogsDescriptions.criticalServerError : dialogsDescriptions.serverError
111
+ }
112
+ });
113
+ dialogRef.afterClosed().subscribe(result => {
114
+ this.isErrorPopupCurrentlyOpened = false;
115
+ });
116
+ }
117
+ handleDependentRequestError(commonDependentsErrorToast, dependentRequestId) {
118
+ this.dependentRequestId$.next(dependentRequestId);
119
+ this.commonDependentsErrorToast$.next(commonDependentsErrorToast);
120
+ }
121
+ handleReportUploadProgressRequestError(reportUploadProgressRequestId) {
122
+ this.reportUploadProgressRequest$.next(reportUploadProgressRequestId);
123
+ }
124
+ isErrorToastNeeded(errorData, errorCode) {
125
+ if (errorData === 'CRITICAL' || errorCode === 500 || errorData.headers?.skipToast)
126
+ return false;
127
+ return !!this.utilsService.getDisplayedNameForMongoMethodByUserActivity(errorData.url);
128
+ }
129
+ handleErrorToast(errorData) {
130
+ if (errorData.headers?.dependentId) {
131
+ this.commonDependentsErrorToast$.next({
132
+ commonDependentsId: errorData.headers.commonDependentsId,
133
+ numberOfObservableArrowFunctions: Number(errorData.headers.numberOfObservableArrowFunctions),
134
+ errorStatus: errorData.status
135
+ });
136
+ return;
137
+ }
138
+ this.errorToast$.next({
139
+ url: errorData.url,
140
+ status: errorData.status
141
+ });
142
+ }
143
+ setChainedFailedObservableFunctions(dependentId, error, failedComplexObservableArrowFunctions, initialValue) {
144
+ if (Array.isArray(failedComplexObservableArrowFunctions[0]) && this.failedDependentsRequestsContext[dependentId])
145
+ this.failedDependentsRequestsContext[dependentId].failedComplexObservableArrowFunctions[0].push(failedComplexObservableArrowFunctions[0]);
146
+ else
147
+ this.failedDependentsRequestsContext[dependentId] = initialValue ? { error, failedComplexObservableArrowFunctions, initialValue } : { error, failedComplexObservableArrowFunctions };
148
+ }
149
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ErrorsHandlerService, deps: [{ token: i1.MatDialog }, { token: i2.HttpClient }, { token: i3.UtilsService }, { token: HERUM_SHARED_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
150
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ErrorsHandlerService, providedIn: 'root' });
151
+ }
152
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ErrorsHandlerService, decorators: [{
153
+ type: Injectable,
154
+ args: [{
155
+ providedIn: 'root'
156
+ }]
157
+ }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i2.HttpClient }, { type: i3.UtilsService }, { type: undefined, decorators: [{
158
+ type: Inject,
159
+ args: [HERUM_SHARED_CONFIG_TOKEN]
160
+ }] }] });
161
+
162
+ class DependentsService {
163
+ errorsHandlerService;
164
+ dependentMetadata = {
165
+ dependentId: 0,
166
+ commonDependentsId: 0,
167
+ numberOfObservableArrowFunctions: 0
168
+ };
169
+ constructor(errorsHandlerService) {
170
+ this.errorsHandlerService = errorsHandlerService;
171
+ }
172
+ chainObservableFunctions(complexFunctions, initialValue) {
173
+ this.dependentMetadata.numberOfObservableArrowFunctions = 0;
174
+ ++this.dependentMetadata.commonDependentsId;
175
+ this.calculateNumberOfObservableFunctions(complexFunctions);
176
+ if (!complexFunctions.length)
177
+ return EMPTY;
178
+ const initialFunction = complexFunctions[0];
179
+ let initialObservable = this.setInitialObservable(complexFunctions, initialFunction, initialValue);
180
+ return this.chainObservables(complexFunctions, initialObservable);
181
+ }
182
+ setInitialObservable(complexFunctions, initialFunction, initialValue) {
183
+ return (Array.isArray(initialFunction)) ?
184
+ this.handleInitialComplexFunction(complexFunctions, initialFunction, initialValue) :
185
+ this.handleInitialFunction(complexFunctions, initialFunction, initialValue);
186
+ }
187
+ handleInitialComplexFunction(complexFunctions, initialFunctions, initialValue) {
188
+ let initialObservable = initialFunctions.map((innerFunction, initialFunctionIndex) => {
189
+ const currentId = (++this.dependentMetadata.dependentId);
190
+ const innerObservable = initialValue ?
191
+ innerFunction(initialValue, { ...this.dependentMetadata, dependentId: currentId })
192
+ : innerFunction({ ...this.dependentMetadata, dependentId: currentId });
193
+ return innerObservable.pipe(catchError((error) => {
194
+ const hasNextDependentFunctionsExist = complexFunctions.slice(initialFunctionIndex + 1).length > 0;
195
+ const slicedFunctions = hasNextDependentFunctionsExist ? [[initialFunctions[initialFunctionIndex]], ...complexFunctions.slice(initialFunctionIndex + 1)] : [[initialFunctions[initialFunctionIndex]]];
196
+ this.errorsHandlerService.setChainedFailedObservableFunctions(currentId.toString(), error, slicedFunctions, initialValue);
197
+ return EMPTY;
198
+ }));
199
+ });
200
+ return forkJoin(initialObservable);
201
+ }
202
+ handleInitialFunction(complexFunctions, initialFunction, initialValue) {
203
+ return (initialValue && !Array.isArray(initialFunction)) ?
204
+ initialFunction(initialValue, { ...this.dependentMetadata, dependentId: ++this.dependentMetadata.dependentId })
205
+ : initialFunction({ ...this.dependentMetadata, dependentId: ++this.dependentMetadata.dependentId })
206
+ .pipe(catchError((error) => {
207
+ initialValue ?
208
+ this.errorsHandlerService.setChainedFailedObservableFunctions(this.dependentMetadata.dependentId.toString(), error, complexFunctions, initialValue) :
209
+ this.errorsHandlerService.setChainedFailedObservableFunctions(this.dependentMetadata.dependentId.toString(), error, complexFunctions);
210
+ return EMPTY;
211
+ }));
212
+ }
213
+ chainObservables(complexFunctions, initialObservable) {
214
+ return complexFunctions.slice(1).reduce((acc, currentFunction, functionsIndex) => {
215
+ return acc.pipe(switchMap((result) => {
216
+ return (Array.isArray(currentFunction)) ?
217
+ this.handleCurrentChainedComplexObservable(complexFunctions, currentFunction, result, functionsIndex)
218
+ :
219
+ this.handleCurrentChainedObservable(complexFunctions, currentFunction, result, functionsIndex);
220
+ }));
221
+ }, initialObservable);
222
+ }
223
+ handleCurrentChainedComplexObservable(complexFunctions, currentFunctions, result, functionsIndex) {
224
+ const observables = currentFunctions.map((innerFunction, innerFunctionIndex) => {
225
+ const currentId = (++this.dependentMetadata.dependentId);
226
+ return innerFunction(result, { ...this.dependentMetadata, dependentId: currentId }).pipe(catchError((error) => {
227
+ const hasNextDependentFunctionsExist = complexFunctions.slice(functionsIndex + 2).length > 0;
228
+ const slicedFunctions = hasNextDependentFunctionsExist ? [[currentFunctions[innerFunctionIndex]], ...complexFunctions.slice(functionsIndex + 2)] : [[currentFunctions[innerFunctionIndex]]];
229
+ this.errorsHandlerService.setChainedFailedObservableFunctions(currentId.toString(), error, slicedFunctions, result);
230
+ return EMPTY;
231
+ }));
232
+ });
233
+ return forkJoin(observables);
234
+ }
235
+ handleCurrentChainedObservable(complexFunctions, currentFunction, result, functionsIndex) {
236
+ return currentFunction(result, { ...this.dependentMetadata, dependentId: ++this.dependentMetadata.dependentId }).pipe(catchError((error) => {
237
+ this.errorsHandlerService.setChainedFailedObservableFunctions(this.dependentMetadata.dependentId.toString(), error, complexFunctions.slice(functionsIndex + 1), result);
238
+ return EMPTY;
239
+ }));
240
+ }
241
+ calculateNumberOfObservableFunctions(complexObservableArrowFunctions) {
242
+ complexObservableArrowFunctions.forEach(complexObservableArrowFunction => {
243
+ if (!Array.isArray(complexObservableArrowFunction))
244
+ ++this.dependentMetadata.numberOfObservableArrowFunctions;
245
+ else
246
+ this.calculateNumberOfObservableFunctions(complexObservableArrowFunction);
247
+ });
248
+ }
249
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DependentsService, deps: [{ token: ErrorsHandlerService }], target: i0.ɵɵFactoryTarget.Injectable });
250
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DependentsService, providedIn: 'root' });
251
+ }
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: DependentsService, decorators: [{
253
+ type: Injectable,
254
+ args: [{
255
+ providedIn: 'root'
256
+ }]
257
+ }], ctorParameters: () => [{ type: ErrorsHandlerService }] });
258
+
259
+ class ToastsService {
260
+ errorsHandlerService;
261
+ utilsService;
262
+ environmentConfig;
263
+ toast$ = new BehaviorSubject(undefined);
264
+ toastId = 0;
265
+ toastsTemplates;
266
+ constructor(errorsHandlerService, utilsService, environmentConfig) {
267
+ this.errorsHandlerService = errorsHandlerService;
268
+ this.utilsService = utilsService;
269
+ this.environmentConfig = environmentConfig;
270
+ this.errorsHandlerService.errorToast$?.subscribe(toastHttpResponseDependencies => this.createToastBasedOnHttpResponse(toastHttpResponseDependencies));
271
+ this.toastsTemplates = getToastsTemplates(this.environmentConfig?.mongoUpdates, this.environmentConfig?.authenticationPaths);
272
+ }
273
+ createToastBasedOnHttpResponse(toastHttpResponseDependencies) {
274
+ if (!toastHttpResponseDependencies)
275
+ return;
276
+ let urlRequest = toastHttpResponseDependencies?.url;
277
+ let mongoMethodDisplayedName = this.utilsService.getDisplayedNameForMongoMethodByUserActivity(urlRequest);
278
+ if (!mongoMethodDisplayedName)
279
+ return;
280
+ let status = this.setToastStatus(toastHttpResponseDependencies.status);
281
+ let content = status === toastStatuses.success ?
282
+ toastContext[status.toString()](mongoMethodDisplayedName) :
283
+ this.findErrorMessageByStatusCode(toastHttpResponseDependencies.status.toString(), mongoMethodDisplayedName);
284
+ this.showToast(toastContext.title(mongoMethodDisplayedName), content, status);
285
+ }
286
+ findErrorMessageByStatusCode(statusCode, mongoMethodDisplayedName) {
287
+ if (!toastContext.statusCodes[statusCode])
288
+ statusCode = 'genericError';
289
+ return toastContext.statusCodes[statusCode](mongoMethodDisplayedName);
290
+ }
291
+ showErrorToast(toastContextKey) {
292
+ if (!this.toastsTemplates[toastContextKey])
293
+ return;
294
+ let content = this.toastsTemplates[toastContextKey][toastStatuses.error];
295
+ let title = this.toastsTemplates[toastContextKey].title;
296
+ this.showToast(title, content, toastStatuses.error);
297
+ }
298
+ showSuccessToast(toastContextKey) {
299
+ if (!this.toastsTemplates[toastContextKey])
300
+ return;
301
+ let content = this.toastsTemplates[toastContextKey][toastStatuses.success];
302
+ let title = this.toastsTemplates[toastContextKey].title;
303
+ this.showToast(title, content, toastStatuses.success);
304
+ }
305
+ showInformationToast(toastContextKey) {
306
+ if (!this.toastsTemplates[toastContextKey])
307
+ return;
308
+ let content = this.toastsTemplates[toastContextKey][toastStatuses.information];
309
+ let title = this.toastsTemplates[toastContextKey].title;
310
+ this.showToast(title, content, toastStatuses.information);
311
+ }
312
+ showOnDemandToast(toastContextKey, status, toastStorageKey) {
313
+ if (!this.toastsTemplates[toastContextKey])
314
+ return;
315
+ if (this.hasToastAlreadyShownAndShouldShowOnce(toastStorageKey))
316
+ return;
317
+ let content = this.toastsTemplates[toastContextKey][status];
318
+ let title = this.toastsTemplates[toastContextKey].title;
319
+ this.showToast(title, content, status);
320
+ }
321
+ hasToastAlreadyShownAndShouldShowOnce(toastStorageKey) {
322
+ if (!toastStorageKey)
323
+ return false;
324
+ if (StorageService.getItem(toastStorageKey))
325
+ return true;
326
+ StorageService.setItem(toastStorageKey, toastStorageKey);
327
+ return false;
328
+ }
329
+ showToast(title, content, status) {
330
+ this.toast$.next({ title, content, status, id: ++this.toastId, state: toastStates.preEnter });
331
+ }
332
+ setToastStatus(statusCode) {
333
+ if (statusCode >= 200 && statusCode < 299)
334
+ return toastStatuses.success;
335
+ if (statusCode >= 400 && statusCode < 599)
336
+ return toastStatuses.error;
337
+ }
338
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ToastsService, deps: [{ token: ErrorsHandlerService }, { token: i3.UtilsService }, { token: HERUM_SHARED_CONFIG_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable });
339
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ToastsService, providedIn: 'root' });
340
+ }
341
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: ToastsService, decorators: [{
342
+ type: Injectable,
343
+ args: [{
344
+ providedIn: 'root'
345
+ }]
346
+ }], ctorParameters: () => [{ type: ErrorsHandlerService }, { type: i3.UtilsService }, { type: undefined, decorators: [{
347
+ type: Inject,
348
+ args: [HERUM_SHARED_CONFIG_TOKEN]
349
+ }] }] });
350
+
351
+ class UploadsManagerService {
352
+ errorsHandlerService;
353
+ dependentsService;
354
+ http;
355
+ toastsService;
356
+ uploadsManagerTitle$ = new BehaviorSubject(uploadsManagerKeys.defaultUploadsManagerTitle);
357
+ uploadsProgressMetadata$ = new BehaviorSubject([]);
358
+ constructor(errorsHandlerService, dependentsService, http, toastsService) {
359
+ this.errorsHandlerService = errorsHandlerService;
360
+ this.dependentsService = dependentsService;
361
+ this.http = http;
362
+ this.toastsService = toastsService;
363
+ this.setSubscriptions();
364
+ }
365
+ setSubscriptions() {
366
+ this.errorsHandlerService.dependentRequestId$?.subscribe(dependentRequestId => this.updateUploadProgressStatus(dependentRequestId, uploadStatuses.error));
367
+ this.errorsHandlerService.reportUploadProgressRequest$.subscribe(reportUploadProgressRequestId => this.updateUploadProgressStatus(reportUploadProgressRequestId, uploadStatuses.error));
368
+ this.errorsHandlerService.commonDependentsErrorToast$?.subscribe(commonDependentsErrorToast => this.createNewToastBasedOnHttpRequest(commonDependentsErrorToast));
369
+ }
370
+ updateUploadProgressStatus(uploadProgressId, status) {
371
+ let uploadsProgressMetadata = this.uploadsProgressMetadata$.getValue();
372
+ uploadsProgressMetadata.find(uploadProgressMetadata => uploadProgressMetadata.id === uploadProgressId).status = status;
373
+ this.uploadsProgressMetadata$.next(uploadsProgressMetadata);
374
+ }
375
+ retryFailedUploads() {
376
+ const uploadsProgressMetadata = this.uploadsProgressMetadata$.getValue();
377
+ const failedUploadsProgressIds = uploadsProgressMetadata
378
+ .filter(uploadProgressMetadata => uploadProgressMetadata.status === uploadStatuses.error)
379
+ .map(uploadProgressMetadata => uploadProgressMetadata.id);
380
+ return failedUploadsProgressIds.map(failedUploadProgressId => this.retryFailedUpload(failedUploadProgressId));
381
+ }
382
+ retryFailedUpload(uploadProgressId) {
383
+ this.uploadsProgressMetadata$.next(this.uploadsProgressMetadata$.getValue().filter(uploadProgressMetadata => uploadProgressMetadata.id !== uploadProgressId));
384
+ return this.errorsHandlerService.failedDependentsRequestsContext[uploadProgressId] ?
385
+ this.handleFailedDependentRequest(uploadProgressId) :
386
+ this.handleFailedReportUploadRequest(uploadProgressId);
387
+ }
388
+ handleFailedDependentRequest(uploadProgressId) {
389
+ const failedDependentRequestContext = this.errorsHandlerService.failedDependentsRequestsContext[uploadProgressId];
390
+ const initialValue = failedDependentRequestContext.initialValue;
391
+ const failedObservableFunctions = failedDependentRequestContext.failedComplexObservableArrowFunctions;
392
+ return initialValue ? this.dependentsService.chainObservableFunctions(failedObservableFunctions, initialValue) :
393
+ this.dependentsService.chainObservableFunctions(failedObservableFunctions);
394
+ }
395
+ handleFailedReportUploadRequest(uploadProgressId) {
396
+ const uploadProgressRequestIndex = this.errorsHandlerService.failedReportUploadProgressRequests.findIndex(request => request.headers?.get(uploadsManagerKeys.reportUploadProgressIdHeader) === uploadProgressId);
397
+ if (uploadProgressRequestIndex !== -1) {
398
+ const failedUploadProgressRequestRequest = this.errorsHandlerService.failedReportUploadProgressRequests[uploadProgressRequestIndex];
399
+ this.errorsHandlerService.failedReportUploadProgressRequests.splice(uploadProgressRequestIndex, 1);
400
+ return this.http.request(failedUploadProgressRequestRequest.method, failedUploadProgressRequestRequest.url, {
401
+ body: failedUploadProgressRequestRequest.body,
402
+ responseType: 'text',
403
+ reportProgress: true
404
+ });
405
+ }
406
+ }
407
+ addOrUpdateUploadProgressMetadata(uploadProgressMetadata) {
408
+ let uploadsProgressMetadata = this.uploadsProgressMetadata$.value;
409
+ if (uploadsProgressMetadata.some(existedUploadProgressMetadata => existedUploadProgressMetadata.id == uploadProgressMetadata.id))
410
+ uploadsProgressMetadata = uploadsProgressMetadata.filter(exitedUploadProgressMetadata => exitedUploadProgressMetadata.id != uploadProgressMetadata.id);
411
+ uploadsProgressMetadata.push(uploadProgressMetadata);
412
+ uploadsProgressMetadata.sort((a, b) => b.requestTime - a.requestTime);
413
+ this.uploadsProgressMetadata$.next(uploadsProgressMetadata);
414
+ }
415
+ getUploadProgressById(uploadProgressId) {
416
+ return this.uploadsProgressMetadata$.getValue().find(uploadsProgressMetadata => uploadsProgressMetadata.id === uploadProgressId);
417
+ }
418
+ createNewToastBasedOnHttpRequest(commonDependentsToast) {
419
+ const { commonDependentsId, numberOfObservableArrowFunctions, errorStatus } = commonDependentsToast;
420
+ if (!commonDependentsId)
421
+ return;
422
+ const commonUploadsProgress = this.uploadsProgressMetadata$.getValue().filter(uploadProgress => uploadProgress.commonDependentsId === commonDependentsId);
423
+ let areCommonUploadsProgressFinished = false;
424
+ const areAllCommonUploadsProgressWereSent = commonUploadsProgress.length === numberOfObservableArrowFunctions;
425
+ const areAllCommonUploadsProgressFinishedSuccesfully = commonUploadsProgress.every(commonUploadProgress => commonUploadProgress.status === uploadStatuses.success);
426
+ if (commonUploadsProgress.every(commonUploadProgress => commonUploadProgress.status !== uploadStatuses.loading) && areAllCommonUploadsProgressWereSent)
427
+ areCommonUploadsProgressFinished = true;
428
+ if (!areCommonUploadsProgressFinished && !errorStatus)
429
+ return;
430
+ let title = this.uploadsManagerTitle$.getValue();
431
+ let content = areAllCommonUploadsProgressFinishedSuccesfully ? `פעולת ${title} הצליחה.` : this.toastsService.findErrorMessageByStatusCode(errorStatus?.toString(), `${title}`);
432
+ let status = areAllCommonUploadsProgressFinishedSuccesfully ? toastStatuses.success : toastStatuses.error;
433
+ this.toastsService.showToast(title, content, status);
434
+ }
435
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UploadsManagerService, deps: [{ token: ErrorsHandlerService }, { token: DependentsService }, { token: i2.HttpClient }, { token: ToastsService }], target: i0.ɵɵFactoryTarget.Injectable });
436
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UploadsManagerService, providedIn: 'root' });
437
+ }
438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: UploadsManagerService, decorators: [{
439
+ type: Injectable,
440
+ args: [{
441
+ providedIn: 'root'
442
+ }]
443
+ }], ctorParameters: () => [{ type: ErrorsHandlerService }, { type: DependentsService }, { type: i2.HttpClient }, { type: ToastsService }] });
444
+
445
+ class HerumToastsComponent {
446
+ toastsService;
447
+ changeDetectorRef;
448
+ toastElements;
449
+ toasts = [];
450
+ minimumOpacity = 0.7;
451
+ transformDuration = 400;
452
+ leavingDuration = 7000;
453
+ gap = 16;
454
+ constructor(toastsService, changeDetectorRef) {
455
+ this.toastsService = toastsService;
456
+ this.changeDetectorRef = changeDetectorRef;
457
+ }
458
+ ngOnInit() {
459
+ this.toastsService.toast$.subscribe(newToast => this.handleNewToast(newToast));
460
+ }
461
+ handleNewToast(toast) {
462
+ if (!toast)
463
+ return;
464
+ this.toasts.unshift(toast);
465
+ this.changeDetectorRef.detectChanges();
466
+ setTimeout(() => toast.state = toastStates.enter, 100);
467
+ setTimeout(() => this._onHideToast(toast, false), this.leavingDuration);
468
+ this.toastElements?.forEach((toastElement, index) => {
469
+ const toastNativeElement = toastElement.nativeElement;
470
+ if (toastNativeElement) {
471
+ let gap = this.gap * index;
472
+ if (index)
473
+ toastNativeElement.style.transform = `translateY(calc(${-this.reduceToastHeights(index)}px - ${gap}px)) translateX(0)`;
474
+ this.setToastLinearOpacity(index - 1, toastElement);
475
+ }
476
+ });
477
+ }
478
+ reduceToastHeights(currentElementToastIndex) {
479
+ return this.toastElements?.toArray().reduce((totalHeight, toast, index) => {
480
+ if (currentElementToastIndex > index) {
481
+ return totalHeight + toast.nativeElement.offsetHeight;
482
+ }
483
+ return totalHeight;
484
+ }, 0);
485
+ }
486
+ _onHideToast(currentToast, lowToasts) {
487
+ const toastIndex = this.toasts.indexOf(currentToast);
488
+ if (toastIndex === -1)
489
+ return;
490
+ const currentElementToast = this.toastElements.toArray()[toastIndex];
491
+ const layoutPadding = '24px';
492
+ if (currentElementToast)
493
+ currentElementToast.nativeElement.style.transform = `${currentElementToast.nativeElement.style.transform} translateX(calc(100% + ${layoutPadding}))`;
494
+ if (lowToasts && (toastIndex !== this.toasts.length - 1)) {
495
+ let filteredItems = this.toastElements.toArray().filter((item, index) => index > toastIndex);
496
+ if (!filteredItems.length)
497
+ return;
498
+ filteredItems.forEach((toastElement) => {
499
+ let transformValue = toastElement.nativeElement.style.transform;
500
+ let transformValueMatch = transformValue.match(/calc\((.*)\)\)/);
501
+ if (transformValueMatch) {
502
+ let translateYValue = transformValueMatch[1];
503
+ const updatedTranslateY = `translateY(calc(${translateYValue} + 100% + ${this.gap}px))`;
504
+ setTimeout(() => {
505
+ {
506
+ toastElement.nativeElement.style.transform = `${updatedTranslateY}`;
507
+ this.removeToast(currentToast);
508
+ }
509
+ }, 300);
510
+ }
511
+ });
512
+ }
513
+ else
514
+ setTimeout(() => { this.removeToast(currentToast); }, this.transformDuration);
515
+ }
516
+ removeToast(currentToast) {
517
+ this.toasts = this.toasts.filter(toast => toast.id !== currentToast.id);
518
+ }
519
+ setToastLinearOpacity(toastElementIndex, toastElement) {
520
+ let toastStyle = toastElement.nativeElement.style;
521
+ if (toastElementIndex === this.toastElements.toArray().length - 1)
522
+ toastStyle.opacity = this.minimumOpacity.toString();
523
+ else if (!toastElementIndex)
524
+ toastStyle.opacity = (1 - (this.minimumOpacity / (this.toastElements.length))).toString();
525
+ else
526
+ toastStyle.opacity = (1 - ((toastElementIndex + 1) * this.minimumOpacity / (this.toastElements.length))).toString();
527
+ }
528
+ _toastStatusIcon(toastStatus) {
529
+ return svgsStrings[toastStatus];
530
+ }
531
+ get successStatus() {
532
+ return toastStatuses.success;
533
+ }
534
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumToastsComponent, deps: [{ token: i1$1.ToastsService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
535
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumToastsComponent, isStandalone: false, selector: "herum-toasts", viewQueries: [{ propertyName: "toastElements", predicate: ["toast"], descendants: true }], ngImport: i0, template: "<ng-container *ngIf=\"toasts?.length\">\r\n <div #toast class=\"herum-toast d-flex\" [ngClass]=\"[toast?.state ?? '',toast?.status ?? '']\"\r\n *ngFor=\"let toast of toasts; trackBy: _trackByFn\">\r\n <span [ngClass]=\"{'icons-color':toast?.status===successStatus}\"\r\n [innerHTML]=\"_toastStatusIcon(toast?.status) | safeHtml\">\r\n </span>\r\n\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"section-title\"> {{toast?.title}}</div>\r\n <div class='toast-content'> {{toast?.content}}</div>\r\n </div>\r\n\r\n <img class=\"close-button\" src=\"assets/shared/icons/secondary-x.svg\" alt=\"close-icon\"\r\n (click)=\"_onHideToast(toast,true)\">\r\n </div>\r\n</ng-container>", styles: [".herum-toast{position:absolute;bottom:0;right:0;width:340px;padding:var(--standard-padding);border-radius:var(--border-radius);background-color:#fff;box-shadow:0 0 var(--box-shadow-blur) #00000029!important;transition:transform .4s ease-out,opacity .4s ease-out;transform:translate(100%);opacity:0}.herum-toast .icons-color{fill:var(--icons-color)}.herum-toast .status-image{height:22px;width:22px;margin-left:6px}.herum-toast .close-button{height:8px;left:8px;top:8px;position:absolute;cursor:pointer;margin-block-end:4px}.toast-content{flex-grow:1;flex-shrink:1}.enter{transform:translate(0);opacity:1}.success{border-right:solid 8px #4caf50}.information{border-right:solid 8px var(--information-color)}.error{border-right:solid 8px var(--error-color)}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i4.SafeHtmlPipe, name: "safeHtml" }] });
536
+ }
537
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumToastsComponent, decorators: [{
538
+ type: Component,
539
+ args: [{ standalone: false, selector: 'herum-toasts', template: "<ng-container *ngIf=\"toasts?.length\">\r\n <div #toast class=\"herum-toast d-flex\" [ngClass]=\"[toast?.state ?? '',toast?.status ?? '']\"\r\n *ngFor=\"let toast of toasts; trackBy: _trackByFn\">\r\n <span [ngClass]=\"{'icons-color':toast?.status===successStatus}\"\r\n [innerHTML]=\"_toastStatusIcon(toast?.status) | safeHtml\">\r\n </span>\r\n\r\n <div class=\"d-flex flex-column\">\r\n <div class=\"section-title\"> {{toast?.title}}</div>\r\n <div class='toast-content'> {{toast?.content}}</div>\r\n </div>\r\n\r\n <img class=\"close-button\" src=\"assets/shared/icons/secondary-x.svg\" alt=\"close-icon\"\r\n (click)=\"_onHideToast(toast,true)\">\r\n </div>\r\n</ng-container>", styles: [".herum-toast{position:absolute;bottom:0;right:0;width:340px;padding:var(--standard-padding);border-radius:var(--border-radius);background-color:#fff;box-shadow:0 0 var(--box-shadow-blur) #00000029!important;transition:transform .4s ease-out,opacity .4s ease-out;transform:translate(100%);opacity:0}.herum-toast .icons-color{fill:var(--icons-color)}.herum-toast .status-image{height:22px;width:22px;margin-left:6px}.herum-toast .close-button{height:8px;left:8px;top:8px;position:absolute;cursor:pointer;margin-block-end:4px}.toast-content{flex-grow:1;flex-shrink:1}.enter{transform:translate(0);opacity:1}.success{border-right:solid 8px #4caf50}.information{border-right:solid 8px var(--information-color)}.error{border-right:solid 8px var(--error-color)}\n"] }]
540
+ }], ctorParameters: () => [{ type: i1$1.ToastsService }, { type: i0.ChangeDetectorRef }], propDecorators: { toastElements: [{
541
+ type: ViewChildren,
542
+ args: ['toast']
543
+ }] } });
544
+
545
+ const failedProgressBarColor = '#FF0A4D';
546
+ const partialSuccessProgressBarColor = '#f7ad00';
547
+ class HerumUploadsManagerComponent {
548
+ uploadsManagerService;
549
+ destroySubject$ = new Subject();
550
+ isContainerOpen = true;
551
+ loadingStatus = uploadStatuses.loading;
552
+ errorStatus = uploadStatuses.error;
553
+ successStatus = uploadStatuses.success;
554
+ uploadsProgressMetadata = [];
555
+ averageProgressSum = 0;
556
+ hasUploadProgressFinished = false;
557
+ numberOfFailedLoaders = 0;
558
+ successProgressBarColor = '';
559
+ progressBarColor = '';
560
+ showConfirmationNativeMessage(event) {
561
+ if (!this.hasUploadProgressFinished)
562
+ event.returnValue = true;
563
+ }
564
+ constructor(uploadsManagerService) {
565
+ this.uploadsManagerService = uploadsManagerService;
566
+ }
567
+ ngOnInit() {
568
+ this.setSuccessProgressBarColor();
569
+ this.uploadsProgressMetadataSubscription();
570
+ }
571
+ setSuccessProgressBarColor() {
572
+ this.successProgressBarColor = window.getComputedStyle(document.body).getPropertyValue('--icons-color');
573
+ }
574
+ uploadsProgressMetadataSubscription() {
575
+ this.uploadsManagerService.uploadsProgressMetadata$
576
+ .pipe(takeUntil(this.destroySubject$))
577
+ .subscribe(uploadsProgressMetadata => {
578
+ this.uploadsProgressMetadata = uploadsProgressMetadata;
579
+ this.averageProgressSum = this.calculateAverageProgressSum(uploadsProgressMetadata);
580
+ this.hasUploadProgressFinished = this.calculateHasUploadProgressFinished(uploadsProgressMetadata);
581
+ this.numberOfFailedLoaders = this.calculateNumberOfFailedLoaders(uploadsProgressMetadata);
582
+ this.progressBarColor = this.calculateProgressBarColor(uploadsProgressMetadata);
583
+ });
584
+ }
585
+ _onRetryFailedUploads() {
586
+ this.uploadsManagerService.retryFailedUploads().forEach(httpRequest => httpRequest.subscribe());
587
+ }
588
+ _onRetryFailedUpload(uploadProgressId) {
589
+ this.uploadsManagerService.retryFailedUpload(uploadProgressId).subscribe();
590
+ }
591
+ _onClose() {
592
+ this.uploadsManagerService.uploadsProgressMetadata$.next([]);
593
+ this.uploadsManagerService.uploadsManagerTitle$.next(uploadsManagerKeys.defaultUploadsManagerTitle);
594
+ }
595
+ _onToggleUploadsContainer() {
596
+ this.isContainerOpen = !this.isContainerOpen;
597
+ }
598
+ _isTruncatedTitleElement(element) {
599
+ return isTruncatedTitleElement(element);
600
+ }
601
+ _getUploadProgressDescription(uploadProgressMetadata) {
602
+ if (!uploadProgressMetadata.isUploadProgressInitiating && !(uploadProgressMetadata.status === uploadStatuses.error))
603
+ return `${uploadProgressMetadata.currentSize} מתוך ${uploadProgressMetadata.totalSize} ${uploadProgressMetadata.units}`;
604
+ if (uploadProgressMetadata.status === uploadStatuses.error)
605
+ return 'התרחשה שגיאה בהעלאה';
606
+ if (uploadProgressMetadata.isUploadProgressInitiating)
607
+ return 'העלאה תחל בקרוב...';
608
+ }
609
+ _isUploadProgressStatusError(uploadProgressStatus) {
610
+ return uploadProgressStatus === uploadStatuses.error;
611
+ }
612
+ _getFileIcon(uploadProgressType) {
613
+ return svgsStrings[uploadProgressType];
614
+ }
615
+ _getUploadStatusIcon(uploadProgressType) {
616
+ return svgsStrings[uploadProgressType];
617
+ }
618
+ _trackByFn(index, uploadProgressMetadata) {
619
+ return uploadProgressMetadata.id;
620
+ }
621
+ get containerTitle$() {
622
+ return this.uploadsManagerService.uploadsManagerTitle$.pipe(shareReplay(1));
623
+ }
624
+ calculateAverageProgressSum(uploadsProgressMetadata) {
625
+ if (!uploadsProgressMetadata.length)
626
+ return 0;
627
+ const sum = uploadsProgressMetadata.reduce((sum, uploadProgressMetadata) => sum + (uploadProgressMetadata.currentSize / uploadProgressMetadata.totalSize) * 100, 0);
628
+ return (sum / uploadsProgressMetadata.length);
629
+ }
630
+ calculateHasUploadProgressFinished(uploadsProgressMetadata) {
631
+ return uploadsProgressMetadata.every(uploadProgressMetadata => uploadProgressMetadata.status !== uploadStatuses.loading);
632
+ }
633
+ calculateNumberOfFailedLoaders(uploadsProgressMetadata) {
634
+ return uploadsProgressMetadata.filter(uploadProgressMetadata => uploadProgressMetadata.status === this.errorStatus).length;
635
+ }
636
+ calculateProgressBarColor(uploadsProgressMetadata) {
637
+ const numberOfFailedUploadsProgressMetadata = this.numberOfFailedLoaders;
638
+ const numberOfUploadsProgressMetadata = uploadsProgressMetadata.length;
639
+ return !numberOfFailedUploadsProgressMetadata ? this.successProgressBarColor :
640
+ numberOfUploadsProgressMetadata === numberOfFailedUploadsProgressMetadata ? failedProgressBarColor :
641
+ numberOfUploadsProgressMetadata > 0 ? partialSuccessProgressBarColor : this.successProgressBarColor;
642
+ }
643
+ ngOnDestroy() {
644
+ this.destroySubject$.next(null);
645
+ this.destroySubject$.complete();
646
+ }
647
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumUploadsManagerComponent, deps: [{ token: i1$1.UploadsManagerService }], target: i0.ɵɵFactoryTarget.Component });
648
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.17", type: HerumUploadsManagerComponent, isStandalone: false, selector: "herum-uploads-manager", host: { listeners: { "window:beforeunload": "showConfirmationNativeMessage($event)" } }, ngImport: i0, template: "<div class=\"herum-uploads-layout shadow\" [ngClass]=\"{'open':isContainerOpen}\" *ngIf=\"uploadsProgressMetadata?.length\">\r\n <div class=\"herum-uploads-container-header\">\r\n <div class=\"herum-uploads-header\">\r\n <div class=\"herum-uploads-header-text\">\r\n <herum-ellipsis-loader *ngIf=\"!hasUploadProgressFinished\"></herum-ellipsis-loader>\r\n\r\n <p class=\"container-title\" #containerTitle\r\n [matTooltip]=\"_isTruncatedTitleElement(containerTitle)? (containerTitle$ | async) : '' \">\r\n {{containerTitle$ | async | ellipsis:containerTitle}}</p>\r\n </div>\r\n\r\n <div class=\"control-container\">\r\n <img class=\"control-button\"\r\n [ngClass]=\"{'open-chevron':isContainerOpen, 'closed-chevron':!isContainerOpen}\"\r\n src=\"assets/general/white-chevron.svg\" (click)=\"_onToggleUploadsContainer()\">\r\n\r\n <img class=\"control-button\" *ngIf=\"hasUploadProgressFinished\" src=\"assets/shared/icons/X.svg\"\r\n alt=\"close-icon\" (click)=\"_onClose()\">\r\n </div>\r\n </div>\r\n\r\n <herum-progress-bar [percentage]=\"averageProgressSum\" [percentagePosition]=\"'none'\" [borderRadius]=\"'none'\"\r\n [showBorder]=\"false\" [thickness]=\"'thin'\" [showPercentage]=\"false\" [color]=\"progressBarColor\">\r\n </herum-progress-bar>\r\n </div>\r\n\r\n <div class=\"herum-uploads-container\">\r\n <div *ngIf=\"numberOfFailedLoaders > 1\" class=\"upload-all upload-iteration cursor-pointer\"\r\n (click)=\"_onRetryFailedUploads()\">\r\n <div class=\"herum-upload-title w-100\">\r\n \u05D4\u05E2\u05DC\u05D4 \u05DE\u05D7\u05D3\u05E9 \u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05E0\u05DB\u05E9\u05DC\u05D5\r\n </div>\r\n\r\n <div class=\"upload-file-image\">\r\n <img src=\"assets/files-icons/upload-file.svg\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"upload-iteration\"\r\n *ngFor=\"let uploadProgressMetadata of uploadsProgressMetadata; trackBy: _trackByFn\">\r\n <div class=\"herum-upload-container\">\r\n <span [ngClass]=\"_isUploadProgressStatusError(uploadProgressMetadata.status)? 'error' : 'icons-color'\"\r\n [innerHTML]=\"_getFileIcon(uploadProgressMetadata.type) | safeHtml\">\r\n </span>\r\n\r\n <div class=\"herum-upload-text-container\">\r\n <p #uploadTitle class=\"herum-upload-title\"\r\n [ngClass]=\"{'error-font-color':_isUploadProgressStatusError(uploadProgressMetadata.status)}\"\r\n [matTooltip]=\"_isTruncatedTitleElement(uploadTitle) ? uploadProgressMetadata.title : ''\">\r\n {{uploadProgressMetadata.title | ellipsis:uploadTitle}}\r\n </p>\r\n\r\n <p\r\n [ngClass]=\"[_isUploadProgressStatusError(uploadProgressMetadata.status)? 'error-font-color' :'disabled-text-color']\">\r\n {{_getUploadProgressDescription(uploadProgressMetadata)}}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"center\">\r\n <herum-circular-progress-bar [fill]=\"false\"\r\n [percentage]=\"(uploadProgressMetadata.currentSize/uploadProgressMetadata.totalSize)*100\"\r\n *ngIf=\"uploadProgressMetadata.status === loadingStatus\">\r\n </herum-circular-progress-bar>\r\n\r\n <div class=\"images-container\">\r\n <img class=\"cursor-pointer\" *ngIf=\"_isUploadProgressStatusError(uploadProgressMetadata.status)\"\r\n src=\"assets/files-icons/upload-file.svg\"\r\n (click)=\"_onRetryFailedUpload(uploadProgressMetadata.id)\">\r\n\r\n <span\r\n *ngIf=\"uploadProgressMetadata.status === errorStatus || uploadProgressMetadata.status === successStatus\"\r\n [ngClass]=\"{'icons-color':uploadProgressMetadata.status===successStatus}\"\r\n [innerHTML]=\"_getUploadStatusIcon(uploadProgressMetadata.status) | safeHtml\">\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".herum-uploads-layout{border-radius:8px 8px 0 0;background-color:#fffc;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:99;direction:rtl;width:350px}.herum-uploads-layout .herum-uploads-container-header{border-radius:8px 8px 0 0;background-color:#22213f;cursor:grab}.herum-uploads-layout .herum-uploads-container-header p{padding-block:12px;color:#fff;font-weight:700;margin:0;font-size:16px}.herum-uploads-layout .herum-uploads-container-header:active{cursor:grabbing}.herum-uploads-layout herum-progress-bar{background-color:#22213f}.herum-uploads-layout .herum-uploads-container{display:none}.herum-upload-text-container{width:80%}.herum-upload-title{line-height:1;font-weight:700;font-size:12px;width:100%;white-space:nowrap;margin-block-end:4px}.open{height:fit-content}.open .herum-uploads-container{overflow-y:auto;max-height:500px;display:flex;flex-direction:column;height:100%}.open .herum-uploads-container .herum-upload-container{display:flex;flex-direction:row;gap:8px;width:70%}.open .herum-uploads-container .herum-upload-container .error{fill:var(--error-color)}.open .upload-iteration{display:flex;justify-content:space-between;padding:12px;border-bottom:1px solid var(--chips-divider-color);align-items:center}.open .upload-all{padding-block:21px}.open .upload-iteration:hover{-webkit-backdrop-filter:blur(80px);backdrop-filter:blur(80px);animation:1s ease-in-out}.herum-uploads-header-text{display:flex;width:100%}.herum-uploads-header-text .container-title{width:80%;white-space:nowrap}.herum-uploads-header{display:flex;justify-content:space-between;padding-inline:16px;align-items:center}.herum-uploads-header .control-container{gap:16px;display:flex}.herum-uploads-header .control-container .control-button{width:10px;cursor:pointer}.upload-file-image{width:24px;display:flex;justify-content:center}herum-circular-progress-bar{display:flex;justify-content:center;align-items:center;height:24px;width:24px;transform:scale(1.2)}p{margin:0}.open-chevron{transform:rotate(90deg)}.images-container{display:flex;gap:12px}.icons-color{fill:var(--icons-color)}.icons-color ::ng-deep .generic-file-icon{stroke:var(--icons-color)}\n"], dependencies: [{ kind: "directive", type: i2$1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.HerumCircularProgressBarComponent, selector: "herum-circular-progress-bar", inputs: ["percentage", "fill", "size", "firstGradient", "fillColor", "showPercentage", "displayedContent", "displayedContentColorMatchesGradientColor"] }, { kind: "component", type: i3$1.HerumEllipsisLoaderComponent, selector: "herum-ellipsis-loader" }, { kind: "component", type: i3$1.HerumProgressBarComponent, selector: "herum-progress-bar", inputs: ["percentage", "invalidPercentage", "showPercentage", "percentagePosition", "type", "size", "color", "borderRadius", "total", "showBorder", "thickness"] }, { kind: "pipe", type: i2$1.AsyncPipe, name: "async" }, { kind: "pipe", type: i4.SafeHtmlPipe, name: "safeHtml" }, { kind: "pipe", type: i4.EllipsisPipe, name: "ellipsis" }] });
649
+ }
650
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: HerumUploadsManagerComponent, decorators: [{
651
+ type: Component,
652
+ args: [{ standalone: false, selector: 'herum-uploads-manager', template: "<div class=\"herum-uploads-layout shadow\" [ngClass]=\"{'open':isContainerOpen}\" *ngIf=\"uploadsProgressMetadata?.length\">\r\n <div class=\"herum-uploads-container-header\">\r\n <div class=\"herum-uploads-header\">\r\n <div class=\"herum-uploads-header-text\">\r\n <herum-ellipsis-loader *ngIf=\"!hasUploadProgressFinished\"></herum-ellipsis-loader>\r\n\r\n <p class=\"container-title\" #containerTitle\r\n [matTooltip]=\"_isTruncatedTitleElement(containerTitle)? (containerTitle$ | async) : '' \">\r\n {{containerTitle$ | async | ellipsis:containerTitle}}</p>\r\n </div>\r\n\r\n <div class=\"control-container\">\r\n <img class=\"control-button\"\r\n [ngClass]=\"{'open-chevron':isContainerOpen, 'closed-chevron':!isContainerOpen}\"\r\n src=\"assets/general/white-chevron.svg\" (click)=\"_onToggleUploadsContainer()\">\r\n\r\n <img class=\"control-button\" *ngIf=\"hasUploadProgressFinished\" src=\"assets/shared/icons/X.svg\"\r\n alt=\"close-icon\" (click)=\"_onClose()\">\r\n </div>\r\n </div>\r\n\r\n <herum-progress-bar [percentage]=\"averageProgressSum\" [percentagePosition]=\"'none'\" [borderRadius]=\"'none'\"\r\n [showBorder]=\"false\" [thickness]=\"'thin'\" [showPercentage]=\"false\" [color]=\"progressBarColor\">\r\n </herum-progress-bar>\r\n </div>\r\n\r\n <div class=\"herum-uploads-container\">\r\n <div *ngIf=\"numberOfFailedLoaders > 1\" class=\"upload-all upload-iteration cursor-pointer\"\r\n (click)=\"_onRetryFailedUploads()\">\r\n <div class=\"herum-upload-title w-100\">\r\n \u05D4\u05E2\u05DC\u05D4 \u05DE\u05D7\u05D3\u05E9 \u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05E0\u05DB\u05E9\u05DC\u05D5\r\n </div>\r\n\r\n <div class=\"upload-file-image\">\r\n <img src=\"assets/files-icons/upload-file.svg\">\r\n </div>\r\n </div>\r\n\r\n <div class=\"upload-iteration\"\r\n *ngFor=\"let uploadProgressMetadata of uploadsProgressMetadata; trackBy: _trackByFn\">\r\n <div class=\"herum-upload-container\">\r\n <span [ngClass]=\"_isUploadProgressStatusError(uploadProgressMetadata.status)? 'error' : 'icons-color'\"\r\n [innerHTML]=\"_getFileIcon(uploadProgressMetadata.type) | safeHtml\">\r\n </span>\r\n\r\n <div class=\"herum-upload-text-container\">\r\n <p #uploadTitle class=\"herum-upload-title\"\r\n [ngClass]=\"{'error-font-color':_isUploadProgressStatusError(uploadProgressMetadata.status)}\"\r\n [matTooltip]=\"_isTruncatedTitleElement(uploadTitle) ? uploadProgressMetadata.title : ''\">\r\n {{uploadProgressMetadata.title | ellipsis:uploadTitle}}\r\n </p>\r\n\r\n <p\r\n [ngClass]=\"[_isUploadProgressStatusError(uploadProgressMetadata.status)? 'error-font-color' :'disabled-text-color']\">\r\n {{_getUploadProgressDescription(uploadProgressMetadata)}}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div class=\"center\">\r\n <herum-circular-progress-bar [fill]=\"false\"\r\n [percentage]=\"(uploadProgressMetadata.currentSize/uploadProgressMetadata.totalSize)*100\"\r\n *ngIf=\"uploadProgressMetadata.status === loadingStatus\">\r\n </herum-circular-progress-bar>\r\n\r\n <div class=\"images-container\">\r\n <img class=\"cursor-pointer\" *ngIf=\"_isUploadProgressStatusError(uploadProgressMetadata.status)\"\r\n src=\"assets/files-icons/upload-file.svg\"\r\n (click)=\"_onRetryFailedUpload(uploadProgressMetadata.id)\">\r\n\r\n <span\r\n *ngIf=\"uploadProgressMetadata.status === errorStatus || uploadProgressMetadata.status === successStatus\"\r\n [ngClass]=\"{'icons-color':uploadProgressMetadata.status===successStatus}\"\r\n [innerHTML]=\"_getUploadStatusIcon(uploadProgressMetadata.status) | safeHtml\">\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>", styles: [".herum-uploads-layout{border-radius:8px 8px 0 0;background-color:#fffc;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:99;direction:rtl;width:350px}.herum-uploads-layout .herum-uploads-container-header{border-radius:8px 8px 0 0;background-color:#22213f;cursor:grab}.herum-uploads-layout .herum-uploads-container-header p{padding-block:12px;color:#fff;font-weight:700;margin:0;font-size:16px}.herum-uploads-layout .herum-uploads-container-header:active{cursor:grabbing}.herum-uploads-layout herum-progress-bar{background-color:#22213f}.herum-uploads-layout .herum-uploads-container{display:none}.herum-upload-text-container{width:80%}.herum-upload-title{line-height:1;font-weight:700;font-size:12px;width:100%;white-space:nowrap;margin-block-end:4px}.open{height:fit-content}.open .herum-uploads-container{overflow-y:auto;max-height:500px;display:flex;flex-direction:column;height:100%}.open .herum-uploads-container .herum-upload-container{display:flex;flex-direction:row;gap:8px;width:70%}.open .herum-uploads-container .herum-upload-container .error{fill:var(--error-color)}.open .upload-iteration{display:flex;justify-content:space-between;padding:12px;border-bottom:1px solid var(--chips-divider-color);align-items:center}.open .upload-all{padding-block:21px}.open .upload-iteration:hover{-webkit-backdrop-filter:blur(80px);backdrop-filter:blur(80px);animation:1s ease-in-out}.herum-uploads-header-text{display:flex;width:100%}.herum-uploads-header-text .container-title{width:80%;white-space:nowrap}.herum-uploads-header{display:flex;justify-content:space-between;padding-inline:16px;align-items:center}.herum-uploads-header .control-container{gap:16px;display:flex}.herum-uploads-header .control-container .control-button{width:10px;cursor:pointer}.upload-file-image{width:24px;display:flex;justify-content:center}herum-circular-progress-bar{display:flex;justify-content:center;align-items:center;height:24px;width:24px;transform:scale(1.2)}p{margin:0}.open-chevron{transform:rotate(90deg)}.images-container{display:flex;gap:12px}.icons-color{fill:var(--icons-color)}.icons-color ::ng-deep .generic-file-icon{stroke:var(--icons-color)}\n"] }]
653
+ }], ctorParameters: () => [{ type: i1$1.UploadsManagerService }], propDecorators: { showConfirmationNativeMessage: [{
654
+ type: HostListener,
655
+ args: ['window:beforeunload', ['$event']]
656
+ }] } });
657
+
658
+ class MongoMoleculesModule {
659
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MongoMoleculesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
660
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: MongoMoleculesModule, declarations: [HerumToastsComponent,
661
+ HerumUploadsManagerComponent], imports: [CommonModule,
662
+ PipesModule,
663
+ AtomsModule], exports: [HerumToastsComponent,
664
+ HerumUploadsManagerComponent] });
665
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MongoMoleculesModule, providers: [
666
+ { provide: MAT_DATE_LOCALE, useValue: 'he-IL' },
667
+ ], imports: [CommonModule,
668
+ PipesModule,
669
+ AtomsModule] });
670
+ }
671
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MongoMoleculesModule, decorators: [{
672
+ type: NgModule,
673
+ args: [{
674
+ declarations: [
675
+ HerumToastsComponent,
676
+ HerumUploadsManagerComponent,
677
+ ],
678
+ exports: [
679
+ HerumToastsComponent,
680
+ HerumUploadsManagerComponent,
681
+ ],
682
+ imports: [
683
+ CommonModule,
684
+ PipesModule,
685
+ AtomsModule
686
+ ],
687
+ providers: [
688
+ { provide: MAT_DATE_LOCALE, useValue: 'he-IL' },
689
+ ]
690
+ }]
691
+ }] });
692
+
693
+ class MongoModule {
694
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MongoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
695
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.17", ngImport: i0, type: MongoModule, imports: [CommonModule,
696
+ MongoMoleculesModule], exports: [MongoMoleculesModule] });
697
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MongoModule, providers: [
698
+ DependentsService,
699
+ ErrorsHandlerService,
700
+ ToastsService,
701
+ UploadsManagerService
702
+ ], imports: [CommonModule,
703
+ MongoMoleculesModule, MongoMoleculesModule] });
704
+ }
705
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.17", ngImport: i0, type: MongoModule, decorators: [{
706
+ type: NgModule,
707
+ args: [{
708
+ imports: [
709
+ CommonModule,
710
+ MongoMoleculesModule
711
+ ],
712
+ providers: [
713
+ DependentsService,
714
+ ErrorsHandlerService,
715
+ ToastsService,
716
+ UploadsManagerService
717
+ ],
718
+ exports: [
719
+ MongoMoleculesModule
720
+ ]
721
+ }]
722
+ }] });
723
+
724
+ /**
725
+ * Generated bundle index. Do not edit.
726
+ */
727
+
728
+ export { DependentsService, ErrorsHandlerService, HerumToastsComponent, HerumUploadsManagerComponent, MongoModule, MongoMoleculesModule, ToastsService, UploadsManagerService };
729
+ //# sourceMappingURL=herum-shared-mongo.mjs.map