diff --git a/assets/js/src/settings/pages/advanced/index.tsx b/assets/js/src/settings/pages/advanced/index.tsx
index 3aa5c075c8..62680cfc68 100644
--- a/assets/js/src/settings/pages/advanced/index.tsx
+++ b/assets/js/src/settings/pages/advanced/index.tsx
@@ -7,6 +7,7 @@ import Transactional from './transactional';
import InactiveSubscribers from './inactive_subscribers';
import ShareData from './share_data';
import Captcha from './captcha';
+import Reinstall from './reinstall';
export default function Advanced() {
return (
@@ -19,6 +20,7 @@ export default function Advanced() {
+
);
}
diff --git a/assets/js/src/settings/pages/advanced/reinstall.tsx b/assets/js/src/settings/pages/advanced/reinstall.tsx
new file mode 100644
index 0000000000..5161ac4180
--- /dev/null
+++ b/assets/js/src/settings/pages/advanced/reinstall.tsx
@@ -0,0 +1,34 @@
+import React from 'react';
+
+import { t } from 'common/functions';
+import { GlobalContext } from 'context';
+import { useAction } from 'settings/store/hooks';
+import { Label, Inputs } from 'settings/components';
+
+export default function Reinstall() {
+ const reinstall = useAction('reinstall');
+ const { notices } = React.useContext(GlobalContext);
+ const onClick = async () => {
+ if (window.confirm(t('reinstallConfirmation'))) { // eslint-disable-line
+ type Result = { type: 'SAVE_FAILED' | 'SAVE_DONE', error?: any }
+ const action = (await reinstall()) as any as Result;
+ if (action.type === 'SAVE_FAILED') {
+ notices.error(action.error.map((err) => {err}
), { scroll: true });
+ } else {
+ window.location.href = 'admin.php?page=mailpoet-newsletters';
+ }
+ }
+ };
+ return (
+ <>
+
+
+
+
+ >
+ );
+}
diff --git a/assets/js/src/settings/store/actions.ts b/assets/js/src/settings/store/actions.ts
index ea3e157890..7c851d6cb5 100644
--- a/assets/js/src/settings/store/actions.ts
+++ b/assets/js/src/settings/store/actions.ts
@@ -188,3 +188,18 @@ export function* installPremiumPlugin() {
}
return yield* activatePremiumPlugin(true);
}
+
+export function* reinstall() {
+ MailPoet.Modal.loading(true);
+ const { success, error } = yield {
+ type: 'CALL_API',
+ endpoint: 'setup',
+ action: 'reset',
+ };
+ MailPoet.Modal.loading(false);
+ if (!success) {
+ return { type: 'SAVE_FAILED', error };
+ }
+ yield { type: 'TRACK_REINSTALLED' };
+ return { type: 'SAVE_DONE' };
+}
diff --git a/assets/js/src/settings/store/controls.ts b/assets/js/src/settings/store/controls.ts
index 3e994920a0..64a4e2559a 100644
--- a/assets/js/src/settings/store/controls.ts
+++ b/assets/js/src/settings/store/controls.ts
@@ -31,3 +31,10 @@ export function TRACK_SETTINGS_SAVED() {
}
MailPoet.trackEvent('User has saved Settings', data);
}
+
+export function TRACK_REINSTALLED() {
+ MailPoet.trackEvent(
+ 'User has reinstalled MailPoet via Settings',
+ { 'MailPoet Free version': MailPoet.version }
+ );
+}