import { ConfigState, GetAppConfiguration, RestService, DynamicLayoutComponent, SessionState, SetTenant, CoreModule } from '@abp/ng.core'; import { ToasterService, ThemeSharedModule } from '@abp/ng.theme.shared'; import { Component, Optional, Inject, Injectable, ɵɵdefineInjectable, ɵɵinject, NgModule, InjectionToken } from '@angular/core'; import { NgbDropdownModule } from '@ng-bootstrap/ng-bootstrap'; import { NgxValidateCoreModule } from '@ngx-validate/core'; import { TableModule } from 'primeng/table'; import { RouterModule } from '@angular/router'; import { Validators, FormBuilder } from '@angular/forms'; import { Navigate } from '@ngxs/router-plugin'; import { Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { from, throwError } from 'rxjs'; import { switchMap, tap, catchError, finalize, take } from 'rxjs/operators'; import snq from 'snq'; /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ const { maxLength, minLength, required } = Validators; class LoginComponent { /** * @param {?} fb * @param {?} oauthService * @param {?} store * @param {?} toasterService * @param {?} options */ constructor(fb, oauthService, store, toasterService, options) { this.fb = fb; this.oauthService = oauthService; this.store = store; this.toasterService = toasterService; this.options = options; this.oauthService.configure(this.store.selectSnapshot(ConfigState.getOne('environment')).oAuthConfig); this.oauthService.loadDiscoveryDocument(); this.form = this.fb.group({ username: ['', [required, maxLength(255)]], password: ['', [required, maxLength(32)]], remember: [false], }); } /** * @return {?} */ onSubmit() { if (this.form.invalid) return; // this.oauthService.setStorage(this.form.value.remember ? localStorage : sessionStorage); this.inProgress = true; from(this.oauthService.fetchTokenUsingPasswordFlow(this.form.get('username').value, this.form.get('password').value)) .pipe(switchMap((/** * @return {?} */ () => this.store.dispatch(new GetAppConfiguration()))), tap((/** * @return {?} */ () => { /** @type {?} */ const redirectUrl = snq((/** * @return {?} */ () => window.history.state)).redirectUrl || (this.options || {}).redirectUrl || '/'; this.store.dispatch(new Navigate([redirectUrl])); })), catchError((/** * @param {?} err * @return {?} */ err => { this.toasterService.error(snq((/** * @return {?} */ () => err.error.error_description)) || snq((/** * @return {?} */ () => err.error.error.message), 'AbpAccount::DefaultErrorMessage'), 'Error', { life: 7000 }); return throwError(err); })), finalize((/** * @return {?} */ () => (this.inProgress = false)))) .subscribe(); } } LoginComponent.decorators = [ { type: Component, args: [{ selector: 'abp-login', template: "
\n
\n \n\n \n
\n
\n" }] } ]; /** @nocollapse */ LoginComponent.ctorParameters = () => [ { type: FormBuilder }, { type: OAuthService }, { type: Store }, { type: ToasterService }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: ['ACCOUNT_OPTIONS',] }] } ]; if (false) { /** @type {?} */ LoginComponent.prototype.form; /** @type {?} */ LoginComponent.prototype.inProgress; /** * @type {?} * @private */ LoginComponent.prototype.fb; /** * @type {?} * @private */ LoginComponent.prototype.oauthService; /** * @type {?} * @private */ LoginComponent.prototype.store; /** * @type {?} * @private */ LoginComponent.prototype.toasterService; /** * @type {?} * @private */ LoginComponent.prototype.options; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class AccountService { /** * @param {?} rest */ constructor(rest) { this.rest = rest; } /** * @param {?} tenantName * @return {?} */ findTenant(tenantName) { /** @type {?} */ const request = { method: 'GET', url: `/api/abp/multi-tenancy/tenants/by-name/${tenantName}`, }; return this.rest.request(request); } /** * @param {?} body * @return {?} */ register(body) { /** @type {?} */ const request = { method: 'POST', url: '/api/account/register', body, }; return this.rest.request(request, { skipHandleError: true }); } } AccountService.decorators = [ { type: Injectable, args: [{ providedIn: 'root', },] } ]; /** @nocollapse */ AccountService.ctorParameters = () => [ { type: RestService } ]; /** @nocollapse */ AccountService.ngInjectableDef = ɵɵdefineInjectable({ factory: function AccountService_Factory() { return new AccountService(ɵɵinject(RestService)); }, token: AccountService, providedIn: "root" }); if (false) { /** * @type {?} * @private */ AccountService.prototype.rest; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ const { maxLength: maxLength$1, minLength: minLength$1, required: required$1, email } = Validators; class RegisterComponent { /** * @param {?} fb * @param {?} accountService * @param {?} oauthService * @param {?} store * @param {?} toasterService */ constructor(fb, accountService, oauthService, store, toasterService) { this.fb = fb; this.accountService = accountService; this.oauthService = oauthService; this.store = store; this.toasterService = toasterService; this.oauthService.configure(this.store.selectSnapshot(ConfigState.getOne('environment')).oAuthConfig); this.oauthService.loadDiscoveryDocument(); this.form = this.fb.group({ username: ['', [required$1, maxLength$1(255)]], password: ['', [required$1, maxLength$1(32)]], email: ['', [required$1, email]], }); } /** * @return {?} */ onSubmit() { if (this.form.invalid) return; this.inProgress = true; /** @type {?} */ const newUser = (/** @type {?} */ ({ userName: this.form.get('username').value, password: this.form.get('password').value, emailAddress: this.form.get('email').value, appName: 'Angular', })); this.accountService .register(newUser) .pipe(switchMap((/** * @return {?} */ () => from(this.oauthService.fetchTokenUsingPasswordFlow(newUser.userName, newUser.password)))), switchMap((/** * @return {?} */ () => this.store.dispatch(new GetAppConfiguration()))), tap((/** * @return {?} */ () => this.store.dispatch(new Navigate(['/'])))), take(1), catchError((/** * @param {?} err * @return {?} */ err => { this.toasterService.error(snq((/** * @return {?} */ () => err.error.error_description)) || snq((/** * @return {?} */ () => err.error.error.message), 'AbpAccount::DefaultErrorMessage'), 'Error', { life: 7000 }); return throwError(err); })), finalize((/** * @return {?} */ () => (this.inProgress = false)))) .subscribe(); } } RegisterComponent.decorators = [ { type: Component, args: [{ selector: 'abp-register', template: "
\n
\n \n\n \n
\n
\n" }] } ]; /** @nocollapse */ RegisterComponent.ctorParameters = () => [ { type: FormBuilder }, { type: AccountService }, { type: OAuthService }, { type: Store }, { type: ToasterService } ]; if (false) { /** @type {?} */ RegisterComponent.prototype.form; /** @type {?} */ RegisterComponent.prototype.inProgress; /** * @type {?} * @private */ RegisterComponent.prototype.fb; /** * @type {?} * @private */ RegisterComponent.prototype.accountService; /** * @type {?} * @private */ RegisterComponent.prototype.oauthService; /** * @type {?} * @private */ RegisterComponent.prototype.store; /** * @type {?} * @private */ RegisterComponent.prototype.toasterService; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** @type {?} */ const routes = [ { path: '', pathMatch: 'full', redirectTo: 'login' }, { path: '', component: DynamicLayoutComponent, children: [{ path: 'login', component: LoginComponent }, { path: 'register', component: RegisterComponent }], }, ]; class AccountRoutingModule { } AccountRoutingModule.decorators = [ { type: NgModule, args: [{ imports: [RouterModule.forChild(routes)], exports: [RouterModule], },] } ]; /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class TenantBoxComponent { /** * @param {?} store * @param {?} toasterService * @param {?} accountService */ constructor(store, toasterService, accountService) { this.store = store; this.toasterService = toasterService; this.accountService = accountService; this.tenant = (/** @type {?} */ ({})); } /** * @return {?} */ ngOnInit() { this.tenant = this.store.selectSnapshot(SessionState.getTenant) || ((/** @type {?} */ ({}))); this.tenantName = this.tenant.name || ''; } /** * @return {?} */ onSwitch() { this.isModalVisible = true; } /** * @return {?} */ save() { if (this.tenant.name) { this.accountService .findTenant(this.tenant.name) .pipe(take(1), catchError((/** * @param {?} err * @return {?} */ err => { this.toasterService.error(snq((/** * @return {?} */ () => err.error.error_description), 'AbpUi::DefaultErrorMessage'), 'AbpUi::Error'); return throwError(err); }))) .subscribe((/** * @param {?} __0 * @return {?} */ ({ success, tenantId }) => { if (success) { this.tenant = { id: tenantId, name: this.tenant.name }; this.tenantName = this.tenant.name; this.isModalVisible = false; } else { this.toasterService.error('AbpUiMultiTenancy::GivenTenantIsNotAvailable', 'AbpUi::Error', { messageLocalizationParams: [this.tenant.name] }); this.tenant = (/** @type {?} */ ({})); } this.store.dispatch(new SetTenant(success ? this.tenant : null)); })); } else { this.store.dispatch(new SetTenant(null)); this.tenantName = null; this.isModalVisible = false; } } } TenantBoxComponent.decorators = [ { type: Component, args: [{ selector: 'abp-tenant-box', template: "\n {{ 'AbpUiMultiTenancy::Tenant' | abpLocalization }}: \n \n {{ tenantName || ('AbpUiMultiTenancy::NotSelected' | abpLocalization) }}\n \n ({{\n 'AbpUiMultiTenancy::Switch' | abpLocalization\n }})\n\n\n\n \n
Switch Tenant
\n
\n \n
\n
\n
\n \n \n
\n

{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}

\n
\n
\n
\n \n \n \n \n
\n" }] } ]; /** @nocollapse */ TenantBoxComponent.ctorParameters = () => [ { type: Store }, { type: ToasterService }, { type: AccountService } ]; if (false) { /** @type {?} */ TenantBoxComponent.prototype.tenant; /** @type {?} */ TenantBoxComponent.prototype.tenantName; /** @type {?} */ TenantBoxComponent.prototype.isModalVisible; /** * @type {?} * @private */ TenantBoxComponent.prototype.store; /** * @type {?} * @private */ TenantBoxComponent.prototype.toasterService; /** * @type {?} * @private */ TenantBoxComponent.prototype.accountService; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @param {?} options * @return {?} */ function optionsFactory(options) { return Object.assign({ redirectUrl: '/' }, options); } /** @type {?} */ const ACCOUNT_OPTIONS = new InjectionToken('ACCOUNT_OPTIONS'); /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ class AccountModule { } AccountModule.decorators = [ { type: NgModule, args: [{ declarations: [LoginComponent, RegisterComponent, TenantBoxComponent], imports: [CoreModule, AccountRoutingModule, ThemeSharedModule, TableModule, NgbDropdownModule, NgxValidateCoreModule], exports: [], },] } ]; /** * * @deprecated since version 0.9 * @param {?=} options * @return {?} */ function AccountProviders(options = (/** @type {?} */ ({}))) { return [ { provide: ACCOUNT_OPTIONS, useValue: options }, { provide: 'ACCOUNT_OPTIONS', useFactory: optionsFactory, deps: [ACCOUNT_OPTIONS], }, ]; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * * @deprecated since version 0.9 * @type {?} */ const ACCOUNT_ROUTES = { routes: (/** @type {?} */ ([ { name: 'Account', path: 'account', invisible: true, layout: "application" /* application */, children: [{ path: 'login', name: 'Login', order: 1 }, { path: 'register', name: 'Register', order: 2 }], }, ])), }; /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @record */ function Options() { } if (false) { /** @type {?|undefined} */ Options.prototype.redirectUrl; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @record */ function RegisterRequest() { } if (false) { /** @type {?} */ RegisterRequest.prototype.userName; /** @type {?} */ RegisterRequest.prototype.emailAddress; /** @type {?} */ RegisterRequest.prototype.password; /** @type {?|undefined} */ RegisterRequest.prototype.appName; } /** * @record */ function RegisterResponse() { } if (false) { /** @type {?} */ RegisterResponse.prototype.tenantId; /** @type {?} */ RegisterResponse.prototype.userName; /** @type {?} */ RegisterResponse.prototype.name; /** @type {?} */ RegisterResponse.prototype.surname; /** @type {?} */ RegisterResponse.prototype.email; /** @type {?} */ RegisterResponse.prototype.emailConfirmed; /** @type {?} */ RegisterResponse.prototype.phoneNumber; /** @type {?} */ RegisterResponse.prototype.phoneNumberConfirmed; /** @type {?} */ RegisterResponse.prototype.twoFactorEnabled; /** @type {?} */ RegisterResponse.prototype.lockoutEnabled; /** @type {?} */ RegisterResponse.prototype.lockoutEnd; /** @type {?} */ RegisterResponse.prototype.concurrencyStamp; /** @type {?} */ RegisterResponse.prototype.isDeleted; /** @type {?} */ RegisterResponse.prototype.deleterId; /** @type {?} */ RegisterResponse.prototype.deletionTime; /** @type {?} */ RegisterResponse.prototype.lastModificationTime; /** @type {?} */ RegisterResponse.prototype.lastModifierId; /** @type {?} */ RegisterResponse.prototype.creationTime; /** @type {?} */ RegisterResponse.prototype.creatorId; /** @type {?} */ RegisterResponse.prototype.id; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @record */ function TenantIdResponse() { } if (false) { /** @type {?} */ TenantIdResponse.prototype.success; /** @type {?} */ TenantIdResponse.prototype.tenantId; } /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ export { ACCOUNT_OPTIONS, ACCOUNT_ROUTES, AccountModule, AccountProviders, LoginComponent, RegisterComponent, optionsFactory, LoginComponent as ɵa, RegisterComponent as ɵc, AccountService as ɵd, TenantBoxComponent as ɵe, AccountRoutingModule as ɵf, optionsFactory as ɵg, ACCOUNT_OPTIONS as ɵh }; //# sourceMappingURL=abp-ng.account.js.map