super 0.19.0.rc1 → 0.21.0
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/README.md +5 -5
- data/app/controllers/super/application_controller.rb +10 -19
- data/app/controllers/super/sitewide_controller.rb +33 -0
- data/app/controllers/super/substructure_controller.rb +63 -85
- data/app/controllers/super/view_controller.rb +55 -0
- data/app/views/super/application/_batch_checkbox.html.erb +4 -0
- data/app/views/super/application/_display_index.html.erb +8 -2
- data/app/views/super/application/_display_show.html.erb +10 -2
- data/app/views/super/application/_filter.html.erb +63 -59
- data/app/views/super/application/_form.html.erb +1 -1
- data/app/views/super/application/_layout.html.erb +0 -2
- data/app/views/super/application/_pagination.html.erb +1 -4
- data/app/views/super/application/_query.html.erb +13 -12
- data/app/views/super/application/_site_footer.html.erb +1 -1
- data/app/views/super/application/_sort.html.erb +18 -14
- data/app/views/super/application/_view_chain.html.erb +23 -4
- data/config/locales/en.yml +10 -1
- data/frontend/super-frontend/dist/application.js +6276 -6286
- data/frontend/super-frontend/dist/package.json +2 -2
- data/lib/super/action_inquirer.rb +3 -0
- data/lib/super/badge.rb +11 -2
- data/lib/super/cheat.rb +6 -1
- data/lib/super/display/schema_types.rb +37 -14
- data/lib/super/display.rb +5 -4
- data/lib/super/error.rb +3 -2
- data/lib/super/form/schema_types.rb +8 -36
- data/lib/super/form_builder/action_text_methods.rb +16 -0
- data/lib/super/form_builder/base_methods.rb +73 -0
- data/lib/super/form_builder/flatpickr_methods.rb +75 -0
- data/lib/super/form_builder/option_methods.rb +73 -0
- data/lib/super/form_builder.rb +143 -0
- data/{app/helpers → lib}/super/form_builder_helper.rb +15 -4
- data/lib/super/link.rb +47 -63
- data/lib/super/link_builder.rb +24 -43
- data/lib/super/navigation.rb +40 -40
- data/lib/super/query.rb +61 -0
- data/lib/super/{engine.rb → railtie.rb} +7 -1
- data/lib/super/reset.rb +7 -0
- data/lib/super/schema.rb +8 -2
- data/lib/super/sort.rb +1 -3
- data/lib/super/useful/deprecations.rb +18 -0
- data/lib/super/useful/i19.rb +35 -0
- data/lib/super/version.rb +1 -1
- data/lib/super/view_chain.rb +14 -4
- data/lib/super.rb +14 -3
- metadata +21 -56
- data/config/routes.rb +0 -4
- data/lib/super/form/builder.rb +0 -289
- data/lib/super/query/form_object.rb +0 -48
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8074c717fdd2f747e7d880cdbb02ec13515ec85b3504e7f55f1db526ace24838
|
4
|
+
data.tar.gz: 5d446f1574a35e4ba542281b2edfe5ef36dd588a5c2420b81288702bb96f4607
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: adca04cac0470dfe22929b710d331ff651eb53ee0fdf5f88657f9b18094963f09bda9c6b13808bc112a565937851eda14622e8a0d853b992fa5f1551e6daadb0
|
7
|
+
data.tar.gz: b694a20146e50d743fcc7ca5bbf6e67cdd63df3e256352b70a99a5a677ad0f5014f38ca29efe48263d840809d9c4e3f63d1972a28277510c882c0a6023cf55d0
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Super
|
2
2
|
|
3
|
-

|
4
4
|
[][gem]
|
5
5
|
[][demo]
|
6
6
|
[][docs]
|
@@ -38,7 +38,7 @@ changes before 1.0.
|
|
38
38
|
* Builds on top of standard Rails controllers and ERB views
|
39
39
|
* Plenty of escape hatches for those very customized pages
|
40
40
|
* No DSL. Configure your admin pages by setting methods and returning objects
|
41
|
-
* Supports Rails 5.0+, 6.0+
|
41
|
+
* Supports Rails 5.0+, 6.0+, 7.0+
|
42
42
|
* Supports Ruby 2.3+, 3.0+
|
43
43
|
|
44
44
|
|
@@ -88,7 +88,7 @@ The gem is available under the terms of the [GNU LGPLv3](./LICENSE).
|
|
88
88
|
|
89
89
|
|
90
90
|
[gem]: https://rubygems.org/gems/super
|
91
|
-
[discussions]: https://github.com/
|
91
|
+
[discussions]: https://github.com/superadministration/super/discussions
|
92
92
|
[docs]: https://superadministration.github.io/
|
93
|
-
[demo]: https://demo-super.herokuapp.com/admin
|
94
|
-
[demo_source]: https://github.com/
|
93
|
+
[demo]: https://demo-super.herokuapp.com/admin
|
94
|
+
[demo_source]: https://github.com/superadministration/super_demo
|
@@ -22,7 +22,6 @@ module Super
|
|
22
22
|
@records = load_records
|
23
23
|
@display = display_schema.apply(action: current_action, format: request.format)
|
24
24
|
@view = index_view
|
25
|
-
@query_form = initialize_query_form
|
26
25
|
initialize_filter_form
|
27
26
|
initialize_sort_form
|
28
27
|
@records = apply_queries
|
@@ -48,12 +47,9 @@ module Super
|
|
48
47
|
set_record_attributes
|
49
48
|
|
50
49
|
if save_record
|
51
|
-
|
50
|
+
redirect_to_record
|
52
51
|
else
|
53
|
-
|
54
|
-
@form = form_schema
|
55
|
-
@view = new_view
|
56
|
-
render :new, status: :bad_request
|
52
|
+
render_new_as_bad_request
|
57
53
|
end
|
58
54
|
end
|
59
55
|
|
@@ -70,12 +66,9 @@ module Super
|
|
70
66
|
set_record_attributes
|
71
67
|
|
72
68
|
if save_record
|
73
|
-
|
69
|
+
redirect_to_record
|
74
70
|
else
|
75
|
-
|
76
|
-
@form = form_schema
|
77
|
-
@view = edit_view
|
78
|
-
render :edit, status: :bad_request
|
71
|
+
render_edit_as_bad_request
|
79
72
|
end
|
80
73
|
end
|
81
74
|
|
@@ -84,14 +77,12 @@ module Super
|
|
84
77
|
@record = load_record
|
85
78
|
|
86
79
|
if destroy_record
|
87
|
-
|
80
|
+
redirect_to_records
|
88
81
|
else
|
89
|
-
|
90
|
-
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
82
|
+
redirect_to_record_with_destroy_failure_message
|
91
83
|
end
|
92
|
-
rescue ActiveRecord::
|
93
|
-
|
94
|
-
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
84
|
+
rescue ActiveRecord::ActiveRecordError => e
|
85
|
+
redirect_to_record_with_destroy_failure_message(e)
|
95
86
|
end
|
96
87
|
|
97
88
|
private
|
@@ -118,7 +109,7 @@ module Super
|
|
118
109
|
helper_method def resolved_member_actions(record)
|
119
110
|
member_actions(record).map do |action|
|
120
111
|
if action.respond_to?(:resolve)
|
121
|
-
action
|
112
|
+
resolve_member_action(action, record)
|
122
113
|
else
|
123
114
|
action
|
124
115
|
end
|
@@ -128,7 +119,7 @@ module Super
|
|
128
119
|
helper_method def resolved_collection_actions
|
129
120
|
collection_actions.map do |action|
|
130
121
|
if action.respond_to?(:resolve)
|
131
|
-
action
|
122
|
+
resolve_collection_action(action)
|
132
123
|
else
|
133
124
|
action
|
134
125
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Super
|
4
|
+
# Various methods that are useful for all Super admin controllers, regardless
|
5
|
+
# of the controller being a resourceful or non-resourceful.
|
6
|
+
class SitewideController < ActionController::Base
|
7
|
+
private
|
8
|
+
|
9
|
+
helper_method def site_title
|
10
|
+
Super.configuration.title
|
11
|
+
end
|
12
|
+
|
13
|
+
helper_method def site_navigation
|
14
|
+
Super::Navigation.new(&:all)
|
15
|
+
end
|
16
|
+
|
17
|
+
helper_method def document_title
|
18
|
+
if instance_variable_defined?(:@document_title)
|
19
|
+
return @document_title
|
20
|
+
end
|
21
|
+
|
22
|
+
document_title_segments.map(&:presence).compact.join(document_title_separator)
|
23
|
+
end
|
24
|
+
|
25
|
+
def document_title_segments
|
26
|
+
@document_title_segments ||= [page_title, site_title]
|
27
|
+
end
|
28
|
+
|
29
|
+
def document_title_separator
|
30
|
+
@document_title_separator ||= " - "
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module Super
|
4
4
|
# Various methods that determine the behavior of your controllers. These
|
5
5
|
# methods can and should be overridden.
|
6
|
-
class SubstructureController <
|
6
|
+
class SubstructureController < ViewController
|
7
7
|
def self.batch(action_name)
|
8
8
|
mod = Module.new do
|
9
9
|
define_method(action_name) do
|
@@ -93,6 +93,14 @@ module Super
|
|
93
93
|
params.require(strong_params.require(model)).permit(strong_params.permit)
|
94
94
|
end
|
95
95
|
|
96
|
+
helper_method def form_record(record)
|
97
|
+
record
|
98
|
+
end
|
99
|
+
|
100
|
+
helper_method def form_action(record)
|
101
|
+
Super::Link.polymorphic_parts(record)
|
102
|
+
end
|
103
|
+
|
96
104
|
# Configures the actions linked to on the index page. This is an optional
|
97
105
|
# method
|
98
106
|
#
|
@@ -127,6 +135,14 @@ module Super
|
|
127
135
|
end
|
128
136
|
end
|
129
137
|
|
138
|
+
helper_method def resolve_collection_action(action)
|
139
|
+
action.resolve(params: params)
|
140
|
+
end
|
141
|
+
|
142
|
+
helper_method def resolve_member_action(action, record)
|
143
|
+
action.resolve(params: params, record: record)
|
144
|
+
end
|
145
|
+
|
130
146
|
helper_method def filters_enabled?
|
131
147
|
true
|
132
148
|
end
|
@@ -199,22 +215,55 @@ module Super
|
|
199
215
|
@record.destroy
|
200
216
|
end
|
201
217
|
|
202
|
-
def
|
203
|
-
Super::
|
218
|
+
def redirect_to_record
|
219
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
220
|
+
end
|
221
|
+
|
222
|
+
def redirect_to_records
|
223
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(model))
|
224
|
+
end
|
225
|
+
|
226
|
+
def redirect_to_record_with_destroy_failure_message(error = nil)
|
227
|
+
flash.alert =
|
228
|
+
case error
|
229
|
+
when ActiveRecord::InvalidForeignKey
|
230
|
+
I18n.t("super.destroy_error.invalid_foreign_key")
|
231
|
+
else
|
232
|
+
I18n.t("super.destroy_error.generic")
|
233
|
+
end
|
234
|
+
|
235
|
+
redirect_to polymorphic_path(Super::Link.polymorphic_parts(@record))
|
236
|
+
end
|
237
|
+
|
238
|
+
def render_new_as_bad_request
|
239
|
+
@current_action = ActionInquirer.new!
|
240
|
+
@form = form_schema
|
241
|
+
@view = new_view
|
242
|
+
render :new, status: :bad_request
|
243
|
+
end
|
244
|
+
|
245
|
+
def render_edit_as_bad_request
|
246
|
+
@current_action = ActionInquirer.edit!
|
247
|
+
@form = form_schema
|
248
|
+
@view = edit_view
|
249
|
+
render :edit, status: :bad_request
|
250
|
+
end
|
251
|
+
|
252
|
+
helper_method def query
|
253
|
+
@query ||= Super::Query.new(
|
204
254
|
model: model,
|
205
|
-
params:
|
206
|
-
namespace: :q,
|
255
|
+
params: request.GET,
|
207
256
|
current_path: request.path,
|
208
257
|
)
|
209
258
|
end
|
210
259
|
|
211
260
|
def apply_queries
|
212
|
-
|
261
|
+
query.apply_changes(@records)
|
213
262
|
end
|
214
263
|
|
215
264
|
def initialize_filter_form
|
216
265
|
if filters_enabled?
|
217
|
-
@
|
266
|
+
@filter_form = query.build(
|
218
267
|
Super::Filter::FormObject,
|
219
268
|
namespace: :f,
|
220
269
|
schema: filter_schema
|
@@ -224,7 +273,7 @@ module Super
|
|
224
273
|
|
225
274
|
def initialize_sort_form
|
226
275
|
if sort_enabled?
|
227
|
-
@
|
276
|
+
@sort_form = query.build(
|
228
277
|
Super::Sort::FormObject,
|
229
278
|
namespace: :s,
|
230
279
|
default: default_sort,
|
@@ -264,86 +313,15 @@ module Super
|
|
264
313
|
.offset(@pagination.offset)
|
265
314
|
end
|
266
315
|
|
267
|
-
helper_method def
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
def index_view
|
272
|
-
Super::Layout.new(
|
273
|
-
main: Super::ViewChain.new(
|
274
|
-
main_panel: Super::Panel.new,
|
275
|
-
batch_form: Super::Partial.new("batch_form"),
|
276
|
-
main_header: Super::Partial.new("collection_header"),
|
277
|
-
main: :@display
|
278
|
-
),
|
279
|
-
aside: Super::ViewChain.new(
|
280
|
-
main: :@query_form
|
281
|
-
)
|
282
|
-
)
|
283
|
-
end
|
284
|
-
|
285
|
-
def show_view
|
286
|
-
Super::Layout.new(
|
287
|
-
main: Super::ViewChain.new(
|
288
|
-
main_panel: Super::Panel.new,
|
289
|
-
main_header: Super::Partial.new("collection_header"),
|
290
|
-
main: :@display
|
291
|
-
)
|
292
|
-
)
|
293
|
-
end
|
294
|
-
|
295
|
-
def new_view
|
296
|
-
Super::Layout.new(
|
297
|
-
main: Super::ViewChain.new(
|
298
|
-
main_panel: Super::Panel.new,
|
299
|
-
main_header: Super::Partial.new("collection_header"),
|
300
|
-
main: :@form
|
301
|
-
)
|
302
|
-
)
|
303
|
-
end
|
304
|
-
|
305
|
-
def edit_view
|
306
|
-
Super::Layout.new(
|
307
|
-
main: Super::ViewChain.new(
|
308
|
-
main_panel: Super::Panel.new,
|
309
|
-
main_header: Super::Partial.new("member_header"),
|
310
|
-
main: :@form
|
311
|
-
)
|
316
|
+
helper_method def paginated_link(page_query_params)
|
317
|
+
polymorphic_path(
|
318
|
+
Super::Link.polymorphic_parts(model),
|
319
|
+
page_query_params
|
312
320
|
)
|
313
321
|
end
|
314
322
|
|
315
|
-
|
316
|
-
|
317
|
-
helper_method :site_title
|
318
|
-
helper_method :site_navigation
|
319
|
-
helper_method :document_title
|
320
|
-
end
|
321
|
-
|
322
|
-
private
|
323
|
-
|
324
|
-
def site_title
|
325
|
-
Super.configuration.title
|
326
|
-
end
|
327
|
-
|
328
|
-
def site_navigation
|
329
|
-
Super::Navigation.new(&:all)
|
330
|
-
end
|
331
|
-
|
332
|
-
def document_title
|
333
|
-
if instance_variable_defined?(:@document_title)
|
334
|
-
return @document_title
|
335
|
-
end
|
336
|
-
|
337
|
-
document_title_segments.map(&:presence).compact.join(document_title_separator)
|
338
|
-
end
|
339
|
-
|
340
|
-
def document_title_segments
|
341
|
-
@document_title_segments ||= [page_title, site_title]
|
342
|
-
end
|
343
|
-
|
344
|
-
def document_title_separator
|
345
|
-
@document_title_separator ||= " - "
|
346
|
-
end
|
323
|
+
helper_method def csv_enabled?
|
324
|
+
true
|
347
325
|
end
|
348
326
|
end
|
349
327
|
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Super
|
4
|
+
# These methods define what each resourceful Super admin page looks like.
|
5
|
+
# Generally, the return value of each of these methods should be set to
|
6
|
+
# `@view`.
|
7
|
+
class ViewController < SitewideController
|
8
|
+
private
|
9
|
+
|
10
|
+
def index_view
|
11
|
+
Super::Layout.new(
|
12
|
+
main: Super::ViewChain.new(
|
13
|
+
main_panel: Super::Panel.new,
|
14
|
+
batch_form: Super::Partial.new("batch_form"),
|
15
|
+
main_header: Super::Partial.new("collection_header"),
|
16
|
+
main: :@display
|
17
|
+
),
|
18
|
+
aside: Super::ViewChain.new(
|
19
|
+
query_panel: Super::Panel.new,
|
20
|
+
query: query,
|
21
|
+
)
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
def show_view
|
26
|
+
Super::Layout.new(
|
27
|
+
main: Super::ViewChain.new(
|
28
|
+
main_panel: Super::Panel.new,
|
29
|
+
main_header: Super::Partial.new("member_header"),
|
30
|
+
main: :@display
|
31
|
+
)
|
32
|
+
)
|
33
|
+
end
|
34
|
+
|
35
|
+
def new_view
|
36
|
+
Super::Layout.new(
|
37
|
+
main: Super::ViewChain.new(
|
38
|
+
main_panel: Super::Panel.new,
|
39
|
+
main_header: Super::Partial.new("collection_header"),
|
40
|
+
main: :@form
|
41
|
+
)
|
42
|
+
)
|
43
|
+
end
|
44
|
+
|
45
|
+
def edit_view
|
46
|
+
Super::Layout.new(
|
47
|
+
main: Super::ViewChain.new(
|
48
|
+
main_panel: Super::Panel.new,
|
49
|
+
main_header: Super::Partial.new("member_header"),
|
50
|
+
main: :@form
|
51
|
+
)
|
52
|
+
)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,5 +1,9 @@
|
|
1
|
+
<% if current_action.collection? %>
|
1
2
|
<div class="whitespace-nowrap gap-1">
|
2
3
|
<% html_id = "batch-checkbox-#{value.to_s.gsub(/[^a-z0-9]+/, "-")}" %>
|
3
4
|
<input type="checkbox" name="batch[]" value="<%= value %>" id="<%= html_id %>">
|
4
5
|
<label for="<%= html_id %>"><%= value %></label>
|
5
6
|
</div>
|
7
|
+
<% else %>
|
8
|
+
<%= value %>
|
9
|
+
<% end %>
|
@@ -2,9 +2,15 @@
|
|
2
2
|
<table class="w-full border-separate" cellspacing="0" cellpadding="0">
|
3
3
|
<thead class="">
|
4
4
|
<tr class="">
|
5
|
-
<% display_index.
|
5
|
+
<% display_index.each_attribute do |attribute_name, attribute_definition| %>
|
6
6
|
<th class="p-2 first:pl-6 border-b border-b-2 border-gray-400 text-gray-600 text-left text-sm font-normal bg-white top-0 z-10">
|
7
|
-
<%=
|
7
|
+
<%=
|
8
|
+
if attribute_definition.respond_to?(:attribute_name) && attribute_definition.attribute_name
|
9
|
+
attribute_definition.attribute_name
|
10
|
+
else
|
11
|
+
model.human_attribute_name(attribute_name)
|
12
|
+
end
|
13
|
+
%>
|
8
14
|
</th>
|
9
15
|
<% end %>
|
10
16
|
</tr>
|
@@ -1,7 +1,15 @@
|
|
1
1
|
<table class="max-w-full mt-4">
|
2
|
-
<% display_show.
|
2
|
+
<% display_show.each_attribute do |attribute_name, attribute_definition| %>
|
3
3
|
<tr>
|
4
|
-
<th class="py-1 align-baseline text-right px-4"
|
4
|
+
<th class="py-1 align-baseline text-right px-4">
|
5
|
+
<%=
|
6
|
+
if attribute_definition.respond_to?(:attribute_name) && attribute_definition.attribute_name
|
7
|
+
attribute_definition.attribute_name
|
8
|
+
else
|
9
|
+
model.human_attribute_name(attribute_name)
|
10
|
+
end
|
11
|
+
%>
|
12
|
+
</th>
|
5
13
|
<td class="py-1 align-baseline"><%= display_show.render_attribute(template: self, record: @record, column: attribute_name) %></td>
|
6
14
|
</tr>
|
7
15
|
<% end %>
|
@@ -1,66 +1,70 @@
|
|
1
|
-
<h1 class="text-lg">Filter</h1>
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
<div>
|
8
|
-
<
|
9
|
-
|
10
|
-
|
1
|
+
<h1 class="text-lg mt-4">Filter</h1>
|
2
|
+
<%= super_fields_for(query.namespace_for(filter), filter) do |form| %>
|
3
|
+
<% filter.each_attribute do |attribute_form_object| %>
|
4
|
+
<div class="mt-4">
|
5
|
+
<%= form.fields_for(attribute_form_object.field_name, attribute_form_object) do |attribute_form| %>
|
6
|
+
<% selected_index = 0 %>
|
7
|
+
<div data-controller="tab-container" data-tab-container-tab-identifier-getter-value="tabIdentifierValue" data-tab-container-tab-controller-name-value="tab">
|
8
|
+
<div>
|
9
|
+
<span class="inline-block"><%= attribute_form_object.humanized_attribute_name %></span>
|
10
|
+
<select data-tab-container-target="control" data-action="tab-container#change" class="super-input super-input-select inline-block">
|
11
|
+
<% selected = false %>
|
12
|
+
<% attribute_form_object.each_operator.with_index do |operator_form_object, index| %>
|
13
|
+
<%
|
14
|
+
selected_attribute =
|
15
|
+
if !selected && operator_form_object.specified?
|
16
|
+
selected = true
|
17
|
+
selected_index = index
|
18
|
+
%(selected=selected)
|
19
|
+
else
|
20
|
+
""
|
21
|
+
end
|
22
|
+
%>
|
23
|
+
<option value="<%= operator_form_object.identifier %>" <%= selected_attribute %>><%= operator_form_object.operator.humanized_operator_name %></option>
|
24
|
+
<% end %>
|
25
|
+
</select>
|
26
|
+
</div>
|
27
|
+
<div>
|
11
28
|
<% attribute_form_object.each_operator.with_index do |operator_form_object, index| %>
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
<% form_html = capture do %>
|
30
|
-
<div data-tab-target="content">
|
31
|
-
<%= attribute_form.fields_for(operator_form_object.identifier, operator_form_object) do |operator_form| %>
|
32
|
-
<div class="flex gap-x-2 mt-2">
|
33
|
-
<% operator_form_object.each_field.with_index do |operator_field_name, index| %>
|
34
|
-
<div class="flex-1">
|
35
|
-
<% if operator_field_name == Super::Filter::FormObject::OperatorForm::NULLARY %>
|
36
|
-
<%= operator_form.super.check_box(operator_field_name, {}, "1", "") %>
|
37
|
-
<%= operator_form.super.label(operator_field_name, nil, super: { class: "select-none ml-1" }) %>
|
38
|
-
<% elsif operator_form_object.operator.respond_to?(:field_transcript) && operator_form_object.operator.field_transcript %>
|
39
|
-
<% field_transcript = operator_form_object.operator.field_transcript %>
|
40
|
-
<% if field_transcript.super? %>
|
41
|
-
<%= operator_form.super.public_send(field_transcript.method_name, operator_field_name, *field_transcript.args, **field_transcript.kwargs) %>
|
29
|
+
<div data-controller="tab" data-tab-tab-container-getter-value="tabContainer" data-tab-container-target="tab" data-tab-identifier-value="<%= operator_form_object.identifier %>">
|
30
|
+
<% form_html = capture do %>
|
31
|
+
<div data-tab-target="content">
|
32
|
+
<%= attribute_form.fields_for(operator_form_object.identifier, operator_form_object) do |operator_form| %>
|
33
|
+
<div class="flex gap-x-2 mt-2">
|
34
|
+
<% operator_form_object.each_field.with_index do |operator_field_name, index| %>
|
35
|
+
<div class="flex-1">
|
36
|
+
<% if operator_field_name == Super::Filter::FormObject::OperatorForm::NULLARY %>
|
37
|
+
<%= operator_form.super.check_box(operator_field_name, {}, "1", "") %>
|
38
|
+
<%= operator_form.super.label(operator_field_name, nil, super: { class: "select-none ml-1" }) %>
|
39
|
+
<% elsif operator_form_object.operator.respond_to?(:field_transcript) && operator_form_object.operator.field_transcript %>
|
40
|
+
<% field_transcript = operator_form_object.operator.field_transcript %>
|
41
|
+
<% if field_transcript.super? %>
|
42
|
+
<%= operator_form.super.public_send(field_transcript.method_name, operator_field_name, *field_transcript.args, **field_transcript.kwargs) %>
|
43
|
+
<% else %>
|
44
|
+
<%= operator_form.public_send(field_transcript.method_name, operator_field_name, *field_transcript.args, **field_transcript.kwargs) %>
|
45
|
+
<% end %>
|
42
46
|
<% else %>
|
43
|
-
<%= operator_form.
|
47
|
+
<%= operator_form.super.text_field(operator_field_name) %>
|
44
48
|
<% end %>
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
<% end %>
|
52
|
-
</div>
|
53
|
-
<% end %>
|
49
|
+
</div>
|
50
|
+
<% end %>
|
51
|
+
</div>
|
52
|
+
<% end %>
|
53
|
+
</div>
|
54
|
+
<% end %>
|
54
55
|
|
55
|
-
|
56
|
+
<%= form_html if index == selected_index %>
|
56
57
|
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
<template data-tab-target="pocket">
|
59
|
+
<%= form_html %>
|
60
|
+
</template>
|
61
|
+
</div>
|
62
|
+
<% end %>
|
63
|
+
</div>
|
62
64
|
</div>
|
63
|
-
|
64
|
-
|
65
|
-
|
65
|
+
<% end %>
|
66
|
+
</div>
|
67
|
+
<% end %>
|
66
68
|
<% end %>
|
69
|
+
|
70
|
+
<%= yield if block_given? %>
|
@@ -5,10 +5,7 @@
|
|
5
5
|
<% @pagination.each do |page_query_params, is_current_page, display| %>
|
6
6
|
<%= link_to(
|
7
7
|
display,
|
8
|
-
|
9
|
-
Super::Link.polymorphic_parts(model),
|
10
|
-
page_query_params
|
11
|
-
),
|
8
|
+
paginated_link(page_query_params),
|
12
9
|
class: "inline-block ml-2 text-lg #{is_current_page ? " text-gray-900" : ""}"
|
13
10
|
) %>
|
14
11
|
<% end %>
|
@@ -1,18 +1,19 @@
|
|
1
|
-
|
1
|
+
<% if filters_enabled? || sort_enabled? %>
|
2
2
|
<h1 class="text-xl">Query</h1>
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
<%= form.fields_for namespace do |addon_form| %>
|
12
|
-
<%= render(addon, form: addon_form) %>
|
3
|
+
|
4
|
+
<%= form_tag(query.path, method: :get, data: { controller: "clean-filter-params", action: "submit->clean-filter-params#call" }) do %>
|
5
|
+
<% if filters_enabled? %>
|
6
|
+
<%= render @filter_form %>
|
7
|
+
<% end %>
|
8
|
+
<% if sort_enabled? %>
|
9
|
+
<% if filters_enabled? %>
|
10
|
+
<div class="mt-6"></div>
|
13
11
|
<% end %>
|
12
|
+
<%= render @sort_form %>
|
14
13
|
<% end %>
|
15
14
|
|
16
|
-
<%=
|
15
|
+
<%= submit_tag("Apply", class: "super-button super-button--border-gray mt-6") %>
|
17
16
|
<% end %>
|
18
17
|
<% end %>
|
18
|
+
|
19
|
+
<%= yield if block_given? %>
|