Skip to content
Snippets Groups Projects
Commit 0a10d859 authored by Filipa Lacerda's avatar Filipa Lacerda
Browse files

Update JS to use new standards

parent b7c30cae
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -177,7 +177,6 @@ require('./project_select');
require('./project_show');
require('./project_variables');
require('./projects_list');
require('./groups_list');
require('./render_gfm');
require('./render_math');
require('./right_sidebar');
Loading
Loading
Loading
Loading
@@ -35,6 +35,8 @@
/* global Labels */
/* global Shortcuts */
 
import GroupsList from './groups_list';
const ShortcutsBlob = require('./shortcuts_blob');
const UserCallout = require('./user_callout');
 
Loading
Loading
@@ -96,6 +98,10 @@ const UserCallout = require('./user_callout');
case 'dashboard:todos:index':
new gl.Todos();
break;
case 'dashboard:groups:index':
case 'explore:groups:index':
new GroupsList();
break;
case 'projects:milestones:new':
case 'projects:milestones:edit':
case 'projects:milestones:update':
Loading
Loading
/* eslint-disable func-names, space-before-function-paren, object-shorthand, quotes, no-var, one-var, one-var-declaration-per-line, prefer-arrow-callback, consistent-return, no-unused-vars, camelcase, prefer-template, comma-dangle, max-len */
(function() {
window.GroupsList = {
init: function() {
$(".groups-list-filter").off('keyup');
this.initSearch();
return this.initPagination();
},
initSearch: function() {
var debounceFilter, groupsListFilter;
groupsListFilter = $('.groups-list-filter');
debounceFilter = _.debounce(window.GroupsList.filterResults, 500);
return groupsListFilter.on('keyup', function(e) {
if (groupsListFilter.val() !== '') {
return debounceFilter();
}
});
},
filterResults: function() {
var form, group_filter_url, search;
$('.groups-list-holder').fadeTo(250, 0.5);
form = null;
form = $("form#group-filter-form");
search = $(".groups-list-filter").val();
group_filter_url = form.attr('action') + '?' + form.serialize();
return $.ajax({
type: "GET",
url: form.attr('action'),
data: form.serialize(),
complete: function() {
return $('.groups-list-holder').fadeTo(250, 1);
},
success: function(data) {
$('.groups-list-holder').replaceWith(data.html);
return history.replaceState({
page: group_filter_url
// Change url so if user reload a page - search results are saved
}, document.title, group_filter_url);
},
dataType: "json"
});
},
initPagination: function() {
return $('.groups-list-holder .pagination').on('ajax:success', function(e, data) {
return $('.groups-list-holder').replaceWith(data.html);
});
}
};
}).call(window);
/**
* Based on project list search.
* Makes search request for groups when user types a value in the search input.
* Updates the html content of the page with the received one.
*/
export default class GroupsList {
constructor() {
this.groupsListFilterElement = document.querySelector('.js-groups-list-filter');
this.groupsListHolderElement = document.querySelector('.js-groups-list-holder');
this.initSearch();
}
initSearch() {
this.debounceFilter = _.debounce(this.filterResults.bind(this), 500);
this.groupsListFilterElement.removeEventListener('input', this.debounceFilter);
this.groupsListFilterElement.addEventListener('input', this.debounceFilter);
}
filterResults() {
const form = document.querySelector('form#group-filter-form');
const groupFilterUrl = `${form.getAttribute('action')}?${$(form).serialize()}`;
$(this.groupsListHolderElement).fadeTo(250, 0.5);
return $.ajax({
url: form.getAttribute('action'),
data: $(form).serialize(),
type: 'GET',
dataType: 'json',
context: this,
complete() {
$(this.groupsListHolderElement).fadeTo(250, 1);
},
success(data) {
this.groupsListHolderElement.innerHTML = data.html;
// Change url so if user reload a page - search results are saved
return window.history.replaceState({
page: groupFilterUrl,
}, document.title, groupFilterUrl);
},
});
}
}
Loading
Loading
@@ -8,7 +8,7 @@
Explore Groups
.nav-controls
= form_tag request.path, method: :get, class: 'group-filter-form', id: 'group-filter-form' do |f|
= search_field_tag :filter_groups, params[:filter_groups], placeholder: 'Filter by name...', class: 'group-filter-form-field form-control input-short groups-list-filter', spellcheck: false, id: 'group-filter-form-field', tabindex: "2"
= search_field_tag :filter_groups, params[:filter_groups], placeholder: 'Filter by name...', class: 'group-filter-form-field form-control input-short js-groups-list-filter', spellcheck: false, id: 'group-filter-form-field', tabindex: "2"
= render 'shared/groups/dropdown'
- if current_user.can_create_group?
= link_to new_group_path, class: "btn btn-new" do
Loading
Loading
.groups-list-holder
.js-groups-list-holder
%ul.content-list
- @group_members.each do |group_member|
- group = group_member.group
Loading
Loading
Loading
Loading
@@ -6,6 +6,3 @@
= render 'empty_state'
- else
= render 'groups'
:javascript
GroupsList.init();
.groups-list-holder
.js-groups-list-holder
%ul.content-list
- @groups.each do |group|
= render 'shared/groups/group', group: group
Loading
Loading
Loading
Loading
@@ -13,6 +13,3 @@
.nothing-here-block No public groups
 
= paginate @groups, theme: "gitlab"
:javascript
GroupsList.init();
Loading
Loading
@@ -28,6 +28,7 @@ var config = {
environments_folder: './environments/folder/environments_folder_bundle.js',
filtered_search: './filtered_search/filtered_search_bundle.js',
graphs: './graphs/graphs_bundle.js',
groups_list: './groups_list.js',
issuable: './issuable/issuable_bundle.js',
merge_conflicts: './merge_conflicts/merge_conflicts_bundle.js',
merge_request_widget: './merge_request_widget/ci_bundle.js',
Loading
Loading
Loading
Loading
@@ -31,4 +31,17 @@ RSpec.describe 'Dashboard Groups page', js: true, feature: true do
expect(page).not_to have_content(nested_group.full_name)
expect(page).not_to have_content(another_group.full_name)
end
it 'resets search when user cleans the input' do
fill_in 'filter_groups', with: group.name
wait_for_ajax
fill_in 'filter_groups', with: ""
wait_for_ajax
expect(page).to have_content(group.full_name)
expect(page).to have_content(public_group.full_name)
expect(page).not_to have_content(private_group.full_name)
expect(page.all('.js-groups-list-holder .content-list li').length).to eq 2
end
end
Loading
Loading
@@ -30,4 +30,17 @@ RSpec.describe 'Explore Groups page', js: true, feature: true do
expect(page).not_to have_content(public_group.full_name)
expect(page).not_to have_content(private_group.full_name)
end
it 'resets search when user cleans the input' do
fill_in 'filter_groups', with: group.name
wait_for_ajax
fill_in 'filter_groups', with: ""
wait_for_ajax
expect(page).to have_content(group.full_name)
expect(page).to have_content(public_group.full_name)
expect(page).not_to have_content(private_group.full_name)
expect(page.all('.js-groups-list-holder .content-list li').length).to eq 2
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment