diff --git a/ghost/admin/app/components/modal-delete-integration.hbs b/ghost/admin/app/components/modal-delete-integration.hbs
deleted file mode 100644
index eb4a58e1f6..0000000000
--- a/ghost/admin/app/components/modal-delete-integration.hbs
+++ /dev/null
@@ -1,17 +0,0 @@
-
-{{svg-jar "close"}}Close
-
-
- Deleting this integration will remove all webhooks and api keys associated with it.
-
-
-
diff --git a/ghost/admin/app/components/modal-delete-integration.js b/ghost/admin/app/components/modal-delete-integration.js
deleted file mode 100644
index 7fa262b9ff..0000000000
--- a/ghost/admin/app/components/modal-delete-integration.js
+++ /dev/null
@@ -1,26 +0,0 @@
-import ModalComponent from 'ghost-admin/components/modal-base';
-import {alias} from '@ember/object/computed';
-import {inject as service} from '@ember/service';
-import {task} from 'ember-concurrency';
-
-export default ModalComponent.extend({
- router: service(),
- feature: service(),
- notifications: service(),
- integration: alias('model'),
- actions: {
- confirm() {
- this.deleteIntegration.perform();
- }
- },
- deleteIntegration: task(function* () {
- try {
- yield this.confirm();
- this.router.transitionTo('settings.integrations');
- } catch (error) {
- this.notifications.showAPIError(error, {key: 'integration.delete.failed'});
- } finally {
- this.send('closeModal');
- }
- }).drop()
-});
diff --git a/ghost/admin/app/components/settings/integrations/delete-integration-modal.hbs b/ghost/admin/app/components/settings/integrations/delete-integration-modal.hbs
new file mode 100644
index 0000000000..a7a72e93d0
--- /dev/null
+++ b/ghost/admin/app/components/settings/integrations/delete-integration-modal.hbs
@@ -0,0 +1,20 @@
+
+
+
+
+
+ Deleting this integration will remove all webhooks and api keys associated with it.
+
+
+
+
\ No newline at end of file
diff --git a/ghost/admin/app/components/settings/integrations/delete-integration-modal.js b/ghost/admin/app/components/settings/integrations/delete-integration-modal.js
new file mode 100644
index 0000000000..c9ae9ab505
--- /dev/null
+++ b/ghost/admin/app/components/settings/integrations/delete-integration-modal.js
@@ -0,0 +1,29 @@
+import Component from '@glimmer/component';
+import {inject as service} from '@ember/service';
+import {task} from 'ember-concurrency';
+
+export default class DeleteIntegrationModal extends Component {
+ @service notifications;
+ @service router;
+
+ @task({drop: true})
+ *deleteIntegrationTask() {
+ try {
+ const {integration} = this.args.data;
+
+ if (integration.isDeleted) {
+ return true;
+ }
+
+ yield integration.destroyRecord();
+
+ this.notifications.closeAlerts('integration.delete');
+ this.router.transitionTo('settings.integrations');
+ return true;
+ } catch (error) {
+ this.notifications.showAPIError(error, {key: 'integration.delete.failed'});
+ } finally {
+ this.args.close();
+ }
+ }
+}
diff --git a/ghost/admin/app/controllers/settings/integration.js b/ghost/admin/app/controllers/settings/integration.js
index be288b0ca5..0fbd69085d 100644
--- a/ghost/admin/app/controllers/settings/integration.js
+++ b/ghost/admin/app/controllers/settings/integration.js
@@ -1,4 +1,5 @@
import Controller from '@ember/controller';
+import DeleteIntegrationModal from '../../components/settings/integrations/delete-integration-modal';
import config from 'ghost-admin/config/environment';
import copyTextToClipboard from 'ghost-admin/utils/copy-text-to-clipboard';
import {
@@ -14,11 +15,11 @@ import {tracked} from '@glimmer/tracking';
export default class IntegrationController extends Controller {
@service config;
@service ghostPaths;
+ @service modals;
imageExtensions = IMAGE_EXTENSIONS;
imageMimeTypes = IMAGE_MIME_TYPES;
- @tracked showDeleteIntegrationModal = false;
@tracked showRegenerateKeyModal = false;
@tracked showUnsavedChangesModal = false;
@tracked selectedApiKey = null;
@@ -148,22 +149,12 @@ export default class IntegrationController extends Controller {
return transition.retry();
}
- @action
- deleteIntegration(event) {
- event?.preventDefault();
- this.integration.destroyRecord();
- }
-
@action
confirmIntegrationDeletion(event) {
event?.preventDefault();
- this.showDeleteIntegrationModal = true;
- }
-
- @action
- cancelIntegrationDeletion(event) {
- event?.preventDefault();
- this.showDeleteIntegrationModal = false;
+ return this.modals.open(DeleteIntegrationModal, {
+ integration: this.integration
+ });
}
@action
diff --git a/ghost/admin/app/templates/settings/integration.hbs b/ghost/admin/app/templates/settings/integration.hbs
index 5bdfe9912f..aa2692f199 100644
--- a/ghost/admin/app/templates/settings/integration.hbs
+++ b/ghost/admin/app/templates/settings/integration.hbs
@@ -215,7 +215,7 @@