spotlight_search 0.3.0 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/assets/javascripts/spotlight_search.js +9 -0
- data/app/controllers/spotlight_search/export_jobs_controller.rb +3 -1
- data/app/jobs/spotlight_search/export_job.rb +7 -2
- data/lib/spotlight_search/exportable_columns_v2.rb +5 -0
- data/lib/spotlight_search/helpers.rb +13 -6
- data/lib/spotlight_search/utils.rb +4 -2
- data/lib/spotlight_search/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bc7f95a4b32cda3a0fe9572388d9e73ef1bc8d6f539ea2ec63423a59ac051403
|
|
4
|
+
data.tar.gz: 5f2873974e3fc88a2d8693d7dca287d3bb74af3c7538443d3188d78790d81e34
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4063285378cd29f80b0c7a3f67e907bd1f8cf549613754aa54c6633eae2e9037509a3224c83d38128a5119a6627210e7ebd74da591b58e7f9aea253b169fa9db
|
|
7
|
+
data.tar.gz: 85d4eae1e8ca517c454986bc383d57010b52971482b79e1e2285f651f534e57aad1685f8fe8418c8ca263d58897ac5b2fe2e6d4541fe1755a0413f61bfee729d
|
|
@@ -74,6 +74,15 @@ $(document).on('keyup', '[data-type="input-filter"]', function() {
|
|
|
74
74
|
});
|
|
75
75
|
});
|
|
76
76
|
|
|
77
|
+
$(document).on('change', '[data-type="range-filter"]', function() {
|
|
78
|
+
var thisObj;
|
|
79
|
+
thisObj = $(this);
|
|
80
|
+
return $(function() {
|
|
81
|
+
return get_paginated_list(1, thisObj);
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
|
|
77
86
|
$(document).on('change', '[data-type="select-filter"]', function() {
|
|
78
87
|
var thisObj;
|
|
79
88
|
thisObj = $(this);
|
|
@@ -4,7 +4,9 @@ module SpotlightSearch
|
|
|
4
4
|
begin
|
|
5
5
|
klass = params[:class_name].constantize
|
|
6
6
|
if klass.validate_exportable_columns(params[:columns])
|
|
7
|
-
|
|
7
|
+
(filter_params = params[:filters].permit!) if params[:filters].present?
|
|
8
|
+
(sort_params = params[:sort].permit!) if params[:sort].present?
|
|
9
|
+
ExportJob.perform_later(klass.name, params[:email], params[:columns], filter_params, sort_params)
|
|
8
10
|
notice = 'Successfully queued for export'
|
|
9
11
|
else
|
|
10
12
|
notice = 'Invalid columns found'
|
|
@@ -26,6 +26,11 @@ module SpotlightSearch
|
|
|
26
26
|
records = records.send(scope, scope_args)
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
|
+
if klass.default_filters.present?
|
|
30
|
+
klass.default_filters.each do |scope|
|
|
31
|
+
records = records.send(scope)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
29
34
|
if sort.present?
|
|
30
35
|
records = records.order("#{sort['sort_column']} #{sort['sort_direction']}")
|
|
31
36
|
end
|
|
@@ -63,12 +68,12 @@ module SpotlightSearch
|
|
|
63
68
|
|
|
64
69
|
def create_excel_v2(records, class_name)
|
|
65
70
|
flattened_records = records.map { |record| SpotlightSearch::Utils.flatten_hash(record) }
|
|
66
|
-
columns = flattened_records
|
|
71
|
+
columns = flattened_records.map{|x| x.keys}.flatten.uniq.sort
|
|
67
72
|
size_arr = []
|
|
68
73
|
columns.size.times { size_arr << 22 }
|
|
69
74
|
xl = Axlsx::Package.new
|
|
70
75
|
xl.workbook.add_worksheet do |sheet|
|
|
71
|
-
sheet.add_row columns, b: true
|
|
76
|
+
sheet.add_row columns&.map(&:titleize), b: true
|
|
72
77
|
flattened_records.each do |record|
|
|
73
78
|
sheet.add_row(columns.map { |column| record[column] })
|
|
74
79
|
end
|
|
@@ -32,6 +32,10 @@ module SpotlightSearch
|
|
|
32
32
|
self.enabled_columns = [*record_fields, **associated_fields]
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
def default_scopes_for_export(*filter_scopes)
|
|
36
|
+
self.default_filters = filter_scopes
|
|
37
|
+
end
|
|
38
|
+
|
|
35
39
|
def _model_exportable_columns(klass, *record_fields, **associated_fields)
|
|
36
40
|
# Gets all the valid columns of a model
|
|
37
41
|
# If any column is invalid, it also returns it
|
|
@@ -85,6 +89,7 @@ module SpotlightSearch
|
|
|
85
89
|
|
|
86
90
|
included do
|
|
87
91
|
class_attribute :enabled_columns, instance_accessor: false, default: nil
|
|
92
|
+
class_attribute :default_filters, instance_accessor: false, default: nil
|
|
88
93
|
end
|
|
89
94
|
end
|
|
90
95
|
end
|
|
@@ -18,20 +18,20 @@ module SpotlightSearch
|
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def column_pop_up(email, klass)
|
|
21
|
+
def column_pop_up(email, klass, required_filters = nil)
|
|
22
22
|
tag.div class: "modal fade", id: "exportmodal", tabindex: "-1", role: "dialog", aria: {labelledby: "exportModal"} do
|
|
23
23
|
tag.div class: "modal-dialog modal-lg", role: "document" do
|
|
24
24
|
tag.div class: "modal-content" do
|
|
25
|
-
concat pop_ups(email, klass)
|
|
25
|
+
concat pop_ups(email, klass, required_filters)
|
|
26
26
|
end
|
|
27
27
|
end
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
|
|
31
|
-
def pop_ups(email, klass)
|
|
31
|
+
def pop_ups(email, klass, required_filters)
|
|
32
32
|
tag.div do
|
|
33
33
|
concat pop_up_header
|
|
34
|
-
concat pop_up_body(email, klass)
|
|
34
|
+
concat pop_up_body(email, klass, required_filters)
|
|
35
35
|
end
|
|
36
36
|
end
|
|
37
37
|
|
|
@@ -44,11 +44,12 @@ module SpotlightSearch
|
|
|
44
44
|
end
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
def pop_up_body(email, klass)
|
|
47
|
+
def pop_up_body(email, klass, required_filters)
|
|
48
48
|
tag.div class: "modal-body" do
|
|
49
49
|
form_tag '/spotlight_search/export_to_file', id: 'export-to-file-form', style: "width: 100%;", class:"spotlight-csv-export-form" do
|
|
50
50
|
concat hidden_field_tag 'email', email, id: 'export-to-file-email'
|
|
51
51
|
concat hidden_field_tag 'class_name', klass.to_s, id: 'export-to-file-klass'
|
|
52
|
+
filters_to_post_helper(required_filters) if required_filters
|
|
52
53
|
params_to_post_helper(filters: controller.filter_params) if controller.filter_params
|
|
53
54
|
params_to_post_helper(sort: controller.sort_params) if controller.sort_params
|
|
54
55
|
case SpotlightSearch.exportable_columns_version
|
|
@@ -63,6 +64,12 @@ module SpotlightSearch
|
|
|
63
64
|
end
|
|
64
65
|
end
|
|
65
66
|
|
|
67
|
+
def filters_to_post_helper(required_filters)
|
|
68
|
+
URI.decode_www_form(required_filters.to_param).each do |param|
|
|
69
|
+
concat hidden_field_tag "filters[#{param[0]}]", param[1]
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
66
73
|
def params_to_post_helper(params)
|
|
67
74
|
URI.decode_www_form(params.to_param).each do |param|
|
|
68
75
|
concat hidden_field_tag param[0], param[1]
|
|
@@ -112,7 +119,7 @@ module SpotlightSearch
|
|
|
112
119
|
end
|
|
113
120
|
when 'daterange'
|
|
114
121
|
tag.div class: 'filter-field' do
|
|
115
|
-
concat text_field_tag scope_name, '', class: "#{classes} filter-rangepicker", data: {behaviour: "filter", scope: scope_name, type: "
|
|
122
|
+
concat text_field_tag scope_name, '', class: "#{classes} filter-rangepicker", data: {behaviour: "filter", scope: scope_name, type: "range-filter"}, placeholder: "#{placeholder}"
|
|
116
123
|
concat tag.span class: 'fa fa-search search-icon'
|
|
117
124
|
end
|
|
118
125
|
end
|
|
@@ -2,11 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
module SpotlightSearch::Utils
|
|
4
4
|
class << self
|
|
5
|
-
def serialize_csv_columns(*columns
|
|
5
|
+
def serialize_csv_columns(*columns)
|
|
6
|
+
association_hash = columns.select{|columnable| columnable.class.eql?(Hash)}.last || {}
|
|
7
|
+
parent_table_columns = columns.select{|columnable| columnable.class.eql?(Symbol)}
|
|
6
8
|
# Turns an arbitrary list of args and kwargs into a list of params to be used in a form
|
|
7
9
|
# For example, turns SpotlightSearch::Utils.serialize_csv_columns(:a, :b, c: [:d, e: :h], f: :g)
|
|
8
10
|
# into [:a, :b, "c/d", "c/e/h", "f/g"]
|
|
9
|
-
|
|
11
|
+
parent_table_columns.map(&:to_s) + association_hash.map do |key, value|
|
|
10
12
|
serialize_csv_columns(*value).map do |column|
|
|
11
13
|
"#{key}/#{column}"
|
|
12
14
|
end
|