From 59602e8e223827dc0a70a4ceca42c10b59750f57 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Wed, 17 Sep 2025 13:47:49 -0700 Subject: [PATCH 1/5] only show filter controls in school calendar. hide these controls from the my-schedule calendar, they don't apply. --- .../addon/components/dashboard/calendar.gjs | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/packages/ilios-common/addon/components/dashboard/calendar.gjs b/packages/ilios-common/addon/components/dashboard/calendar.gjs index 9f972518d6..85b04c353e 100644 --- a/packages/ilios-common/addon/components/dashboard/calendar.gjs +++ b/packages/ilios-common/addon/components/dashboard/calendar.gjs @@ -295,24 +295,6 @@ export default class DashboardCalendarComponent extends Component { @toggle={{@toggleMySchedule}} /> -
- -
- {{#if @showFilters}} -
- -
- {{/if}} {{#if @mySchedule}} {{#if this.showUserContextFilters}}
{{/if}} {{else}} +
+ +
+ {{#if @showFilters}} +
+ +
+ {{/if}}
{{#if this.hasMoreThanOneSchool}} From c3f07f3a50bbaf98ef6610ad51c62602393783c8 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Wed, 17 Sep 2025 13:52:59 -0700 Subject: [PATCH 2/5] code cleanup - rm value assignment to unused variable. --- packages/ilios-common/addon/controllers/dashboard/calendar.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/ilios-common/addon/controllers/dashboard/calendar.js b/packages/ilios-common/addon/controllers/dashboard/calendar.js index 7050fdb3b0..16c77fcdc5 100644 --- a/packages/ilios-common/addon/controllers/dashboard/calendar.js +++ b/packages/ilios-common/addon/controllers/dashboard/calendar.js @@ -87,7 +87,6 @@ export default class DashboardCalendarController extends Controller { toggleShowFilters() { if (this.showFilters) { this.showFilters = false; - this.academicYear = null; } else { this.showFilters = true; } From a766e3110dd20f1266acf969c5b748b7738cec24 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Wed, 17 Sep 2025 13:57:12 -0700 Subject: [PATCH 3/5] reset all filters and filter-controls when toggling to my-schedule. --- packages/ilios-common/addon/controllers/dashboard/calendar.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/ilios-common/addon/controllers/dashboard/calendar.js b/packages/ilios-common/addon/controllers/dashboard/calendar.js index 16c77fcdc5..71b43c665f 100644 --- a/packages/ilios-common/addon/controllers/dashboard/calendar.js +++ b/packages/ilios-common/addon/controllers/dashboard/calendar.js @@ -80,6 +80,9 @@ export default class DashboardCalendarController extends Controller { this.school = null; } else { this.mySchedule = true; + this.showFilters = false; + this.courseFilters = true; + this.clearFilters(); } } From 5935228c7b96de7fb0ec46c90e9bb28cba49f96b Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Wed, 17 Sep 2025 15:31:11 -0700 Subject: [PATCH 4/5] fix up dashboard calendar acceptance tests. filter tests only apply to school calendar now. --- .../acceptance/dashboard/calendar-test.js | 94 +++++++++---------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/packages/frontend/tests/acceptance/dashboard/calendar-test.js b/packages/frontend/tests/acceptance/dashboard/calendar-test.js index 16109eda97..83ad582311 100644 --- a/packages/frontend/tests/acceptance/dashboard/calendar-test.js +++ b/packages/frontend/tests/acceptance/dashboard/calendar-test.js @@ -690,19 +690,19 @@ module('Acceptance | Dashboard Calendar', function (hooks) { test('test session type filter', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), sessionTypeId: 1, }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), sessionTypeId: 2, }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); assert.strictEqual(page.calendar.calendar.weekly.events.length, 2); await page.calendar.controls.filters.sessionTypesFilter.sessionTypes[0].click(); @@ -718,19 +718,19 @@ module('Acceptance | Dashboard Calendar', function (hooks) { test('test course level filter', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), courseLevel: 1, }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), courseLevel: 1, }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); await page.calendar.controls.showCourseFilters.toggle.secondLabel.click(); assert.strictEqual(page.calendar.calendar.weekly.events.length, 2); @@ -743,19 +743,19 @@ module('Acceptance | Dashboard Calendar', function (hooks) { test('test cohort filter', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), cohorts: [{ id: 1 }], }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), cohorts: [{ id: 1 }], }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); await page.calendar.controls.showCourseFilters.toggle.secondLabel.click(); assert.strictEqual(page.calendar.calendar.weekly.events.length, 2); @@ -770,19 +770,19 @@ module('Acceptance | Dashboard Calendar', function (hooks) { test('test cohort filter on page load ilios/ilios#5699', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), cohorts: [{ id: 1 }], }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), cohorts: [{ id: 1 }], }); - await page.visit({ show: 'calendar', view: 'week', cohorts: 2 }); + await page.visit({ show: 'calendar', view: 'week', cohorts: 2, mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); await page.calendar.controls.showCourseFilters.toggle.secondLabel.click(); assert.ok(page.calendar.controls.filters.cohortsFilter.cohorts[0].isChecked); @@ -792,25 +792,25 @@ module('Acceptance | Dashboard Calendar', function (hooks) { test('test course filter', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), course: 1, }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), course: 2, }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), course: 1, }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); assert.strictEqual(page.calendar.calendar.weekly.events.length, 3); await page.calendar.controls.filters.coursesFilter.years[0].courses[0].toggle(); @@ -822,28 +822,28 @@ module('Acceptance | Dashboard Calendar', function (hooks) { test('test course and session type filter together', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), course: 1, sessionTypeId: 1, }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), course: 2, sessionTypeId: 2, }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), course: 1, sessionTypeId: 2, }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); assert.strictEqual(page.calendar.calendar.weekly.events.length, 3); @@ -864,7 +864,7 @@ module('Acceptance | Dashboard Calendar', function (hooks) { vocabulary, }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); assert.notOk(page.calendar.filterTags.clearAll.isPresent); assert.strictEqual(page.calendar.filterTags.tags.length, 0); @@ -901,7 +901,7 @@ module('Acceptance | Dashboard Calendar', function (hooks) { }); test('clear all detail filters', async function (assert) { - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); await page.calendar.controls.showCourseFilters.toggle.secondLabel.click(); assert.notOk(page.calendar.filterTags.clearAll.isPresent); @@ -930,7 +930,7 @@ module('Acceptance | Dashboard Calendar', function (hooks) { }); test('filter tags work properly', async function (assert) { - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); await page.calendar.controls.showCourseFilters.toggle.secondLabel.click(); assert.notOk(page.calendar.filterTags.clearAll.isPresent); @@ -995,19 +995,19 @@ module('Acceptance | Dashboard Calendar', function (hooks) { vocabulary, }); const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), sessionTerms: [{ id: 1 }], }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), sessionTerms: [{ id: 1 }], }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); assert.strictEqual(page.calendar.calendar.weekly.events.length, 2); await page.calendar.controls.filters.vocabularyFilter.vocabularies[0].selectedTermTree.checkboxes[0].click(); @@ -1026,20 +1026,20 @@ module('Acceptance | Dashboard Calendar', function (hooks) { sessionIds: [1], }); const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), sessionTerms: [{ id: 1 }], }); - this.server.create('userevent', { - user: this.user.id, + this.server.create('schoolevent', { + school: this.school.id, startDate: today.toJSDate(), endDate: today.plus({ hour: 1 }).toJSDate(), sessionTerms: [], }); - await page.visit({ show: 'calendar', view: 'week' }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); await page.calendar.controls.showFilters.toggle.secondLabel.click(); assert.strictEqual(page.calendar.calendar.weekly.events.length, 2); await page.calendar.controls.filters.vocabularyFilter.vocabularies[0].selectedTermTree.checkboxes[0].click(); From a9db9f6d5ea4c8528dfaf57da0d875c5383b4c99 Mon Sep 17 00:00:00 2001 From: Stefan Topfstedt Date: Wed, 17 Sep 2025 16:05:38 -0700 Subject: [PATCH 5/5] adds coverage on filter resets to dashboard calendar acceptance tests. --- .../acceptance/dashboard/calendar-test.js | 157 ++++++++++++++++++ 1 file changed, 157 insertions(+) diff --git a/packages/frontend/tests/acceptance/dashboard/calendar-test.js b/packages/frontend/tests/acceptance/dashboard/calendar-test.js index 83ad582311..5bf94f4b18 100644 --- a/packages/frontend/tests/acceptance/dashboard/calendar-test.js +++ b/packages/frontend/tests/acceptance/dashboard/calendar-test.js @@ -688,6 +688,14 @@ module('Acceptance | Dashboard Calendar', function (hooks) { assert.ok(page.calendar.controls.userContextFilter.admin.isActive); }); + test('filter toggle not present on my-schedule', async function (assert) { + await setupAuthentication({ school: this.school }, true); + await page.visit({ show: 'calendar' }); + assert.notOk(page.calendar.controls.showFilters.isPresent); + await page.calendar.controls.mySchedule.toggle.secondLabel.click(); + assert.ok(page.calendar.controls.showFilters.isPresent); + }); + test('test session type filter', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); this.server.create('schoolevent', { @@ -716,6 +724,32 @@ module('Acceptance | Dashboard Calendar', function (hooks) { assert.strictEqual(page.calendar.calendar.weekly.events.length, 0); }); + test('test session type filter resets when switching to my-schedule', async function (assert) { + const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + sessionTypeId: 1, + }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + sessionTypeId: 2, + }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); + await page.calendar.controls.showFilters.toggle.secondLabel.click(); + await page.calendar.controls.filters.sessionTypesFilter.sessionTypes[0].click(); + + assert.strictEqual( + currentURL(), + '/dashboard/calendar?mySchedule=false&sessionTypes=1&showFilters=true', + ); + await page.calendar.controls.mySchedule.toggle.firstLabel.click(); + assert.strictEqual(currentURL(), '/dashboard/calendar'); + }); + test('test course level filter', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); this.server.create('schoolevent', { @@ -741,6 +775,33 @@ module('Acceptance | Dashboard Calendar', function (hooks) { assert.strictEqual(page.calendar.calendar.weekly.events.length, 0); }); + test('test course level filter resets when switching to my-schedule', async function (assert) { + const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + courseLevel: 1, + }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + courseLevel: 1, + }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); + await page.calendar.controls.showFilters.toggle.secondLabel.click(); + await page.calendar.controls.showCourseFilters.toggle.secondLabel.click(); + await page.calendar.controls.filters.courseLevelsFilter.courseLevels[0].click(); + + assert.strictEqual( + currentURL(), + '/dashboard/calendar?courseFilters=false&courseLevels=1&mySchedule=false&showFilters=true', + ); + await page.calendar.controls.mySchedule.toggle.firstLabel.click(); + assert.strictEqual(currentURL(), '/dashboard/calendar'); + }); + test('test cohort filter', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); this.server.create('schoolevent', { @@ -768,6 +829,34 @@ module('Acceptance | Dashboard Calendar', function (hooks) { assert.strictEqual(page.calendar.calendar.weekly.events.length, 0); }); + test('test cohort level filter resets when switching to my-schedule', async function (assert) { + const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + cohorts: [{ id: 1 }], + }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + cohorts: [{ id: 1 }], + }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); + await page.calendar.controls.showFilters.toggle.secondLabel.click(); + await page.calendar.controls.showCourseFilters.toggle.secondLabel.click(); + assert.strictEqual(page.calendar.calendar.weekly.events.length, 2); + + await page.calendar.controls.filters.cohortsFilter.cohorts[1].toggle(); + assert.strictEqual( + currentURL(), + '/dashboard/calendar?cohorts=1&courseFilters=false&mySchedule=false&showFilters=true', + ); + await page.calendar.controls.mySchedule.toggle.firstLabel.click(); + assert.strictEqual(currentURL(), '/dashboard/calendar'); + }); + test('test cohort filter on page load ilios/ilios#5699', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); this.server.create('schoolevent', { @@ -820,6 +909,38 @@ module('Acceptance | Dashboard Calendar', function (hooks) { assert.strictEqual(page.calendar.calendar.weekly.events.length, 1); }); + test('test course filter resets when switching to my-schedule', async function (assert) { + const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + course: 1, + }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + course: 2, + }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + course: 1, + }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); + await page.calendar.controls.showFilters.toggle.secondLabel.click(); + await page.calendar.controls.filters.coursesFilter.years[0].courses[0].toggle(); + + assert.strictEqual( + currentURL(), + '/dashboard/calendar?courses=1&mySchedule=false&showFilters=true', + ); + await page.calendar.controls.mySchedule.toggle.firstLabel.click(); + assert.strictEqual(currentURL(), '/dashboard/calendar'); + }); + test('test course and session type filter together', async function (assert) { const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); this.server.create('schoolevent', { @@ -1017,6 +1138,42 @@ module('Acceptance | Dashboard Calendar', function (hooks) { assert.strictEqual(page.calendar.calendar.weekly.events.length, 0); }); + test('test term filter resets when switching to my-schedule', async function (assert) { + const vocabulary = this.server.create('vocabulary', { + school: this.school, + }); + this.server.create('term', { + vocabulary, + sessionIds: [1, 2], + }); + this.server.create('term', { + vocabulary, + }); + const today = DateTime.fromObject({ hour: 8, minute: 8, second: 8 }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + sessionTerms: [{ id: 1 }], + }); + this.server.create('schoolevent', { + school: this.school.id, + startDate: today.toJSDate(), + endDate: today.plus({ hour: 1 }).toJSDate(), + sessionTerms: [{ id: 1 }], + }); + await page.visit({ show: 'calendar', view: 'week', mySchedule: false }); + await page.calendar.controls.showFilters.toggle.secondLabel.click(); + await page.calendar.controls.filters.vocabularyFilter.vocabularies[0].selectedTermTree.checkboxes[0].click(); + + assert.strictEqual( + currentURL(), + '/dashboard/calendar?mySchedule=false&showFilters=true&terms=1', + ); + await page.calendar.controls.mySchedule.toggle.firstLabel.click(); + assert.strictEqual(currentURL(), '/dashboard/calendar'); + }); + test('clear vocab filter #3450', async function (assert) { const vocabulary = this.server.create('vocabulary', { school: this.school,