refine-rails 2.9.0 → 2.9.2

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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -6
  3. data/app/assets/javascripts/refine-stimulus.esm.js +1 -1
  4. data/app/assets/javascripts/refine-stimulus.esm.js.map +1 -1
  5. data/app/assets/javascripts/refine-stimulus.js +1 -1
  6. data/app/assets/javascripts/refine-stimulus.js.map +1 -1
  7. data/app/assets/javascripts/refine-stimulus.modern.js +1 -1
  8. data/app/assets/javascripts/refine-stimulus.modern.js.map +1 -1
  9. data/app/assets/javascripts/refine-stimulus.umd.js +1 -1
  10. data/app/assets/javascripts/refine-stimulus.umd.js.map +1 -1
  11. data/app/assets/stylesheets/index.css +16 -17
  12. data/app/assets/stylesheets/index.tailwind.css +16 -15
  13. data/app/controllers/refine/inline/criteria_controller.rb +6 -0
  14. data/app/javascript/controllers/index.js +3 -3
  15. data/app/javascript/controllers/refine/criterion-form-controller.js +13 -12
  16. data/app/javascript/controllers/refine/typeahead-list-controller.js +33 -0
  17. data/app/models/refine/conditions/date_condition.rb +1 -1
  18. data/app/models/refine/filter/internationalized.rb +28 -0
  19. data/app/models/refine/filter.rb +17 -3
  20. data/app/models/refine/inline/criteria/date_refinement.rb +14 -0
  21. data/app/models/refine/inline/criteria/input.rb +16 -2
  22. data/app/models/refine/inline/criterion.rb +2 -2
  23. data/app/views/refine/blueprints/_criterion.html.erb +1 -1
  24. data/app/views/refine/inline/criteria/_form_fields.html.erb +88 -17
  25. data/app/views/refine/inline/criteria/edit.turbo_stream.erb +11 -11
  26. data/app/views/refine/inline/criteria/index.html.erb +6 -5
  27. data/app/views/refine/inline/criteria/new.turbo_stream.erb +10 -11
  28. data/app/views/refine/inline/filters/_criterion.html.erb +0 -1
  29. data/app/views/refine/inline/inputs/_date_condition.html.erb +2 -2
  30. data/app/views/refine/inline/inputs/_date_condition_range.html.erb +2 -2
  31. data/app/views/refine/inline/inputs/_date_condition_single.html.erb +1 -1
  32. data/app/views/refine/inline/inputs/_option_condition.html.erb +21 -10
  33. data/lib/refine/rails/version.rb +1 -1
  34. metadata +5 -2
@@ -15,7 +15,8 @@ class Refine::Inline::Criteria::Input
15
15
  :value,
16
16
  :value1,
17
17
  :value2,
18
- :count_refinement
18
+ :count_refinement,
19
+ :date_refinement
19
20
 
20
21
  def attributes
21
22
  {
@@ -28,7 +29,8 @@ class Refine::Inline::Criteria::Input
28
29
  value: value,
29
30
  value1: value1,
30
31
  value2: value2,
31
- count_refinement_attributes: count_refinement_attributes.presence
32
+ count_refinement_attributes: count_refinement_attributes.presence,
33
+ date_refinement_attributes: date_refinement_attributes.presence
32
34
  }.compact
33
35
  end
34
36
 
@@ -44,6 +46,18 @@ class Refine::Inline::Criteria::Input
44
46
  count_refinement.attributes = attrs.to_h
45
47
  end
46
48
 
49
+ def date_refinement
50
+ @date_refinement ||= Refine::Inline::Criteria::DateRefinement.new
51
+ end
52
+
53
+ def date_refinement_attributes
54
+ date_refinement.attributes
55
+ end
56
+
57
+ def date_refinement_attributes=(attrs = {})
58
+ date_refinement.attributes = attrs.to_h
59
+ end
60
+
47
61
  def selected=(value)
48
62
  @selected = Array.wrap(value)
49
63
  end
@@ -21,6 +21,7 @@ class Refine::Inline::Criterion
21
21
  attrs[:input_attributes] = attrs.delete(:input)
22
22
  if input_attrs = attrs[:input_attributes]
23
23
  input_attrs[:count_refinement_attributes] = input_attrs.delete(:count_refinement)
24
+ input_attrs[:date_refinement_attributes] = input_attrs.delete(:date_refinement)
24
25
  end
25
26
  new(attrs)
26
27
  end
@@ -93,6 +94,7 @@ class Refine::Inline::Criterion
93
94
  result[:input] = result.delete(:input_attributes)
94
95
  if input_attrs = result[:input]
95
96
  input_attrs[:count_refinement] = input_attrs.delete(:count_refinement_attributes)
97
+ input_attrs[:date_refinement] = input_attrs.delete(:date_refinement_attributes)
96
98
  end
97
99
  result
98
100
  end
@@ -121,8 +123,6 @@ class Refine::Inline::Criterion
121
123
  end
122
124
 
123
125
  def validate!
124
- # TODO figure out how to validate inputs with count refinements
125
- return if input.count_refinement.attributes.present?
126
126
  errors.clear
127
127
  begin
128
128
  query_for_validate = refine_filter.initial_query || refine_filter.model.all
@@ -27,7 +27,7 @@
27
27
 
28
28
  <div class="refine-criterion-refinement-container">
29
29
  <%= render partial: 'refine/blueprints/clause_select', locals: {
30
- meta: refinement[:meta], input_id: "input, #{refinement[:id]}", selected_clause: criterion.input.dig(:input, refinement[:id].to_sym, :clause) || {} } %>
30
+ meta: refinement[:meta], input_id: "input, #{refinement[:id]}", selected_clause: criterion.input.dig(refinement[:id].to_sym, :clause) || {} } %>
31
31
  </div>
32
32
 
33
33
  <%= render partial: "refine/blueprints/clauses/#{refinement[:component].underscore}", locals: {
@@ -1,3 +1,18 @@
1
+ <%
2
+ condition = @criterion.condition
3
+ date_refinement_condition = condition.has_date_refinement? && condition.get_date_refinement_condition
4
+ count_refinement_condition = condition.has_count_refinement? && condition.get_count_refinement_condition
5
+
6
+ last_clause_select = if count_refinement_condition
7
+ :count
8
+ elsif date_refinement_condition
9
+ :date
10
+ else
11
+ :criterion
12
+ end
13
+ %>
14
+
15
+
1
16
  <%= form.hidden_field :stable_id, form: form_id %>
2
17
  <%= form.hidden_field :client_id, form: form_id %>
3
18
  <%= form.hidden_field :condition_id, form: form_id %>
@@ -10,16 +25,66 @@
10
25
  <%# Input Value %>
11
26
  <% unless ['st', 'nst'].include? @criterion.input.clause %>
12
27
  <%= render @criterion.input_partial, criterion: @criterion, form: form, input_fields: input_fields, form_id: form_id %>
28
+ <% if last_clause_select == :criterion %>
29
+ <div class="refine--separator"></div>
30
+ <% end %>
31
+ <% end %>
32
+
33
+ <%# Clause Select %>
34
+ <div class="refine--criterion-clause-container">
35
+ <%= input_fields.label :clause, t('.rule') %>
36
+ <%= input_fields.collection_select :clause,
37
+ @criterion.condition.approved_clauses,
38
+ :id,
39
+ :display,
40
+ {},
41
+ class: "refine--select refine--clause-select",
42
+ data: {action: "change->refine--criterion-form#refresh"},
43
+ form: form_id
44
+ %>
45
+ <% if last_clause_select == :criterion %>
46
+ <%= form.button t('global.buttons.apply'), class: "refine--apply-button", type: "submit", form: form_id %>
47
+ <% end %>
48
+ </div>
49
+
50
+ <%# Date Refinement %>
51
+ <% if @criterion.condition.has_date_refinement? %>
13
52
  <div class="refine--separator"></div>
53
+ <label style="color: black;"><%= date_refinement_condition.display %></label>
54
+ <%= input_fields.fields :date_refinement_attributes, model: @criterion.input.date_refinement do |date_fields| %>
55
+ <div class="refine--refinement-input-container">
56
+ <% unless ['st', 'nst'].include? @criterion.input.date_refinement.clause %>
57
+ <%= render "refine/inline/inputs/date_condition", criterion: @criterion, form: form, input_fields: date_fields, form_id: form_id %>
58
+ <% end %>
59
+
60
+ </div>
61
+
62
+ <div class="refine--criterion-clause-container">
63
+ <%= date_fields.label :clause, t('.rule') %>
64
+ <%= date_fields.collection_select :clause,
65
+ date_refinement_condition.approved_clauses,
66
+ :id,
67
+ :display,
68
+ {},
69
+ class: "refine--select refine--clause-select",
70
+ data: {action: "change->refine--criterion-form#refresh"},
71
+ form: form_id
72
+ %>
73
+ <% if last_clause_select == :date %>
74
+ <%= form.button t('global.buttons.apply'), class: "refine--apply-button", type: "submit", form: form_id %>
75
+ <% end %>
76
+ </div>
77
+ <% end %>
78
+
14
79
  <% end %>
15
80
 
16
81
  <%# Count Refinement %>
17
- <% if @criterion.condition.has_count_refinement? %>
82
+ <% if count_refinement_condition %>
18
83
  <label style="color: black;"><%= @criterion.condition.get_count_refinement_condition.display %></label>
19
84
  <%= input_fields.fields :count_refinement_attributes, model: @criterion.input.count_refinement do |count_fields| %>
20
85
  <div class="refine--criterion-clause-container">
21
86
  <%= count_fields.collection_select :clause,
22
- @criterion.condition.get_count_refinement_condition.clauses,
87
+ count_refinement_condition.approved_clauses,
23
88
  :id,
24
89
  :display,
25
90
  {},
@@ -29,28 +94,34 @@
29
94
  </div>
30
95
 
31
96
  <% unless ['st', 'nst'].include? @criterion.input.count_refinement.clause %>
32
- <%= render "refine/inline/inputs/numeric_condition", input_fields: count_fields, form_id: form_id %>
97
+ <%= render "refine/inline/inputs/numeric_condition", criterion: @criterion, form: form, input_fields: count_fields, form_id: form_id %>
33
98
  <% end %>
99
+
100
+ <div class="refine--criterion-clause-container">
101
+ <%= count.label :clause, t('.rule') %>
102
+ <%= count.collection_select :clause,
103
+ @criterion.condition.approved_clauses,
104
+ :id,
105
+ :display,
106
+ {},
107
+ class: "refine--select refine--clause-select",
108
+ data: {action: "change->refine--criterion-form#refresh"},
109
+ form: form_id
110
+ %>
111
+ <% if last_clause_select == :count %>
112
+ <%= form.button t('global.buttons.apply'), class: "refine--apply-button", type: "submit", form: form_id %>
113
+ <% end %>
114
+ </div>
115
+
116
+
117
+
34
118
  <% end %>
35
119
 
36
120
  <% end %>
37
121
 
38
122
 
39
123
 
40
- <%# Clause Select %>
41
- <div class="refine--criterion-clause-container">
42
- <%= input_fields.label :clause, t('.rule') %>
43
- <%= input_fields.collection_select :clause,
44
- @criterion.condition.approved_clauses,
45
- :id,
46
- :display,
47
- {},
48
- class: "refine--select refine--clause-select",
49
- data: {action: "change->refine--criterion-form#refresh"},
50
- form: form_id
51
- %>
52
- <%= form.button t('global.buttons.apply'), class: "refine--apply-button", data: {action: "refine--criterion-form#submit"}, type: "submit", form: form_id %>
53
- </div>
124
+
54
125
 
55
126
 
56
127
  <% end %>
@@ -1,19 +1,19 @@
1
1
  <% form_id = dom_id(@criterion, :form) %>
2
2
 
3
3
  <%= turbo_stream.update dom_id(@criterion) do %>
4
- <div class="refine--criterion-fields">
5
- <%= fields model: @criterion,
6
- data: {
7
- controller: "refine--criterion-form",
8
- refine__criterion_form_url_value: edit_refine_inline_criterion_url(
9
- @criterion.position, @criterion.to_params
10
- ),
11
- refine__criterion_form_turbo_frame_value: dom_id(@criterion)
12
- } do |form|
13
- %>
4
+ <%= tag.div class: "refine--criterion-fields",
5
+ data: {
6
+ controller: "refine--criterion-form",
7
+ refine__criterion_form_url_value: edit_refine_inline_criterion_url(
8
+ @criterion.position, @criterion.to_params
9
+ ),
10
+ refine__criterion_form_form_id_value: form_id
11
+ } do
12
+ %>
13
+ <%= fields model: @criterion do |form| %>
14
14
  <%= render "form_fields", form: form, form_id: form_id %>
15
15
  <% end %>
16
- </div>
16
+ <% end %>
17
17
  <% end %>
18
18
 
19
19
 
@@ -10,11 +10,11 @@
10
10
  %>
11
11
 
12
12
  <%= turbo_frame_tag @criterion do %>
13
- <div data-controller="refine--inline-conditions">
13
+ <div data-controller="refine--typeahead-list">
14
14
 
15
15
  <div class="refine--search-box">
16
16
  <span class="material-icons refine--icon-search">search</span>
17
- <input class="refine--search-trigger" data-search-target="filterProperties" placeholder="<%= t('.type_to_search') %>..." type="text" data-action="refine--inline-conditions#filterConditions">
17
+ <input class="refine--search-trigger" data-search-target="filterProperties" placeholder="<%= t('.type_to_search') %>..." type="text" data-action="refine--typeahead-list#filter" autofocus>
18
18
  </div>
19
19
 
20
20
  <div class="refine--separator-m0"></div>
@@ -27,13 +27,14 @@
27
27
  data: {
28
28
  controller: "refine--turbo-stream-link",
29
29
  action: "refine--turbo-stream-link#visit",
30
- refine__inline_conditions_target: "condition"
30
+ refine__typeahead_list_target: "listItem",
31
+ list_item_value: condition.display
31
32
  }
32
33
  %>
33
34
  <% end %>
34
35
 
35
36
  <% categorized_conditions.each do |(category, conditions)| %>
36
- <b data-refine--inline-conditions-target="category"><%= category %></b>
37
+ <b data-refine--typeahead-list-target="category"><%= category %></b>
37
38
  <% conditions.each do |condition| %>
38
39
  <%= link_to condition.display,
39
40
  new_refine_inline_criterion_url(@criterion.to_params.deep_merge(refine_inline_criterion: {condition_id: condition.id})),
@@ -41,7 +42,7 @@
41
42
  data: {
42
43
  controller: "refine--turbo-stream-link",
43
44
  action: "refine--turbo-stream-link#visit",
44
- refine__inline_conditions_target: "condition",
45
+ refine__typeahead_list_target: "listItem",
45
46
  category: category
46
47
  }
47
48
  %>
@@ -1,19 +1,18 @@
1
1
  <% form_id = dom_id(@criterion, :form) %>
2
2
 
3
3
  <%= turbo_stream.update dom_id(@criterion) do %>
4
- <div class="refine--criterion-fields">
5
- <%= fields model: @criterion,
6
- class: "refine--criterion-form",
7
- data: {
8
- controller: "refine--criterion-form",
9
- refine__criterion_form_url_value: new_refine_inline_criterion_url(
10
- @criterion.to_params),
11
- refine__criterion_form_turbo_frame_value: dom_id(@criterion),
12
- } do |form|
13
- %>
4
+ <%= tag.div class: "refine--criterion-fields",
5
+ data: {
6
+ controller: "refine--criterion-form",
7
+ refine__criterion_form_url_value: new_refine_inline_criterion_url(
8
+ @criterion.to_params),
9
+ refine__criterion_form_form_id_value: form_id
10
+ } do
11
+ %>
12
+ <%= fields model: @criterion do |form| %>
14
13
  <%= render "form_fields", form: form, conjunction: @conjunction, position: @position, form_id: form_id %>
15
14
  <% end %>
16
- </div>
15
+ <% end %>
17
16
  <% end %>
18
17
 
19
18
  <%# The actual form tag is appended to the end of the body html. Inputs are attached using the `form` attribute. This allows the query builder to be placed inside an outer form on the page. %>
@@ -17,7 +17,6 @@
17
17
  </div>
18
18
  </div>
19
19
  </div>
20
-
21
20
  </div>
22
21
 
23
22
  <% end %>
@@ -1,6 +1,6 @@
1
- <% if criterion.input.clause.in? ["exct", "gt", "lt"] %>
1
+ <% if input_fields.object.clause.in? ["exct", "gt", "lt"] %>
2
2
  <%= render "refine/inline/inputs/date_condition_days", input_fields: input_fields, criterion: criterion, form_id: form_id %>
3
- <% elsif criterion.input.clause == "btwn" %>
3
+ <% elsif input_fields.object.clause == "btwn" %>
4
4
  <%= render "refine/inline/inputs/date_condition_range", input_fields: input_fields, criterion: criterion, form_id: form_id %>
5
5
  <% else %>
6
6
  <%= render "refine/inline/inputs/date_condition_single", input_fields: input_fields, criterion: criterion, form_id: form_id %>
@@ -2,7 +2,7 @@
2
2
  <%= render "refine/inline/inputs/date_picker",
3
3
  input_fields: input_fields,
4
4
  attribute: :date1,
5
- value: criterion.input.date1,
5
+ value: input_fields.object.date1,
6
6
  label: "#{criterion.condition.display.downcase} (#{t('.min')})",
7
7
  form_id: form_id
8
8
  %>
@@ -13,7 +13,7 @@
13
13
  <%= render "refine/inline/inputs/date_picker",
14
14
  input_fields: input_fields,
15
15
  attribute: :date2,
16
- value: criterion.input.date2,
16
+ value: input_fields.object.date2,
17
17
  label: "#{criterion.condition.display.downcase} (#{t('.max')})",
18
18
  form_id: form_id
19
19
  %>
@@ -2,7 +2,7 @@
2
2
  <%= render "refine/inline/inputs/date_picker",
3
3
  input_fields: input_fields,
4
4
  attribute: :date1,
5
- value: criterion.input.date1,
5
+ value: input_fields.object.date1,
6
6
  label: criterion.condition.display.downcase,
7
7
  form_id: form_id
8
8
  %>
@@ -1,13 +1,24 @@
1
- <div class="refine-option--condition-container">
2
- <%= input_fields.collection_select :selected,
3
- criterion.options,
4
- :id,
5
- ->(o) {o.display.truncate(64)},
6
- {},
7
- class: "refine--select refine--option-select",
8
- multiple: criterion.multiple?,
9
- form: form_id
10
- %>
1
+ <div class="refine--option-condition-container" data-controller="refine--typeahead-list">
2
+ <div class="refine--search-box">
3
+ <span class="material-icons refine--icon-search">search</span>
4
+ <input class="refine--search-trigger" data-search-target="filterProperties" placeholder="<%= t('.type_to_search') %>..." type="text" data-action="refine--typeahead-list#filter" autofocus>
5
+ </div>
6
+
7
+ <% criterion.options.each do |option| %>
8
+ <%= tag.label class: "refine--option-label",
9
+ data: {
10
+ refine__typeahead_list_target: "listItem",
11
+ list_item_value: option.display
12
+ } do
13
+ %>
14
+ <% if criterion.multiple? %>
15
+ <%= check_box_tag input_fields.field_name("selected", multiple: true), option.id, criterion.input.selected.to_a.include?(option.id), class: "refine--option-input", form: form_id %>
16
+ <% else %>
17
+ <%= radio_button_tag input_fields.field_name("selected"), option.id, (criterion.input.selected == [option.id]), class: "refine--option-input", form: form_id %>
18
+ <% end %>
19
+ <span class="refine--option-text"><%= option.display.truncate(64) %></span>
20
+ <% end %>
21
+ <% end %>
11
22
  <% if criterion.condition.meta[:postfix] %>
12
23
  <span class="refine-option--condition-postfix"><%= meta[:postfix] %></span>
13
24
  <% end %>
@@ -1,5 +1,5 @@
1
1
  module Refine
2
2
  module Rails
3
- VERSION = "2.9.0"
3
+ VERSION = "2.9.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: refine-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.0
4
+ version: 2.9.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Colleen Schnettler
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-11-30 00:00:00.000000000 Z
12
+ date: 2024-01-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -70,6 +70,7 @@ files:
70
70
  - app/javascript/controllers/refine/toggle-controller.js
71
71
  - app/javascript/controllers/refine/turbo-stream-form-controller.js
72
72
  - app/javascript/controllers/refine/turbo-stream-link-controller.js
73
+ - app/javascript/controllers/refine/typeahead-list-controller.js
73
74
  - app/javascript/controllers/refine/update-controller.js
74
75
  - app/javascript/index.js
75
76
  - app/javascript/refine/helpers/index.js
@@ -95,10 +96,12 @@ files:
95
96
  - app/models/refine/conditions/text_condition.rb
96
97
  - app/models/refine/conditions/uses_attributes.rb
97
98
  - app/models/refine/filter.rb
99
+ - app/models/refine/filter/internationalized.rb
98
100
  - app/models/refine/filters/blueprint_editor.rb
99
101
  - app/models/refine/filters/builder.rb
100
102
  - app/models/refine/filters/criterion.rb
101
103
  - app/models/refine/filters/query.rb
104
+ - app/models/refine/inline/criteria/date_refinement.rb
102
105
  - app/models/refine/inline/criteria/input.rb
103
106
  - app/models/refine/inline/criteria/numeric_refinement.rb
104
107
  - app/models/refine/inline/criteria/option.rb