refine-rails 2.9.1 → 2.9.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4a54fd34a98179098e040456276d0109895a9963b23f45d8a4349341f741ec58
4
- data.tar.gz: daba33b740e07950606b1935a5726d4650386d38aef645d4de0c7d07eabea546
3
+ metadata.gz: 0c511b1d652c0c97df24249a54ff96afcf0857129194e6babd19207cf6418dec
4
+ data.tar.gz: 3ffebe81b88605d56aec0bcea24b79b1b3c181228bec5d06bea8c33a16a445c7
5
5
  SHA512:
6
- metadata.gz: 7711ae2669c9b3e9b93b77e1217dd98f44fe55d6f91ebd0b5b2d45006b6b88aa0918825af3c2d5dec4d92467ab27152f4d07c5807595280e8b790db75f70e6ed
7
- data.tar.gz: 64b1ae0855a94252aeb1544f9e8ea07571d5a47e5e584c297adc4297c40a88990505072cc68ec76e16900ef65b09a06e3eee894d990d81018ccfa67bc69247cc
6
+ metadata.gz: 53db67c1486011495f1efbe6cccd3a8508697d23eea902c738277a5b55f3cc1ef460bf54960bff7dc40b6db7d75daa4b6a895430c81a6034daf80a1bfd13393b
7
+ data.tar.gz: 7dc1a7a8d51967bdb15f33b074a4564690b80be1902ab35bd67526dc9fbf2f492f34db3d6513987f9a620eeb16cf839ea4931f052e299ca8bf3a048ef39dc638
data/README.md CHANGED
@@ -42,41 +42,6 @@ This is a helper method you can inspect in `Hammerstone::FilterApplicationContro
42
42
  @pagy, @contacts = pagy(@refine_filter.get_query)
43
43
  ```
44
44
 
45
- # TODO: Everything below this header was not covered in the installation guide. Not sure if it is deprecated
46
-
47
- 12. Add the `reveal` controller to your application if using the `filter_builder_dropdown` partial
48
-
49
- `yarn add stimulus-reveal`
50
-
51
- ```javascript
52
- //index.js
53
- import RevealController from 'stimulus-reveal'
54
-
55
- application.register('reveal', RevealController)
56
- ```
57
-
58
- ~13. If the gems tailwind styles are being purged with JIT you can add the gem to `tmp/gems` and add this to your tailwing config.~
59
-
60
- ``` tailwind.config.js
61
- './tmp/gems/*/app/views/**/*.html.erb',
62
- './tmp/gems/*/app/helpers/**/*.rb',
63
- './tmp/gems/*/app/assets/stylesheets/**/*.css',
64
- './tmp/gems/*/app/javascript/**/*.js',
65
- ```
66
-
67
- ~Run the following rake task:~
68
- ```
69
- task :add_temp_gems do
70
- target = `bundle show refine-rails`.chomp
71
- if target.present?
72
- puts "Linking refine-rails to '#{target}'."
73
- `ln -s #{target} tmp/gems/refine-rails`
74
- end
75
- end
76
- ```
77
-
78
- Don't forget to restart the server!
79
-
80
45
  14. Add external styles - currently themify icons (can be overriden - the trash can icon is located in `_criterion.html.erb`) and `daterangepicker`
81
46
  A quick way to load them is in the `head` section. Also available as an npm package.
82
47
 
@@ -374,25 +339,11 @@ import { controllerDefinitions as refineControllers } from "@hammerstone/refine-
374
339
  application.load(refineControllers)
375
340
  ```
376
341
 
377
- ## Readme Installation Goals (what we're working towards - does not work yet)
378
-
379
- 1. Run the generator
380
- `rails generate refine:install`
381
-
382
- 2. Define your filters, subclassing from `Hammerstone::Refine::Filter`
383
-
384
- 3. Call `apply_filter` in your controller (or even better, instantiate the filter in your controller `@contacts = ContactFilter.new(blueprint, initial_query` -> might not be possible, how can we do this with validations?)
385
-
386
- 4. If you want to customize the views you can override our stylesheet with you own.
387
- If you need even more customization you can override the views with `rails generate refine:views` will extract the views
388
-
389
- 5. Add custom datepicker if desired and scope stored filters.
390
-
391
342
  ## Releasing New Versions
392
343
 
393
344
  - Every release should update the gem and NPM package so version numbers stay in sync.
394
345
  - Make sure to update the CHANGELOG with a note explaining what the new version does
395
- - Make sure you have the [bump](https://rubygems.org/gems/bump) and [gemfury](https://rubygems.org/gems/gemfury) gems installed locally
346
+ - Make sure you have the [bump](https://rubygems.org/gems/bump) gems installed locally
396
347
 
397
348
  ### Releasing the Ruby Gem
398
349
 
@@ -224,7 +224,7 @@
224
224
  }
225
225
 
226
226
  .refine-criterion-refinement-container {
227
- @apply w-full pt-3 sm:w-auto sm:flex-shrink-0 sm:mr-3;
227
+ @apply w-full sm:w-auto sm:flex-shrink-0;
228
228
  }
229
229
 
230
230
  /* _delete_criterion.html.erb */
@@ -601,6 +601,10 @@
601
601
  padding: 0.5rem 0;
602
602
  }
603
603
 
604
+ .refine--refinement-input-container {
605
+ margin: 0.5rem 0;
606
+ }
607
+
604
608
 
605
609
  /* _date_condition.html.erb */
606
610
  .refine--date-condition-days-text {
@@ -118,6 +118,12 @@ class Refine::Inline::CriteriaController < ApplicationController
118
118
  :clause,
119
119
  :value1,
120
120
  :value2
121
+ ],
122
+ date_refinement_attributes: [
123
+ :clause,
124
+ :date1,
125
+ :date2,
126
+ :days
121
127
  ]
122
128
  ]
123
129
  )
@@ -50,7 +50,6 @@ module Refine
50
50
  end
51
51
  end
52
52
 
53
- # DEPRECATED use Refine::Filters::Criterion#human_readable instead
54
53
  def human_readable_criterions
55
54
  output = []
56
55
  if blueprint.present?
@@ -58,7 +57,13 @@ module Refine
58
57
  if criterion[:type] == "conjunction"
59
58
  output << criterion[:word]
60
59
  else
61
- output << get_condition_for_criterion(criterion).human_readable(criterion[:input])
60
+ condition = get_condition_for_criterion(criterion)
61
+ text = condition.human_readable(criterion[:input])
62
+ if condition.has_date_refinement?
63
+ date_refinement_condition = condition.has_date_refinement?.call
64
+ text += date_refinement_condition.human_readable(criterion[:input][:date_refinement])
65
+ end
66
+ output << text
62
67
  end
63
68
  end
64
69
  end
@@ -0,0 +1,14 @@
1
+ class Refine::Inline::Criteria::DateRefinement
2
+ include ActiveModel::Model
3
+
4
+ attr_accessor :clause, :date1, :date2, :days
5
+
6
+ def attributes
7
+ {
8
+ clause: clause,
9
+ date1: date1,
10
+ date2: date2,
11
+ days: days
12
+ }.compact
13
+ end
14
+ end
@@ -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
@@ -5,33 +5,38 @@
5
5
  refine__update_criterion_id_value: criterion_id,
6
6
  position: criterion.position}) do %>
7
7
 
8
+ <div class="refine-criterion-line">
8
9
  <!-- Select Condition -->
9
- <div class="refine-criterion-condition-container">
10
- <%= render partial: 'refine/blueprints/condition_select', locals: {
11
- selected_condition_id: criterion.condition_id } %>
12
- </div>
10
+ <div class="refine-criterion-condition-container">
11
+ <%= render partial: 'refine/blueprints/condition_select', locals: {
12
+ selected_condition_id: criterion.condition_id } %>
13
+ </div>
13
14
 
14
- <!-- Select Clause -->
15
- <div class="refine-criterion-clause-container">
16
- <%= render partial: 'refine/blueprints/clause_select', locals: {
17
- meta: criterion.meta, selected_clause: criterion.input[:clause]} %>
18
- </div>
15
+ <!-- Select Clause -->
16
+ <div class="refine-criterion-clause-container">
17
+ <%= render partial: 'refine/blueprints/clause_select', locals: {
18
+ meta: criterion.meta, selected_clause: criterion.input[:clause]} %>
19
+ </div>
19
20
 
20
- <!-- Render correct type of condition -->
21
- <%= render partial: "refine/blueprints/clauses/#{criterion.component}", locals: {
22
- criterion: criterion,
23
- condition: criterion.condition, input: criterion.input, criterion_id: criterion_id, meta: criterion.meta, meta_clause: criterion.selected_clause_meta, input_id: nil } %>
21
+ <!-- Render correct type of condition -->
22
+ <%= render partial: "refine/blueprints/clauses/#{criterion.component}", locals: {
23
+ criterion: criterion,
24
+ condition: criterion.condition, input: criterion.input, criterion_id: criterion_id, meta: criterion.meta, meta_clause: criterion.selected_clause_meta, input_id: nil } %>
25
+ </div>
24
26
 
25
27
  <!-- Refinements -->
26
28
  <% criterion.refinements.each do |refinement|%>
27
29
 
28
- <div class="refine-criterion-refinement-container">
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) || {} } %>
31
- </div>
30
+ <div class="refine-criterion-refinement-line">
31
+ <i class="fa-thin fa-l"></i>
32
+ <div class="refine-criterion-refinement-container">
33
+ <%= render partial: 'refine/blueprints/clause_select', locals: {
34
+ meta: refinement[:meta], input_id: "input, #{refinement[:id]}", selected_clause: criterion.input.dig(refinement[:id].to_sym, :clause) || {} } %>
35
+ </div>
32
36
 
33
- <%= render partial: "refine/blueprints/clauses/#{refinement[:component].underscore}", locals: {
34
- condition: refinement, input: criterion.input[refinement[:id].to_sym] || {}, criterion_id: criterion_id, meta: refinement[:meta], input_id: "input, #{refinement[:id]}", meta_clause: criterion.meta_for_refinement_clause(refinement), criterion: criterion} %>
37
+ <%= render partial: "refine/blueprints/clauses/#{refinement[:component].underscore}", locals: {
38
+ condition: refinement, input: criterion.input[refinement[:id].to_sym] || {}, criterion_id: criterion_id, meta: refinement[:meta], input_id: "input, #{refinement[:id]}", meta_clause: criterion.meta_for_refinement_clause(refinement), criterion: criterion} %>
39
+ </div>
35
40
  <% end %>
36
41
  <!-- End Refinements -->
37
42
 
@@ -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", type: "submit", form: form_id %>
53
- </div>
124
+
54
125
 
55
126
 
56
127
  <% end %>
@@ -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,5 +1,5 @@
1
1
  module Refine
2
2
  module Rails
3
- VERSION = "2.9.1"
3
+ VERSION = "2.9.3"
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.1
4
+ version: 2.9.3
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-12-20 00:00:00.000000000 Z
12
+ date: 2024-02-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -101,6 +101,7 @@ files:
101
101
  - app/models/refine/filters/builder.rb
102
102
  - app/models/refine/filters/criterion.rb
103
103
  - app/models/refine/filters/query.rb
104
+ - app/models/refine/inline/criteria/date_refinement.rb
104
105
  - app/models/refine/inline/criteria/input.rb
105
106
  - app/models/refine/inline/criteria/numeric_refinement.rb
106
107
  - app/models/refine/inline/criteria/option.rb
@@ -177,7 +178,7 @@ files:
177
178
  - lib/tasks/refine/rails_tasks.rake
178
179
  homepage: https://rubygems.org/gems/refine-rails
179
180
  licenses:
180
- - Nonstandard
181
+ - MIT
181
182
  metadata:
182
183
  homepage_uri: https://rubygems.org/gems/refine-rails
183
184
  source_code_uri: https://github.com/clickfunnels2/refine-rails
@@ -197,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
197
198
  - !ruby/object:Gem::Version
198
199
  version: '0'
199
200
  requirements: []
200
- rubygems_version: 3.1.6
201
+ rubygems_version: 3.3.26
201
202
  signing_key:
202
203
  specification_version: 4
203
204
  summary: Visual query builder for Rails