mirror of
https://github.com/discourse/discourse.git
synced 2025-02-25 18:55:32 -06:00
DEV: move groups data loading from controller to route (#29130)
This commit is contained in:
parent
da77d06ebb
commit
2099c33fa7
@ -30,17 +30,6 @@ export default class GroupsIndexController extends Controller {
|
|||||||
return types;
|
return types;
|
||||||
}
|
}
|
||||||
|
|
||||||
loadGroups(params) {
|
|
||||||
this.set("isLoading", true);
|
|
||||||
|
|
||||||
this.store
|
|
||||||
.findAll("group", params)
|
|
||||||
.then((groups) => {
|
|
||||||
this.set("groups", groups);
|
|
||||||
})
|
|
||||||
.finally(() => this.set("isLoading", false));
|
|
||||||
}
|
|
||||||
|
|
||||||
@action
|
@action
|
||||||
onFilterChanged(filter) {
|
onFilterChanged(filter) {
|
||||||
discourseDebounce(this, this._debouncedFilter, filter, INPUT_DELAY);
|
discourseDebounce(this, this._debouncedFilter, filter, INPUT_DELAY);
|
||||||
|
@ -14,11 +14,13 @@ export default class GroupsIndexRoute extends DiscourseRoute {
|
|||||||
return I18n.t("groups.index.title");
|
return I18n.t("groups.index.title");
|
||||||
}
|
}
|
||||||
|
|
||||||
model(params) {
|
async model(params) {
|
||||||
return params;
|
const groups = await this.store.findAll("group", params);
|
||||||
|
return { groups };
|
||||||
}
|
}
|
||||||
|
|
||||||
setupController(controller, params) {
|
setupController(controller, model) {
|
||||||
controller.loadGroups(params);
|
super.setupController(controller, model);
|
||||||
|
controller.set("groups", model.groups);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -37,97 +37,94 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ConditionalLoadingSpinner @condition={{this.isLoading}}>
|
{{#if this.groups}}
|
||||||
{{#if this.groups}}
|
<LoadMore
|
||||||
<LoadMore
|
@selector=".groups-boxes .group-box"
|
||||||
@selector=".groups-boxes .group-box"
|
@action={{action "loadMore"}}
|
||||||
@action={{action "loadMore"}}
|
>
|
||||||
>
|
<div class="container">
|
||||||
<div class="container">
|
<div class="groups-boxes">
|
||||||
<div class="groups-boxes">
|
{{#each this.groups as |group|}}
|
||||||
{{#each this.groups as |group|}}
|
<LinkTo
|
||||||
<LinkTo
|
@route="group.members"
|
||||||
@route="group.members"
|
@model={{group.name}}
|
||||||
@model={{group.name}}
|
class="group-box"
|
||||||
class="group-box"
|
data-group-name={{group.name}}
|
||||||
data-group-name={{group.name}}
|
>
|
||||||
>
|
<div class="group-box-inner">
|
||||||
<div class="group-box-inner">
|
<div class="group-info-wrapper">
|
||||||
<div class="group-info-wrapper">
|
{{#if group.flair_url}}
|
||||||
{{#if group.flair_url}}
|
<span class="group-avatar-flair">
|
||||||
<span class="group-avatar-flair">
|
<AvatarFlair
|
||||||
<AvatarFlair
|
@flairName={{group.name}}
|
||||||
@flairName={{group.name}}
|
@flairUrl={{group.flair_url}}
|
||||||
@flairUrl={{group.flair_url}}
|
@flairBgColor={{group.flair_bg_color}}
|
||||||
@flairBgColor={{group.flair_bg_color}}
|
@flairColor={{group.flair_color}}
|
||||||
@flairColor={{group.flair_color}}
|
|
||||||
/>
|
|
||||||
</span>
|
|
||||||
{{/if}}
|
|
||||||
|
|
||||||
<span class="group-info">
|
|
||||||
<GroupsInfo @group={{group}} />
|
|
||||||
<div class="group-user-count">{{d-icon
|
|
||||||
"user"
|
|
||||||
}}{{group.user_count}}</div>
|
|
||||||
</span>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="group-description">{{html-safe
|
|
||||||
group.bio_excerpt
|
|
||||||
}}</div>
|
|
||||||
|
|
||||||
<div class="group-membership">
|
|
||||||
<GroupMembershipButton
|
|
||||||
@tagName=""
|
|
||||||
@model={{group}}
|
|
||||||
@showLogin={{route-action "showLogin"}}
|
|
||||||
>
|
|
||||||
{{#if group.is_group_owner}}
|
|
||||||
<span class="is-group-owner">
|
|
||||||
{{d-icon "shield-halved"}}
|
|
||||||
{{i18n "groups.index.is_group_owner"}}
|
|
||||||
</span>
|
|
||||||
{{else if group.is_group_user}}
|
|
||||||
<span class="is-group-member">
|
|
||||||
{{d-icon "check"}}
|
|
||||||
{{i18n "groups.index.is_group_user"}}
|
|
||||||
</span>
|
|
||||||
{{else if group.public_admission}}
|
|
||||||
{{i18n "groups.index.public"}}
|
|
||||||
{{else if group.isPrivate}}
|
|
||||||
{{d-icon "far-eye-slash"}}
|
|
||||||
{{i18n "groups.index.private"}}
|
|
||||||
{{else}}
|
|
||||||
{{#if group.automatic}}
|
|
||||||
{{i18n "groups.index.automatic"}}
|
|
||||||
{{else}}
|
|
||||||
{{d-icon "ban"}}
|
|
||||||
{{i18n "groups.index.closed"}}
|
|
||||||
{{/if}}
|
|
||||||
{{/if}}
|
|
||||||
</GroupMembershipButton>
|
|
||||||
|
|
||||||
<span>
|
|
||||||
<PluginOutlet
|
|
||||||
@name="group-index-box-after"
|
|
||||||
@connectorTagName="div"
|
|
||||||
@outletArgs={{hash model=group}}
|
|
||||||
/>
|
/>
|
||||||
</span>
|
</span>
|
||||||
</div>
|
{{/if}}
|
||||||
</div>
|
|
||||||
</LinkTo>
|
|
||||||
{{/each}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</LoadMore>
|
|
||||||
|
|
||||||
<ConditionalLoadingSpinner @condition={{this.groups.loadingMore}} />
|
<span class="group-info">
|
||||||
{{else}}
|
<GroupsInfo @group={{group}} />
|
||||||
<p role="status">{{i18n "groups.index.empty"}}</p>
|
<div class="group-user-count">{{d-icon
|
||||||
{{/if}}
|
"user"
|
||||||
</ConditionalLoadingSpinner>
|
}}{{group.user_count}}</div>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="group-description">{{html-safe
|
||||||
|
group.bio_excerpt
|
||||||
|
}}</div>
|
||||||
|
|
||||||
|
<div class="group-membership">
|
||||||
|
<GroupMembershipButton
|
||||||
|
@tagName=""
|
||||||
|
@model={{group}}
|
||||||
|
@showLogin={{route-action "showLogin"}}
|
||||||
|
>
|
||||||
|
{{#if group.is_group_owner}}
|
||||||
|
<span class="is-group-owner">
|
||||||
|
{{d-icon "shield-halved"}}
|
||||||
|
{{i18n "groups.index.is_group_owner"}}
|
||||||
|
</span>
|
||||||
|
{{else if group.is_group_user}}
|
||||||
|
<span class="is-group-member">
|
||||||
|
{{d-icon "check"}}
|
||||||
|
{{i18n "groups.index.is_group_user"}}
|
||||||
|
</span>
|
||||||
|
{{else if group.public_admission}}
|
||||||
|
{{i18n "groups.index.public"}}
|
||||||
|
{{else if group.isPrivate}}
|
||||||
|
{{d-icon "far-eye-slash"}}
|
||||||
|
{{i18n "groups.index.private"}}
|
||||||
|
{{else}}
|
||||||
|
{{#if group.automatic}}
|
||||||
|
{{i18n "groups.index.automatic"}}
|
||||||
|
{{else}}
|
||||||
|
{{d-icon "ban"}}
|
||||||
|
{{i18n "groups.index.closed"}}
|
||||||
|
{{/if}}
|
||||||
|
{{/if}}
|
||||||
|
</GroupMembershipButton>
|
||||||
|
|
||||||
|
<span>
|
||||||
|
<PluginOutlet
|
||||||
|
@name="group-index-box-after"
|
||||||
|
@connectorTagName="div"
|
||||||
|
@outletArgs={{hash model=group}}
|
||||||
|
/>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</LinkTo>
|
||||||
|
{{/each}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</LoadMore>
|
||||||
|
<ConditionalLoadingSpinner @condition={{this.groups.loadingMore}} />
|
||||||
|
{{else}}
|
||||||
|
<p role="status">{{i18n "groups.index.empty"}}</p>
|
||||||
|
{{/if}}
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<PluginOutlet @name="after-groups-index-container" @connectorTagName="div" />
|
<PluginOutlet @name="after-groups-index-container" @connectorTagName="div" />
|
Loading…
Reference in New Issue
Block a user