From accbf83b7ec43d237939f1bd88829f3b76fc293f Mon Sep 17 00:00:00 2001 From: Abram Booth Date: Wed, 10 Jun 2020 10:15:19 -0400 Subject: [PATCH 1/8] wip --- app/institutions/dashboard/controller.ts | 17 +++++++++++++++++ app/institutions/dashboard/template.hbs | 11 +++-------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/app/institutions/dashboard/controller.ts b/app/institutions/dashboard/controller.ts index bdcf5538e8a..bc2d34a6671 100644 --- a/app/institutions/dashboard/controller.ts +++ b/app/institutions/dashboard/controller.ts @@ -1,13 +1,17 @@ import { action, computed } from '@ember/object'; import { alias } from '@ember/object/computed'; +import { inject as service } from '@ember/service'; import Controller from '@ember/controller'; import { InstitutionsDashboardModel } from 'ember-osf-web/institutions/dashboard/route'; import InstitutionModel from 'ember-osf-web/models/institution'; import InstitutionDepartmentModel from 'ember-osf-web/models/institution-department'; import InstitutionSummaryMetricModel from 'ember-osf-web/models/institution-summary-metric'; +import CurrentUser from 'ember-osf-web/services/current-user'; export default class InstitutionsDashboardController extends Controller { + @service currentUser!: CurrentUser; + @alias('model.taskInstance.value') modelValue?: InstitutionsDashboardModel; @alias('modelValue.institution') institution?: InstitutionModel; @alias('modelValue.summaryMetrics') summaryMetrics?: InstitutionSummaryMetricModel; @@ -32,6 +36,19 @@ export default class InstitutionsDashboardController extends Controller { onCsvButtonMouseLeave() { this.set('csvImgSrc', '/assets/images/institutions/csv.svg'); } + + @action + async downloadCsv() { + const url = this.institution!.hasMany('userMetrics').link(); + const csvData = await this.currentUser.authenticatedAJAX({ + url, + headers: { Accept: 'text/csv' }, + }); + console.log({ url, csvData }); + const csvBlob = new Blob(csvData, { type: 'text/csv' }); + const csvUrl = URL.createObjectURL(csvBlob); + window.open(csvUrl, '_blank'); + } } declare module '@ember/controller' { diff --git a/app/institutions/dashboard/template.hbs b/app/institutions/dashboard/template.hbs index 29ccacdf895..6f8bd58c8cf 100644 --- a/app/institutions/dashboard/template.hbs +++ b/app/institutions/dashboard/template.hbs @@ -13,20 +13,15 @@ />
- {{!-- TODO: comment this back in when ENG-1810 is implemented + tested + merged--}} - {{!-- {{t - --}} + Date: Wed, 10 Jun 2020 11:00:15 -0400 Subject: [PATCH 2/8] csv download --- app/institutions/dashboard/controller.ts | 38 ++++++------------- app/institutions/dashboard/template.hbs | 16 +++++--- app/models/institution.ts | 5 --- .../assets/images/institutions/csv-hover.svg | 1 - public/assets/images/institutions/csv.svg | 1 - 5 files changed, 21 insertions(+), 40 deletions(-) delete mode 100644 public/assets/images/institutions/csv-hover.svg delete mode 100644 public/assets/images/institutions/csv.svg diff --git a/app/institutions/dashboard/controller.ts b/app/institutions/dashboard/controller.ts index bc2d34a6671..d8e7933ee72 100644 --- a/app/institutions/dashboard/controller.ts +++ b/app/institutions/dashboard/controller.ts @@ -1,8 +1,8 @@ -import { action, computed } from '@ember/object'; +import Controller from '@ember/controller'; import { alias } from '@ember/object/computed'; import { inject as service } from '@ember/service'; +import { task } from 'ember-concurrency-decorators'; -import Controller from '@ember/controller'; import { InstitutionsDashboardModel } from 'ember-osf-web/institutions/dashboard/route'; import InstitutionModel from 'ember-osf-web/models/institution'; import InstitutionDepartmentModel from 'ember-osf-web/models/institution-department'; @@ -18,37 +18,21 @@ export default class InstitutionsDashboardController extends Controller { @alias('modelValue.departmentMetrics') departmentMetrics?: InstitutionDepartmentModel[]; @alias('modelValue.totalUsers') totalUsers?: number; - csvImgSrc: string = '/assets/images/institutions/csv.svg'; - - // TODO: add csv link back when ENG-1810 is done - @computed('institution.links.csv') - get csvHref() { - // return this.institution ? this.institution.links.csv : '#'; - return '#'; - } - - @action - onCsvButtonMouseEnter() { - this.set('csvImgSrc', '/assets/images/institutions/csv-hover.svg'); - } - - @action - onCsvButtonMouseLeave() { - this.set('csvImgSrc', '/assets/images/institutions/csv.svg'); - } - - @action - async downloadCsv() { + @task({ drop: true }) + downloadCsv = task(function *(this: InstitutionsDashboardController) { const url = this.institution!.hasMany('userMetrics').link(); - const csvData = await this.currentUser.authenticatedAJAX({ + const csvData = yield this.currentUser.authenticatedAJAX({ url, headers: { Accept: 'text/csv' }, }); - console.log({ url, csvData }); - const csvBlob = new Blob(csvData, { type: 'text/csv' }); + const csvBlob = new File( + [csvData], + `user-metrics-${this.institution!.name.replace(' ', '-')}`, + { type: 'text/csv' }, + ); const csvUrl = URL.createObjectURL(csvBlob); window.open(csvUrl, '_blank'); - } + }); } declare module '@ember/controller' { diff --git a/app/institutions/dashboard/template.hbs b/app/institutions/dashboard/template.hbs index 6f8bd58c8cf..bd46aed5cde 100644 --- a/app/institutions/dashboard/template.hbs +++ b/app/institutions/dashboard/template.hbs @@ -13,15 +13,19 @@ />
- + {{#if this.downloadCsv.isRunning}} + + {{else}} + + {{/if}} + \ No newline at end of file diff --git a/public/assets/images/institutions/csv.svg b/public/assets/images/institutions/csv.svg deleted file mode 100644 index 0a963d4a8ba..00000000000 --- a/public/assets/images/institutions/csv.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file From 7f0849d5e557388a51e6727214338919f9233339 Mon Sep 17 00:00:00 2001 From: Yuhuai Liu Date: Wed, 10 Jun 2020 11:18:00 -0400 Subject: [PATCH 3/8] fix build error --- app/models/institution.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/institution.ts b/app/models/institution.ts index a6919af0e7c..b682bffbffb 100644 --- a/app/models/institution.ts +++ b/app/models/institution.ts @@ -6,7 +6,7 @@ import InstitutionSummaryMetricModel from 'ember-osf-web/models/institution-summ import InstitutionDepartmentsModel from './institution-department'; import InstitutionUserModel from './institution-user'; import NodeModel from './node'; -import OsfModel, { OsfLinks } from './osf-model'; +import OsfModel from './osf-model'; import RegistrationModel from './registration'; import UserModel from './user'; From 0f109cdece8821cf9f5c18c18a3255767f549fda Mon Sep 17 00:00:00 2001 From: Abram Booth Date: Wed, 10 Jun 2020 13:44:16 -0400 Subject: [PATCH 4/8] Blob instead of File --- app/institutions/dashboard/controller.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/institutions/dashboard/controller.ts b/app/institutions/dashboard/controller.ts index d8e7933ee72..83f78504076 100644 --- a/app/institutions/dashboard/controller.ts +++ b/app/institutions/dashboard/controller.ts @@ -25,9 +25,8 @@ export default class InstitutionsDashboardController extends Controller { url, headers: { Accept: 'text/csv' }, }); - const csvBlob = new File( + const csvBlob = new Blob( [csvData], - `user-metrics-${this.institution!.name.replace(' ', '-')}`, { type: 'text/csv' }, ); const csvUrl = URL.createObjectURL(csvBlob); From 2874b2c114d1bbe0b219ee0b09c327ab6adfea0c Mon Sep 17 00:00:00 2001 From: Abram Booth Date: Fri, 12 Jun 2020 11:00:19 -0400 Subject: [PATCH 5/8] use csv link --- app/institutions/dashboard/controller.ts | 26 ++++++++++-------------- app/institutions/dashboard/template.hbs | 22 +++++++++----------- 2 files changed, 21 insertions(+), 27 deletions(-) diff --git a/app/institutions/dashboard/controller.ts b/app/institutions/dashboard/controller.ts index 83f78504076..796197bcef3 100644 --- a/app/institutions/dashboard/controller.ts +++ b/app/institutions/dashboard/controller.ts @@ -1,13 +1,14 @@ import Controller from '@ember/controller'; +import { computed } from '@ember/object'; import { alias } from '@ember/object/computed'; import { inject as service } from '@ember/service'; -import { task } from 'ember-concurrency-decorators'; import { InstitutionsDashboardModel } from 'ember-osf-web/institutions/dashboard/route'; import InstitutionModel from 'ember-osf-web/models/institution'; import InstitutionDepartmentModel from 'ember-osf-web/models/institution-department'; import InstitutionSummaryMetricModel from 'ember-osf-web/models/institution-summary-metric'; import CurrentUser from 'ember-osf-web/services/current-user'; +import { addQueryParam } from 'ember-osf-web/utils/url-parts'; export default class InstitutionsDashboardController extends Controller { @service currentUser!: CurrentUser; @@ -18,20 +19,15 @@ export default class InstitutionsDashboardController extends Controller { @alias('modelValue.departmentMetrics') departmentMetrics?: InstitutionDepartmentModel[]; @alias('modelValue.totalUsers') totalUsers?: number; - @task({ drop: true }) - downloadCsv = task(function *(this: InstitutionsDashboardController) { - const url = this.institution!.hasMany('userMetrics').link(); - const csvData = yield this.currentUser.authenticatedAJAX({ - url, - headers: { Accept: 'text/csv' }, - }); - const csvBlob = new Blob( - [csvData], - { type: 'text/csv' }, - ); - const csvUrl = URL.createObjectURL(csvBlob); - window.open(csvUrl, '_blank'); - }); + @computed('institution') + get csvHref(): string { + const { institution } = this; + if (institution) { + const url = institution.hasMany('userMetrics').link(); + return addQueryParam(url, 'format', 'csv'); + } + return ''; + } } declare module '@ember/controller' { diff --git a/app/institutions/dashboard/template.hbs b/app/institutions/dashboard/template.hbs index bd46aed5cde..2e66db3359e 100644 --- a/app/institutions/dashboard/template.hbs +++ b/app/institutions/dashboard/template.hbs @@ -13,19 +13,17 @@ />
- + + {{/if}} Date: Fri, 12 Jun 2020 11:10:18 -0400 Subject: [PATCH 6/8] csv link style --- app/institutions/dashboard/styles.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/app/institutions/dashboard/styles.scss b/app/institutions/dashboard/styles.scss index f70c125373a..3ee33c804b3 100644 --- a/app/institutions/dashboard/styles.scss +++ b/app/institutions/dashboard/styles.scss @@ -24,6 +24,7 @@ } .csv-button { + display: inline-block; width: 40px; height: 40px; background: #fff; From 6662c2a4908178929430131fb363958d7099995d Mon Sep 17 00:00:00 2001 From: Fabrice Mizero Date: Fri, 26 Jun 2020 10:49:23 -0400 Subject: [PATCH 7/8] Bump version to 20.7.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c1ceff72979..61b224e8859 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "ember-osf-web", - "version": "20.6.0", + "version": "20.7.0", "description": "Ember front-end for the Open Science Framework", "license": "Apache-2.0", "author": "Center for Open Science ", From e6c53370ff224d8d7b21136635ea9fbf83bbd951 Mon Sep 17 00:00:00 2001 From: Fabrice Mizero Date: Wed, 1 Jul 2020 10:49:58 -0400 Subject: [PATCH 8/8] Update Changelog --- CHANGELOG.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9393baf67cb..bb9f94563b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [20.7.0] - 2020-07-01 +## Added +- user metrics CSV export on the institutional dashboard + ## [20.6.1] - 2020-06-29 ## Fixed - broken UI due to `ember-responsive` ignoring our `app/breakpoints.ts` @@ -1615,7 +1619,8 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ### Added - Quick Files -[Unreleased]: https://github.com/CenterForOpenScience/ember-osf-web/compare/20.6.1...develop +[Unreleased]: https://github.com/CenterForOpenScience/ember-osf-web/compare/20.7.0...develop +[20.7.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/20.7.0 [20.6.1]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/20.6.1 [20.6.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/20.6.0 [20.5.0]: https://github.com/CenterForOpenScience/ember-osf-web/releases/tag/20.5.0