diff --git a/app/assets/javascripts/discourse/app/components/bulk-group-member-dropdown.js b/app/assets/javascripts/discourse/app/components/bulk-group-member-dropdown.js new file mode 100644 index 00000000000..baeddb07466 --- /dev/null +++ b/app/assets/javascripts/discourse/app/components/bulk-group-member-dropdown.js @@ -0,0 +1,62 @@ +import DropdownSelectBoxComponent from "select-kit/components/dropdown-select-box"; +import I18n from "I18n"; +import { computed } from "@ember/object"; + +export default DropdownSelectBoxComponent.extend({ + pluginApiIdentifiers: ["bulk-group-member-dropdown"], + classNames: ["bulk-group-member-dropdown"], + + selectKitOptions: { + icon: "cog", + showFullTitle: false, + }, + + content: computed("bulkSelection.[]", function () { + const items = []; + + items.push({ + id: "removeMembers", + name: I18n.t("groups.members.remove_members"), + description: I18n.t("groups.members.remove_members_description"), + icon: "user-times", + }); + + if (this.bulkSelection.some((m) => !m.owner)) { + items.push({ + id: "makeOwners", + name: I18n.t("groups.members.make_owners"), + description: I18n.t("groups.members.make_owners_description"), + icon: "shield-alt", + }); + } + + if (this.bulkSelection.some((m) => m.owner)) { + items.push({ + id: "removeOwners", + name: I18n.t("groups.members.remove_owners"), + description: I18n.t("groups.members.remove_owners_description"), + icon: "shield-alt", + }); + } + + if (this.bulkSelection.some((m) => !m.primary)) { + items.push({ + id: "setPrimary", + name: I18n.t("groups.members.make_all_primary"), + description: I18n.t("groups.members.make_all_primary_description"), + icon: "id-card", + }); + } + + if (this.bulkSelection.some((m) => m.primary)) { + items.push({ + id: "unsetPrimary", + name: I18n.t("groups.members.remove_all_primary"), + description: I18n.t("groups.members.remove_all_primary_description"), + icon: "id-card", + }); + } + + return items; + }), +}); diff --git a/app/assets/javascripts/discourse/app/components/group-member-dropdown.js b/app/assets/javascripts/discourse/app/components/group-member-dropdown.js index 8b74a485bc2..bd6fa1006a3 100644 --- a/app/assets/javascripts/discourse/app/components/group-member-dropdown.js +++ b/app/assets/javascripts/discourse/app/components/group-member-dropdown.js @@ -11,56 +11,7 @@ export default DropdownSelectBoxComponent.extend({ showFullTitle: false, }, - contentBulk() { - const items = []; - - items.push({ - id: "removeMembers", - name: I18n.t("groups.members.remove_members"), - description: I18n.t("groups.members.remove_members_description"), - icon: "user-times", - }); - - if (this.bulkSelection.some((m) => !m.owner)) { - items.push({ - id: "makeOwners", - name: I18n.t("groups.members.make_owners"), - description: I18n.t("groups.members.make_owners_description"), - icon: "shield-alt", - }); - } - - if (this.bulkSelection.some((m) => m.owner)) { - items.push({ - id: "removeOwners", - name: I18n.t("groups.members.remove_owners"), - description: I18n.t("groups.members.remove_owners_description"), - icon: "shield-alt", - }); - } - - if (this.bulkSelection.some((m) => !m.primary)) { - items.push({ - id: "setPrimary", - name: I18n.t("groups.members.make_all_primary"), - description: I18n.t("groups.members.make_all_primary_description"), - icon: "id-card", - }); - } - - if (this.bulkSelection.some((m) => m.primary)) { - items.push({ - id: "unsetPrimary", - name: I18n.t("groups.members.remove_all_primary"), - description: I18n.t("groups.members.remove_all_primary_description"), - icon: "id-card", - }); - } - - return items; - }, - - contentSingle() { + content: computed("member.owner", "member.primary", function () { const items = [ { id: "removeMember", @@ -117,16 +68,5 @@ export default DropdownSelectBoxComponent.extend({ } return items; - }, - - content: computed( - "bulkSelection.[]", - "member.owner", - "member.primary", - function () { - return this.bulkSelection !== undefined - ? this.contentBulk() - : this.contentSingle(); - } - ), + }), }); diff --git a/app/assets/javascripts/discourse/app/components/table-header-toggle.js b/app/assets/javascripts/discourse/app/components/table-header-toggle.js index 514a14d452b..259bb0ca4ed 100644 --- a/app/assets/javascripts/discourse/app/components/table-header-toggle.js +++ b/app/assets/javascripts/discourse/app/components/table-header-toggle.js @@ -5,7 +5,7 @@ import { htmlSafe } from "@ember/template"; export default Component.extend({ tagName: "th", classNames: ["sortable"], - attributeBindings: ["title"], + attributeBindings: ["title", "colspan"], labelKey: null, chevronIcon: null, columnIcon: null, diff --git a/app/assets/javascripts/discourse/app/controllers/group-index.js b/app/assets/javascripts/discourse/app/controllers/group-index.js index 7e495191d28..6bcbf5dd1b8 100644 --- a/app/assets/javascripts/discourse/app/controllers/group-index.js +++ b/app/assets/javascripts/discourse/app/controllers/group-index.js @@ -219,7 +219,9 @@ export default Controller.extend({ document .querySelectorAll("input.bulk-select:not(:checked)") .forEach((checkbox) => { - checkbox.checked = true; + if (!checkbox.checked) { + checkbox.click(); + } }); }, @@ -228,7 +230,9 @@ export default Controller.extend({ document .querySelectorAll("input.bulk-select:checked") .forEach((checkbox) => { - checkbox.checked = false; + if (checkbox.checked) { + checkbox.click(); + } }); }, diff --git a/app/assets/javascripts/discourse/app/templates/group-index.hbs b/app/assets/javascripts/discourse/app/templates/group-index.hbs index 1df656a1ce9..0408dd2e1a1 100644 --- a/app/assets/javascripts/discourse/app/templates/group-index.hbs +++ b/app/assets/javascripts/discourse/app/templates/group-index.hbs @@ -29,15 +29,14 @@