DEV: Refactors following code review (#100)

This commit is contained in:
Ahmed Gagan 2020-08-14 16:07:34 +05:30 committed by GitHub
parent 83ff23c98e
commit 99c2c48c08
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 43 additions and 34 deletions

View File

@ -1,8 +1,10 @@
import { inject as service } from "@ember/service"; import { inject as service } from "@ember/service";
import Controller, { inject as controller } from "@ember/controller"; import Controller, { inject as controller } from "@ember/controller";
import { action } from "@ember/object";
import { debounce } from "@ember/runloop";
import { ajax } from "discourse/lib/ajax"; import { ajax } from "discourse/lib/ajax";
import discourseComputed, { observes } from "discourse-common/utils/decorators"; import discourseComputed from "discourse-common/utils/decorators";
import discourseDebounce from "discourse/lib/debounce"; import { INPUT_DELAY } from "discourse-common/config/environment";
export default Controller.extend({ export default Controller.extend({
router: service(), router: service(),
@ -17,30 +19,25 @@ export default Controller.extend({
return !mobileView; return !mobileView;
}, },
@observes("filterName") _setFilter(filter) {
_setFilter: discourseDebounce(function() {
this.set("filter", this.filterName);
}, 500),
@observes("filter")
_filterModel() {
this.set("loading", true); this.set("loading", true);
this.set("offset", 0); this.set("offset", 0);
ajax(`/assign/members/${this.group.name}`, { this.set("filter", filter);
const groupName = this.group.name;
ajax(`/assign/members/${groupName}`, {
type: "GET", type: "GET",
data: { filter: this.filter, offset: this.offset } data: { filter: this.filter, offset: this.offset }
}).then(result => { })
if (this.router.currentRoute.params.filter !== "everyone") { .then(result => {
this.transitionToRoute("group.assigned.show", "everyone"); if (this.router.currentRoute.params.filter !== "everyone") {
} this.transitionToRoute("group.assigned.show", groupName, "everyone");
this.set("members", result.members); }
this.set("loading", false); this.set("members", result.members);
}); })
}, .finally(() => {
this.set("loading", false);
@observes("model.assignment_count") });
assignmentCountChanged() {
this.set("group.assignment_count", this.model.assignment_count);
}, },
findMembers(refresh) { findMembers(refresh) {
@ -59,16 +56,21 @@ export default Controller.extend({
ajax(`/assign/members/${this.group.name}`, { ajax(`/assign/members/${this.group.name}`, {
type: "GET", type: "GET",
data: { filter: this.filter, offset: this.offset } data: { filter: this.filter, offset: this.offset }
}).then(result => { })
this.members.pushObjects(result.members); .then(result => {
this.set("loading", false); this.members.pushObjects(result.members);
}); })
.finally(() => this.set("loading", false));
} }
}, },
actions: { @action
loadMore: function() { loadMore() {
this.findMembers(); this.findMembers();
} },
@action
onChangeFilterName(value) {
debounce(this, this._setFilter, value, INPUT_DELAY * 2);
} }
}); });

View File

@ -12,6 +12,7 @@ export default DiscourseRoute.extend({
members: [], members: [],
group: this.modelFor("group") group: this.modelFor("group")
}); });
controller.group.set("assignment_count", model.assignment_count);
controller.findMembers(true); controller.findMembers(true);
}, },

View File

@ -1,7 +1,7 @@
{{#if show-avatar}} {{#if show-avatar}}
{{#link-to "group.assigned.show" filter.username_lower}} {{#link-to "group.assigned.show" filter.username_lower}}
<div class="assign-image"> <div class="assign-image">
<a href={{filter.userPath}} data-user-card={{filter.username}}>{{avatar filter imageSize="large"}}</a> <a href={{filter.userPath}} data-user-card={{filter.username}}>{{avatar filter imageSize="large"}}</a>
</div> </div>
<div class="assign-names"> <div class="assign-names">
@ -19,7 +19,7 @@
{{i18n 'discourse_assign.group_everyone'}} {{i18n 'discourse_assign.group_everyone'}}
</div> </div>
<div class="assign-count"> <div class="assign-count">
{{assignment_count}} {{assignmentCount}}
</div> </div>
{{/link-to}} {{/link-to}}
{{/if}} {{/if}}

View File

@ -2,11 +2,17 @@
{{#mobile-nav class="activity-nav" desktopClass="action-list activity-list nav-stacked" currentPath=router._router.currentPath}} {{#mobile-nav class="activity-nav" desktopClass="action-list activity-list nav-stacked" currentPath=router._router.currentPath}}
{{#if isDesktop}} {{#if isDesktop}}
<div class="search-div"> <div class="search-div">
{{input type="text" placeholder=(i18n "discourse_assign.sidebar_name_filter_placeholder") value=filterName class="search"}} {{input
type="text"
placeholder=(i18n "discourse_assign.sidebar_name_filter_placeholder")
value=filterName
class="search"
input=(action "onChangeFilterName" value="target.value")
}}
</div> </div>
{{/if}} {{/if}}
{{#load-more selector=".activity-nav li" action=(action "loadMore")}} {{#load-more selector=".activity-nav li" action=(action "loadMore")}}
{{group-assigned-filter show-avatar=false filter="everyone" routeType=route_type assignment_count=group.assignment_count}} {{group-assigned-filter show-avatar=false filter="everyone" routeType=route_type assignmentCount=group.assignment_count}}
{{#each members as |member|}} {{#each members as |member|}}
{{group-assigned-filter show-avatar=true filter=member routeType=route_type}} {{group-assigned-filter show-avatar=true filter=member routeType=route_type}}
{{/each}} {{/each}}