mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-06 12:43:06 +08:00
Fix datatables state restore [SCI-2733]
This commit is contained in:
parent
af02f29fb5
commit
f221d71bbc
5 changed files with 26 additions and 19 deletions
|
@ -525,6 +525,7 @@
|
|||
TABLE = $(TABLE_ID).DataTable({
|
||||
dom: "R<'row'<'col-sm-9-custom toolbar'l><'col-sm-3-custom'f>>tpi",
|
||||
stateSave: true,
|
||||
stateDuration: 0,
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
scrollY: '64vh',
|
||||
|
|
|
@ -46,8 +46,8 @@ class ProjectsController < ApplicationController
|
|||
@project = Project.new
|
||||
view_state =
|
||||
current_team.current_view_state(current_user)
|
||||
@current_filter = view_state.state['filter']
|
||||
@current_sort = view_state.state.dig('cards', 'sort')
|
||||
@current_filter = view_state.state.dig('projects', 'filter')
|
||||
@current_sort = view_state.state.dig('projects', 'cards', 'sort')
|
||||
load_projects_tree
|
||||
end
|
||||
end
|
||||
|
@ -323,7 +323,8 @@ class ProjectsController < ApplicationController
|
|||
respond_to do |format|
|
||||
format.json do
|
||||
render json: {
|
||||
state: current_team.current_view_state(current_user).state['table']
|
||||
state: current_team.current_view_state(current_user)
|
||||
.state.dig('projects', 'table')
|
||||
}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -47,14 +47,14 @@ class Team < ApplicationRecord
|
|||
end
|
||||
|
||||
def default_view_state
|
||||
{ filter: 'active',
|
||||
cards: { sort: 'new' },
|
||||
table: {
|
||||
'start': 0,
|
||||
'length': 10,
|
||||
'order' => [2, 'asc'],
|
||||
'time': Time.new.to_i
|
||||
} }
|
||||
{ 'projects' =>
|
||||
{ 'cards' => { 'sort' => 'new' },
|
||||
'table' =>
|
||||
{ 'time' => Time.now.to_i,
|
||||
'order' => [[2, 'asc']],
|
||||
'start' => 0,
|
||||
'length' => 10 },
|
||||
'filter' => 'active' } }
|
||||
end
|
||||
|
||||
def search_users(query = nil)
|
||||
|
|
|
@ -197,6 +197,7 @@ class User < ApplicationRecord
|
|||
has_many :notifications, through: :user_notifications
|
||||
has_many :zip_exports, inverse_of: :user, dependent: :destroy
|
||||
has_many :datatables_teams, class_name: '::Views::Datatables::DatatablesTeam'
|
||||
has_many :view_states, dependent: :destroy
|
||||
|
||||
# If other errors besides parameter "avatar" exist,
|
||||
# they will propagate to "avatar" also, so remove them
|
||||
|
|
|
@ -6,14 +6,14 @@ class ProjectsOverviewService
|
|||
@user = user
|
||||
@params = params
|
||||
@view_state = @team.current_view_state(@user)
|
||||
if @view_state.state['filter'] != @params[:filter] &&
|
||||
if @view_state.state.dig('projects', 'filter') != @params[:filter] &&
|
||||
%w(active archived all).include?(@params[:filter])
|
||||
@view_state.state['filter'] = @params[:filter]
|
||||
@view_state.state['projects']['filter'] = @params[:filter]
|
||||
end
|
||||
end
|
||||
|
||||
def project_cards
|
||||
cards_state = @view_state.state['cards']
|
||||
cards_state = @view_state.state.dig('projects', 'cards')
|
||||
records = fetch_records
|
||||
records = records.where(archived: true) if @params[:filter] == 'archived'
|
||||
records = records.where(archived: false) if @params[:filter] == 'active'
|
||||
|
@ -21,7 +21,7 @@ class ProjectsOverviewService
|
|||
cards_state['sort'] != @params[:sort] &&
|
||||
%w(new old atoz ztoa).include?(@params[:sort])
|
||||
cards_state['sort'] = @params[:sort]
|
||||
@view_state.state['cards'] = cards_state
|
||||
@view_state.state['projects']['cards'] = cards_state
|
||||
end
|
||||
@view_state.save! if @view_state.changed?
|
||||
case cards_state['sort']
|
||||
|
@ -39,7 +39,7 @@ class ProjectsOverviewService
|
|||
end
|
||||
|
||||
def projects_datatable
|
||||
table_state = @view_state.state['table']
|
||||
table_state = @view_state.state.dig('projects', 'table')
|
||||
per_page = @params[:length] == '-1' ? 10 : @params[:length].to_i
|
||||
table_state['length'] = per_page if table_state['length'] != per_page
|
||||
page = @params[:start] ? (@params[:start].to_i / per_page) + 1 : 1
|
||||
|
@ -49,7 +49,10 @@ class ProjectsOverviewService
|
|||
search_value = @params.dig(:search, :value)
|
||||
records = search(records, search_value) if search_value.present?
|
||||
records = sort(records).page(page).per(per_page)
|
||||
@view_state.save! if @view_state.changed?
|
||||
if @view_state.changed?
|
||||
@view_state.state['projects']['table']['time'] = Time.now.to_i
|
||||
@view_state.save!
|
||||
end
|
||||
records
|
||||
end
|
||||
|
||||
|
@ -136,7 +139,7 @@ class ProjectsOverviewService
|
|||
end
|
||||
|
||||
def sort(records)
|
||||
order_state = @view_state.state['table']['order'][0]
|
||||
order_state = @view_state.state['projects']['table']['order'][0]
|
||||
order = @params[:order]&.values&.first
|
||||
if order
|
||||
dir = order[:dir] == 'desc' ? 'DESC' : 'ASC'
|
||||
|
@ -146,7 +149,8 @@ class ProjectsOverviewService
|
|||
column_index = '1'
|
||||
end
|
||||
if order_state != [column_index.to_i, dir.downcase]
|
||||
@view_state.state['table']['order'][0] = [column_index.to_i, dir.downcase]
|
||||
@view_state.state['projects']['table']['order'][0] =
|
||||
[column_index.to_i, dir.downcase]
|
||||
end
|
||||
sort_column = sortable_columns[column_index]
|
||||
sort_column ||= sortable_columns['1']
|
||||
|
|
Loading…
Reference in a new issue