mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-29 16:34:32 +08:00
Fix sorting of external protocols and start showing results
This commit is contained in:
parent
8338892fc6
commit
0a77cedaf8
8 changed files with 68 additions and 44 deletions
|
@ -17,8 +17,7 @@ function applyClickCallbackOnProtocolCards() {
|
||||||
},
|
},
|
||||||
error: function(_error) {
|
error: function(_error) {
|
||||||
// TODO: we should probably show some alert bubble
|
// TODO: we should probably show some alert bubble
|
||||||
$('.empty-preview-panel').show();
|
resetPreviewPanel();
|
||||||
$('.full-preview-panel').hide();
|
|
||||||
animateSpinner($('.protocol-preview-panel'), false);
|
animateSpinner($('.protocol-preview-panel'), false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -27,4 +26,49 @@ function applyClickCallbackOnProtocolCards() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
applyClickCallbackOnProtocolCards();
|
// Resets preview to the default state
|
||||||
|
function resetPreviewPanel() {
|
||||||
|
$('.empty-preview-panel').show();
|
||||||
|
$('.full-preview-panel').hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
function setDefaultViewState() {
|
||||||
|
resetPreviewPanel();
|
||||||
|
$('.empty-text').show();
|
||||||
|
$('.list-wrapper').hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply AJAX callbacks onto the search box
|
||||||
|
function applySearchCallback() {
|
||||||
|
// Submit form on every input in the search box
|
||||||
|
$('input[name="key"]').off('input').on('input', function() {
|
||||||
|
$('form.protocols-search-bar').submit();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Submit form when clicking on sort buttons
|
||||||
|
$('.protocol-sort label').off('click').on('click', function () {
|
||||||
|
$('form.protocols-search-bar').submit();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Bind ajax calls on the form
|
||||||
|
$('form.protocols-search-bar').off('ajax:success').off('ajax:error')
|
||||||
|
.bind('ajax:success', function(evt, data, status, xhr) {
|
||||||
|
if (data.html) {
|
||||||
|
resetPreviewPanel();
|
||||||
|
$('.empty-text').hide();
|
||||||
|
$('.list-wrapper').show();
|
||||||
|
|
||||||
|
$('.list-wrapper').html(data.html)
|
||||||
|
applyClickCallbackOnProtocolCards();
|
||||||
|
} else {
|
||||||
|
setDefaultViewState();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.bind("ajax:error", function(evt, xhr, status, error) {
|
||||||
|
setDefaultViewState();
|
||||||
|
|
||||||
|
console.log(xhr.responseText);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
applySearchCallback();
|
||||||
|
|
|
@ -150,6 +150,11 @@
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
margin-top: 20px;
|
margin-top: 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.list-wrapper {
|
||||||
|
overflow: auto;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.protocol-preview-panel {
|
.protocol-preview-panel {
|
||||||
|
|
|
@ -51,16 +51,6 @@ module ProtocolImporters
|
||||||
@errors[:invalid_params][:page_id] = 'Page needs to be positive'
|
@errors[:invalid_params][:page_id] = 'Page needs to be positive'
|
||||||
end
|
end
|
||||||
|
|
||||||
# try if order_field is ok
|
|
||||||
if @query_params[:order_field] && CONSTANTS[:available_order_fields].exclude?(@query_params[:order_field]&.to_sym)
|
|
||||||
@errors[:invalid_params][:order_field] = 'Order field is not ok'
|
|
||||||
end
|
|
||||||
|
|
||||||
# try if order dir is ok
|
|
||||||
if @query_params[:order_field] && CONSTANTS[:available_order_dirs].exclude?(@query_params[:order_dir]&.to_sym)
|
|
||||||
@errors[:invalid_params][:order_dir] = 'Order dir is not ok'
|
|
||||||
end
|
|
||||||
|
|
||||||
# try if endpints exists
|
# try if endpints exists
|
||||||
@errors[:invalid_params][:source_endpoint] = 'Wrong source endpoint' unless endpoint_name&.is_a?(String)
|
@errors[:invalid_params][:source_endpoint] = 'Wrong source endpoint' unless endpoint_name&.is_a?(String)
|
||||||
|
|
||||||
|
|
|
@ -44,8 +44,13 @@ module ProtocolImporters
|
||||||
# Default is 1.
|
# Default is 1.
|
||||||
def protocol_list(query_params = {})
|
def protocol_list(query_params = {})
|
||||||
response = with_handle_network_errors do
|
response = with_handle_network_errors do
|
||||||
|
sort_mappings = CONSTANTS[:sort_mappings]
|
||||||
query = CONSTANTS.dig(:endpoints, :protocols, :default_query_params)
|
query = CONSTANTS.dig(:endpoints, :protocols, :default_query_params)
|
||||||
.merge(query_params)
|
.merge(query_params.except(:sort_by))
|
||||||
|
|
||||||
|
if sort_mappings[query_params[:sort_by].to_sym]
|
||||||
|
query = query.merge(sort_mappings[query_params[:sort_by].to_sym])
|
||||||
|
end
|
||||||
|
|
||||||
self.class.get('/protocols', query: query)
|
self.class.get('/protocols', query: query)
|
||||||
end
|
end
|
||||||
|
|
|
@ -69,6 +69,7 @@ module ProtocolImporters
|
||||||
{
|
{
|
||||||
id: e[:id],
|
id: e[:id],
|
||||||
title: e[:title],
|
title: e[:title],
|
||||||
|
source: Constants::PROTOCOLS_IO_V3_API[:source_id],
|
||||||
created_on: e[:created_on],
|
created_on: e[:created_on],
|
||||||
authors: e[:authors].map { |a| a[:name] }.join(', '),
|
authors: e[:authors].map { |a| a[:name] }.join(', '),
|
||||||
nr_of_steps: e[:stats][:number_of_steps],
|
nr_of_steps: e[:stats][:number_of_steps],
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<% protocols.each do |protocol| %>
|
<% protocols[:protocols].each do |protocol| %>
|
||||||
<%= render partial: 'protocol_importers/protocol_card',
|
<%= render partial: 'protocol_importers/protocol_card',
|
||||||
locals: { protocol: protocol } %>
|
locals: { protocol: protocol } %>
|
||||||
<hr>
|
<hr>
|
||||||
|
|
|
@ -21,10 +21,11 @@
|
||||||
<span class='input-group-addon'><i class='fas fa-search '></i></span>
|
<span class='input-group-addon'><i class='fas fa-search '></i></span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='col-md-7'>
|
<div class='col-md-7'>
|
||||||
<div class='protocol-sort'>
|
<div class='protocol-sort'>
|
||||||
<span><%= t('protocols.index.external_protocols.sort_by.title') %></span>
|
<span><%= t('protocols.index.external_protocols.sort_by.title') %></span>
|
||||||
<div class='btn-group' data-toggle='buttons' >
|
<div class='btn-group' data-toggle='buttons'>
|
||||||
<label class='btn btn-link active'>
|
<label class='btn btn-link active'>
|
||||||
<input type='radio' name='sort_by' id='alphabetically' value='alpha'>
|
<input type='radio' name='sort_by' id='alphabetically' value='alpha'>
|
||||||
<%= t('protocols.index.external_protocols.sort_by.alphabetically') %>
|
<%= t('protocols.index.external_protocols.sort_by.alphabetically') %>
|
||||||
|
@ -52,32 +53,7 @@
|
||||||
<%= t('protocols.index.external_protocols.list_panel.empty_text') %>
|
<%= t('protocols.index.external_protocols.list_panel.empty_text') %>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='list'>
|
<div class='list-wrapper'></div>
|
||||||
<div class="external-protocol-result">
|
|
||||||
<a href="#" data-source="protocolsio/v3" data-id="11176" data-action="external-import" data-url="<%= team_build_external_protocol_path(current_team.id,) %>">Protocols IO, 11176</a>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class='protocol-card'
|
|
||||||
data-protocol-source='protocolsio/v3'
|
|
||||||
data-show-url='<%= team_show_external_protocol_path(current_team.id) %>'
|
|
||||||
data-show-protocol-id='Extracting-DNA-from-bananas-esvbee6'>
|
|
||||||
Banana protocol (click me)
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class='protocol-card'
|
|
||||||
data-protocol-source='protocolsio/v3'
|
|
||||||
data-show-url='<%= team_show_external_protocol_path(current_team.id) %>'
|
|
||||||
data-show-protocol-id='cut-run-targeted-in-situ-genome-wide-profiling-wit-mgjc3un'>
|
|
||||||
Cut run targeted protocol (click me)
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class='protocol-card'
|
|
||||||
data-protocol-source='protocolsio/3'
|
|
||||||
data-show-url='<%= team_show_external_protocol_path(current_team.id) %>'
|
|
||||||
data-show-protocol-id='errorr'>
|
|
||||||
Error protocol (click me, should default to default screen)
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class='col-md-7 protocol-preview-panel'>
|
<div class='col-md-7 protocol-preview-panel'>
|
||||||
|
|
|
@ -203,8 +203,11 @@ class Constants
|
||||||
base_uri: 'https://www.protocols.io/api/v3/',
|
base_uri: 'https://www.protocols.io/api/v3/',
|
||||||
default_timeout: 10,
|
default_timeout: 10,
|
||||||
debug_level: :debug,
|
debug_level: :debug,
|
||||||
available_order_fields: %i(title created_on),
|
sort_mappings: {
|
||||||
available_order_dirs: %i(asc desc),
|
alpha: { order_field: :name, order_dir: :asc },
|
||||||
|
newest: { order_field: :date, order_dir: :desc },
|
||||||
|
oldest: { order_field: :date, order_dir: :asc }
|
||||||
|
},
|
||||||
endpoints: {
|
endpoints: {
|
||||||
protocols: {
|
protocols: {
|
||||||
default_query_params: {
|
default_query_params: {
|
||||||
|
|
Loading…
Add table
Reference in a new issue