avo 0.5.0.beta7 → 0.5.0.beta12

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of avo might be problematic. Click here for more details.

Files changed (276) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +48 -47
  3. data/Gemfile.lock +28 -18
  4. data/Rakefile +14 -14
  5. data/app/components/avo/common/badge_viewer_component.html.erb +1 -1
  6. data/app/components/avo/common/gravatar_viewer_component.html.erb +2 -2
  7. data/app/components/avo/common/gravatar_viewer_component.rb +2 -1
  8. data/app/components/avo/common/multiple_file_viewer_component.rb +1 -1
  9. data/app/components/avo/common/single_file_viewer_component.rb +1 -1
  10. data/app/components/avo/edit/field_wrapper_component.rb +3 -3
  11. data/app/components/avo/edit/fields/trix_field_component.html.erb +1 -1
  12. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  13. data/app/components/avo/index/field_wrapper_component.rb +1 -1
  14. data/app/components/avo/index/fields/belongs_to_field_component.html.erb +1 -5
  15. data/app/components/avo/index/fields/boolean_group_field_component.html.erb +1 -1
  16. data/app/components/avo/index/fields/gravatar_field_component.html.erb +2 -1
  17. data/app/components/avo/index/fields/has_one_field_component.html.erb +1 -5
  18. data/app/components/avo/index/fields/id_field_component.html.erb +1 -1
  19. data/app/components/avo/index/grid_item_component.html.erb +2 -2
  20. data/app/components/avo/index/grid_item_component.rb +10 -9
  21. data/app/components/avo/index/resource_controls_component.html.erb +12 -4
  22. data/app/components/avo/index/resource_controls_component.rb +2 -2
  23. data/app/components/avo/panel_component.rb +7 -6
  24. data/app/components/avo/resource_component.rb +4 -3
  25. data/app/components/avo/show/field_wrapper_component.html.erb +1 -1
  26. data/app/components/avo/show/field_wrapper_component.rb +3 -3
  27. data/app/components/avo/show/fields/boolean_group_field_component.html.erb +1 -1
  28. data/app/components/avo/show/fields/external_image_field_component.html.erb +1 -1
  29. data/app/components/avo/views/resource_edit_component.rb +4 -3
  30. data/app/components/avo/views/resource_index_component.rb +8 -7
  31. data/app/components/avo/views/resource_new_component.rb +4 -3
  32. data/app/components/avo/views/resource_show_component.html.erb +14 -2
  33. data/app/components/avo/views/resource_show_component.rb +21 -21
  34. data/app/controllers/avo/actions_controller.rb +34 -32
  35. data/app/controllers/avo/application_controller.rb +122 -119
  36. data/app/controllers/avo/attachments_controller.rb +3 -3
  37. data/app/controllers/avo/base_controller.rb +80 -82
  38. data/app/controllers/avo/home_controller.rb +2 -2
  39. data/app/controllers/avo/relations_controller.rb +29 -28
  40. data/app/controllers/avo/resources_controller.rb +1 -1
  41. data/app/controllers/avo/search_controller.rb +20 -19
  42. data/app/helpers/avo/application_helper.rb +49 -43
  43. data/app/helpers/avo/resources_helper.rb +11 -11
  44. data/app/mailers/avo/application_mailer.rb +2 -2
  45. data/app/{frontend/css → packs/entrypoints}/application.css +12 -11
  46. data/app/{frontend/packs → packs/entrypoints}/application.js +9 -3
  47. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.eot +0 -0
  48. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.svg +0 -0
  49. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.ttf +0 -0
  50. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.woff +0 -0
  51. data/app/{frontend → packs}/fonts/nunito-v16-latin-700.woff2 +0 -0
  52. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.eot +0 -0
  53. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.svg +0 -0
  54. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.ttf +0 -0
  55. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.woff +0 -0
  56. data/app/{frontend → packs}/fonts/nunito-v16-latin-regular.woff2 +0 -0
  57. data/app/{frontend → packs}/images/logo.png +0 -0
  58. data/app/{frontend → packs}/importmap.json.erb +0 -0
  59. data/app/{frontend → packs}/js/controllers/action_controller.js +0 -0
  60. data/app/{frontend → packs}/js/controllers/actions_picker_controller.js +0 -0
  61. data/app/{frontend → packs}/js/controllers/alerts_controller.js +0 -0
  62. data/app/{frontend → packs}/js/controllers/attachments_controller.js +0 -0
  63. data/app/{frontend → packs}/js/controllers/boolean_filter_controller.js +0 -0
  64. data/app/{frontend → packs}/js/controllers/fields/code_field_controller.js +14 -14
  65. data/app/{frontend → packs}/js/controllers/fields/date_field_controller.js +0 -0
  66. data/app/{frontend → packs}/js/controllers/fields/simple_mde_controller.js +0 -0
  67. data/app/{frontend → packs}/js/controllers/filter_controller.js +20 -3
  68. data/app/{frontend → packs}/js/controllers/hidden_input_controller.js +0 -0
  69. data/app/{frontend → packs}/js/controllers/item_selector_controller.js +0 -0
  70. data/app/{frontend → packs}/js/controllers/modal_controller.js +0 -0
  71. data/app/{frontend → packs}/js/controllers/per_page_controller.js +5 -1
  72. data/app/{frontend → packs}/js/controllers/select_filter_controller.js +0 -0
  73. data/app/{frontend → packs}/js/controllers/tippy_controller.js +0 -0
  74. data/app/{frontend → packs}/js/controllers/toggle_panel_controller.js +0 -0
  75. data/app/{frontend → packs}/js/helpers/cast_boolean.js +0 -0
  76. data/app/{frontend → packs}/js/toastr.js +1 -0
  77. data/app/{frontend/css → packs/stylesheets}/alerts.css +0 -0
  78. data/app/packs/stylesheets/components/code.css +11 -0
  79. data/app/{frontend/css → packs/stylesheets}/components/status.css +0 -0
  80. data/app/{frontend/css → packs/stylesheets}/fonts.css +0 -0
  81. data/app/{frontend/css → packs/stylesheets}/loader.css +0 -0
  82. data/app/{frontend/css → packs/stylesheets}/pagination.css +0 -0
  83. data/app/{frontend/css → packs/stylesheets}/tailwindcss/base.css +0 -0
  84. data/app/{frontend/css → packs/stylesheets}/tailwindcss/components.css +0 -0
  85. data/app/{frontend/css → packs/stylesheets}/tailwindcss/utilities.css +0 -0
  86. data/app/{frontend/css → packs/stylesheets}/tooltips.css +0 -0
  87. data/app/{frontend/css → packs/stylesheets}/typography.css +0 -0
  88. data/app/{frontend → packs}/svgs/arrow-circle-right.svg +0 -0
  89. data/app/{frontend → packs}/svgs/arrow-left.svg +0 -0
  90. data/app/{frontend → packs}/svgs/avocado.svg +0 -0
  91. data/app/{frontend → packs}/svgs/badge-check-sm.svg +0 -0
  92. data/app/{frontend → packs}/svgs/check-circle.svg +0 -0
  93. data/app/{frontend → packs}/svgs/chevron-down.svg +0 -0
  94. data/app/{frontend → packs}/svgs/chevron-up.svg +0 -0
  95. data/app/{frontend → packs}/svgs/code.svg +0 -0
  96. data/app/{frontend → packs}/svgs/color-swatch.svg +0 -0
  97. data/app/{frontend → packs}/svgs/document-text.svg +0 -0
  98. data/app/{frontend → packs}/svgs/download.svg +0 -0
  99. data/app/{frontend → packs}/svgs/edit.svg +0 -0
  100. data/app/{frontend → packs}/svgs/exclamation-circle-sm.svg +0 -0
  101. data/app/{frontend → packs}/svgs/exclamation-sm.svg +0 -0
  102. data/app/{frontend → packs}/svgs/exclamation.svg +0 -0
  103. data/app/{frontend → packs}/svgs/eye.svg +0 -0
  104. data/app/{frontend → packs}/svgs/filter.svg +0 -0
  105. data/app/{frontend → packs}/svgs/fire.svg +0 -0
  106. data/app/{frontend → packs}/svgs/game-board.svg +0 -0
  107. data/app/{frontend → packs}/svgs/globe.svg +0 -0
  108. data/app/{frontend → packs}/svgs/information-circle-sm.svg +0 -0
  109. data/app/{frontend → packs}/svgs/information-circle.svg +0 -0
  110. data/app/{frontend → packs}/svgs/library.svg +0 -0
  111. data/app/{frontend → packs}/svgs/photograph.svg +0 -0
  112. data/app/{frontend → packs}/svgs/play.svg +0 -0
  113. data/app/{frontend → packs}/svgs/plus-circle.svg +0 -0
  114. data/app/{frontend → packs}/svgs/plus.svg +0 -0
  115. data/app/{frontend → packs}/svgs/question-mark-circle.svg +0 -0
  116. data/app/{frontend → packs}/svgs/save.svg +0 -0
  117. data/app/{frontend → packs}/svgs/selector.svg +0 -0
  118. data/app/{frontend → packs}/svgs/sort-ascending.svg +0 -0
  119. data/app/{frontend → packs}/svgs/sort-descending.svg +0 -0
  120. data/app/{frontend → packs}/svgs/switch-horizontal.svg +0 -0
  121. data/app/{frontend → packs}/svgs/thumbs-down.svg +0 -0
  122. data/app/{frontend → packs}/svgs/thumbs-up.svg +0 -0
  123. data/app/{frontend → packs}/svgs/times.svg +0 -0
  124. data/app/{frontend → packs}/svgs/trash-sm.svg +0 -0
  125. data/app/{frontend → packs}/svgs/trash.svg +0 -0
  126. data/app/{frontend → packs}/svgs/view-grid-add.svg +0 -0
  127. data/app/{frontend → packs}/svgs/view-grid.svg +0 -0
  128. data/app/{frontend → packs}/svgs/view-list.svg +0 -0
  129. data/app/{frontend → packs}/svgs/x-circle.svg +0 -0
  130. data/app/views/avo/actions/show.html.erb +3 -39
  131. data/app/views/avo/attachments/show.html.erb +8 -1
  132. data/app/views/avo/base/_boolean_filter.html.erb +1 -0
  133. data/app/views/avo/base/_filters.html.erb +1 -0
  134. data/app/views/avo/base/_select_filter.html.erb +1 -0
  135. data/app/views/avo/partials/_paginator.html.erb +24 -5
  136. data/app/views/avo/relations/new.html.erb +5 -1
  137. data/app/views/layouts/avo/application.html.erb +0 -5
  138. data/avo.gemspec +31 -30
  139. data/bin/helpers.rb +0 -0
  140. data/bin/rspec +1 -0
  141. data/bin/webpack +3 -1
  142. data/config/initializers/inline_svg.rb +1 -1
  143. data/config/initializers/pagy.rb +1 -1
  144. data/config/routes.rb +12 -12
  145. data/config/spring.rb +5 -5
  146. data/config/webpack/aliases.js +1 -1
  147. data/config/webpack/base.js +14 -0
  148. data/config/webpack/development.js +2 -2
  149. data/config/webpack/production.js +2 -2
  150. data/config/webpack/test.js +2 -2
  151. data/config/webpacker.yml +5 -44
  152. data/db/factories.rb +4 -5
  153. data/lib/avo.rb +6 -6
  154. data/lib/avo/action_model.rb +20 -0
  155. data/lib/avo/app.rb +18 -60
  156. data/lib/avo/base_action.rb +55 -52
  157. data/lib/avo/base_resource.rb +66 -95
  158. data/lib/avo/configuration.rb +16 -22
  159. data/lib/avo/engine.rb +30 -14
  160. data/lib/avo/fields/badge_field.rb +2 -2
  161. data/lib/avo/fields/base_field.rb +38 -29
  162. data/lib/avo/fields/belongs_to_field.rb +13 -12
  163. data/lib/avo/fields/boolean_field.rb +4 -4
  164. data/lib/avo/fields/boolean_group_field.rb +3 -3
  165. data/lib/avo/fields/code_field.rb +4 -4
  166. data/lib/avo/fields/country_field.rb +2 -2
  167. data/lib/avo/fields/currency_field.rb +3 -3
  168. data/lib/avo/fields/date_field.rb +3 -3
  169. data/lib/avo/fields/date_time_field.rb +2 -2
  170. data/lib/avo/fields/external_image_field.rb +2 -2
  171. data/lib/avo/fields/field_extensions/has_field_name.rb +2 -9
  172. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +34 -33
  173. data/lib/avo/fields/file_field.rb +1 -1
  174. data/lib/avo/fields/files_field.rb +2 -2
  175. data/lib/avo/fields/gravatar_field.rb +10 -10
  176. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -1
  177. data/lib/avo/fields/has_many_field.rb +1 -1
  178. data/lib/avo/fields/has_one_field.rb +2 -2
  179. data/lib/avo/fields/heading_field.rb +2 -2
  180. data/lib/avo/fields/hidden_field.rb +1 -1
  181. data/lib/avo/fields/id_field.rb +3 -3
  182. data/lib/avo/fields/key_value_field.rb +12 -12
  183. data/lib/avo/fields/markdown_field.rb +2 -2
  184. data/lib/avo/fields/number_field.rb +3 -3
  185. data/lib/avo/fields/password_field.rb +1 -1
  186. data/lib/avo/fields/select_field.rb +8 -12
  187. data/lib/avo/fields/status_field.rb +4 -4
  188. data/lib/avo/fields/text_field.rb +2 -2
  189. data/lib/avo/fields/textarea_field.rb +2 -2
  190. data/lib/avo/fields/trix_field.rb +1 -1
  191. data/lib/avo/fields_collector.rb +30 -0
  192. data/lib/avo/filters/base_filter.rb +6 -6
  193. data/lib/avo/filters/boolean_filter.rb +1 -1
  194. data/lib/avo/filters/select_filter.rb +1 -1
  195. data/lib/avo/grid_collector.rb +39 -0
  196. data/lib/avo/has_context.rb +7 -0
  197. data/lib/avo/licensing/h_q.rb +56 -55
  198. data/lib/avo/licensing/license.rb +5 -5
  199. data/lib/avo/licensing/license_manager.rb +4 -4
  200. data/lib/avo/licensing/null_license.rb +2 -2
  201. data/lib/avo/licensing/pro_license.rb +1 -1
  202. data/lib/avo/loaders/fields_loader.rb +4 -4
  203. data/lib/avo/services/authorization_service.rb +2 -2
  204. data/lib/avo/services/panel_service.rb +4 -4
  205. data/lib/avo/version.rb +1 -1
  206. data/lib/generators/avo/action_generator.rb +4 -4
  207. data/lib/generators/avo/controller_generator.rb +4 -4
  208. data/lib/generators/avo/filter_generator.rb +5 -5
  209. data/lib/generators/avo/install_generator.rb +8 -8
  210. data/lib/generators/avo/locales_generator.rb +5 -5
  211. data/lib/generators/avo/partials_generator.rb +4 -4
  212. data/lib/generators/avo/resource_generator.rb +5 -5
  213. data/lib/generators/avo/templates/action.tt +1 -5
  214. data/lib/generators/avo/templates/resource/resource.tt +3 -13
  215. data/lib/tasks/avo_tasks.rake +0 -60
  216. data/public/avo-packs/css/application-4e16d6a6.css +5975 -0
  217. data/public/avo-packs/css/application-4e16d6a6.css.br +0 -0
  218. data/public/avo-packs/css/application-4e16d6a6.css.gz +0 -0
  219. data/public/avo-packs/css/application-4e16d6a6.css.map +1 -0
  220. data/public/avo-packs/css/application-4e16d6a6.css.map.br +0 -0
  221. data/public/avo-packs/css/application-4e16d6a6.css.map.gz +0 -0
  222. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js +2 -0
  223. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.br +0 -0
  224. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.gz +0 -0
  225. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.map +1 -0
  226. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.map.br +0 -0
  227. data/public/avo-packs/js/219-9aa2b689f44613118203.chunk.js.map.gz +0 -0
  228. data/public/avo-packs/js/application-8eb130a4688f2c667703.js +26 -0
  229. data/public/avo-packs/js/{application-8849c6e2c8f75d55c666.js.LICENSE.txt → application-8eb130a4688f2c667703.js.LICENSE.txt} +17 -17
  230. data/public/avo-packs/js/application-8eb130a4688f2c667703.js.br +0 -0
  231. data/public/avo-packs/js/application-8eb130a4688f2c667703.js.gz +0 -0
  232. data/public/avo-packs/js/application-8eb130a4688f2c667703.js.map +1 -0
  233. data/public/avo-packs/js/application-8eb130a4688f2c667703.js.map.br +0 -0
  234. data/public/avo-packs/js/application-8eb130a4688f2c667703.js.map.gz +0 -0
  235. data/public/avo-packs/manifest.json +46 -23
  236. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg → images/13ae283c0d7cc04efe7e.svg} +0 -0
  237. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg.br → images/13ae283c0d7cc04efe7e.svg.br} +0 -0
  238. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg.gz → images/13ae283c0d7cc04efe7e.svg.gz} +0 -0
  239. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg → images/195026a50008c53526ef.svg} +0 -0
  240. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg.br → images/195026a50008c53526ef.svg.br} +0 -0
  241. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg.gz → images/195026a50008c53526ef.svg.gz} +0 -0
  242. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-cb632c9fe211ba2c2bf1564c9a9295cc.woff → images/1f30e08faa7c60d1f7ac.woff} +0 -0
  243. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf → images/1fd17dabf6b7d2b15348.ttf} +0 -0
  244. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf.br → images/1fd17dabf6b7d2b15348.ttf.br} +0 -0
  245. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf.gz → images/1fd17dabf6b7d2b15348.ttf.gz} +0 -0
  246. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-bcf84d6cb8a0ac214c8c14ba9af834f3.woff2 → images/39a18f443d434999b89b.woff2} +0 -0
  247. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-412073df419ad5f6f8f2ea76eb4aced9.woff2 → images/4ad349571e28bb59c5a5.woff2} +0 -0
  248. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-2fae1e2418251b68fe5d0505ab93dd5c.eot → images/57a5470848663767abbf.eot} +0 -0
  249. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf → images/b2e4cf0fab6c8ca66b7f.ttf} +0 -0
  250. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf.br → images/b2e4cf0fab6c8ca66b7f.ttf.br} +0 -0
  251. data/public/avo-packs/media/{fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf.gz → images/b2e4cf0fab6c8ca66b7f.ttf.gz} +0 -0
  252. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-df7e79af617f98cd3b95d320e8b2a1af.eot → images/b78d61ab7e046de8c156.eot} +0 -0
  253. data/public/avo-packs/media/{fonts/nunito-v16-latin-700-7c472b19cb573f537bad8ef62ca917ac.woff → images/c9ab29becb76ddab01d0.woff} +0 -0
  254. data/public/avo-packs/media/images/{logo-edf8d8d0d263e0c1f73bb32a222d9991.png → f1b4befac91a3336db9a.png} +0 -0
  255. metadata +144 -127
  256. data/app/frontend/css/components/code.css +0 -27
  257. data/app/views/layouts/avo/application_vue.html.erb +0 -61
  258. data/config/webpack/environment.js +0 -18
  259. data/db/migrate/20210305082639_add_url_to_teams.rb +0 -5
  260. data/public/avo-packs/css/application-c75ac28c.css +0 -6
  261. data/public/avo-packs/css/application-c75ac28c.css.br +0 -0
  262. data/public/avo-packs/css/application-c75ac28c.css.gz +0 -0
  263. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js +0 -2
  264. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.br +0 -0
  265. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.gz +0 -0
  266. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map +0 -1
  267. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map.br +0 -0
  268. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map.gz +0 -0
  269. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js +0 -26
  270. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.br +0 -0
  271. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.gz +0 -0
  272. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.map +0 -1
  273. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.map.br +0 -0
  274. data/public/avo-packs/js/application-8849c6e2c8f75d55c666.js.map.gz +0 -0
  275. data/public/avo-packs/manifest.json.br +0 -0
  276. data/public/avo-packs/manifest.json.gz +0 -0
@@ -1,4 +1,4 @@
1
- <td class="px-4 py-2 leading-tight whitespace-nowrap h-12 text-blue-gray-800 <%= @classes %>" data-field-id="<%= @field.id %>">
1
+ <td class="px-4 py-2 leading-tight whitespace-nowrap h-12 text-blue-gray-800 <%= @classes %>" data-field-id="<%= @field.id %>" data-field-type="<%= @field.type %>">
2
2
  <% if @field.value.blank? && @dash_if_blank %>
3
3
 
4
4
  <% else %>
@@ -4,7 +4,7 @@ class Avo::Index::FieldWrapperComponent < ViewComponent::Base
4
4
  def initialize(field: nil, dash_if_blank: true, **args)
5
5
  @field = field
6
6
  @dash_if_blank = dash_if_blank
7
- @classes = args[:class].present? ? args[:class] : ''
7
+ @classes = args[:class].present? ? args[:class] : ""
8
8
  @args = args
9
9
  end
10
10
  end
@@ -1,7 +1,3 @@
1
1
  <%= index_field_wrapper field: @field do %>
2
- <% if @field.value.present? %>
3
- <%= link_to @field.label, helpers.resource_path(@field.value) %>
4
- <% else %>
5
-
6
- <% end %>
2
+ <%= link_to @field.label, helpers.resource_path(@field.value) %>
7
3
  <% end %>
@@ -1,3 +1,3 @@
1
- <%= index_field_wrapper field: @field do %>
1
+ <%= index_field_wrapper field: @field, dash_if_blank: false do %>
2
2
  <%= render Avo::Common::BooleanGroupComponent.new options: @field.options, value: @field.value %>
3
3
  <% end %>
@@ -5,7 +5,8 @@
5
5
  size: @field.size,
6
6
  rounded: @field.rounded,
7
7
  link_to_resource: @field.link_to_resource,
8
- link: helpers.resource_path(@resource.model)
8
+ link: helpers.resource_path(@resource.model),
9
+ title: t('avo.view_item', { item: @resource.name}).humanize
9
10
  )
10
11
  %>
11
12
  <% end %>
@@ -1,7 +1,3 @@
1
1
  <%= index_field_wrapper field: @field do %>
2
- <% if @field.value.present? %>
3
- <%= link_to @field.label, helpers.resource_path(@field.value) %>
4
- <% else %>
5
-
6
- <% end %>
2
+ <%= link_to @field.label, helpers.resource_path(@field.value) %>
7
3
  <% end %>
@@ -6,5 +6,5 @@
6
6
  path = helpers.resource_path(@resource.model)
7
7
  end
8
8
  %>
9
- <% link_to_if (@field.link_to_resource or Avo.configuration.id_links_to_resource), @field.value, path %>
9
+ <% link_to_if (@field.link_to_resource or Avo.configuration.id_links_to_resource), @field.value, path, title: t('avo.view_item', { item: @resource.name}).humanize %>
10
10
  <% end %>
@@ -5,8 +5,8 @@
5
5
  <%== item_selector_input floating: true, size: :lg %>
6
6
 
7
7
  <% if cover.respond_to? :to_image %>
8
- <%= link_to_if cover.link_to_resource, image_tag(cover.to_image, class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
9
- <% elsif cover.type == 'file_field' %>
8
+ <%= link_to_if cover.link_to_resource, image_tag(cover.to_image, class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
9
+ <% elsif cover.type == 'file' %>
10
10
  <% if cover.value.attached? && cover.value.representable? %>
11
11
  <%= link_to_if cover.link_to_resource, image_tag(cover.variant(resize_to_limit: [480, 480]), class: 'absolute h-full w-full object-cover'), helpers.resource_path(@resource.model), class: 'absolute h-full w-full object-cover', title: title.value %>
12
12
  <% else %>
@@ -11,15 +11,16 @@ class Avo::Index::GridItemComponent < ViewComponent::Base
11
11
  end
12
12
 
13
13
  private
14
- def cover
15
- @grid_fields[:cover].first
16
- end
17
14
 
18
- def title
19
- @grid_fields[:title].first
20
- end
15
+ def cover
16
+ @grid_fields.cover_field
17
+ end
18
+
19
+ def title
20
+ @grid_fields.title_field
21
+ end
21
22
 
22
- def body
23
- @grid_fields[:body].first
24
- end
23
+ def body
24
+ @grid_fields.body_field
25
+ end
25
26
  end
@@ -23,7 +23,9 @@
23
23
  <% end %>
24
24
 
25
25
  <% if can_detach? %>
26
- <%= form_with url: helpers.resource_detach_path(params[:resource_name], params[:id], params[:related_name], @resource.model.id), method: :delete, html: {'data-turbo-frame': params[:turbo_frame]} do |form| %>
26
+ <%= form_with url: helpers.resource_detach_path(params[:resource_name], params[:id], params[:related_name], @resource.model.id), method: :delete, html: {
27
+ 'data-turbo-frame': params[:turbo_frame]
28
+ } do |form| %>
27
29
  <%= form.button helpers.svg('trash-sm', class: 'text-gray-400 h-6 hover:text-gray-600'),
28
30
  title: t('avo.detach_item', { item: @resource.model.model_name.name.downcase }).capitalize,
29
31
  type: :submit,
@@ -34,12 +36,16 @@
34
36
  'tippy': 'tooltip',
35
37
  }
36
38
  %>
37
- <%= hidden_field_tag :referrer, request.fullpath, id: "referrer_detach_#{@resource.model.id}" if params[:via_resource_class] %>
39
+ <%= hidden_field_tag :turbo_frame, params[:turbo_frame], id: "turbo_frame_destroy_#{@resource.model.id}" if params[:turbo_frame] %>
40
+ <%= hidden_field_tag :referrer, request.fullpath, id: "referrer_destroy_#{@resource.model.id}" if params[:turbo_frame] %>
41
+ <%#= hidden_field_tag :referrer, request.fullpath, id: "referrer_detach_#{@resource.model.id}" if params[:via_resource_class] %>
38
42
  <% end %>
39
43
  <% end %>
40
44
 
41
45
  <% if can_delete? %>
42
- <%= form_with url: helpers.resource_path(@resource.model), method: :delete, html: {'data-turbo-frame': params[:turbo_frame]} do |form| %>
46
+ <%= form_with url: helpers.resource_path(@resource.model), method: :delete, html: {
47
+ 'data-turbo-frame': params[:turbo_frame]
48
+ } do |form| %>
43
49
  <%= form.button helpers.svg('trash', class: 'text-gray-400 h-6 hover:text-gray-600'),
44
50
  title: t('avo.delete_item', { item: @resource.model.model_name.name.downcase }).capitalize,
45
51
  type: :submit,
@@ -50,7 +56,9 @@
50
56
  'tippy': 'tooltip',
51
57
  }
52
58
  %>
53
- <%= form.hidden_field :referrer, value: request.fullpath, id: "referrer_destroy_#{@resource.model.id}" if params[:via_resource_class] %>
59
+ <%= form.hidden_field :view_type, value: params[:view_type], id: "turbo_view_type_#{@resource.model.id}" if params[:view_type] %>
60
+ <%= form.hidden_field :turbo_frame, value: params[:turbo_frame], id: "turbo_frame_destroy_#{@resource.model.id}" if params[:turbo_frame] %>
61
+ <%= form.hidden_field :referrer, value: request.fullpath, id: "referrer_destroy_#{@resource.model.id}" if params[:turbo_frame] %>
54
62
  <% end %>
55
63
  <% end %>
56
64
  </div>
@@ -9,8 +9,8 @@ class Avo::Index::ResourceControlsComponent < Avo::ResourceComponent
9
9
 
10
10
  def can_detach?
11
11
  @reflection.present? &&
12
- @resource.model.present? &&
13
- (@reflection.is_a?(::ActiveRecord::Reflection::HasManyReflection) || @reflection.is_a?(::ActiveRecord::Reflection::ThroughReflection))
12
+ @resource.model.present? &&
13
+ (@reflection.is_a?(::ActiveRecord::Reflection::HasManyReflection) || @reflection.is_a?(::ActiveRecord::Reflection::ThroughReflection))
14
14
  end
15
15
 
16
16
  def can_edit?
@@ -10,11 +10,12 @@ class Avo::PanelComponent < ViewComponent::Base
10
10
  end
11
11
 
12
12
  private
13
- def data_attributes
14
- return if @data.blank?
15
13
 
16
- @data.map do |key, value|
17
- " data-#{key}=\"#{value}\""
18
- end.join
19
- end
14
+ def data_attributes
15
+ return if @data.blank?
16
+
17
+ @data.map do |key, value|
18
+ " data-#{key}=\"#{value}\""
19
+ end.join
20
+ end
20
21
  end
@@ -8,7 +8,8 @@ class Avo::ResourceComponent < ViewComponent::Base
8
8
  end
9
9
 
10
10
  private
11
- def simple_relation?
12
- @reflection.is_a? ::ActiveRecord::Reflection::HasManyReflection
13
- end
11
+
12
+ def simple_relation?
13
+ @reflection.is_a? ::ActiveRecord::Reflection::HasManyReflection
14
+ end
14
15
  end
@@ -1,4 +1,4 @@
1
- <div class="flex items-start leading-tight <%= @classes %> min-h-16" data-field-id="<%= @field.id %>">
1
+ <div class="flex items-start leading-tight <%= @classes %> min-h-16" data-field-id="<%= @field.id %>" data-field-type="<%= @field.type %>">
2
2
  <div class="h-16 flex self-start items-center text-blue-gray-800">
3
3
  <div class="w-48 md:w-64 px-8" data-slot="label">
4
4
  <%= @field.name %> <% if @field.required %> <span class="text-red-600">*</span> <% end %>
@@ -4,12 +4,12 @@ class Avo::Show::FieldWrapperComponent < ViewComponent::Base
4
4
  def initialize(field: nil, dash_if_blank: true, full_width: false, **args)
5
5
  @field = field
6
6
  @dash_if_blank = dash_if_blank
7
- @classes = args[:class].present? ? args[:class] : ''
7
+ @classes = args[:class].present? ? args[:class] : ""
8
8
  @args = args
9
9
  @full_width = full_width
10
10
 
11
- if @index != 0 or @displayed_in_modal
12
- @classes += ' border-t'
11
+ if (@index != 0) || @displayed_in_modal
12
+ @classes += " border-t"
13
13
  end
14
14
  end
15
15
  end
@@ -1,3 +1,3 @@
1
- <%= show_field_wrapper field: @field, index: @index do %>
1
+ <%= show_field_wrapper field: @field, index: @index, dash_if_blank: false do %>
2
2
  <%= render Avo::Common::BooleanGroupComponent.new options: @field.options, value: @field.value %>
3
3
  <% end %>
@@ -1,4 +1,4 @@
1
- <%= show_field_wrapper field: @field, field: @field do %>
1
+ <%= show_field_wrapper field: @field do %>
2
2
  <% if @field.value.present? %>
3
3
  <%= image_tag @field.value, style: 'max-width: 340px;' %>
4
4
  <% end %>
@@ -17,7 +17,8 @@ class Avo::Views::ResourceEditComponent < ViewComponent::Base
17
17
  end
18
18
 
19
19
  private
20
- def via_resource?
21
- params[:via_resource_class].present? and params[:via_resource_id].present?
22
- end
20
+
21
+ def via_resource?
22
+ params[:via_resource_class].present? && params[:via_resource_id].present?
23
+ end
23
24
  end
@@ -13,7 +13,7 @@ class Avo::Views::ResourceIndexComponent < Avo::ResourceComponent
13
13
  filters: [],
14
14
  actions: [],
15
15
  reflection: nil,
16
- turbo_frame: '',
16
+ turbo_frame: "",
17
17
  parent_model: nil
18
18
  )
19
19
  @resource = resource
@@ -63,7 +63,7 @@ class Avo::Views::ResourceIndexComponent < Avo::ResourceComponent
63
63
  if @reflection.present?
64
64
  path_args = {
65
65
  via_relation_class: @parent_model.model_name,
66
- via_resource_id: @parent_model.id,
66
+ via_resource_id: @parent_model.id
67
67
  }
68
68
 
69
69
  if @reflection.inverse_of.present?
@@ -77,7 +77,7 @@ class Avo::Views::ResourceIndexComponent < Avo::ResourceComponent
77
77
  end
78
78
 
79
79
  def attach_path
80
- "#{Avo.configuration.root_path}#{request.env['PATH_INFO']}/new"
80
+ "#{Avo.configuration.root_path}#{request.env["PATH_INFO"]}/new"
81
81
  end
82
82
 
83
83
  def detach_path
@@ -85,9 +85,10 @@ class Avo::Views::ResourceIndexComponent < Avo::ResourceComponent
85
85
  end
86
86
 
87
87
  private
88
- def simple_relation?
89
- return @reflection.is_a? ::ActiveRecord::Reflection::HasManyReflection if @reflection.present?
90
88
 
91
- true
92
- end
89
+ def simple_relation?
90
+ return @reflection.is_a? ::ActiveRecord::Reflection::HasManyReflection if @reflection.present?
91
+
92
+ true
93
+ end
93
94
  end
@@ -21,7 +21,8 @@ class Avo::Views::ResourceNewComponent < ViewComponent::Base
21
21
  end
22
22
 
23
23
  private
24
- def via_resource?
25
- params[:via_relation_class].present? and params[:via_resource_id].present?
26
- end
24
+
25
+ def via_resource?
26
+ params[:via_relation_class].present? && params[:via_resource_id].present?
27
+ end
27
28
  end
@@ -18,8 +18,20 @@
18
18
  <% end %>
19
19
 
20
20
  <% if @resource.authorization.authorize_action(:destroy, raise_exception: false) %>
21
- <%= a_link destroy_path, color: 'red', variant: 'outlined', method: :delete, data: {confirm: 'Are you sure?'} do %>
22
- <%= svg 'trash' %> <%= t('avo.delete').capitalize %>
21
+ <%= form_with url: helpers.resource_path(@resource.model), method: :delete, html: { 'data-turbo-frame': params[:turbo_frame] } do |form| %>
22
+ <%= a_button title: t('avo.delete_item', { item: @resource.model.model_name.name.downcase }).capitalize,
23
+ color: 'red',
24
+ variant: 'outlined',
25
+ type: :submit,
26
+ data: {
27
+ confirm: t('avo.are_you_sure', { item: @resource.model.model_name.name.downcase }),
28
+ control: :destroy,
29
+ 'resource-id': @resource.model.id,
30
+ 'tippy': 'tooltip',
31
+ } do
32
+ %>
33
+ <%= svg 'trash' %> <%= t('avo.delete').capitalize %>
34
+ <% end %>
23
35
  <% end %>
24
36
  <% end %>
25
37
 
@@ -38,29 +38,29 @@ class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
38
38
  end
39
39
 
40
40
  private
41
- def via_resource?
42
- params[:via_resource_class].present? and params[:via_resource_id].present?
43
- end
44
41
 
45
- def split_panel_fields
46
- @fields_by_panel = {}
47
- @has_one_panels = []
48
- @has_many_panels = []
49
- @has_as_belongs_to_many_panels = []
42
+ def via_resource?
43
+ params[:via_resource_class].present? && params[:via_resource_id].present?
44
+ end
50
45
 
51
- @resource.get_fields.each do |field|
52
- case field.class.to_s
53
- when 'Avo::Fields::HasOneField'
54
- @has_one_panels << field
55
- when 'Avo::Fields::HasManyField'
56
- @has_many_panels << field
57
- when 'Avo::Fields::HasAndBelongsToManyField'
58
- @has_as_belongs_to_many_panels << field
59
- else
60
- @fields_by_panel[field.panel_name] ||= []
61
- @fields_by_panel[field.panel_name] << field
62
- end
63
- end
46
+ def split_panel_fields
47
+ @fields_by_panel = {}
48
+ @has_one_panels = []
49
+ @has_many_panels = []
50
+ @has_as_belongs_to_many_panels = []
64
51
 
52
+ @resource.get_fields.each do |field|
53
+ case field.class.to_s
54
+ when "Avo::Fields::HasOneField"
55
+ @has_one_panels << field
56
+ when "Avo::Fields::HasManyField"
57
+ @has_many_panels << field
58
+ when "Avo::Fields::HasAndBelongsToManyField"
59
+ @has_as_belongs_to_many_panels << field
60
+ else
61
+ @fields_by_panel[field.panel_name] ||= []
62
+ @fields_by_panel[field.panel_name] << field
63
+ end
65
64
  end
65
+ end
66
66
  end
@@ -1,4 +1,4 @@
1
- require_dependency 'avo/application_controller'
1
+ require_dependency "avo/application_controller"
2
2
 
3
3
  module Avo
4
4
  class ActionsController < ApplicationController
@@ -6,61 +6,63 @@ module Avo
6
6
  before_action :set_resource
7
7
  before_action :set_action, only: [:show, :handle]
8
8
 
9
- def show; end
9
+ def show
10
+ @model = ActionModel.new @action.get_attributes_for_action
11
+ end
10
12
 
11
13
  def handle
12
- resource_ids = action_params[:fields][:resource_ids].split(',').map(&:to_i)
14
+ resource_ids = action_params[:fields][:resource_ids].split(",").map(&:to_i)
13
15
  models = @resource.model_class.find resource_ids
14
16
 
15
17
  fields = action_params[:fields].select do |key, value|
16
- key != 'resource_ids'
18
+ key != "resource_ids"
17
19
  end
18
20
 
19
- performed_action = @action.handle_action(request, models, fields)
21
+ performed_action = @action.handle_action(models: models, fields: fields)
20
22
 
21
23
  respond performed_action.response
22
24
  end
23
25
 
24
26
  private
25
- def action_params
26
- params.permit(:resource_name, :action_id, fields: {})
27
- end
28
27
 
29
- def set_action
30
- action_class = params[:action_id].gsub('avo_actions_', '').classify.safe_constantize
28
+ def action_params
29
+ params.permit(:resource_name, :action_id, fields: {})
30
+ end
31
31
 
32
- if params[:id].present?
33
- model = @resource.model_class.find params[:id]
34
- end
32
+ def set_action
33
+ action_class = params[:action_id].gsub("avo_actions_", "").classify.safe_constantize
35
34
 
36
- @action = action_class.new
37
- @action.hydrate(model: model, resource: resource, user: _current_user)
35
+ if params[:id].present?
36
+ model = @resource.model_class.find params[:id]
38
37
  end
39
38
 
40
- def respond(response)
41
- response[:type] ||= :reload
42
- response[:message_type] ||= :notice
43
- response[:message] ||= I18n.t('avo.action_ran_successfully')
39
+ @action = action_class.new(model: model, resource: resource, user: _current_user)
40
+ end
44
41
 
45
- if response[:type] == :download
46
- return send_data response[:path], filename: response[:filename]
47
- end
42
+ def respond(response)
43
+ response[:type] ||= :reload
44
+ response[:message_type] ||= :notice
45
+ response[:message] ||= I18n.t("avo.action_ran_successfully")
48
46
 
49
- respond_to do |format|
50
- format.html do
51
- if response[:type] == :redirect
52
- path = response[:path]
47
+ if response[:type] == :download
48
+ return send_data response[:path], filename: response[:filename]
49
+ end
53
50
 
54
- if path.respond_to? :call
55
- path = instance_eval &path
56
- end
51
+ respond_to do |format|
52
+ format.html do
53
+ if response[:type] == :redirect
54
+ path = response[:path]
57
55
 
58
- redirect_to path, "#{response[:message_type]}": response[:message]
59
- elsif response[:type] == :reload
60
- redirect_back fallback_location: resources_path(@resource.model_class), "#{response[:message_type]}": response[:message]
56
+ if path.respond_to? :call
57
+ path = instance_eval(&path)
61
58
  end
59
+
60
+ redirect_to path, "#{response[:message_type]}": response[:message]
61
+ elsif response[:type] == :reload
62
+ redirect_back fallback_location: resources_path(@resource.model_class), "#{response[:message_type]}": response[:message]
62
63
  end
63
64
  end
64
65
  end
66
+ end
65
67
  end
66
68
  end