Skip to content

Commit 76a6b8d

Browse files
authored
Feature flag for SHARE download button (#2426)
- Ticket: [] - Feature flag: `share_download` ## Purpose - Move Institutional Dashboard Project/Registration/Preprint download button behind a feature flag ## Summary of Changes - Add new flag `share_download` - Show/hide download buttons on Institutional Dashboard based on this feature flag
1 parent 5835fdf commit 76a6b8d

File tree

6 files changed

+61
-40
lines changed

6 files changed

+61
-40
lines changed

app/config/environment.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ declare const config: {
196196
registrationFilesPage: string;
197197
verifyEmailModals: string;
198198
egapAdmins: string;
199+
shareDownload: string;
199200
};
200201
gReCaptcha: {
201202
siteKey: string;

app/institutions/dashboard/-components/object-list/component-test.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@ import { setupIntl } from 'ember-intl/test-support';
55
import { setupRenderingTest } from 'ember-qunit';
66
import { TestContext } from 'ember-test-helpers';
77
import { module, test } from 'qunit';
8+
import Service from '@ember/service';
9+
const featuresStub = Service.extend({
10+
isEnabled: () => true,
11+
});
812

913
import { OsfLinkRouterStub } from 'ember-osf-web/tests/integration/helpers/osf-link-router-stub';
1014

@@ -14,6 +18,7 @@ module('Integration | institutions | dashboard | -components | object-list', hoo
1418
setupIntl(hooks);
1519

1620
hooks.beforeEach(function(this: TestContext) {
21+
this.owner.register('service:features', featuresStub);
1722
this.owner.unregister('service:router');
1823
this.owner.register('service:router', OsfLinkRouterStub);
1924
const columns = [

app/institutions/dashboard/-components/object-list/component.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
import { action } from '@ember/object';
2+
import { inject as service } from '@ember/service';
23
import Component from '@glimmer/component';
34
import { tracked } from '@glimmer/tracking';
5+
import Features from 'ember-feature-flags/services/features';
46

57
import IndexCardSearchModel from 'ember-osf-web/models/index-card-search';
68
import InstitutionModel from 'ember-osf-web/models/institution';
79
import { SuggestedFilterOperators } from 'ember-osf-web/models/related-property-path';
810
import SearchResultModel from 'ember-osf-web/models/search-result';
911
import { Filter } from 'osf-components/components/search-page/component';
12+
import config from 'ember-osf-web/config/environment';
13+
14+
const shareDownloadFlag = config.featureFlagNames.shareDownload;
1015

1116
interface Column {
1217
name: string;
@@ -37,6 +42,7 @@ interface InstitutionalObjectListArgs {
3742
}
3843

3944
export default class InstitutionalObjectList extends Component<InstitutionalObjectListArgs> {
45+
@service features!: Features;
4046
@tracked activeFilters: Filter[] = [];
4147
@tracked page = '';
4248
@tracked sort = '-dateModified';
@@ -74,6 +80,10 @@ export default class InstitutionalObjectList extends Component<InstitutionalObje
7480
};
7581
}
7682

83+
get showDownloadButtons() {
84+
return this.features.isEnabled(shareDownloadFlag);
85+
}
86+
7787
downloadUrl(cardSearch: IndexCardSearchModel, format: string) {
7888
if (!cardSearch.links.self) {
7989
return '';

app/institutions/dashboard/-components/object-list/template.hbs

Lines changed: 42 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -86,47 +86,49 @@ as |list|>
8686
</OsfLink>
8787
</div>
8888
{{/if}}
89-
<ResponsiveDropdown @renderInPlace={{true}} @buttonStyling={{true}} as |dd| >
90-
<dd.trigger
91-
data-test-download-dropdown
92-
aria-label={{t 'institutions.dashboard.download_dropdown_label'}}
93-
local-class='download-dropdown-trigger'
94-
>
95-
<FaIcon @icon='download' />
96-
</dd.trigger>
97-
<dd.content local-class='download-dropdown-content'>
98-
<OsfLink
99-
data-test-download-csv-link
100-
data-analytics-name='Download CSV'
101-
local-class='download-link'
102-
{{on 'click' dd.close}}
103-
@href={{call (fn (action this.downloadCsvUrl list.latestIndexCardSearch))}}
104-
@target='_blank'
105-
>
106-
{{t 'institutions.dashboard.format_labels.csv'}}
107-
</OsfLink>
108-
<OsfLink
109-
data-test-download-tsv-link
110-
data-analytics-name='Download TSV'
111-
local-class='download-link'
112-
{{on 'click' dd.close}}
113-
@href={{call (fn (action this.downloadTsvUrl list.latestIndexCardSearch))}}
114-
@target='_blank'
89+
{{#if this.showDownloadButtons}}
90+
<ResponsiveDropdown @renderInPlace={{true}} @buttonStyling={{true}} as |dd| >
91+
<dd.trigger
92+
data-test-download-dropdown
93+
aria-label={{t 'institutions.dashboard.download_dropdown_label'}}
94+
local-class='download-dropdown-trigger'
11595
>
116-
{{t 'institutions.dashboard.format_labels.tsv'}}
117-
</OsfLink>
118-
<OsfLink
119-
data-test-download-json-link
120-
data-analytics-name='Download JSON'
121-
local-class='download-link'
122-
{{on 'click' dd.close}}
123-
@href={{call (fn (action this.downloadJsonUrl list.latestIndexCardSearch))}}
124-
@target='_blank'
125-
>
126-
{{t 'institutions.dashboard.format_labels.json'}}
127-
</OsfLink>
128-
</dd.content>
129-
</ResponsiveDropdown>
96+
<FaIcon @icon='download' />
97+
</dd.trigger>
98+
<dd.content local-class='download-dropdown-content'>
99+
<OsfLink
100+
data-test-download-csv-link
101+
data-analytics-name='Download CSV'
102+
local-class='download-link'
103+
{{on 'click' dd.close}}
104+
@href={{call (fn (action this.downloadCsvUrl list.latestIndexCardSearch))}}
105+
@target='_blank'
106+
>
107+
{{t 'institutions.dashboard.format_labels.csv'}}
108+
</OsfLink>
109+
<OsfLink
110+
data-test-download-tsv-link
111+
data-analytics-name='Download TSV'
112+
local-class='download-link'
113+
{{on 'click' dd.close}}
114+
@href={{call (fn (action this.downloadTsvUrl list.latestIndexCardSearch))}}
115+
@target='_blank'
116+
>
117+
{{t 'institutions.dashboard.format_labels.tsv'}}
118+
</OsfLink>
119+
<OsfLink
120+
data-test-download-json-link
121+
data-analytics-name='Download JSON'
122+
local-class='download-link'
123+
{{on 'click' dd.close}}
124+
@href={{call (fn (action this.downloadJsonUrl list.latestIndexCardSearch))}}
125+
@target='_blank'
126+
>
127+
{{t 'institutions.dashboard.format_labels.json'}}
128+
</OsfLink>
129+
</dd.content>
130+
</ResponsiveDropdown>
131+
{{/if}}
130132
</div>
131133
</div>
132134
</div>

config/environment.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,7 @@ module.exports = function(environment) {
315315
},
316316
registrationFilesPage: 'ember_registration_files_page',
317317
egapAdmins: 'egap_admins',
318+
shareDownload: 'share_download',
318319
},
319320
gReCaptcha: {
320321
siteKey: RECAPTCHA_SITE_KEY,

mirage/factories/root.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ const {
1010
navigation,
1111
storageI18n,
1212
verifyEmailModals,
13+
shareDownload,
1314
},
1415
} = config;
1516

@@ -35,6 +36,7 @@ export const defaultRootAttrs = {
3536
...Object.values(navigation),
3637
storageI18n,
3738
verifyEmailModals,
39+
shareDownload,
3840
])],
3941
message: 'Welcome to the OSF API.',
4042
version: '2.8',

0 commit comments

Comments
 (0)