Skip to content

Commit 5b2bbcd

Browse files
authored
[ENG-7784][ENG-8043] Linked services project page + bug fixes (#2564)
* linked services project page + bug fixes * add edit button * fix tests
1 parent 2b183bc commit 5b2bbcd

File tree

9 files changed

+101
-12
lines changed

9 files changed

+101
-12
lines changed

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: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
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+
.table-row {
13+
border-bottom: 1px solid $color-border-gray;
14+
}
15+
16+
.table-cell {
17+
padding-bottom: 10px;
18+
padding-top: 10px;
19+
}
20+
21+
.logo {
22+
max-width: 50px;
23+
max-height: 50px;
24+
}

app/guid-node/links/template.hbs

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,35 @@
1-
<p>
2-
{{!-- Placeholder for the links page --}}
3-
</p>
1+
<h2>{{t 'links.linked-services'}}</h2>
2+
3+
<table local-class='table'>
4+
<thead>
5+
<tr local-class='table-row'>
6+
<th local-class='table-header'>{{t 'links.linked-service'}}</th>
7+
<th local-class='table-header'>{{t 'links.display-name'}}</th>
8+
<th local-class='table-header'>{{t 'links.resource-type'}}</th>
9+
<th local-class='table-header'>
10+
{{#if this.currentUserCanEdit}}
11+
<OsfLink
12+
@route='guid-node.addons'
13+
@queryParams={{hash activeFilterType='verified-link'}}
14+
@models={{array this.model.node.id}}
15+
>
16+
{{t 'links.edit'}}
17+
</OsfLink>
18+
{{/if}}
19+
</th>
20+
</tr>
21+
</thead>
22+
<tbody>
23+
{{#each this.model.configuredLinkAddons as |configuredLinkAddon|}}
24+
<tr local-class='table-row'>
25+
<td local-class='table-cell'>
26+
<img alt={{t 'links.logo'}} local-class='logo' src={{configuredLinkAddon.externalLinkService.iconUrl}}>
27+
<span>{{configuredLinkAddon.externalLinkService.displayName}}</span>
28+
</td>
29+
<td local-class='table-cell'>{{configuredLinkAddon.displayName}}</td>
30+
<td local-class='table-cell'>{{configuredLinkAddon.resourceType}}</td>
31+
<td local-class='table-cell'><a href={{configuredLinkAddon.targetUrl}}>{{t 'links.link'}}</a></td>
32+
</tr>
33+
{{/each}}
34+
</tbody>
35+
</table>

app/models/configured-link-addon.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import ConfiguredAddonModel from './configured-addon';
1313

1414
export default class ConfiguredLinkAddonModel extends ConfiguredAddonModel {
1515
@attr('string') targetId!: string;
16+
@attr('string') targetUrl!: string;
1617
@attr('string') resourceType!: SupportedResourceTypes;
1718

1819
@belongsTo('external-link-service', { inverse: null })

app/models/resource-reference.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ import ConfiguredCitationAddonModel from './configured-citation-addon';
66
import ConfiguredComputingAddonModel from './configured-computing-addon';
77

88
export default class ResourceReferenceModel extends Model {
9-
109
@attr('fixstring') resourceUri!: string;
1110

1211
@hasMany('configured-storage-addon', { inverse: 'authorizedResource' })

lib/osf-components/addon/components/addons-service/configured-addon-edit/component.ts

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,9 @@ export default class ConfiguredAddonEdit extends Component<Args> {
2727
@tracked selectedFolder = this.args.configuredAddon?.rootFolder;
2828
@tracked selectedFolderDisplayName = this.args.configuredAddon?.rootFolderName;
2929
@tracked currentItems: Item[] = [];
30-
@tracked selectedItem = (this.args.configuredAddon as ConfiguredLinkAddonModel).targetId;
31-
@tracked selectedItemDisplayName = (this.args.configuredAddon as ConfiguredLinkAddonModel).targetItemName;
32-
@tracked selectedResourceType = (this.args.configuredAddon as ConfiguredLinkAddonModel).resourceType;
33-
30+
@tracked selectedItem = '';
31+
@tracked selectedItemDisplayName = '';
32+
@tracked selectedResourceType = '';
3433
originalName = this.displayName;
3534
originalRootFolder = this.selectedFolder;
3635
originalSelectedItem = this.selectedItem;
@@ -48,7 +47,9 @@ export default class ConfiguredAddonEdit extends Component<Args> {
4847
this.defaultKwargs['filterItems'] = ItemType.Collection;
4948
}
5049
if (this.args.configuredAddon instanceof ConfiguredLinkAddonModel) {
51-
// noop
50+
this.selectedItem = (this.args.configuredAddon as ConfiguredLinkAddonModel).targetId;
51+
this.selectedItemDisplayName = (this.args.configuredAddon as ConfiguredLinkAddonModel).targetItemName;
52+
this.selectedResourceType = (this.args.configuredAddon as ConfiguredLinkAddonModel).resourceType;
5253
}
5354
}
5455
if (this.args.authorizedAccount) {

tests/integration/components/addons-service/configured-addon-edit/component-test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ module('Integration | Component | addons-service | configured-addon-edit', funct
9292
const args = {
9393
rootFolder: 'root-1-1',
9494
displayName: 'My configured addon',
95-
resourceType: undefined,
96-
targetId: undefined,
95+
resourceType: '',
96+
targetId: '',
9797
};
9898
assert.ok(this.onSave.calledOnceWith(args), 'Save action was called with selected folder id');
9999
});

translations/en-us.yml

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,14 @@ addons:
376376
error-loading-items: 'Error loading items'
377377
success: 'Successfully updated {configurationName}'
378378
error: 'Error updating {configurationName}'
379-
379+
links:
380+
linked-services: 'Linked Services'
381+
linked-service: 'Linked Service'
382+
display-name: 'Display Name'
383+
resource-type: 'Resource Type'
384+
link: 'Link'
385+
edit: 'Edit'
386+
icon: '{addonName} icon'
380387
metadata:
381388
tab-title: 'Metadata'
382389
main-tab: 'OSF'

0 commit comments

Comments
 (0)