Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlfredo Sumaran <alfredo@gitlab.com>2017-05-10 21:30:30 +0300
committerAlfredo Sumaran <alfredo@gitlab.com>2017-05-10 21:40:27 +0300
commit312d02ad6db5b38b7c393f9a84a73e9ead4adfe0 (patch)
treefd0bb2fd33dd1887c2e3df76ca95050d756dd821 /app/assets/javascripts/filterable_list.js
parent3b6ff7fcaf4443b518770f97e437631197297980 (diff)
Add GroupFilterableList to be used as filterable class
- GroupFilterableList extends from FilterableList which is used in other places that doesn’t use Vue. - GroupFilterableList interacts with a Vue store object. - Deleted groups_list.js since is not needed anymore, filtering is handled via ajax in GroupFilterableList
Diffstat (limited to 'app/assets/javascripts/filterable_list.js')
-rw-r--r--app/assets/javascripts/filterable_list.js46
1 files changed, 27 insertions, 19 deletions
diff --git a/app/assets/javascripts/filterable_list.js b/app/assets/javascripts/filterable_list.js
index e6d6400ca86..2c366abe1cf 100644
--- a/app/assets/javascripts/filterable_list.js
+++ b/app/assets/javascripts/filterable_list.js
@@ -4,44 +4,52 @@
*/
export default class FilterableList {
- constructor(form, filter, holder, store) {
- this.store = store;
+ constructor(form, filter, holder) {
this.filterForm = form;
this.listFilterElement = filter;
this.listHolderElement = holder;
+ this.filterUrl = `${this.filterForm.getAttribute('action')}?${$(this.filterForm).serialize()}`;
}
initSearch() {
this.debounceFilter = _.debounce(this.filterResults.bind(this), 500);
- this.listFilterElement.removeEventListener('input', this.debounceFilter);
+ this.unbindEvents();
+ this.bindEvents();
+ }
+
+ bindEvents() {
this.listFilterElement.addEventListener('input', this.debounceFilter);
}
+ unbindEvents() {
+ this.listFilterElement.removeEventListener('input', this.debounceFilter);
+ }
+
filterResults() {
- const form = this.filterForm;
- const filterUrl = `${form.getAttribute('action')}?${$(form).serialize()}`;
$(this.listHolderElement).fadeTo(250, 0.5);
return $.ajax({
- url: form.getAttribute('action'),
- data: $(form).serialize(),
+ url: this.filterForm.getAttribute('action'),
+ data: $(this.filterForm).serialize(),
type: 'GET',
dataType: 'json',
context: this,
- complete() {
- $(this.listHolderElement).fadeTo(250, 1);
- },
- success(data) {
- this.store.setGroups(data);
-
- // Change url so if user reload a page - search results are saved
- return window.history.replaceState({
- page: filterUrl,
-
- }, document.title, filterUrl);
- },
+ complete: this.onFilterComplete,
+ success: this.onFilterSuccess,
});
}
+
+ onFilterSuccess(data) {
+ // Change url so if user reload a page - search results are saved
+ return window.history.replaceState({
+ page: this.filterUrl,
+
+ }, document.title, this.filterUrl);
+ }
+
+ onFilterComplete() {
+ $(this.listHolderElement).fadeTo(250, 1);
+ }
}