mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
PERF: N+1 query on groups page.
This commit is contained in:
@@ -12,6 +12,15 @@ export default Ember.Component.extend({
|
|||||||
return !!(this.currentUser) && allowMembershipRequests && aliasLevel === 99;
|
return !!(this.currentUser) && allowMembershipRequests && aliasLevel === 99;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@computed("model.is_group_user", "model.id", "groupUserIds")
|
||||||
|
userIsGroupUser(isGroupUser, groupId, groupUserIds) {
|
||||||
|
if (isGroupUser) {
|
||||||
|
return isGroupUser;
|
||||||
|
} else {
|
||||||
|
return groupUserIds.includes(groupId);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
actions: {
|
actions: {
|
||||||
joinGroup() {
|
joinGroup() {
|
||||||
this.set('updatingMembership', true);
|
this.set('updatingMembership', true);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{{#if canJoinGroup}}
|
{{#if canJoinGroup}}
|
||||||
{{#if model.is_group_user}}
|
{{#if userIsGroupUser}}
|
||||||
{{d-button action="leaveGroup"
|
{{d-button action="leaveGroup"
|
||||||
class="btn-danger group-index-leave"
|
class="btn-danger group-index-leave"
|
||||||
icon="minus"
|
icon="minus"
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
disabled=updatingMembership}}
|
disabled=updatingMembership}}
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{else if canRequestMembership}}
|
{{else if canRequestMembership}}
|
||||||
{{#if model.is_group_user}}
|
{{#if userIsGroupUser}}
|
||||||
{{#if showMembershipStatus}}
|
{{#if showMembershipStatus}}
|
||||||
{{d-button
|
{{d-button
|
||||||
class="btn-primary"
|
class="btn-primary"
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{{#d-section pageClass="groups"}}
|
{{#d-section pageClass="groups"}}
|
||||||
<h1>{{i18n "groups.index.title"}}</h1>
|
<h1>{{i18n "groups.index.title"}}</h1>
|
||||||
|
|
||||||
{{#if groups}}
|
{{#if groups}}
|
||||||
{{#load-more selector=".groups-table .groups-table-row" action="loadMore"}}
|
{{#load-more selector=".groups-table .groups-table-row" action="loadMore"}}
|
||||||
<div class='container'>
|
<div class='container'>
|
||||||
@@ -47,7 +46,8 @@
|
|||||||
<td>
|
<td>
|
||||||
{{#group-membership-button model=group
|
{{#group-membership-button model=group
|
||||||
createNewMessageViaParams='createNewMessageViaParams'
|
createNewMessageViaParams='createNewMessageViaParams'
|
||||||
showMembershipStatus=true}}
|
showMembershipStatus=true
|
||||||
|
groupUserIds=groups.extras.group_user_ids}}
|
||||||
|
|
||||||
{{d-button icon="ban"
|
{{d-button icon="ban"
|
||||||
label=(if group.automatic 'groups.automatic_group' 'groups.closed_group')
|
label=(if group.automatic 'groups.automatic_group' 'groups.closed_group')
|
||||||
|
|||||||
@@ -23,11 +23,16 @@ class GroupsController < ApplicationController
|
|||||||
count = groups.count
|
count = groups.count
|
||||||
groups = groups.offset(page * page_size).limit(page_size)
|
groups = groups.offset(page * page_size).limit(page_size)
|
||||||
|
|
||||||
render json: {
|
group_user_ids = GroupUser.where(group: groups, user: current_user).pluck(:group_id)
|
||||||
groups: serialize_data(groups, GroupShowSerializer),
|
|
||||||
|
render_json_dump(
|
||||||
|
groups: serialize_data(groups, BasicGroupSerializer),
|
||||||
|
extras: {
|
||||||
|
group_user_ids: group_user_ids
|
||||||
|
},
|
||||||
total_rows_groups: count,
|
total_rows_groups: count,
|
||||||
load_more_groups: groups_path(page: page + 1)
|
load_more_groups: groups_path(page: page + 1)
|
||||||
}
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
|||||||
Reference in New Issue
Block a user