diff --git a/app/assets/javascripts/discourse/app/controllers/preferences/interface.js b/app/assets/javascripts/discourse/app/controllers/preferences/interface.js
index 808f2c263de..622689240f2 100644
--- a/app/assets/javascripts/discourse/app/controllers/preferences/interface.js
+++ b/app/assets/javascripts/discourse/app/controllers/preferences/interface.js
@@ -58,6 +58,7 @@ export default Controller.extend({
"text_size",
"title_count_mode",
"skip_new_user_tips",
+ "seen_popups",
"color_scheme_id",
"dark_scheme_id",
];
@@ -418,5 +419,13 @@ export default Controller.extend({
lightStylesheet.remove();
}
},
+
+ resetSeenPopups() {
+ this.model.set("skip_new_user_tips", false);
+ this.model.set("seen_popups", null);
+ this.model.set("user_option.skip_new_user_tips", false);
+ this.model.set("user_option.seen_popups", null);
+ return this.model.save(["skip_new_user_tips", "seen_popups"]);
+ },
},
});
diff --git a/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs b/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs
index 9187cf88dec..91a27edf363 100644
--- a/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs
+++ b/app/assets/javascripts/discourse/app/templates/preferences/interface.hbs
@@ -117,6 +117,9 @@
+ {{#if this.site.onboarding_popup_types}}
+ {{i18n "user.reset_seen_popups"}}
+ {{/if}}
diff --git a/app/assets/javascripts/discourse/tests/acceptance/user-preferences-interface-test.js b/app/assets/javascripts/discourse/tests/acceptance/user-preferences-interface-test.js
index 7c36de796dc..c20de176fdd 100644
--- a/app/assets/javascripts/discourse/tests/acceptance/user-preferences-interface-test.js
+++ b/app/assets/javascripts/discourse/tests/acceptance/user-preferences-interface-test.js
@@ -16,6 +16,14 @@ import userFixtures from "discourse/tests/fixtures/user-fixtures";
acceptance("User Preferences - Interface", function (needs) {
needs.user();
+ let lastUserData;
+ needs.pretender((server, helper) => {
+ server.put("/u/eviltrout.json", (request) => {
+ lastUserData = helper.parsePostData(request.requestBody);
+ return helper.response({ user: {} });
+ });
+ });
+
test("font size change", async function (assert) {
removeCookie("text_size");
@@ -135,6 +143,25 @@ acceptance("User Preferences - Interface", function (needs) {
document.querySelector("meta[name='discourse_theme_id']").remove();
});
+
+ test("shows reset seen onboarding popups button", async function (assert) {
+ let site = Site.current();
+ site.set("onboarding_popup_types", { first_notification: 1 });
+
+ await visit("/u/eviltrout/preferences/interface");
+
+ assert.ok(
+ exists(".pref-reset-seen-popups"),
+ "has reset seen popups button"
+ );
+
+ await click(".pref-reset-seen-popups");
+
+ assert.deepEqual(lastUserData, {
+ seen_popups: "",
+ skip_new_user_tips: "false",
+ });
+ });
});
acceptance(
diff --git a/app/serializers/user_option_serializer.rb b/app/serializers/user_option_serializer.rb
index 19e7c794b0b..f36bb54686c 100644
--- a/app/serializers/user_option_serializer.rb
+++ b/app/serializers/user_option_serializer.rb
@@ -34,7 +34,8 @@ class UserOptionSerializer < ApplicationSerializer
:timezone,
:skip_new_user_tips,
:default_calendar,
- :oldest_search_log_date
+ :oldest_search_log_date,
+ :seen_popups,
def auto_track_topics_after_msecs
object.auto_track_topics_after_msecs || SiteSetting.default_other_auto_track_topics_after_msecs
diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml
index 6bc5ea925ca..e7c08d73729 100644
--- a/config/locales/client.en.yml
+++ b/config/locales/client.en.yml
@@ -1160,6 +1160,7 @@ en:
not_first_time: "Not your first time?"
skip_link: "Skip these tips"
read_later: "I'll read it later."
+ reset_seen_popups: "Show onboarding tips again"
theme_default_on_all_devices: "Make this the default theme on all my devices"
color_scheme_default_on_all_devices: "Set default color scheme(s) on all my devices"
color_scheme: "Color Scheme"
diff --git a/spec/requests/api/schemas/json/user_get_response.json b/spec/requests/api/schemas/json/user_get_response.json
index d669aa5cb44..e5dd2b23b5f 100644
--- a/spec/requests/api/schemas/json/user_get_response.json
+++ b/spec/requests/api/schemas/json/user_get_response.json
@@ -770,6 +770,9 @@
},
"sidebar_list_destination": {
"type": "string"
+ },
+ "seen_popups": {
+ "type": ["array", "null"]
}
},
"required": [