mirror of
https://github.com/discourse/discourse.git
synced 2025-02-07 11:58:27 +00:00
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)