diff --git a/assets/javascripts/discourse-assign/assigned-messages-route-map.js b/assets/javascripts/discourse-assign/assigned-messages-route-map.js index be90c7c..c05ad5d 100644 --- a/assets/javascripts/discourse-assign/assigned-messages-route-map.js +++ b/assets/javascripts/discourse-assign/assigned-messages-route-map.js @@ -1,6 +1,8 @@ export default { resource: "user.userPrivateMessages", map() { - this.route("assigned"); + this.route("assigned", { path: "/assigned" }, function () { + this.route("index", { path: "/" }); + }); }, }; diff --git a/assets/javascripts/discourse-assign/routes/user-private-messages-assigned.js b/assets/javascripts/discourse-assign/routes/user-private-messages-assigned-index.js similarity index 100% rename from assets/javascripts/discourse-assign/routes/user-private-messages-assigned.js rename to assets/javascripts/discourse-assign/routes/user-private-messages-assigned-index.js diff --git a/assets/javascripts/discourse/initializers/assign-extend-user-messages.js b/assets/javascripts/discourse/initializers/assign-extend-user-messages.js new file mode 100644 index 0000000..fc51fea --- /dev/null +++ b/assets/javascripts/discourse/initializers/assign-extend-user-messages.js @@ -0,0 +1,20 @@ +import I18n from "I18n"; +import { withPluginApi } from "discourse/lib/plugin-api"; + +export default { + name: "assign-extend-user-messages", + + initialize(container) { + withPluginApi("1.5.0", (api) => { + const currentUser = container.lookup("service:current-user"); + + if (currentUser?.can_assign && api.addUserMessagesNavigationDropdownRow) { + api.addUserMessagesNavigationDropdownRow( + "userPrivateMessages.assigned", + I18n.t("discourse_assign.assigned"), + "user-plus" + ); + } + }); + }, +}; diff --git a/assets/javascripts/discourse/templates/user-private-messages-assigned.hbs b/assets/javascripts/discourse/templates/user-private-messages-assigned.hbs new file mode 100644 index 0000000..d2cfd28 --- /dev/null +++ b/assets/javascripts/discourse/templates/user-private-messages-assigned.hbs @@ -0,0 +1,10 @@ + +
  • + + {{d-icon "envelope"}} + {{i18n "categories.latest"}} + +
  • +
    + +{{outlet}} diff --git a/test/javascripts/acceptance/user-private-messages-assigned-test.js b/test/javascripts/acceptance/user-private-messages-assigned-test.js new file mode 100644 index 0000000..8a1255a --- /dev/null +++ b/test/javascripts/acceptance/user-private-messages-assigned-test.js @@ -0,0 +1,62 @@ +import I18n from "I18n"; +import { + acceptance, + updateCurrentUser, +} from "discourse/tests/helpers/qunit-helpers"; +import { click, currentURL, visit } from "@ember/test-helpers"; +import AssignedTopics from "../fixtures/assigned-topics-fixtures"; +import { cloneJSON } from "discourse-common/lib/object"; +import selectKit from "discourse/tests/helpers/select-kit-helper"; +import { test } from "qunit"; + +acceptance("User Private Messages | Discourse Assign", function (needs) { + needs.user({ + can_assign: true, + }); + + needs.settings({ assign_enabled: true, assigns_user_url_path: "/" }); + + needs.pretender((server, helper) => { + const assignments = cloneJSON( + AssignedTopics["/topics/messages-assigned/eviltrout.json"] + ); + + server.get("/topics/private-messages-assigned/eviltrout.json", () => + helper.response(assignments) + ); + }); + + test("viewing assigned messages", async function (assert) { + await visit("/u/eviltrout/messages"); + await click(".assigned-messages a"); + + assert.strictEqual( + currentURL(), + "/u/eviltrout/messages/assigned", + "transitioned to the assigned page" + ); + }); + + test("viewing assigned messages when redesigned user page nav has been enabled", async function (assert) { + updateCurrentUser({ redesigned_user_page_nav_enabled: true }); + + await visit("/u/eviltrout/messages"); + + const messagesDropdown = selectKit(".user-nav-messages-dropdown"); + + await messagesDropdown.expand(); + await messagesDropdown.selectRowByName(I18n.t("discourse_assign.assigned")); + + assert.strictEqual( + currentURL(), + "/u/eviltrout/messages/assigned", + "transitioned to the assigned page" + ); + + assert.strictEqual( + messagesDropdown.header().name(), + I18n.t("discourse_assign.assigned"), + "assigned messages is selected in the dropdown" + ); + }); +});