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,13 @@
1
+ import { InjectionToken } from '@angular/core';
2
+
3
+ const SYSTEM_IDENTIFIER = new InjectionToken('SystemIdentifier');
4
+ const SYSTEM_USER_SERVICE = new InjectionToken('SystemUserService');
5
+ const SYSTEM_TRACK_TEXT_CHANGES_SERVICE = new InjectionToken('SystemTrackTextChangesService');
6
+ const SYSTEM_AUDIO_VISUAL_CONFIGURATION = new InjectionToken('SystemAudioVisualConfiguration');
7
+
8
+ /**
9
+ * Generated bundle index. Do not edit.
10
+ */
11
+
12
+ export { SYSTEM_AUDIO_VISUAL_CONFIGURATION, SYSTEM_IDENTIFIER, SYSTEM_TRACK_TEXT_CHANGES_SERVICE, SYSTEM_USER_SERVICE };
13
+ //# sourceMappingURL=herum-shared-tokens.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"herum-shared-tokens.mjs","sources":["../../../projects/herum-shared/tokens/tokens.ts","../../../projects/herum-shared/tokens/herum-shared-tokens.ts"],"sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\nimport { ISystemUserService } from 'herum-shared/herum-types';\r\nimport { AudioVisualConfiguration, SystemIdentifier } from 'herum-shared/herum-types';\r\n\r\nexport const SYSTEM_IDENTIFIER = new InjectionToken<SystemIdentifier>('SystemIdentifier');\r\nexport const SYSTEM_USER_SERVICE = new InjectionToken<ISystemUserService>('SystemUserService');\r\nexport const SYSTEM_TRACK_TEXT_CHANGES_SERVICE = new InjectionToken<ISystemUserService>('SystemTrackTextChangesService');\r\nexport const SYSTEM_AUDIO_VISUAL_CONFIGURATION = new InjectionToken<AudioVisualConfiguration>('SystemAudioVisualConfiguration');","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;MAIa,iBAAiB,GAAG,IAAI,cAAc,CAAmB,kBAAkB;MAC3E,mBAAmB,GAAG,IAAI,cAAc,CAAqB,mBAAmB;MAChF,iCAAiC,GAAG,IAAI,cAAc,CAAqB,+BAA+B;MAC1G,iCAAiC,GAAG,IAAI,cAAc,CAA2B,gCAAgC;;ACP9H;;AAEG;;;;"}
@@ -0,0 +1,380 @@
1
+ import { cloneDeep } from 'lodash';
2
+ import { HttpHeaders } from '@angular/common/http';
3
+ import { uploadsManagerKeys, regexExpressions, types } from 'herum-shared/constants';
4
+ import jsSHA from 'jssha';
5
+
6
+ const flatten = (arr) => {
7
+ if (!arr)
8
+ return [];
9
+ return arr.reduce((acc, cur) => acc.concat(cur), []);
10
+ };
11
+ const findKeyByValue = (array, value) => {
12
+ const entry = array.find(object => Object.values(object).includes(value));
13
+ return entry ? Object.keys(entry)[0] : undefined;
14
+ };
15
+ const parseToIdentifiedEntitiesArray = (array) => {
16
+ return array.map((name, index) => { return { name, id: index.toString() }; });
17
+ };
18
+
19
+ const getAssignmentStateDisplayName = (state) => {
20
+ return state == 0 ? 'שיבוץ זמני' : state == 1 ? 'אכ"א' : 'אג"ת';
21
+ };
22
+
23
+ const getDifferencesInObjects = (mainObject, comparedObject) => {
24
+ let changedFieldsObject = {};
25
+ Object.keys(comparedObject).forEach(key => {
26
+ if (Array.isArray(comparedObject[key]) && mainObject[key])
27
+ changedFieldsObject[key] = mainObject[key].filter(item => !comparedObject[key].map(object => object.id).includes(item.id));
28
+ if (!changedFieldsObject[key]?.length)
29
+ delete changedFieldsObject[key];
30
+ });
31
+ return changedFieldsObject;
32
+ };
33
+ const removeCommonObjectsBetweenArrays = (mainArray, checkedArray) => {
34
+ const clonedMainArray = cloneDeep(mainArray);
35
+ return clonedMainArray.filter(mainItem => !checkedArray.some(comparedItem => comparedItem.id === mainItem.id));
36
+ };
37
+ const removeCommonItemsInObjectsFields = (mainObject, secondaryObject) => {
38
+ const mainKeys = Object.keys(mainObject);
39
+ const secondaryKeys = Object.keys(secondaryObject);
40
+ mainKeys.forEach(mainKey => {
41
+ const mainValue = mainObject[mainKey];
42
+ if (Array.isArray(mainValue)) {
43
+ const mainItemsIds = mainValue.map(item => item.id);
44
+ secondaryKeys.forEach(secondaryKey => {
45
+ const secondaryValue = secondaryObject[secondaryKey];
46
+ if (Array.isArray(secondaryValue)) {
47
+ const uniqueItems = secondaryValue.filter(item => !mainItemsIds.includes(item.id));
48
+ secondaryObject[secondaryKey] = uniqueItems;
49
+ if (!secondaryObject[secondaryKey].length)
50
+ delete secondaryObject[secondaryKey];
51
+ }
52
+ });
53
+ }
54
+ });
55
+ return secondaryObject;
56
+ };
57
+ const getDifferencesInLists = (sourceList, editedList, innerItemProperty) => {
58
+ const newItems = editedList.filter(newItem => !sourceList.some(sourceItem => sourceItem[innerItemProperty]?.id === newItem[innerItemProperty]?.id));
59
+ const deletedItems = sourceList.filter(sourceItem => !editedList.some(newItem => newItem[innerItemProperty]?.id === sourceItem[innerItemProperty]?.id));
60
+ const updatedItems = editedList.filter(item => {
61
+ const prev = sourceList.find(sourceItem => sourceItem[innerItemProperty]?.id === item[innerItemProperty]?.id);
62
+ return prev && JSON.stringify(prev) !== JSON.stringify(item);
63
+ });
64
+ return { deletedItems: deletedItems, newItems: newItems, updatedItems: updatedItems };
65
+ };
66
+ const removeDuplicatesBetweenArrays = (mainArray, otherArray) => {
67
+ const getUserId = (u) => u?.user?.id ?? u?.id;
68
+ const clonedOtherArray = Array.isArray(otherArray) ? cloneDeep(otherArray) : [];
69
+ const clonedMainArray = Array.isArray(mainArray) ? cloneDeep(mainArray) : [];
70
+ const mergedArrays = [...clonedMainArray, ...clonedOtherArray].filter((user, index, arr) => arr.findIndex((u) => getUserId(u) === getUserId(user)) === index);
71
+ return mergedArrays;
72
+ };
73
+
74
+ const convertToDate = (dateString) => {
75
+ const date = new Date(dateString);
76
+ const day = date.getDate();
77
+ const month = date.getMonth() + 1;
78
+ const year = date.getFullYear();
79
+ if (day == 1 && month == 1 && year == 1)
80
+ return '(התאריך לא קיים)';
81
+ return `${day}/${month}/${year}`;
82
+ };
83
+ const generateNewTimeStamp = () => {
84
+ let date = new Date();
85
+ let year = date.getUTCFullYear();
86
+ let month = String(date.getUTCMonth() + 1).padStart(2, '0');
87
+ let day = String(date.getUTCDate()).padStart(2, '0');
88
+ let hours = String(date.getUTCHours()).padStart(2, '0');
89
+ let minutes = String(date.getUTCMinutes()).padStart(2, '0');
90
+ let seconds = String(date.getUTCSeconds()).padStart(2, '0');
91
+ let milliseconds = String(date.getUTCMilliseconds()).padStart(3, '0');
92
+ return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`;
93
+ };
94
+ const updateFullYear = (dateToUpdate, date) => {
95
+ const year = date.getFullYear();
96
+ const month = date.getMonth();
97
+ const day = date.getDate();
98
+ dateToUpdate.setFullYear(year, month, day);
99
+ return dateToUpdate;
100
+ };
101
+ const getMicroResourceTextualTimeString = (microResourceAuthorization) => {
102
+ if (!microResourceAuthorization)
103
+ return 'לא קיים';
104
+ const now = new Date();
105
+ let isOpeningTimePass = microResourceAuthorization.openingTime && new Date(microResourceAuthorization.openingTime).getTime() < now.getTime();
106
+ let isClosingTimePass = microResourceAuthorization.closingTime && new Date(microResourceAuthorization.closingTime).getTime() < now.getTime();
107
+ if (isClosingTimePass && isOpeningTimePass)
108
+ return 'סגור';
109
+ let time = new Date(isOpeningTimePass ? microResourceAuthorization.closingTime : microResourceAuthorization.openingTime);
110
+ let res;
111
+ const diff = Math.abs(time.getTime() - now.getTime());
112
+ const seconds = Math.floor(diff / 1000);
113
+ const minutes = Math.floor(seconds / 60);
114
+ const hours = Math.floor(minutes / 60);
115
+ const days = Math.floor(hours / 24);
116
+ const weeks = Math.floor(days / 7);
117
+ const months = Math.floor(days / 30);
118
+ const years = Math.floor(days / 365);
119
+ if (isOpeningTimePass) {
120
+ time = new Date(microResourceAuthorization.closingTime);
121
+ if (years > 10)
122
+ return 'פתוח';
123
+ res = "יסגר בעוד ";
124
+ }
125
+ else {
126
+ time = new Date(microResourceAuthorization.openingTime);
127
+ if (isNaN(time.getTime()))
128
+ return 'סגור';
129
+ if (years > 10)
130
+ return 'סגור';
131
+ res = "יפתח בעוד ";
132
+ }
133
+ if (years != 0)
134
+ res += `${years} שנים`;
135
+ else if (months != 0)
136
+ res += `${months} חודשים`;
137
+ else if (weeks != 0)
138
+ res += `${weeks} שבועות`;
139
+ else if (days != 0)
140
+ res += `${days} ימים`;
141
+ else if (hours != 0)
142
+ res += `${hours} שעות`;
143
+ else if (minutes != 0)
144
+ res += `${minutes} דקות`;
145
+ else if (seconds != 0)
146
+ res += `${seconds} שניות`;
147
+ else
148
+ return res.split(" ")[0] + ' עכשיו';
149
+ return res;
150
+ };
151
+ const getTimeAsAgo = (time) => {
152
+ const diff = new Date().getTime() - time.getTime();
153
+ const seconds = Math.floor(diff / 1000);
154
+ const minutes = Math.floor(seconds / 60);
155
+ const hours = Math.floor(minutes / 60);
156
+ const days = Math.floor(hours / 24);
157
+ const weeks = Math.floor(days / 7);
158
+ const months = Math.floor(days / 30);
159
+ const years = Math.floor(days / 365);
160
+ let res = 'לפני ';
161
+ if (years != 0)
162
+ res += `${years} שנים`;
163
+ else if (months != 0)
164
+ res += `${months} חודשים`;
165
+ else if (weeks != 0)
166
+ res += `${weeks} שבועות`;
167
+ else if (days != 0)
168
+ res += `${days} ימים`;
169
+ else if (hours != 0)
170
+ res += `${hours} שעות`;
171
+ else if (minutes != 0)
172
+ res += `${minutes} דקות`;
173
+ else if (seconds != 0)
174
+ res += `${seconds} שניות`;
175
+ else
176
+ res = ' עכשיו';
177
+ return res;
178
+ };
179
+
180
+ const entityGap = 12;
181
+ const isTruncatedTitleElement = (element) => {
182
+ const renderedWidth = element.offsetWidth;
183
+ const scrollWidth = element.scrollWidth;
184
+ return element.innerText.includes('...') || renderedWidth < scrollWidth || element.scrollHeight > element.offsetHeight;
185
+ };
186
+ const getEntitiesLayoutProperties = (entitiesWrapperElement, entitiesElement, entities, entitiesWrapperHeight) => {
187
+ const entitiesWrapper = entitiesWrapperElement.nativeElement;
188
+ const entitiesWrapperWidth = entitiesWrapper.clientWidth;
189
+ entitiesWrapperHeight = entitiesWrapperHeight ?? entitiesWrapper.clientHeight;
190
+ const entityWidth = entitiesElement.first.nativeElement.offsetWidth;
191
+ const entityHeight = entitiesElement.first.nativeElement.offsetHeight;
192
+ const columns = Math.max(1, Math.floor((entitiesWrapperWidth + entityGap) / (entityWidth + entityGap)));
193
+ let rows = Math.max(1, Math.floor((entitiesWrapperHeight + entityGap) / (entityHeight + entityGap)));
194
+ const numberOfElementsInPage = rows * columns;
195
+ const totalPages = Math.ceil(entities.length / numberOfElementsInPage);
196
+ return { numberOfElementsInPage, totalPages, columns, rows, entityWidth, entityHeight, entitiesWrapperHeight, entitiesWrapperWidth };
197
+ };
198
+ const setElementsGridStyle = (entitiesWrapperElement, layoutProperties) => {
199
+ const entitiesWrapper = entitiesWrapperElement.nativeElement;
200
+ let { columns, rows, entityWidth, entityHeight, entitiesWrapperWidth, entitiesWrapperHeight } = layoutProperties;
201
+ const columnGap = (entitiesWrapperWidth - columns * entityWidth) / columns - 1;
202
+ const rowGap = (entitiesWrapperHeight - rows * entityHeight) / rows - 1;
203
+ let gap = Math.min(columnGap, rowGap);
204
+ gap = gap < entityGap ? entityGap : gap;
205
+ entitiesWrapper.style.gridTemplateColumns = `repeat(${columns}, ${entityWidth}px)`;
206
+ entitiesWrapper.style.gridTemplateRows = `repeat(${rows}, ${entityHeight}px)`;
207
+ entitiesWrapper.style.gridAutoRows = `${entityHeight} px`;
208
+ entitiesWrapper.style.gap = `${gap}px`;
209
+ };
210
+ const setNavFlexLayoutStyle = (entitiesSectionElement, entitiesWrapperElement, showNavButtons, navButtonsWidth) => {
211
+ const entitiesWrapper = entitiesWrapperElement.nativeElement;
212
+ entitiesWrapper.style.width = `calc(100% - ${showNavButtons || entitiesWrapper.style.display === 'grid' ? navButtonsWidth : 0}px)`;
213
+ if (entitiesWrapper.style.display !== 'flex') {
214
+ entitiesSectionElement.nativeElement.style.alignItems = 'center';
215
+ entitiesWrapper.style.display = 'flex';
216
+ entitiesWrapper.style.gap = `${entityGap}px`;
217
+ entitiesWrapper.style.justifyContent = 'normal';
218
+ }
219
+ };
220
+ const setNavFlexLayout = (entitiesSectionElement, entitiesWrapperElement, navButtonElement, entitiesElement) => {
221
+ const entitiesSectionElementWidth = entitiesSectionElement.nativeElement.clientWidth;
222
+ const cardWidth = entitiesElement.first?.nativeElement?.clientWidth;
223
+ const navButtonsWidth = navButtonElement?.nativeElement?.offsetWidth ?? 0;
224
+ const availableWidth = entitiesSectionElementWidth - navButtonsWidth;
225
+ const numberOfElementsInPage = Math.max(1, Math.floor((availableWidth + entityGap) / (cardWidth + entityGap)));
226
+ const showNavButtons = entitiesElement?.length - numberOfElementsInPage > 0;
227
+ setNavFlexLayoutStyle(entitiesSectionElement, entitiesWrapperElement, showNavButtons, navButtonsWidth);
228
+ return numberOfElementsInPage;
229
+ };
230
+
231
+ const minuteInMilliseconds = 60 * 1000;
232
+ const safetyMarginInMilliseconds = 2 * 60 * 1000;
233
+ const buildPath = (parts) => {
234
+ return parts.reduce((path, part) => {
235
+ return path + '/' + part;
236
+ }, '').slice(1);
237
+ };
238
+ const setHeaders = (headers, headersToSet, isEncodeURIComponent) => {
239
+ headersToSet.forEach(headerToSet => {
240
+ headers = headers.set(headerToSet.key, isEncodeURIComponent ? encodeURIComponent((headerToSet.value).toString()) : (headerToSet.value).toString());
241
+ });
242
+ return headers;
243
+ };
244
+ const convertDependentMetadataToHeaders = (dependentMetadata) => {
245
+ if (dependentMetadata)
246
+ var { dependentId, commonDependentsId, numberOfObservableArrowFunctions } = dependentMetadata;
247
+ let headers = new HttpHeaders();
248
+ if (dependentId) {
249
+ headers = setHeaders(headers, [
250
+ { key: uploadsManagerKeys.dependentIdHeader, value: dependentId },
251
+ { key: uploadsManagerKeys.commonDependentsIdHeader, value: commonDependentsId },
252
+ { key: uploadsManagerKeys.numberOfObservableArrowFunctionsHeader, value: numberOfObservableArrowFunctions }
253
+ ]);
254
+ }
255
+ return headers;
256
+ };
257
+ const getVersionPathParameter = (lastUpdateTime) => {
258
+ if (!lastUpdateTime)
259
+ return;
260
+ return (Date.now() - lastUpdateTime?.getTime() < 10 * minuteInMilliseconds + safetyMarginInMilliseconds) ? `?v=${lastUpdateTime?.toISOString()}` : '';
261
+ };
262
+
263
+ const getDeserializedFile = async (response, fileName, fileType) => {
264
+ const blob = await response.blob();
265
+ return new File([blob], fileName, { type: fileType ?? blob.type });
266
+ };
267
+ const getUrlFromFileData = (fileData, s3ServerPath) => {
268
+ if (!fileData?.key || !fileData?.bucket)
269
+ return;
270
+ const fileDataKeyWithoutTrailingSlash = fileData.key.endsWith('/') ? fileData.key.slice(0, -1) : fileData.key;
271
+ return buildPath([s3ServerPath + fileData.bucket, fileDataKeyWithoutTrailingSlash]);
272
+ };
273
+ const downloadFile = (fileName, data) => {
274
+ const objectUrl = URL.createObjectURL(data);
275
+ const anchorElement = document.createElement('a');
276
+ anchorElement.href = objectUrl;
277
+ anchorElement.download = fileName;
278
+ anchorElement.click();
279
+ anchorElement.remove();
280
+ URL.revokeObjectURL(objectUrl);
281
+ };
282
+
283
+ const getBrowserVersion = (browserRegexExp) => {
284
+ let browserVersionMatchResult = navigator.userAgent.match(browserRegexExp);
285
+ return browserVersionMatchResult ? parseInt(browserVersionMatchResult[1], 10) : undefined;
286
+ };
287
+ const getChromeVersion = () => {
288
+ const userAgent = navigator.userAgent;
289
+ const match = userAgent.match(regexExpressions.chromeVersionRegex);
290
+ if (match)
291
+ return match[1];
292
+ return undefined;
293
+ };
294
+
295
+ const getHierarchyPartIfExist = (parts, part) => {
296
+ return parts.length > part ? parts[part] : '';
297
+ };
298
+
299
+ const bytesToMegabytes = (bytes) => {
300
+ return bytes / (1024 ** 2);
301
+ };
302
+
303
+ const remainJustWantedValueInDictionary = (wantedValue, fields) => {
304
+ let object = {};
305
+ Object.entries(fields).forEach(([key, value]) => {
306
+ (Array.isArray(value)) ?
307
+ object[key] = value.map(item => (typeof item === types.object ? { [wantedValue]: item[wantedValue] } : { [wantedValue]: item }))
308
+ :
309
+ object[key] = (typeof value === types.object ? { [wantedValue]: value[wantedValue] } : value);
310
+ });
311
+ return object;
312
+ };
313
+ const removeUnwantedProperties = (baseObject, wantedProperties) => {
314
+ let unwantedProperties = Object.keys(baseObject).filter(property => !wantedProperties.includes(property));
315
+ unwantedProperties.forEach(property => delete baseObject[property]);
316
+ return baseObject;
317
+ };
318
+
319
+ const convertHeightToPixels = (value) => {
320
+ const numberValue = parseInt(value, 10);
321
+ if (value.endsWith('vh'))
322
+ return numberValue * (window.innerHeight / 100);
323
+ else if (value.endsWith('px'))
324
+ return numberValue;
325
+ return numberValue;
326
+ };
327
+ const getDropdownAnimationStates = (isDropdownOpen, dropDownDirection) => {
328
+ if (isDropdownOpen)
329
+ return dropDownDirection === 'upwards' ? 'openUp' : 'openDown';
330
+ return dropDownDirection === 'upwards' ? 'closeDown' : 'closeUp';
331
+ };
332
+
333
+ const getSubscriptionWithLastActivityTime = (subscriptions) => {
334
+ if (!subscriptions?.length)
335
+ return null;
336
+ return subscriptions?.reduce((max, subscription) => {
337
+ return (new Date(subscription.lastActivityTime) > new Date(max.lastActivityTime)) ? subscription : max;
338
+ });
339
+ };
340
+ const getLastSubscriptionByField = (subscriptions, field) => {
341
+ if (!subscriptions?.length)
342
+ return null;
343
+ return subscriptions?.reduce((max, subscription) => {
344
+ return (new Date(subscription[field]) > new Date(max[field])) ? subscription : max;
345
+ });
346
+ };
347
+
348
+ const toHash = (source) => {
349
+ let shaObj = new jsSHA('SHA-256', 'TEXT');
350
+ shaObj.update(source);
351
+ let hash = shaObj.getHash('HEX');
352
+ return hash;
353
+ };
354
+ const toFirstCapitalLetter = (text) => {
355
+ return text[0].toUpperCase() + text.slice(1);
356
+ };
357
+ const toFirstLowerCaseLetter = (text) => {
358
+ if (!text)
359
+ return;
360
+ return text[0].toLocaleLowerCase() + text.slice(1);
361
+ };
362
+ const camelCaseToPascalCase = (camelCase) => {
363
+ return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);
364
+ };
365
+ const capitalizeWord = (word) => {
366
+ return word.charAt(0).toUpperCase() + word.slice(1);
367
+ };
368
+ const replaceInterpolateKeysWithObjectProperties = (string, object) => {
369
+ const matches = string.match(regexExpressions.templateInterpolation);
370
+ if (matches)
371
+ matches.forEach((match) => { const key = match.slice(2, -2); string = string.replace(match, object[key]); });
372
+ return string;
373
+ };
374
+
375
+ /**
376
+ * Generated bundle index. Do not edit.
377
+ */
378
+
379
+ export { buildPath, bytesToMegabytes, camelCaseToPascalCase, capitalizeWord, convertDependentMetadataToHeaders, convertHeightToPixels, convertToDate, downloadFile, findKeyByValue, flatten, generateNewTimeStamp, getAssignmentStateDisplayName, getBrowserVersion, getChromeVersion, getDeserializedFile, getDifferencesInLists, getDifferencesInObjects, getDropdownAnimationStates, getEntitiesLayoutProperties, getHierarchyPartIfExist, getLastSubscriptionByField, getMicroResourceTextualTimeString, getSubscriptionWithLastActivityTime, getTimeAsAgo, getUrlFromFileData, getVersionPathParameter, isTruncatedTitleElement, parseToIdentifiedEntitiesArray, remainJustWantedValueInDictionary, removeCommonItemsInObjectsFields, removeCommonObjectsBetweenArrays, removeDuplicatesBetweenArrays, removeUnwantedProperties, replaceInterpolateKeysWithObjectProperties, setElementsGridStyle, setHeaders, setNavFlexLayout, setNavFlexLayoutStyle, toFirstCapitalLetter, toFirstLowerCaseLetter, toHash, updateFullYear };
380
+ //# sourceMappingURL=herum-shared-utils.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"herum-shared-utils.mjs","sources":["../../../projects/herum-shared/utils/array.ts","../../../projects/herum-shared/utils/assignment.ts","../../../projects/herum-shared/utils/comparers.ts","../../../projects/herum-shared/utils/date.ts","../../../projects/herum-shared/utils/element.ts","../../../projects/herum-shared/utils/request-helpers.ts","../../../projects/herum-shared/utils/file.ts","../../../projects/herum-shared/utils/browser.ts","../../../projects/herum-shared/utils/hierarchy.ts","../../../projects/herum-shared/utils/number.ts","../../../projects/herum-shared/utils/object.ts","../../../projects/herum-shared/utils/style.ts","../../../projects/herum-shared/utils/subscription.ts","../../../projects/herum-shared/utils/string.ts","../../../projects/herum-shared/utils/herum-shared-utils.ts"],"sourcesContent":["import { IdentifiedEntity } from 'herum-shared/herum-types';\r\n\r\nexport const flatten = <T>(arr: T[][]): T[] => {\r\n if (!arr)\r\n return [];\r\n\r\n return arr.reduce((acc, cur) => acc.concat(cur), []);\r\n};\r\n\r\nexport const findKeyByValue = (array: {}[], value: any) => {\r\n const entry = array.find(object => Object.values(object).includes(value));\r\n return entry ? Object.keys(entry)[0] : undefined;\r\n};\r\n\r\nexport const parseToIdentifiedEntitiesArray = (array: string[]): IdentifiedEntity[] => {\r\n return array.map((name, index) => { return { name, id: index.toString() } });\r\n};","export const getAssignmentStateDisplayName = (state) => {\n return state == 0 ? 'שיבוץ זמני' : state == 1 ? 'אכ\"א' : 'אג\"ת';\n};\n","import { cloneDeep } from \"lodash\";\r\n\r\nexport type ListsDiffs<Item extends { [innerItemProperty: string]: { id: string } } | {}> = { deletedItems: Item[], newItems: Item[], updatedItems: Item[] };\r\n\r\nexport const getDifferencesInObjects = <MainObject, ObjectToCheck>(mainObject: MainObject, comparedObject: ObjectToCheck) => {\r\n let changedFieldsObject: { [key: string]: any[] } = {};\r\n Object.keys(comparedObject).forEach(key => {\r\n if (Array.isArray(comparedObject[key]) && mainObject[key])\r\n changedFieldsObject[key] = mainObject[key].filter(item => !comparedObject[key].map(object => object.id).includes(item.id));\r\n\r\n if (!changedFieldsObject[key]?.length)\r\n delete changedFieldsObject[key];\r\n })\r\n\r\n return changedFieldsObject;\r\n};\r\n\r\nexport const removeCommonObjectsBetweenArrays = <MainItem extends { id: string; }, CheckedItem extends { id: string; }>(mainArray: MainItem[], checkedArray: CheckedItem[]): MainItem[] => {\r\n const clonedMainArray: MainItem[] = cloneDeep(mainArray);\r\n return clonedMainArray.filter(mainItem => !checkedArray.some(comparedItem => comparedItem.id === mainItem.id));\r\n};\r\n\r\nexport const removeCommonItemsInObjectsFields = (mainObject: { [key: string]: any }, secondaryObject: { [key: string]: any }) => {\r\n const mainKeys: string[] = Object.keys(mainObject);\r\n const secondaryKeys: string[] = Object.keys(secondaryObject);\r\n\r\n mainKeys.forEach(mainKey => {\r\n const mainValue = mainObject[mainKey];\r\n\r\n if (Array.isArray(mainValue)) {\r\n const mainItemsIds = mainValue.map(item => item.id);\r\n\r\n secondaryKeys.forEach(secondaryKey => {\r\n const secondaryValue = secondaryObject[secondaryKey];\r\n\r\n if (Array.isArray(secondaryValue)) {\r\n const uniqueItems = secondaryValue.filter(item => !mainItemsIds.includes(item.id));\r\n secondaryObject[secondaryKey] = uniqueItems;\r\n\r\n if (!secondaryObject[secondaryKey].length)\r\n delete secondaryObject[secondaryKey];\r\n }\r\n });\r\n }\r\n });\r\n\r\n return secondaryObject;\r\n};\r\n\r\nexport const getDifferencesInLists = <Item extends { [innerItemProperty: string]: { id: string } } | {}>(sourceList: Item[], editedList: Item[], innerItemProperty: string): ListsDiffs<Item> => {\r\n const newItems = editedList.filter(\r\n newItem => !sourceList.some(sourceItem => sourceItem[innerItemProperty]?.id === newItem[innerItemProperty]?.id)\r\n );\r\n const deletedItems = sourceList.filter(\r\n sourceItem => !editedList.some(newItem => newItem[innerItemProperty]?.id === sourceItem[innerItemProperty]?.id)\r\n );\r\n\r\n const updatedItems = editedList.filter(item => {\r\n const prev = sourceList.find(sourceItem => sourceItem[innerItemProperty]?.id === item[innerItemProperty]?.id);\r\n\r\n return prev && JSON.stringify(prev) !== JSON.stringify(item);\r\n });\r\n\r\n return { deletedItems: deletedItems, newItems: newItems, updatedItems: updatedItems };\r\n};\r\n\r\nexport const removeDuplicatesBetweenArrays = <Item>(mainArray: Item[], otherArray: Item[]): Item[] => {\r\n const getUserId = (u: any) => u?.user?.id ?? u?.id;\r\n const clonedOtherArray: Item[] = Array.isArray(otherArray) ? cloneDeep(otherArray) : [];\r\n const clonedMainArray: Item[] = Array.isArray(mainArray) ? cloneDeep(mainArray) : [];\r\n\r\n const mergedArrays = [...clonedMainArray, ...clonedOtherArray].filter((user, index, arr) => arr.findIndex((u) => getUserId(u) === getUserId(user)) === index);\r\n\r\n return mergedArrays;\r\n};","import { MicroResourceAuthorizationBase } from 'herum-shared/herum-types';\r\n\r\nexport const convertToDate = (dateString: string) => {\r\n const date = new Date(dateString);\r\n\r\n const day = date.getDate();\r\n const month = date.getMonth() + 1;\r\n const year = date.getFullYear();\r\n\r\n if (day == 1 && month == 1 && year == 1) return '(התאריך לא קיים)'\r\n\r\n return `${day}/${month}/${year}`;\r\n};\r\n\r\nexport const generateNewTimeStamp = () => {\r\n let date = new Date();\r\n\r\n let year = date.getUTCFullYear();\r\n let month = String(date.getUTCMonth() + 1).padStart(2, '0');\r\n let day = String(date.getUTCDate()).padStart(2, '0');\r\n let hours = String(date.getUTCHours()).padStart(2, '0');\r\n let minutes = String(date.getUTCMinutes()).padStart(2, '0');\r\n let seconds = String(date.getUTCSeconds()).padStart(2, '0');\r\n let milliseconds = String(date.getUTCMilliseconds()).padStart(3, '0');\r\n\r\n return `${year}-${month}-${day}T${hours}:${minutes}:${seconds}.${milliseconds}Z`;\r\n};\r\n\r\nexport const updateFullYear = (dateToUpdate: Date, date: Date) => {\r\n const year = date.getFullYear();\r\n const month = date.getMonth();\r\n const day = date.getDate();\r\n dateToUpdate.setFullYear(year, month, day);\r\n\r\n return dateToUpdate;\r\n};\r\n\r\nexport const getMicroResourceTextualTimeString = (microResourceAuthorization: MicroResourceAuthorizationBase): string => {\r\n if (!microResourceAuthorization) return 'לא קיים'\r\n const now = new Date();\r\n let isOpeningTimePass = microResourceAuthorization.openingTime && new Date(microResourceAuthorization.openingTime).getTime() < now.getTime();\r\n let isClosingTimePass = microResourceAuthorization.closingTime && new Date(microResourceAuthorization.closingTime).getTime() < now.getTime();\r\n\r\n if (isClosingTimePass && isOpeningTimePass) return 'סגור';\r\n\r\n let time: Date = new Date(isOpeningTimePass ? microResourceAuthorization.closingTime : microResourceAuthorization.openingTime)\r\n let res: string;\r\n\r\n const diff = Math.abs(time.getTime() - now.getTime());\r\n const seconds = Math.floor(diff / 1000);\r\n const minutes = Math.floor(seconds / 60);\r\n const hours = Math.floor(minutes / 60);\r\n const days = Math.floor(hours / 24);\r\n const weeks = Math.floor(days / 7);\r\n const months = Math.floor(days / 30);\r\n const years = Math.floor(days / 365);\r\n\r\n if (isOpeningTimePass) {\r\n time = new Date(microResourceAuthorization.closingTime)\r\n if (years > 10) return 'פתוח'\r\n\r\n res = \"יסגר בעוד \"\r\n }\r\n else {\r\n time = new Date(microResourceAuthorization.openingTime);\r\n if (isNaN(time.getTime())) return 'סגור';\r\n if (years > 10) return 'סגור'\r\n\r\n res = \"יפתח בעוד \"\r\n }\r\n\r\n if (years != 0)\r\n res += `${years} שנים`;\r\n else if (months != 0)\r\n res += `${months} חודשים`;\r\n else if (weeks != 0)\r\n res += `${weeks} שבועות`;\r\n else if (days != 0)\r\n res += `${days} ימים`;\r\n else if (hours != 0)\r\n res += `${hours} שעות`;\r\n else if (minutes != 0)\r\n res += `${minutes} דקות`;\r\n else if (seconds != 0)\r\n res += `${seconds} שניות`;\r\n else\r\n return res.split(\" \")[0] + ' עכשיו';\r\n return res;\r\n};\r\n\r\nexport const getTimeAsAgo = (time: Date) => {\r\n const diff = new Date().getTime() - time.getTime();\r\n const seconds = Math.floor(diff / 1000);\r\n const minutes = Math.floor(seconds / 60);\r\n const hours = Math.floor(minutes / 60);\r\n const days = Math.floor(hours / 24);\r\n const weeks = Math.floor(days / 7);\r\n const months = Math.floor(days / 30);\r\n const years = Math.floor(days / 365);\r\n\r\n let res = 'לפני ';\r\n if (years != 0)\r\n res += `${years} שנים`;\r\n else if (months != 0)\r\n res += `${months} חודשים`;\r\n else if (weeks != 0)\r\n res += `${weeks} שבועות`;\r\n else if (days != 0)\r\n res += `${days} ימים`;\r\n else if (hours != 0)\r\n res += `${hours} שעות`;\r\n else if (minutes != 0)\r\n res += `${minutes} דקות`;\r\n else if (seconds != 0)\r\n res += `${seconds} שניות`;\r\n else\r\n res = ' עכשיו';\r\n\r\n return res;\r\n};","import { ElementRef, QueryList } from \"@angular/core\";\r\nimport { EntitiesLayoutProperties } from 'herum-shared/herum-types';\r\n\r\nconst entityGap: number = 12;\r\n\r\nexport const isTruncatedTitleElement = (element: HTMLElement): boolean => {\r\n const renderedWidth = element.offsetWidth;\r\n const scrollWidth = element.scrollWidth;\r\n\r\n return element.innerText.includes('...') || renderedWidth < scrollWidth || element.scrollHeight > element.offsetHeight;\r\n};\r\n\r\nexport const getEntitiesLayoutProperties = (entitiesWrapperElement: ElementRef, entitiesElement: QueryList<ElementRef>, entities: unknown[], entitiesWrapperHeight?: number): EntitiesLayoutProperties => {\r\n const entitiesWrapper = entitiesWrapperElement.nativeElement;\r\n const entitiesWrapperWidth = entitiesWrapper.clientWidth;\r\n\r\n entitiesWrapperHeight = entitiesWrapperHeight ?? entitiesWrapper.clientHeight;\r\n\r\n const entityWidth = entitiesElement.first.nativeElement.offsetWidth;\r\n const entityHeight = entitiesElement.first.nativeElement.offsetHeight;\r\n\r\n const columns = Math.max(1, Math.floor((entitiesWrapperWidth + entityGap) / (entityWidth + entityGap)));\r\n let rows = Math.max(1, Math.floor((entitiesWrapperHeight + entityGap) / (entityHeight + entityGap)));\r\n\r\n const numberOfElementsInPage = rows * columns;\r\n const totalPages = Math.ceil(entities.length / numberOfElementsInPage);\r\n\r\n return { numberOfElementsInPage, totalPages, columns, rows, entityWidth, entityHeight, entitiesWrapperHeight, entitiesWrapperWidth };\r\n};\r\n\r\nexport const setElementsGridStyle = (entitiesWrapperElement: ElementRef, layoutProperties: EntitiesLayoutProperties) => {\r\n const entitiesWrapper = entitiesWrapperElement.nativeElement;\r\n let { columns, rows, entityWidth, entityHeight, entitiesWrapperWidth, entitiesWrapperHeight } = layoutProperties;\r\n\r\n const columnGap = (entitiesWrapperWidth - columns * entityWidth) / columns - 1;\r\n const rowGap = (entitiesWrapperHeight - rows * entityHeight) / rows - 1;\r\n\r\n let gap = Math.min(columnGap, rowGap);\r\n gap = gap < entityGap ? entityGap : gap;\r\n\r\n entitiesWrapper.style.gridTemplateColumns = `repeat(${columns}, ${entityWidth}px)`;\r\n entitiesWrapper.style.gridTemplateRows = `repeat(${rows}, ${entityHeight}px)`;\r\n entitiesWrapper.style.gridAutoRows = `${entityHeight} px`;\r\n entitiesWrapper.style.gap = `${gap}px`;\r\n};\r\n\r\nexport const setNavFlexLayoutStyle = (entitiesSectionElement: ElementRef, entitiesWrapperElement: ElementRef, showNavButtons: boolean, navButtonsWidth: number) => {\r\n const entitiesWrapper = entitiesWrapperElement.nativeElement;\r\n\r\n entitiesWrapper.style.width = `calc(100% - ${showNavButtons || entitiesWrapper.style.display === 'grid' ? navButtonsWidth : 0}px)`;\r\n\r\n if (entitiesWrapper.style.display !== 'flex') {\r\n entitiesSectionElement.nativeElement.style.alignItems = 'center';\r\n\r\n entitiesWrapper.style.display = 'flex';\r\n entitiesWrapper.style.gap = `${entityGap}px`;\r\n entitiesWrapper.style.justifyContent = 'normal';\r\n }\r\n};\r\n\r\nexport const setNavFlexLayout = (entitiesSectionElement: ElementRef, entitiesWrapperElement: ElementRef, navButtonElement: ElementRef, entitiesElement: QueryList<ElementRef>) => {\r\n const entitiesSectionElementWidth = entitiesSectionElement.nativeElement.clientWidth;\r\n const cardWidth = entitiesElement.first?.nativeElement?.clientWidth;\r\n\r\n const navButtonsWidth = navButtonElement?.nativeElement?.offsetWidth ?? 0;\r\n\r\n const availableWidth = entitiesSectionElementWidth - navButtonsWidth;\r\n const numberOfElementsInPage = Math.max(1, Math.floor((availableWidth + entityGap) / (cardWidth + entityGap)));\r\n\r\n const showNavButtons = entitiesElement?.length - numberOfElementsInPage > 0;\r\n setNavFlexLayoutStyle(entitiesSectionElement, entitiesWrapperElement, showNavButtons, navButtonsWidth);\r\n\r\n return numberOfElementsInPage;\r\n};\r\n","import { HttpHeaders } from \"@angular/common/http\";\r\nimport { uploadsManagerKeys } from \"herum-shared/constants\";\r\nimport { DependentMetadata } from 'herum-shared/herum-types';\r\n\r\nconst minuteInMilliseconds: number = 60 * 1000;\r\nconst safetyMarginInMilliseconds: number = 2 * 60 * 1000;\r\n\r\nexport const buildPath = (parts: string[]) => {\r\n return parts.reduce((path, part) => {\r\n return path + '/' + part;\r\n }, '').slice(1);\r\n};\r\n\r\nexport const setHeaders = (headers: HttpHeaders, headersToSet: { key: string, value: any }[], isEncodeURIComponent?: boolean): HttpHeaders => {\r\n headersToSet.forEach(headerToSet => {\r\n headers = headers.set(headerToSet.key, isEncodeURIComponent ? encodeURIComponent((headerToSet.value).toString()) : (headerToSet.value).toString());\r\n });\r\n return headers;\r\n};\r\n\r\nexport const convertDependentMetadataToHeaders = (dependentMetadata: DependentMetadata) => {\r\n if (dependentMetadata)\r\n var { dependentId, commonDependentsId, numberOfObservableArrowFunctions } = dependentMetadata;\r\n\r\n let headers: HttpHeaders = new HttpHeaders();\r\n\r\n if (dependentId) {\r\n headers = setHeaders(headers, [\r\n { key: uploadsManagerKeys.dependentIdHeader, value: dependentId },\r\n { key: uploadsManagerKeys.commonDependentsIdHeader, value: commonDependentsId },\r\n { key: uploadsManagerKeys.numberOfObservableArrowFunctionsHeader, value: numberOfObservableArrowFunctions }\r\n ]);\r\n }\r\n\r\n return headers;\r\n};\r\n\r\nexport const getVersionPathParameter = (lastUpdateTime: Date) => {\r\n if (!lastUpdateTime) return;\r\n return (Date.now() - lastUpdateTime?.getTime() < 10 * minuteInMilliseconds + safetyMarginInMilliseconds) ? `?v=${lastUpdateTime?.toISOString()}` : '';\r\n};","import { FileData } from 'herum-shared/herum-types';\nimport { buildPath } from './request-helpers';\n\nexport const getDeserializedFile = async (response: Response, fileName: string, fileType?: string) => {\n const blob = await response.blob();\n return new File([blob], fileName, { type: fileType ?? blob.type });\n};\n\nexport const getUrlFromFileData = (fileData: Partial<FileData>, s3ServerPath: string) => {\n if (!fileData?.key || !fileData?.bucket) return;\n\n const fileDataKeyWithoutTrailingSlash = fileData.key.endsWith('/') ? fileData.key.slice(0, -1) : fileData.key;\n\n return buildPath([s3ServerPath + fileData.bucket, fileDataKeyWithoutTrailingSlash]);\n};\n\nexport const downloadFile = (fileName: string, data: File | Blob) => {\n const objectUrl = URL.createObjectURL(data);\n const anchorElement = document.createElement('a');\n anchorElement.href = objectUrl;\n anchorElement.download = fileName;\n anchorElement.click();\n\n anchorElement.remove();\n URL.revokeObjectURL(objectUrl);\n};","import { regexExpressions } from \"herum-shared/constants\";\r\n\r\nexport const getBrowserVersion = (browserRegexExp: RegExp): number | undefined => {\r\n let browserVersionMatchResult: RegExpMatchArray = navigator.userAgent.match(browserRegexExp);\r\n return browserVersionMatchResult ? parseInt(browserVersionMatchResult[1], 10) : undefined;\r\n};\r\n\r\n\r\nexport const getChromeVersion = () => {\r\n const userAgent = navigator.userAgent;\r\n const match = userAgent.match(regexExpressions.chromeVersionRegex);\r\n if (match)\r\n return match[1];\r\n\r\n return undefined;\r\n};","import { FullHierarchyPartsPlaces } from 'herum-shared/herum-types';\n\nexport const getHierarchyPartIfExist = (parts: string[], part: FullHierarchyPartsPlaces) => {\n return parts.length > part ? parts[part] : '';\n};\n","export const bytesToMegabytes = (bytes: number): number => {\r\n return bytes / (1024 ** 2);\r\n};","import { types } from \"herum-shared/constants\";\r\n\r\nexport const remainJustWantedValueInDictionary = (wantedValue: string, fields: { [key: string]: any }) => {\r\n let object = {};\r\n\r\n Object.entries(fields).forEach(([key, value]) => {\r\n (Array.isArray(value)) ?\r\n object[key] = value.map(item => (typeof item === types.object ? { [wantedValue]: item[wantedValue] } : { [wantedValue]: item }))\r\n :\r\n object[key] = (typeof value === types.object ? { [wantedValue]: value[wantedValue] } : value);\r\n\r\n });\r\n return object;\r\n};\r\n\r\nexport const removeUnwantedProperties = (baseObject: any, wantedProperties: string[]) => {\r\n let unwantedProperties = Object.keys(baseObject).filter(property => !wantedProperties.includes(property))\r\n unwantedProperties.forEach(property => delete baseObject[property])\r\n return baseObject;\r\n};","export const convertHeightToPixels = (value: string): number => {\n const numberValue: number = parseInt(value, 10);\n\n if (value.endsWith('vh'))\n return numberValue * (window.innerHeight / 100);\n else if (value.endsWith('px'))\n return numberValue;\n\n return numberValue;\n};\n\nexport const getDropdownAnimationStates = (\n isDropdownOpen: boolean,\n dropDownDirection: 'upwards' | 'downwards'\n) => {\n if (isDropdownOpen)\n return dropDownDirection === 'upwards' ? 'openUp' : 'openDown';\n\n return dropDownDirection === 'upwards' ? 'closeDown' : 'closeUp';\n};","import { CollectionSubscription, ResourceSubscription } from 'herum-shared/herum-types';\n\nexport const getSubscriptionWithLastActivityTime = (\n subscriptions: CollectionSubscription[] | ResourceSubscription[]\n): CollectionSubscription => {\n if (!subscriptions?.length)\n return null;\n\n return (subscriptions as CollectionSubscription[])?.reduce((max, subscription) => {\n return (new Date(subscription.lastActivityTime) > new Date(max.lastActivityTime)) ? subscription : max;\n });\n};\n\nexport const getLastSubscriptionByField = (\n subscriptions: CollectionSubscription[] | ResourceSubscription[],\n field: string\n): CollectionSubscription => {\n if (!subscriptions?.length)\n return null;\n\n return (subscriptions as CollectionSubscription[])?.reduce((max, subscription) => {\n return (new Date(subscription[field]) > new Date(max[field])) ? subscription : max;\n });\n};","import { regexExpressions } from \"herum-shared/constants\";\r\n\r\nimport jsSHA from 'jssha';\r\n\r\nexport const toHash = (source: string) => {\r\n let shaObj = new jsSHA('SHA-256', 'TEXT');\r\n shaObj.update(source);\r\n let hash = shaObj.getHash('HEX');\r\n\r\n return hash;\r\n};\r\n\r\nexport const toFirstCapitalLetter = (text: string) => {\r\n return text[0].toUpperCase() + text.slice(1);\r\n};\r\n\r\nexport const toFirstLowerCaseLetter = (text: string) => {\r\n if (!text) return;\r\n return text[0].toLocaleLowerCase() + text.slice(1);\r\n};\r\n\r\nexport const camelCaseToPascalCase = (camelCase: string) => {\r\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\r\n};\r\n\r\nexport const capitalizeWord = (word: string): string => {\r\n return word.charAt(0).toUpperCase() + word.slice(1);\r\n};\r\n\r\nexport const replaceInterpolateKeysWithObjectProperties = (string: string, object: Object): string => {\r\n const matches = string.match(regexExpressions.templateInterpolation);\r\n\r\n if (matches)\r\n matches.forEach((match) => { const key = match.slice(2, -2); string = string.replace(match, object[key]) });\r\n\r\n return string;\r\n};","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { Validators } from '@angular/forms';
2
+ import { of, EMPTY, throwError } from 'rxjs';
3
+ import { map, catchError } from 'rxjs/operators';
4
+ import { validatorsNames, formsErrorMessages } from 'herum-shared/constants';
5
+
6
+ function formCollectionNameValidator() {
7
+ return (control) => {
8
+ return control.value?.length >= 35 ?
9
+ { formCollectionNameValidator: true } : null;
10
+ };
11
+ }
12
+
13
+ function validateIDNumber() {
14
+ return (control) => {
15
+ const value = control.value;
16
+ if (Validators.required(control) || !isValidIDNumber(value)) {
17
+ return { invalidIDNumber: { value } };
18
+ }
19
+ return null;
20
+ };
21
+ }
22
+ function isValidIDNumber(aId) {
23
+ let id_num = aId.toString();
24
+ if (id_num.length !== 9)
25
+ return false;
26
+ const id_12_digits = [1, 2, 1, 2, 1, 2, 1, 2, 1];
27
+ let result = 0;
28
+ for (let i = 0; i < 9; i++) {
29
+ let num = parseInt(id_num[i]) * id_12_digits[i];
30
+ num = num >= 10 ? Math.floor(num / 10) + (num % 10) : num;
31
+ result += num;
32
+ }
33
+ return result % 10 === 0;
34
+ }
35
+
36
+ let initialId = '';
37
+ function isUniqueIdValidator(path, fieldName, http, isEditMode = false) {
38
+ return (control) => {
39
+ if (isEditMode && control.pristine) {
40
+ if (control.value)
41
+ initialId = control.value;
42
+ return of(null);
43
+ }
44
+ if (isEditMode && control.value === initialId)
45
+ return of(null);
46
+ return http.post(path, { [fieldName]: control.value })
47
+ .pipe(map(() => null), catchError(error => {
48
+ if (error.status === 409) {
49
+ control.setErrors({ isUniqueIdValidator: true });
50
+ return EMPTY;
51
+ }
52
+ return throwError(error);
53
+ }));
54
+ };
55
+ }
56
+
57
+ const requiredErrorMessage = { [validatorsNames.required]: formsErrorMessages.requiredField };
58
+ const validatorsErrorMessages = {
59
+ militaryId: {
60
+ [validatorsNames.isUniqueIdValidator]: formsErrorMessages.militaryIdIsUsed,
61
+ [validatorsNames.pattern]: formsErrorMessages.notValidMilitarylId,
62
+ ...requiredErrorMessage
63
+ },
64
+ personalId: {
65
+ [validatorsNames.isUniqueIdValidator]: formsErrorMessages.personalIdIsUsed,
66
+ [validatorsNames.invalidIDNumber]: formsErrorMessages.notValidPersonalId,
67
+ ...requiredErrorMessage
68
+ }
69
+ };
70
+
71
+ /**
72
+ * Generated bundle index. Do not edit.
73
+ */
74
+
75
+ export { formCollectionNameValidator, isUniqueIdValidator, requiredErrorMessage, validateIDNumber, validatorsErrorMessages };
76
+ //# sourceMappingURL=herum-shared-validators.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"herum-shared-validators.mjs","sources":["../../../projects/herum-shared/validators/formCollectionNameValidator.ts","../../../projects/herum-shared/validators/idValidator.ts","../../../projects/herum-shared/validators/isUniqueIdValidator.ts","../../../projects/herum-shared/validators/validatorsErrorMessages.ts","../../../projects/herum-shared/validators/herum-shared-validators.ts"],"sourcesContent":["import { AbstractControl, ValidatorFn } from '@angular/forms';\r\n\r\nexport function formCollectionNameValidator(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n return control.value?.length >= 35 ?\r\n { formCollectionNameValidator: true } : null;\r\n };\r\n}","import { AbstractControl, ValidatorFn, Validators } from '@angular/forms';\r\n\r\nexport function validateIDNumber(): ValidatorFn {\r\n return (control: AbstractControl): { [key: string]: any } | null => {\r\n const value = control.value;\r\n if (Validators.required(control) || !isValidIDNumber(value)) {\r\n return { invalidIDNumber: { value } };\r\n }\r\n return null;\r\n };\r\n}\r\n\r\nfunction isValidIDNumber(aId: number | string): boolean {\r\n let id_num: string = aId.toString();\r\n\r\n if (id_num.length !== 9)\r\n return false;\r\n\r\n const id_12_digits: number[] = [1, 2, 1, 2, 1, 2, 1, 2, 1];\r\n\r\n let result: number = 0;\r\n for (let i = 0; i < 9; i++) {\r\n let num: number = parseInt(id_num[i]) * id_12_digits[i];\r\n num = num >= 10 ? Math.floor(num / 10) + (num % 10) : num;\r\n result += num;\r\n }\r\n\r\n return result % 10 === 0;\r\n}","import { HttpClient } from '@angular/common/http';\r\nimport { AbstractControl, AsyncValidatorFn } from '@angular/forms';\r\nimport { EMPTY, Observable, of, throwError } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nlet initialId: string = '';\r\n\r\nexport function isUniqueIdValidator(path: string, fieldName: string, http: HttpClient, isEditMode: boolean = false): AsyncValidatorFn {\r\n return (control: AbstractControl): Observable<any | null> => {\r\n if (isEditMode && control.pristine) {\r\n if (control.value)\r\n initialId = control.value;\r\n\r\n return of(null);\r\n }\r\n\r\n if (isEditMode && control.value === initialId)\r\n return of(null);\r\n\r\n return http.post(path, { [fieldName]: control.value })\r\n .pipe(\r\n map(() => null),\r\n catchError(error => {\r\n if (error.status === 409) {\r\n control.setErrors({ isUniqueIdValidator: true });\r\n return EMPTY;\r\n }\r\n\r\n return throwError(error);\r\n })\r\n )\r\n }\r\n}","import { validatorsNames, formsErrorMessages } from 'herum-shared/constants';\r\n\r\nexport const requiredErrorMessage = { [validatorsNames.required]: formsErrorMessages.requiredField };\r\n\r\nexport const validatorsErrorMessages: { [key: string]: { [key: string]: string } } = {\r\n militaryId: {\r\n [validatorsNames.isUniqueIdValidator]: formsErrorMessages.militaryIdIsUsed,\r\n [validatorsNames.pattern]: formsErrorMessages.notValidMilitarylId,\r\n ...requiredErrorMessage\r\n },\r\n personalId: {\r\n [validatorsNames.isUniqueIdValidator]: formsErrorMessages.personalIdIsUsed,\r\n [validatorsNames.invalidIDNumber]: formsErrorMessages.notValidPersonalId,\r\n ...requiredErrorMessage\r\n }\r\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}