mirror of
https://github.com/discourse/discourse.git
synced 2025-01-21 18:36:14 +08:00
8b80132f88
This PR converts the following modals: - `dismiss-new` - `dismiss-read` - `dismiss-notification-confirmation` to make use of the new component-based API # Additional Changes ## Before By default we display a warning modal when dismissing a notification however we bypass the warning modal for specific notification types when they are a 'low priority' type of notification (eg. likes). To do this we were overwriting `dismissWarningModal` on a given notification type component ```javascript dismissWarningModal() { return null } ``` but in the case we wanted to change the text within the modal we were calling `showModal` and then passing in the respective options all over again, putting the logic of rendering the modal in multiple places. ```javascript dismissWarningModal() { const modalController = showModal("dismiss-notification-confirmation"); modalController.set( "confirmationMessage", I18n.t("notifications.dismiss_confirmation.body.assigns", { count: this._unreadAssignedNotificationsCount, }) ); return modalController; } ``` ## After I simplified this by adding an extensible `dismissConfirmationText` function that can be updated on a per component basis as that was the only option being overridden. eg ```javascript get dismissConfirmationText() { return I18n.t("notifications.dismiss_confirmation.body.bookmarks", { count: this.#unreadBookmarkRemindersCount, }); ``` This saves us from importing the entire modal again and keeps the core logic in one place. Instead of overwriting the `dismissWarningModal` function and returning `null` to bypass the confirmation modal, I added another extension point of `renderDismissConfirmation` (defaults to true) to _toggle_ whether we should display a confirmation when dismissing notifications. eg ```javascript get renderDismissConfirmation() { return false; } ``` we utilize this in core for specific _low priority_ notification types. When you need the confirmation modal to be displayed no matter the case you can set `alwaysRenderDismissConfirmation` to `true` ``` get alwaysRenderDismissConfirmation(){ return true } ``` This can be useful when you want to render the confirmation modal on a custom notification type that is not deemed as _high priority_, leading to the confirmation modal never being rendered. You can see this in use in [Discourse Assign](https://github.com/discourse/discourse-assign/pull/481) |
||
---|---|---|
.. | ||
admin | ||
bootstrap-json | ||
confirm-new-email | ||
dialog-holder | ||
discourse | ||
discourse-common | ||
discourse-hbr | ||
discourse-plugins | ||
discourse-widget-hbs | ||
docs | ||
ember-addons | ||
ember-cli-progress-ci | ||
ember-production-deprecations | ||
locales | ||
patches | ||
pretty-text | ||
select-kit | ||
truth-helpers | ||
wizard | ||
.licensee.json | ||
.npmrc | ||
discourse-js-processor.js | ||
handlebars-shim.js | ||
package.json | ||
polyfills.js | ||
service-worker.js.erb | ||
yarn.lock |