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": [