DEV: Convert dismiss modal to component-based API (#481)

This commit is contained in:
Isaac Janzen 2023-07-06 12:14:36 -05:00 committed by GitHub
parent 7867cc4b03
commit 41f62d9ea9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 33 additions and 22 deletions

View File

@ -4,7 +4,6 @@ import UserMenuNotificationItem from "discourse/lib/user-menu/notification-item"
import UserMenuAssignItem from "../../lib/user-menu/assign-item";
import Notification from "discourse/models/notification";
import I18n from "I18n";
import showModal from "discourse/lib/show-modal";
import Topic from "discourse/models/topic";
import UserMenuAssignsListEmptyState from "./assigns-list-empty-state";
@ -37,6 +36,25 @@ export default class UserMenuAssignNotificationsList extends UserMenuNotificatio
return UserMenuAssignsListEmptyState;
}
get alwaysRenderDismissConfirmation() {
return true;
}
get _unreadAssignedNotificationsCount() {
const key = `grouped_unread_notifications.${this.site.notification_types.assigned}`;
// we're retrieving the value with get() so that Ember tracks the property
// and re-renders the UI when it changes.
// we can stop using `get()` when the User model is refactored into native
// class with @tracked properties.
return this.currentUser.get(key) || 0;
}
get dismissConfirmationText() {
return I18n.t("notifications.dismiss_confirmation.body.assigns", {
count: this._unreadAssignedNotificationsCount,
});
}
async fetchItems() {
const data = await ajax("/assign/user-menu-assigns.json");
const content = [];
@ -59,24 +77,4 @@ export default class UserMenuAssignNotificationsList extends UserMenuNotificatio
content.push(...topics.map((assign) => new UserMenuAssignItem({ assign })));
return content;
}
dismissWarningModal() {
const modalController = showModal("dismiss-notification-confirmation");
modalController.set(
"confirmationMessage",
I18n.t("notifications.dismiss_confirmation.body.assigns", {
count: this._unreadAssignedNotificationsCount,
})
);
return modalController;
}
get _unreadAssignedNotificationsCount() {
const key = `grouped_unread_notifications.${this.site.notification_types.assigned}`;
// we're retrieving the value with get() so that Ember tracks the property
// and re-renders the UI when it changes.
// we can stop using `get()` when the User model is refactored into native
// class with @tracked properties.
return this.currentUser.get(key) || 0;
}
}

View File

@ -422,7 +422,9 @@ acceptance("Discourse Assign | user menu", function (needs) {
await click(".notifications-dismiss");
assert.false(markRead, "mark-read request isn't sent");
assert.strictEqual(
query(".dismiss-notification-confirmation.modal-body").textContent.trim(),
query(
".dismiss-notification-confirmation .modal-body"
).textContent.trim(),
I18n.t("notifications.dismiss_confirmation.body.assigns", { count: 173 }),
"dismiss confirmation modal is shown"
);
@ -494,4 +496,15 @@ acceptance("Discourse Assign | user menu", function (needs) {
"topicModelTransformer Howdy this my test topic with emoji !"
);
});
test("renders the confirmation modal when dismiss assign notifications", async function (assert) {
await visit("/");
await click(".d-header-icons .current-user");
await click("#user-menu-button-assign-list");
await click(".notifications-dismiss");
assert.false(markRead, "a request to the server is not made");
assert
.dom(".dismiss-notification-confirmation .modal-body")
.exists("the dismiss notification confirmation modal is present");
});
});