File
Metadata
| changeDetection |
ChangeDetectionStrategy.OnPush |
| host |
{ } |
| providers |
{
provide: ItemService, useExisting: UnitUserRolesItemService,
}
|
| selector |
cx-org-unit-user-roles |
| templateUrl |
./unit-user-roles.component.html |
Methods
|
Protected
notify
|
notify(item: B2BUser)
|
|
|
|
|
|
availableRoles
|
Type : B2BUserRole[]
|
Default value : this.userService.getAllRoles()
|
|
|
|
form$
|
Type : Observable<FormGroup>
|
Default value : this.itemService.current$.pipe(
tap((item) => {
if (!this.item) {
this.item = item;
}
if (this.item.roles?.join() !== item.roles?.join()) {
this.item = { ...this.item, ...item };
}
}),
map((item) => this.formService.getForm(item))
)
|
|
|
|
messageService
|
Type : MessageService
|
Decorators :
@ViewChild(MessageService, {read: MessageService})
|
|
|
import { ChangeDetectionStrategy, Component, ViewChild } from '@angular/core';
import { FormGroup } from '@angular/forms';
import { B2BUser, B2BUserRole } from '@spartacus/core';
import {
B2BUserService,
LoadStatus,
} from '@spartacus/organization/administration/core';
import { Observable } from 'rxjs';
import { filter, map, take, tap } from 'rxjs/operators';
import { ItemService } from '../../../../shared/item.service';
import { MessageService } from '../../../../shared/message/services/message.service';
import { UnitUserRolesFormService } from './unit-user-roles-form.service';
import { UnitUserRolesItemService } from './unit-user-roles-item.service';
import { UserItemService } from '../../../../user/services/user-item.service';
@Component({
selector: 'cx-org-unit-user-roles',
templateUrl: './unit-user-roles.component.html',
changeDetection: ChangeDetectionStrategy.OnPush,
host: { class: 'content-wrapper' },
providers: [
{
provide: ItemService,
useExisting: UnitUserRolesItemService,
},
],
})
export class UnitUserRolesFormComponent {
protected item: B2BUser;
@ViewChild(MessageService, { read: MessageService })
messageService: MessageService;
form$: Observable<FormGroup> = this.itemService.current$.pipe(
tap((item) => {
if (!this.item) {
this.item = item;
}
if (this.item.roles?.join() !== item.roles?.join()) {
this.item = { ...this.item, ...item };
}
}),
map((item) => this.formService.getForm(item))
);
availableRoles: B2BUserRole[] = this.userService.getAllRoles();
constructor(
protected itemService: ItemService<B2BUser>,
protected formService: UnitUserRolesFormService,
protected userService: B2BUserService,
protected userItemService: UserItemService
) {}
save(form: FormGroup) {
form.disable();
const roles = [...this.availableRoles].filter((r) => !!form.get(r).value);
this.userItemService
.update(this.item.customerId, { roles })
.pipe(
take(1),
filter((data) => data.status === LoadStatus.SUCCESS)
)
.subscribe((data) => {
this.notify({ ...this.item, ...data.item });
form.enable();
});
}
protected notify(item: B2BUser) {
this.messageService.add({
message: {
key: 'orgUnitUserRoles.messages.rolesUpdated',
params: { item },
},
});
}
}
<form *ngIf="form$ | async as form" (submit)="save(form)">
<cx-org-card
#card
[previous]="false"
i18nRoot="orgUnitUserRoles"
[cxFocus]="{ autofocus: 'input', refreshFocus: form }"
>
<a actions routerLink="../../">
<span (click)="card.closeView($event)">
{{ 'organization.done' | cxTranslate }}
</span>
</a>
<section main class="details" [formGroup]="form">
<fieldset class="full-width">
<label class="form-check" *ngFor="let role of availableRoles">
<input
type="checkbox"
[formControlName]="role"
(change)="save(form)"
/>
<span class="form-check-label">
{{ 'organization.userRoles.' + role | cxTranslate }}
</span>
</label>
</fieldset>
</section>
</cx-org-card>
</form>
Legend
Html element with directive