design-angular-kit 1.0.0-9 → 1.0.0-prerelease.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +212 -64
- package/assets/i18n/en.json +81 -12
- package/assets/i18n/it.json +80 -11
- package/esm2022/lib/abstracts/abstract-form.component.mjs +187 -0
- package/esm2022/lib/abstracts/abstract.component.mjs +45 -0
- package/esm2022/lib/components/core/accordion/accordion.component.mjs +39 -0
- package/esm2022/lib/components/core/alert/alert.component.mjs +71 -0
- package/esm2022/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.mjs +43 -0
- package/esm2022/lib/components/core/avatar/avatar-group/avatar-group.component.mjs +38 -0
- package/esm2022/lib/components/core/avatar/avatar.directive.mjs +78 -0
- package/esm2022/lib/components/core/avatar/avatar.module.mjs +33 -0
- package/esm2022/lib/components/core/badge/badge.directive.mjs +39 -0
- package/esm2022/lib/components/core/button/button.directive.mjs +86 -0
- package/esm2022/lib/components/core/callout/callout.component.mjs +57 -0
- package/esm2022/lib/components/core/card/card.component.mjs +59 -0
- package/esm2022/lib/components/core/carousel/carousel/carousel.component.mjs +84 -0
- package/esm2022/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +19 -0
- package/esm2022/lib/components/core/carousel/carousel.module.mjs +18 -0
- package/esm2022/lib/components/core/chip/chip.component.mjs +136 -0
- package/esm2022/lib/components/core/collapse/collapse.component.mjs +104 -0
- package/esm2022/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +24 -0
- package/esm2022/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +11 -0
- package/esm2022/lib/components/core/dimmer/dimmer.component.mjs +55 -0
- package/esm2022/lib/components/core/dimmer/dimmer.module.mjs +19 -0
- package/esm2022/lib/components/core/dropdown/dropdown/dropdown.component.mjs +144 -0
- package/esm2022/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +61 -0
- package/esm2022/lib/components/core/dropdown/dropdown.module.mjs +18 -0
- package/esm2022/lib/components/core/forward/forward.directive.mjs +53 -0
- package/esm2022/lib/components/core/link/link.component.mjs +42 -0
- package/esm2022/lib/components/core/list/list/list.component.mjs +22 -0
- package/esm2022/lib/components/core/list/list-item/list-item.component.mjs +51 -0
- package/esm2022/lib/components/core/list/list.module.mjs +18 -0
- package/esm2022/lib/components/core/modal/modal.component.mjs +194 -0
- package/esm2022/lib/components/core/notifications/notifications.component.mjs +111 -0
- package/esm2022/lib/components/core/pagination/pagination.component.mjs +130 -0
- package/esm2022/lib/components/core/popover/popover.directive.mjs +176 -0
- package/esm2022/lib/components/core/progress-bar/progress-bar.component.mjs +34 -0
- package/esm2022/lib/components/core/progress-button/progress-button.component.mjs +25 -0
- package/esm2022/lib/components/core/spinner/spinner.component.mjs +30 -0
- package/esm2022/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +116 -0
- package/esm2022/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +20 -0
- package/esm2022/lib/components/core/steppers/steppers.module.mjs +18 -0
- package/esm2022/lib/components/core/tab/tab-container/tab-container.component.mjs +63 -0
- package/esm2022/lib/components/core/tab/tab-item/tab-item.component.mjs +39 -0
- package/esm2022/lib/components/core/tab/tab.module.mjs +18 -0
- package/esm2022/lib/components/core/table/sort/sort-header/sort-header.component.mjs +134 -0
- package/esm2022/lib/components/core/table/sort/sort.directive.mjs +123 -0
- package/esm2022/lib/components/core/table/table.component.mjs +45 -0
- package/esm2022/lib/components/core/table/table.module.mjs +19 -0
- package/esm2022/lib/components/core/tooltip/tooltip.directive.mjs +143 -0
- package/esm2022/lib/components/form/autocomplete/autocomplete.component.mjs +106 -0
- package/esm2022/lib/components/form/checkbox/checkbox.component.mjs +48 -0
- package/esm2022/lib/components/form/form.module.mjs +59 -0
- package/esm2022/lib/components/form/input/input.component.mjs +187 -0
- package/esm2022/lib/components/form/password-input/password-input.component.mjs +149 -0
- package/esm2022/lib/components/form/radio-button/radio-button.component.mjs +60 -0
- package/esm2022/lib/components/form/range/range.component.mjs +64 -0
- package/esm2022/lib/components/form/rating/rating.component.mjs +50 -0
- package/esm2022/lib/components/form/select/select.component.mjs +70 -0
- package/esm2022/lib/components/form/textarea/textarea.component.mjs +55 -0
- package/esm2022/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +142 -0
- package/esm2022/lib/components/form/upload-file-list/upload-file-list.component.mjs +107 -0
- package/esm2022/lib/components/navigation/back-button/back-button.component.mjs +67 -0
- package/esm2022/lib/components/navigation/back-to-top/back-to-top.component.mjs +58 -0
- package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +51 -0
- package/esm2022/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +21 -0
- package/esm2022/lib/components/navigation/breadcrumbs/breadcrumbs.module.mjs +18 -0
- package/esm2022/lib/components/navigation/header/header.component.mjs +87 -0
- package/esm2022/lib/components/navigation/megamenu/megamenu.component.mjs +27 -0
- package/esm2022/lib/components/navigation/navbar/navbar/navbar.component.mjs +40 -0
- package/esm2022/lib/components/navigation/navbar/navbar-item/navbar-item.component.mjs +11 -0
- package/esm2022/lib/components/navigation/navbar/navbar.module.mjs +18 -0
- package/esm2022/lib/components/utils/error-page/error-page.component.mjs +74 -0
- package/esm2022/lib/components/utils/icon/icon.component.mjs +58 -0
- package/esm2022/lib/components/utils/language-switcher/language-switcher.component.mjs +50 -0
- package/esm2022/lib/design-angular-kit.module.mjs +213 -0
- package/esm2022/lib/enums/colors.enums.mjs +12 -0
- package/esm2022/lib/enums/sizes.enum.mjs +9 -0
- package/esm2022/lib/interfaces/core.mjs +16 -0
- package/esm2022/lib/interfaces/design-angular-kit-config.mjs +7 -0
- package/esm2022/lib/interfaces/form.mjs +2 -0
- package/esm2022/lib/interfaces/icon.mjs +165 -0
- package/esm2022/lib/interfaces/sortable-table.mjs +6 -0
- package/esm2022/lib/pipes/date-ago.pipe.mjs +56 -0
- package/esm2022/lib/pipes/duration.pipe.mjs +110 -0
- package/esm2022/lib/pipes/mark-matching-text.pipe.mjs +48 -0
- package/esm2022/lib/provide-design-angular-kit.mjs +61 -0
- package/esm2022/lib/services/notification/notification.service.mjs +120 -0
- package/esm2022/lib/utils/coercion.mjs +18 -0
- package/esm2022/lib/utils/date-utils.mjs +160 -0
- package/esm2022/lib/utils/file-utils.mjs +73 -0
- package/esm2022/lib/utils/regex.mjs +31 -0
- package/esm2022/lib/validators/it-validators.mjs +153 -0
- package/esm2022/public_api.mjs +99 -0
- package/fesm2022/design-angular-kit.mjs +5556 -0
- package/fesm2022/design-angular-kit.mjs.map +1 -0
- package/lib/abstracts/{abstract-form-component.d.ts → abstract-form.component.d.ts} +12 -14
- package/lib/abstracts/abstract.component.d.ts +18 -8
- package/lib/components/core/accordion/accordion.component.d.ts +11 -5
- package/lib/components/core/alert/alert.component.d.ts +15 -10
- package/lib/components/core/avatar/avatar-dropdown/avatar-dropdown.component.d.ts +29 -0
- package/lib/components/core/avatar/avatar-group/avatar-group.component.d.ts +13 -0
- package/lib/components/core/avatar/avatar.directive.d.ts +33 -0
- package/lib/components/core/avatar/avatar.module.d.ts +9 -0
- package/lib/components/core/badge/badge.directive.d.ts +14 -7
- package/lib/components/core/button/button.directive.d.ts +25 -15
- package/lib/components/core/callout/callout.component.d.ts +18 -20
- package/lib/components/core/card/card.component.d.ts +46 -18
- package/lib/components/core/carousel/carousel/carousel.component.d.ts +34 -15
- package/lib/components/core/carousel/carousel-item/carousel-item.component.d.ts +8 -3
- package/lib/components/core/carousel/carousel.module.d.ts +8 -0
- package/lib/components/core/chip/chip.component.d.ts +29 -15
- package/lib/components/core/collapse/collapse.component.d.ts +22 -15
- package/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.d.ts +3 -3
- package/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.d.ts +3 -3
- package/lib/components/core/dimmer/dimmer.component.d.ts +6 -6
- package/lib/components/core/dimmer/dimmer.module.d.ts +9 -0
- package/lib/components/core/dropdown/dropdown/dropdown.component.d.ts +30 -17
- package/lib/components/core/dropdown/dropdown-item/dropdown-item.component.d.ts +15 -12
- package/lib/components/core/dropdown/dropdown.module.d.ts +8 -0
- package/lib/components/core/forward/forward.directive.d.ts +3 -3
- package/lib/components/core/link/link.component.d.ts +14 -10
- package/lib/components/core/list/list/list.component.d.ts +20 -6
- package/lib/components/core/list/list-item/list-item.component.d.ts +23 -9
- package/lib/components/core/list/list.module.d.ts +8 -0
- package/lib/components/core/modal/modal.component.d.ts +89 -13
- package/lib/components/core/notifications/notifications.component.d.ts +9 -8
- package/lib/components/core/pagination/pagination.component.d.ts +71 -10
- package/lib/components/core/popover/popover.directive.d.ts +15 -14
- package/lib/components/core/progress-bar/progress-bar.component.d.ts +11 -8
- package/lib/components/core/progress-button/progress-button.component.d.ts +5 -6
- package/lib/components/core/spinner/spinner.component.d.ts +13 -10
- package/lib/components/core/steppers/steppers-container/steppers-container.component.d.ts +55 -27
- package/lib/components/core/steppers/steppers-item/steppers-item.component.d.ts +5 -4
- package/lib/components/core/steppers/steppers.module.d.ts +8 -0
- package/lib/components/core/tab/tab-container/tab-container.component.d.ts +15 -12
- package/lib/components/core/tab/tab-item/tab-item.component.d.ts +14 -10
- package/lib/components/core/tab/tab.module.d.ts +8 -0
- package/lib/components/core/table/sort/sort-header/sort-header.component.d.ts +72 -0
- package/lib/components/core/table/sort/sort.directive.d.ts +53 -0
- package/lib/components/core/table/table.component.d.ts +26 -20
- package/lib/components/core/table/table.module.d.ts +9 -0
- package/lib/components/core/tooltip/tooltip.directive.d.ts +12 -11
- package/lib/components/form/autocomplete/autocomplete.component.d.ts +55 -0
- package/lib/components/form/checkbox/checkbox.component.d.ts +23 -12
- package/lib/components/form/form.module.d.ts +17 -0
- package/lib/components/form/input/input.component.d.ts +42 -43
- package/lib/components/form/password-input/password-input.component.d.ts +35 -10
- package/lib/components/form/radio-button/radio-button.component.d.ts +20 -11
- package/lib/components/form/range/range.component.d.ts +42 -0
- package/lib/components/form/rating/rating.component.d.ts +24 -0
- package/lib/components/form/select/select.component.d.ts +12 -6
- package/lib/components/form/textarea/textarea.component.d.ts +15 -5
- package/lib/components/form/upload-drag-drop/upload-drag-drop.component.d.ts +18 -12
- package/lib/components/form/upload-file-list/upload-file-list.component.d.ts +14 -11
- package/lib/components/navigation/back-button/back-button.component.d.ts +8 -8
- package/lib/components/navigation/back-to-top/back-to-top.component.d.ts +15 -16
- package/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.d.ts +12 -14
- package/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.d.ts +9 -8
- package/lib/components/navigation/breadcrumbs/breadcrumbs.module.d.ts +8 -0
- package/lib/components/navigation/header/header.component.d.ts +28 -25
- package/lib/components/navigation/megamenu/megamenu.component.d.ts +22 -0
- package/lib/components/navigation/navbar/navbar/navbar.component.d.ts +16 -0
- package/lib/components/navigation/navbar/navbar-item/navbar-item.component.d.ts +5 -0
- package/lib/components/navigation/navbar/navbar.module.d.ts +8 -0
- package/lib/components/utils/error-page/error-page.component.d.ts +44 -0
- package/lib/components/utils/icon/icon.component.d.ts +25 -17
- package/lib/components/utils/language-switcher/language-switcher.component.d.ts +9 -5
- package/lib/design-angular-kit.module.d.ts +44 -7
- package/lib/enums/colors.enums.d.ts +10 -0
- package/lib/enums/sizes.enum.d.ts +7 -0
- package/lib/interfaces/core.d.ts +16 -15
- package/lib/interfaces/design-angular-kit-config.d.ts +30 -0
- package/lib/interfaces/form.d.ts +9 -9
- package/lib/interfaces/icon.d.ts +4 -3
- package/lib/interfaces/sortable-table.d.ts +33 -0
- package/lib/pipes/date-ago.pipe.d.ts +17 -0
- package/lib/pipes/duration.pipe.d.ts +35 -0
- package/lib/pipes/mark-matching-text.pipe.d.ts +15 -7
- package/lib/provide-design-angular-kit.d.ts +7 -0
- package/lib/services/{notifications/notifications.service.d.ts → notification/notification.service.d.ts} +3 -3
- package/lib/utils/coercion.d.ts +14 -0
- package/lib/utils/date-utils.d.ts +78 -0
- package/lib/utils/file-utils.d.ts +1 -1
- package/lib/utils/regex.d.ts +5 -0
- package/lib/validators/it-validators.d.ts +9 -2
- package/package.json +17 -22
- package/public_api.d.ts +31 -4
- package/esm2020/lib/abstracts/abstract-form-component.mjs +0 -174
- package/esm2020/lib/abstracts/abstract.component.mjs +0 -27
- package/esm2020/lib/components/core/accordion/accordion.component.mjs +0 -31
- package/esm2020/lib/components/core/alert/alert.component.mjs +0 -69
- package/esm2020/lib/components/core/badge/badge.directive.mjs +0 -34
- package/esm2020/lib/components/core/button/button.directive.mjs +0 -80
- package/esm2020/lib/components/core/callout/callout.component.mjs +0 -84
- package/esm2020/lib/components/core/card/card.component.mjs +0 -58
- package/esm2020/lib/components/core/carousel/carousel/carousel.component.mjs +0 -66
- package/esm2020/lib/components/core/carousel/carousel-item/carousel-item.component.mjs +0 -14
- package/esm2020/lib/components/core/chip/chip.component.mjs +0 -89
- package/esm2020/lib/components/core/collapse/collapse.component.mjs +0 -101
- package/esm2020/lib/components/core/dimmer/dimmer-buttons/dimmer-buttons.component.mjs +0 -24
- package/esm2020/lib/components/core/dimmer/dimmer-icon/dimmer-icon.component.mjs +0 -11
- package/esm2020/lib/components/core/dimmer/dimmer.component.mjs +0 -59
- package/esm2020/lib/components/core/dropdown/dropdown/dropdown.component.mjs +0 -130
- package/esm2020/lib/components/core/dropdown/dropdown-item/dropdown-item.component.mjs +0 -68
- package/esm2020/lib/components/core/forward/forward.directive.mjs +0 -51
- package/esm2020/lib/components/core/link/link.component.mjs +0 -40
- package/esm2020/lib/components/core/list/list/list.component.mjs +0 -13
- package/esm2020/lib/components/core/list/list-item/list-item.component.mjs +0 -36
- package/esm2020/lib/components/core/modal/modal.component.mjs +0 -98
- package/esm2020/lib/components/core/notifications/notifications.component.mjs +0 -110
- package/esm2020/lib/components/core/pagination/pagination.component.mjs +0 -51
- package/esm2020/lib/components/core/popover/popover.directive.mjs +0 -179
- package/esm2020/lib/components/core/progress-bar/progress-bar.component.mjs +0 -34
- package/esm2020/lib/components/core/progress-button/progress-button.component.mjs +0 -27
- package/esm2020/lib/components/core/spinner/spinner.component.mjs +0 -35
- package/esm2020/lib/components/core/steppers/steppers-container/steppers-container.component.mjs +0 -119
- package/esm2020/lib/components/core/steppers/steppers-item/steppers-item.component.mjs +0 -18
- package/esm2020/lib/components/core/tab/tab-container/tab-container.component.mjs +0 -59
- package/esm2020/lib/components/core/tab/tab-item/tab-item.component.mjs +0 -36
- package/esm2020/lib/components/core/table/table.component.mjs +0 -57
- package/esm2020/lib/components/core/tooltip/tooltip.directive.mjs +0 -143
- package/esm2020/lib/components/form/checkbox/checkbox.component.mjs +0 -40
- package/esm2020/lib/components/form/input/input.component.mjs +0 -222
- package/esm2020/lib/components/form/password-input/password-input.component.mjs +0 -112
- package/esm2020/lib/components/form/radio-button/radio-button.component.mjs +0 -53
- package/esm2020/lib/components/form/select/select.component.mjs +0 -62
- package/esm2020/lib/components/form/textarea/textarea.component.mjs +0 -46
- package/esm2020/lib/components/form/upload-drag-drop/upload-drag-drop.component.mjs +0 -137
- package/esm2020/lib/components/form/upload-file-list/upload-file-list.component.mjs +0 -104
- package/esm2020/lib/components/navigation/back-button/back-button.component.mjs +0 -69
- package/esm2020/lib/components/navigation/back-to-top/back-to-top.component.mjs +0 -74
- package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb/breadcrumb.component.mjs +0 -45
- package/esm2020/lib/components/navigation/breadcrumbs/breadcrumb-item/breadcrumb-item.component.mjs +0 -23
- package/esm2020/lib/components/navigation/header/header.component.mjs +0 -63
- package/esm2020/lib/components/utils/icon/icon.component.mjs +0 -54
- package/esm2020/lib/components/utils/language-switcher/language-switcher.component.mjs +0 -39
- package/esm2020/lib/components/utils/not-found-page/not-found-page.component.mjs +0 -13
- package/esm2020/lib/design-angular-kit.module.mjs +0 -56
- package/esm2020/lib/interfaces/core.mjs +0 -16
- package/esm2020/lib/interfaces/form.mjs +0 -2
- package/esm2020/lib/interfaces/icon.mjs +0 -2
- package/esm2020/lib/modules/components.module.mjs +0 -257
- package/esm2020/lib/pipes/mark-matching-text.pipe.mjs +0 -36
- package/esm2020/lib/services/notifications/notifications.service.mjs +0 -120
- package/esm2020/lib/utils/boolean-input.mjs +0 -15
- package/esm2020/lib/utils/file-utils.mjs +0 -73
- package/esm2020/lib/utils/regex.mjs +0 -26
- package/esm2020/lib/validators/it-validators.mjs +0 -134
- package/esm2020/public_api.mjs +0 -70
- package/fesm2015/design-angular-kit.mjs +0 -3850
- package/fesm2015/design-angular-kit.mjs.map +0 -1
- package/fesm2020/design-angular-kit.mjs +0 -3797
- package/fesm2020/design-angular-kit.mjs.map +0 -1
- package/lib/components/utils/not-found-page/not-found-page.component.d.ts +0 -5
- package/lib/modules/components.module.d.ts +0 -61
- package/lib/utils/boolean-input.d.ts +0 -11
- /package/{esm2020 → esm2022}/design-angular-kit.mjs +0 -0
- /package/{esm2020 → esm2022}/lib/interfaces/utils.mjs +0 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { filter, Subject } from 'rxjs';
|
|
3
|
+
import { NotificationType } from '../../interfaces/core';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class ItNotificationService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.subject = new Subject();
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Listen on notification arrived
|
|
11
|
+
* @param filterType filter type of notification
|
|
12
|
+
*/
|
|
13
|
+
onNotification(filterType) {
|
|
14
|
+
return this.subject.asObservable().pipe(filter(n => n && (!filterType || (n.type === filterType))));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Show new notification
|
|
18
|
+
* @param notification notification
|
|
19
|
+
*/
|
|
20
|
+
addNotification(notification) {
|
|
21
|
+
this.subject.next(notification);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create new Standard notification
|
|
25
|
+
* @param title notification title
|
|
26
|
+
* @param message notification message
|
|
27
|
+
* @param dismissible notification dismissible
|
|
28
|
+
* @param duration notification duration (milliseconds)
|
|
29
|
+
* @param position notification position
|
|
30
|
+
*/
|
|
31
|
+
standard(title, message, dismissible, duration, position) {
|
|
32
|
+
this.addNotification({
|
|
33
|
+
type: NotificationType.Standard,
|
|
34
|
+
message,
|
|
35
|
+
title,
|
|
36
|
+
duration,
|
|
37
|
+
dismissible,
|
|
38
|
+
position
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create new Success notification
|
|
43
|
+
* @param title notification title
|
|
44
|
+
* @param message notification message
|
|
45
|
+
* @param dismissible notification dismissible
|
|
46
|
+
* @param duration notification duration (milliseconds)
|
|
47
|
+
* @param position notification position
|
|
48
|
+
*/
|
|
49
|
+
success(title, message, dismissible, duration, position) {
|
|
50
|
+
this.addNotification({
|
|
51
|
+
type: NotificationType.Success,
|
|
52
|
+
message,
|
|
53
|
+
title,
|
|
54
|
+
duration,
|
|
55
|
+
dismissible,
|
|
56
|
+
position
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Create new Error notification
|
|
61
|
+
* @param title notification title
|
|
62
|
+
* @param message notification message
|
|
63
|
+
* @param dismissible notification dismissible
|
|
64
|
+
* @param duration notification duration (milliseconds)
|
|
65
|
+
* @param position notification position
|
|
66
|
+
*/
|
|
67
|
+
error(title, message, dismissible, duration, position) {
|
|
68
|
+
this.addNotification({
|
|
69
|
+
type: NotificationType.Error,
|
|
70
|
+
message,
|
|
71
|
+
title,
|
|
72
|
+
duration,
|
|
73
|
+
dismissible,
|
|
74
|
+
position
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Create new Warning notification
|
|
79
|
+
* @param title notification title
|
|
80
|
+
* @param message notification message
|
|
81
|
+
* @param dismissible notification dismissible
|
|
82
|
+
* @param duration notification duration (milliseconds)
|
|
83
|
+
* @param position notification position
|
|
84
|
+
*/
|
|
85
|
+
warning(title, message, dismissible, duration, position) {
|
|
86
|
+
this.addNotification({
|
|
87
|
+
type: NotificationType.Warning,
|
|
88
|
+
message,
|
|
89
|
+
title,
|
|
90
|
+
duration,
|
|
91
|
+
dismissible,
|
|
92
|
+
position
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Create new Info notification
|
|
97
|
+
* @param title notification title
|
|
98
|
+
* @param message notification message
|
|
99
|
+
* @param dismissible notification dismissible
|
|
100
|
+
* @param duration notification duration (milliseconds)
|
|
101
|
+
* @param position notification position
|
|
102
|
+
*/
|
|
103
|
+
info(title, message, dismissible, duration, position) {
|
|
104
|
+
this.addNotification({
|
|
105
|
+
type: NotificationType.Info,
|
|
106
|
+
message,
|
|
107
|
+
title,
|
|
108
|
+
duration,
|
|
109
|
+
dismissible,
|
|
110
|
+
position
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ItNotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
114
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ItNotificationService, providedIn: 'root' }); }
|
|
115
|
+
}
|
|
116
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ItNotificationService, decorators: [{
|
|
117
|
+
type: Injectable,
|
|
118
|
+
args: [{ providedIn: 'root' }]
|
|
119
|
+
}] });
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi9zZXJ2aWNlcy9ub3RpZmljYXRpb24vbm90aWZpY2F0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNuRCxPQUFPLEVBQXNDLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7O0FBRzdGLE1BQU0sT0FBTyxxQkFBcUI7SUFEbEM7UUFFVSxZQUFPLEdBQUcsSUFBSSxPQUFPLEVBQWdCLENBQUM7S0FrSC9DO0lBaEhDOzs7T0FHRztJQUNJLGNBQWMsQ0FBQyxVQUE2QjtRQUNqRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUNyQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUMzRCxDQUFDO0lBQ0osQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWUsQ0FBQyxZQUEwQjtRQUMvQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLFFBQVEsQ0FBQyxLQUFhLEVBQUUsT0FBZ0IsRUFBRSxXQUFvQixFQUFFLFFBQWlCLEVBQUUsUUFBK0I7UUFDdkgsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsUUFBUTtZQUMvQixPQUFPO1lBQ1AsS0FBSztZQUNMLFFBQVE7WUFDUixXQUFXO1lBQ1gsUUFBUTtTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksT0FBTyxDQUFDLEtBQWEsRUFBRSxPQUFnQixFQUFFLFdBQW9CLEVBQUUsUUFBaUIsRUFBRSxRQUErQjtRQUN0SCxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ25CLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxPQUFPO1lBQzlCLE9BQU87WUFDUCxLQUFLO1lBQ0wsUUFBUTtZQUNSLFdBQVc7WUFDWCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxLQUFLLENBQUMsS0FBYSxFQUFFLE9BQWdCLEVBQUUsV0FBb0IsRUFBRSxRQUFpQixFQUFFLFFBQStCO1FBQ3BILElBQUksQ0FBQyxlQUFlLENBQUM7WUFDbkIsSUFBSSxFQUFFLGdCQUFnQixDQUFDLEtBQUs7WUFDNUIsT0FBTztZQUNQLEtBQUs7WUFDTCxRQUFRO1lBQ1IsV0FBVztZQUNYLFFBQVE7U0FDVCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNJLE9BQU8sQ0FBQyxLQUFhLEVBQUUsT0FBZ0IsRUFBRSxXQUFvQixFQUFFLFFBQWlCLEVBQUUsUUFBK0I7UUFDdEgsSUFBSSxDQUFDLGVBQWUsQ0FBQztZQUNuQixJQUFJLEVBQUUsZ0JBQWdCLENBQUMsT0FBTztZQUM5QixPQUFPO1lBQ1AsS0FBSztZQUNMLFFBQVE7WUFDUixXQUFXO1lBQ1gsUUFBUTtTQUNULENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksSUFBSSxDQUFDLEtBQWEsRUFBRSxPQUFnQixFQUFFLFdBQW9CLEVBQUUsUUFBaUIsRUFBRSxRQUErQjtRQUNuSCxJQUFJLENBQUMsZUFBZSxDQUFDO1lBQ25CLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJO1lBQzNCLE9BQU87WUFDUCxLQUFLO1lBQ0wsUUFBUTtZQUNSLFdBQVc7WUFDWCxRQUFRO1NBQ1QsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0FsSFUscUJBQXFCO2tIQUFyQixxQkFBcUIsY0FEUixNQUFNOzsyRkFDbkIscUJBQXFCO2tCQURqQyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciwgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTm90aWZpY2F0aW9uLCBOb3RpZmljYXRpb25Qb3NpdGlvbiwgTm90aWZpY2F0aW9uVHlwZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29yZSc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSXROb3RpZmljYXRpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdWJqZWN0ID0gbmV3IFN1YmplY3Q8Tm90aWZpY2F0aW9uPigpO1xuXG4gIC8qKlxuICAgKiBMaXN0ZW4gb24gbm90aWZpY2F0aW9uIGFycml2ZWRcbiAgICogQHBhcmFtIGZpbHRlclR5cGUgZmlsdGVyIHR5cGUgb2Ygbm90aWZpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgb25Ob3RpZmljYXRpb24oZmlsdGVyVHlwZT86IE5vdGlmaWNhdGlvblR5cGUpOiBPYnNlcnZhYmxlPE5vdGlmaWNhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLnN1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcbiAgICAgIGZpbHRlcihuID0+IG4gJiYgKCFmaWx0ZXJUeXBlIHx8IChuLnR5cGUgPT09IGZpbHRlclR5cGUpKSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFNob3cgbmV3IG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0gbm90aWZpY2F0aW9uIG5vdGlmaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGFkZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb246IE5vdGlmaWNhdGlvbik6IHZvaWQge1xuICAgIHRoaXMuc3ViamVjdC5uZXh0KG5vdGlmaWNhdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBTdGFuZGFyZCBub3RpZmljYXRpb25cbiAgICogQHBhcmFtIHRpdGxlIG5vdGlmaWNhdGlvbiB0aXRsZVxuICAgKiBAcGFyYW0gbWVzc2FnZSBub3RpZmljYXRpb24gbWVzc2FnZVxuICAgKiBAcGFyYW0gZGlzbWlzc2libGUgbm90aWZpY2F0aW9uIGRpc21pc3NpYmxlXG4gICAqIEBwYXJhbSBkdXJhdGlvbiBub3RpZmljYXRpb24gZHVyYXRpb24gKG1pbGxpc2Vjb25kcylcbiAgICogQHBhcmFtIHBvc2l0aW9uIG5vdGlmaWNhdGlvbiBwb3NpdGlvblxuICAgKi9cbiAgcHVibGljIHN0YW5kYXJkKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIGRpc21pc3NpYmxlPzpib29sZWFuLCBkdXJhdGlvbj86IG51bWJlciwgcG9zaXRpb24/OiBOb3RpZmljYXRpb25Qb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTm90aWZpY2F0aW9uKHtcbiAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3RhbmRhcmQsXG4gICAgICBtZXNzYWdlLFxuICAgICAgdGl0bGUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRpc21pc3NpYmxlLFxuICAgICAgcG9zaXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IFN1Y2Nlc3Mgbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB0aXRsZSBub3RpZmljYXRpb24gdGl0bGVcbiAgICogQHBhcmFtIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAgICogQHBhcmFtIGRpc21pc3NpYmxlIG5vdGlmaWNhdGlvbiBkaXNtaXNzaWJsZVxuICAgKiBAcGFyYW0gZHVyYXRpb24gbm90aWZpY2F0aW9uIGR1cmF0aW9uIChtaWxsaXNlY29uZHMpXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBub3RpZmljYXRpb24gcG9zaXRpb25cbiAgICovXG4gIHB1YmxpYyBzdWNjZXNzKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIGRpc21pc3NpYmxlPzpib29sZWFuLCBkdXJhdGlvbj86IG51bWJlciwgcG9zaXRpb24/OiBOb3RpZmljYXRpb25Qb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTm90aWZpY2F0aW9uKHtcbiAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuU3VjY2VzcyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0aXRsZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGlzbWlzc2libGUsXG4gICAgICBwb3NpdGlvblxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBuZXcgRXJyb3Igbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB0aXRsZSBub3RpZmljYXRpb24gdGl0bGVcbiAgICogQHBhcmFtIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAgICogQHBhcmFtIGRpc21pc3NpYmxlIG5vdGlmaWNhdGlvbiBkaXNtaXNzaWJsZVxuICAgKiBAcGFyYW0gZHVyYXRpb24gbm90aWZpY2F0aW9uIGR1cmF0aW9uIChtaWxsaXNlY29uZHMpXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBub3RpZmljYXRpb24gcG9zaXRpb25cbiAgICovXG4gIHB1YmxpYyBlcnJvcih0aXRsZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBkaXNtaXNzaWJsZT86Ym9vbGVhbiwgZHVyYXRpb24/OiBudW1iZXIsIHBvc2l0aW9uPzogTm90aWZpY2F0aW9uUG9zaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZE5vdGlmaWNhdGlvbih7XG4gICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLkVycm9yLFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZHVyYXRpb24sXG4gICAgICBkaXNtaXNzaWJsZSxcbiAgICAgIHBvc2l0aW9uXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG5ldyBXYXJuaW5nIG5vdGlmaWNhdGlvblxuICAgKiBAcGFyYW0gdGl0bGUgbm90aWZpY2F0aW9uIHRpdGxlXG4gICAqIEBwYXJhbSBtZXNzYWdlIG5vdGlmaWNhdGlvbiBtZXNzYWdlXG4gICAqIEBwYXJhbSBkaXNtaXNzaWJsZSBub3RpZmljYXRpb24gZGlzbWlzc2libGVcbiAgICogQHBhcmFtIGR1cmF0aW9uIG5vdGlmaWNhdGlvbiBkdXJhdGlvbiAobWlsbGlzZWNvbmRzKVxuICAgKiBAcGFyYW0gcG9zaXRpb24gbm90aWZpY2F0aW9uIHBvc2l0aW9uXG4gICAqL1xuICBwdWJsaWMgd2FybmluZyh0aXRsZTogc3RyaW5nLCBtZXNzYWdlPzogc3RyaW5nLCBkaXNtaXNzaWJsZT86Ym9vbGVhbiwgZHVyYXRpb24/OiBudW1iZXIsIHBvc2l0aW9uPzogTm90aWZpY2F0aW9uUG9zaXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLmFkZE5vdGlmaWNhdGlvbih7XG4gICAgICB0eXBlOiBOb3RpZmljYXRpb25UeXBlLldhcm5pbmcsXG4gICAgICBtZXNzYWdlLFxuICAgICAgdGl0bGUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRpc21pc3NpYmxlLFxuICAgICAgcG9zaXRpb25cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgbmV3IEluZm8gbm90aWZpY2F0aW9uXG4gICAqIEBwYXJhbSB0aXRsZSBub3RpZmljYXRpb24gdGl0bGVcbiAgICogQHBhcmFtIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIG1lc3NhZ2VcbiAgICogQHBhcmFtIGRpc21pc3NpYmxlIG5vdGlmaWNhdGlvbiBkaXNtaXNzaWJsZVxuICAgKiBAcGFyYW0gZHVyYXRpb24gbm90aWZpY2F0aW9uIGR1cmF0aW9uIChtaWxsaXNlY29uZHMpXG4gICAqIEBwYXJhbSBwb3NpdGlvbiBub3RpZmljYXRpb24gcG9zaXRpb25cbiAgICovXG4gIHB1YmxpYyBpbmZvKHRpdGxlOiBzdHJpbmcsIG1lc3NhZ2U/OiBzdHJpbmcsIGRpc21pc3NpYmxlPzpib29sZWFuLCBkdXJhdGlvbj86IG51bWJlciwgcG9zaXRpb24/OiBOb3RpZmljYXRpb25Qb3NpdGlvbik6IHZvaWQge1xuICAgIHRoaXMuYWRkTm90aWZpY2F0aW9uKHtcbiAgICAgIHR5cGU6IE5vdGlmaWNhdGlvblR5cGUuSW5mbyxcbiAgICAgIG1lc3NhZ2UsXG4gICAgICB0aXRsZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgZGlzbWlzc2libGUsXG4gICAgICBwb3NpdGlvblxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { booleanAttribute } from "@angular/core";
|
|
2
|
+
/**
|
|
3
|
+
* Transforms a value (typically a string) to a boolean.
|
|
4
|
+
* Intended to be used as a transform function of an input.
|
|
5
|
+
*
|
|
6
|
+
* @usageNotes
|
|
7
|
+
* ```typescript
|
|
8
|
+
* @Input({ transform: booleanAttribute }) status?: boolean;
|
|
9
|
+
* ```
|
|
10
|
+
* @param {BooleanInput} value Value to be transformed.
|
|
11
|
+
*
|
|
12
|
+
* @publicApi
|
|
13
|
+
*/
|
|
14
|
+
export function inputToBoolean(value) {
|
|
15
|
+
// Wrap `@angular/core` function to force value type, for ide hits
|
|
16
|
+
return booleanAttribute(value);
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29lcmNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi91dGlscy9jb2VyY2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJakQ7Ozs7Ozs7Ozs7O0dBV0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLEtBQW1CO0lBQ2hELGtFQUFrRTtJQUNsRSxPQUFPLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ2pDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBib29sZWFuQXR0cmlidXRlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgQm9vbGVhbklucHV0ID0gXCJmYWxzZVwiIHwgXCJ0cnVlXCIgfCBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFRyYW5zZm9ybXMgYSB2YWx1ZSAodHlwaWNhbGx5IGEgc3RyaW5nKSB0byBhIGJvb2xlYW4uXG4gKiBJbnRlbmRlZCB0byBiZSB1c2VkIGFzIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIG9mIGFuIGlucHV0LlxuICpcbiAqICBAdXNhZ2VOb3Rlc1xuICogIGBgYHR5cGVzY3JpcHRcbiAqICBASW5wdXQoeyB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGUgfSkgc3RhdHVzPzogYm9vbGVhbjtcbiAqICBgYGBcbiAqIEBwYXJhbSB7Qm9vbGVhbklucHV0fSB2YWx1ZSBWYWx1ZSB0byBiZSB0cmFuc2Zvcm1lZC5cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnB1dFRvQm9vbGVhbih2YWx1ZTogQm9vbGVhbklucHV0KTogYm9vbGVhbiB7XG4gIC8vIFdyYXAgYEBhbmd1bGFyL2NvcmVgIGZ1bmN0aW9uIHRvIGZvcmNlIHZhbHVlIHR5cGUsIGZvciBpZGUgaGl0c1xuICByZXR1cm4gYm9vbGVhbkF0dHJpYnV0ZSh2YWx1ZSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { shareReplay, takeWhile, timer } from 'rxjs';
|
|
2
|
+
import { map } from 'rxjs/operators';
|
|
3
|
+
export class ItDateUtils {
|
|
4
|
+
/**
|
|
5
|
+
* Add seconds to date
|
|
6
|
+
* @param date the date
|
|
7
|
+
* @param seconds seconds to add
|
|
8
|
+
*/
|
|
9
|
+
static addSeconds(date, seconds) {
|
|
10
|
+
const newDate = new Date(date.valueOf());
|
|
11
|
+
newDate.setSeconds(date.getSeconds() + seconds);
|
|
12
|
+
return newDate;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Add minutes to date
|
|
16
|
+
* @param date the date
|
|
17
|
+
* @param minutes minutes to add
|
|
18
|
+
*/
|
|
19
|
+
static addMinutes(date, minutes) {
|
|
20
|
+
const newDate = new Date(date.valueOf());
|
|
21
|
+
newDate.setMinutes(date.getMinutes() + minutes);
|
|
22
|
+
return newDate;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Add hours to date
|
|
26
|
+
* @param date the date
|
|
27
|
+
* @param hours hours to add
|
|
28
|
+
*/
|
|
29
|
+
static addHours(date, hours) {
|
|
30
|
+
const newDate = new Date(date.valueOf());
|
|
31
|
+
newDate.setHours(date.getHours() + hours);
|
|
32
|
+
return newDate;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Add days to date
|
|
36
|
+
* @param date the date
|
|
37
|
+
* @param days days to add
|
|
38
|
+
*/
|
|
39
|
+
static addDays(date, days) {
|
|
40
|
+
const newDate = new Date(date.valueOf());
|
|
41
|
+
newDate.setDate(date.getDate() + days);
|
|
42
|
+
return newDate;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Add years to date
|
|
46
|
+
* @param date the date
|
|
47
|
+
* @param months months to add
|
|
48
|
+
*/
|
|
49
|
+
static addMonths(date, months) {
|
|
50
|
+
const newDate = new Date(date.valueOf());
|
|
51
|
+
newDate.setMonth(date.getMonth() + months);
|
|
52
|
+
return newDate;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Add years to date
|
|
56
|
+
* @param date the date
|
|
57
|
+
* @param years years to add
|
|
58
|
+
*/
|
|
59
|
+
static addYears(date, years) {
|
|
60
|
+
const newDate = new Date(date.valueOf());
|
|
61
|
+
newDate.setFullYear(date.getFullYear() + years);
|
|
62
|
+
return newDate;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Calculate number of days between two date
|
|
66
|
+
* @param startDate the start date
|
|
67
|
+
* @param endDate the end date
|
|
68
|
+
*/
|
|
69
|
+
static countDays(startDate, endDate) {
|
|
70
|
+
const differenceInTime = endDate.getTime() - startDate.getTime();
|
|
71
|
+
return Math.floor(differenceInTime / (1000 * 3600 * 24));
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Check if string is a date with iso format
|
|
75
|
+
* @param value the string
|
|
76
|
+
*/
|
|
77
|
+
static isIsoString(value) {
|
|
78
|
+
if (!value || !/\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}.\d{3}Z/.test(value)) {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
const d = new Date(value);
|
|
82
|
+
return !!d && !isNaN(d.getTime()) && d.toISOString() === value;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Convert iso string to Date
|
|
86
|
+
* @param isoString the iso string
|
|
87
|
+
*/
|
|
88
|
+
static isoStringToDate(isoString) {
|
|
89
|
+
return isoString ? new Date(Date.parse(isoString)) : null;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Remove time from an iso date string
|
|
93
|
+
* @param isoString the iso string
|
|
94
|
+
*/
|
|
95
|
+
static isoStringRemoveTime(isoString) {
|
|
96
|
+
let date = ItDateUtils.isoStringToDate(isoString);
|
|
97
|
+
if (!date) {
|
|
98
|
+
return isoString;
|
|
99
|
+
}
|
|
100
|
+
const offset = date.getTimezoneOffset();
|
|
101
|
+
date = new Date(date.getTime() - offset * 60 * 1000);
|
|
102
|
+
return date.toISOString().substring(0, isoString.indexOf('T'));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Set iso string hours to 0 and format correctly the date (consider timezone offset)
|
|
106
|
+
* @example '2024-03-04T23:00:00.000Z' -> '2024-03-05T00:00:00.000Z'
|
|
107
|
+
* @param isoString the iso string
|
|
108
|
+
*/
|
|
109
|
+
static isoStringSetZeroTime(isoString) {
|
|
110
|
+
let date = ItDateUtils.isoStringToDate(isoString);
|
|
111
|
+
if (!date) {
|
|
112
|
+
return isoString;
|
|
113
|
+
}
|
|
114
|
+
const offset = date.getTimezoneOffset();
|
|
115
|
+
date = new Date(date.getTime() - offset * 60 * 1000);
|
|
116
|
+
date.setUTCHours(0, 0, 0, 0);
|
|
117
|
+
return date.toISOString();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Calculate the date time left and return the string format [d h m s]
|
|
121
|
+
* @param endDate
|
|
122
|
+
*/
|
|
123
|
+
static timeLeftString(endDate) {
|
|
124
|
+
const endTime = endDate.getTime();
|
|
125
|
+
return timer(0, 1000).pipe(map(() => Math.floor((endTime - new Date().getTime()) / 1000)), takeWhile(delta => delta >= 0), map(delta => {
|
|
126
|
+
const arrayResult = [];
|
|
127
|
+
const days = Math.floor(delta / 60 / 60 / 24);
|
|
128
|
+
if (days > 0) {
|
|
129
|
+
arrayResult.push(days + 'd');
|
|
130
|
+
}
|
|
131
|
+
delta -= days * 60 * 60 * 24;
|
|
132
|
+
const hours = Math.floor(delta / 60 / 60) % 24;
|
|
133
|
+
if (hours > 0) {
|
|
134
|
+
arrayResult.push(hours + 'h');
|
|
135
|
+
}
|
|
136
|
+
delta -= hours * 60 * 60;
|
|
137
|
+
const minutes = Math.floor(delta / 60) % 60;
|
|
138
|
+
arrayResult.push(minutes + 'm');
|
|
139
|
+
delta -= minutes * 60;
|
|
140
|
+
const seconds = delta % 60;
|
|
141
|
+
arrayResult.push(seconds + 's');
|
|
142
|
+
return arrayResult.join(' ');
|
|
143
|
+
}), shareReplay(1));
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Calculate the next day of week
|
|
147
|
+
* @param dayOfWeek Day of week 0=Sunday, 1=Monday...4=Thursday...
|
|
148
|
+
* @param hour the specif hour
|
|
149
|
+
* @param minute the specific minute
|
|
150
|
+
*/
|
|
151
|
+
static nextWeekDayAndTime(dayOfWeek, hour = 0, minute = 0) {
|
|
152
|
+
const now = new Date();
|
|
153
|
+
const result = new Date(now.getFullYear(), now.getMonth(), now.getDate() + ((7 + dayOfWeek - now.getDay()) % 7), hour, minute, 0, 0);
|
|
154
|
+
if (result < now) {
|
|
155
|
+
result.setDate(result.getDate() + 7);
|
|
156
|
+
}
|
|
157
|
+
return result;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL3V0aWxzL2RhdGUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxNQUFNLE9BQU8sV0FBVztJQUN0Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFVLEVBQUUsT0FBZTtRQUNsRCxNQUFNLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztRQUNoRCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBVSxFQUFFLE9BQWU7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDekMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7UUFDaEQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLElBQVUsRUFBRSxLQUFhO1FBQzlDLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLEtBQUssQ0FBQyxD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LFdBQVcsRUFBRSxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckksSUFBSSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE9ic2VydmFibGUsIHNoYXJlUmVwbGF5LCB0YWtlV2hpbGUsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBJdERhdGVVdGlscyB7XG4gIC8qKlxuICAgKiBBZGQgc2Vjb25kcyB0byBkYXRlXG4gICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlXG4gICAqIEBwYXJhbSBzZWNvbmRzIHNlY29uZHMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFkZFNlY29uZHMoZGF0ZTogRGF0ZSwgc2Vjb25kczogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBuZXdEYXRlLnNldFNlY29uZHMoZGF0ZS5nZXRTZWNvbmRzKCkgKyBzZWNvbmRzKTtcbiAgICByZXR1cm4gbmV3RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgbWludXRlcyB0byBkYXRlXG4gICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlXG4gICAqIEBwYXJhbSBtaW51dGVzIG1pbnV0ZXMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFkZE1pbnV0ZXMoZGF0ZTogRGF0ZSwgbWludXRlczogbnVtYmVyKTogRGF0ZSB7XG4gICAgY29uc3QgbmV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUudmFsdWVPZigpKTtcbiAgICBuZXdEYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyBtaW51dGVzKTtcbiAgICByZXR1cm4gbmV3RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaG91cnMgdG8gZGF0ZVxuICAgKiBAcGFyYW0gZGF0ZSB0aGUgZGF0ZVxuICAgKiBAcGFyYW0gaG91cnMgaG91cnMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFkZEhvdXJzKGRhdGU6IERhdGUsIGhvdXJzOiBudW1iZXIpOiBEYXRlIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xuICAgIG5ld0RhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgaG91cnMpO1xuICAgIHJldHVybiBuZXdEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBkYXlzIHRvIGRhdGVcbiAgICogQHBhcmFtIGRhdGUgdGhlIGRhdGVcbiAgICogQHBhcmFtIGRheXMgZGF5cyB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYWRkRGF5cyhkYXRlOiBEYXRlLCBkYXlzOiBudW1iZXIpOiBEYXRlIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xuICAgIG5ld0RhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIGRheXMpO1xuICAgIHJldHVybiBuZXdEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCB5ZWFycyB0byBkYXRlXG4gICAqIEBwYXJhbSBkYXRlIHRoZSBkYXRlXG4gICAqIEBwYXJhbSBtb250aHMgbW9udGhzIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBhZGRNb250aHMoZGF0ZTogRGF0ZSwgbW9udGhzOiBudW1iZXIpOiBEYXRlIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xuICAgIG5ld0RhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgbW9udGhzKTtcbiAgICByZXR1cm4gbmV3RGF0ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgeWVhcnMgdG8gZGF0ZVxuICAgKiBAcGFyYW0gZGF0ZSB0aGUgZGF0ZVxuICAgKiBAcGFyYW0geWVhcnMgeWVhcnMgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFkZFllYXJzKGRhdGU6IERhdGUsIHllYXJzOiBudW1iZXIpOiBEYXRlIHtcbiAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUoZGF0ZS52YWx1ZU9mKCkpO1xuICAgIG5ld0RhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgeWVhcnMpO1xuICAgIHJldHVybiBuZXdEYXRlO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIHR3byBkYXRlXG4gICAqIEBwYXJhbSBzdGFydERhdGUgdGhlIHN0YXJ0IGRhdGVcbiAgICogQHBhcmFtIGVuZERhdGUgdGhlIGVuZCBkYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvdW50RGF5cyhzdGFydERhdGU6IERhdGUsIGVuZERhdGU6IERhdGUpOiBudW1iZXIge1xuICAgIGNvbnN0IGRpZmZlcmVuY2VJblRpbWUgPSBlbmREYXRlLmdldFRpbWUoKSAtIHN0YXJ0RGF0ZS5nZXRUaW1lKCk7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoZGlmZmVyZW5jZUluVGltZSAvICgxMDAwICogMzYwMCAqIDI0KSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgc3RyaW5nIGlzIGEgZGF0ZSB3aXRoIGlzbyBmb3JtYXRcbiAgICogQHBhcmFtIHZhbHVlIHRoZSBzdHJpbmdcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNJc29TdHJpbmcodmFsdWU6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcbiAgICBpZiAoIXZhbHVlIHx8ICEvXFxkezR9LVxcZHsyfS1cXGR7Mn1UXFxkezJ9OlxcZHsyfTpcXGR7Mn0uXFxkezN9Wi8udGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICByZXR1cm4gISFkICYmICFpc05hTihkLmdldFRpbWUoKSkgJiYgZC50b0lTT1N0cmluZygpID09PSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGlzbyBzdHJpbmcgdG8gRGF0ZVxuICAgKiBAcGFyYW0gaXNvU3RyaW5nIHRoZSBpc28gc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlzb1N0cmluZ1RvRGF0ZShpc29TdHJpbmc6IHN0cmluZyB8IG51bGwpOiBEYXRlIHwgbnVsbCB7XG4gICAgcmV0dXJuIGlzb1N0cmluZyA/IG5ldyBEYXRlKERhdGUucGFyc2UoaXNvU3RyaW5nKSkgOiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSB0aW1lIGZyb20gYW4gaXNvIGRhdGUgc3RyaW5nXG4gICAqIEBwYXJhbSBpc29TdHJpbmcgdGhlIGlzbyBzdHJpbmdcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNvU3RyaW5nUmVtb3ZlVGltZShpc29TdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGUgPSBJdERhdGVVdGlscy5pc29TdHJpbmdUb0RhdGUoaXNvU3RyaW5nKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiBpc29TdHJpbmc7XG4gICAgfVxuICAgIGNvbnN0IG9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBkYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBvZmZzZXQgKiA2MCAqIDEwMDApO1xuICAgIHJldHVybiBkYXRlLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIGlzb1N0cmluZy5pbmRleE9mKCdUJykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBpc28gc3RyaW5nIGhvdXJzIHRvIDAgYW5kIGZvcm1hdCBjb3JyZWN0bHkgdGhlIGRhdGUgKGNvbnNpZGVyIHRpbWV6b25lIG9mZnNldClcbiAgICogQGV4YW1wbGUgJzIwMjQtMDMtMDRUMjM6MDA6MDAuMDAwWicgLT4gJzIwMjQtMDMtMDVUMDA6MDA6MDAuMDAwWidcbiAgICogQHBhcmFtIGlzb1N0cmluZyB0aGUgaXNvIHN0cmluZ1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc29TdHJpbmdTZXRaZXJvVGltZShpc29TdHJpbmc6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgbGV0IGRhdGUgPSBJdERhdGVVdGlscy5pc29TdHJpbmdUb0RhdGUoaXNvU3RyaW5nKTtcbiAgICBpZiAoIWRhdGUpIHtcbiAgICAgIHJldHVybiBpc29TdHJpbmc7XG4gICAgfVxuICAgIGNvbnN0IG9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBkYXRlID0gbmV3IERhdGUoZGF0ZS5nZXRUaW1lKCkgLSBvZmZzZXQgKiA2MCAqIDEwMDApO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGRhdGUgdGltZSBsZWZ0IGFuZCByZXR1cm4gdGhlIHN0cmluZyBmb3JtYXQgW2QgaCBtIHNdXG4gICAqIEBwYXJhbSBlbmREYXRlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHRpbWVMZWZ0U3RyaW5nKGVuZERhdGU6IERhdGUpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IGVuZFRpbWUgPSBlbmREYXRlLmdldFRpbWUoKTtcbiAgICByZXR1cm4gdGltZXIoMCwgMTAwMCkucGlwZShcbiAgICAgIG1hcCgoKSA9PiBNYXRoLmZsb29yKChlbmRUaW1lIC0gbmV3IERhdGUoKS5nZXRUaW1lKCkpIC8gMTAwMCkpLFxuICAgICAgdGFrZVdoaWxlKGRlbHRhID0+IGRlbHRhID49IDApLFxuICAgICAgbWFwKGRlbHRhID0+IHtcbiAgICAgICAgY29uc3QgYXJyYXlSZXN1bHQ6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgY29uc3QgZGF5cyA9IE1hdGguZmxvb3IoZGVsdGEgLyA2MCAvIDYwIC8gMjQpO1xuICAgICAgICBpZiAoZGF5cyA+IDApIHtcbiAgICAgICAgICBhcnJheVJlc3VsdC5wdXNoKGRheXMgKyAnZCcpO1xuICAgICAgICB9XG4gICAgICAgIGRlbHRhIC09IGRheXMgKiA2MCAqIDYwICogMjQ7XG4gICAgICAgIGNvbnN0IGhvdXJzID0gTWF0aC5mbG9vcihkZWx0YSAvIDYwIC8gNjApICUgMjQ7XG4gICAgICAgIGlmIChob3VycyA+IDApIHtcbiAgICAgICAgICBhcnJheVJlc3VsdC5wdXNoKGhvdXJzICsgJ2gnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbHRhIC09IGhvdXJzICogNjAgKiA2MDtcbiAgICAgICAgY29uc3QgbWludXRlcyA9IE1hdGguZmxvb3IoZGVsdGEgLyA2MCkgJSA2MDtcbiAgICAgICAgYXJyYXlSZXN1bHQucHVzaChtaW51dGVzICsgJ20nKTtcblxuICAgICAgICBkZWx0YSAtPSBtaW51dGVzICogNjA7XG4gICAgICAgIGNvbnN0IHNlY29uZHMgPSBkZWx0YSAlIDYwO1xuICAgICAgICBhcnJheVJlc3VsdC5wdXNoKHNlY29uZHMgKyAncycpO1xuXG4gICAgICAgIHJldHVybiBhcnJheVJlc3VsdC5qb2luKCcgJyk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG5leHQgZGF5IG9mIHdlZWtcbiAgICogQHBhcmFtIGRheU9mV2VlayBEYXkgb2Ygd2VlayAwPVN1bmRheSwgMT1Nb25kYXkuLi40PVRodXJzZGF5Li4uXG4gICAqIEBwYXJhbSBob3VyIHRoZSBzcGVjaWYgaG91clxuICAgKiBAcGFyYW0gbWludXRlIHRoZSBzcGVjaWZpYyBtaW51dGVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgbmV4dFdlZWtEYXlBbmRUaW1lKGRheU9mV2VlazogbnVtYmVyLCBob3VyID0gMCwgbWludXRlID0gMCk6IERhdGUge1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IERhdGUobm93LmdldEZ1bGxZZWFyKCksIG5vdy5nZXRNb250aCgpLCBub3cuZ2V0RGF0ZSgpICsgKCg3ICsgZGF5T2ZXZWVrIC0gbm93LmdldERheSgpKSAlIDcpLCBob3VyLCBtaW51dGUsIDAsIDApO1xuXG4gICAgaWYgKHJlc3VsdCA8IG5vdykge1xuICAgICAgcmVzdWx0LnNldERhdGUocmVzdWx0LmdldERhdGUoKSArIDcpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
export class ItFileUtils {
|
|
3
|
+
/**
|
|
4
|
+
* Return the file size string
|
|
5
|
+
* @param file the file
|
|
6
|
+
* @param decimals decimal to show
|
|
7
|
+
*/
|
|
8
|
+
static getFileSizeString(file, decimals = 2) {
|
|
9
|
+
const bytes = file.size;
|
|
10
|
+
if (!+bytes) {
|
|
11
|
+
return '0 Bytes';
|
|
12
|
+
}
|
|
13
|
+
const k = 1024;
|
|
14
|
+
const dm = decimals < 0 ? 0 : decimals;
|
|
15
|
+
const sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
|
|
16
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
17
|
+
return `${parseFloat((bytes / Math.pow(k, i)).toFixed(dm))} ${sizes[i]}`;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Convert a file to base64 string
|
|
21
|
+
* @param file the base64 string
|
|
22
|
+
*/
|
|
23
|
+
static fileToBase64(file) {
|
|
24
|
+
const reader = new FileReader();
|
|
25
|
+
reader.readAsDataURL(file);
|
|
26
|
+
return new Observable(observer => {
|
|
27
|
+
reader.onload = (e) => {
|
|
28
|
+
const target = e.target;
|
|
29
|
+
if (!target?.result || target.result instanceof ArrayBuffer) {
|
|
30
|
+
return observer.error('Error on parse');
|
|
31
|
+
}
|
|
32
|
+
observer.next(target.result);
|
|
33
|
+
observer.complete();
|
|
34
|
+
};
|
|
35
|
+
reader.onerror = error => {
|
|
36
|
+
observer.error(error);
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert base64 to Blob
|
|
42
|
+
* @param base64 the base64 string
|
|
43
|
+
* @param mimeType the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">MIME type</a> (example 'application/pdf')
|
|
44
|
+
*/
|
|
45
|
+
static base64ToBlob(base64, mimeType) {
|
|
46
|
+
const byteString = window.atob(base64);
|
|
47
|
+
const arrayBuffer = new ArrayBuffer(byteString.length);
|
|
48
|
+
const int8Array = new Uint8Array(arrayBuffer);
|
|
49
|
+
for (let i = 0; i < byteString.length; i++) {
|
|
50
|
+
int8Array[i] = byteString.charCodeAt(i);
|
|
51
|
+
}
|
|
52
|
+
return new Blob([int8Array], { type: mimeType });
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Convert base64 to File
|
|
56
|
+
* @param base64 the base64 string
|
|
57
|
+
* @param mimeType the <a href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types">MIME type</a> (example 'application/pdf')
|
|
58
|
+
* @param filename the file name
|
|
59
|
+
*/
|
|
60
|
+
static base64ToFile(base64, mimeType, filename) {
|
|
61
|
+
const fileBlob = ItFileUtils.base64ToBlob(base64, mimeType);
|
|
62
|
+
return new File([fileBlob], filename, { type: mimeType });
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Extract the MIME type from base64 string
|
|
66
|
+
* @param base64 the base64 string
|
|
67
|
+
*/
|
|
68
|
+
static getMimeTypeFromBase64(base64) {
|
|
69
|
+
const mime = base64.match(/data:([a-zA-Z0-9]+\/[a-zA-Z0-9-.+]+).*,.*/);
|
|
70
|
+
return mime?.length ? mime[1] : undefined;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL3V0aWxzL2ZpbGUtdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVsQyxNQUFNLE9BQU8sV0FBVztJQUV0Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQVUsRUFBRSxRQUFRLEdBQUcsQ0FBQztRQUN0RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ1osT0FBTyxTQUFTLENBQUM7UUFDbkIsQ0FBQztRQUVELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztRQUNmLE1BQU0sRUFBRSxHQUFHLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1FBQ3ZDLE1BQU0sS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV4RSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxVQUFVLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFVO1FBQ25DLE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUzQixPQUFPLElBQUksVUFBVSxDQUFTLFFBQVEsQ0FBQyxFQUFFO1lBQ3ZDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDcEIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQztnQkFDeEIsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksTUFBTSxDQUFDLE1BQU0sWUFBWSxXQUFXLEVBQUUsQ0FBQztvQkFDNUQsT0FBTyxRQUFRLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7Z0JBQzFDLENBQUM7Z0JBQ0QsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzdCLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN0QixDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFO2dCQUN2QixRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hCLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQWMsRUFBRSxRQUFnQjtRQUN6RCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2RCxNQUFNLFNBQVMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzNDLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFDRCxPQUFPLElBQUksSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQWMsRUFBRSxRQUFnQixFQUFFLFFBQWdCO1FBQzNFLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzVELE9BQU8sSUFBSSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLHFCQUFxQixDQUFDLE1BQWM7UUFDaEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQywyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3ZFLE9BQU8sSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDNUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgSXRGaWxlVXRpbHMge1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGZpbGUgc2l6ZSBzdHJpbmdcbiAgICogQHBhcmFtIGZpbGUgdGhlIGZpbGVcbiAgICogQHBhcmFtIGRlY2ltYWxzIGRlY2ltYWwgdG8gc2hvd1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRGaWxlU2l6ZVN0cmluZyhmaWxlOiBGaWxlLCBkZWNpbWFscyA9IDIpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVzID0gZmlsZS5zaXplO1xuICAgIGlmICghK2J5dGVzKSB7XG4gICAgICByZXR1cm4gJzAgQnl0ZXMnO1xuICAgIH1cblxuICAgIGNvbnN0IGsgPSAxMDI0O1xuICAgIGNvbnN0IGRtID0gZGVjaW1hbHMgPCAwID8gMCA6IGRlY2ltYWxzO1xuICAgIGNvbnN0IHNpemVzID0gWydCeXRlcycsICdLQicsICdNQicsICdHQicsICdUQicsICdQQicsICdFQicsICdaQicsICdZQiddO1xuXG4gICAgY29uc3QgaSA9IE1hdGguZmxvb3IoTWF0aC5sb2coYnl0ZXMpIC8gTWF0aC5sb2coaykpO1xuICAgIHJldHVybiBgJHtwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGssIGkpKS50b0ZpeGVkKGRtKSl9ICR7c2l6ZXNbaV19YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgZmlsZSB0byBiYXNlNjQgc3RyaW5nXG4gICAqIEBwYXJhbSBmaWxlIHRoZSBiYXNlNjQgc3RyaW5nXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZpbGVUb0Jhc2U2NChmaWxlOiBGaWxlKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpO1xuXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0O1xuICAgICAgICBpZiAoIXRhcmdldD8ucmVzdWx0IHx8IHRhcmdldC5yZXN1bHQgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgICAgIHJldHVybiBvYnNlcnZlci5lcnJvcignRXJyb3Igb24gcGFyc2UnKTtcbiAgICAgICAgfVxuICAgICAgICBvYnNlcnZlci5uZXh0KHRhcmdldC5yZXN1bHQpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfTtcbiAgICAgIHJlYWRlci5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYmFzZTY0IHRvIEJsb2JcbiAgICogQHBhcmFtIGJhc2U2NCB0aGUgYmFzZTY0IHN0cmluZ1xuICAgKiBAcGFyYW0gbWltZVR5cGUgdGhlIDxhIGhyZWY9XCJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL01JTUVfdHlwZXMvQ29tbW9uX3R5cGVzXCI+TUlNRSB0eXBlPC9hPiAoZXhhbXBsZSAnYXBwbGljYXRpb24vcGRmJylcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYmFzZTY0VG9CbG9iKGJhc2U2NDogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nKTogQmxvYiB7XG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgYXJyYXlCdWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGludDhBcnJheVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBCbG9iKFtpbnQ4QXJyYXldLCB7IHR5cGU6IG1pbWVUeXBlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgYmFzZTY0IHRvIEZpbGVcbiAgICogQHBhcmFtIGJhc2U2NCB0aGUgYmFzZTY0IHN0cmluZ1xuICAgKiBAcGFyYW0gbWltZVR5cGUgdGhlIDxhIGhyZWY9XCJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL01JTUVfdHlwZXMvQ29tbW9uX3R5cGVzXCI+TUlNRSB0eXBlPC9hPiAoZXhhbXBsZSAnYXBwbGljYXRpb24vcGRmJylcbiAgICogQHBhcmFtIGZpbGVuYW1lIHRoZSBmaWxlIG5hbWVcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYmFzZTY0VG9GaWxlKGJhc2U2NDogc3RyaW5nLCBtaW1lVHlwZTogc3RyaW5nLCBmaWxlbmFtZTogc3RyaW5nKTogRmlsZSB7XG4gICAgY29uc3QgZmlsZUJsb2IgPSBJdEZpbGVVdGlscy5iYXNlNjRUb0Jsb2IoYmFzZTY0LCBtaW1lVHlwZSk7XG4gICAgcmV0dXJuIG5ldyBGaWxlKFtmaWxlQmxvYl0sIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgdGhlIE1JTUUgdHlwZSBmcm9tIGJhc2U2NCBzdHJpbmdcbiAgICogQHBhcmFtIGJhc2U2NCB0aGUgYmFzZTY0IHN0cmluZ1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXRNaW1lVHlwZUZyb21CYXNlNjQoYmFzZTY0OiBzdHJpbmcpOiBzdHJpbmd8dW5kZWZpbmVkIHtcbiAgICBjb25zdCBtaW1lID0gYmFzZTY0Lm1hdGNoKC9kYXRhOihbYS16QS1aMC05XStcXC9bYS16QS1aMC05LS4rXSspLiosLiovKTtcbiAgICByZXR1cm4gbWltZT8ubGVuZ3RoID8gbWltZVsxXSA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* General Email Regex (RFC 5322 Official Standard)
|
|
3
|
+
* http://emailregex.com/
|
|
4
|
+
*/
|
|
5
|
+
export const EMAIL_REGEX = /(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])/;
|
|
6
|
+
/**
|
|
7
|
+
* Phone number Regex
|
|
8
|
+
*/
|
|
9
|
+
export const PHONE_NUMBER_REGEX = /^\s*(?:\+?(\d{1,3}))?[-. (]*(\d{3})[-. )]*(\d{3})[-. ]*(\d{3})(?: *x(\d+))?\s*$/;
|
|
10
|
+
/**
|
|
11
|
+
* URL Regex
|
|
12
|
+
*/
|
|
13
|
+
export const URL_REGEX = /(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]+\.[^\s]{2,}|www\.[a-zA-Z0-9]+\.[^\s]{2,})/;
|
|
14
|
+
/**
|
|
15
|
+
* The italian tax code Regex (Codice Fiscale)
|
|
16
|
+
*/
|
|
17
|
+
export const ITALIAN_TAX_CODE_REGEX = /^[A-Za-z]{6}[0-9]{2}[A-Za-z]{1}[0-9]{2}[A-Za-z]{1}[0-9]{3}[A-Za-z]{1}$/i;
|
|
18
|
+
/**
|
|
19
|
+
* The VAT number Regex (Partita iva)
|
|
20
|
+
*/
|
|
21
|
+
export const VAT_NUMBER_REGEX = /^[0-9]{11}$/;
|
|
22
|
+
/**
|
|
23
|
+
* Italian CAP Regex
|
|
24
|
+
*/
|
|
25
|
+
export const CAP_REGEX = /^[0-9]{5}$/;
|
|
26
|
+
/**
|
|
27
|
+
* IBAN Regex
|
|
28
|
+
* https://blog.marketto.it/en/2018/06/validate-any-country-iban/
|
|
29
|
+
*/
|
|
30
|
+
export const IBAN_REGEX = /^(?:(?:IT|SM)\d{2}[A-Z]\d{22}|CY\d{2}[A-Z]\d{23}|NL\d{2}[A-Z]{4}\d{10}|LV\d{2}[A-Z]{4}\d{13}|(?:BG|BH|GB|IE)\d{2}[A-Z]{4}\d{14}|GI\d{2}[A-Z]{4}\d{15}|RO\d{2}[A-Z]{4}\d{16}|KW\d{2}[A-Z]{4}\d{22}|MT\d{2}[A-Z]{4}\d{23}|NO\d{13}|(?:DK|FI|GL|FO)\d{16}|MK\d{17}|(?:AT|EE|KZ|LU|XK)\d{18}|(?:BA|HR|LI|CH|CR)\d{19}|(?:GE|DE|LT|ME|RS)\d{20}|IL\d{21}|(?:AD|CZ|ES|MD|SA)\d{22}|PT\d{23}|(?:BE|IS)\d{24}|(?:FR|MR|MC)\d{25}|(?:AL|DO|LB|PL)\d{26}|(?:AZ|HU)\d{27}|(?:GR|MU)\d{28})$/i;
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVnZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9kZXNpZ24tYW5ndWxhci1raXQvc3JjL2xpYi91dGlscy9yZWdleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsNGFBQTRhLENBQUM7QUFFeGM7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpRkFBaUYsQ0FBQztBQUVwSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxtTkFBbU4sQ0FBQztBQUU3Tzs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHlFQUF5RSxDQUFDO0FBRWhIOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsYUFBYSxDQUFDO0FBRTlDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLFlBQVksQ0FBQztBQUV0Qzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxVQUFVLEdBQUcsbWRBQW1kLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYWwgRW1haWwgUmVnZXggKFJGQyA1MzIyIE9mZmljaWFsIFN0YW5kYXJkKVxuICogaHR0cDovL2VtYWlscmVnZXguY29tL1xuICovXG5leHBvcnQgY29uc3QgRU1BSUxfUkVHRVggPSAvKD86W2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKnxcIig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKlwiKUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/fFxcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/fFthLXowLTktXSpbYS16MC05XTooPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMS1cXHg1YVxceDUzLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkrKVxcXSkvO1xuXG4vKipcbiAqIFBob25lIG51bWJlciBSZWdleFxuICovXG5leHBvcnQgY29uc3QgUEhPTkVfTlVNQkVSX1JFR0VYID0gL15cXHMqKD86XFwrPyhcXGR7MSwzfSkpP1stLiAoXSooXFxkezN9KVstLiApXSooXFxkezN9KVstLiBdKihcXGR7M30pKD86ICp4KFxcZCspKT9cXHMqJC87XG5cbi8qKlxuICogVVJMIFJlZ2V4XG4gKi9cbmV4cG9ydCBjb25zdCBVUkxfUkVHRVggPSAvKGh0dHBzPzpcXC9cXC8oPzp3d3dcXC58KD8hd3d3KSlbYS16QS1aMC05XVthLXpBLVowLTktXStbYS16QS1aMC05XVxcLlteXFxzXXsyLH18d3d3XFwuW2EtekEtWjAtOV1bYS16QS1aMC05LV0rW2EtekEtWjAtOV1cXC5bXlxcc117Mix9fGh0dHBzPzpcXC9cXC8oPzp3d3dcXC58KD8hd3d3KSlbYS16QS1aMC05XStcXC5bXlxcc117Mix9fHd3d1xcLlthLXpBLVowLTldK1xcLlteXFxzXXsyLH0pLztcblxuLyoqXG4gKiBUaGUgaXRhbGlhbiB0YXggY29kZSBSZWdleCAoQ29kaWNlIEZpc2NhbGUpXG4gKi9cbmV4cG9ydCBjb25zdCBJVEFMSUFOX1RBWF9DT0RFX1JFR0VYID0gL15bQS1aYS16XXs2fVswLTldezJ9W0EtWmEtel17MX1bMC05XXsyfVtBLVphLXpdezF9WzAtOV17M31bQS1aYS16XXsxfSQvaTtcblxuLyoqXG4gKiBUaGUgVkFUIG51bWJlciBSZWdleCAoUGFydGl0YSBpdmEpXG4gKi9cbmV4cG9ydCBjb25zdCBWQVRfTlVNQkVSX1JFR0VYID0gL15bMC05XXsxMX0kLztcblxuLyoqXG4gKiBJdGFsaWFuIENBUCBSZWdleFxuICovXG5leHBvcnQgY29uc3QgQ0FQX1JFR0VYID0gL15bMC05XXs1fSQvO1xuXG4vKipcbiAqIElCQU4gUmVnZXhcbiAqIGh0dHBzOi8vYmxvZy5tYXJrZXR0by5pdC9lbi8yMDE4LzA2L3ZhbGlkYXRlLWFueS1jb3VudHJ5LWliYW4vXG4gKi9cbmV4cG9ydCBjb25zdCBJQkFOX1JFR0VYID0gL14oPzooPzpJVHxTTSlcXGR7Mn1bQS1aXVxcZHsyMn18Q1lcXGR7Mn1bQS1aXVxcZHsyM318TkxcXGR7Mn1bQS1aXXs0fVxcZHsxMH18TFZcXGR7Mn1bQS1aXXs0fVxcZHsxM318KD86Qkd8Qkh8R0J8SUUpXFxkezJ9W0EtWl17NH1cXGR7MTR9fEdJXFxkezJ9W0EtWl17NH1cXGR7MTV9fFJPXFxkezJ9W0EtWl17NH1cXGR7MTZ9fEtXXFxkezJ9W0EtWl17NH1cXGR7MjJ9fE1UXFxkezJ9W0EtWl17NH1cXGR7MjN9fE5PXFxkezEzfXwoPzpES3xGSXxHTHxGTylcXGR7MTZ9fE1LXFxkezE3fXwoPzpBVHxFRXxLWnxMVXxYSylcXGR7MTh9fCg/OkJBfEhSfExJfENIfENSKVxcZHsxOX18KD86R0V8REV8TFR8TUV8UlMpXFxkezIwfXxJTFxcZHsyMX18KD86QUR8Q1p8RVN8TUR8U0EpXFxkezIyfXxQVFxcZHsyM318KD86QkV8SVMpXFxkezI0fXwoPzpGUnxNUnxNQylcXGR7MjV9fCg/OkFMfERPfExCfFBMKVxcZHsyNn18KD86QVp8SFUpXFxkezI3fXwoPzpHUnxNVSlcXGR7Mjh9KSQvaTtcbiJdfQ==
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { Validators } from '@angular/forms';
|
|
2
|
+
import { CAP_REGEX, EMAIL_REGEX, IBAN_REGEX, ITALIAN_TAX_CODE_REGEX, PHONE_NUMBER_REGEX, URL_REGEX, VAT_NUMBER_REGEX } from '../utils/regex';
|
|
3
|
+
export class ItValidators {
|
|
4
|
+
static { this.SpecialCharacterPattern = '!@#$%&*_+=;:|,.'; }
|
|
5
|
+
/**
|
|
6
|
+
* Static pattern validator with custom error
|
|
7
|
+
* @param regex
|
|
8
|
+
* @param error
|
|
9
|
+
*/
|
|
10
|
+
static customPattern(regex, error) {
|
|
11
|
+
return (control) => {
|
|
12
|
+
if (!control.value) {
|
|
13
|
+
// if control is empty return no error
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
// test the value of the control against the regexp supplied
|
|
17
|
+
const valid = regex.test(control.value);
|
|
18
|
+
// if true, return no error (no error), else return error passed in the second parameter
|
|
19
|
+
return valid ? null : error;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Set Validator if the condition is satisfied
|
|
24
|
+
* @param validator the validator to apply if the condition is true
|
|
25
|
+
* @param condition the condition
|
|
26
|
+
*/
|
|
27
|
+
static conditional(validator, condition) {
|
|
28
|
+
return formControl => {
|
|
29
|
+
if (!formControl.parent) {
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (condition(formControl)) {
|
|
33
|
+
return validator(formControl);
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Check whether our password and confirm password are a match
|
|
40
|
+
* @param control
|
|
41
|
+
* @param passwordControlName the password formControlName
|
|
42
|
+
* @param confirmControlName the confirmPassword formControlName
|
|
43
|
+
*/
|
|
44
|
+
static passwordMatch(control, passwordControlName = 'password', confirmControlName = 'confirmPassword') {
|
|
45
|
+
const confirmControl = control.get(confirmControlName); // confirmPassword form control
|
|
46
|
+
if (!confirmControl) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const passwordControl = control.get(passwordControlName); // password form control
|
|
50
|
+
const password = passwordControl?.value; // get password from our password form control
|
|
51
|
+
// compare is the password match
|
|
52
|
+
if ((password && !confirmControl.value) || (confirmControl.value && password !== confirmControl.value)) {
|
|
53
|
+
// if they don't match, set an error in our confirmPassword form control
|
|
54
|
+
confirmControl?.setErrors({ noPasswordMatch: true });
|
|
55
|
+
confirmControl?.markAsTouched();
|
|
56
|
+
return control;
|
|
57
|
+
}
|
|
58
|
+
if (password && passwordControl?.touched) {
|
|
59
|
+
confirmControl?.markAsTouched();
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Password validator
|
|
65
|
+
* @param minLength minimum password length - default 10
|
|
66
|
+
* @param hasNumber check whether the entered password has a number - default true
|
|
67
|
+
* @param hasCapitalCase check whether the entered password has upper case letter - default true
|
|
68
|
+
* @param hasSmallCase check whether the entered password has a lower-case letter - default true
|
|
69
|
+
* @param hasSpecialCharacters check whether the entered password has a special character - default true
|
|
70
|
+
* @param required the field is required - default true
|
|
71
|
+
*/
|
|
72
|
+
static password(minLength = 10, hasNumber = true, hasCapitalCase = true, hasSmallCase = true, hasSpecialCharacters = true, required = true) {
|
|
73
|
+
const validators = [Validators.minLength(minLength)];
|
|
74
|
+
if (hasNumber) {
|
|
75
|
+
validators.push(ItValidators.customPattern(/\d/, { hasNumber }));
|
|
76
|
+
}
|
|
77
|
+
if (hasCapitalCase) {
|
|
78
|
+
validators.push(ItValidators.customPattern(/[A-Z]/, { hasCapitalCase }));
|
|
79
|
+
}
|
|
80
|
+
if (hasSmallCase) {
|
|
81
|
+
validators.push(ItValidators.customPattern(/[a-z]/, { hasSmallCase }));
|
|
82
|
+
}
|
|
83
|
+
if (hasSpecialCharacters) {
|
|
84
|
+
validators.push(ItValidators.customPattern(new RegExp(`[${ItValidators.SpecialCharacterPattern}]`), { hasSpecialCharacters }));
|
|
85
|
+
}
|
|
86
|
+
if (required) {
|
|
87
|
+
validators.push(Validators.required);
|
|
88
|
+
}
|
|
89
|
+
return Validators.compose(validators);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Email validator
|
|
93
|
+
*/
|
|
94
|
+
static get email() {
|
|
95
|
+
return Validators.compose([
|
|
96
|
+
Validators.email,
|
|
97
|
+
ItValidators.customPattern(EMAIL_REGEX, { invalidEmail: true })
|
|
98
|
+
]);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Phone number validator
|
|
102
|
+
*/
|
|
103
|
+
static get tel() {
|
|
104
|
+
return ItValidators.customPattern(PHONE_NUMBER_REGEX, { invalidTel: true });
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* URL validator
|
|
108
|
+
*/
|
|
109
|
+
static get url() {
|
|
110
|
+
return ItValidators.customPattern(URL_REGEX, { invalidUrl: true });
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Italian Tax Code validator
|
|
114
|
+
*/
|
|
115
|
+
static get taxCode() {
|
|
116
|
+
return ItValidators.customPattern(ITALIAN_TAX_CODE_REGEX, { invalidTaxCode: true });
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* VAT Number validator
|
|
120
|
+
*/
|
|
121
|
+
static get vatNumber() {
|
|
122
|
+
return ItValidators.customPattern(VAT_NUMBER_REGEX, { invalidVatNumber: true });
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Italian Postal Code validator (CAP)
|
|
126
|
+
*/
|
|
127
|
+
static get cap() {
|
|
128
|
+
return ItValidators.customPattern(CAP_REGEX, { invalidCap: true });
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* IBAN validator
|
|
132
|
+
*/
|
|
133
|
+
static get iban() {
|
|
134
|
+
return ItValidators.customPattern(IBAN_REGEX, { invalidIban: true });
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Check if value is a valid RegExp
|
|
138
|
+
*/
|
|
139
|
+
static get regExp() {
|
|
140
|
+
return (control) => {
|
|
141
|
+
try {
|
|
142
|
+
if (control?.value) {
|
|
143
|
+
new RegExp(control.value);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
return { invalidRegex: true };
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXQtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rlc2lnbi1hbmd1bGFyLWtpdC9zcmMvbGliL3ZhbGlkYXRvcnMvaXQtdmFsaWRhdG9ycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtELFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzVGLE9BQU8sRUFDTCxTQUFTLEVBQ1QsV0FBVyxFQUNYLFVBQVUsRUFDVixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLFNBQVMsRUFDVCxnQkFBZ0IsRUFDakIsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QixNQUFNLE9BQU8sWUFBWTthQUNULDRCQUF1QixHQUFHLGlCQUFpQixDQUFDO0lBRTFEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQWEsRUFBRSxLQUF1QjtRQUNoRSxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtZQUMzRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQixzQ0FBc0M7Z0JBQ3RDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUVELDREQUE0RDtZQUM1RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUV4Qyx3RkFBd0Y7WUFDeEYsT0FBTyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQzlCLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFdBQVcsQ0FBQyxTQUFzQixFQUFFLFNBQWdEO1FBQ2hHLE9BQU8sV0FBVyxDQUFDLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDeEIsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsSUFBSSxTQUFTLENB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MkIsRUFBRTtZQUMzRCxJQUFJLENBQUM7Z0JBQ0gsSUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7b0JBQ25CLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNYLE9BQU8sRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLENBQUM7WUFDaEMsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDO0lBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBDQVBfUkVHRVgsXG4gIEVNQUlMX1JFR0VYLFxuICBJQkFOX1JFR0VYLFxuICBJVEFMSUFOX1RBWF9DT0RFX1JFR0VYLFxuICBQSE9ORV9OVU1CRVJfUkVHRVgsXG4gIFVSTF9SRUdFWCxcbiAgVkFUX05VTUJFUl9SRUdFWFxufSBmcm9tICcuLi91dGlscy9yZWdleCc7XG5cbmV4cG9ydCBjbGFzcyBJdFZhbGlkYXRvcnMge1xuICBwdWJsaWMgc3RhdGljIFNwZWNpYWxDaGFyYWN0ZXJQYXR0ZXJuID0gJyFAIyQlJipfKz07OnwsLic7XG5cbiAgLyoqXG4gICAqIFN0YXRpYyBwYXR0ZXJuIHZhbGlkYXRvciB3aXRoIGN1c3RvbSBlcnJvclxuICAgKiBAcGFyYW0gcmVnZXhcbiAgICogQHBhcmFtIGVycm9yXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGN1c3RvbVBhdHRlcm4ocmVnZXg6IFJlZ0V4cCwgZXJyb3I6IFZhbGlkYXRpb25FcnJvcnMpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgLy8gaWYgY29udHJvbCBpcyBlbXB0eSByZXR1cm4gbm8gZXJyb3JcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIHRlc3QgdGhlIHZhbHVlIG9mIHRoZSBjb250cm9sIGFnYWluc3QgdGhlIHJlZ2V4cCBzdXBwbGllZFxuICAgICAgY29uc3QgdmFsaWQgPSByZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpO1xuXG4gICAgICAvLyBpZiB0cnVlLCByZXR1cm4gbm8gZXJyb3IgKG5vIGVycm9yKSwgZWxzZSByZXR1cm4gZXJyb3IgcGFzc2VkIGluIHRoZSBzZWNvbmQgcGFyYW1ldGVyXG4gICAgICByZXR1cm4gdmFsaWQgPyBudWxsIDogZXJyb3I7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgVmFsaWRhdG9yIGlmIHRoZSBjb25kaXRpb24gaXMgc2F0aXNmaWVkXG4gICAqIEBwYXJhbSB2YWxpZGF0b3IgdGhlIHZhbGlkYXRvciB0byBhcHBseSBpZiB0aGUgY29uZGl0aW9uIGlzIHRydWVcbiAgICogQHBhcmFtIGNvbmRpdGlvbiB0aGUgY29uZGl0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNvbmRpdGlvbmFsKHZhbGlkYXRvcjogVmFsaWRhdG9yRm4sIGNvbmRpdGlvbjogKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4gYm9vbGVhbik6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gZm9ybUNvbnRyb2wgPT4ge1xuICAgICAgaWYgKCFmb3JtQ29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoY29uZGl0aW9uKGZvcm1Db250cm9sKSkge1xuICAgICAgICByZXR1cm4gdmFsaWRhdG9yKGZvcm1Db250cm9sKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBvdXIgcGFzc3dvcmQgYW5kIGNvbmZpcm0gcGFzc3dvcmQgYXJlIGEgbWF0Y2hcbiAgICogQHBhcmFtIGNvbnRyb2xcbiAgICogQHBhcmFtIHBhc3N3b3JkQ29udHJvbE5hbWUgdGhlIHBhc3N3b3JkIGZvcm1Db250cm9sTmFtZVxuICAgKiBAcGFyYW0gY29uZmlybUNvbnRyb2xOYW1lIHRoZSBjb25maXJtUGFzc3dvcmQgZm9ybUNvbnRyb2xOYW1lXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHBhc3N3b3JkTWF0Y2goY29udHJvbDogQWJzdHJhY3RDb250cm9sLCBwYXNzd29yZENvbnRyb2xOYW1lID0gJ3Bhc3N3b3JkJywgY29uZmlybUNvbnRyb2xOYW1lID0gJ2NvbmZpcm1QYXNzd29yZCcpOiBBYnN0cmFjdENvbnRyb2wgfCBudWxsIHtcbiAgICBjb25zdCBjb25maXJtQ29udHJvbCA9IGNvbnRyb2wuZ2V0KGNvbmZpcm1Db250cm9sTmFtZSk7IC8vIGNvbmZpcm1QYXNzd29yZCBmb3JtIGNvbnRyb2xcbiAgICBpZiAoIWNvbmZpcm1Db250cm9sKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBwYXNzd29yZENvbnRyb2wgPSBjb250cm9sLmdldChwYXNzd29yZENvbnRyb2xOYW1lKTsgLy8gcGFzc3dvcmQgZm9ybSBjb250cm9sXG4gICAgY29uc3QgcGFzc3dvcmQgPSBwYXNzd29yZENvbnRyb2w/LnZhbHVlOyAvLyBnZXQgcGFzc3dvcmQgZnJvbSBvdXIgcGFzc3dvcmQgZm9ybSBjb250cm9sXG5cbiAgICAvLyBjb21wYXJlIGlzIHRoZSBwYXNzd29yZCBtYXRjaFxuICAgIGlmICgocGFzc3dvcmQgJiYgIWNvbmZpcm1Db250cm9sLnZhbHVlKSB8fCAoY29uZmlybUNvbnRyb2wudmFsdWUgJiYgcGFzc3dvcmQgIT09IGNvbmZpcm1Db250cm9sLnZhbHVlKSkge1xuICAgICAgLy8gaWYgdGhleSBkb24ndCBtYXRjaCwgc2V0IGFuIGVycm9yIGluIG91ciBjb25maXJtUGFzc3dvcmQgZm9ybSBjb250cm9sXG4gICAgICBjb25maXJtQ29udHJvbD8uc2V0RXJyb3JzKHsgbm9QYXNzd29yZE1hdGNoOiB0cnVlIH0pO1xuICAgICAgY29uZmlybUNvbnRyb2w/Lm1hcmtBc1RvdWNoZWQoKTtcbiAgICAgIHJldHVybiBjb250cm9sO1xuICAgIH1cblxuICAgIGlmIChwYXNzd29yZCAmJiBwYXNzd29yZENvbnRyb2w/LnRvdWNoZWQpIHtcbiAgICAgIGNvbmZpcm1Db250cm9sPy5tYXJrQXNUb3VjaGVkKCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3N3b3JkIHZhbGlkYXRvclxuICAgKiBAcGFyYW0gbWluTGVuZ3RoIG1pbmltdW0gcGFzc3dvcmQgbGVuZ3RoIC0gZGVmYXVsdCAxMFxuICAgKiBAcGFyYW0gaGFzTnVtYmVyIGNoZWNrIHdoZXRoZXIgdGhlIGVudGVyZWQgcGFzc3dvcmQgaGFzIGEgbnVtYmVyIC0gZGVmYXVsdCB0cnVlXG4gICAqIEBwYXJhbSBoYXNDYXBpdGFsQ2FzZSBjaGVjayB3aGV0aGVyIHRoZSBlbnRlcmVkIHBhc3N3b3JkIGhhcyB1cHBlciBjYXNlIGxldHRlciAtIGRlZmF1bHQgdHJ1ZVxuICAgKiBAcGFyYW0gaGFzU21hbGxDYXNlIGNoZWNrIHdoZXRoZXIgdGhlIGVudGVyZWQgcGFzc3dvcmQgaGFzIGEgbG93ZXItY2FzZSBsZXR0ZXIgLSBkZWZhdWx0IHRydWVcbiAgICogQHBhcmFtIGhhc1NwZWNpYWxDaGFyYWN0ZXJzIGNoZWNrIHdoZXRoZXIgdGhlIGVudGVyZWQgcGFzc3dvcmQgaGFzIGEgc3BlY2lhbCBjaGFyYWN0ZXIgLSBkZWZhdWx0IHRydWVcbiAgICogQHBhcmFtIHJlcXVpcmVkIHRoZSBmaWVsZCBpcyByZXF1aXJlZCAtIGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwYXNzd29yZChtaW5MZW5ndGggPSAxMCwgaGFzTnVtYmVyID0gdHJ1ZSwgaGFzQ2FwaXRhbENhc2UgPSB0cnVlLCBoYXNTbWFsbENhc2UgPSB0cnVlLCBoYXNTcGVjaWFsQ2hhcmFjdGVycyA9IHRydWUsIHJlcXVpcmVkID0gdHJ1ZSk6IFZhbGlkYXRvckZuIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBBcnJheTxWYWxpZGF0b3JGbj4gPSBbVmFsaWRhdG9ycy5taW5MZW5ndGgobWluTGVuZ3RoKV07XG4gICAgaWYgKGhhc051bWJlcikge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKEl0VmFsaWRhdG9ycy5jdXN0b21QYXR0ZXJuKC9cXGQvLCB7IGhhc051bWJlciB9KSk7XG4gICAgfVxuICAgIGlmIChoYXNDYXBpdGFsQ2FzZSkge1xuICAgICAgdmFsaWRhdG9ycy5wdXNoKEl0VmFsaWRhdG9ycy5jdXN0b21QYXR0ZXJuKC9bQS1aXS8sIHsgaGFzQ2FwaXRhbENhc2UgfSkpO1xuICAgIH1cbiAgICBpZiAoaGFzU21hbGxDYXNlKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goSXRWYWxpZGF0b3JzLmN1c3RvbVBhdHRlcm4oL1thLXpdLywgeyBoYXNTbWFsbENhc2UgfSkpO1xuICAgIH1cbiAgICBpZiAoaGFzU3BlY2lhbENoYXJhY3RlcnMpIHtcbiAgICAgIHZhbGlkYXRvcnMucHVzaChJdFZhbGlkYXRvcnMuY3VzdG9tUGF0dGVybihuZXcgUmVnRXhwKGBbJHtJdFZhbGlkYXRvcnMuU3BlY2lhbENoYXJhY3RlclBhdHRlcm59XWApLCB7IGhhc1NwZWNpYWxDaGFyYWN0ZXJzIH0pKTtcbiAgICB9XG4gICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG4gICAgfVxuICAgIHJldHVybiA8VmFsaWRhdG9yRm4+VmFsaWRhdG9ycy5jb21wb3NlKHZhbGlkYXRvcnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYWlsIHZhbGlkYXRvclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgZW1haWwoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiA8VmFsaWRhdG9yRm4+VmFsaWRhdG9ycy5jb21wb3NlKFtcbiAgICAgIFZhbGlkYXRvcnMuZW1haWwsXG4gICAgICBJdFZhbGlkYXRvcnMuY3VzdG9tUGF0dGVybihFTUFJTF9SRUdFWCwgeyBpbnZhbGlkRW1haWw6IHRydWUgfSlcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQaG9uZSBudW1iZXIgdmFsaWRhdG9yXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCB0ZWwoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiBJdFZhbGlkYXRvcnMuY3VzdG9tUGF0dGVybihQSE9ORV9OVU1CRVJfUkVHRVgsIHsgaW52YWxpZFRlbDogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVUkwgdmFsaWRhdG9yXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCB1cmwoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiBJdFZhbGlkYXRvcnMuY3VzdG9tUGF0dGVybihVUkxfUkVHRVgsIHsgaW52YWxpZFVybDogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGFsaWFuIFRheCBDb2RlIHZhbGlkYXRvclxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgdGF4Q29kZSgpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIEl0VmFsaWRhdG9ycy5jdXN0b21QYXR0ZXJuKElUQUxJQU5fVEFYX0NPREVfUkVHRVgsIHsgaW52YWxpZFRheENvZGU6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogVkFUIE51bWJlciB2YWxpZGF0b3JcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IHZhdE51bWJlcigpOiBWYWxpZGF0b3JGbiB7XG4gICAgcmV0dXJuIEl0VmFsaWRhdG9ycy5jdXN0b21QYXR0ZXJuKFZBVF9OVU1CRVJfUkVHRVgsIHsgaW52YWxpZFZhdE51bWJlcjogdHJ1ZSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJdGFsaWFuIFBvc3RhbCBDb2RlIHZhbGlkYXRvciAoQ0FQKVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBnZXQgY2FwKCk6IFZhbGlkYXRvckZuIHtcbiAgICByZXR1cm4gSXRWYWxpZGF0b3JzLmN1c3RvbVBhdHRlcm4oQ0FQX1JFR0VYLCB7IGludmFsaWRDYXA6IHRydWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSUJBTiB2YWxpZGF0b3JcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGliYW4oKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiBJdFZhbGlkYXRvcnMuY3VzdG9tUGF0dGVybihJQkFOX1JFR0VYLCB7IGludmFsaWRJYmFuOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIHZhbHVlIGlzIGEgdmFsaWQgUmVnRXhwXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGdldCByZWdFeHAoKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGNvbnRyb2w/LnZhbHVlKSB7XG4gICAgICAgICAgbmV3IFJlZ0V4cChjb250cm9sLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4geyBpbnZhbGlkUmVnZXg6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cbn1cbiJdfQ==
|