diff --git a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html index 2df7ace400..10a0e7a830 100644 --- a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html +++ b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.html @@ -12,33 +12,27 @@ >) - - - - SwitchTenant - - - × - - - - + + + Switch Tenant + + + {{ 'AbpUiMultiTenancy::Name' | abpLocalization }} - + {{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }} - - - - - + + + + + {{ 'AbpTenantManagement::Cancel' | abpLocalization }} + + + {{ 'AbpTenantManagement::Save' | abpLocalization }} + + + diff --git a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts index ab10940f10..0ef6cc58ad 100644 --- a/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts +++ b/npm/ng-packs/packages/account/src/lib/components/tenant-box/tenant-box.component.ts @@ -1,40 +1,51 @@ +import { ABP, SessionSetTenantId } from '@abp/ng.core'; +import { ToasterService } from '@abp/ng.theme.shared'; import { Component, TemplateRef, ViewChild } from '@angular/core'; -import { FormBuilder, FormGroup } from '@angular/forms'; -import { NgbModal } from '@ng-bootstrap/ng-bootstrap'; -import { ABP } from '@abp/ng.core'; +import { Store } from '@ngxs/store'; +import { throwError } from 'rxjs'; +import { catchError, take } from 'rxjs/operators'; +import snq from 'snq'; +import { AccountService } from '../../services/account.service'; @Component({ selector: 'abp-tenant-box', templateUrl: './tenant-box.component.html', }) export class TenantBoxComponent { - constructor(private modalService: NgbModal, private fb: FormBuilder) {} + constructor(private store: Store, private toasterService: ToasterService, private accountService: AccountService) {} - form: FormGroup; + selected = {} as ABP.BasicItem; - selected: ABP.BasicItem; + isModalVisible: boolean; @ViewChild('modalContent', { static: false }) modalContent: TemplateRef; - createForm() { - this.form = this.fb.group({ - name: [this.selected.name], - }); - } - - openModal() { - this.createForm(); - this.modalService.open(this.modalContent); - } - onSwitch() { - this.selected = {} as ABP.BasicItem; - this.openModal(); + this.isModalVisible = true; } save() { - this.selected = this.form.value; - this.modalService.dismissAll(); + this.selected.name = this.selected.name ? this.selected.name : ''; + + this.accountService + .findTenant(this.selected.name) + .pipe( + take(1), + catchError(err => { + this.toasterService.error(snq(() => err.error.error_description, 'An error occured.'), 'Error'); + return throwError(err); + }), + ) + .subscribe(({ success, tenantId }) => { + if (success) { + this.store.dispatch(new SessionSetTenantId(tenantId)); + this.isModalVisible = false; + } else { + this.toasterService.error(`Given tenant is not available: ${this.selected.name}`, 'Error'); + this.selected = {} as ABP.BasicItem; + this.store.dispatch(new SessionSetTenantId(null)); + } + }); } } diff --git a/npm/ng-packs/packages/account/src/lib/models/index.ts b/npm/ng-packs/packages/account/src/lib/models/index.ts index 5f30ef383a..4dcd63408e 100644 --- a/npm/ng-packs/packages/account/src/lib/models/index.ts +++ b/npm/ng-packs/packages/account/src/lib/models/index.ts @@ -1 +1,3 @@ export * from './options'; +export * from './user'; +export * from './tenant'; diff --git a/npm/ng-packs/packages/account/src/lib/models/tenant.ts b/npm/ng-packs/packages/account/src/lib/models/tenant.ts new file mode 100644 index 0000000000..08d5c321d4 --- /dev/null +++ b/npm/ng-packs/packages/account/src/lib/models/tenant.ts @@ -0,0 +1,4 @@ +export interface Tenant { + success: boolean; + tenantId: string; +} \ No newline at end of file
{{ 'AbpUiMultiTenancy::SwitchTenantHint' | abpLocalization }}