0

I have a firestore application and im trying to make a permissions module my json data looks like this

adminGroup: false
clientId: "UuAgaMmfbMbyUXja4hkkdwlwcrP2"
groupName: "Salesman"
id: "b268df7f-c35b-444a-aaa1-4270e9e10eb0"
permissions:
configuration: {canDelete: true, canRead: false, canUpdate: false, canView: false, canWrite: true}
customers: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}
employees: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}
expenses: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}
invoice: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}
products: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}
providers: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}
purchaseOrder: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}
repairs: {canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false}

basically inside of permissions i have an object with properties

to present it ive written the following template:

<div *ngFor="let permission of (selectedGroup?.permissions | keyvalue)">
    <p-panel header="{{ permission.key }}">
      <div class="ui-g">
        <div class="ui-g-2" *ngFor="let privilege of (permission.value | keyvalue)">
          <p-checkbox label="{{ privilege.key }}" [(ngModel)]="privilege.value" binary="true"></p-checkbox>
        </div>
      </div>
    </p-panel>
  </div>

the form is presented nicely and the actual data from the firestore is being presented as shown on the picture enter image description here

so one wway binding is working, but when i check the checkboxes i noticed that the model is not being updated...

UPDATE sharing my component code

export class UserGroupComponent implements OnInit, OnDestroy {

  form: FormGroup;

  groups: Group[];

  groupsSubscription: Subscription;

  display = false;

  user: User;

  permissions: Permission;
  selectedGroup: Group;

  constructor(private groupService: GroupService, private core: CoreComponent,
    private formBuilder: FormBuilder, private authService: AuthService) { }

  ngOnInit() {
    this.form = this.formBuilder.group({
      groupName: [null, [Validators.required]],
      adminGroup: [false, [Validators.required]],
      clientId: [null, []],
      id: [null, []]
    });
    this.authService.user$.subscribe(user => (this.user = user));
    this.getGroups();
  }


  ngOnDestroy() {
    this.groupsSubscription.unsubscribe();
  }

  getGroups() {
    this.groupsSubscription = this.groupService.groups$.subscribe(groups => {
      this.groups = groups;
    });
  }

  addGroup() {
    this.display = true;
  }

  clearForm() {
    this.form.reset();
    this.form.patchValue({
      adminGroup: false
    });
  }

  add() {
    this.form.value.clientId = this.user.clientId;
    const group = this.form.value as Group;
    group.id = Guid.create().toString();
    group.permissions = {} as Permission;
    group.permissions.configuration = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.customers = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.employees = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.expenses = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.invoice = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.products = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.providers = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.purchaseOrder = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    group.permissions.repairs = { canDelete: false, canRead: false, canUpdate: false, canView: false, canWrite: false };
    this.groupService.create(this.form.value).subscribe(
      success => {
        this.core.showMessage({
          severity: 'success',
          summary: this.core.tWithParams('employee', 'success-msg-group', { name: this.user.fullName }),
        });
        this.display = false;
      },
      error => {
        this.core.showMessage({
          severity: 'error',
          summary: this.core.t('expenses', 'error-msg'),
          detail: error.message,
        });
      }
    );
  }

  update() {
    console.log(this.permissions);
  }

  showGroupPrivilege(group: Group) {
    console.log(group);
    this.selectedGroup = group;
    this.permissions = group.permissions;
  }

}
naoru
  • 2,149
  • 5
  • 34
  • 58

0 Answers0