Resolve "Personal projects pagination in Profile Overview tab is broken"

This commit is contained in:
Martin Wortschack 2018-10-15 13:10:42 +00:00 committed by Phil Hughes
parent 4321d70d24
commit 892f1257f4
6 changed files with 72 additions and 15 deletions

View file

@ -1,10 +1,15 @@
import axios from '~/lib/utils/axios_utils';
const DEFAULT_LIMIT = 20;
export default class UserOverviewBlock {
constructor(options = {}) {
this.container = options.container;
this.url = options.url;
this.limit = options.limit || 20;
this.requestParams = {
limit: DEFAULT_LIMIT,
...options.requestParams,
};
this.loadData();
}
@ -15,9 +20,7 @@ export default class UserOverviewBlock {
axios
.get(this.url, {
params: {
limit: this.limit,
},
params: this.requestParams,
})
.then(({ data }) => this.render(data))
.catch(() => loadingEl.classList.add('hide'));
@ -34,7 +37,9 @@ export default class UserOverviewBlock {
if (count && count > 0) {
document.querySelector(`${this.container} .js-view-all`).classList.remove('hide');
} else {
document.querySelector(`${this.container} .nothing-here-block`).classList.add('text-left', 'p-0');
document
.querySelector(`${this.container} .nothing-here-block`)
.classList.add('text-left', 'p-0');
}
loadingEl.classList.add('hide');

View file

@ -182,18 +182,22 @@ export default class UserTabs {
this.loadActivityCalendar('overview');
UserTabs.renderMostRecentBlocks('#js-overview .activities-block', 5);
UserTabs.renderMostRecentBlocks('#js-overview .projects-block', 10);
UserTabs.renderMostRecentBlocks('#js-overview .activities-block', {
requestParams: { limit: 5 },
});
UserTabs.renderMostRecentBlocks('#js-overview .projects-block', {
requestParams: { limit: 10, skip_pagination: true },
});
this.loaded.overview = true;
}
static renderMostRecentBlocks(container, limit) {
static renderMostRecentBlocks(container, options) {
// eslint-disable-next-line no-new
new UserOverviewBlock({
container,
url: $(`${container} .overview-content-list`).data('href'),
limit,
...options,
});
}
@ -216,7 +220,12 @@ export default class UserTabs {
let calendarHint = '';
if (action === 'activity') {
calendarHint = sprintf(__('Summary of issues, merge requests, push events, and comments (Timezone: %{utcFormatted})'), { utcFormatted });
calendarHint = sprintf(
__(
'Summary of issues, merge requests, push events, and comments (Timezone: %{utcFormatted})',
),
{ utcFormatted },
);
} else if (action === 'overview') {
calendarHint = __('Issues, merge requests, pushes and comments.');
}
@ -224,7 +233,15 @@ export default class UserTabs {
$calendarWrap.find('.calendar-hint').text(calendarHint);
// eslint-disable-next-line no-new
new ActivityCalendar('.tab-pane.active .js-contrib-calendar', '.tab-pane.active .user-calendar-activities', data, calendarActivitiesPath, utcOffset, 0, monthsAgo);
new ActivityCalendar(
'.tab-pane.active .js-contrib-calendar',
'.tab-pane.active .user-calendar-activities',
data,
calendarActivitiesPath,
utcOffset,
0,
monthsAgo,
);
})
.catch(() => flash(__('There was an error loading users activity calendar.')));
}

View file

@ -56,10 +56,12 @@ class UsersController < ApplicationController
def projects
load_projects
skip_pagination = Gitlab::Utils.to_boolean(params[:skip_pagination])
respond_to do |format|
format.html { render 'show' }
format.json do
pager_json("shared/projects/_list", @projects.count, projects: @projects)
pager_json("shared/projects/_list", @projects.count, projects: @projects, skip_pagination: skip_pagination)
end
end
end

View file

@ -8,6 +8,7 @@
- user = local_assigns[:user]
- show_last_commit_as_description = false unless local_assigns[:show_last_commit_as_description] == true
- remote = false unless local_assigns[:remote] == true
- skip_pagination = false unless local_assigns[:skip_pagination] == true
.js-projects-list-holder
- if any_projects?(projects)
@ -25,6 +26,6 @@
= icon('lock fw', base: 'circle', class: 'fa-lg private-fork-icon')
%strong= pluralize(@private_forks_count, 'private fork')
%span &nbsp;you have no access to.
= paginate_collection(projects, remote: remote)
= paginate_collection(projects, remote: remote) unless skip_pagination
- else
.nothing-here-block No projects found

View file

@ -0,0 +1,5 @@
---
title: Hide pagination for personal projects on profile overview tab
merge_request: 22321
author:
type: other

View file

@ -104,8 +104,9 @@ describe 'Overview tab on a user profile', :js do
end
describe 'user has a personal project' do
let(:private_project) { create(:project, :private, namespace: user.namespace, creator: user) { |p| p.add_maintainer(user) } }
let!(:private_event) { create(:event, project: private_project, author: user) }
before do
create(:project, :private, namespace: user.namespace, creator: user) { |p| p.add_maintainer(user) }
end
include_context 'visit overview tab'
@ -119,5 +120,31 @@ describe 'Overview tab on a user profile', :js do
expect(find('#js-overview .projects-block')).to have_selector('.js-view-all', visible: true)
end
end
describe 'user has more than ten personal projects' do
before do
create_list(:project, 11, :private, namespace: user.namespace, creator: user) do |project|
project.add_maintainer(user)
end
end
include_context 'visit overview tab'
it 'it shows max. ten entries in the list of projects' do
page.within('.projects-block') do
expect(page).to have_selector('.project-row', count: 10)
end
end
it 'shows a link to the project list' do
expect(find('#js-overview .projects-block')).to have_selector('.js-view-all', visible: true)
end
it 'does not show pagination' do
page.within('.projects-block') do
expect(page).not_to have_selector('.gl-pagination')
end
end
end
end
end