@@ -7,10 +7,12 @@ import { Item, ItemType } from 'ember-osf-web/models/addon-operation-invocation'
77import AuthorizedAccountModel from 'ember-osf-web/models/authorized-account' ;
88import AuthorizedCitationAccountModel from 'ember-osf-web/models/authorized-citation-account' ;
99import AuthorizedComputingAccountModel from 'ember-osf-web/models/authorized-computing-account' ;
10+ import AuthorizedLinkAccountModel from 'ember-osf-web/models/authorized-link-account' ;
1011import AuthorizedStorageAccountModel from 'ember-osf-web/models/authorized-storage-account' ;
1112import ConfiguredAddonModel from 'ember-osf-web/models/configured-addon' ;
1213import ConfiguredCitationAddonModel from 'ember-osf-web/models/configured-citation-addon' ;
1314import ConfiguredComputingAddonModel from 'ember-osf-web/models/configured-computing-addon' ;
15+ import ConfiguredLinkAddonModel from 'ember-osf-web/models/configured-link-addon' ;
1416import ConfiguredStorageAddonModel from 'ember-osf-web/models/configured-storage-addon' ;
1517
1618
@@ -25,9 +27,15 @@ export default class ConfiguredAddonEdit extends Component<Args> {
2527 @tracked selectedFolder = this . args . configuredAddon ?. rootFolder ;
2628 @tracked selectedFolderDisplayName = this . args . configuredAddon ?. rootFolderName ;
2729 @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 ;
2833
2934 originalName = this . displayName ;
3035 originalRootFolder = this . selectedFolder ;
36+ originalSelectedItem = this . selectedItem ;
37+ originalResourceType = this . selectedResourceType ;
38+
3139 defaultKwargs : any = { } ;
3240
3341 constructor ( owner : unknown , args : Args ) {
@@ -39,6 +47,9 @@ export default class ConfiguredAddonEdit extends Component<Args> {
3947 if ( this . args . configuredAddon instanceof ConfiguredCitationAddonModel ) {
4048 this . defaultKwargs [ 'filterItems' ] = ItemType . Collection ;
4149 }
50+ if ( this . args . configuredAddon instanceof ConfiguredLinkAddonModel ) {
51+ // noop
52+ }
4253 }
4354 if ( this . args . authorizedAccount ) {
4455 if ( this . args . authorizedAccount instanceof AuthorizedStorageAccountModel ) {
@@ -47,10 +58,17 @@ export default class ConfiguredAddonEdit extends Component<Args> {
4758 if ( this . args . authorizedAccount instanceof AuthorizedCitationAccountModel ) {
4859 this . defaultKwargs [ 'filterItems' ] = ItemType . Collection ;
4960 }
61+ if ( this . args . authorizedAccount instanceof AuthorizedLinkAccountModel ) {
62+ // noop
63+ }
5064 }
5165 }
5266
53- get requiresRootFolder ( ) {
67+ get isLinkAddon ( ) {
68+ return this . args . configuredAddon instanceof ConfiguredLinkAddonModel ;
69+ }
70+
71+ get requiresFilesWidget ( ) {
5472 return ! (
5573 this . args . authorizedAccount instanceof AuthorizedComputingAccountModel
5674 ||
@@ -64,33 +82,40 @@ export default class ConfiguredAddonEdit extends Component<Args> {
6482
6583 get disableSave ( ) {
6684 const displayNameUnchanged = this . displayName === this . originalName ;
67- const rootFolderUnchanged = this . requiresRootFolder && this . selectedFolder === this . originalRootFolder ;
68- const needsRootFolder = this . requiresRootFolder && ! this . selectedFolder ;
85+ const rootFolderUnchanged = this . requiresFilesWidget && ! this . isLinkAddon
86+ && this . selectedFolder === this . originalRootFolder ;
87+ const targetIdUnchanged = this . isLinkAddon && this . originalSelectedItem === this . selectedItem ;
88+ const resourceTypeUnchanged = this . originalResourceType === this . selectedResourceType ;
89+ const needsResourceType = this . isLinkAddon && ! this . selectedResourceType ;
90+ const needsTargetId = this . isLinkAddon && ! this . selectedItem ;
91+ const needsRootFolder = this . requiresFilesWidget && ! this . isLinkAddon && ! this . selectedFolder ;
6992
70- if ( this . invalidDisplayName || needsRootFolder ) {
93+ if ( this . invalidDisplayName || needsRootFolder || needsResourceType || needsTargetId ) {
7194 return true ;
7295 }
96+ if ( this . isLinkAddon ) {
97+ return targetIdUnchanged && resourceTypeUnchanged || this . args . onSave . isRunning ;
98+ }
7399 return ( rootFolderUnchanged && displayNameUnchanged ) || this . args . onSave . isRunning ;
74100 }
75101
76- get nameValid ( ) {
77- return ! this . invalidDisplayName && this . displayName !== this . originalName ;
78- }
79-
80- get folderValid ( ) {
81- return ! this . requiresRootFolder && this . selectedFolder && this . selectedFolder !== this . originalRootFolder ;
82- }
83-
84102 get onSaveArgs ( ) {
85103 return {
86104 displayName : this . displayName ,
87105 rootFolder : this . selectedFolder ,
106+ targetId : this . selectedItem ,
107+ resourceType : this . selectedResourceType ,
88108 } ;
89109 }
90110
91111 @action
92- selectFolder ( folder : Item ) {
93- this . selectedFolder = folder . itemId ;
94- this . selectedFolderDisplayName = folder . itemName ;
112+ selectItem ( item : Item ) {
113+ if ( this . isLinkAddon ) {
114+ this . selectedItem = item . itemId ;
115+ this . selectedItemDisplayName = item . itemName ;
116+ } else {
117+ this . selectedFolder = item . itemId ;
118+ this . selectedFolderDisplayName = item . itemName ;
119+ }
95120 }
96121}
0 commit comments