ilios/frontend

View on GitHub
packages/frontend/app/components/instructor-group/users.js

Summary

Maintainability
A
0 mins
Test Coverage
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { dropTask, timeout } from 'ember-concurrency';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';

export default class InstructorGroupUsersComponent extends Component {
  @tracked usersBuffer = [];
  @tracked isManaging = false;

  @cached
  get usersData() {
    return new TrackedAsyncData(this.args.instructorGroup.users);
  }

  get users() {
    return this.usersData.isResolved ? this.usersData.value : [];
  }

  @action
  addUser(user) {
    this.usersBuffer = [...this.usersBuffer, user];
  }
  @action
  removeUser(user) {
    this.usersBuffer = this.usersBuffer.filter((obj) => obj !== user);
  }

  manage = dropTask(async () => {
    this.usersBuffer = (await this.args.instructorGroup.users).slice();
    this.isManaging = true;
  });

  save = dropTask(async () => {
    await timeout(10);
    this.args.instructorGroup.set('users', this.usersBuffer);
    await this.args.instructorGroup.save();
    this.isManaging = false;
  });
}