Skip to content

Commit f4800aa

Browse files
cslzchenadliusopaduchak
authored
[ENG-6835] VRL Project PR - FE (#2595)
Co-authored-by: Yuhuai Liu <yuhuai@cos.io> Co-authored-by: Oleh Paduchak <158075011+opaduchak@users.noreply.github.com>
1 parent 186fd80 commit f4800aa

38 files changed

+798
-120
lines changed
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import AddonServiceAdapter from './addon-service';
2+
3+
export default class AuthorizedLinkAccountAdapter extends AddonServiceAdapter {
4+
}
5+
6+
declare module 'ember-data/types/registries/adapter' {
7+
export default interface AdapterRegistry {
8+
'authorized-link-account': AuthorizedLinkAccountAdapter;
9+
} // eslint-disable-line semi
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import AddonServiceAdapter from './addon-service';
2+
3+
export default class ConfiguredLinkAddonAdapter extends AddonServiceAdapter {
4+
}
5+
6+
declare module 'ember-data/types/registries/adapter' {
7+
export default interface AdapterRegistry {
8+
'configured-link-addon': ConfiguredLinkAddonAdapter;
9+
} // eslint-disable-line semi
10+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import AddonServiceAdapter from './addon-service';
2+
3+
export default class ExternalLinkServiceAdapter extends AddonServiceAdapter {
4+
}
5+
6+
declare module 'ember-data/types/registries/adapter' {
7+
export default interface AdapterRegistry {
8+
'external-link-service': ExternalLinkServiceAdapter;
9+
} // eslint-disable-line semi
10+
}

app/guid-node/addons/index/controller.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
11
import Controller from '@ember/controller';
22
import { inject as service } from '@ember/service';
33
import Media from 'ember-responsive';
4+
import { tracked } from 'tracked-built-ins';
45

6+
enum FilterTypes {
7+
STORAGE = 'additional-storage',
8+
CITATION_MANAGER = 'citation-manager',
9+
VERIFIED_LINK = 'verified-link',
10+
// CLOUD_COMPUTING = 'cloud-computing', // disabled because BOA is down
11+
}
512
export default class GuidNodeAddonsController extends Controller {
613
@service media!: Media;
14+
@tracked tabIndex = 0;
15+
@tracked activeFilterType = FilterTypes.STORAGE;
16+
17+
queryParams = ['tabIndex', 'activeFilterType'];
718

819
get isMobile() {
920
return this.media.isMobile;

app/guid-node/addons/index/template.hbs

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,9 @@
33
<div local-class='addon-page-wrapper'>
44
<AddonsService::Manager
55
@node={{this.model}}
6+
@activeFilterType={{this.activeFilterType}}
7+
@updateActiveFilterType={{fn (mut this.activeFilterType)}}
8+
@updateTabIndex={{fn (mut this.tabIndex)}}
69
as |manager|
710
>
811
{{#if manager.selectedProvider}}
@@ -166,7 +169,7 @@
166169
<div
167170
data-test-configured-addon-name
168171
local-class='configured-addon-display-name'
169-
{{did-insert (perform configuredAddon.getRootFolderName)}}
172+
{{did-insert (perform configuredAddon.getSelectedItemName)}}
170173
>
171174
<span>{{configuredAddon.displayName}}</span>
172175
<span local-class='float-right'>
@@ -240,10 +243,18 @@
240243
{{manager.selectedConfiguration.displayName}}
241244
</div>
242245
<div>
243-
{{#if manager.selectedConfiguration.rootFolder}}
244-
{{manager.selectedConfiguration.rootFolderName}}
246+
{{#if (instance-of manager.selectedConfiguration 'ConfiguredLinkAddon')}}
247+
{{#if manager.selectedConfiguration.targetUrl}}
248+
{{manager.selectedConfiguration.targetItemName}}
249+
{{else}}
250+
{{t 'addons.list.target-not-set'}}
251+
{{/if}}
245252
{{else}}
246-
{{t 'addons.list.root-folder-not-set'}}
253+
{{#if manager.selectedConfiguration.rootFolder}}
254+
{{manager.selectedConfiguration.rootFolderName}}
255+
{{else}}
256+
{{t 'addons.list.root-folder-not-set'}}
257+
{{/if}}
247258
{{/if}}
248259
</div>
249260
<div>
@@ -274,6 +285,7 @@
274285
<AddonsService::ConfiguredAddonEdit
275286
@configuredAddon={{manager.selectedConfiguration}}
276287
@authorizedAccount={{manager.selectedAccount}}
288+
@supportedResourceTypes={{manager.selectedProvider.provider.supportedResourceTypes}}
277289
@onSave={{perform manager.saveOrCreateConfiguration}}
278290
@onCancel={{manager.cancelSetup}}
279291
/>
@@ -282,7 +294,8 @@
282294
{{/let}}
283295
{{else}}
284296
<AriaTabs
285-
@defaultIndex={{0}}
297+
@selectedIndex={{this.tabIndex}}
298+
@onSelect={{action (mut this.tabIndex)}}
286299
local-class='tabs'
287300
as |tab|
288301
>
@@ -324,7 +337,7 @@
324337
<Button
325338
data-test-addon-list-filter={{type}}
326339
data-analytics-name={{t (concat 'addons.list.filter.' type)}}
327-
local-class='filter-button {{if (eq manager.activeFilterType type) 'active'}}'
340+
local-class='filter-button {{if (eq this.activeFilterType type) 'active'}}'
328341
@layout='fake-link'
329342
{{on 'click' (fn manager.filterByAddonType type)}}
330343
>
@@ -364,7 +377,7 @@
364377
<Button
365378
data-test-addon-list-filter={{type}}
366379
data-analytics-name={{t (concat 'addons.list.filter.' type)}}
367-
local-class='filter-button {{if (eq manager.activeFilterType type) 'active'}}'
380+
local-class='filter-button {{if (eq this.activeFilterType type) 'active'}}'
368381
@layout='fake-link'
369382
{{on 'click' (fn manager.filterByAddonType type)}}
370383
>

app/guid-node/links/controller.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Controller from '@ember/controller';
2+
import { Permission } from 'ember-osf-web/models/osf-model';
3+
4+
export default class GuidNodeLinksController extends Controller {
5+
get currentUserCanEdit() {
6+
return this.model.node.currentUserPermissions.includes(Permission.Write);
7+
}
8+
}

app/guid-node/links/route.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import Route from '@ember/routing/route';
2+
import Store from '@ember-data/store';
3+
import { inject as service } from '@ember/service';
4+
5+
export default class GuidNodeLinks extends Route {
6+
@service store!: Store;
7+
8+
async model() {
9+
const node = await this.modelFor('guid-node').taskInstance;
10+
const resourceReferences = await this.store.query('resource-reference', {
11+
filter: {resource_uri: node.links.iri?.toString()},
12+
});
13+
const resourceReference = resourceReferences?.firstObject;
14+
const configuredLinkAddons = await resourceReference?.configuredLinkAddons;
15+
return await {node, configuredLinkAddons};
16+
}
17+
}

app/guid-node/links/styles.scss

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
.table {
2+
width: 100%;
3+
text-align: left;
4+
border-collapse: collapse;
5+
}
6+
7+
.table-header {
8+
padding-bottom: 10px;
9+
padding-top: 10px;
10+
}
11+
12+
.edit-header {
13+
min-width: 30px;
14+
}
15+
16+
.table-row {
17+
border-bottom: 1px solid $color-border-gray;
18+
}
19+
20+
.table-cell {
21+
padding-bottom: 10px;
22+
padding-top: 10px;
23+
}
24+
25+
.logo {
26+
max-width: 50px;
27+
max-height: 50px;
28+
}
29+
30+
.links-page-wrapper {
31+
margin: 20px;
32+
}
33+

app/guid-node/links/template.hbs

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
<div local-class='links-page-wrapper'>
2+
<h2>{{t 'links.linked-services'}}</h2>
3+
{{#if this.model.configuredLinkAddons}}
4+
<table local-class='table'>
5+
<thead>
6+
<tr local-class='table-row'>
7+
<th local-class='table-header'>{{t 'links.linked-service'}}</th>
8+
<th local-class='table-header'>{{t 'links.display-name'}}</th>
9+
<th local-class='table-header'>{{t 'links.resource-type'}}</th>
10+
<th local-class='table-header edit-header'>
11+
{{#if this.currentUserCanEdit}}
12+
<OsfLink
13+
@route='guid-node.addons'
14+
@queryParams={{hash
15+
activeFilterType='verified-link'
16+
tabIndex='1'
17+
}}
18+
@models={{array this.model.node.id}}
19+
>
20+
{{t 'links.edit'}}
21+
</OsfLink>
22+
{{/if}}
23+
</th>
24+
</tr>
25+
</thead>
26+
<tbody>
27+
{{#each this.model.configuredLinkAddons as |configuredLinkAddon|}}
28+
<tr local-class='table-row'>
29+
<td local-class='table-cell'>
30+
<img alt={{t 'links.logo'}} local-class='logo'
31+
src={{configuredLinkAddon.externalLinkService.iconUrl}}>
32+
<span>{{configuredLinkAddon.externalLinkService.displayName}}</span>
33+
</td>
34+
<td local-class='table-cell'>{{configuredLinkAddon.displayName}}</td>
35+
<td local-class='table-cell'>{{configuredLinkAddon.resourceType}}</td>
36+
<td local-class='table-cell'><a target='_blank' rel='noopener noreferrer' href={{configuredLinkAddon.targetUrl}}>{{t 'links.link'}}</a></td>
37+
</tr>
38+
{{/each}}
39+
</tbody>
40+
</table>
41+
{{else}}
42+
<p>{{t 'links.empty-screen-message'}}</p>
43+
{{#if this.currentUserCanEdit}}
44+
<p> {{t 'links.point-to-addons-message'}} <a href='/{{this.model.node.id}}/addons?activeFilterType=verified-link'>{{t 'addons.heading'}}</a></p>
45+
{{/if}}
46+
{{/if}}
47+
</div>

app/guid-node/template.hbs

Lines changed: 38 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -99,46 +99,49 @@
9999
@label={{t 'node.left_nav.registrations'}}
100100
/>
101101
{{/unless}}
102-
{{#unless this.currentUser.viewOnlyToken}}
103-
{{#if (and (not this.viewOnly) this.model.taskInstance.value.userHasReadPermission)}}
102+
{{#if (and (not this.viewOnly) this.model.taskInstance.value.userHasReadPermission)}}
103+
<leftNav.link
104+
data-test-contributors-link
105+
data-analytics-name='Contributors'
106+
@href='/{{this.model.taskInstance.value.id}}/contributors/'
107+
@icon='users'
108+
@label={{t 'node.left_nav.contributors'}}
109+
/>
110+
{{#if this.useGravyWaffle}}
104111
<leftNav.link
105-
data-test-contributors-link
106-
data-analytics-name='Contributors'
107-
@href='/{{this.model.taskInstance.value.id}}/contributors/'
108-
@icon='users'
109-
@label={{t 'node.left_nav.contributors'}}
112+
data-test-addons-link
113+
data-analytics-name='Add-ons'
114+
@route='guid-node.addons'
115+
@models={{array this.model.taskInstance.value.id}}
116+
@icon='database'
117+
@label={{t 'node.left_nav.add-ons'}}
110118
/>
111-
{{/if}}
112-
{{#if (and (not this.viewOnly) this.model.taskInstance.value.userHasWritePermission)}}
113-
{{#if this.useGravyWaffle}}
114-
<leftNav.link
115-
data-test-addons-link
116-
data-analytics-name='Add-ons'
117-
@route='guid-node.addons'
118-
@models={{array this.model.taskInstance.value.id}}
119-
@icon='database'
120-
@label={{t 'node.left_nav.add-ons'}}
121-
/>
122-
{{else}}
123-
<leftNav.link
124-
data-test-addons-link
125-
data-analytics-name='Add-ons'
126-
@href='/{{this.model.taskInstance.value.id}}/addons/'
127-
@icon='database'
128-
@label={{t 'node.left_nav.add-ons'}}
129-
/>
130-
{{/if}}
131-
{{/if}}
132-
{{#if (and (not this.viewOnly) this.model.taskInstance.value.userHasReadPermission)}}
119+
{{else}}
133120
<leftNav.link
134-
data-test-settings-link
135-
data-analytics-name='Settings'
136-
@href='/{{this.model.taskInstance.value.id}}/settings/'
137-
@icon='cogs'
138-
@label={{t 'node.left_nav.settings'}}
121+
data-test-addons-link
122+
data-analytics-name='Add-ons'
123+
@href='/{{this.model.taskInstance.value.id}}/addons/'
124+
@icon='database'
125+
@label={{t 'node.left_nav.add-ons'}}
139126
/>
140127
{{/if}}
141-
{{/unless}}
128+
{{/if}}
129+
<leftNav.link
130+
data-test-verified-links-link
131+
data-analytics-name='Linked services'
132+
@route='guid-node.links'
133+
@icon='link'
134+
@label={{t 'node.left_nav.links'}}
135+
/>
136+
{{#if (and (not this.viewOnly) this.model.taskInstance.value.userHasReadPermission)}}
137+
<leftNav.link
138+
data-test-settings-link
139+
data-analytics-name='Settings'
140+
@href='/{{this.model.taskInstance.value.id}}/settings/'
141+
@icon='cogs'
142+
@label={{t 'node.left_nav.settings'}}
143+
/>
144+
{{/if}}
142145
</layout.leftNavOld>
143146
<layout.main local-class='OverviewBody'>
144147
<div data-analytics-scope='Node' role='main'>

0 commit comments

Comments
 (0)