glimmer-dsl-libui 0.5.18 → 0.5.19

Sign up to get free protection for your applications and to get access to all the features.
Binary file
@@ -7,16 +7,26 @@ class RefinedTable
7
7
  option :per_page, default: 10
8
8
  option :page, default: 1
9
9
  option :visible_page_count, default: false
10
+ option :filter_query, default: ''
10
11
 
11
- attr_accessor :filtered_model_array, :filter_query, :filter_query_page_stack, :paginated_model_array
12
+ attr_accessor :filtered_model_array # filtered model array (intermediary, non-paginated)
13
+ attr_accessor :refined_model_array # paginated filtered model array
14
+ attr_reader :table_proxy
12
15
 
13
16
  before_body do
14
- @filter_query = ''
15
- @filter_query_page_stack = {}
16
- @filtered_model_array = model_array.dup
17
- @filtered_model_array_stack = {@filter_query => @filtered_model_array}
18
- self.page = correct_page(page)
19
- paginate_model_array
17
+ init_model_array
18
+ end
19
+
20
+ after_body do
21
+ filter_model_array
22
+
23
+ observe(self, :model_array) do
24
+ init_model_array
25
+ end
26
+
27
+ observe(self, :filter_query) do
28
+ filter_model_array
29
+ end
20
30
  end
21
31
 
22
32
  body {
@@ -25,7 +35,7 @@ class RefinedTable
25
35
 
26
36
  table_paginator if page_count > 1
27
37
 
28
- @table = table {
38
+ @table_proxy = table {
29
39
  table_columns.each do |column_name, column_details|
30
40
  editable_value = on_clicked_value = nil
31
41
  if column_details.is_a?(Symbol) || column_details.is_a?(String)
@@ -43,7 +53,7 @@ class RefinedTable
43
53
  end
44
54
 
45
55
  editable table_editable
46
- cell_rows <=> [self, :paginated_model_array]
56
+ cell_rows <=> [self, :refined_model_array]
47
57
  }
48
58
  }
49
59
  }
@@ -51,25 +61,7 @@ class RefinedTable
51
61
  def table_filter
52
62
  search_entry {
53
63
  stretchy false
54
- text <=> [self, :filter_query,
55
- before_write: ->(new_filter_query) {
56
- if new_filter_query != filter_query
57
- if !@filtered_model_array_stack.key?(new_filter_query)
58
- @filtered_model_array_stack[new_filter_query] = model_array.dup.filter do |model|
59
- @table.expand([model])[0].any? do |attribute_value|
60
- attribute_value.to_s.downcase.include?(new_filter_query.downcase)
61
- end
62
- end
63
- end
64
- @filtered_model_array = @filtered_model_array_stack[new_filter_query]
65
- if new_filter_query.size > filter_query.size
66
- @filter_query_page_stack[filter_query] = page
67
- end
68
- self.page = @filter_query_page_stack[new_filter_query] || correct_page(page)
69
- paginate_model_array
70
- end
71
- }
72
- ]
64
+ text <=> [self, :filter_query]
73
65
  }
74
66
  end
75
67
 
@@ -109,7 +101,7 @@ class RefinedTable
109
101
 
110
102
  if visible_page_count
111
103
  label {
112
- text <= [self, :paginated_model_array, on_read: ->(val) {"of #{page_count} pages"}]
104
+ text <= [self, :refined_model_array, on_read: ->(val) {"of #{page_count} pages"}]
113
105
  }
114
106
  end
115
107
 
@@ -137,8 +129,35 @@ class RefinedTable
137
129
  }
138
130
  end
139
131
 
132
+ def init_model_array
133
+ @last_filter_query = nil
134
+ @filter_query_page_stack = {}
135
+ @filtered_model_array = model_array.dup
136
+ @filtered_model_array_stack = {'' => @filtered_model_array}
137
+ self.page = correct_page(page)
138
+ filter_model_array if @table_proxy
139
+ end
140
+
141
+ def filter_model_array
142
+ return unless (@last_filter_query.nil? || filter_query != @last_filter_query)
143
+ if !@filtered_model_array_stack.key?(filter_query)
144
+ @filtered_model_array_stack[filter_query] = model_array.dup.filter do |model|
145
+ @table_proxy.expand([model])[0].any? do |attribute_value|
146
+ attribute_value.to_s.downcase.include?(filter_query.downcase)
147
+ end
148
+ end
149
+ end
150
+ @filtered_model_array = @filtered_model_array_stack[filter_query]
151
+ if @last_filter_query.nil? || filter_query.size > @last_filter_query.size
152
+ @filter_query_page_stack[filter_query] = correct_page(page)
153
+ end
154
+ self.page = @filter_query_page_stack[filter_query] || correct_page(page)
155
+ paginate_model_array
156
+ @last_filter_query = filter_query
157
+ end
158
+
140
159
  def paginate_model_array
141
- self.paginated_model_array = filtered_model_array[index, limit]
160
+ self.refined_model_array = filtered_model_array[index, limit]
142
161
  end
143
162
 
144
163
  def index
@@ -157,15 +176,15 @@ class RefinedTable
157
176
  [[page, 1].max, page_count].min
158
177
  end
159
178
 
160
- # Ensure proxying properties to @table if body_root (vertical_box) doesn't support them
179
+ # Ensure proxying properties to @table_proxy if body_root (vertical_box) doesn't support them
161
180
 
162
181
  def respond_to?(method_name, *args, &block)
163
- super || @table&.respond_to?(method_name, *args, &block)
182
+ super || @table_proxy&.respond_to?(method_name, *args, &block)
164
183
  end
165
184
 
166
185
  def method_missing(method_name, *args, &block)
167
- if @table&.respond_to?(method_name, *args, &block)
168
- @table&.send(method_name, *args, &block)
186
+ if @table_proxy&.respond_to?(method_name, *args, &block)
187
+ @table_proxy&.send(method_name, *args, &block)
169
188
  else
170
189
  super
171
190
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glimmer-dsl-libui
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.18
4
+ version: 0.5.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Maleh
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-08-04 00:00:00.000000000 Z
11
+ date: 2022-08-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: glimmer
@@ -275,6 +275,8 @@ files:
275
275
  - VERSION
276
276
  - bin/girb
277
277
  - bin/girb_runner.rb
278
+ - docs/examples/GLIMMER-DSL-LIBUI-ADVANCED-EXAMPLES.md
279
+ - docs/examples/GLIMMER-DSL-LIBUI-BASIC-EXAMPLES.md
278
280
  - examples/area_based_custom_controls.rb
279
281
  - examples/area_gallery.rb
280
282
  - examples/area_gallery2.rb