Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

replace permission-checker Resource with TrackedAsyncData equivalent. #7752

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 28 additions & 6 deletions packages/frontend/app/components/courses/list-item.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,40 @@
import Component from '@glimmer/component';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import { use } from 'ember-could-get-used-to-this';
import { service } from '@ember/service';
import { cached } from '@glimmer/tracking';
import { TrackedAsyncData } from 'ember-async-data';

export default class CoursesListItemComponent extends Component {
@use canLock = new PermissionChecker(() => ['canUpdateCourse', this.args.course]);
@use canUnlock = new PermissionChecker(() => ['canUnlockCourse', this.args.course]);
@use canDeletePermission = new PermissionChecker(() => ['canDeleteCourse', this.args.course]);
@service permissionChecker;

@cached
get canLockData() {
return new TrackedAsyncData(this.permissionChecker.canUpdateCourse(this.args.course));
}

@cached
get canUnlockData() {
return new TrackedAsyncData(this.permissionChecker.canUnlockCourse(this.args.course));
}

@cached
get canDeleteData() {
return new TrackedAsyncData(this.permissionChecker.canDeleteCourse(this.args.course));
}

get canLock() {
return this.canLockData.isResolved ? this.canLockData.value : false;
}

get canUnlock() {
return this.canUnlockData.isResolved ? this.canUnlockData.value : false;
}

get canDelete() {
if (this.args.course.isPublishedOrScheduled) {
return false;
} else if (this.args.course.hasMany('descendants').ids().length > 0) {
return false;
}
return this.canDeletePermission;
return this.canDeleteData.isResolved ? this.canDeleteData.value : false;
}
}
2 changes: 1 addition & 1 deletion packages/frontend/app/components/courses/root.hbs
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@
({{this.filteredCourses.length}})
</h2>
<div class="actions">
{{#if this.canCreateCourse}}
{{#if this.canCreate}}
<ExpandCollapseButton
@value={{this.showNewCourseForm}}
@action={{set this.showNewCourseForm (not this.showNewCourseForm)}}
Expand Down
15 changes: 11 additions & 4 deletions packages/frontend/app/components/courses/root.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@ import { dropTask } from 'ember-concurrency';
import { DateTime } from 'luxon';
import { use } from 'ember-could-get-used-to-this';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import { cached, tracked } from '@glimmer/tracking';
import AsyncProcess from 'ilios-common/classes/async-process';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import { findById } from 'ilios-common/utils/array-helpers';
import { action } from '@ember/object';
import { tracked } from '@glimmer/tracking';

export default class CoursesRootComponent extends Component {
@service currentUser;
Expand Down Expand Up @@ -64,7 +62,16 @@ export default class CoursesRootComponent extends Component {
return this.allRelatedCoursesData.isResolved ? this.allRelatedCoursesData.value : null;
}

@use canCreateCourse = new PermissionChecker(() => ['canCreateCourse', this.selectedSchool]);
@cached
get canCreateData() {
return new TrackedAsyncData(
this.selectedSchool ? this.permissionChecker.canCreateCourse(this.selectedSchool) : false,
);
}

get canCreate() {
return this.canCreateData.isResolved ? this.canCreateData.value : false;
}

get hasMoreThanOneSchool() {
return this.args.schools.length > 1;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@ import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import { use } from 'ember-could-get-used-to-this';
import { service } from '@ember/service';

export default class CurriculumInventoryReportListItemComponent extends Component {
Expand All @@ -15,10 +13,16 @@ export default class CurriculumInventoryReportListItemComponent extends Componen
this.iliosConfig.itemFromConfig('academicYearCrossesCalendarYearBoundaries'),
);

@use canDelete = new PermissionChecker(() => [
'canDeleteCurriculumInventoryReport',
this.args.report,
]);
@cached
get canDeleteData() {
return new TrackedAsyncData(
this.permissionChecker.canDeleteCurriculumInventoryReport(this.args.report),
);
}

get canDelete() {
return this.canDeleteData.isResolved ? this.canDeleteData.value : false;
}

@cached
get academicYearCrossesCalendarYearBoundaries() {
Expand Down
21 changes: 12 additions & 9 deletions packages/frontend/app/components/instructor-groups/list-item.js
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import { use } from 'ember-could-get-used-to-this';
import { cached, tracked } from '@glimmer/tracking';
import { service } from '@ember/service';
import { dropTask } from 'ember-concurrency';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';

export default class InstructorGroupsListItemComponent extends Component {
@service permissionChecker;
@tracked showRemoveConfirmation = false;

@use canDeletePermission = new PermissionChecker(() => [
'canDeleteInstructorGroup',
this.args.instructorGroup,
]);
@cached
get canDeleteData() {
return new TrackedAsyncData(
this.permissionChecker.canDeleteInstructorGroup(this.args.instructorGroup),
);
}

@cached
get coursesData() {
Expand All @@ -24,7 +25,9 @@ export default class InstructorGroupsListItemComponent extends Component {
}

get canDelete() {
return this.canDeletePermission && this.courses && this.courses.length === 0;
return this.canDeleteData.isResolved
? this.canDeleteData.value && this.courses && this.courses.length === 0
: false;
}

remove = dropTask(async () => {
Expand Down
22 changes: 14 additions & 8 deletions packages/frontend/app/components/instructor-groups/root.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import Component from '@glimmer/component';
import { service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { use } from 'ember-could-get-used-to-this';
import { cached, tracked } from '@glimmer/tracking';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import { findById } from 'ilios-common/utils/array-helpers';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import { dropTask } from 'ember-concurrency';

export default class InstructorGroupsRootComponent extends Component {
@service currentUser;
@service store;
@service dataLoader;
@service permissionChecker;
@tracked showNewInstructorGroupForm = false;
@tracked newInstructorGroup;
@tracked instructorGroupPromises = new Map();
Expand All @@ -22,16 +20,24 @@ export default class InstructorGroupsRootComponent extends Component {
return this.userModel.isResolved ? this.userModel.value : null;
}

@use canCreate = new PermissionChecker(() => [
'canCreateInstructorGroup',
this.bestSelectedSchool,
]);
@cached
get canCreateData() {
return new TrackedAsyncData(
this.bestSelectedSchool
? this.permissionChecker.canCreateInstructorGroup(this.bestSelectedSchool)
: false,
);
}

@cached
get loadedSchoolData() {
return new TrackedAsyncData(this.getSchoolPromise(this.bestSelectedSchool.id));
}

get canCreate() {
return this.canCreateData.isResolved ? this.canCreateData.value : false;
}

get loadedSchool() {
return this.loadedSchoolData.isResolved ? this.loadedSchoolData.value : null;
}
Expand Down
29 changes: 18 additions & 11 deletions packages/frontend/app/components/learner-group/list-item.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,31 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';
import { use } from 'ember-could-get-used-to-this';
import { dropTask } from 'ember-concurrency';
import { all, filter } from 'rsvp';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import { service } from '@ember/service';

export default class LearnerGroupListItemComponent extends Component {
@service permissionChecker;
@tracked showRemoveConfirmation = false;
@tracked showCopyConfirmation = false;

@cached
get canDeleteData() {
return new TrackedAsyncData(
this.permissionChecker.canDeleteLearnerGroup(this.args.learnerGroup),
);
}

@cached
get canCreateData() {
return new TrackedAsyncData(
this.school ? this.permissionChecker.canCreateLearnerGroup(this.school) : false,
);
}

@cached
get schoolData() {
return new TrackedAsyncData(this.getSchool(this.args.learnerGroup));
Expand All @@ -26,13 +40,6 @@ export default class LearnerGroupListItemComponent extends Component {
return this.schoolData.isResolved ? this.schoolData.value : null;
}

@use canDeletePermission = new PermissionChecker(() => [
'canDeleteLearnerGroup',
this.args.learnerGroup,
]);

@use canCreatePermission = new PermissionChecker(() => ['canCreateLearnerGroup', this.school]);

@cached
get isLinked() {
return this.isLinkedData.isResolved ? this.isLinkedData.value : null;
Expand All @@ -42,11 +49,11 @@ export default class LearnerGroupListItemComponent extends Component {
if (this.isLinked) {
return false;
}
return this.canDeletePermission && !this.isLinked;
return this.canDeleteData.isResolved ? this.canDeleteData.value && !this.isLinked : false;
}

get canCreate() {
return this.school && this.canCreatePermission;
return this.canCreateData.isResolved ? this.canCreateData.value && this.school : false;
}

async getSchool(learnerGroup) {
Expand Down
20 changes: 15 additions & 5 deletions packages/frontend/app/components/learner-groups/root.js
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import Component from '@glimmer/component';
import { service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import { use } from 'ember-could-get-used-to-this';
import { cached, tracked } from '@glimmer/tracking';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import { findById, sortBy } from 'ilios-common/utils/array-helpers';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import cloneLearnerGroup from 'frontend/utils/clone-learner-group';
import { dropTask } from 'ember-concurrency';
import { map } from 'rsvp';
Expand All @@ -16,14 +13,23 @@ export default class LearnerGroupsRootComponent extends Component {
@service store;
@service dataLoader;
@service intl;
@service permissionChecker;
@tracked showNewLearnerGroupForm = false;
@tracked savedLearnerGroup;
@tracked totalGroupsToSave;
@tracked currentGroupsSaved;

learnerGroupPromises = new Map();
userModel = new TrackedAsyncData(this.currentUser.getModel());
@use canCreate = new PermissionChecker(() => ['canCreateLearnerGroup', this.selectedSchool]);

@cached
get canCreateData() {
return new TrackedAsyncData(
this.selectedSchool
? this.permissionChecker.canCreateLearnerGroup(this.selectedSchool)
: false,
);
}

@cached
get user() {
Expand All @@ -35,6 +41,10 @@ export default class LearnerGroupsRootComponent extends Component {
return new TrackedAsyncData(this.selectedSchool.programs);
}

get canCreate() {
return this.canCreateData.isResolved ? this.canCreateData.value : false;
}

get programs() {
return this.programsData.isResolved ? this.programsData.value : null;
}
Expand Down
35 changes: 24 additions & 11 deletions packages/frontend/app/components/program-year/list-item.js
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { cached, tracked } from '@glimmer/tracking';
import { TrackedAsyncData } from 'ember-async-data';
import { cached } from '@glimmer/tracking';
import PermissionChecker from 'ilios-common/classes/permission-checker';
import { use } from 'ember-could-get-used-to-this';
import { service } from '@ember/service';
import { dropTask } from 'ember-concurrency';

Expand All @@ -13,6 +10,21 @@ export default class ProgramYearListItemComponent extends Component {

@tracked showRemoveConfirmation = false;

@cached
get canLockData() {
return new TrackedAsyncData(this.permissionChecker.canLockProgramYear(this.args.programYear));
}

@cached
get canUnlockData() {
return new TrackedAsyncData(this.permissionChecker.canUnlockProgramYear(this.args.programYear));
}

@cached
get canDeleteData() {
return new TrackedAsyncData(this.permissionChecker.canDeleteProgramYear(this.args.programYear));
}

@cached
get programData() {
return new TrackedAsyncData(this.args.programYear.program);
Expand All @@ -31,12 +43,13 @@ export default class ProgramYearListItemComponent extends Component {
return this.cohortData.isResolved ? this.cohortData.value : null;
}

@use canDeletePermission = new PermissionChecker(() => [
'canDeleteProgramYear',
this.args.programYear,
]);
@use canLock = new PermissionChecker(() => ['canLockProgramYear', this.args.programYear]);
@use canUnlock = new PermissionChecker(() => ['canUnlockProgramYear', this.args.programYear]);
get canLock() {
return this.canLockData.isResolved ? this.canLockData.value : false;
}

get canUnlock() {
return this.canUnlockData.isResolved ? this.canUnlockData.value : false;
}

get canDelete() {
if (!this.cohort) {
Expand All @@ -48,7 +61,7 @@ export default class ProgramYearListItemComponent extends Component {
return false;
}

return this.canDeletePermission;
return this.canDeleteData.isResolved ? this.canDeleteData.value : false;
}

get classOfYear() {
Expand Down
Loading