avo 2.46.0 → 3.0.0.pre1

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 (417) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -22
  3. data/Gemfile.lock +181 -160
  4. data/README.md +1 -1
  5. data/{public/avo-assets → app/assets/builds}/avo.base.css +479 -698
  6. data/app/assets/builds/avo.base.js +93804 -0
  7. data/app/assets/builds/avo.base.js.map +7 -0
  8. data/app/assets/stylesheets/avo.base.css +2 -2
  9. data/app/assets/svgs/failed_to_load.svg +1 -0
  10. data/app/assets/svgs/font.svg +1 -0
  11. data/app/assets/svgs/grid-empty-state.svg +1 -0
  12. data/app/assets/svgs/table-empty-state.svg +1 -0
  13. data/app/assets/svgs/triangle-up.svg +1 -0
  14. data/app/components/avo/actions_component.html.erb +18 -4
  15. data/app/components/avo/actions_component.rb +12 -18
  16. data/app/components/avo/alert_component.html.erb +1 -1
  17. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  18. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  19. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  20. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  21. data/app/components/avo/base_component.rb +14 -11
  22. data/app/components/avo/button_component.rb +20 -3
  23. data/app/components/avo/empty_state_component.rb +1 -1
  24. data/app/components/avo/field_wrapper_component.html.erb +4 -4
  25. data/app/components/avo/field_wrapper_component.rb +12 -23
  26. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  27. data/app/components/avo/fields/belongs_to_field/edit_component.rb +5 -20
  28. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  29. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  30. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -2
  31. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  32. data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
  33. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  34. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  35. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  36. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  37. data/app/components/avo/fields/common/files_list_viewer_component.rb +8 -0
  38. data/app/components/avo/fields/common/heading_component.html.erb +1 -1
  39. data/app/components/avo/fields/common/single_file_viewer_component.html.erb +56 -0
  40. data/app/components/avo/fields/common/single_file_viewer_component.rb +55 -0
  41. data/app/components/avo/fields/country_field/edit_component.html.erb +1 -3
  42. data/app/components/avo/fields/edit_component.rb +1 -1
  43. data/app/components/avo/fields/file_field/edit_component.html.erb +2 -4
  44. data/app/components/avo/fields/file_field/edit_component.rb +0 -1
  45. data/app/components/avo/fields/file_field/index_component.rb +2 -2
  46. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  47. data/app/components/avo/fields/files_field/edit_component.html.erb +2 -4
  48. data/app/components/avo/fields/files_field/edit_component.rb +0 -1
  49. data/app/components/avo/fields/files_field/show_component.html.erb +1 -1
  50. data/app/components/avo/fields/has_many_field/show_component.html.erb +1 -1
  51. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  52. data/app/components/avo/fields/has_one_field/show_component.html.erb +2 -2
  53. data/app/components/avo/fields/has_one_field/show_component.rb +3 -7
  54. data/app/components/avo/fields/index_component.rb +5 -6
  55. data/app/components/avo/fields/markdown_field/edit_component.html.erb +3 -4
  56. data/app/components/avo/fields/markdown_field/show_component.html.erb +3 -3
  57. data/app/components/avo/fields/number_field/edit_component.html.erb +1 -3
  58. data/app/components/avo/fields/password_field/edit_component.html.erb +1 -3
  59. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  60. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  61. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +0 -1
  62. data/app/components/avo/fields/select_field/edit_component.html.erb +2 -3
  63. data/app/components/avo/fields/show_component.rb +4 -1
  64. data/app/components/avo/fields/status_field/edit_component.html.erb +1 -1
  65. data/app/components/avo/fields/text_field/edit_component.html.erb +2 -3
  66. data/app/components/avo/fields/textarea_field/edit_component.html.erb +0 -1
  67. data/app/components/avo/fields/trix_field/edit_component.html.erb +1 -2
  68. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  69. data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
  70. data/app/components/avo/filters_component.html.erb +9 -3
  71. data/app/components/avo/filters_component.rb +4 -4
  72. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  73. data/app/components/avo/index/grid_item_component.html.erb +5 -2
  74. data/app/components/avo/index/grid_item_component.rb +7 -6
  75. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  76. data/app/components/avo/index/resource_controls_component.rb +128 -18
  77. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  78. data/app/components/avo/index/resource_grid_component.rb +5 -2
  79. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  80. data/app/components/avo/index/resource_table_component.rb +14 -20
  81. data/app/components/avo/index/table_row_component.html.erb +8 -4
  82. data/app/components/avo/index/table_row_component.rb +3 -2
  83. data/app/components/avo/item_switcher_component.html.erb +5 -10
  84. data/app/components/avo/item_switcher_component.rb +2 -3
  85. data/app/components/avo/modal_component.html.erb +7 -12
  86. data/app/components/avo/modal_component.rb +0 -21
  87. data/app/components/avo/paginator_component.html.erb +40 -29
  88. data/app/components/avo/paginator_component.rb +5 -23
  89. data/app/components/avo/panel_component.html.erb +8 -11
  90. data/app/components/avo/panel_component.rb +0 -1
  91. data/app/components/avo/profile_item_component.html.erb +2 -17
  92. data/app/components/avo/profile_item_component.rb +1 -13
  93. data/app/components/avo/referrer_params_component.html.erb +1 -4
  94. data/app/components/avo/resource_component.rb +142 -30
  95. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  96. data/app/components/avo/sidebar/link_component.html.erb +0 -2
  97. data/app/components/avo/sidebar/link_component.rb +3 -5
  98. data/app/components/avo/sidebar_component.html.erb +9 -2
  99. data/app/components/avo/sidebar_component.rb +5 -3
  100. data/app/components/avo/sidebar_profile_component.html.erb +27 -20
  101. data/app/components/avo/tab_group_component.html.erb +13 -7
  102. data/app/components/avo/tab_group_component.rb +1 -6
  103. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  104. data/app/components/avo/tab_switcher_component.rb +4 -39
  105. data/app/components/avo/views/resource_edit_component.html.erb +16 -52
  106. data/app/components/avo/views/resource_edit_component.rb +7 -18
  107. data/app/components/avo/views/resource_index_component.html.erb +38 -53
  108. data/app/components/avo/views/resource_index_component.rb +60 -16
  109. data/app/components/avo/views/resource_show_component.html.erb +8 -151
  110. data/app/components/avo/views/resource_show_component.rb +6 -11
  111. data/app/controllers/avo/actions_controller.rb +19 -16
  112. data/app/controllers/avo/application_controller.rb +40 -109
  113. data/app/controllers/avo/associations_controller.rb +34 -41
  114. data/app/controllers/avo/attachments_controller.rb +10 -25
  115. data/app/controllers/avo/base_controller.rb +91 -103
  116. data/app/controllers/avo/debug_controller.rb +17 -5
  117. data/app/controllers/avo/search_controller.rb +29 -54
  118. data/app/controllers/avo/team_users_controller.rb +4 -0
  119. data/app/controllers/concerns/avo/initializes_avo.rb +26 -0
  120. data/app/helpers/avo/application_helper.rb +20 -21
  121. data/app/helpers/avo/resources_helper.rb +1 -1
  122. data/app/helpers/avo/url_helpers.rb +27 -11
  123. data/app/javascript/avo.base.js +1 -0
  124. data/app/javascript/js/application.js +0 -5
  125. data/app/javascript/js/controllers/action_controller.js +5 -3
  126. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  127. data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
  128. data/app/javascript/js/controllers/filter_controller.js +1 -1
  129. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  130. data/app/javascript/js/controllers/preview_controller.js +24 -0
  131. data/app/javascript/js/controllers/search_controller.js +1 -3
  132. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  133. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  134. data/app/javascript/js/controllers.js +12 -8
  135. data/app/javascript/js/custom-stream-actions.js +15 -0
  136. data/app/views/avo/{attachments/destroy.turbo_stream.erb → actions/keep_modal_open.turbo_stream.erb} +0 -2
  137. data/app/views/avo/actions/show.html.erb +12 -11
  138. data/app/views/avo/associations/new.html.erb +4 -4
  139. data/app/views/avo/base/index.html.erb +3 -2
  140. data/app/views/avo/base/new.html.erb +2 -1
  141. data/app/views/avo/base/preview.html.erb +19 -0
  142. data/app/views/avo/base/show.html.erb +1 -1
  143. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  144. data/app/views/avo/debug/report.html.erb +32 -17
  145. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -15
  146. data/app/views/avo/home/index.html.erb +1 -1
  147. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  148. data/app/views/avo/partials/_javascript.html.erb +5 -0
  149. data/app/views/avo/partials/_logo.html.erb +1 -1
  150. data/app/views/avo/partials/_navbar.html.erb +3 -5
  151. data/app/views/avo/partials/_table_header.html.erb +5 -3
  152. data/app/views/avo/partials/_view_toggle_button.html.erb +0 -9
  153. data/app/views/avo/private/design.html.erb +2 -2
  154. data/app/views/layouts/avo/application.html.erb +3 -0
  155. data/avo.gemspec +6 -7
  156. data/bin/dev +1 -1
  157. data/bin/prod +0 -0
  158. data/config/i18n-tasks.yml +1 -1
  159. data/config/initializers/pagy.rb +10 -14
  160. data/config/master.key +1 -0
  161. data/config/routes.rb +8 -12
  162. data/db/factories.rb +7 -18
  163. data/lib/avo/action_model.rb +20 -0
  164. data/lib/avo/app.rb +90 -162
  165. data/lib/avo/asset_manager.rb +30 -0
  166. data/lib/avo/base_action.rb +38 -36
  167. data/lib/avo/base_resource.rb +108 -96
  168. data/lib/avo/base_resource_tool.rb +9 -16
  169. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +3 -3
  170. data/lib/avo/concerns/filters_session_handler.rb +1 -0
  171. data/lib/avo/concerns/has_controls.rb +37 -0
  172. data/lib/avo/concerns/has_item_type.rb +38 -0
  173. data/lib/avo/concerns/{has_fields.rb → has_items.rb} +110 -97
  174. data/lib/avo/concerns/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
  175. data/lib/avo/concerns/is_resource_item.rb +24 -36
  176. data/lib/avo/concerns/is_visible.rb +15 -0
  177. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  178. data/lib/avo/configuration/branding.rb +0 -12
  179. data/lib/avo/configuration.rb +8 -45
  180. data/lib/avo/current.rb +5 -0
  181. data/lib/avo/dsl/field_parser.rb +1 -1
  182. data/lib/avo/dynamic_router.rb +6 -2
  183. data/lib/avo/engine.rb +37 -30
  184. data/lib/avo/error_manager.rb +25 -0
  185. data/lib/avo/execution_context.rb +9 -15
  186. data/lib/avo/fields/badge_field.rb +1 -1
  187. data/lib/avo/fields/base_field.rb +72 -124
  188. data/lib/avo/fields/belongs_to_field.rb +14 -25
  189. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  190. data/lib/avo/fields/concerns/has_default.rb +1 -5
  191. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  192. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  193. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  194. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  195. data/lib/avo/fields/concerns/is_required.rb +5 -7
  196. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  197. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  198. data/lib/avo/fields/country_field.rb +4 -0
  199. data/lib/avo/fields/date_field.rb +3 -16
  200. data/lib/avo/fields/date_time_field.rb +1 -5
  201. data/lib/avo/fields/field_manager.rb +45 -0
  202. data/lib/avo/fields/file_field.rb +0 -2
  203. data/lib/avo/fields/files_field.rb +0 -6
  204. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  205. data/lib/avo/fields/has_base_field.rb +11 -14
  206. data/lib/avo/fields/has_many_field.rb +5 -2
  207. data/lib/avo/fields/has_one_field.rb +5 -10
  208. data/lib/avo/fields/heading_field.rb +4 -1
  209. data/lib/avo/fields/hidden_field.rb +1 -1
  210. data/lib/avo/fields/id_field.rb +2 -3
  211. data/lib/avo/fields/password_field.rb +1 -1
  212. data/lib/avo/fields/preview_field.rb +14 -0
  213. data/lib/avo/fields/select_field.rb +12 -8
  214. data/lib/avo/fields/status_field.rb +4 -0
  215. data/lib/avo/filters/base_filter.rb +3 -8
  216. data/lib/avo/grid_collector.rb +7 -9
  217. data/lib/avo/html/builder.rb +5 -8
  218. data/lib/avo/item_grapher.rb +78 -0
  219. data/lib/avo/licensing/h_q.rb +4 -68
  220. data/lib/avo/licensing/license.rb +2 -2
  221. data/lib/avo/licensing/license_manager.rb +1 -1
  222. data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
  223. data/lib/avo/licensing/pro_license.rb +1 -7
  224. data/lib/avo/plugin.rb +6 -0
  225. data/lib/avo/plugin_manager.rb +58 -0
  226. data/lib/avo/prefixed_test_helpers.rb +20 -0
  227. data/lib/avo/reloader.rb +3 -0
  228. data/lib/avo/resources/controls/actions_list.rb +6 -12
  229. data/lib/avo/resources/controls/attach_button.rb +15 -0
  230. data/lib/avo/resources/controls/back_button.rb +1 -1
  231. data/lib/avo/resources/controls/base_control.rb +15 -49
  232. data/lib/avo/resources/controls/create_button.rb +15 -0
  233. data/lib/avo/resources/controls/delete_button.rb +5 -1
  234. data/lib/avo/resources/controls/detach_button.rb +4 -1
  235. data/lib/avo/resources/controls/edit_button.rb +4 -1
  236. data/lib/avo/resources/controls/order_controls.rb +8 -0
  237. data/lib/avo/resources/controls/save_button.rb +13 -0
  238. data/lib/avo/resources/controls/show_button.rb +15 -0
  239. data/lib/avo/resources/items/holder.rb +76 -0
  240. data/lib/avo/resources/items/item_group.rb +48 -0
  241. data/lib/avo/resources/items/main_panel.rb +2 -0
  242. data/lib/avo/resources/items/panel.rb +2 -0
  243. data/lib/avo/resources/items/sidebar.rb +47 -0
  244. data/lib/avo/resources/items/tab.rb +60 -0
  245. data/lib/avo/resources/items/tab_group.rb +68 -0
  246. data/lib/avo/resources/resource_manager.rb +181 -0
  247. data/lib/avo/services/authorization_service.rb +11 -110
  248. data/lib/avo/services/debug_service.rb +92 -0
  249. data/lib/avo/services/telemetry_service.rb +84 -0
  250. data/lib/avo/test_helpers.rb +362 -0
  251. data/lib/avo/tools/tool_manager.rb +30 -0
  252. data/lib/avo/version.rb +1 -1
  253. data/lib/avo.rb +7 -0
  254. data/lib/generators/avo/eject_generator.rb +0 -1
  255. data/lib/generators/avo/install_generator.rb +1 -11
  256. data/lib/generators/avo/resource_generator.rb +5 -23
  257. data/lib/generators/avo/scope_generator.rb +15 -0
  258. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -18
  259. data/lib/generators/avo/templates/action.tt +1 -1
  260. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  261. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  262. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  263. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  264. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  265. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  266. data/lib/generators/avo/templates/dashboards/dashboard.tt +1 -1
  267. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  268. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  269. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  270. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  271. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  272. data/lib/generators/avo/templates/initializer/avo.tt +1 -11
  273. data/lib/generators/avo/templates/locales/avo.ar.yml +6 -6
  274. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  275. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  276. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  277. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  278. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  279. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  280. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  281. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  282. data/lib/generators/avo/templates/resource/resource.tt +1 -1
  283. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  284. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  285. data/lib/generators/avo/templates/scope.tt +6 -0
  286. data/lib/generators/avo/templates/standalone_action.tt +1 -1
  287. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  288. data/lib/generators/avo/templates/tool/view.tt +2 -2
  289. data/lib/tasks/avo_tasks.rake +22 -0
  290. metadata +82 -161
  291. data/app/assets/stylesheets/css/tags.css +0 -32
  292. data/app/assets/svgs/map-empty-state.svg +0 -35
  293. data/app/assets/svgs/map-view-type.svg +0 -3
  294. data/app/components/avo/card_component.html.erb +0 -46
  295. data/app/components/avo/card_component.rb +0 -25
  296. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  297. data/app/components/avo/dashboards/divider_component.rb +0 -19
  298. data/app/components/avo/fields/area_field/edit_component.html.erb +0 -7
  299. data/app/components/avo/fields/area_field/edit_component.rb +0 -4
  300. data/app/components/avo/fields/area_field/show_component.html.erb +0 -8
  301. data/app/components/avo/fields/area_field/show_component.rb +0 -4
  302. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  303. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  304. data/app/components/avo/fields/common/files/controls_component.html.erb +0 -29
  305. data/app/components/avo/fields/common/files/controls_component.rb +0 -19
  306. data/app/components/avo/fields/common/files/list_viewer_component.html.erb +0 -20
  307. data/app/components/avo/fields/common/files/list_viewer_component.rb +0 -41
  308. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +0 -27
  309. data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +0 -52
  310. data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +0 -22
  311. data/app/components/avo/fields/common/files/view_type/list_item_component.rb +0 -15
  312. data/app/components/avo/fields/location_field/edit_component.html.erb +0 -22
  313. data/app/components/avo/fields/location_field/edit_component.rb +0 -4
  314. data/app/components/avo/fields/location_field/show_component.html.erb +0 -7
  315. data/app/components/avo/fields/location_field/show_component.rb +0 -4
  316. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  317. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  318. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  319. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  320. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  321. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  322. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  323. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  324. data/app/components/avo/index/ordering/base_component.rb +0 -9
  325. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  326. data/app/components/avo/index/ordering/button_component.rb +0 -23
  327. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  328. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  329. data/app/components/avo/index/resource_map_component.html.erb +0 -16
  330. data/app/components/avo/index/resource_map_component.rb +0 -109
  331. data/app/components/avo/row_component.html.erb +0 -3
  332. data/app/components/avo/row_component.rb +0 -12
  333. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  334. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  335. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  336. data/app/controllers/avo/dashboards_controller.rb +0 -22
  337. data/app/controllers/avo/reorder_controller.rb +0 -25
  338. data/app/javascript/js/controllers/base_controller.js +0 -22
  339. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  340. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  341. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  342. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  343. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  344. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  345. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  346. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  347. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  348. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  349. data/app/views/avo/dashboards/show.html.erb +0 -38
  350. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  351. data/app/views/avo/partials/_global_search.html.erb +0 -19
  352. data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
  353. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  354. data/lib/avo/base_card.rb +0 -161
  355. data/lib/avo/concerns/fetches_things.rb +0 -150
  356. data/lib/avo/concerns/handles_field_args.rb +0 -47
  357. data/lib/avo/concerns/has_action_stimulus_controllers.rb +0 -15
  358. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  359. data/lib/avo/concerns/has_html_attributes.rb +0 -123
  360. data/lib/avo/concerns/pagination.rb +0 -53
  361. data/lib/avo/concerns/policy_helpers.rb +0 -31
  362. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  363. data/lib/avo/concerns/visible_items.rb +0 -51
  364. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  365. data/lib/avo/dashboards/base_divider.rb +0 -35
  366. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  367. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  368. data/lib/avo/dashboards/metric_card.rb +0 -9
  369. data/lib/avo/dashboards/partial_card.rb +0 -7
  370. data/lib/avo/fields/area_field.rb +0 -39
  371. data/lib/avo/fields/concerns/file_authorization.rb +0 -31
  372. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  373. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  374. data/lib/avo/fields/location_field.rb +0 -86
  375. data/lib/avo/fields/tags_field.rb +0 -102
  376. data/lib/avo/hosts/association_scope_host.rb +0 -8
  377. data/lib/avo/hosts/base_host.rb +0 -25
  378. data/lib/avo/hosts/card_visibility.rb +0 -20
  379. data/lib/avo/hosts/dashboard_card.rb +0 -22
  380. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  381. data/lib/avo/hosts/ordering.rb +0 -22
  382. data/lib/avo/hosts/record_host.rb +0 -7
  383. data/lib/avo/hosts/resource_record_host.rb +0 -7
  384. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  385. data/lib/avo/hosts/search_scope_host.rb +0 -7
  386. data/lib/avo/hosts/view_record_host.rb +0 -7
  387. data/lib/avo/hosts/visibility_host.rb +0 -12
  388. data/lib/avo/items_holder.rb +0 -96
  389. data/lib/avo/main_panel.rb +0 -3
  390. data/lib/avo/menu/base_item.rb +0 -25
  391. data/lib/avo/menu/builder.rb +0 -82
  392. data/lib/avo/menu/dashboard.rb +0 -22
  393. data/lib/avo/menu/group.rb +0 -2
  394. data/lib/avo/menu/link.rb +0 -6
  395. data/lib/avo/menu/menu.rb +0 -2
  396. data/lib/avo/menu/resource.rb +0 -22
  397. data/lib/avo/menu/section.rb +0 -2
  398. data/lib/avo/panel.rb +0 -24
  399. data/lib/avo/panel_builder.rb +0 -25
  400. data/lib/avo/resources/controls/action.rb +0 -38
  401. data/lib/avo/resources/controls/execution_context.rb +0 -58
  402. data/lib/avo/resources/controls/items_holder.rb +0 -19
  403. data/lib/avo/resources/controls/link_to.rb +0 -27
  404. data/lib/avo/row.rb +0 -26
  405. data/lib/avo/row_builder.rb +0 -24
  406. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  407. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  408. data/lib/avo/sidebar.rb +0 -30
  409. data/lib/avo/sidebar_builder.rb +0 -24
  410. data/lib/avo/tab.rb +0 -72
  411. data/lib/avo/tab_builder.rb +0 -25
  412. data/lib/avo/tab_group.rb +0 -42
  413. data/lib/avo/tab_group_builder.rb +0 -43
  414. data/lib/avo/tools_manager.rb +0 -11
  415. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  416. data/public/avo-assets/avo.base.js +0 -1037
  417. data/public/avo-assets/avo.base.js.map +0 -7
@@ -2,167 +2,24 @@
2
2
  data: {
3
3
  model_name: @resource.model_name.to_s,
4
4
  resource_name: @resource.class.to_s,
5
- model_id: @resource.model.id,
5
+ record_id: @resource.record.id,
6
6
  selected_resources_name: @resource.model_key,
7
- selected_resources: [@resource.model.id],
7
+ selected_resources: [@resource.record.id],
8
8
  **@resource.stimulus_data_attributes
9
9
  } do %>
10
10
  <%= render Avo::PanelComponent.new(name: title, description: @resource.resource_description, display_breadcrumbs: @reflection.blank?, index: 0, data: { panel_id: "main" }) do |c| %>
11
- <% c.with_tools do %>
12
- <% if @resource.has_show_controls? %>
13
- <% @resource.render_show_controls.each do |control| %>
14
- <% if control.back_button? %>
15
- <%= a_link back_path,
16
- style: :text,
17
- title: control.title,
18
- data: {
19
- tippy: control.title ? :tooltip : nil,
20
- },
21
- icon: 'arrow-left' do %>
22
- <%= control.label %>
23
- <% end %>
24
- <% elsif control.delete_button? %>
25
- <% if can_see_the_destroy_button? %>
26
- <%= a_link helpers.resource_path(model: @resource.model, resource: @resource),
27
- style: :text,
28
- color: :red,
29
- icon: 'trash',
30
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
31
- title: control.title,
32
- data: {
33
- turbo_confirm: t('avo.are_you_sure', item: @resource.model.model_name.name.downcase),
34
- turbo_method: :delete,
35
- control: :destroy,
36
- tippy: control.title ? :tooltip : nil,
37
- 'resource-id': @resource.model.id,
38
- } do %>
39
- <%= control.label %>
40
- <% end %>
41
- <% end %>
42
- <% elsif can_act_on? && control.actions_list? %>
43
- <%= render Avo::ActionsComponent.new actions: @actions, resource: @resource, view: @view, exclude: control.exclude, include: control.include, style: control.style, color: control.color, label: control.label %>
44
- <% elsif control.edit_button? %>
45
- <% if @resource.authorization.authorize_action(:edit, raise_exception: false) %>
46
- <%= a_link edit_path,
47
- color: :primary,
48
- style: :primary,
49
- title: control.title,
50
- data: {
51
- tippy: control.title ? :tooltip : nil,
52
- },
53
- icon: 'edit' do %>
54
- <%= control.label %>
55
- <% end %>
56
- <% end %>
57
- <% elsif control.action? %>
58
- <% if render_action_control?(control.action) %>
59
- <%= a_link control.path,
60
- color: control.color,
61
- style: control.style,
62
- icon: control.icon,
63
- title: control.title,
64
- data: {
65
- tippy: control.title ? :tooltip : nil,
66
- 'turbo-frame': 'actions_show',
67
- 'action': 'click->actions-picker#visitAction',
68
- } do %>
69
- <%= control.label %>
70
- <% end %>
71
- <% end %>
72
- <% elsif control.link_to? %>
73
- <%= a_link control.path,
74
- color: control.color,
75
- style: control.style,
76
- icon: control.icon,
77
- title: control.title,
78
- target: control.target,
79
- class: control.class,
80
- data: {
81
- **control.data,
82
- tippy: control.title ? :tooltip : nil,
83
- } do %>
84
- <%= control.label %>
85
- <% end %>
86
- <% elsif control.detach_button? %>
87
- <% if @reflection.present? && @resource.model.present? && can_detach? %>
88
- <%= a_button url: detach_path,
89
- icon: 'detach',
90
- method: :delete,
91
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
92
- style: :text,
93
- data: {
94
- confirm: "Are you sure you want to detach this #{title}."
95
- } do %>
96
- <%= control.label %>
97
- <% end %>
98
- <% end %>
99
- <% end %>
100
- <% end %>
101
- <% else %>
102
- <% if @reflection.present? && @resource.model.present? %>
103
- <% if can_detach? %>
104
- <%= a_button url: detach_path,
105
- icon: 'detach',
106
- method: :delete,
107
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
108
- style: :text,
109
- data: {
110
- confirm: "Are you sure you want to detach this #{title}."
111
- } do %>
112
- <%= t('avo.detach_item', item: title).humanize %>
113
- <% end %>
114
- <% end %>
115
- <%= render Avo::ActionsComponent.new actions: @actions, resource: @resource, view: @view %>
116
- <% if can_see_the_edit_button? %>
117
- <%= a_link edit_path,
118
- color: :primary,
119
- style: :primary,
120
- icon: 'edit' do %>
121
- <%= t('avo.edit').capitalize %>
122
- <% end %>
123
- <% end %>
124
- <% else %>
125
- <%= a_link back_path,
126
- style: :text,
127
- icon: 'arrow-left' do %>
128
- <%= t('avo.go_back') %>
129
- <% end %>
130
- <% if can_see_the_destroy_button? %>
131
- <%= a_link destroy_path,
132
- style: :text,
133
- color: :red,
134
- icon: 'trash',
135
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
136
- data: {
137
- turbo_confirm: t('avo.are_you_sure', item: @resource.model.model_name.name.downcase),
138
- turbo_method: :delete,
139
- control: :destroy,
140
- 'resource-id': @resource.model.id,
141
- } do %>
142
- <%= t('avo.delete').capitalize %>
143
- <% end %>
144
- <% end %>
145
- <% if can_act_on? %>
146
- <%= render Avo::ActionsComponent.new actions: @actions, resource: @resource, view: @view %>
147
- <% end %>
148
- <% if @resource.authorization.authorize_action(:edit, raise_exception: false) %>
149
- <%= a_link edit_path,
150
- color: :primary,
151
- style: :primary,
152
- icon: 'edit' do %>
153
- <%= t('avo.edit').capitalize %>
154
- <% end %>
155
- <% end %>
156
- <% end %>
11
+ <% c.tools do %>
12
+ <% @resource.render_show_controls.each do |control| %>
13
+ <%= render_control control %>
157
14
  <% end %>
158
15
  <% end %>
159
16
  <% if main_panel.present? %>
160
- <% c.with_body do %>
17
+ <% c.body do %>
161
18
  <%# the overflow helps with long values %>
162
19
  <div class="divide-y overflow-auto">
163
20
  <% main_panel.items.each_with_index do |field, index| %>
164
21
  <%= render field
165
- .hydrate(resource: @resource, model: @resource.model, user: @resource.user, view: view)
22
+ .hydrate(resource: @resource, record: @resource.record, user: @resource.user, view: view)
166
23
  .component_for_view(view)
167
24
  .new(field: field, resource: @resource, index: index, compact: sidebar.present?)
168
25
  %>
@@ -171,7 +28,7 @@
171
28
  <% end %>
172
29
  <% end %>
173
30
  <% if sidebar.present? %>
174
- <% c.with_sidebar do %>
31
+ <% c.sidebar do %>
175
32
  <%= render sidebar_component %>
176
33
  <% end %>
177
34
  <% end %>
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
4
- include Avo::ResourcesHelper
5
4
  include Avo::ApplicationHelper
6
5
 
7
- def initialize(resource: nil, reflection: nil, parent_resource: nil, parent_model: nil, resource_panel: nil, actions: [])
6
+ def initialize(resource: nil, reflection: nil, parent_resource: nil, parent_record: nil, resource_panel: nil, actions: [])
8
7
  @resource = resource
9
8
  @reflection = reflection
10
9
  @resource_panel = resource_panel
11
10
  @actions = actions
12
- @parent_model = parent_model
11
+ @parent_record = parent_record
13
12
  @parent_resource = parent_resource
14
13
  @view = :show
15
14
  end
@@ -26,7 +25,7 @@ class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
26
25
 
27
26
  def back_path
28
27
  if via_resource?
29
- helpers.resource_path(model: association_resource.model_class, resource: association_resource, resource_id: params[:via_resource_id])
28
+ helpers.resource_path(record: association_resource.model_class, resource: association_resource, resource_id: params[:via_record_id])
30
29
  else
31
30
  helpers.resources_path(resource: @resource)
32
31
  end
@@ -38,20 +37,16 @@ class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
38
37
  if via_resource?
39
38
  args = {
40
39
  via_resource_class: params[:via_resource_class],
41
- via_resource_id: params[:via_resource_id]
40
+ via_record_id: params[:via_record_id]
42
41
  }
43
42
  end
44
43
 
45
- helpers.edit_resource_path(model: @resource.model, resource: @resource, **args)
46
- end
47
-
48
- def render_action_control?(action)
49
- can_act_on? && action.visible_in_view(parent_resource: @parent_resource)
44
+ helpers.edit_resource_path(record: @resource.record, resource: @resource, **args)
50
45
  end
51
46
 
52
47
  private
53
48
 
54
- # In development and test environments we shoudl show the invalid field errors
49
+ # In development and test environments we should show the invalid field errors
55
50
  def should_display_invalid_fields_errors?
56
51
  (Rails.env.development? || Rails.env.test?) && @resource.invalid_fields.present?
57
52
  end
@@ -4,9 +4,9 @@ module Avo
4
4
  class ActionsController < ApplicationController
5
5
  before_action :set_resource_name
6
6
  before_action :set_resource
7
- before_action :set_model, only: :show, if: ->(request) do
8
- # Try to se the model only if the user is on the record page.
9
- # set_model will fail if it's tried to be used from the Index page.
7
+ before_action :set_record, only: :show, if: ->(request) do
8
+ # Try to se the record only if the user is on the record page.
9
+ # set_record will fail if it's tried to be used from the Index page.
10
10
  request.params[:id].present?
11
11
  end
12
12
  before_action :set_action, only: [:show, :handle]
@@ -15,7 +15,8 @@ module Avo
15
15
  # Se the view to :new so the default value gets prefilled
16
16
  @view = :new
17
17
 
18
- @resource.hydrate(model: @model, view: @view, user: _current_user, params: params)
18
+ @resource.hydrate(record: @record, view: @view, user: _current_user, params: params)
19
+ @record = ActionModel.new @action.get_attributes_for_action
19
20
  end
20
21
 
21
22
  def handle
@@ -46,21 +47,22 @@ module Avo
46
47
  private
47
48
 
48
49
  def action_params
49
- params.permit(:authenticity_token, :resource_name, :action_id, :button, fields: {})
50
+ params.permit(:authenticity_token, :resource_name, :action_id, fields: {})
50
51
  end
51
52
 
52
53
  def set_action
53
54
  @action = action_class.new(
54
- model: @model,
55
+ record: @record,
55
56
  resource: @resource,
56
57
  user: _current_user,
57
- view: :new, # force the action view to in order to render new-related fields (hidden field)
58
+ view: @view,
58
59
  arguments: @resource.get_action_arguments(action_class)
59
60
  )
60
61
  end
61
62
 
62
63
  def action_class
63
64
  klass_name = params[:action_id].gsub("avo_actions_", "").camelize
65
+ klass_name = "Avo::Actions::#{klass_name}"
64
66
 
65
67
  Avo::BaseAction.descendants.find do |action|
66
68
  action.to_s == klass_name
@@ -78,18 +80,19 @@ module Avo
78
80
  end
79
81
 
80
82
  respond_to do |format|
81
- format.turbo_stream do
83
+ format.html do
82
84
  # Flash the messages collected from the action
83
85
  flash_messages messages
84
86
 
85
87
  if response[:type] == :redirect
86
- render turbo_stream: turbo_stream.redirect_to(
87
- Avo::ExecutionContext.new(target: response[:path]).handle,
88
- nil,
89
- response[:redirect_args][:turbo_frame],
90
- **response[:redirect_args].except(:turbo_frame)
91
- )
92
- else
88
+ path = response[:path]
89
+
90
+ if path.respond_to? :call
91
+ path = instance_eval(&path)
92
+ end
93
+
94
+ redirect_to path
95
+ elsif response[:type] == :reload
93
96
  redirect_back fallback_location: resources_path(resource: @resource)
94
97
  end
95
98
  end
@@ -130,7 +133,7 @@ module Avo
130
133
 
131
134
  respond_to do |format|
132
135
  format.turbo_stream do
133
- render partial: "avo/partials/flash_alerts"
136
+ render "keep_modal_open"
134
137
  end
135
138
  end
136
139
  end
@@ -6,6 +6,8 @@ module Avo
6
6
  Avo::ApplicationController.include Pundit
7
7
  end
8
8
 
9
+ include Avo::InitializesAvo
10
+ include Pagy::Backend
9
11
  include Avo::ApplicationHelper
10
12
  include Avo::UrlHelpers
11
13
  include Avo::Concerns::Breadcrumbs
@@ -15,7 +17,7 @@ module Avo
15
17
  around_action :set_force_locale, if: -> { params[:force_locale].present? }
16
18
  before_action :set_default_locale, if: -> { params[:set_locale].present? }
17
19
  before_action :init_app
18
- before_action :check_avo_license
20
+ before_action :set_active_storage_current_host
19
21
  before_action :set_resource_name
20
22
  before_action :_authenticate!
21
23
  before_action :set_authorization
@@ -27,15 +29,9 @@ module Avo
27
29
  rescue_from Avo::NotAuthorizedError, with: :render_unauthorized
28
30
  rescue_from ActiveRecord::RecordInvalid, with: :exception_logger
29
31
 
30
- helper_method :_current_user, :resources_path, :resource_path, :new_resource_path, :edit_resource_path, :resource_attach_path, :resource_detach_path, :related_resources_path, :turbo_frame_request?, :resource_view_path
32
+ helper_method :_current_user, :resources_path, :resource_path, :new_resource_path, :edit_resource_path, :resource_attach_path, :resource_detach_path, :related_resources_path, :turbo_frame_request?, :resource_view_path, :preview_resource_path
31
33
  add_flash_types :info, :warning, :success, :error
32
34
 
33
- def init_app
34
- Avo::App.init request: request, context: context, current_user: _current_user, view_context: view_context, params: params
35
-
36
- @license = Avo::App.license
37
- end
38
-
39
35
  def exception_logger(exception)
40
36
  respond_to do |format|
41
37
  format.html { raise exception }
@@ -49,49 +45,6 @@ module Avo
49
45
  end
50
46
  end
51
47
 
52
- def render(*args)
53
- raise Avo::LicenseVerificationTemperedError, "License verification mechanism tempered with." unless method(:check_avo_license).source_location.first.match?(/.*\/app\/controllers\/avo\/application_controller\.rb/)
54
-
55
- if params[:controller] == "avo/search" && params[:action] == "index"
56
- raise Avo::LicenseVerificationTemperedError, "License verification mechanism tempered with." unless method(:index).source_location.first.match?(/.*\/app\/controllers\/avo\/search_controller\.rb/)
57
- end
58
-
59
- if params[:controller] == "avo/dashboards" && params[:action] == "show"
60
- raise Avo::LicenseVerificationTemperedError, "License verification mechanism tempered with." unless method(:show).source_location.first.match?(/.*\/app\/controllers\/avo\/dashboards_controller\.rb/)
61
- end
62
-
63
- if params[:controller] == "avo/dashboards" && params[:action] == "card"
64
- raise Avo::LicenseVerificationTemperedError, "License verification mechanism tempered with." unless method(:card).source_location.first.match?(/.*\/app\/controllers\/avo\/dashboards_controller\.rb/)
65
- end
66
-
67
- super(*args)
68
- end
69
-
70
- def check_avo_license
71
- # Check to see if the path is a custom tool
72
- if on_custom_tool_page
73
- if @license.lacks(:custom_tools) || @license.invalid?
74
- message = "Your license is invalid or doesn't support custom tools."
75
- end
76
- end
77
-
78
- # Check to see if the path is a dashboard
79
- if on_dashboards_path
80
- if @license.lacks(:dashboards) || @license.invalid?
81
- message = "Your license is invalid or doesn't support dashboards."
82
- end
83
- end
84
-
85
- if message.present?
86
- if Rails.env.development? || Rails.env.test?
87
- @custom_tools_alert_visible = message
88
- elsif @license.lacks_with_trial(:custom_tools)
89
- # Raise error in non-development environments.
90
- raise Avo::LicenseInvalidError, message
91
- end
92
- end
93
- end
94
-
95
48
  def _current_user
96
49
  instance_eval(&Avo.configuration.current_user)
97
50
  end
@@ -126,8 +79,8 @@ module Avo
126
79
  @related_resource = related_resource.hydrate(params: params)
127
80
  end
128
81
 
129
- def set_model
130
- @model = @resource.find_record(params[:id], query: model_find_scope, params: params)
82
+ def set_record
83
+ @record = @resource.find_record(params[:id], query: model_find_scope, params: params)
131
84
  end
132
85
 
133
86
  def model_find_scope
@@ -138,12 +91,12 @@ module Avo
138
91
  @resource.class.find_scope
139
92
  end
140
93
 
141
- def set_related_model
142
- association_name = BaseResource.valid_association_name(@model, params[:related_name])
143
- @related_model = if @field.is_a? Avo::Fields::HasOneField
144
- @model.send association_name
94
+ def set_related_record
95
+ association_name = BaseResource.valid_association_name(@record, params[:related_name])
96
+ @related_record = if @field.is_a? Avo::Fields::HasOneField
97
+ @record.send association_name
145
98
  else
146
- @related_resource.find_record params[:related_id], query: eager_load_files(@related_resource, @model.send(association_name)), params: params
99
+ @related_resource.find_record params[:related_id], query: eager_load_files(@related_resource, @record.send(association_name)), params: params
147
100
  end
148
101
  end
149
102
 
@@ -151,34 +104,30 @@ module Avo
151
104
  @view = action_name.to_sym
152
105
  end
153
106
 
154
- def set_model_to_fill
155
- @model_to_fill = @resource.model_class.new if @view == :create
156
- @model_to_fill = @model if @view == :update
157
-
158
- # If resource.model is nil, most likely the user is creating a new record.
159
- # In that case, to access resource.model in visible and readonly blocks we hydrate the resource with a new model.
160
- @resource.hydrate(model: @model_to_fill) if @resource.model.nil?
107
+ def set_record_to_fill
108
+ @record_to_fill = @resource.model_class.new if @view == :create
109
+ @record_to_fill = @record if @view == :update
161
110
  end
162
111
 
163
- def fill_model
164
- # We have to skip filling the the model if this is an attach action
112
+ def fill_record
113
+ # We have to skip filling the the record if this is an attach action
165
114
  is_attach_action = params[model_param_key].blank? && params[:related_name].present? && params[:fields].present?
166
115
 
167
116
  unless is_attach_action
168
- @model = @resource.fill_model(@model_to_fill, cast_nullable(model_params), extra_params: extra_params)
117
+ @record = @resource.fill_record(@record_to_fill, cast_nullable(model_params), extra_params: extra_params)
169
118
  end
170
119
  end
171
120
 
172
121
  def hydrate_resource
173
- @resource.hydrate(view: action_name.to_sym, user: _current_user, model: @model)
122
+ @resource.hydrate(view: action_name.to_sym, user: _current_user, record: @record)
174
123
  end
175
124
 
176
125
  def hydrate_related_resource
177
- @related_resource.hydrate(view: action_name.to_sym, user: _current_user, model: @related_model)
126
+ @related_resource.hydrate(view: action_name.to_sym, user: _current_user, record: @related_record)
178
127
  end
179
128
 
180
129
  def authorize_base_action
181
- class_to_authorize = @model || @resource.model_class
130
+ class_to_authorize = @record || @resource.model_class
182
131
 
183
132
  authorize_action class_to_authorize
184
133
  end
@@ -213,11 +162,11 @@ module Avo
213
162
  # Gets the Avo resource for this request based on the request from the `resource_name` "param"
214
163
  # Ex: Avo::Resources::Project, Avo::Resources::Team, Avo::Resources::User
215
164
  def resource
216
- resource = App.get_resource @resource_name.to_s.camelize.singularize
165
+ resource = Avo::App.resources.get_resource @resource_name.to_s.camelize.singularize
217
166
 
218
167
  return resource if resource.present?
219
168
 
220
- App.get_resource_by_controller_name @resource_name
169
+ Avo::App.resources.get_resource_by_controller_name @resource_name
221
170
  end
222
171
 
223
172
  def related_resource
@@ -226,23 +175,16 @@ module Avo
226
175
 
227
176
  return field.use_resource if field&.use_resource.present?
228
177
 
229
- reflection = @model._reflections[params[:related_name]]
178
+ reflection = @record._reflections[params[:related_name]]
230
179
 
231
180
  reflected_model = reflection.klass
232
181
 
233
- App.get_resource_by_model_name reflected_model
182
+ Avo::App.resources.get_resource_by_model_class reflected_model
234
183
  end
235
184
 
236
185
  def eager_load_files(resource, query)
237
- # Get the non-computed file fields and try to eager load them
238
- attachment_fields = resource
239
- .attachment_fields
240
- .reject do |field|
241
- field.computed
242
- end
243
-
244
- if attachment_fields.present?
245
- attachment_fields.map do |field|
186
+ if resource.attached_file_fields.present?
187
+ resource.attached_file_fields.map do |field|
246
188
  attachment = case field.class.to_s
247
189
  when "Avo::Fields::FileField"
248
190
  "attachment"
@@ -263,7 +205,7 @@ module Avo
263
205
  instance_eval(&Avo.configuration.authenticate)
264
206
  end
265
207
 
266
- def render_unauthorized(_exception)
208
+ def render_unauthorized(exception)
267
209
  flash[:notice] = t "avo.not_authorized"
268
210
 
269
211
  redirect_url = if request.referrer.blank? || (request.referrer == request.url)
@@ -301,30 +243,6 @@ module Avo
301
243
  instance_eval(&Avo.configuration.initial_breadcrumbs) if Avo.configuration.initial_breadcrumbs.present?
302
244
  end
303
245
 
304
- def on_root_path
305
- [Avo.configuration.root_path, "#{Avo.configuration.root_path}/"].include?(request.original_fullpath)
306
- end
307
-
308
- def on_resources_path
309
- request.original_url.match?(/.*#{Avo.configuration.root_path}\/resources\/.*/)
310
- end
311
-
312
- def on_api_path
313
- request.original_url.match?(/.*#{Avo.configuration.root_path}\/avo_api\/.*/)
314
- end
315
-
316
- def on_dashboards_path
317
- request.original_url.match?(/.*#{Avo.configuration.root_path}\/dashboards\/.*/)
318
- end
319
-
320
- def on_debug_path
321
- request.original_url.match?(/.*#{Avo.configuration.root_path}\/avo_private\/debug.*/)
322
- end
323
-
324
- def on_custom_tool_page
325
- !(on_root_path || on_resources_path || on_api_path || on_dashboards_path || on_debug_path)
326
- end
327
-
328
246
  def model_param_key
329
247
  @resource.form_scope
330
248
  end
@@ -360,5 +278,18 @@ module Avo
360
278
  value = cookies["#{Avo::COOKIES_KEY}.sidebar.open"]
361
279
  @sidebar_open = value.blank? || value == "1"
362
280
  end
281
+
282
+ # Set the current host for ActiveStorage
283
+ def set_active_storage_current_host
284
+ if defined?(ActiveStorage::Current)
285
+ if Rails::VERSION::MAJOR === 6
286
+ ActiveStorage::Current.host = request.base_url
287
+ elsif Rails::VERSION::MAJOR === 7
288
+ ActiveStorage::Current.url_options = request.base_url
289
+ end
290
+ end
291
+ rescue => exception
292
+ Avo.logger.debug "Failed to set ActiveStorage::Current.url_options, #{exception.inspect}"
293
+ end
363
294
  end
364
295
  end