mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-09-20 14:45:56 +08:00
Merge pull request #1073 from ZmagoD/zd_SCI_2206
add ID column to repository [fixes SCI-2206]
This commit is contained in:
commit
d1f3a65279
|
@ -47,7 +47,7 @@ var RepositoryDatatable = (function(global) {
|
|||
originalHeader = $(TABLE_ID + ' thead').children().clone();
|
||||
viewAssigned = 'assigned';
|
||||
TABLE = $(TABLE_ID).DataTable({
|
||||
order: [[2, 'desc']],
|
||||
order: [[3, 'desc']],
|
||||
dom: "R<'row'<'col-sm-9-custom toolbar'l><'col-sm-3-custom'f>>tpi",
|
||||
stateSave: true,
|
||||
processing: true,
|
||||
|
@ -84,7 +84,12 @@ var RepositoryDatatable = (function(global) {
|
|||
orderable: true,
|
||||
sWidth: '1%'
|
||||
}, {
|
||||
targets: 2,
|
||||
targets: 2,
|
||||
searchable: true,
|
||||
orderable: true,
|
||||
sWidth: '1%'
|
||||
}, {
|
||||
targets: 3,
|
||||
render: function(data, type, row) {
|
||||
return "<a href='" + row.recordInfoUrl + "'" +
|
||||
"class='record-info-link'>" + data + '</a>';
|
||||
|
@ -255,15 +260,18 @@ var RepositoryDatatable = (function(global) {
|
|||
case 'assigned':
|
||||
val = -2;
|
||||
break;
|
||||
case 'row-name':
|
||||
case 'row-id':
|
||||
val = -3;
|
||||
break;
|
||||
case 'added-by':
|
||||
break
|
||||
case 'row-name':
|
||||
val = -4;
|
||||
break;
|
||||
case 'added-on':
|
||||
case 'added-by':
|
||||
val = -5;
|
||||
break;
|
||||
case 'added-on':
|
||||
val = -6;
|
||||
break;
|
||||
default:
|
||||
val = th.attr('id');
|
||||
}
|
||||
|
|
|
@ -10,9 +10,10 @@ module RepositoryDatatableHelper
|
|||
row = {
|
||||
'DT_RowId': record.id,
|
||||
'1': assigned_row(record, assigned_rows),
|
||||
'2': escape_input(record.name),
|
||||
'3': I18n.l(record.created_at, format: :full),
|
||||
'4': escape_input(record.created_by.full_name),
|
||||
'2': record.id,
|
||||
'3': escape_input(record.name),
|
||||
'4': I18n.l(record.created_at, format: :full),
|
||||
'5': escape_input(record.created_by.full_name),
|
||||
'recordEditUrl': Rails.application.routes.url_helpers
|
||||
.edit_repository_repository_row_path(
|
||||
repository,
|
||||
|
|
|
@ -68,14 +68,25 @@ module SearchableModel
|
|||
end
|
||||
else
|
||||
unless attrs.empty?
|
||||
# quick fix to enable searching by repositoy_row id
|
||||
id_index = { present: false }
|
||||
where_str =
|
||||
(attrs.map.with_index do |a, i|
|
||||
"(trim_html_tags(#{a})) #{like} :t#{i} OR "
|
||||
if a == 'repository_rows.id'
|
||||
id_index = { present: true, val: i }
|
||||
"(#{a}) = :t#{i} OR "
|
||||
else
|
||||
"(trim_html_tags(#{a})) #{like} :t#{i} OR "
|
||||
end
|
||||
end
|
||||
).join[0..-5]
|
||||
vals = (
|
||||
attrs.map.with_index do |_, i|
|
||||
["t#{i}".to_sym, "%#{sanitize_sql_like(query.to_s)}%"]
|
||||
if id_index[:present] && id_index[:val] == i
|
||||
["t#{i}".to_sym, sanitize_sql_like(query).to_i]
|
||||
else
|
||||
["t#{i}".to_sym, "%#{sanitize_sql_like(query.to_s)}%"]
|
||||
end
|
||||
end
|
||||
).to_h
|
||||
|
||||
|
|
|
@ -343,6 +343,7 @@ class MyModule < ApplicationRecord
|
|||
.where(repository_id: repository_id)
|
||||
.order(created_at: order).find_each do |row|
|
||||
row_json = []
|
||||
row_json << row.id
|
||||
row_json << row.name
|
||||
row_json << I18n.l(row.created_at, format: :full)
|
||||
row_json << row.created_by.full_name
|
||||
|
@ -351,6 +352,7 @@ class MyModule < ApplicationRecord
|
|||
|
||||
# Prepare column headers
|
||||
headers = [
|
||||
I18n.t('repositories.table.id'),
|
||||
I18n.t('repositories.table.row_name'),
|
||||
I18n.t('repositories.table.added_on'),
|
||||
I18n.t('repositories.table.added_by')
|
||||
|
|
|
@ -55,7 +55,9 @@ class RepositoryDatatableService
|
|||
|
||||
def search(value)
|
||||
includes_json = { repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES }
|
||||
searchable_attributes = ['repository_rows.name', 'users.full_name'] +
|
||||
searchable_attributes = ['repository_rows.name',
|
||||
'users.full_name',
|
||||
'repository_rows.id'] +
|
||||
Extends::REPOSITORY_EXTRA_SEARCH_ATTR
|
||||
|
||||
RepositoryRow.left_outer_joins(:created_by)
|
||||
|
@ -76,6 +78,7 @@ class RepositoryDatatableService
|
|||
def sortable_columns
|
||||
array = [
|
||||
'assigned',
|
||||
'repository_rows.id',
|
||||
'repository_rows.name',
|
||||
'repository_rows.created_at',
|
||||
'users.full_name'
|
||||
|
|
|
@ -24,10 +24,12 @@ module RepositoryZipExport
|
|||
when -1, -2
|
||||
next
|
||||
when -3
|
||||
I18n.t('repositories.table.row_name')
|
||||
I18n.t('repositories.table.id')
|
||||
when -4
|
||||
I18n.t('repositories.table.added_by')
|
||||
I18n.t('repositories.table.row_name')
|
||||
when -5
|
||||
I18n.t('repositories.table.added_by')
|
||||
when -6
|
||||
I18n.t('repositories.table.added_on')
|
||||
else
|
||||
column = RepositoryColumn.find_by_id(c_id)
|
||||
|
@ -44,10 +46,12 @@ module RepositoryZipExport
|
|||
when -1, -2
|
||||
next
|
||||
when -3
|
||||
row.name
|
||||
row.id
|
||||
when -4
|
||||
row.created_by.full_name
|
||||
row.name
|
||||
when -5
|
||||
row.created_by.full_name
|
||||
when -6
|
||||
I18n.l(row.created_at, format: :full)
|
||||
else
|
||||
cell = row.repository_cells
|
||||
|
|
|
@ -13,12 +13,17 @@
|
|||
</ol>
|
||||
<p>
|
||||
<span>
|
||||
<%= t "repository_row.modal_info.added_on" %>
|
||||
<%=t 'repository_row.modal_info.ID' %>
|
||||
<%= @repository_row.id %>
|
||||
</span>
|
||||
<br>
|
||||
<span>
|
||||
<%= t "repository_row.modal_info.added_on" %>:
|
||||
<%= l @repository_row.created_at, format: :full %>
|
||||
</span>
|
||||
<br>
|
||||
<span>
|
||||
<%= t "repository_row.modal_info.added_by" %>
|
||||
<%= t "repository_row.modal_info.added_by" %>:
|
||||
<%= @repository_row.created_by.full_name %>
|
||||
</span>
|
||||
<% @repository_row.repository_cells.each do |repository_cell| %>
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
data-current-uri="<%= request.original_url %>"
|
||||
data-repository-id="<%= repository.id %>"
|
||||
data-source="<%= repository_index_link %>"
|
||||
data-num-columns="<%= 5 + repository.repository_columns.count %>"
|
||||
data-num-columns="<%= 6 + repository.repository_columns.count %>"
|
||||
data-create-record="<%= repository_repository_rows_path(repository) %>"
|
||||
data-delete-record="<%= repository_delete_records_path(repository) %>"
|
||||
data-max-dropdown-length="<%= Constants::NAME_TRUNCATION_LENGTH_DROPDOWN %>"
|
||||
|
@ -16,6 +16,7 @@
|
|||
<tr>
|
||||
<th id="checkbox"><input name="select_all" value="1" type="checkbox"></th>
|
||||
<th id="assigned"><%= t("repositories.table.assigned") %></th>
|
||||
<th id="row-id"><%= t("repositories.table.id") %></th>
|
||||
<th id="row-name"><%= t("repositories.table.row_name") %></th>
|
||||
<th id="added-on"><%= t("repositories.table.added_on") %></th>
|
||||
<th id="added-by"><%= t("repositories.table.added_by") %></th>
|
||||
|
|
|
@ -6,13 +6,11 @@
|
|||
</h5>
|
||||
|
||||
<p>
|
||||
<% repository_row.repository_cells.each do |cell| %>
|
||||
<span>
|
||||
<%=t "search.index.repositories.custom_column", column: cell.repository_column.name %>
|
||||
<%= highlight cell.value.data, search_query.strip.split(/\s+/) %>
|
||||
</span>
|
||||
<br>
|
||||
<% end %>
|
||||
<span>
|
||||
<%=t 'repository_row.modal_info.ID' %>
|
||||
<%= repository_row.id %>
|
||||
</span>
|
||||
<br />
|
||||
<span>
|
||||
<%=t "search.index.repositories.added_on" %>
|
||||
<%=l repository_row.created_at, format: :full %>
|
||||
|
@ -22,6 +20,13 @@
|
|||
<%=t "search.index.repositories.added_by" %>
|
||||
<%= highlight repository_row.created_by.full_name, search_query.strip.split(/\s+/) %>
|
||||
</span>
|
||||
<% repository_row.repository_cells.each do |cell| %>
|
||||
<span>
|
||||
<%=t "search.index.repositories.custom_column", column: cell.repository_column.name %>
|
||||
<%= highlight cell.value.data, search_query.strip.split(/\s+/) %>
|
||||
</span>
|
||||
<br>
|
||||
<% end %>
|
||||
</p>
|
||||
|
||||
<p>
|
||||
|
|
|
@ -158,7 +158,7 @@ class Constants
|
|||
COLOR_DOVE_GRAY = '#666666'.freeze # $color-dove-gray
|
||||
COLOR_EMPEROR = '#555555'.freeze # $color-emperor
|
||||
COLOR_BLACK = '#000000'.freeze # $color-black
|
||||
|
||||
|
||||
|
||||
#=============================================================================
|
||||
# External URLs
|
||||
|
@ -842,17 +842,17 @@ class Constants
|
|||
REPOSITORY_TABLE_DEFAULT_STATE = {
|
||||
'time' => 0,
|
||||
'start' => 0,
|
||||
'length' => 5,
|
||||
'order' => [[2, 'desc']],
|
||||
'length' => 6,
|
||||
'order' => [[3, 'desc']],
|
||||
'search' => { 'search' => '',
|
||||
'smart' => true,
|
||||
'regex' => false,
|
||||
'caseInsensitive' => true },
|
||||
'columns' => [],
|
||||
'assigned' => 'assigned',
|
||||
'ColReorder' => [*0..4]
|
||||
'ColReorder' => [*0..5]
|
||||
}
|
||||
5.times do
|
||||
6.times do
|
||||
REPOSITORY_TABLE_DEFAULT_STATE['columns'] << {
|
||||
'visible' => true,
|
||||
'search' => { 'search' => '',
|
||||
|
|
|
@ -918,6 +918,7 @@ en:
|
|||
breadcrumbs:
|
||||
repositories: "Repositories"
|
||||
table:
|
||||
id: 'ID'
|
||||
assigned: "Assigned"
|
||||
row_name: "Name"
|
||||
added_on: "Added on"
|
||||
|
@ -1003,6 +1004,7 @@ en:
|
|||
head_title: "Inventories | %{library}"
|
||||
repository_row:
|
||||
modal_info:
|
||||
ID: 'ID:'
|
||||
head_title: "Information for item '%{repository_row}'"
|
||||
added_on: "Added on"
|
||||
added_by: "Added by"
|
||||
|
|
|
@ -62,7 +62,7 @@ describe RepositoryRowsController, type: :controller do
|
|||
|
||||
describe 'json object' do
|
||||
it 'returns a valid object' do
|
||||
params = { order: { 0 => { column: '3', dir: 'asc' } },
|
||||
params = { order: { 0 => { column: '4', dir: 'asc' } },
|
||||
drow: '0',
|
||||
search: { value: '' },
|
||||
length: '10',
|
||||
|
@ -77,7 +77,7 @@ describe RepositoryRowsController, type: :controller do
|
|||
|
||||
describe 'pagination' do
|
||||
it 'returns first 10 records' do
|
||||
params = { order: { 0 => { column: '3', dir: 'asc' } },
|
||||
params = { order: { 0 => { column: '4', dir: 'asc' } },
|
||||
drow: '0',
|
||||
search: { value: '' },
|
||||
length: '10',
|
||||
|
@ -86,11 +86,11 @@ describe RepositoryRowsController, type: :controller do
|
|||
get :index, params: params, format: :json
|
||||
response_body = JSON.parse(response.body)
|
||||
expect(response_body['data'].length).to eq 10
|
||||
expect(response_body['data'].first['2']).to eq 'row (0)'
|
||||
expect(response_body['data'].first['3']).to eq 'row (0)'
|
||||
end
|
||||
|
||||
it 'returns next 10 records' do
|
||||
params = { order: { 0 => { column: '3', dir: 'asc' } },
|
||||
params = { order: { 0 => { column: '4', dir: 'asc' } },
|
||||
drow: '0',
|
||||
search: { value: '' },
|
||||
length: '10',
|
||||
|
@ -99,11 +99,11 @@ describe RepositoryRowsController, type: :controller do
|
|||
get :index, params: params, format: :json
|
||||
response_body = JSON.parse(response.body)
|
||||
expect(response_body['data'].length).to eq 10
|
||||
expect(response_body['data'].first['2']).to eq 'row (10)'
|
||||
expect(response_body['data'].first['3']).to eq 'row (10)'
|
||||
end
|
||||
|
||||
it 'returns first 25 records' do
|
||||
params = { order: { 0 => { column: '2', dir: 'desc' } },
|
||||
params = { order: { 0 => { column: '4', dir: 'desc' } },
|
||||
drow: '0',
|
||||
search: { value: '' },
|
||||
length: '25',
|
||||
|
|
|
@ -52,7 +52,7 @@ describe RepositoryDatatableService do
|
|||
|
||||
context 'object' do
|
||||
let(:params) do
|
||||
{ order: { 0 => { column: '2', dir: 'asc' } },
|
||||
{ order: { 0 => { column: '3', dir: 'asc' } },
|
||||
search: { value: 'row' } }
|
||||
end
|
||||
|
||||
|
@ -65,7 +65,7 @@ describe RepositoryDatatableService do
|
|||
contitions = subject.send(:build_conditions, params)
|
||||
expect(contitions[:search_value]).to eq 'row'
|
||||
expect(contitions[:order_by_column]).to eq(
|
||||
{ column: 2, dir: 'asc' }
|
||||
{ column: 3, dir: 'asc' }
|
||||
)
|
||||
end
|
||||
end
|
||||
|
@ -73,7 +73,7 @@ describe RepositoryDatatableService do
|
|||
describe '#sortable_columns' do
|
||||
it 'returns an array of all columns that are sortable' do
|
||||
columns = subject.send(:sortable_columns)
|
||||
expect(columns.length).to eq 5
|
||||
expect(columns.length).to eq 6
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -92,7 +92,7 @@ describe RepositoryDatatableService do
|
|||
|
||||
describe 'ordering' do
|
||||
it 'is ordered by row name asc' do
|
||||
params = { order: { 0 => { column: '2', dir: 'asc' } },
|
||||
params = { order: { 0 => { column: '3', dir: 'asc' } },
|
||||
search: { value: '' } }
|
||||
subject = RepositoryDatatableService.new(repository,
|
||||
params,
|
||||
|
@ -102,7 +102,7 @@ describe RepositoryDatatableService do
|
|||
end
|
||||
|
||||
it 'is ordered by row name desc' do
|
||||
params = { order: { 0 => { column: '2', dir: 'desc' } },
|
||||
params = { order: { 0 => { column: '3', dir: 'desc' } },
|
||||
search: { value: '' } }
|
||||
subject = RepositoryDatatableService.new(repository,
|
||||
params,
|
||||
|
@ -121,7 +121,7 @@ describe RepositoryDatatableService do
|
|||
end
|
||||
|
||||
it 'returns only the searched entity' do
|
||||
params = { order: { 0 => { column: '2', dir: 'desc' } },
|
||||
params = { order: { 0 => { column: '4', dir: 'desc' } },
|
||||
search: { value: 'test' } }
|
||||
subject = RepositoryDatatableService.new(repository,
|
||||
params,
|
||||
|
|
|
@ -8,13 +8,14 @@
|
|||
"data": {
|
||||
"type": "array",
|
||||
"items":{
|
||||
"required": ["DT_RowId", "1", "2", "3", "4", "recordEditUrl", "recordUpdateUrl", "recordInfoUrl"],
|
||||
"required": ["DT_RowId", "1", "2", "3", "4", "5", "recordEditUrl", "recordUpdateUrl", "recordInfoUrl"],
|
||||
"properties": {
|
||||
"DT_RowId": { "type": "integer" },
|
||||
"1": { "type": "string" },
|
||||
"2": { "type": "string" },
|
||||
"2": { "type": "integer" },
|
||||
"3": { "type": "string" },
|
||||
"4": { "type": "string" },
|
||||
"5": { "type": "string" },
|
||||
"recordEditUrl": { "type": "string" },
|
||||
"recordUpdateUrl": { "type": "string" },
|
||||
"recordInfoUrl": { "type": "string" }
|
||||
|
|
Loading…
Reference in a new issue