Commit 0a10d859 authored by Filipa Lacerda's avatar Filipa Lacerda

Update JS to use new standards

parent b7c30cae
...@@ -177,7 +177,6 @@ require('./project_select'); ...@@ -177,7 +177,6 @@ require('./project_select');
require('./project_show'); require('./project_show');
require('./project_variables'); require('./project_variables');
require('./projects_list'); require('./projects_list');
require('./groups_list');
require('./render_gfm'); require('./render_gfm');
require('./render_math'); require('./render_math');
require('./right_sidebar'); require('./right_sidebar');
......
...@@ -35,6 +35,8 @@ ...@@ -35,6 +35,8 @@
/* global Labels */ /* global Labels */
/* global Shortcuts */ /* global Shortcuts */
import GroupsList from './groups_list';
const ShortcutsBlob = require('./shortcuts_blob'); const ShortcutsBlob = require('./shortcuts_blob');
const UserCallout = require('./user_callout'); const UserCallout = require('./user_callout');
...@@ -96,6 +98,10 @@ const UserCallout = require('./user_callout'); ...@@ -96,6 +98,10 @@ const UserCallout = require('./user_callout');
case 'dashboard:todos:index': case 'dashboard:todos:index':
new gl.Todos(); new gl.Todos();
break; break;
case 'dashboard:groups:index':
case 'explore:groups:index':
new GroupsList();
break;
case 'projects:milestones:new': case 'projects:milestones:new':
case 'projects:milestones:edit': case 'projects:milestones:edit':
case 'projects:milestones:update': case 'projects:milestones:update':
......
/* 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 */ /**
* 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');
(function() {
window.GroupsList = {
init: function() {
$(".groups-list-filter").off('keyup');
this.initSearch(); 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();
} }
});
}, initSearch() {
filterResults: function() { this.debounceFilter = _.debounce(this.filterResults.bind(this), 500);
var form, group_filter_url, search;
$('.groups-list-holder').fadeTo(250, 0.5); this.groupsListFilterElement.removeEventListener('input', this.debounceFilter);
form = null; this.groupsListFilterElement.addEventListener('input', this.debounceFilter);
form = $("form#group-filter-form"); }
search = $(".groups-list-filter").val();
group_filter_url = form.attr('action') + '?' + form.serialize(); filterResults() {
const form = document.querySelector('form#group-filter-form');
const groupFilterUrl = `${form.getAttribute('action')}?${$(form).serialize()}`;
$(this.groupsListHolderElement).fadeTo(250, 0.5);
return $.ajax({ return $.ajax({
type: "GET", url: form.getAttribute('action'),
url: form.attr('action'), data: $(form).serialize(),
data: form.serialize(), type: 'GET',
complete: function() { dataType: 'json',
return $('.groups-list-holder').fadeTo(250, 1); context: this,
complete() {
$(this.groupsListHolderElement).fadeTo(250, 1);
}, },
success: function(data) { success(data) {
$('.groups-list-holder').replaceWith(data.html); this.groupsListHolderElement.innerHTML = data.html;
return history.replaceState({
page: group_filter_url
// Change url so if user reload a page - search results are saved // Change url so if user reload a page - search results are saved
}, document.title, group_filter_url); return window.history.replaceState({
}, page: groupFilterUrl,
dataType: "json"
}); }, document.title, groupFilterUrl);
}, },
initPagination: function() {
return $('.groups-list-holder .pagination').on('ajax:success', function(e, data) {
return $('.groups-list-holder').replaceWith(data.html);
}); });
} }
}; }
}).call(window);
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
Explore Groups Explore Groups
.nav-controls .nav-controls
= form_tag request.path, method: :get, class: 'group-filter-form', id: 'group-filter-form' do |f| = 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' = render 'shared/groups/dropdown'
- if current_user.can_create_group? - if current_user.can_create_group?
= link_to new_group_path, class: "btn btn-new" do = link_to new_group_path, class: "btn btn-new" do
......
.groups-list-holder .js-groups-list-holder
%ul.content-list %ul.content-list
- @group_members.each do |group_member| - @group_members.each do |group_member|
- group = group_member.group - group = group_member.group
......
...@@ -6,6 +6,3 @@ ...@@ -6,6 +6,3 @@
= render 'empty_state' = render 'empty_state'
- else - else
= render 'groups' = render 'groups'
:javascript
GroupsList.init();
.groups-list-holder .js-groups-list-holder
%ul.content-list %ul.content-list
- @groups.each do |group| - @groups.each do |group|
= render 'shared/groups/group', group: group = render 'shared/groups/group', group: group
......
...@@ -13,6 +13,3 @@ ...@@ -13,6 +13,3 @@
.nothing-here-block No public groups .nothing-here-block No public groups
= paginate @groups, theme: "gitlab" = paginate @groups, theme: "gitlab"
:javascript
GroupsList.init();
...@@ -28,6 +28,7 @@ var config = { ...@@ -28,6 +28,7 @@ var config = {
environments_folder: './environments/folder/environments_folder_bundle.js', environments_folder: './environments/folder/environments_folder_bundle.js',
filtered_search: './filtered_search/filtered_search_bundle.js', filtered_search: './filtered_search/filtered_search_bundle.js',
graphs: './graphs/graphs_bundle.js', graphs: './graphs/graphs_bundle.js',
groups_list: './groups_list.js',
issuable: './issuable/issuable_bundle.js', issuable: './issuable/issuable_bundle.js',
merge_conflicts: './merge_conflicts/merge_conflicts_bundle.js', merge_conflicts: './merge_conflicts/merge_conflicts_bundle.js',
merge_request_widget: './merge_request_widget/ci_bundle.js', merge_request_widget: './merge_request_widget/ci_bundle.js',
......
...@@ -31,4 +31,17 @@ RSpec.describe 'Dashboard Groups page', js: true, feature: true do ...@@ -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(nested_group.full_name)
expect(page).not_to have_content(another_group.full_name) expect(page).not_to have_content(another_group.full_name)
end 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 end
...@@ -30,4 +30,17 @@ RSpec.describe 'Explore Groups page', js: true, feature: true do ...@@ -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(public_group.full_name)
expect(page).not_to have_content(private_group.full_name) expect(page).not_to have_content(private_group.full_name)
end 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 end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment