mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
fixes bug with duplicated activities and wrong date separators [fixes SCI-1866]
This commit is contained in:
parent
219ef3baf6
commit
1d3881b649
|
@ -109,14 +109,14 @@
|
|||
// Activity feed modal in main navigation menu
|
||||
var activityModal = $('#activity-modal');
|
||||
var activityModalBody = activityModal.find('.modal-body');
|
||||
|
||||
var initMoreBtn = function() {
|
||||
activityModalBody.find('.btn-more-activities')
|
||||
.on('ajax:success', function(e, data) {
|
||||
$(data.html).insertBefore($(this).parents('li'));
|
||||
$(this).attr('href', data.next_url);
|
||||
if (data.activities_number < data.per_page) {
|
||||
$(this).remove();
|
||||
if(data.more_url) {
|
||||
$(this).attr('href', data.more_url);
|
||||
} else {
|
||||
$(this).remove();
|
||||
}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -1,47 +1,33 @@
|
|||
class ActivitiesController < ApplicationController
|
||||
include ActivityHelper
|
||||
|
||||
before_action :load_vars
|
||||
|
||||
def index
|
||||
@per_page = Constants::ACTIVITY_AND_NOTIF_SEARCH_LIMIT
|
||||
@activities = current_user.last_activities(@last_activity_id,
|
||||
@per_page + 1)
|
||||
|
||||
@overflown = @activities.length > @per_page
|
||||
|
||||
@activities = current_user.last_activities(@last_activity_id,
|
||||
@per_page)
|
||||
|
||||
# Whether to hide date labels
|
||||
@hide_today = params.include? :from
|
||||
@day = @last_activity.present? ?
|
||||
days_since_1970(@last_activity.created_at) :
|
||||
days_since_1970(DateTime.current + 30.days)
|
||||
|
||||
more_url = url_for(activities_url(format: :json,
|
||||
from: @activities.last.id)) if @overflown
|
||||
respond_to do |format|
|
||||
format.json {
|
||||
render :json => {
|
||||
per_page: @per_page,
|
||||
activities_number: @activities.length,
|
||||
next_url: more_url,
|
||||
html: render_to_string({
|
||||
partial: 'index.html.erb',
|
||||
locals: {
|
||||
more_activities_url: more_url,
|
||||
hide_today: @hide_today,
|
||||
day: @day
|
||||
}
|
||||
})
|
||||
format.json do
|
||||
render json: {
|
||||
more_url: local_vars.fetch(:more_activities_url),
|
||||
html: render_to_string(
|
||||
partial: 'index.html.erb', locals: local_vars
|
||||
)
|
||||
}
|
||||
}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def load_vars
|
||||
@last_activity_id = params[:from].to_i || 0
|
||||
@last_activity = Activity.find_by_id(@last_activity_id)
|
||||
private
|
||||
|
||||
def local_vars
|
||||
page = (params[:page] || 1).to_i
|
||||
activities = current_user.last_activities
|
||||
.page(page)
|
||||
.per(Constants::ACTIVITY_AND_NOTIF_SEARCH_LIMIT)
|
||||
unless activities.last_page?
|
||||
more_url = url_for(activities_url(format: :json, page: page + 1))
|
||||
end
|
||||
{
|
||||
activities: activities,
|
||||
more_activities_url: more_url,
|
||||
page: page
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -22,7 +22,7 @@ module ClientApi
|
|||
{
|
||||
activities: activities,
|
||||
page: page,
|
||||
more: !current_user.last_activities.page(page).last_page?,
|
||||
more: !activities.last_page?,
|
||||
timezone: current_user.time_zone
|
||||
}
|
||||
end
|
||||
|
|
|
@ -99,7 +99,7 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
|||
// when the backend bug will be fixed
|
||||
const newDate = new Date(activity.createdAt);
|
||||
// returns a label with "today" if the date of the activity is today
|
||||
if (i === 0) {
|
||||
if (i === 0 && newDate.toDateString() === new Date().toDateString()) {
|
||||
return GlobalActivitiesModal.renderActivityDateElement(
|
||||
i,
|
||||
activity,
|
||||
|
@ -108,8 +108,13 @@ class GlobalActivitiesModal extends Component<Props, State> {
|
|||
}
|
||||
// else checks if the previous activity is newer than current
|
||||
// and displays a label with the date
|
||||
const prevDate = new Date(arr[i - 1].createdAt);
|
||||
if (prevDate.getDate() > newDate.getDate()) {
|
||||
const prevDate =
|
||||
i !== 0 ? new Date(arr[i - 1].createdAt) : new Date(1901, 1, 1);
|
||||
// filter only date from createdAt without minutes and seconds
|
||||
// used to compare dates
|
||||
const parsePrevDate = new Date(prevDate.toDateString());
|
||||
const parseNewDate = new Date(newDate.toDateString());
|
||||
if (parsePrevDate.getTime() > parseNewDate.getTime()) {
|
||||
return GlobalActivitiesModal.renderActivityDateElement(
|
||||
i,
|
||||
activity,
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
<ul class="no-style double-line content-activities">
|
||||
<% if @activities.length == 0 then %>
|
||||
<% if activities.empty? %>
|
||||
<li><em><%= t'activities.index.no_activities' %></em></li>
|
||||
<% else %>
|
||||
<%= render 'activities/list.html.erb', activities: @activities, hide_today: hide_today, day: @day %>
|
||||
<%= render 'activities/list.html.erb', activities: activities%>
|
||||
<% end %>
|
||||
<% if @last_activity_id < 1 and @overflown %>
|
||||
<% if more_activities_url.present? && page == 1 %>
|
||||
<li class="text-center">
|
||||
<a class="btn btn-default btn-more-activities" href="<%= more_activities_url %>" data-remote="true">
|
||||
<a class="btn btn-default btn-more-activities"
|
||||
href="<%= more_activities_url %>"
|
||||
data-remote="true">
|
||||
<%= t'activities.index.more_activities' %></a>
|
||||
</li>
|
||||
<% end %>
|
||||
|
|
|
@ -1,18 +1,13 @@
|
|||
<%
|
||||
current_day = days_since_1970(DateTime.current)
|
||||
%>
|
||||
<% if !hide_today && activities.count > 0 && days_since_1970(activities[0].created_at) == current_day %>
|
||||
<% if activities.first.created_at.to_date == Date.today %>
|
||||
<li class="text-center activity-date-item">
|
||||
<span class="label label-primary">
|
||||
<%=t "activities.index.today" %>
|
||||
</span>
|
||||
</li>
|
||||
<% end %>
|
||||
<% activities.each do |activity| %>
|
||||
<% activity_day = days_since_1970(activity.created_at) %>
|
||||
|
||||
<% if activity_day < current_day and activity_day < day %>
|
||||
<% day = days_since_1970(activity.created_at) %>
|
||||
<% activities.each_with_index do |activity, index| %>
|
||||
<% prevDate = activities[index - 1] ? activities[index - 1].created_at.to_date : Date.new(1901, 1, 1) %>
|
||||
<% if activity.created_at.to_date < prevDate %>
|
||||
<li class="text-center activity-date-item">
|
||||
<span class="label label-primary">
|
||||
<%= activity.created_at.strftime('%d.%m.%Y') %>
|
||||
|
|
5
spec/factories/user_project.rb
Normal file
5
spec/factories/user_project.rb
Normal file
|
@ -0,0 +1,5 @@
|
|||
FactoryGirl.define do
|
||||
factory :user_project do
|
||||
role 'owner'
|
||||
end
|
||||
end
|
|
@ -179,4 +179,19 @@ describe User, type: :model do
|
|||
it { is_expected.to respond_to(:recent_email_notification) }
|
||||
it { is_expected.to respond_to(:system_message_email_notification) }
|
||||
end
|
||||
|
||||
describe '#last_activities' do
|
||||
let!(:user) { create :user }
|
||||
let!(:project) { create :project }
|
||||
let!(:user_projects) { create :user_project, project: project, user: user }
|
||||
let!(:activity_one) { create :activity, user: user, project: project }
|
||||
let!(:activity_two) { create :activity, user: user, project: project }
|
||||
|
||||
it 'is expected to return an array of user\'s activities' do
|
||||
activities = user.last_activities
|
||||
expect(activities.count).to eq 2
|
||||
expect(activities).to include activity_one
|
||||
expect(activities).to include activity_two
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue