diff --git a/app/packages/addons-service/provider.ts b/app/packages/addons-service/provider.ts index 6a70156ee0e..afcba266267 100644 --- a/app/packages/addons-service/provider.ts +++ b/app/packages/addons-service/provider.ts @@ -6,6 +6,8 @@ import Store from '@ember-data/store'; import { tracked } from '@glimmer/tracking'; import { Task, task } from 'ember-concurrency'; import { taskFor } from 'ember-concurrency-ts'; +import Intl from 'ember-intl/services/intl'; +import Toast from 'ember-toastr/services/toast'; import NodeModel from 'ember-osf-web/models/node'; import CurrentUserService from 'ember-osf-web/services/current-user'; @@ -22,6 +24,7 @@ import ExternalStorageServiceModel from 'ember-osf-web/models/external-storage-s import ExternalComputingServiceModel from 'ember-osf-web/models/external-computing-service'; import ExternalCitationServiceModel from 'ember-osf-web/models/external-citation-service'; import { notifyPropertyChange } from '@ember/object'; +import captureException, { getApiErrorMessage } from 'ember-osf-web/utils/capture-exception'; export type AllProviderTypes = ExternalStorageServiceModel | @@ -44,6 +47,9 @@ interface ProviderTypeMapper { export default class Provider { + @service toast!: Toast; + @service intl!: Intl; + @tracked node?: NodeModel; @tracked serviceNode?: ResourceReferenceModel; @@ -123,9 +129,18 @@ export default class Provider { @task @waitFor async removeConfiguredAddon(selectedConfiguration: AllConfiguredAddonTypes) { - this.configuredAddons?.removeObject(selectedConfiguration); - notifyPropertyChange(this, 'configuredAddons'); - await selectedConfiguration?.destroyRecord(); + const errorMessage = this.intl.t('addons.provider.remove-configured-addon-error'); + const successMessage = this.intl.t('addons.provider.remove-configured-addon-success'); + try { + await selectedConfiguration?.destroyRecord(); + this.configuredAddons?.removeObject(selectedConfiguration); + notifyPropertyChange(this, 'configuredAddons'); + this.toast.success(successMessage); + } catch (e) { + captureException(e, { errorMessage }); + this.toast.error(getApiErrorMessage(e), errorMessage); + return; + } } @task diff --git a/translations/en-us.yml b/translations/en-us.yml index 4d4f0c6c272..04e2274b12e 100644 --- a/translations/en-us.yml +++ b/translations/en-us.yml @@ -222,6 +222,9 @@ dashboard: addons: heading: 'Add-ons' + provider: + remove-configured-addon-success: 'You have successfully removed this addon' + remove-configured-addon-error: 'There was a problem removing this addon' list: authorized-accounts-for-provider: 'Authorized accounts for {providerName}' authorized-accounts: 'Authorized accounts'