avo 3.10.10 → 3.11.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/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
|