diff --git a/app/assets/javascripts/discourse/app/components/bootstrap-mode-notice.hbs b/app/assets/javascripts/discourse/app/components/bootstrap-mode-notice.hbs index ff5f71c474d..1b42599be43 100644 --- a/app/assets/javascripts/discourse/app/components/bootstrap-mode-notice.hbs +++ b/app/assets/javascripts/discourse/app/components/bootstrap-mode-notice.hbs @@ -7,7 +7,8 @@ {{#if this.showUserTip}} {{else}} diff --git a/app/assets/javascripts/discourse/app/components/user-tip.js b/app/assets/javascripts/discourse/app/components/user-tip.js index a6f4e1479a7..27e3d78fb44 100644 --- a/app/assets/javascripts/discourse/app/components/user-tip.js +++ b/app/assets/javascripts/discourse/app/components/user-tip.js @@ -20,9 +20,9 @@ export default class UserTip extends Component { selector, content, placement, - primaryLabel, + buttonLabel, + buttonIcon, onDismiss, - onDismissAll, } = this.args; element = element.parentElement; @@ -30,14 +30,14 @@ export default class UserTip extends Component { id, titleText: I18n.t(`user_tips.${id}.title`), contentText: content || I18n.t(`user_tips.${id}.content`), - primaryText: primaryLabel ? I18n.t(primaryLabel) : null, + buttonLabel, + buttonIcon, reference: (selector && element.parentElement.querySelector(selector)) || element, appendTo: element.parentElement, placement, onDismiss, - onDismissAll, }); }); } diff --git a/app/assets/javascripts/discourse/app/lib/user-tips.js b/app/assets/javascripts/discourse/app/lib/user-tips.js index f8e42240632..79295fe9f39 100644 --- a/app/assets/javascripts/discourse/app/lib/user-tips.js +++ b/app/assets/javascripts/discourse/app/lib/user-tips.js @@ -67,6 +67,11 @@ export function showUserTip(options) { return; } + let buttonText = escape(I18n.t(options.buttonLabel || "user_tips.button")); + if (options.buttonIcon) { + buttonText = `${iconHTML(options.buttonIcon)} ${buttonText}`; + } + instancesMap[options.id] = tippy(options.reference, { hideOnClick: false, trigger: "manual", @@ -87,12 +92,7 @@ export function showUserTip(options) {
${escape(options.titleText)}
${escape(options.contentText)}
- - +
`, @@ -101,18 +101,11 @@ export function showUserTip(options) { tippyInstance.popper.classList.add("user-tip"); tippyInstance.popper - .querySelector(".btn-dismiss") + .querySelector(".btn") .addEventListener("click", (event) => { options.onDismiss?.(); event.preventDefault(); }); - - tippyInstance.popper - .querySelector(".btn-dismiss-all") - .addEventListener("click", (event) => { - options.onDismissAll?.(); - event.preventDefault(); - }); }, }); diff --git a/app/assets/javascripts/discourse/app/models/user.js b/app/assets/javascripts/discourse/app/models/user.js index f14788e7c9b..e684d61fa02 100644 --- a/app/assets/javascripts/discourse/app/models/user.js +++ b/app/assets/javascripts/discourse/app/models/user.js @@ -37,7 +37,6 @@ import { cancel } from "@ember/runloop"; import discourseLater from "discourse-common/lib/later"; import { isTesting } from "discourse-common/config/environment"; import { - hideAllUserTips, hideUserTip, showNextUserTip, showUserTip, @@ -1202,10 +1201,6 @@ const User = RestModel.extend({ options.onDismiss?.(); this.hideUserTipForever(options.id); }, - onDismissAll: () => { - options.onDismissAll?.(); - this.hideUserTipForever(); - }, }); } }, @@ -1217,45 +1212,29 @@ const User = RestModel.extend({ } // Empty userTipId means all user tips. - if (userTipId && !userTips[userTipId]) { + if (!userTips[userTipId]) { // eslint-disable-next-line no-console console.warn("Cannot hide user tip with type =", userTipId); return; } // Hide user tips and maybe show the next one. - if (userTipId) { - hideUserTip(userTipId, true); - showNextUserTip(); - } else { - hideAllUserTips(); - } + hideUserTip(userTipId, true); + showNextUserTip(); // Update list of seen user tips. let seenUserTips = this.user_option?.seen_popups || []; - if (userTipId) { - if (seenUserTips.includes(userTips[userTipId])) { - return; - } - seenUserTips.push(userTips[userTipId]); - } else { - if (seenUserTips.includes(-1)) { - return; - } - seenUserTips = [-1]; + if (seenUserTips.includes(userTips[userTipId])) { + return; } + seenUserTips.push(userTips[userTipId]); // Save seen user tips on the server. if (!this.user_option) { this.set("user_option", {}); } this.set("user_option.seen_popups", seenUserTips); - if (userTipId) { - return this.save(["seen_popups"]); - } else { - this.set("user_option.skip_new_user_tips", true); - return this.save(["seen_popups", "skip_new_user_tips"]); - } + return this.save(["seen_popups"]); }, }); diff --git a/app/assets/javascripts/discourse/tests/unit/models/user-test.js b/app/assets/javascripts/discourse/tests/unit/models/user-test.js index 51b51d5c20a..47eb9fc1983 100644 --- a/app/assets/javascripts/discourse/tests/unit/models/user-test.js +++ b/app/assets/javascripts/discourse/tests/unit/models/user-test.js @@ -235,16 +235,4 @@ module("Unit | Model | user", function (hooks) { assert.ok(hideSpy.calledWith("first_notification")); assert.ok(showNextSpy.calledWith()); }); - - test("hideUserTipForever() can hide all the user tips", async function (assert) { - const site = getOwner(this).lookup("service:site"); - site.set("user_tips", { first_notification: 1 }); - const store = getOwner(this).lookup("service:store"); - const user = store.createRecord("user", { username: "eviltrout" }); - - const hideAllSpy = sinon.spy(userTips, "hideAllUserTips"); - await user.hideUserTipForever(); - - assert.ok(hideAllSpy.calledWith()); - }); }); diff --git a/app/assets/stylesheets/common/base/user-tips.scss b/app/assets/stylesheets/common/base/user-tips.scss index 0fe32c02198..aedcf4bc4d0 100644 --- a/app/assets/stylesheets/common/base/user-tips.scss +++ b/app/assets/stylesheets/common/base/user-tips.scss @@ -18,6 +18,10 @@ &:hover { color: var(--tertiary-hover); } + + .d-icon { + color: var(--tertiary); + } } > .tippy-svg-arrow { diff --git a/config/locales/client.en.yml b/config/locales/client.en.yml index dc1ccaf2328..c5736c637f0 100644 --- a/config/locales/client.en.yml +++ b/config/locales/client.en.yml @@ -1909,8 +1909,7 @@ en: remove_status: "Remove status" user_tips: - primary: "Got it!" - secondary: "don't show me these tips" + button: "Got it!" first_notification: title: "Your first notification!" @@ -1935,7 +1934,7 @@ en: admin_guide: title: "Welcome to your new site!" content: "Read the admin guide to continue building your site and community." - primary: "Let's go!" + button: "Let's go!" loading: "Loading..." errors: