From 87c1bbc9d4e99583fa11273e689344c63ab859e3 Mon Sep 17 00:00:00 2001 From: Michael Chadwick Date: Mon, 18 Nov 2024 07:48:44 -0800 Subject: [PATCH 1/3] refactor --- packages/frontend/app/components/reports/list.js | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/packages/frontend/app/components/reports/list.js b/packages/frontend/app/components/reports/list.js index 40a62ae2a5..fd715d0c5d 100644 --- a/packages/frontend/app/components/reports/list.js +++ b/packages/frontend/app/components/reports/list.js @@ -88,11 +88,7 @@ export default class ReportsListComponent extends Component { } get decoratedReports() { - if (!this.subjectReportObjects?.isResolved) { - return []; - } - - return this.subjectReportObjects.value; + return this.subjectReportObjects?.isResolved ? this.subjectReportObjects.value : []; } get newReport() { @@ -103,17 +99,13 @@ export default class ReportsListComponent extends Component { return false; } - get subjectReportsFilteredByTitle() { + get filteredReports() { const filterTitle = this.args.titleFilter?.trim().toLowerCase() ?? ''; return this.decoratedReports.filter(({ title }) => title.trim().toLowerCase().includes(filterTitle), ); } - get filteredReports() { - return this.subjectReportsFilteredByTitle; - } - saveNewSubjectReport = dropTask(async (report) => { this.runningSubjectReport = null; this.newSubjectReport = await report.save(); From b0573413de8586ba5e486f95644ed5105bc81559 Mon Sep 17 00:00:00 2001 From: Michael Chadwick Date: Wed, 20 Nov 2024 11:11:23 -0800 Subject: [PATCH 2/3] showNewReportForm now tracked as queryParam and used to keep form open if set --- .../frontend/app/components/reports/list.hbs | 20 +++++++++---------- .../frontend/app/components/reports/list.js | 12 +++++------ .../frontend/app/components/reports/root.hbs | 4 ++++ packages/frontend/app/controllers/reports.js | 20 ++++++++++++++++++- packages/frontend/app/templates/reports.hbs | 4 ++++ .../tests/acceptance/reports/subjects-test.js | 5 ++++- .../components/reports/list-test.js | 11 ++++++++++ .../components/reports/root-test.js | 11 ++++++++++ 8 files changed, 68 insertions(+), 19 deletions(-) diff --git a/packages/frontend/app/components/reports/list.hbs b/packages/frontend/app/components/reports/list.hbs index 17b238852d..6c910fdaab 100644 --- a/packages/frontend/app/components/reports/list.hbs +++ b/packages/frontend/app/components/reports/list.hbs @@ -17,18 +17,18 @@
- {{#if this.showNewReportForm}} + {{#if @showNewReportForm}} {{/if}} @@ -47,13 +47,13 @@ {{/if}}
- {{#if this.runningSubjectReport}} + {{#if @runningSubjectReport}} diff --git a/packages/frontend/app/components/reports/list.js b/packages/frontend/app/components/reports/list.js index fd715d0c5d..eb968013f4 100644 --- a/packages/frontend/app/components/reports/list.js +++ b/packages/frontend/app/components/reports/list.js @@ -10,9 +10,7 @@ export default class ReportsListComponent extends Component { @service currentUser; @service reporting; - @tracked showNewReportForm; @tracked newSubjectReport; - @tracked runningSubjectReport; @tracked reportYear; userModel = new TrackedAsyncData(this.currentUser.getModel()); @@ -107,7 +105,7 @@ export default class ReportsListComponent extends Component { } saveNewSubjectReport = dropTask(async (report) => { - this.runningSubjectReport = null; + this.args.setRunningSubjectReport(null); this.newSubjectReport = await report.save(); this.showNewReportForm = false; }); @@ -120,7 +118,7 @@ export default class ReportsListComponent extends Component { runSubjectReport = restartableTask( async (subject, prepositionalObject, prepositionalObjectTableRowId, school) => { this.reportYear = null; - this.runningSubjectReport = { + this.args.setRunningSubjectReport({ subject, prepositionalObject, prepositionalObjectTableRowId, @@ -131,13 +129,13 @@ export default class ReportsListComponent extends Component { prepositionalObjectTableRowId, school, ), - }; + }); }, ); @action toggleNewReportForm() { - this.runningSubjectReport = null; - this.showNewReportForm = !this.showNewReportForm; + this.args.setRunningSubjectReport(null); + this.args.toggleNewReportForm; } } diff --git a/packages/frontend/app/components/reports/root.hbs b/packages/frontend/app/components/reports/root.hbs index f07dc04937..396f155ca4 100644 --- a/packages/frontend/app/components/reports/root.hbs +++ b/packages/frontend/app/components/reports/root.hbs @@ -4,5 +4,9 @@ @setSortReportsBy={{@sortReportsBy}} @titleFilter={{@titleFilter}} @changeTitleFilter={{@changeTitleFilter}} + @showNewReportForm={{@showNewReportForm}} + @toggleNewReportForm={{@toggleNewReportForm}} + @runningSubjectReport={{@runningSubjectReport}} + @setRunningSubjectReport={{@setRunningSubjectReport}} /> \ No newline at end of file diff --git a/packages/frontend/app/controllers/reports.js b/packages/frontend/app/controllers/reports.js index 8b470aeadd..e9ca720ace 100644 --- a/packages/frontend/app/controllers/reports.js +++ b/packages/frontend/app/controllers/reports.js @@ -1,16 +1,34 @@ import Controller from '@ember/controller'; import { tracked } from '@glimmer/tracking'; import { restartableTask, timeout } from 'ember-concurrency'; +import { action } from '@ember/object'; export default class ReportsController extends Controller { - queryParams = [{ sortReportsBy: 'sortBy' }, { titleFilter: 'filter' }]; + queryParams = [ + { sortReportsBy: 'sortBy' }, + { titleFilter: 'filter' }, + { showNewReportForm: 'showNewReportForm' }, + ]; @tracked sortReportsBy = 'title'; @tracked titleFilter = null; + @tracked showNewReportForm = false; + @tracked runningSubjectReport = null; changeTitleFilter = restartableTask(async (value) => { this.titleFilter = value; await timeout(250); return value; }); + + @action + setRunningSubjectReport(report) { + this.runningSubjectReport = report; + } + + @action + toggleNewReportForm() { + this.runningSubjectReport = null; + this.showNewReportForm = !this.showNewReportForm; + } } diff --git a/packages/frontend/app/templates/reports.hbs b/packages/frontend/app/templates/reports.hbs index 899e9c90b9..43bef86f8f 100644 --- a/packages/frontend/app/templates/reports.hbs +++ b/packages/frontend/app/templates/reports.hbs @@ -4,4 +4,8 @@ @setSortReportsBy={{set this "sortReportsBy"}} @titleFilter={{this.titleFilter}} @changeTitleFilter={{perform this.changeTitleFilter}} + @showNewReportForm={{this.showNewReportForm}} + @toggleNewReportForm={{this.toggleNewReportForm}} + @runningSubjectReport={{this.runningSubjectReport}} + @setRunningSubjectReport={{this.setRunningSubjectReport}} /> \ No newline at end of file diff --git a/packages/frontend/tests/acceptance/reports/subjects-test.js b/packages/frontend/tests/acceptance/reports/subjects-test.js index 1fdadc42f6..bb8ead4599 100644 --- a/packages/frontend/tests/acceptance/reports/subjects-test.js +++ b/packages/frontend/tests/acceptance/reports/subjects-test.js @@ -344,6 +344,9 @@ module('Acceptance | Reports - Subject Reports', function (hooks) { test('run subject report', async function (assert) { assert.expect(5); await page.visit(); + + console.log('currentURL()', page); + await page.root.list.toggleNewSubjectReportForm(); await page.root.list.newSubject.schools.choose('1'); await page.root.list.newSubject.subjects.choose('session'); @@ -369,7 +372,7 @@ module('Acceptance | Reports - Subject Reports', function (hooks) { }); await page.root.list.newSubject.run(); await percySnapshot(assert); - assert.strictEqual(currentURL(), '/reports'); + assert.strictEqual(currentURL(), '/reports?showNewReportForm=true'); assert.strictEqual( page.root.results.description, 'This report shows all Sessions associated with Course "course 0" (2015) in school 0.', diff --git a/packages/frontend/tests/integration/components/reports/list-test.js b/packages/frontend/tests/integration/components/reports/list-test.js index d3918cfb1c..1813301f44 100644 --- a/packages/frontend/tests/integration/components/reports/list-test.js +++ b/packages/frontend/tests/integration/components/reports/list-test.js @@ -32,6 +32,8 @@ module('Integration | Component | reports/list', function (hooks) { @setSortReportsBy={{(noop)}} @titleFilter='' @changeTitleFilter={{(noop)}} + @showNewReportForm={{false}} + @toggleNewReportForm={{(noop)}} />`); assert.strictEqual(component.table.reports.length, 2); @@ -48,17 +50,26 @@ module('Integration | Component | reports/list', function (hooks) { @setSortReportsBy={{(noop)}} @titleFilter='' @changeTitleFilter={{(noop)}} + @showNewReportForm={{false}} + @toggleNewReportForm={{(noop)}} />`); assert.notOk(component.table.isVisible); a11yAudit(this.element); }); test('toggle new report form', async function (assert) { + this.set('showNewReportForm', false); + this.set('toggleNewReportForm', () => { + this.set('showNewReportForm', !this.showNewReportForm); + }); + await render(hbs``); assert.notOk(component.newSubject.isVisible); await component.toggleNewSubjectReportForm(); diff --git a/packages/frontend/tests/integration/components/reports/root-test.js b/packages/frontend/tests/integration/components/reports/root-test.js index 17412338d7..3d1198d179 100644 --- a/packages/frontend/tests/integration/components/reports/root-test.js +++ b/packages/frontend/tests/integration/components/reports/root-test.js @@ -32,6 +32,8 @@ module('Integration | Component | reports/root', function (hooks) { @setSortReportsBy={{(noop)}} @titleFilter='' @changeTitleFilter={{(noop)}} + @showNewReportForm={{false}} + @toggleNewReportForm={{(noop)}} />`); assert.strictEqual(component.list.table.reports.length, 2); @@ -48,17 +50,26 @@ module('Integration | Component | reports/root', function (hooks) { @setSortReportsBy={{(noop)}} @titleFilter='' @changeTitleFilter={{(noop)}} + @showNewReportForm={{false}} + @toggleNewReportForm={{(noop)}} />`); assert.notOk(component.list.table.isVisible); a11yAudit(this.element); }); test('toggle new report form', async function (assert) { + this.set('showNewReportForm', false); + this.set('toggleNewReportForm', () => { + this.set('showNewReportForm', !this.showNewReportForm); + }); + await render(hbs``); assert.notOk(component.list.newSubject.isVisible); await component.list.toggleNewSubjectReportForm(); From 52367e75a9387b64232796f0d6fbe5a1568adca5 Mon Sep 17 00:00:00 2001 From: Michael Chadwick Date: Wed, 20 Nov 2024 14:06:46 -0800 Subject: [PATCH 3/3] remove console.log --- packages/frontend/tests/acceptance/reports/subjects-test.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/frontend/tests/acceptance/reports/subjects-test.js b/packages/frontend/tests/acceptance/reports/subjects-test.js index bb8ead4599..8aab7bdc74 100644 --- a/packages/frontend/tests/acceptance/reports/subjects-test.js +++ b/packages/frontend/tests/acceptance/reports/subjects-test.js @@ -344,9 +344,6 @@ module('Acceptance | Reports - Subject Reports', function (hooks) { test('run subject report', async function (assert) { assert.expect(5); await page.visit(); - - console.log('currentURL()', page); - await page.root.list.toggleNewSubjectReportForm(); await page.root.list.newSubject.schools.choose('1'); await page.root.list.newSubject.subjects.choose('session');