ngx-firebase 1.1.12 → 22.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -11
- package/fesm2022/ngx-firebase.mjs +158 -0
- package/fesm2022/ngx-firebase.mjs.map +1 -0
- package/package.json +40 -30
- package/types/ngx-firebase.d.ts +55 -0
- package/bundles/ngx-firebase-capacitor.umd.js +0 -763
- package/bundles/ngx-firebase-capacitor.umd.js.map +0 -1
- package/bundles/ngx-firebase-capacitor.umd.min.js +0 -16
- package/bundles/ngx-firebase-capacitor.umd.min.js.map +0 -1
- package/bundles/ngx-firebase-iap.umd.js +0 -718
- package/bundles/ngx-firebase-iap.umd.js.map +0 -1
- package/bundles/ngx-firebase-iap.umd.min.js +0 -2
- package/bundles/ngx-firebase-iap.umd.min.js.map +0 -1
- package/bundles/ngx-firebase-ionic-auth-ui.umd.js +0 -2116
- package/bundles/ngx-firebase-ionic-auth-ui.umd.js.map +0 -1
- package/bundles/ngx-firebase-ionic-auth-ui.umd.min.js +0 -16
- package/bundles/ngx-firebase-ionic-auth-ui.umd.min.js.map +0 -1
- package/bundles/ngx-firebase-ionic.umd.js +0 -979
- package/bundles/ngx-firebase-ionic.umd.js.map +0 -1
- package/bundles/ngx-firebase-ionic.umd.min.js +0 -16
- package/bundles/ngx-firebase-ionic.umd.min.js.map +0 -1
- package/bundles/ngx-firebase-testing.umd.js +0 -801
- package/bundles/ngx-firebase-testing.umd.js.map +0 -1
- package/bundles/ngx-firebase-testing.umd.min.js +0 -2
- package/bundles/ngx-firebase-testing.umd.min.js.map +0 -1
- package/bundles/ngx-firebase.umd.js +0 -2271
- package/bundles/ngx-firebase.umd.js.map +0 -1
- package/bundles/ngx-firebase.umd.min.js +0 -2
- package/bundles/ngx-firebase.umd.min.js.map +0 -1
- package/capacitor/capacitor.module.d.ts +0 -9
- package/capacitor/interfaces/config.d.ts +0 -12
- package/capacitor/interfaces/index.d.ts +0 -1
- package/capacitor/ngx-firebase-capacitor.d.ts +0 -5
- package/capacitor/ngx-firebase-capacitor.metadata.json +0 -1
- package/capacitor/package.json +0 -25
- package/capacitor/public-api.d.ts +0 -3
- package/capacitor/services/analytics-firebase-capacitor.service.d.ts +0 -9
- package/capacitor/services/crashlytics-firebase-capacitor.service.d.ts +0 -8
- package/capacitor/services/credential-factory-capacitor.service.d.ts +0 -18
- package/capacitor/services/index.d.ts +0 -3
- package/esm2015/capacitor/capacitor.module.js +0 -78
- package/esm2015/capacitor/interfaces/config.js +0 -3
- package/esm2015/capacitor/interfaces/index.js +0 -2
- package/esm2015/capacitor/ngx-firebase-capacitor.js +0 -6
- package/esm2015/capacitor/public-api.js +0 -4
- package/esm2015/capacitor/services/analytics-firebase-capacitor.service.js +0 -43
- package/esm2015/capacitor/services/crashlytics-firebase-capacitor.service.js +0 -40
- package/esm2015/capacitor/services/credential-factory-capacitor.service.js +0 -182
- package/esm2015/capacitor/services/index.js +0 -4
- package/esm2015/iap/iap.module.js +0 -32
- package/esm2015/iap/interfaces/index.js +0 -5
- package/esm2015/iap/ngx-firebase-iap.js +0 -5
- package/esm2015/iap/public-api.js +0 -5
- package/esm2015/iap/services/iap.service.js +0 -317
- package/esm2015/iap/tokens/index.js +0 -4
- package/esm2015/ionic/animations/index.js +0 -30
- package/esm2015/ionic/components/avatar/avatar.component.js +0 -98
- package/esm2015/ionic/components/avatar/index.js +0 -2
- package/esm2015/ionic/components/index.js +0 -3
- package/esm2015/ionic/components/popover-menu/index.js +0 -3
- package/esm2015/ionic/components/popover-menu/interface.js +0 -2
- package/esm2015/ionic/components/popover-menu/popover-menu.component.js +0 -34
- package/esm2015/ionic/ionic.module.js +0 -46
- package/esm2015/ionic/ngx-firebase-ionic.js +0 -5
- package/esm2015/ionic/public-api.js +0 -5
- package/esm2015/ionic/services/alerts-ionic.service.js +0 -107
- package/esm2015/ionic/services/index.js +0 -6
- package/esm2015/ionic/services/legality-dialog-ionic.service.js +0 -85
- package/esm2015/ionic/services/loading-ionic.service.js +0 -46
- package/esm2015/ionic/services/picker-ionic.service.js +0 -44
- package/esm2015/ionic/services/toast-ionic.service.js +0 -49
- package/esm2015/ionic-auth-ui/animations/index.js +0 -30
- package/esm2015/ionic-auth-ui/components/email-confirmation/email-confirmation.component.js +0 -99
- package/esm2015/ionic-auth-ui/components/email-field/email-field.component.js +0 -25
- package/esm2015/ionic-auth-ui/components/form-field/form-field.component.js +0 -82
- package/esm2015/ionic-auth-ui/components/index.js +0 -12
- package/esm2015/ionic-auth-ui/components/name-field/name-field.component.js +0 -30
- package/esm2015/ionic-auth-ui/components/or-divider/or-divider.component.js +0 -11
- package/esm2015/ionic-auth-ui/components/password-field/password-field.component.js +0 -138
- package/esm2015/ionic-auth-ui/components/password-field/passwordValidatorFunctions.js +0 -62
- package/esm2015/ionic-auth-ui/components/providers/providers.component.js +0 -70
- package/esm2015/ionic-auth-ui/components/reauthenticate/reauthenticate.component.js +0 -99
- package/esm2015/ionic-auth-ui/components/register/register.component.js +0 -142
- package/esm2015/ionic-auth-ui/components/register-with-email/register-with-email.component.js +0 -60
- package/esm2015/ionic-auth-ui/components/register-with-email-popover/register-with-email-popover.component.js +0 -26
- package/esm2015/ionic-auth-ui/components/signin/signin.component.js +0 -92
- package/esm2015/ionic-auth-ui/components/terms-field/terms-field.component.js +0 -99
- package/esm2015/ionic-auth-ui/components/user/user.component.js +0 -195
- package/esm2015/ionic-auth-ui/ionic-auth-ui.module.js +0 -92
- package/esm2015/ionic-auth-ui/ngx-firebase-ionic-auth-ui.js +0 -23
- package/esm2015/ionic-auth-ui/pages/index.js +0 -5
- package/esm2015/ionic-auth-ui/pages/register/index.js +0 -2
- package/esm2015/ionic-auth-ui/pages/register/register.page.js +0 -56
- package/esm2015/ionic-auth-ui/pages/signin/index.js +0 -2
- package/esm2015/ionic-auth-ui/pages/signin/signin.page.js +0 -78
- package/esm2015/ionic-auth-ui/pages/user/index.js +0 -2
- package/esm2015/ionic-auth-ui/pages/user/user.page.js +0 -11
- package/esm2015/ionic-auth-ui/pages/verifyemail/index.js +0 -2
- package/esm2015/ionic-auth-ui/pages/verifyemail/verifyemail.page.js +0 -85
- package/esm2015/ionic-auth-ui/public-api.js +0 -5
- package/esm2015/ngx-firebase.js +0 -6
- package/esm2015/public-api.js +0 -6
- package/esm2015/shared/guards/index.js +0 -3
- package/esm2015/shared/guards/logged-in.guard.js +0 -60
- package/esm2015/shared/guards/verify-email.guard.js +0 -41
- package/esm2015/shared/interfaces/accounts.enum.js +0 -9
- package/esm2015/shared/interfaces/authprovider.enum.js +0 -15
- package/esm2015/shared/interfaces/config.interface.js +0 -61
- package/esm2015/shared/interfaces/index.js +0 -8
- package/esm2015/shared/interfaces/main.interface.js +0 -7
- package/esm2015/shared/interfaces/providers.interface.js +0 -2
- package/esm2015/shared/interfaces/tokens.js +0 -19
- package/esm2015/shared/interfaces/ui-providers.interface.js +0 -2
- package/esm2015/shared/services/analytics.service.js +0 -24
- package/esm2015/shared/services/auth-process.service.js +0 -752
- package/esm2015/shared/services/crashlytics.service.js +0 -42
- package/esm2015/shared/services/device-info.service.js +0 -14
- package/esm2015/shared/services/firebase.service.js +0 -37
- package/esm2015/shared/services/firestore-sync.service.js +0 -60
- package/esm2015/shared/services/index.js +0 -10
- package/esm2015/shared/services/performance.service.js +0 -28
- package/esm2015/shared/services/remoteconfig.service.js +0 -49
- package/esm2015/shared/services/ui.service.js +0 -45
- package/esm2015/shared/shared.module.js +0 -175
- package/esm2015/shared/types/DisplayWidth.js +0 -9
- package/esm2015/shared/types/Location.js +0 -2
- package/esm2015/shared/types/ValueAccessorControlComponent.js +0 -85
- package/esm2015/shared/types/ValueAccessorValueComponent.js +0 -40
- package/esm2015/shared/types/index.js +0 -5
- package/esm2015/testing/fakeavatar.module.js +0 -22
- package/esm2015/testing/fakes/FakeAuthProcessService.js +0 -31
- package/esm2015/testing/fakes/FakeAvatarComponent.js +0 -13
- package/esm2015/testing/fakes/FakeFireService.js +0 -21
- package/esm2015/testing/fakes/FakeFirestoreSyncService.js +0 -11
- package/esm2015/testing/fakes/FakeIAPurchaseService.js +0 -11
- package/esm2015/testing/fakes/FakePickerService.js +0 -9
- package/esm2015/testing/fakes/FakeRemoteConfigService.js +0 -44
- package/esm2015/testing/fakes/FakeTranslateService.js +0 -21
- package/esm2015/testing/fakes/FakeUiService.js +0 -26
- package/esm2015/testing/fakes/angular-fire/FakeAngularFireAuth.js +0 -30
- package/esm2015/testing/fakes/angular-fire/FakeAngularFireFunctions.js +0 -17
- package/esm2015/testing/fakes/angular-fire/FakeAngularFirePerformance.js +0 -17
- package/esm2015/testing/fakes/angular-fire/FakeAngularFireStorage.js +0 -8
- package/esm2015/testing/fakes/angular-fire/FakeAngularFirestore.js +0 -8
- package/esm2015/testing/fakes/angular-fire/FakeUserCredential.js +0 -18
- package/esm2015/testing/fakes/index.js +0 -19
- package/esm2015/testing/ngx-firebase-testing.js +0 -6
- package/esm2015/testing/public-api.js +0 -5
- package/esm2015/testing/test.module.js +0 -66
- package/esm2015/testing/utils/index.js +0 -17
- package/esm2015/testing/utils/patchConsole.js +0 -14
- package/fesm2015/ngx-firebase-capacitor.js +0 -328
- package/fesm2015/ngx-firebase-capacitor.js.map +0 -1
- package/fesm2015/ngx-firebase-iap.js +0 -354
- package/fesm2015/ngx-firebase-iap.js.map +0 -1
- package/fesm2015/ngx-firebase-ionic-auth-ui.js +0 -1482
- package/fesm2015/ngx-firebase-ionic-auth-ui.js.map +0 -1
- package/fesm2015/ngx-firebase-ionic.js +0 -495
- package/fesm2015/ngx-firebase-ionic.js.map +0 -1
- package/fesm2015/ngx-firebase-testing.js +0 -388
- package/fesm2015/ngx-firebase-testing.js.map +0 -1
- package/fesm2015/ngx-firebase.js +0 -1482
- package/fesm2015/ngx-firebase.js.map +0 -1
- package/iap/iap.module.d.ts +0 -5
- package/iap/interfaces/index.d.ts +0 -11
- package/iap/ngx-firebase-iap.d.ts +0 -4
- package/iap/ngx-firebase-iap.metadata.json +0 -1
- package/iap/package.json +0 -23
- package/iap/public-api.d.ts +0 -4
- package/iap/services/iap.service.d.ts +0 -47
- package/iap/tokens/index.d.ts +0 -3
- package/ionic/animations/index.d.ts +0 -1
- package/ionic/components/avatar/avatar.component.d.ts +0 -27
- package/ionic/components/avatar/index.d.ts +0 -1
- package/ionic/components/index.d.ts +0 -2
- package/ionic/components/popover-menu/index.d.ts +0 -2
- package/ionic/components/popover-menu/interface.d.ts +0 -6
- package/ionic/components/popover-menu/popover-menu.component.d.ts +0 -10
- package/ionic/ionic.module.d.ts +0 -2
- package/ionic/ngx-firebase-ionic.d.ts +0 -4
- package/ionic/ngx-firebase-ionic.metadata.json +0 -1
- package/ionic/package.json +0 -30
- package/ionic/public-api.d.ts +0 -4
- package/ionic/services/alerts-ionic.service.d.ts +0 -13
- package/ionic/services/index.d.ts +0 -5
- package/ionic/services/legality-dialog-ionic.service.d.ts +0 -10
- package/ionic/services/loading-ionic.service.d.ts +0 -17
- package/ionic/services/picker-ionic.service.d.ts +0 -9
- package/ionic/services/toast-ionic.service.d.ts +0 -11
- package/ionic-auth-ui/animations/index.d.ts +0 -1
- package/ionic-auth-ui/components/email-confirmation/email-confirmation.component.d.ts +0 -31
- package/ionic-auth-ui/components/email-field/email-field.component.d.ts +0 -7
- package/ionic-auth-ui/components/form-field/form-field.component.d.ts +0 -28
- package/ionic-auth-ui/components/index.d.ts +0 -11
- package/ionic-auth-ui/components/name-field/name-field.component.d.ts +0 -8
- package/ionic-auth-ui/components/or-divider/or-divider.component.d.ts +0 -2
- package/ionic-auth-ui/components/password-field/password-field.component.d.ts +0 -34
- package/ionic-auth-ui/components/password-field/passwordValidatorFunctions.d.ts +0 -4
- package/ionic-auth-ui/components/providers/providers.component.d.ts +0 -26
- package/ionic-auth-ui/components/reauthenticate/reauthenticate.component.d.ts +0 -30
- package/ionic-auth-ui/components/register/register.component.d.ts +0 -26
- package/ionic-auth-ui/components/register-with-email/register-with-email.component.d.ts +0 -24
- package/ionic-auth-ui/components/register-with-email-popover/register-with-email-popover.component.d.ts +0 -7
- package/ionic-auth-ui/components/signin/signin.component.d.ts +0 -28
- package/ionic-auth-ui/components/terms-field/terms-field.component.d.ts +0 -27
- package/ionic-auth-ui/components/user/user.component.d.ts +0 -45
- package/ionic-auth-ui/ionic-auth-ui.module.d.ts +0 -32
- package/ionic-auth-ui/ngx-firebase-ionic-auth-ui.d.ts +0 -22
- package/ionic-auth-ui/ngx-firebase-ionic-auth-ui.metadata.json +0 -1
- package/ionic-auth-ui/package.json +0 -30
- package/ionic-auth-ui/pages/index.d.ts +0 -4
- package/ionic-auth-ui/pages/register/index.d.ts +0 -1
- package/ionic-auth-ui/pages/register/register.page.d.ts +0 -16
- package/ionic-auth-ui/pages/signin/index.d.ts +0 -1
- package/ionic-auth-ui/pages/signin/signin.page.d.ts +0 -22
- package/ionic-auth-ui/pages/user/index.d.ts +0 -1
- package/ionic-auth-ui/pages/user/user.page.d.ts +0 -3
- package/ionic-auth-ui/pages/verifyemail/index.d.ts +0 -1
- package/ionic-auth-ui/pages/verifyemail/verifyemail.page.d.ts +0 -19
- package/ionic-auth-ui/public-api.d.ts +0 -4
- package/ngx-firebase.d.ts +0 -5
- package/ngx-firebase.metadata.json +0 -1
- package/public-api.d.ts +0 -5
- package/shared/guards/index.d.ts +0 -2
- package/shared/guards/logged-in.guard.d.ts +0 -13
- package/shared/guards/verify-email.guard.d.ts +0 -11
- package/shared/interfaces/accounts.enum.d.ts +0 -7
- package/shared/interfaces/authprovider.enum.d.ts +0 -13
- package/shared/interfaces/config.interface.d.ts +0 -63
- package/shared/interfaces/index.d.ts +0 -7
- package/shared/interfaces/main.interface.d.ts +0 -13
- package/shared/interfaces/providers.interface.d.ts +0 -63
- package/shared/interfaces/tokens.d.ts +0 -16
- package/shared/interfaces/ui-providers.interface.d.ts +0 -65
- package/shared/services/analytics.service.d.ts +0 -10
- package/shared/services/auth-process.service.d.ts +0 -172
- package/shared/services/crashlytics.service.d.ts +0 -11
- package/shared/services/device-info.service.d.ts +0 -3
- package/shared/services/firebase.service.d.ts +0 -16
- package/shared/services/firestore-sync.service.d.ts +0 -16
- package/shared/services/index.d.ts +0 -9
- package/shared/services/performance.service.d.ts +0 -12
- package/shared/services/remoteconfig.service.d.ts +0 -18
- package/shared/services/ui.service.d.ts +0 -22
- package/shared/shared.module.d.ts +0 -14
- package/shared/types/DisplayWidth.d.ts +0 -7
- package/shared/types/Location.d.ts +0 -8
- package/shared/types/ValueAccessorControlComponent.d.ts +0 -27
- package/shared/types/ValueAccessorValueComponent.d.ts +0 -19
- package/shared/types/index.d.ts +0 -4
- package/testing/fakeavatar.module.d.ts +0 -2
- package/testing/fakes/FakeAuthProcessService.d.ts +0 -28
- package/testing/fakes/FakeAvatarComponent.d.ts +0 -3
- package/testing/fakes/FakeFireService.d.ts +0 -20
- package/testing/fakes/FakeFirestoreSyncService.d.ts +0 -9
- package/testing/fakes/FakeIAPurchaseService.d.ts +0 -9
- package/testing/fakes/FakePickerService.d.ts +0 -6
- package/testing/fakes/FakeRemoteConfigService.d.ts +0 -19
- package/testing/fakes/FakeTranslateService.d.ts +0 -15
- package/testing/fakes/FakeUiService.d.ts +0 -25
- package/testing/fakes/angular-fire/FakeAngularFireAuth.d.ts +0 -52
- package/testing/fakes/angular-fire/FakeAngularFireFunctions.d.ts +0 -11
- package/testing/fakes/angular-fire/FakeAngularFirePerformance.d.ts +0 -10
- package/testing/fakes/angular-fire/FakeAngularFireStorage.d.ts +0 -5
- package/testing/fakes/angular-fire/FakeAngularFirestore.d.ts +0 -5
- package/testing/fakes/angular-fire/FakeUserCredential.d.ts +0 -9
- package/testing/fakes/index.d.ts +0 -16
- package/testing/ngx-firebase-testing.d.ts +0 -5
- package/testing/ngx-firebase-testing.metadata.json +0 -1
- package/testing/package.json +0 -29
- package/testing/public-api.d.ts +0 -4
- package/testing/test.module.d.ts +0 -4
- package/testing/utils/index.d.ts +0 -5
- package/testing/utils/patchConsole.d.ts +0 -4
|
@@ -1,495 +0,0 @@
|
|
|
1
|
-
import { __awaiter } from 'tslib';
|
|
2
|
-
import { Component, Input, EventEmitter, Output, ɵɵdefineInjectable, ɵɵinject, Injectable, Inject, forwardRef, NgModule } from '@angular/core';
|
|
3
|
-
import { map, timeout, debounceTime } from 'rxjs/operators';
|
|
4
|
-
import { PopoverController, AlertController, LoadingController, PickerController, ToastController, IonicModule } from '@ionic/angular';
|
|
5
|
-
import { UiService, AuthProcessService, FirebaseService, RemoteConfigService, MalSharedConfigToken, MalSharedModule, MalAlertsUIProviderToken, MalLoadingUIProviderToken, MalPickerUIProviderToken, MalToastUIProviderToken, MalLegaliyDialogUIProiderToken } from 'ngx-firebase';
|
|
6
|
-
import { animation, style, animate, trigger, transition, useAnimation, state, query, stagger, animateChild } from '@angular/animations';
|
|
7
|
-
import { TranslateService } from '@ngx-translate/core';
|
|
8
|
-
import { BehaviorSubject, combineLatest } from 'rxjs';
|
|
9
|
-
import { HttpClientModule } from '@angular/common/http';
|
|
10
|
-
import { CommonModule } from '@angular/common';
|
|
11
|
-
|
|
12
|
-
class AuthPopoverMenuComponent {
|
|
13
|
-
constructor(popoverController, ui) {
|
|
14
|
-
this.popoverController = popoverController;
|
|
15
|
-
this.ui = ui;
|
|
16
|
-
this.links = [];
|
|
17
|
-
}
|
|
18
|
-
doLinkClick(link) {
|
|
19
|
-
try {
|
|
20
|
-
this.popoverController.dismiss();
|
|
21
|
-
if (link.callback) {
|
|
22
|
-
link.callback();
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
catch (error) {
|
|
26
|
-
this.ui.logError(error);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
AuthPopoverMenuComponent.decorators = [
|
|
31
|
-
{ type: Component, args: [{
|
|
32
|
-
template: "<ion-button *ngFor=\"let link of links\"\n expand=\"block\"\n [disabled]=\"link.disabled\"\n (click)=\"doLinkClick(link)\">\n {{ link.text | translate }}\n</ion-button>"
|
|
33
|
-
},] }
|
|
34
|
-
];
|
|
35
|
-
AuthPopoverMenuComponent.ctorParameters = () => [
|
|
36
|
-
{ type: PopoverController },
|
|
37
|
-
{ type: UiService }
|
|
38
|
-
];
|
|
39
|
-
AuthPopoverMenuComponent.propDecorators = {
|
|
40
|
-
links: [{ type: Input }]
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
class AuthAvatarComponent {
|
|
44
|
-
constructor(aps, popoverController, ui, fire) {
|
|
45
|
-
this.aps = aps;
|
|
46
|
-
this.popoverController = popoverController;
|
|
47
|
-
this.ui = ui;
|
|
48
|
-
this.fire = fire;
|
|
49
|
-
this.layout = 'default';
|
|
50
|
-
this.canLogout = true;
|
|
51
|
-
this.links = [];
|
|
52
|
-
this.canViewAccount = true;
|
|
53
|
-
this.canDeleteAccount = true;
|
|
54
|
-
this.canEditAccount = true;
|
|
55
|
-
this.showIfAnon = false;
|
|
56
|
-
this.showProfileDialog = new EventEmitter();
|
|
57
|
-
// tslint:disable-next-line no-output-on-prefix
|
|
58
|
-
this.onSignOut = new EventEmitter();
|
|
59
|
-
this.user$ = this.aps.user$
|
|
60
|
-
.pipe(map(user => ((null !== user && (this.showIfAnon || !user.isAnonymous)) ? user : null)));
|
|
61
|
-
this.displayNameInitials$ = this.user$
|
|
62
|
-
.pipe(map(user => {
|
|
63
|
-
if (!user || !user.displayName) {
|
|
64
|
-
return '';
|
|
65
|
-
}
|
|
66
|
-
const initialsRegExp = user.displayName.match(/\b\w/g) || [];
|
|
67
|
-
const initials = ((initialsRegExp.shift() || '') + (initialsRegExp.pop() || '')).toUpperCase();
|
|
68
|
-
return initials || '';
|
|
69
|
-
}));
|
|
70
|
-
}
|
|
71
|
-
openAvatarMenu(ev) {
|
|
72
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
const popover = yield this.popoverController.create({
|
|
74
|
-
component: AuthPopoverMenuComponent,
|
|
75
|
-
componentProps: {
|
|
76
|
-
links: [
|
|
77
|
-
...(this.canViewAccount) ? [{ text: 'auth.menu.profile', callback: this.doShowProfile.bind(this) }] : [],
|
|
78
|
-
...(this.canLogout) ? [{ text: 'auth.menu.signOut', callback: this.signOut.bind(this) }] : []
|
|
79
|
-
]
|
|
80
|
-
},
|
|
81
|
-
event: ev,
|
|
82
|
-
translucent: true
|
|
83
|
-
});
|
|
84
|
-
popover.onDidDismiss().then(data => {
|
|
85
|
-
resolve();
|
|
86
|
-
});
|
|
87
|
-
popover.present();
|
|
88
|
-
}));
|
|
89
|
-
}
|
|
90
|
-
doShowProfile(ev) {
|
|
91
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
92
|
-
this.showProfileDialog.emit(ev);
|
|
93
|
-
this.aps.showProfileDialog.emit(ev);
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
signOut() {
|
|
97
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
try {
|
|
99
|
-
this.fire.addLogMessage('Starting signOut');
|
|
100
|
-
yield this.aps.signOut();
|
|
101
|
-
// Sign-out successful.
|
|
102
|
-
this.onSignOut.emit();
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
this.ui.logError(error);
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
AuthAvatarComponent.decorators = [
|
|
111
|
-
{ type: Component, args: [{
|
|
112
|
-
selector: 'mal-auth-avatar',
|
|
113
|
-
template: "<ng-container *ngIf=\"(user$ | async) as user\">\n <ion-avatar name='auth-avatar' class=\"avatar\" *ngIf=\"user?.photoURL || !(displayNameInitials$ | async)\" (click)=\"openAvatarMenu($event)\">\n <img [alt]=\"user.name\" [src]=\"user.photoURL\" onerror=\"this.onerror=null;this.src='/assets/images/person.png';\">\n </ion-avatar>\n <ion-button class=\"avatar\" *ngIf=\"!user?.photoURL && (displayNameInitials$ | async)\" (click)=\"openAvatarMenu($event)\">\n {{ displayNameInitials$ | async }}\n </ion-button>\n</ng-container>",
|
|
114
|
-
styles: ["ion-button.avatar{background-color:var(--ion-color-primary-tint);border-radius:50%;font-weight:700}.avatar{border:.75px solid var(--ion-color-primary);box-shadow:2px 2px var(--ion-color-primary-tint);max-width:var(--mal-avatar-size,35px)!important;max-height:var(--mal-avatar-size,35px)!important}"]
|
|
115
|
-
},] }
|
|
116
|
-
];
|
|
117
|
-
AuthAvatarComponent.ctorParameters = () => [
|
|
118
|
-
{ type: AuthProcessService },
|
|
119
|
-
{ type: PopoverController },
|
|
120
|
-
{ type: UiService },
|
|
121
|
-
{ type: FirebaseService }
|
|
122
|
-
];
|
|
123
|
-
AuthAvatarComponent.propDecorators = {
|
|
124
|
-
layout: [{ type: Input }],
|
|
125
|
-
canLogout: [{ type: Input }],
|
|
126
|
-
links: [{ type: Input }],
|
|
127
|
-
canViewAccount: [{ type: Input }],
|
|
128
|
-
canDeleteAccount: [{ type: Input }],
|
|
129
|
-
canEditAccount: [{ type: Input }],
|
|
130
|
-
showIfAnon: [{ type: Input }],
|
|
131
|
-
showProfileDialog: [{ type: Output }],
|
|
132
|
-
onSignOut: [{ type: Output }]
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const customAnimation = animation([
|
|
136
|
-
style({
|
|
137
|
-
opacity: '{{opacity}}',
|
|
138
|
-
transform: 'scale({{scale}}) translate3d({{x}}, {{y}}, {{z}})'
|
|
139
|
-
}),
|
|
140
|
-
animate('{{duration}} {{delay}} cubic-bezier(0.0, 0.0, 0.2, 1)', style('*'))
|
|
141
|
-
], {
|
|
142
|
-
params: {
|
|
143
|
-
duration: '200ms',
|
|
144
|
-
delay: '0ms',
|
|
145
|
-
opacity: '0',
|
|
146
|
-
scale: '1',
|
|
147
|
-
x: '0',
|
|
148
|
-
y: '0',
|
|
149
|
-
z: '0'
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
const NgxAuthFirebaseuiAnimations = [
|
|
153
|
-
trigger('animate', [transition('void => *', [useAnimation(customAnimation)])]),
|
|
154
|
-
trigger('animateStagger', [
|
|
155
|
-
state('50', style('*')),
|
|
156
|
-
state('100', style('*')),
|
|
157
|
-
state('200', style('*')),
|
|
158
|
-
transition('void => 50', query('@*', [stagger('50ms', [animateChild()])], { optional: true })),
|
|
159
|
-
transition('void => 100', query('@*', [stagger('100ms', [animateChild()])], { optional: true })),
|
|
160
|
-
transition('void => 200', query('@*', [stagger('200ms', [animateChild()])], { optional: true }))
|
|
161
|
-
]),
|
|
162
|
-
];
|
|
163
|
-
|
|
164
|
-
class MalIonicAlertsService {
|
|
165
|
-
constructor(alertController, translateService) {
|
|
166
|
-
this.alertController = alertController;
|
|
167
|
-
this.translateService = translateService;
|
|
168
|
-
}
|
|
169
|
-
yesNoAlert(message, options = {}) {
|
|
170
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
171
|
-
const [headerKey, subheaderKey] = [options.header || 'brand.name', options.subHeader || 'subHeader'];
|
|
172
|
-
const txd = yield this.translateService.get([headerKey, subheaderKey, message, 'shared.button.no', 'shared.button.yes'], options.interpolateParams).toPromise();
|
|
173
|
-
const noButton = {
|
|
174
|
-
text: txd['shared.button.no'],
|
|
175
|
-
role: 'cancel',
|
|
176
|
-
handler: () => resolve(false)
|
|
177
|
-
};
|
|
178
|
-
const yesButton = {
|
|
179
|
-
text: txd['shared.button.yes'],
|
|
180
|
-
handler: () => resolve(true)
|
|
181
|
-
};
|
|
182
|
-
const alert = yield this.alertController.create({
|
|
183
|
-
header: txd[headerKey],
|
|
184
|
-
subHeader: (options === null || options === void 0 ? void 0 : options.subHeader) ? txd[subheaderKey] : undefined,
|
|
185
|
-
message: txd[message],
|
|
186
|
-
buttons: [
|
|
187
|
-
(options === null || options === void 0 ? void 0 : options.defaultToNo) ? yesButton : noButton,
|
|
188
|
-
(options === null || options === void 0 ? void 0 : options.defaultToNo) ? noButton : yesButton
|
|
189
|
-
]
|
|
190
|
-
});
|
|
191
|
-
yield alert.present();
|
|
192
|
-
}));
|
|
193
|
-
}
|
|
194
|
-
okAlert(message, options = {}) {
|
|
195
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
196
|
-
const [headerKey, subheaderKey] = [options.header || 'brand.name', options.subHeader || 'subHeader'];
|
|
197
|
-
const txd = yield this.translateService.get([headerKey, subheaderKey, message, 'shared.button.ok'], options.interpolateParams).toPromise();
|
|
198
|
-
const alert = yield this.alertController.create({
|
|
199
|
-
header: txd[headerKey],
|
|
200
|
-
subHeader: (options.subHeader) ? txd[subheaderKey] : undefined,
|
|
201
|
-
message: txd[message],
|
|
202
|
-
buttons: [txd['shared.button.ok']]
|
|
203
|
-
});
|
|
204
|
-
alert.onDidDismiss().then(() => resolve());
|
|
205
|
-
yield alert.present();
|
|
206
|
-
}));
|
|
207
|
-
}
|
|
208
|
-
errorAlert(message, options = {}) {
|
|
209
|
-
return this.okAlert(message, options);
|
|
210
|
-
}
|
|
211
|
-
infoAlert(message, options = {}) {
|
|
212
|
-
return this.okAlert(message, options);
|
|
213
|
-
}
|
|
214
|
-
textboxInputAlert(options) {
|
|
215
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
216
|
-
const [headerKey, subheaderKey, okKey, placeholderKey] = [
|
|
217
|
-
options.header || 'brand.name',
|
|
218
|
-
options.subHeader || 'subHeader',
|
|
219
|
-
options.okText || 'shared.button.ok',
|
|
220
|
-
options.placeholder || 'placeHolder'
|
|
221
|
-
];
|
|
222
|
-
const txd = yield this.translateService.get([headerKey, subheaderKey, 'shared.button.cancel', okKey, placeholderKey], options.interpolateParams).toPromise();
|
|
223
|
-
const alert = yield this.alertController.create({
|
|
224
|
-
cssClass: 'my-custom-class',
|
|
225
|
-
header: txd[headerKey],
|
|
226
|
-
subHeader: (options.subHeader) ? txd[subheaderKey] : undefined,
|
|
227
|
-
inputs: [
|
|
228
|
-
{
|
|
229
|
-
name: 'textField',
|
|
230
|
-
type: 'text',
|
|
231
|
-
value: options.value,
|
|
232
|
-
placeholder: txd[placeholderKey],
|
|
233
|
-
}
|
|
234
|
-
],
|
|
235
|
-
buttons: [
|
|
236
|
-
{
|
|
237
|
-
text: txd['shared.button.cancel'],
|
|
238
|
-
role: 'cancel',
|
|
239
|
-
cssClass: 'secondary',
|
|
240
|
-
handler: () => {
|
|
241
|
-
resolve(null);
|
|
242
|
-
}
|
|
243
|
-
}, {
|
|
244
|
-
text: txd[okKey],
|
|
245
|
-
handler: (data) => {
|
|
246
|
-
resolve(data.textField);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
]
|
|
250
|
-
});
|
|
251
|
-
yield alert.present();
|
|
252
|
-
}));
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
MalIonicAlertsService.ɵprov = ɵɵdefineInjectable({ factory: function MalIonicAlertsService_Factory() { return new MalIonicAlertsService(ɵɵinject(AlertController), ɵɵinject(TranslateService)); }, token: MalIonicAlertsService, providedIn: "root" });
|
|
256
|
-
MalIonicAlertsService.decorators = [
|
|
257
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
258
|
-
];
|
|
259
|
-
MalIonicAlertsService.ctorParameters = () => [
|
|
260
|
-
{ type: AlertController },
|
|
261
|
-
{ type: TranslateService }
|
|
262
|
-
];
|
|
263
|
-
|
|
264
|
-
class MalIonicLoadingService {
|
|
265
|
-
constructor(loadingController, translateService, remoteConfig) {
|
|
266
|
-
this.loadingController = loadingController;
|
|
267
|
-
this.translateService = translateService;
|
|
268
|
-
this.remoteConfig = remoteConfig;
|
|
269
|
-
this.watchLoading = this.watchLoading.bind(this);
|
|
270
|
-
}
|
|
271
|
-
createLoading(message) {
|
|
272
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
273
|
-
if (message) {
|
|
274
|
-
message = yield this.translateService.get(message).toPromise();
|
|
275
|
-
return yield this.loadingController.create({ message });
|
|
276
|
-
}
|
|
277
|
-
else {
|
|
278
|
-
return yield this.loadingController.create();
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
watchLoading(source, options) {
|
|
283
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
284
|
-
const timeoutInterval = (undefined !== (options === null || options === void 0 ? void 0 : options.timeoutMs))
|
|
285
|
-
? options.timeoutMs
|
|
286
|
-
: yield this.remoteConfig.getNumber('timeoutLoading');
|
|
287
|
-
const loading = yield this.createLoading(options === null || options === void 0 ? void 0 : options.message);
|
|
288
|
-
source = !timeoutInterval ? source : source.pipe(timeout(timeoutInterval));
|
|
289
|
-
return source.pipe(debounceTime((options === null || options === void 0 ? void 0 : options.debounce) || 100)).subscribe(isLoading => isLoading ? loading.present() : loading.dismiss(), () => { loading.dismiss(); }, // Dismiss on error including timeout,
|
|
290
|
-
() => { loading.dismiss(); } // Dismiss on completion
|
|
291
|
-
);
|
|
292
|
-
});
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
MalIonicLoadingService.decorators = [
|
|
296
|
-
{ type: Injectable }
|
|
297
|
-
];
|
|
298
|
-
MalIonicLoadingService.ctorParameters = () => [
|
|
299
|
-
{ type: LoadingController },
|
|
300
|
-
{ type: TranslateService },
|
|
301
|
-
{ type: RemoteConfigService }
|
|
302
|
-
];
|
|
303
|
-
|
|
304
|
-
class MalIonicPickerService {
|
|
305
|
-
constructor(pickerController, translateService) {
|
|
306
|
-
this.pickerController = pickerController;
|
|
307
|
-
this.translateService = translateService;
|
|
308
|
-
}
|
|
309
|
-
picker(options) {
|
|
310
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
311
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
312
|
-
const [cancelKey, confirmKey] = [options.cancelText || 'shared.button.cancel', options.confirmText || 'shared.button.confirm'];
|
|
313
|
-
const txd = yield this.translateService.get([options.title, cancelKey, confirmKey], options.interpolateParams).toPromise();
|
|
314
|
-
const picker = yield this.pickerController.create({
|
|
315
|
-
columns: [
|
|
316
|
-
{
|
|
317
|
-
name: txd[options.title],
|
|
318
|
-
options: options.options
|
|
319
|
-
}
|
|
320
|
-
],
|
|
321
|
-
cssClass: 'pickerfix',
|
|
322
|
-
buttons: [
|
|
323
|
-
{ text: txd[cancelKey], role: 'cancel', handler: () => { resolve(null); } },
|
|
324
|
-
{ text: txd[confirmKey], handler: (value) => { resolve(value[txd[options.title]].value); } }
|
|
325
|
-
]
|
|
326
|
-
});
|
|
327
|
-
yield picker.present();
|
|
328
|
-
}));
|
|
329
|
-
});
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
MalIonicPickerService.ɵprov = ɵɵdefineInjectable({ factory: function MalIonicPickerService_Factory() { return new MalIonicPickerService(ɵɵinject(PickerController), ɵɵinject(TranslateService)); }, token: MalIonicPickerService, providedIn: "root" });
|
|
333
|
-
MalIonicPickerService.decorators = [
|
|
334
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
335
|
-
];
|
|
336
|
-
MalIonicPickerService.ctorParameters = () => [
|
|
337
|
-
{ type: PickerController },
|
|
338
|
-
{ type: TranslateService }
|
|
339
|
-
];
|
|
340
|
-
|
|
341
|
-
class MalIonicToastService {
|
|
342
|
-
constructor(toastControl, translateService) {
|
|
343
|
-
this.toastControl = toastControl;
|
|
344
|
-
this.translateService = translateService;
|
|
345
|
-
}
|
|
346
|
-
createToast(message, options = {}) {
|
|
347
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
348
|
-
return yield this.toastControl.create({
|
|
349
|
-
message: yield this.translateService.get(message, options.interpolateParams).toPromise(),
|
|
350
|
-
duration: options.duration || 3000,
|
|
351
|
-
position: options.position || 'middle'
|
|
352
|
-
});
|
|
353
|
-
});
|
|
354
|
-
}
|
|
355
|
-
toast(message, options = {}) {
|
|
356
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
357
|
-
// TODO Add OK button if duration is not set....
|
|
358
|
-
const toast = yield this.createToast(message, options);
|
|
359
|
-
yield toast.present();
|
|
360
|
-
yield toast.onDidDismiss();
|
|
361
|
-
});
|
|
362
|
-
}
|
|
363
|
-
errorToast(error, messagePrefix, options = {}) {
|
|
364
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
365
|
-
if (messagePrefix) {
|
|
366
|
-
yield this.toast(`${messagePrefix}: ${error.message}`, options);
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
yield this.toast(error.message, options);
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
}
|
|
374
|
-
MalIonicToastService.ɵprov = ɵɵdefineInjectable({ factory: function MalIonicToastService_Factory() { return new MalIonicToastService(ɵɵinject(ToastController), ɵɵinject(TranslateService)); }, token: MalIonicToastService, providedIn: "root" });
|
|
375
|
-
MalIonicToastService.decorators = [
|
|
376
|
-
{ type: Injectable, args: [{ providedIn: 'root' },] }
|
|
377
|
-
];
|
|
378
|
-
MalIonicToastService.ctorParameters = () => [
|
|
379
|
-
{ type: ToastController },
|
|
380
|
-
{ type: TranslateService }
|
|
381
|
-
];
|
|
382
|
-
|
|
383
|
-
class MalIonicLegalityDialogService {
|
|
384
|
-
constructor(config, alertController, translate) {
|
|
385
|
-
this.config = config;
|
|
386
|
-
this.alertController = alertController;
|
|
387
|
-
this.translate = translate;
|
|
388
|
-
}
|
|
389
|
-
confirmTos() {
|
|
390
|
-
if (this.config.authUi.tosUrl || this.config.authUi.privacyPolicyUrl) {
|
|
391
|
-
return new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
|
|
392
|
-
const inputs = [];
|
|
393
|
-
const tosChecked$ = new BehaviorSubject(true);
|
|
394
|
-
const privacyChecked$ = new BehaviorSubject(true);
|
|
395
|
-
const readMessage = yield this.translate.get('auth.legal.readAndAccept').toPromise();
|
|
396
|
-
let tosLink = '';
|
|
397
|
-
let privacyLink = '';
|
|
398
|
-
if (this.config.authUi.tosUrl) {
|
|
399
|
-
const tosLabel = yield this.translate.get('auth.legal.termsAndConditions').toPromise();
|
|
400
|
-
inputs.push({
|
|
401
|
-
id: 'tos_check',
|
|
402
|
-
type: 'checkbox',
|
|
403
|
-
label: tosLabel,
|
|
404
|
-
checked: tosChecked$.value,
|
|
405
|
-
cssClass: 'authui-checkbox-wrap',
|
|
406
|
-
handler: (elem) => tosChecked$.next(elem.checked)
|
|
407
|
-
});
|
|
408
|
-
tosLink = ` <a target="_blank" href="${this.config.authUi.tosUrl}" >${tosLabel}</a> `;
|
|
409
|
-
}
|
|
410
|
-
if (this.config.authUi.privacyPolicyUrl) {
|
|
411
|
-
const privacyLabel = yield this.translate.get('auth.legal.privacyPolicy').toPromise();
|
|
412
|
-
inputs.push({
|
|
413
|
-
id: 'privacy_check',
|
|
414
|
-
type: 'checkbox',
|
|
415
|
-
label: privacyLabel,
|
|
416
|
-
checked: privacyChecked$.value,
|
|
417
|
-
cssClass: 'authui-checkbox-wrap',
|
|
418
|
-
handler: (elem) => privacyChecked$.next(elem.checked)
|
|
419
|
-
});
|
|
420
|
-
privacyLink = ` <a target="_blank" href="${this.config.authUi.privacyPolicyUrl}" >${privacyLabel}</a> `;
|
|
421
|
-
}
|
|
422
|
-
const txd = yield this.translate.get([
|
|
423
|
-
'brand.name',
|
|
424
|
-
'auth.legal.subHeader',
|
|
425
|
-
'auth.legal.declineButton',
|
|
426
|
-
'auth.legal.acceptButton'
|
|
427
|
-
]).toPromise();
|
|
428
|
-
const alert = yield this.alertController.create({
|
|
429
|
-
header: txd['brand.name'],
|
|
430
|
-
subHeader: txd['auth.legal.subHeader'],
|
|
431
|
-
message: `${readMessage}${tosLink}${privacyLink}`,
|
|
432
|
-
inputs,
|
|
433
|
-
buttons: [
|
|
434
|
-
{ text: txd['auth.legal.declineButton'], handler: _ => resolve(false), role: 'cancel' },
|
|
435
|
-
{ text: txd['auth.legal.acceptButton'], handler: _ => resolve(true), cssClass: 'confirm' }
|
|
436
|
-
],
|
|
437
|
-
});
|
|
438
|
-
yield alert.present();
|
|
439
|
-
const confirmBtn = document.querySelector('.confirm');
|
|
440
|
-
if (confirmBtn === null) {
|
|
441
|
-
throw new Error('QuerySelector for confirmBtn returned null');
|
|
442
|
-
}
|
|
443
|
-
confirmBtn.disabled = true;
|
|
444
|
-
combineLatest([tosChecked$, privacyChecked$])
|
|
445
|
-
.subscribe(([tosChecked, privacyChecked]) => confirmBtn.disabled = !tosChecked || !privacyChecked);
|
|
446
|
-
}));
|
|
447
|
-
}
|
|
448
|
-
else {
|
|
449
|
-
return Promise.resolve(null);
|
|
450
|
-
}
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
MalIonicLegalityDialogService.decorators = [
|
|
454
|
-
{ type: Injectable }
|
|
455
|
-
];
|
|
456
|
-
MalIonicLegalityDialogService.ctorParameters = () => [
|
|
457
|
-
{ type: undefined, decorators: [{ type: Inject, args: [forwardRef(() => MalSharedConfigToken),] }] },
|
|
458
|
-
{ type: AlertController },
|
|
459
|
-
{ type: TranslateService }
|
|
460
|
-
];
|
|
461
|
-
|
|
462
|
-
// @angular/*
|
|
463
|
-
// pages
|
|
464
|
-
const COMPONENTS = [
|
|
465
|
-
AuthAvatarComponent,
|
|
466
|
-
AuthPopoverMenuComponent
|
|
467
|
-
];
|
|
468
|
-
class MalIonicModule {
|
|
469
|
-
}
|
|
470
|
-
MalIonicModule.decorators = [
|
|
471
|
-
{ type: NgModule, args: [{
|
|
472
|
-
imports: [
|
|
473
|
-
MalSharedModule,
|
|
474
|
-
CommonModule,
|
|
475
|
-
HttpClientModule,
|
|
476
|
-
IonicModule
|
|
477
|
-
],
|
|
478
|
-
exports: COMPONENTS,
|
|
479
|
-
declarations: COMPONENTS,
|
|
480
|
-
providers: [
|
|
481
|
-
{ provide: MalAlertsUIProviderToken, useClass: MalIonicAlertsService },
|
|
482
|
-
{ provide: MalLoadingUIProviderToken, useClass: MalIonicLoadingService },
|
|
483
|
-
{ provide: MalPickerUIProviderToken, useClass: MalIonicPickerService },
|
|
484
|
-
{ provide: MalToastUIProviderToken, useClass: MalIonicToastService },
|
|
485
|
-
{ provide: MalLegaliyDialogUIProiderToken, useClass: MalIonicLegalityDialogService }
|
|
486
|
-
]
|
|
487
|
-
},] }
|
|
488
|
-
];
|
|
489
|
-
|
|
490
|
-
/**
|
|
491
|
-
* Generated bundle index. Do not edit.
|
|
492
|
-
*/
|
|
493
|
-
|
|
494
|
-
export { AuthAvatarComponent, AuthPopoverMenuComponent, MalIonicAlertsService, MalIonicLegalityDialogService, MalIonicLoadingService, MalIonicModule, MalIonicPickerService, MalIonicToastService, NgxAuthFirebaseuiAnimations };
|
|
495
|
-
//# sourceMappingURL=ngx-firebase-ionic.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ngx-firebase-ionic.js","sources":["../../../projects/ngx-firebase/ionic/src/components/popover-menu/popover-menu.component.ts","../../../projects/ngx-firebase/ionic/src/components/avatar/avatar.component.ts","../../../projects/ngx-firebase/ionic/src/animations/index.ts","../../../projects/ngx-firebase/ionic/src/services/alerts-ionic.service.ts","../../../projects/ngx-firebase/ionic/src/services/loading-ionic.service.ts","../../../projects/ngx-firebase/ionic/src/services/picker-ionic.service.ts","../../../projects/ngx-firebase/ionic/src/services/toast-ionic.service.ts","../../../projects/ngx-firebase/ionic/src/services/legality-dialog-ionic.service.ts","../../../projects/ngx-firebase/ionic/src/ionic.module.ts","../../../projects/ngx-firebase/ionic/src/ngx-firebase-ionic.ts"],"sourcesContent":["import { Component, Input } from '@angular/core';\nimport { PopoverController } from '@ionic/angular';\nimport { UiService } from 'ngx-firebase';\nimport { LinkMenuItem } from './interface';\n\n@Component({\n templateUrl: './popover-menu.component.html'\n})\nexport class AuthPopoverMenuComponent {\n\n @Input()\n links: LinkMenuItem[] = [];\n\n constructor(\n private popoverController: PopoverController,\n private ui: UiService\n ) { }\n\n doLinkClick(link: LinkMenuItem) {\n try {\n this.popoverController.dismiss();\n if (link.callback) {\n link.callback();\n }\n } catch (error) {\n this.ui.logError(error);\n }\n }\n\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { User } from '@firebase/auth-types';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { PopoverController } from '@ionic/angular';\nimport { LinkMenuItem, AuthPopoverMenuComponent } from '../popover-menu';\nimport { AuthProcessService, UiService, FirebaseService } from 'ngx-firebase';\n\n@Component({\n selector: 'mal-auth-avatar',\n templateUrl: './avatar.component.html',\n styleUrls: ['./avatar.component.scss']\n})\nexport class AuthAvatarComponent {\n\n @Input()\n layout: 'default' | 'simple' = 'default';\n\n @Input()\n canLogout = true;\n\n @Input()\n links: LinkMenuItem[] = [];\n\n @Input()\n canViewAccount = true;\n\n @Input()\n canDeleteAccount = true;\n\n @Input()\n canEditAccount = true;\n\n @Input()\n showIfAnon = false;\n\n @Output()\n showProfileDialog: EventEmitter<any> = new EventEmitter<any>();\n\n // tslint:disable-next-line no-output-on-prefix\n @Output()\n onSignOut: EventEmitter<void> = new EventEmitter();\n\n user$: Observable<User | null> = this.aps.user$\n .pipe(\n map(user => ((null !== user && (this.showIfAnon || !user.isAnonymous)) ? user : null)),\n );\n\n displayNameInitials$: Observable<string> = this.user$\n .pipe(\n map(user => {\n if (!user || !user.displayName) {\n return '';\n }\n const initialsRegExp: RegExpMatchArray = user.displayName.match(/\\b\\w/g) || [];\n const initials = ((initialsRegExp.shift() || '') + (initialsRegExp.pop() || '')).toUpperCase();\n return initials || '';\n })\n );\n\n constructor(\n public aps: AuthProcessService,\n private popoverController: PopoverController,\n private ui: UiService,\n private fire: FirebaseService\n ) {\n }\n\n openAvatarMenu(ev: any): Promise<void> {\n return new Promise<void>(async resolve => {\n const popover = await this.popoverController.create({\n component: AuthPopoverMenuComponent,\n componentProps: {\n links: [\n ...(this.canViewAccount) ? [{ text: 'auth.menu.profile', callback: this.doShowProfile.bind(this) }] : [],\n ...(this.canLogout) ? [{ text: 'auth.menu.signOut', callback: this.signOut.bind(this) }] : []\n ]\n },\n event: ev,\n translucent: true\n });\n popover.onDidDismiss().then(\n data => {\n resolve();\n }\n );\n popover.present();\n });\n }\n\n async doShowProfile(ev: any): Promise<void> {\n this.showProfileDialog.emit(ev);\n this.aps.showProfileDialog.emit(ev);\n }\n\n async signOut() {\n try {\n this.fire.addLogMessage('Starting signOut');\n await this.aps.signOut();\n // Sign-out successful.\n this.onSignOut.emit();\n } catch (error) {\n this.ui.logError(error);\n }\n }\n\n}\n","import {animate, animateChild, animation, query, stagger, state, style, transition, trigger, useAnimation} from '@angular/animations';\n\nconst customAnimation = animation(\n [\n style({\n opacity: '{{opacity}}',\n transform: 'scale({{scale}}) translate3d({{x}}, {{y}}, {{z}})'\n }),\n animate('{{duration}} {{delay}} cubic-bezier(0.0, 0.0, 0.2, 1)', style('*'))\n ],\n {\n params: {\n duration: '200ms',\n delay: '0ms',\n opacity: '0',\n scale: '1',\n x: '0',\n y: '0',\n z: '0'\n }\n }\n);\n\nexport const NgxAuthFirebaseuiAnimations = [\n trigger('animate', [transition('void => *', [useAnimation(customAnimation)])]),\n\n trigger('animateStagger', [\n state('50', style('*')),\n state('100', style('*')),\n state('200', style('*')),\n\n transition('void => 50', query('@*', [stagger('50ms', [animateChild()])], {optional: true})),\n transition('void => 100', query('@*', [stagger('100ms', [animateChild()])], {optional: true})),\n transition('void => 200', query('@*', [stagger('200ms', [animateChild()])], {optional: true}))\n ]),\n];\n","import { Injectable } from '@angular/core';\nimport { AlertController } from '@ionic/angular';\nimport { TranslateService } from '@ngx-translate/core';\nimport { IYesNoAlertOptions, IOkAlertOptions, ITextAlertOptions, IAlertsUIProvider } from 'ngx-firebase';\n\n@Injectable({ providedIn: 'root' })\nexport class MalIonicAlertsService implements IAlertsUIProvider {\n\n constructor(\n private alertController: AlertController,\n private translateService: TranslateService\n ) { }\n\n yesNoAlert(message: string, options: IYesNoAlertOptions = {}): Promise<boolean> {\n return new Promise<boolean>(async resolve => {\n const [headerKey, subheaderKey] = [options.header || 'brand.name', options.subHeader || 'subHeader'];\n const txd = await this.translateService.get(\n [headerKey, subheaderKey, message, 'shared.button.no', 'shared.button.yes'],\n options.interpolateParams\n ).toPromise();\n\n const noButton = {\n text: txd['shared.button.no'],\n role: 'cancel',\n handler: () => resolve(false)\n };\n\n const yesButton = {\n text: txd['shared.button.yes'],\n handler: () => resolve(true)\n }\n\n const alert = await this.alertController.create({\n header: txd[headerKey],\n subHeader: (options?.subHeader) ? txd[subheaderKey] : undefined,\n message: txd[message],\n buttons: [\n (options?.defaultToNo) ? yesButton : noButton,\n (options?.defaultToNo) ? noButton : yesButton\n ]\n });\n await alert.present();\n });\n }\n\n okAlert(message: string, options: IOkAlertOptions = {}): Promise<void> {\n return new Promise<void>(async resolve => {\n const [headerKey, subheaderKey] = [options.header || 'brand.name', options.subHeader || 'subHeader'];\n const txd = await this.translateService.get(\n [headerKey, subheaderKey, message, 'shared.button.ok'],\n options.interpolateParams\n ).toPromise();\n\n const alert = await this.alertController.create({\n header: txd[headerKey],\n subHeader: (options.subHeader) ? txd[subheaderKey] : undefined,\n message: txd[message],\n buttons: [txd['shared.button.ok']]\n });\n alert.onDidDismiss().then(() => resolve());\n await alert.present();\n });\n }\n\n errorAlert(message: string, options: IOkAlertOptions = {}): Promise<void> {\n return this.okAlert(message, options);\n }\n\n infoAlert(message: string, options: IOkAlertOptions = {}): Promise<void> {\n return this.okAlert(message, options);\n }\n\n textboxInputAlert(options: ITextAlertOptions): Promise<string | null> {\n return new Promise(async (resolve) => {\n\n const [headerKey, subheaderKey, okKey, placeholderKey] = [\n options.header || 'brand.name',\n options.subHeader || 'subHeader',\n options.okText || 'shared.button.ok',\n options.placeholder || 'placeHolder'\n ];\n const txd = await this.translateService.get(\n [headerKey, subheaderKey, 'shared.button.cancel', okKey, placeholderKey],\n options.interpolateParams\n ).toPromise();\n\n const alert = await this.alertController.create({\n cssClass: 'my-custom-class',\n header: txd[headerKey],\n subHeader: (options.subHeader) ? txd[subheaderKey] : undefined,\n inputs: [\n {\n name: 'textField',\n type: 'text',\n value: options.value,\n placeholder: txd[placeholderKey],\n }\n ],\n buttons: [\n {\n text: txd['shared.button.cancel'],\n role: 'cancel',\n cssClass: 'secondary',\n handler: () => {\n resolve(null);\n }\n }, {\n text: txd[okKey],\n handler: (data) => {\n resolve(data.textField);\n }\n }\n ]\n });\n await alert.present();\n });\n }\n\n\n}\n","import { Injectable } from '@angular/core';\nimport { LoadingController } from '@ionic/angular';\nimport { Observable, Subscription } from 'rxjs';\nimport { debounceTime, timeout } from 'rxjs/operators';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ILoadingUIProvider, RemoteConfigService } from 'ngx-firebase';\n\n@Injectable()\nexport class MalIonicLoadingService implements ILoadingUIProvider {\n\n constructor(\n private loadingController: LoadingController,\n private translateService: TranslateService,\n private remoteConfig: RemoteConfigService\n ) {\n this.watchLoading = this.watchLoading.bind(this);\n }\n\n async createLoading(message?: string) {\n if (message) {\n message = await this.translateService.get(message).toPromise();\n return await this.loadingController.create({ message });\n } else {\n return await this.loadingController.create();\n }\n }\n\n async watchLoading(\n source: Observable<boolean>,\n options?: { debounce?: number, message?: string, timeoutMs?: number | null, debug?: string }\n ): Promise<Subscription> {\n\n const timeoutInterval = (undefined !== options?.timeoutMs)\n ? options.timeoutMs\n : await this.remoteConfig.getNumber('timeoutLoading');\n\n const loading = await this.createLoading(options?.message);\n\n source = !timeoutInterval ? source : source.pipe(timeout(timeoutInterval));\n\n return source.pipe(\n debounceTime(options?.debounce || 100)\n ).subscribe(\n isLoading => isLoading ? loading.present() : loading.dismiss(),\n () => { loading.dismiss(); }, // Dismiss on error including timeout,\n () => { loading.dismiss(); } // Dismiss on completion\n );\n\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { PickerController } from '@ionic/angular';\nimport { TranslateService } from '@ngx-translate/core';\nimport { IPickerServiceOptions, IPickerUIProvider } from 'ngx-firebase';\n\n@Injectable({ providedIn: 'root' })\nexport class MalIonicPickerService implements IPickerUIProvider {\n\n constructor(\n private pickerController: PickerController,\n private translateService: TranslateService\n ) {\n }\n\n async picker<T>(options: IPickerServiceOptions): Promise<T | null> {\n return new Promise<T | null>(async resolve => {\n const [cancelKey, confirmKey] = [options.cancelText || 'shared.button.cancel', options.confirmText || 'shared.button.confirm'];\n const txd =\n await this.translateService.get([options.title, cancelKey, confirmKey], options.interpolateParams).toPromise();\n const picker = await this.pickerController.create({\n columns: [\n {\n name: txd[options.title],\n options: options.options\n }\n ],\n cssClass: 'pickerfix',\n buttons: [\n { text: txd[cancelKey], role: 'cancel', handler: () => { resolve(null); } },\n { text: txd[confirmKey], handler: (value) => { resolve(value[txd[options.title]].value); } }\n ]\n });\n await picker.present();\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ToastController } from '@ionic/angular';\nimport { TranslateService } from '@ngx-translate/core';\nimport { IToastOptions, IToastUIProvider } from 'ngx-firebase';\n\n@Injectable({ providedIn: 'root' })\nexport class MalIonicToastService implements IToastUIProvider {\n\n constructor(\n private toastControl: ToastController,\n private translateService: TranslateService\n ) {\n }\n\n async createToast(message: string, options: IToastOptions = {}) {\n return await this.toastControl.create({\n message: await this.translateService.get(message, options.interpolateParams).toPromise(),\n duration: options.duration || 3000,\n position: options.position || 'middle'\n });\n }\n\n async toast(message: string, options: IToastOptions = {}) {\n // TODO Add OK button if duration is not set....\n const toast = await this.createToast(message, options);\n await toast.present();\n await toast.onDidDismiss();\n }\n\n async errorToast(error: Error, messagePrefix?: string, options: IToastOptions = {}) {\n if (messagePrefix) {\n await this.toast(`${messagePrefix}: ${error.message}`, options);\n } else {\n await this.toast(error.message, options);\n }\n }\n\n}\n","import { forwardRef, Inject, Injectable } from '@angular/core';\nimport { AlertController } from '@ionic/angular';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BehaviorSubject, combineLatest } from 'rxjs';\nimport { ILegalityDialogUIProvider, MalSharedConfig, MalSharedConfigToken } from 'ngx-firebase';\n\n@Injectable()\nexport class MalIonicLegalityDialogService implements ILegalityDialogUIProvider {\n\n constructor(\n @Inject(forwardRef(() => MalSharedConfigToken)) public config: MalSharedConfig,\n private alertController: AlertController,\n private translate: TranslateService\n ) {\n }\n\n confirmTos(): Promise<boolean | null> {\n if (this.config.authUi.tosUrl || this.config.authUi.privacyPolicyUrl) {\n return new Promise<boolean>(async (resolve) => {\n\n const inputs = [];\n\n const tosChecked$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);\n const privacyChecked$: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(true);\n\n const readMessage = await this.translate.get('auth.legal.readAndAccept').toPromise();\n let tosLink: string = '';\n let privacyLink: string = '';\n\n if (this.config.authUi.tosUrl) {\n const tosLabel = await this.translate.get('auth.legal.termsAndConditions').toPromise();\n inputs.push({\n id: 'tos_check',\n type: 'checkbox' as 'checkbox',\n label: tosLabel,\n checked: tosChecked$.value,\n cssClass: 'authui-checkbox-wrap',\n handler: (elem: any) => tosChecked$.next(elem.checked)\n });\n tosLink = ` <a target=\"_blank\" href=\"${this.config.authUi.tosUrl}\" >${tosLabel}</a> `;\n\n }\n\n if (this.config.authUi.privacyPolicyUrl) {\n const privacyLabel = await this.translate.get('auth.legal.privacyPolicy').toPromise();\n inputs.push({\n id: 'privacy_check',\n type: 'checkbox' as 'checkbox',\n label: privacyLabel,\n checked: privacyChecked$.value,\n cssClass: 'authui-checkbox-wrap',\n handler: (elem: any) => privacyChecked$.next(elem.checked)\n });\n privacyLink = ` <a target=\"_blank\" href=\"${this.config.authUi.privacyPolicyUrl}\" >${privacyLabel}</a> `;\n }\n\n const txd = await this.translate.get([\n 'brand.name',\n 'auth.legal.subHeader',\n 'auth.legal.declineButton',\n 'auth.legal.acceptButton'\n ]).toPromise();\n const alert = await this.alertController.create({\n header: txd['brand.name'],\n subHeader: txd['auth.legal.subHeader'],\n message: `${readMessage}${tosLink}${privacyLink}`,\n inputs,\n buttons: [\n { text: txd['auth.legal.declineButton'], handler: _ => resolve(false), role: 'cancel' },\n { text: txd['auth.legal.acceptButton'], handler: _ => resolve(true), cssClass: 'confirm' }\n ],\n });\n await alert.present();\n\n const confirmBtn: HTMLIonButtonElement | null = document.querySelector('.confirm');\n if (confirmBtn === null) {\n throw new Error('QuerySelector for confirmBtn returned null');\n }\n confirmBtn.disabled = true;\n\n combineLatest([tosChecked$, privacyChecked$])\n .subscribe(([tosChecked, privacyChecked]) => confirmBtn.disabled = !tosChecked || !privacyChecked);\n\n });\n } else {\n return Promise.resolve(null);\n }\n }\n\n\n}\n","// @angular/*\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { CommonModule } from '@angular/common'\n\n// Ionic\nimport { IonicModule } from '@ionic/angular';\n\n// Mal\nimport { MalSharedModule } from 'ngx-firebase';\n\n// components\nimport { AuthAvatarComponent } from './components/avatar/avatar.component';\nimport { AuthPopoverMenuComponent } from './components/popover-menu/popover-menu.component';\n\n// services\nimport { MalIonicAlertsService } from './services/alerts-ionic.service';\nimport { MalIonicLoadingService } from './services/loading-ionic.service';\nimport { MalIonicPickerService } from './services/picker-ionic.service';\nimport { MalIonicToastService } from './services/toast-ionic.service';\nimport { MalIonicLegalityDialogService } from './services/legality-dialog-ionic.service';\n// interfaces\nimport {\n MalToastUIProviderToken, MalAlertsUIProviderToken, MalLoadingUIProviderToken,\n MalPickerUIProviderToken, MalLegaliyDialogUIProiderToken\n} from 'ngx-firebase';\n// pages\n\nconst COMPONENTS = [\n AuthAvatarComponent,\n AuthPopoverMenuComponent\n];\n\n@NgModule({\n imports: [\n MalSharedModule,\n CommonModule,\n HttpClientModule,\n IonicModule\n ],\n exports: COMPONENTS,\n declarations: COMPONENTS,\n providers:\n [\n { provide: MalAlertsUIProviderToken, useClass: MalIonicAlertsService },\n { provide: MalLoadingUIProviderToken, useClass: MalIonicLoadingService },\n { provide: MalPickerUIProviderToken, useClass: MalIonicPickerService },\n { provide: MalToastUIProviderToken, useClass: MalIonicToastService },\n { provide: MalLegaliyDialogUIProiderToken, useClass: MalIonicLegalityDialogService }\n ]\n})\nexport class MalIonicModule {\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|