avo 3.10.10 → 3.11.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +3 -4
- data/Gemfile.lock +51 -49
- data/app/components/avo/actions_component.html.erb +10 -6
- data/app/components/avo/actions_component.rb +37 -55
- data/app/components/avo/button_component.rb +3 -3
- data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +8 -4
- data/app/components/avo/fields/belongs_to_field/show_component.rb +1 -1
- data/app/components/avo/fields/common/files/list_viewer_component.rb +1 -1
- data/app/components/avo/fields/has_one_field/show_component.rb +3 -3
- data/app/components/avo/index/resource_controls_component.rb +9 -5
- data/app/components/avo/paginator_component.html.erb +1 -1
- data/app/components/avo/paginator_component.rb +1 -1
- data/app/components/avo/panel_component.html.erb +6 -4
- data/app/components/avo/resource_component.rb +3 -2
- data/app/components/avo/resource_sidebar_component.html.erb +1 -1
- data/app/components/avo/views/resource_edit_component.html.erb +2 -2
- data/app/components/avo/views/resource_index_component.html.erb +2 -2
- data/app/components/avo/views/resource_index_component.rb +17 -4
- data/app/components/avo/views/resource_show_component.html.erb +2 -2
- data/app/controllers/avo/actions_controller.rb +1 -1
- data/app/controllers/avo/application_controller.rb +1 -1
- data/app/controllers/avo/associations_controller.rb +55 -18
- data/app/controllers/avo/base_controller.rb +7 -2
- data/app/controllers/avo/search_controller.rb +1 -1
- data/app/helpers/avo/application_helper.rb +1 -1
- data/app/javascript/avo.base.js +8 -0
- data/app/views/avo/actions/show.html.erb +3 -3
- data/app/views/avo/associations/new.html.erb +45 -20
- data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +1 -1
- data/app/views/layouts/avo/application.html.erb +1 -2
- data/config/initializers/pagy.rb +1 -1
- data/lib/avo/base_action.rb +1 -0
- data/lib/avo/engine.rb +8 -4
- data/lib/avo/fields/base_field.rb +2 -2
- data/lib/avo/fields/belongs_to_field.rb +14 -8
- data/lib/avo/fields/concerns/is_required.rb +1 -1
- data/lib/avo/fields/has_base_field.rb +3 -1
- data/lib/avo/fields/has_one_field.rb +1 -1
- data/lib/avo/fields_execution_context.rb +13 -0
- data/lib/avo/resources/base.rb +32 -22
- data/lib/avo/version.rb +1 -1
- data/lib/avo.rb +10 -8
- data/lib/generators/avo/templates/initializer/avo.tt +3 -3
- data/lib/generators/avo/templates/locales/avo.ar.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.de.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.en.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.es.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.fr.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.it.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.ja.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.nb.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.nl.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.nn.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.pl.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.pt.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.ro.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.ru.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.tr.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.uk.yml +1 -0
- data/lib/generators/avo/templates/locales/avo.zh.yml +1 -0
- data/lib/tasks/avo_tasks.rake +1 -1
- data/public/avo-assets/avo.base.css +49 -2
- data/public/avo-assets/avo.base.js +129 -129
- data/public/avo-assets/avo.base.js.map +3 -3
- data/tailwind.preset.js +2 -3
- metadata +4 -3
- /data/{lib → app}/avo/base_resource.rb +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f8dfd2427a19d5e2700a60013dc358f09ea5045296d27bd94660a3a8a2e8728
|
4
|
+
data.tar.gz: c981ab154fa0a42682eb1b8db713585165a4e8864a7612d534f9e9ac07aebbad
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d0eb9fd3be357036607c18cdb8e8d7663ddee4d6f917981c4209397227c68924737b76c39c8f47a1e029924dd3e192a9d612064f2d4f8b042ed82eb47903716
|
7
|
+
data.tar.gz: cfbf2d89029d9997f9c13b8bb203de79212ffbf612c2f08d876031bbf39037beff6b93c9b31fccd7cf8117af0417f699966057f1e6cc93d8d659f41019801fa5
|
data/Gemfile
CHANGED
@@ -130,10 +130,7 @@ gem "addressable"
|
|
130
130
|
gem 'meta-tags'
|
131
131
|
|
132
132
|
# Search
|
133
|
-
|
134
|
-
|
135
|
-
# Temporary use of fork to add Rails 8 support
|
136
|
-
gem "ransack", github: "avo-hq/ransack", branch: "fix/rails-8/delegate-alias-tracker-to-relation"
|
133
|
+
gem "ransack", ">= 4.2.0"
|
137
134
|
|
138
135
|
gem 'friendly_id', '~> 5.5.1'
|
139
136
|
|
@@ -175,6 +172,8 @@ gem "mapkick-rb", "~> 0.1.4"
|
|
175
172
|
|
176
173
|
gem "pluggy", path: "./pluggy"
|
177
174
|
|
175
|
+
gem "hashid-rails", "~> 1.4", ">= 1.4.1"
|
176
|
+
|
178
177
|
# Avo money field
|
179
178
|
# gem "avo-money_field", path: "./../avo-money_field"
|
180
179
|
gem "money-rails", "~> 1.12"
|
data/Gemfile.lock
CHANGED
@@ -1,23 +1,13 @@
|
|
1
1
|
GIT
|
2
2
|
remote: https://github.com/avo-hq/acts-as-taggable-on.git
|
3
|
-
revision:
|
3
|
+
revision: 8f497b819632a2aceeec7f02144269b773c3588c
|
4
4
|
specs:
|
5
5
|
acts-as-taggable-on (10.0.0)
|
6
6
|
activerecord (>= 6.1)
|
7
7
|
|
8
|
-
GIT
|
9
|
-
remote: https://github.com/avo-hq/ransack.git
|
10
|
-
revision: 0af36d53a784e19b5a56f3b112f433c54f4d709f
|
11
|
-
branch: fix/rails-8/delegate-alias-tracker-to-relation
|
12
|
-
specs:
|
13
|
-
ransack (4.1.1)
|
14
|
-
activerecord (>= 6.1.5)
|
15
|
-
activesupport (>= 6.1.5)
|
16
|
-
i18n
|
17
|
-
|
18
8
|
GIT
|
19
9
|
remote: https://github.com/rails/rails.git
|
20
|
-
revision:
|
10
|
+
revision: 7a0bf93b9dd291c7f61121a41b3a813ac8857e6a
|
21
11
|
branch: main
|
22
12
|
specs:
|
23
13
|
actioncable (8.0.0.alpha)
|
@@ -88,6 +78,7 @@ GIT
|
|
88
78
|
i18n (>= 1.6, < 2)
|
89
79
|
logger (>= 1.4.2)
|
90
80
|
minitest (>= 5.1)
|
81
|
+
securerandom (>= 0.3)
|
91
82
|
tzinfo (~> 2.0, >= 2.0.5)
|
92
83
|
rails (8.0.0.alpha)
|
93
84
|
actioncable (= 8.0.0.alpha)
|
@@ -115,7 +106,7 @@ GIT
|
|
115
106
|
PATH
|
116
107
|
remote: .
|
117
108
|
specs:
|
118
|
-
avo (3.
|
109
|
+
avo (3.11.0)
|
119
110
|
actionview (>= 6.1)
|
120
111
|
active_link_to
|
121
112
|
activerecord (>= 6.1)
|
@@ -144,12 +135,12 @@ GEM
|
|
144
135
|
addressable
|
145
136
|
active_median (0.4.1)
|
146
137
|
activesupport (>= 6.1)
|
147
|
-
acts_as_list (1.2.
|
138
|
+
acts_as_list (1.2.2)
|
148
139
|
activerecord (>= 6.1)
|
149
140
|
activesupport (>= 6.1)
|
150
|
-
actual_db_schema (0.7.
|
151
|
-
activerecord
|
152
|
-
activesupport
|
141
|
+
actual_db_schema (0.7.7)
|
142
|
+
activerecord
|
143
|
+
activesupport
|
153
144
|
csv
|
154
145
|
addressable (2.8.7)
|
155
146
|
public_suffix (>= 2.0.2, < 7.0)
|
@@ -166,8 +157,8 @@ GEM
|
|
166
157
|
avo-record_link_field (0.0.1)
|
167
158
|
awesome_print (1.9.2)
|
168
159
|
aws-eventstream (1.3.0)
|
169
|
-
aws-partitions (1.
|
170
|
-
aws-sdk-core (3.201.
|
160
|
+
aws-partitions (1.961.0)
|
161
|
+
aws-sdk-core (3.201.3)
|
171
162
|
aws-eventstream (~> 1, >= 1.3.0)
|
172
163
|
aws-partitions (~> 1, >= 1.651.0)
|
173
164
|
aws-sigv4 (~> 1.8)
|
@@ -175,11 +166,11 @@ GEM
|
|
175
166
|
aws-sdk-kms (1.88.0)
|
176
167
|
aws-sdk-core (~> 3, >= 3.201.0)
|
177
168
|
aws-sigv4 (~> 1.5)
|
178
|
-
aws-sdk-s3 (1.
|
169
|
+
aws-sdk-s3 (1.157.0)
|
179
170
|
aws-sdk-core (~> 3, >= 3.201.0)
|
180
171
|
aws-sdk-kms (~> 1)
|
181
172
|
aws-sigv4 (~> 1.5)
|
182
|
-
aws-sigv4 (1.
|
173
|
+
aws-sigv4 (1.9.1)
|
183
174
|
aws-eventstream (~> 1, >= 1.0.2)
|
184
175
|
axiom-types (0.1.1)
|
185
176
|
descendants_tracker (~> 0.0.4)
|
@@ -225,13 +216,13 @@ GEM
|
|
225
216
|
bigdecimal
|
226
217
|
rexml
|
227
218
|
crass (1.0.6)
|
228
|
-
cssbundling-rails (1.4.
|
219
|
+
cssbundling-rails (1.4.1)
|
229
220
|
railties (>= 6.0.0)
|
230
221
|
csv (3.3.0)
|
231
222
|
cuprite (0.15.1)
|
232
223
|
capybara (~> 3.0)
|
233
224
|
ferrum (~> 0.15.0)
|
234
|
-
database_cleaner-active_record (2.
|
225
|
+
database_cleaner-active_record (2.2.0)
|
235
226
|
activerecord (>= 5.a)
|
236
227
|
database_cleaner-core (~> 2.0.0)
|
237
228
|
database_cleaner-core (2.0.1)
|
@@ -245,7 +236,7 @@ GEM
|
|
245
236
|
responders
|
246
237
|
warden (~> 1.2.3)
|
247
238
|
diff-lcs (1.5.1)
|
248
|
-
docile (1.4.
|
239
|
+
docile (1.4.1)
|
249
240
|
dotenv (3.1.2)
|
250
241
|
dotenv-rails (3.1.2)
|
251
242
|
dotenv (= 3.1.2)
|
@@ -281,12 +272,12 @@ GEM
|
|
281
272
|
e2mmap (0.1.0)
|
282
273
|
erb-formatter (0.7.3)
|
283
274
|
syntax_tree (~> 6.0)
|
284
|
-
erb_lint (0.
|
275
|
+
erb_lint (0.6.0)
|
285
276
|
activesupport
|
286
277
|
better_html (>= 2.0.1)
|
287
278
|
parser (>= 2.7.1.4)
|
288
279
|
rainbow
|
289
|
-
rubocop
|
280
|
+
rubocop (>= 1)
|
290
281
|
smart_properties
|
291
282
|
erubi (1.13.0)
|
292
283
|
factory_bot (6.4.6)
|
@@ -294,7 +285,7 @@ GEM
|
|
294
285
|
factory_bot_rails (6.4.3)
|
295
286
|
factory_bot (~> 6.4)
|
296
287
|
railties (>= 5.0.0)
|
297
|
-
faker (3.4.
|
288
|
+
faker (3.4.2)
|
298
289
|
i18n (>= 1.8.11, < 2)
|
299
290
|
ferrum (0.15)
|
300
291
|
addressable (~> 2.5)
|
@@ -322,9 +313,13 @@ GEM
|
|
322
313
|
activesupport (>= 6.1)
|
323
314
|
groupdate (6.4.0)
|
324
315
|
activesupport (>= 6.1)
|
325
|
-
hashdiff (1.1.
|
316
|
+
hashdiff (1.1.1)
|
317
|
+
hashid-rails (1.4.1)
|
318
|
+
activerecord (>= 4.0)
|
319
|
+
hashids (~> 1.0)
|
326
320
|
hashids (1.0.6)
|
327
|
-
highline (3.0
|
321
|
+
highline (3.1.0)
|
322
|
+
reline
|
328
323
|
hightop (0.4.0)
|
329
324
|
activesupport (>= 6.1)
|
330
325
|
hotwire-livereload (1.3.2)
|
@@ -345,7 +340,7 @@ GEM
|
|
345
340
|
rainbow (>= 2.2.2, < 4.0)
|
346
341
|
terminal-table (>= 1.5.1)
|
347
342
|
ice_nine (0.11.2)
|
348
|
-
image_processing (1.
|
343
|
+
image_processing (1.13.0)
|
349
344
|
mini_magick (>= 4.9.5, < 5)
|
350
345
|
ruby-vips (>= 2.0.17, < 3)
|
351
346
|
inline_svg (1.9.0)
|
@@ -359,7 +354,7 @@ GEM
|
|
359
354
|
i18n
|
360
355
|
jaro_winkler (1.6.0)
|
361
356
|
jmespath (1.6.2)
|
362
|
-
jsbundling-rails (1.3.
|
357
|
+
jsbundling-rails (1.3.1)
|
363
358
|
railties (>= 6.0.0)
|
364
359
|
json (2.7.2)
|
365
360
|
kramdown (2.4.0)
|
@@ -387,8 +382,8 @@ GEM
|
|
387
382
|
mapkick-rb (0.1.5)
|
388
383
|
marcel (1.0.4)
|
389
384
|
matrix (0.4.2)
|
390
|
-
meta-tags (2.
|
391
|
-
actionpack (>=
|
385
|
+
meta-tags (2.22.0)
|
386
|
+
actionpack (>= 6.0.0, < 8.1)
|
392
387
|
method_source (1.1.0)
|
393
388
|
mini_magick (4.13.2)
|
394
389
|
mini_mime (1.1.5)
|
@@ -414,29 +409,29 @@ GEM
|
|
414
409
|
net-smtp (0.5.0)
|
415
410
|
net-protocol
|
416
411
|
nio4r (2.7.3)
|
417
|
-
nokogiri (1.16.
|
412
|
+
nokogiri (1.16.7)
|
418
413
|
mini_portile2 (~> 2.8.2)
|
419
414
|
racc (~> 1.4)
|
420
|
-
nokogiri (1.16.
|
415
|
+
nokogiri (1.16.7-x86_64-linux)
|
421
416
|
racc (~> 1.4)
|
422
417
|
orm_adapter (0.5.0)
|
423
|
-
pagy (
|
418
|
+
pagy (9.0.5)
|
424
419
|
parallel (1.25.1)
|
425
420
|
parser (3.3.4.0)
|
426
421
|
ast (~> 2.4.1)
|
427
422
|
racc
|
428
|
-
path_expander (1.1.
|
429
|
-
pg (1.5.
|
430
|
-
prefixed_ids (1.
|
423
|
+
path_expander (1.1.2)
|
424
|
+
pg (1.5.7)
|
425
|
+
prefixed_ids (1.8.1)
|
431
426
|
hashids (>= 1.0.0, < 2.0.0)
|
432
427
|
rails (>= 6.0.0)
|
433
428
|
prettier_print (1.2.1)
|
434
429
|
psych (5.1.2)
|
435
430
|
stringio
|
436
|
-
public_suffix (6.0.
|
431
|
+
public_suffix (6.0.1)
|
437
432
|
puma (6.4.2)
|
438
433
|
nio4r (~> 2.0)
|
439
|
-
racc (1.8.
|
434
|
+
racc (1.8.1)
|
440
435
|
rack (3.1.7)
|
441
436
|
rack-session (2.0.0)
|
442
437
|
rack (>= 3.0.0)
|
@@ -461,6 +456,10 @@ GEM
|
|
461
456
|
railties (>= 6.0.0, < 8)
|
462
457
|
rainbow (3.1.1)
|
463
458
|
rake (13.2.1)
|
459
|
+
ransack (4.2.0)
|
460
|
+
activerecord (>= 6.1.5)
|
461
|
+
activesupport (>= 6.1.5)
|
462
|
+
i18n
|
464
463
|
rb-fsevent (0.11.2)
|
465
464
|
rb-inotify (0.11.1)
|
466
465
|
ffi (~> 1.0)
|
@@ -484,7 +483,7 @@ GEM
|
|
484
483
|
railties (>= 5.2)
|
485
484
|
reverse_markdown (2.1.1)
|
486
485
|
nokogiri
|
487
|
-
rexml (3.3.
|
486
|
+
rexml (3.3.4)
|
488
487
|
strscan
|
489
488
|
ripper-tags (1.0.2)
|
490
489
|
rspec-core (3.13.0)
|
@@ -525,8 +524,9 @@ GEM
|
|
525
524
|
rubocop-shopify (2.15.1)
|
526
525
|
rubocop (~> 1.51)
|
527
526
|
ruby-progressbar (1.13.0)
|
528
|
-
ruby-vips (2.2.
|
527
|
+
ruby-vips (2.2.2)
|
529
528
|
ffi (~> 1.12)
|
529
|
+
logger
|
530
530
|
ruby_parser (3.21.1)
|
531
531
|
racc (~> 1.5)
|
532
532
|
sexp_processor (~> 4.16)
|
@@ -542,6 +542,7 @@ GEM
|
|
542
542
|
simplecov (>= 0.22.0)
|
543
543
|
tty-which (~> 0.5.0)
|
544
544
|
virtus (~> 2.0)
|
545
|
+
securerandom (0.3.1)
|
545
546
|
sexp_processor (4.17.2)
|
546
547
|
simplecov (0.22.0)
|
547
548
|
docile (~> 1.1)
|
@@ -579,11 +580,11 @@ GEM
|
|
579
580
|
sprockets (4.2.1)
|
580
581
|
concurrent-ruby (~> 1.0)
|
581
582
|
rack (>= 2.2.4, < 4)
|
582
|
-
sprockets-rails (3.5.
|
583
|
+
sprockets-rails (3.5.2)
|
583
584
|
actionpack (>= 6.1)
|
584
585
|
activesupport (>= 6.1)
|
585
586
|
sprockets (>= 3.0.0)
|
586
|
-
standard (1.39.
|
587
|
+
standard (1.39.2)
|
587
588
|
language_server-protocol (~> 3.17.0.2)
|
588
589
|
lint_roller (~> 1.0)
|
589
590
|
rubocop (~> 1.64.0)
|
@@ -607,7 +608,7 @@ GEM
|
|
607
608
|
tilt (2.4.0)
|
608
609
|
timeout (0.4.1)
|
609
610
|
tty-which (0.5.0)
|
610
|
-
turbo-rails (2.0.
|
611
|
+
turbo-rails (2.0.6)
|
611
612
|
actionpack (>= 6.0.0)
|
612
613
|
activejob (>= 6.0.0)
|
613
614
|
railties (>= 6.0.0)
|
@@ -618,7 +619,7 @@ GEM
|
|
618
619
|
unaccent (0.4.0)
|
619
620
|
unicode-display_width (2.5.0)
|
620
621
|
useragent (0.16.10)
|
621
|
-
view_component (3.
|
622
|
+
view_component (3.13.0)
|
622
623
|
activesupport (>= 5.2.0, < 8.0)
|
623
624
|
concurrent-ruby (~> 1.0)
|
624
625
|
method_source (~> 1.0)
|
@@ -644,7 +645,7 @@ GEM
|
|
644
645
|
xpath (3.2.0)
|
645
646
|
nokogiri (~> 1.8)
|
646
647
|
yard (0.9.36)
|
647
|
-
zeitwerk (2.6.
|
648
|
+
zeitwerk (2.6.17)
|
648
649
|
|
649
650
|
PLATFORMS
|
650
651
|
ruby
|
@@ -686,6 +687,7 @@ DEPENDENCIES
|
|
686
687
|
fuubar
|
687
688
|
gem-release
|
688
689
|
groupdate
|
690
|
+
hashid-rails (~> 1.4, >= 1.4.1)
|
689
691
|
hightop
|
690
692
|
hotwire-livereload (~> 1.3.0)
|
691
693
|
htmlbeautifier
|
@@ -706,7 +708,7 @@ DEPENDENCIES
|
|
706
708
|
puma (~> 6.4)
|
707
709
|
rails!
|
708
710
|
rails-controller-testing
|
709
|
-
ransack
|
711
|
+
ransack (>= 4.2.0)
|
710
712
|
redis (~> 5.0)
|
711
713
|
ripper-tags
|
712
714
|
rspec-rails (~> 6.0, >= 6.0.3)
|
@@ -4,17 +4,21 @@
|
|
4
4
|
data-actions-picker-enabled-class="text-black hover:bg-primary-500 hover:text-white"
|
5
5
|
data-actions-picker-disabled-class="cursor-wait text-gray-500"
|
6
6
|
data-resource-name="<%= @resource.class.to_s %>"
|
7
|
-
<% if @resource.record.present? %> data-record-id="<%= @resource.
|
7
|
+
<% if @resource.record.present? %> data-record-id="<%= @resource.record_param %>" <% end %>
|
8
8
|
>
|
9
9
|
<%= a_button style: @style,
|
10
10
|
type: :button,
|
11
11
|
color: @color,
|
12
|
-
size: size,
|
12
|
+
size: @size,
|
13
13
|
class: "focus:outline-none",
|
14
14
|
icon: @icon,
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
data: {
|
16
|
+
action: "click->toggle#togglePanel",
|
17
|
+
actions_dropdown_button: @resource.model_key,
|
18
|
+
tippy: "tooltip",
|
19
|
+
tippy_content: @title
|
20
|
+
} do %>
|
21
|
+
<%= @label %>
|
18
22
|
<% end %>
|
19
23
|
<div
|
20
24
|
class="absolute flex inset-auto xl:right-0 top-full bg-white w-full sm:w-auto sm:min-w-[300px] mt-2 z-40 shadow-modal rounded overflow-hidden hidden"
|
@@ -30,7 +34,7 @@
|
|
30
34
|
data-transition-leave-end="transform opacity-0 -translate-y-1"
|
31
35
|
>
|
32
36
|
<div data-target="actions-list" class="w-full space divide-y">
|
33
|
-
<% actions.each do |action| %>
|
37
|
+
<% @actions.each do |action| %>
|
34
38
|
<%= render_item(action)%>
|
35
39
|
<% end %>
|
36
40
|
</div>
|
@@ -2,52 +2,53 @@
|
|
2
2
|
|
3
3
|
class Avo::ActionsComponent < Avo::BaseComponent
|
4
4
|
include Avo::ApplicationHelper
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
5
|
+
|
6
|
+
ACTION_FILTER = _Set(_Class(Avo::BaseAction))
|
7
|
+
|
8
|
+
prop :as_row_control, _Boolean, default: false
|
9
|
+
prop :icon, _Nilable(String)
|
10
|
+
prop :size, Avo::ButtonComponent::SIZE, default: :md
|
11
|
+
prop :title, _Nilable(String)
|
12
|
+
prop :color, Symbol, default: :primary
|
13
|
+
prop :include, _Nilable(ACTION_FILTER), default: [].freeze do |include|
|
14
|
+
Array(include).to_set
|
15
|
+
end
|
16
|
+
prop :label, String do |label|
|
17
|
+
label || I18n.t("avo.actions")
|
18
|
+
end
|
19
|
+
prop :style, Avo::ButtonComponent::STYLE, default: :outline
|
20
|
+
prop :actions, _Array(Avo::BaseAction), default: [].freeze
|
21
|
+
prop :exclude, _Nilable(ACTION_FILTER), default: [].freeze do |exclude|
|
22
|
+
Array(exclude).to_set
|
23
|
+
end
|
24
|
+
prop :resource, _Nilable(Avo::BaseResource)
|
25
|
+
prop :view, _Nilable(Symbol) do |view|
|
26
|
+
view&.to_sym
|
19
27
|
end
|
20
28
|
|
21
|
-
def
|
22
|
-
|
29
|
+
def after_initialize
|
30
|
+
filter_actions
|
23
31
|
end
|
24
32
|
|
25
|
-
def
|
26
|
-
|
27
|
-
@actions.reject { |action| action.class.in?(@exclude) }
|
28
|
-
elsif @include.present?
|
29
|
-
@actions.select { |action| action.class.in?(@include) }
|
30
|
-
else
|
31
|
-
@actions
|
32
|
-
end
|
33
|
+
def render?
|
34
|
+
@actions.present?
|
33
35
|
end
|
34
36
|
|
35
|
-
|
36
|
-
|
37
|
-
def action_path(action)
|
38
|
-
return single_record_path(action) if as_row_control
|
39
|
-
return many_records_path(action) unless @resource.has_record_id?
|
37
|
+
def filter_actions
|
38
|
+
@actions = @actions.dup
|
40
39
|
|
41
|
-
if
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
if @exclude.any?
|
41
|
+
@actions.reject! { |action| @exclude.include?(action.class) }
|
42
|
+
end
|
43
|
+
|
44
|
+
if @include.any?
|
45
|
+
@actions.select! { |action| @include.include?(action.class) }
|
45
46
|
end
|
46
47
|
end
|
47
48
|
|
48
49
|
# How should the action be displayed by default
|
49
50
|
def is_disabled?(action)
|
50
|
-
return false if action.standalone || as_row_control
|
51
|
+
return false if action.standalone || @as_row_control
|
51
52
|
|
52
53
|
on_index_page?
|
53
54
|
end
|
@@ -55,32 +56,13 @@ class Avo::ActionsComponent < Avo::BaseComponent
|
|
55
56
|
private
|
56
57
|
|
57
58
|
def on_record_page?
|
58
|
-
@view.in?(
|
59
|
+
@view.in?([:show, :edit, :new])
|
59
60
|
end
|
60
61
|
|
61
62
|
def on_index_page?
|
62
63
|
!on_record_page?
|
63
64
|
end
|
64
65
|
|
65
|
-
def single_record_path(action)
|
66
|
-
action_url(action, @resource.record_path)
|
67
|
-
end
|
68
|
-
|
69
|
-
def many_records_path(action)
|
70
|
-
action_url(action, @resource.records_path)
|
71
|
-
end
|
72
|
-
|
73
|
-
def action_url(action, path)
|
74
|
-
Avo::Services::URIService.parse(path)
|
75
|
-
.append_paths("actions")
|
76
|
-
.append_query(
|
77
|
-
{
|
78
|
-
action_id: action.to_param,
|
79
|
-
arguments: Avo::BaseAction.encode_arguments(action.arguments)
|
80
|
-
}.compact
|
81
|
-
).to_s
|
82
|
-
end
|
83
|
-
|
84
66
|
def icon(action)
|
85
67
|
svg action.icon, class: "h-5 shrink-0 mr-1 inline pointer-events-none"
|
86
68
|
end
|
@@ -102,7 +84,7 @@ class Avo::ActionsComponent < Avo::BaseComponent
|
|
102
84
|
end
|
103
85
|
|
104
86
|
def render_action_link(action)
|
105
|
-
link_to
|
87
|
+
link_to action.link_arguments(resource: @resource).first,
|
106
88
|
data: action_data_attributes(action),
|
107
89
|
title: action.action_name,
|
108
90
|
class: action_css_class(action) do
|
@@ -1,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# A button/link can have the following settings:
|
4
|
-
# style: primary/outline/text
|
5
|
-
# size: :xs :sm, :md, :lg
|
6
3
|
class Avo::ButtonComponent < Avo::BaseComponent
|
4
|
+
SIZE = _Union(:xs, :sm, :md, :lg, :xl)
|
5
|
+
STYLE = _Union(:primary, :outline, :text, :icon)
|
6
|
+
|
7
7
|
def initialize(path = nil, size: :md, style: :outline, color: :gray, icon: nil, icon_class: "", is_link: false, rounded: true, compact: false, aria: {}, **args)
|
8
8
|
# Main settings
|
9
9
|
@size = size
|
@@ -48,9 +48,13 @@
|
|
48
48
|
%>
|
49
49
|
<% else %>
|
50
50
|
<%= @form.select @field.id_input_foreign_key,
|
51
|
-
options_for_select(
|
51
|
+
options_for_select(
|
52
|
+
# Options
|
53
|
+
@field.values_for_type(type),
|
54
|
+
# Selected
|
55
|
+
@field.value.is_a?(type) ? @field.value.to_param : nil
|
56
|
+
),
|
52
57
|
{
|
53
|
-
value: @field.value.class == type ? @resource.record[@field.id_input_foreign_key].to_s : nil,
|
54
58
|
include_blank: @field.placeholder,
|
55
59
|
},
|
56
60
|
{
|
@@ -98,10 +102,10 @@
|
|
98
102
|
style: @field.get_html(:style, view: view, element: :input)
|
99
103
|
%>
|
100
104
|
<% else %>
|
101
|
-
<%= @form.select @field.id_input_foreign_key,
|
105
|
+
<%= @form.select @field.id_input_foreign_key,
|
106
|
+
options_for_select(@field.options, @field.value.to_param),
|
102
107
|
{
|
103
108
|
include_blank: @field.placeholder,
|
104
|
-
value: @field.value
|
105
109
|
},
|
106
110
|
{
|
107
111
|
class: classes("w-full"),
|
@@ -6,7 +6,7 @@ class Avo::Fields::BelongsToField::ShowComponent < Avo::Fields::ShowComponent
|
|
6
6
|
record: @field.value,
|
7
7
|
resource: @field.target_resource,
|
8
8
|
via_resource_class: @resource.class.to_s,
|
9
|
-
via_record_id: @resource.
|
9
|
+
via_record_id: @resource.record_param
|
10
10
|
)
|
11
11
|
end
|
12
12
|
end
|
@@ -11,7 +11,7 @@ class Avo::Fields::Common::Files::ListViewerComponent < Avo::BaseComponent
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def classes
|
14
|
-
base_classes = "py-4 rounded-
|
14
|
+
base_classes = "py-4 rounded-2xl max-w-full"
|
15
15
|
|
16
16
|
view_type_classes = if view_type == :list
|
17
17
|
"flex flex-col space-y-2"
|
@@ -24,7 +24,7 @@ class Avo::Fields::HasOneField::ShowComponent < Avo::Fields::ShowComponent
|
|
24
24
|
def attach_path
|
25
25
|
helpers.avo.resources_associations_new_path(
|
26
26
|
@resource.singular_model_key,
|
27
|
-
@resource.
|
27
|
+
@resource.record_param,
|
28
28
|
@field.id,
|
29
29
|
for_attribute: @field.for_attribute
|
30
30
|
)
|
@@ -42,13 +42,13 @@ class Avo::Fields::HasOneField::ShowComponent < Avo::Fields::ShowComponent
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def create_path
|
45
|
-
association_id = @field.resource.model_class.
|
45
|
+
association_id = @field.resource.model_class.reflect_on_association(@field.association_name).inverse_of.name
|
46
46
|
|
47
47
|
args = {
|
48
48
|
via_relation: association_id,
|
49
49
|
via_relation_class: @resource.model_class.to_s,
|
50
50
|
via_resource_class: @resource.class,
|
51
|
-
via_record_id: @resource.
|
51
|
+
via_record_id: @resource.record_param,
|
52
52
|
via_association_type: :has_one
|
53
53
|
}
|
54
54
|
|
@@ -65,7 +65,11 @@ class Avo::Index::ResourceControlsComponent < Avo::ResourceComponent
|
|
65
65
|
end
|
66
66
|
|
67
67
|
def is_has_many_association?
|
68
|
-
@reflection.
|
68
|
+
@reflection.class.in? [
|
69
|
+
ActiveRecord::Reflection::HasManyReflection,
|
70
|
+
ActiveRecord::Reflection::HasAndBelongsToManyReflection,
|
71
|
+
ActiveRecord::Reflection::ThroughReflection
|
72
|
+
]
|
69
73
|
end
|
70
74
|
|
71
75
|
def referrer_path
|
@@ -85,7 +89,7 @@ class Avo::Index::ResourceControlsComponent < Avo::ResourceComponent
|
|
85
89
|
data: {
|
86
90
|
target: "control:edit",
|
87
91
|
control: :edit,
|
88
|
-
"resource-id": @resource.
|
92
|
+
"resource-id": @resource.record_param,
|
89
93
|
tippy: "tooltip",
|
90
94
|
}
|
91
95
|
end
|
@@ -129,14 +133,14 @@ class Avo::Index::ResourceControlsComponent < Avo::ResourceComponent
|
|
129
133
|
target: "control:destroy",
|
130
134
|
control: :destroy,
|
131
135
|
tippy: control.title ? :tooltip : nil,
|
132
|
-
"resource-id": @resource.
|
136
|
+
"resource-id": @resource.record_param,
|
133
137
|
}
|
134
138
|
end
|
135
139
|
|
136
140
|
def render_detach_button(control)
|
137
141
|
return unless can_detach?
|
138
142
|
|
139
|
-
a_button url: helpers.resource_detach_path(params[:resource_name], params[:id], params[:related_name], @resource.
|
143
|
+
a_button url: helpers.resource_detach_path(params[:resource_name], params[:id], params[:related_name], @resource.record_param),
|
140
144
|
style: :icon,
|
141
145
|
color: :gray,
|
142
146
|
icon: "avo/detach",
|
@@ -150,7 +154,7 @@ class Avo::Index::ResourceControlsComponent < Avo::ResourceComponent
|
|
150
154
|
turbo_confirm: control.confirmation_message,
|
151
155
|
target: "control:detach",
|
152
156
|
control: :detach,
|
153
|
-
"resource-id": @resource.
|
157
|
+
"resource-id": @resource.record_param,
|
154
158
|
tippy: :tooltip,
|
155
159
|
}
|
156
160
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
<div class="flex flex-col sm:flex-row items-center justify-between aborder-t aborder-slate-200 rounded-
|
1
|
+
<div class="flex flex-col sm:flex-row items-center justify-between aborder-t aborder-slate-200 rounded-2xl space-y-2 sm:space-y-0">
|
2
2
|
<div class="flex-2 sm:flex sm:items-center sm:justify-between">
|
3
3
|
<div>
|
4
4
|
<div class="text-sm leading-5 text-slate-600 flex items-center">
|
@@ -28,7 +28,7 @@ class Avo::PaginatorComponent < Avo::BaseComponent
|
|
28
28
|
def render?
|
29
29
|
return false if discreet_pagination && pagy.pages <= 1
|
30
30
|
|
31
|
-
if ::Pagy::VERSION
|
31
|
+
if ::Pagy::VERSION >= ::Gem::Version.new("9.0")
|
32
32
|
@pagy.limit > 0
|
33
33
|
else
|
34
34
|
@pagy.items > 0
|