File

feature-libs/organization/administration/components/unit/links/users/roles/unit-user-roles.component.ts

Metadata

changeDetection ChangeDetectionStrategy.OnPush
host {
}
providers { provide: ItemService, useExisting: UnitUserRolesItemService, }
selector cx-org-unit-user-roles
templateUrl ./unit-user-roles.component.html

Index

Properties
Methods

Constructor

constructor(itemService: ItemService<B2BUser>, formService: UnitUserRolesFormService, userService: B2BUserService, userItemService: UserItemService)
Parameters :
Name Type Optional
itemService ItemService<B2BUser> No
formService UnitUserRolesFormService No
userService B2BUserService No
userItemService UserItemService No

Methods

Protected notify
notify(item: B2BUser)
Parameters :
Name Type Optional
item B2BUser No
Returns : void
save
save(form: FormGroup)
Parameters :
Name Type Optional
form FormGroup No
Returns : void

Properties

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)) )
Protected item
Type : B2BUser
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
Component
Html element with directive

result-matching ""

    No results matching ""