@@ -24,6 +24,7 @@ import AuthorizedStorageAccountModel from 'ember-osf-web/models/authorized-stora
2424import ConfiguredCitationAddonModel from 'ember-osf-web/models/configured-citation-addon' ;
2525import UserReferenceModel from 'ember-osf-web/models/user-reference' ;
2626import ConfiguredLinkAddonModel from 'ember-osf-web/models/configured-link-addon' ;
27+ import ExternalRedirectServiceModel from 'ember-osf-web/models/external-redirect-service' ;
2728
2829interface FilterSpecificObject {
2930 modelName : string ;
@@ -47,6 +48,7 @@ export enum FilterTypes {
4748 CITATION_MANAGER = 'citation-manager' ,
4849 VERIFIED_LINK = 'verified-link' ,
4950 // CLOUD_COMPUTING = 'cloud-computing', // disabled because BOA is down
51+ REDIRECT_SERVICE = 'redirect-service' ,
5052}
5153
5254interface Args {
@@ -92,6 +94,12 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
9294 // list: A([]),
9395 // configuredAddons: A([]),
9496 // },
97+ [ FilterTypes . REDIRECT_SERVICE ] : {
98+ modelName : 'external-redirect-service' ,
99+ task : taskFor ( this . getRedirectAddonProviders ) ,
100+ list : A ( [ ] ) ,
101+ // configuredAddons: A([]),
102+ } ,
95103 } ;
96104 filterTypeMapper = new TrackedObject ( this . mapper ) ;
97105 @tracked filterText = '' ;
@@ -152,6 +160,10 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
152160 return activeFilterObject . task . isRunning || taskFor ( this . initialize ) . isRunning ;
153161 }
154162
163+ get selectedProviderIsRedirectService ( ) {
164+ return this . selectedProvider ?. provider instanceof ExternalRedirectServiceModel ;
165+ }
166+
155167 @action
156168 async configureProvider ( provider : Provider , configuredAddon : AllConfiguredAddonTypes ) {
157169 this . cancelSetup ( ) ;
@@ -204,6 +216,23 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
204216
205217 @action
206218 async acceptTerms ( ) {
219+ if ( this . selectedProviderIsRedirectService ) {
220+ const openURL = new URL ( ( this . selectedProvider ! . provider as ExternalRedirectServiceModel ) . redirectUrl ) ;
221+ openURL . searchParams . set ( 'nodeIri' , this . node . links . iri ! . toString ( ) ) ;
222+ const newWindow = window . open (
223+ openURL . toString ( ) ,
224+ '_blank' , 'popup,width=600,height=600,scrollbars=yes,resizable=yes' ,
225+ ) ;
226+ if ( newWindow ) {
227+ newWindow . focus ( ) ;
228+ } else {
229+ // this.toast.error(this.intl.t('addons.redirect.error'));
230+ this . toast . error ( 'You got ad blockers on this thing?' ) ;
231+ }
232+
233+ this . cancelSetup ( ) ;
234+ return ;
235+ }
207236 await taskFor ( this . selectedProvider ! . getAuthorizedAccounts ) . perform ( ) ;
208237 if ( this . selectedProvider ! . authorizedAccounts ! . length > 0 ) {
209238 this . pageMode = PageMode . NEW_OR_EXISTING_ACCOUNT ;
@@ -431,6 +460,17 @@ export default class AddonsServiceManagerComponent extends Component<Args> {
431460 activeFilterObject . list = serviceCitationProviders . sort ( this . providerSorter ) ;
432461 }
433462
463+ @task
464+ @waitFor
465+ async getRedirectAddonProviders ( ) {
466+ const activeFilterObject = this . filterTypeMapper [ FilterTypes . REDIRECT_SERVICE ] ;
467+
468+ const serviceRedirectProviders : Provider [ ] =
469+ await taskFor ( this . getExternalProviders )
470+ . perform ( activeFilterObject . modelName , activeFilterObject . configuredAddons ) ;
471+ activeFilterObject . list = serviceRedirectProviders . sort ( this . providerSorter ) ;
472+ }
473+
434474 providerSorter ( a : Provider , b : Provider ) {
435475 return a . provider . displayName . localeCompare ( b . provider . displayName ) ;
436476 }
0 commit comments