avo 2.45.0 → 3.0.0.beta1

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 (371) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +26 -25
  3. data/Gemfile.lock +179 -147
  4. data/README.md +1 -1
  5. data/app/assets/stylesheets/avo.base.css +0 -1
  6. data/app/assets/svgs/font.svg +1 -0
  7. data/app/assets/svgs/triangle-up.svg +1 -0
  8. data/app/components/avo/actions_component.html.erb +19 -5
  9. data/app/components/avo/actions_component.rb +37 -17
  10. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  11. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  12. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  13. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  14. data/app/components/avo/base_component.rb +15 -12
  15. data/app/components/avo/button_component.rb +20 -3
  16. data/app/components/avo/empty_state_component.rb +1 -1
  17. data/app/components/avo/field_wrapper_component.html.erb +1 -1
  18. data/app/components/avo/field_wrapper_component.rb +8 -8
  19. data/app/components/avo/fields/area_field/edit_component.html.erb +2 -2
  20. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  21. data/app/components/avo/fields/belongs_to_field/edit_component.rb +6 -17
  22. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  23. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  24. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -1
  25. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  26. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  27. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  28. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  29. data/app/components/avo/fields/common/files/list_viewer_component.rb +3 -3
  30. data/app/components/avo/fields/common/files/view_type/{grid_item_component.html.erb → grid_component.html.erb} +2 -2
  31. data/app/components/avo/fields/common/files/view_type/{grid_item_component.rb → grid_component.rb} +4 -5
  32. data/app/components/avo/fields/common/files/view_type/{list_item_component.rb → list_component.rb} +1 -1
  33. data/app/components/avo/fields/edit_component.rb +1 -1
  34. data/app/components/avo/fields/file_field/edit_component.html.erb +1 -1
  35. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  36. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  37. data/app/components/avo/fields/has_one_field/show_component.html.erb +3 -2
  38. data/app/components/avo/fields/has_one_field/show_component.rb +2 -2
  39. data/app/components/avo/fields/index_component.rb +5 -5
  40. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  41. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  42. data/app/components/avo/fields/select_field/edit_component.html.erb +1 -1
  43. data/app/components/avo/fields/show_component.rb +4 -1
  44. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  45. data/app/components/avo/filters_component.html.erb +9 -3
  46. data/app/components/avo/filters_component.rb +4 -4
  47. data/app/components/avo/index/field_wrapper_component.rb +0 -12
  48. data/app/components/avo/index/grid_item_component.html.erb +13 -36
  49. data/app/components/avo/index/grid_item_component.rb +43 -16
  50. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  51. data/app/components/avo/index/resource_controls_component.rb +124 -17
  52. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  53. data/app/components/avo/index/resource_grid_component.rb +5 -2
  54. data/app/components/avo/index/resource_map_component.html.erb +1 -1
  55. data/app/components/avo/index/resource_map_component.rb +3 -3
  56. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  57. data/app/components/avo/index/resource_table_component.rb +14 -20
  58. data/app/components/avo/index/table_row_component.html.erb +8 -4
  59. data/app/components/avo/index/table_row_component.rb +3 -2
  60. data/app/components/avo/item_switcher_component.rb +2 -2
  61. data/app/components/avo/modal_component.html.erb +7 -12
  62. data/app/components/avo/modal_component.rb +0 -21
  63. data/app/components/avo/paginator_component.html.erb +40 -29
  64. data/app/components/avo/paginator_component.rb +5 -23
  65. data/app/components/avo/panel_component.html.erb +8 -6
  66. data/app/components/avo/referrer_params_component.html.erb +1 -2
  67. data/app/components/avo/resource_component.rb +189 -14
  68. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  69. data/app/components/avo/resource_sidebar_component.rb +1 -1
  70. data/app/components/avo/sidebar/link_component.rb +1 -1
  71. data/app/components/avo/sidebar_component.html.erb +10 -3
  72. data/app/components/avo/sidebar_component.rb +5 -3
  73. data/app/components/avo/sidebar_profile_component.html.erb +15 -8
  74. data/app/components/avo/tab_group_component.html.erb +13 -7
  75. data/app/components/avo/tab_group_component.rb +1 -6
  76. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  77. data/app/components/avo/tab_switcher_component.rb +4 -39
  78. data/app/components/avo/views/resource_edit_component.html.erb +12 -48
  79. data/app/components/avo/views/resource_edit_component.rb +7 -18
  80. data/app/components/avo/views/resource_index_component.html.erb +41 -47
  81. data/app/components/avo/views/resource_index_component.rb +62 -12
  82. data/app/components/avo/views/resource_show_component.html.erb +6 -149
  83. data/app/components/avo/views/resource_show_component.rb +6 -11
  84. data/app/controllers/avo/actions_controller.rb +27 -24
  85. data/app/controllers/avo/application_controller.rb +105 -151
  86. data/app/controllers/avo/associations_controller.rb +34 -43
  87. data/app/controllers/avo/attachments_controller.rb +4 -4
  88. data/app/controllers/avo/base_controller.rb +102 -102
  89. data/app/controllers/avo/debug_controller.rb +17 -5
  90. data/app/controllers/avo/home_controller.rb +1 -1
  91. data/app/controllers/avo/search_controller.rb +30 -51
  92. data/app/controllers/avo/team_users_controller.rb +4 -0
  93. data/app/controllers/concerns/avo/initializes_avo.rb +21 -0
  94. data/app/helpers/avo/application_helper.rb +15 -9
  95. data/app/helpers/avo/resources_helper.rb +1 -1
  96. data/app/helpers/avo/url_helpers.rb +27 -11
  97. data/app/javascript/avo.base.js +1 -0
  98. data/app/javascript/js/application.js +0 -3
  99. data/app/javascript/js/controllers/action_controller.js +5 -3
  100. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  101. data/app/javascript/js/controllers/filter_controller.js +1 -1
  102. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  103. data/app/javascript/js/controllers/preview_controller.js +24 -0
  104. data/app/javascript/js/controllers/search_controller.js +2 -2
  105. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  106. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  107. data/app/javascript/js/controllers.js +10 -6
  108. data/app/javascript/js/custom-stream-actions.js +15 -0
  109. data/app/views/avo/actions/keep_modal_open.turbo_stream.erb +5 -0
  110. data/app/views/avo/actions/show.html.erb +9 -6
  111. data/app/views/avo/associations/new.html.erb +2 -2
  112. data/app/views/avo/base/index.html.erb +3 -2
  113. data/app/views/avo/base/new.html.erb +2 -1
  114. data/app/views/avo/base/preview.html.erb +19 -0
  115. data/app/views/avo/base/show.html.erb +1 -1
  116. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  117. data/app/views/avo/debug/report.html.erb +32 -17
  118. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -14
  119. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  120. data/app/views/avo/partials/_footer.html.erb +1 -1
  121. data/app/views/avo/partials/_javascript.html.erb +5 -0
  122. data/app/views/avo/partials/_logo.html.erb +1 -1
  123. data/app/views/avo/partials/_navbar.html.erb +3 -5
  124. data/app/views/avo/partials/_table_header.html.erb +5 -11
  125. data/app/views/layouts/avo/application.html.erb +4 -2
  126. data/avo.gemspec +7 -7
  127. data/bin/dev +1 -1
  128. data/bin/prod +0 -0
  129. data/config/i18n-tasks.yml +1 -1
  130. data/config/initializers/pagy.rb +0 -2
  131. data/config/master.key +1 -0
  132. data/config/routes.rb +6 -10
  133. data/db/factories.rb +7 -1
  134. data/lib/avo/action_model.rb +20 -0
  135. data/lib/avo/asset_manager.rb +30 -0
  136. data/lib/avo/base_action.rb +57 -41
  137. data/lib/avo/base_resource.rb +263 -226
  138. data/lib/avo/base_resource_tool.rb +9 -16
  139. data/lib/avo/concerns/breadcrumbs.rb +2 -2
  140. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
  141. data/lib/avo/concerns/filters_session_handler.rb +5 -3
  142. data/lib/avo/concerns/has_controls.rb +37 -0
  143. data/lib/avo/concerns/has_description.rb +23 -0
  144. data/lib/avo/concerns/has_item_type.rb +42 -0
  145. data/lib/avo/concerns/has_items.rb +325 -0
  146. data/lib/avo/concerns/is_resource_item.rb +24 -36
  147. data/lib/avo/concerns/is_visible.rb +15 -0
  148. data/lib/avo/concerns/model_class_constantized.rb +0 -2
  149. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  150. data/lib/avo/configuration/branding.rb +0 -12
  151. data/lib/avo/configuration.rb +1 -37
  152. data/lib/avo/current.rb +39 -0
  153. data/lib/avo/dsl/field_parser.rb +1 -1
  154. data/lib/avo/dynamic_router.rb +18 -3
  155. data/lib/avo/engine.rb +35 -30
  156. data/lib/avo/error_manager.rb +25 -0
  157. data/lib/avo/execution_context.rb +10 -14
  158. data/lib/avo/fields/badge_field.rb +1 -1
  159. data/lib/avo/fields/base_field.rb +91 -105
  160. data/lib/avo/fields/belongs_to_field.rb +18 -22
  161. data/lib/avo/fields/concerns/file_authorization.rb +2 -2
  162. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  163. data/lib/avo/fields/concerns/has_default.rb +1 -5
  164. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  165. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  166. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  167. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  168. data/lib/avo/fields/concerns/is_required.rb +5 -7
  169. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  170. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  171. data/lib/avo/fields/country_field.rb +4 -0
  172. data/lib/avo/fields/date_time_field.rb +1 -5
  173. data/lib/avo/fields/field_manager.rb +55 -0
  174. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  175. data/lib/avo/fields/has_base_field.rb +12 -15
  176. data/lib/avo/fields/has_many_field.rb +5 -2
  177. data/lib/avo/fields/has_one_field.rb +6 -10
  178. data/lib/avo/fields/heading_field.rb +4 -1
  179. data/lib/avo/fields/hidden_field.rb +1 -1
  180. data/lib/avo/fields/id_field.rb +1 -1
  181. data/lib/avo/fields/location_field.rb +8 -8
  182. data/lib/avo/fields/password_field.rb +1 -1
  183. data/lib/avo/fields/preview_field.rb +14 -0
  184. data/lib/avo/fields/select_field.rb +12 -8
  185. data/lib/avo/fields/status_field.rb +4 -0
  186. data/lib/avo/filters/base_filter.rb +8 -4
  187. data/lib/avo/html/builder.rb +7 -8
  188. data/lib/avo/item_grapher.rb +78 -0
  189. data/lib/avo/licensing/h_q.rb +7 -66
  190. data/lib/avo/licensing/license.rb +1 -1
  191. data/lib/avo/licensing/pro_license.rb +1 -7
  192. data/lib/avo/loaders/fields_loader.rb +7 -1
  193. data/lib/avo/plugin.rb +16 -0
  194. data/lib/avo/plugin_manager.rb +56 -0
  195. data/lib/avo/prefixed_test_helpers.rb +20 -0
  196. data/lib/avo/reloader.rb +3 -0
  197. data/lib/avo/resources/controls/actions_list.rb +7 -12
  198. data/lib/avo/resources/controls/attach_button.rb +15 -0
  199. data/lib/avo/resources/controls/back_button.rb +1 -1
  200. data/lib/avo/resources/controls/base_control.rb +15 -49
  201. data/lib/avo/resources/controls/create_button.rb +15 -0
  202. data/lib/avo/resources/controls/delete_button.rb +5 -1
  203. data/lib/avo/resources/controls/detach_button.rb +4 -1
  204. data/lib/avo/resources/controls/edit_button.rb +4 -1
  205. data/lib/avo/resources/controls/order_controls.rb +8 -0
  206. data/lib/avo/resources/controls/save_button.rb +13 -0
  207. data/lib/avo/resources/controls/show_button.rb +15 -0
  208. data/lib/avo/resources/items/holder.rb +84 -0
  209. data/lib/avo/resources/items/item_group.rb +49 -0
  210. data/lib/avo/resources/items/main_panel.rb +2 -0
  211. data/lib/avo/resources/items/panel.rb +2 -0
  212. data/lib/avo/resources/items/row.rb +54 -0
  213. data/lib/avo/resources/items/sidebar.rb +47 -0
  214. data/lib/avo/resources/items/tab.rb +60 -0
  215. data/lib/avo/resources/items/tab_group.rb +68 -0
  216. data/lib/avo/resources/resource_manager.rb +174 -0
  217. data/lib/avo/services/authorization_service.rb +11 -110
  218. data/lib/avo/services/debug_service.rb +93 -0
  219. data/lib/avo/services/telemetry_service.rb +85 -0
  220. data/lib/avo/test_helpers.rb +362 -0
  221. data/lib/avo/tools/tool_manager.rb +30 -0
  222. data/lib/avo/version.rb +1 -1
  223. data/lib/avo.rb +115 -24
  224. data/lib/generators/avo/action_generator.rb +8 -8
  225. data/lib/generators/avo/card_generator.rb +27 -0
  226. data/lib/generators/avo/filter_generator.rb +8 -8
  227. data/lib/generators/avo/resource_generator.rb +4 -4
  228. data/lib/generators/avo/scope_generator.rb +15 -0
  229. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -15
  230. data/lib/generators/avo/templates/action.tt +8 -6
  231. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  232. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  233. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  234. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  235. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  236. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  237. data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
  238. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  239. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  240. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  241. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  242. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  243. data/lib/generators/avo/templates/initializer/avo.tt +1 -9
  244. data/lib/generators/avo/templates/locales/avo.ar.yml +5 -5
  245. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  246. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  247. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  248. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  249. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  250. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  251. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  252. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  253. data/lib/generators/avo/templates/resource/resource.tt +7 -7
  254. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  255. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  256. data/lib/generators/avo/templates/scope.tt +6 -0
  257. data/lib/generators/avo/templates/tool/view.tt +2 -2
  258. data/lib/tasks/avo_tasks.rake +27 -0
  259. data/public/avo-assets/avo.base.css +1810 -1189
  260. data/public/avo-assets/avo.base.js +217 -305
  261. data/public/avo-assets/avo.base.js.map +3 -3
  262. data/public/avo-assets/avo.css +9744 -0
  263. data/public/avo-assets/avo.js +513 -0
  264. data/public/avo-assets/avo.js.map +7 -0
  265. metadata +96 -137
  266. data/app/assets/stylesheets/css/tags.css +0 -32
  267. data/app/components/avo/card_component.html.erb +0 -46
  268. data/app/components/avo/card_component.rb +0 -25
  269. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  270. data/app/components/avo/dashboards/divider_component.rb +0 -19
  271. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  272. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  273. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  274. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  275. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  276. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  277. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  278. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  279. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  280. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  281. data/app/components/avo/index/ordering/base_component.rb +0 -9
  282. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  283. data/app/components/avo/index/ordering/button_component.rb +0 -23
  284. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  285. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  286. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  287. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  288. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  289. data/app/controllers/avo/dashboards_controller.rb +0 -22
  290. data/app/controllers/avo/reorder_controller.rb +0 -25
  291. data/app/javascript/js/controllers/base_controller.js +0 -22
  292. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  293. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  294. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  295. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  296. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  297. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  298. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  299. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  300. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  301. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  302. data/app/views/avo/dashboards/show.html.erb +0 -38
  303. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  304. data/app/views/avo/partials/_global_search.html.erb +0 -19
  305. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  306. data/lib/avo/app.rb +0 -237
  307. data/lib/avo/base_card.rb +0 -161
  308. data/lib/avo/concerns/fetches_things.rb +0 -150
  309. data/lib/avo/concerns/handles_field_args.rb +0 -47
  310. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  311. data/lib/avo/concerns/has_fields.rb +0 -334
  312. data/lib/avo/concerns/has_html_attributes.rb +0 -108
  313. data/lib/avo/concerns/pagination.rb +0 -53
  314. data/lib/avo/concerns/policy_helpers.rb +0 -31
  315. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  316. data/lib/avo/concerns/visible_items.rb +0 -51
  317. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  318. data/lib/avo/dashboards/base_divider.rb +0 -35
  319. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  320. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  321. data/lib/avo/dashboards/metric_card.rb +0 -9
  322. data/lib/avo/dashboards/partial_card.rb +0 -7
  323. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  324. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  325. data/lib/avo/fields/tags_field.rb +0 -102
  326. data/lib/avo/grid_collector.rb +0 -42
  327. data/lib/avo/hosts/association_scope_host.rb +0 -8
  328. data/lib/avo/hosts/base_host.rb +0 -25
  329. data/lib/avo/hosts/card_visibility.rb +0 -20
  330. data/lib/avo/hosts/dashboard_card.rb +0 -22
  331. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  332. data/lib/avo/hosts/ordering.rb +0 -22
  333. data/lib/avo/hosts/record_host.rb +0 -7
  334. data/lib/avo/hosts/resource_record_host.rb +0 -7
  335. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  336. data/lib/avo/hosts/search_scope_host.rb +0 -7
  337. data/lib/avo/hosts/view_record_host.rb +0 -7
  338. data/lib/avo/hosts/visibility_host.rb +0 -12
  339. data/lib/avo/items_holder.rb +0 -96
  340. data/lib/avo/main_panel.rb +0 -3
  341. data/lib/avo/menu/base_item.rb +0 -25
  342. data/lib/avo/menu/builder.rb +0 -82
  343. data/lib/avo/menu/dashboard.rb +0 -22
  344. data/lib/avo/menu/group.rb +0 -2
  345. data/lib/avo/menu/link.rb +0 -6
  346. data/lib/avo/menu/menu.rb +0 -2
  347. data/lib/avo/menu/resource.rb +0 -22
  348. data/lib/avo/menu/section.rb +0 -2
  349. data/lib/avo/panel.rb +0 -24
  350. data/lib/avo/panel_builder.rb +0 -25
  351. data/lib/avo/resources/controls/action.rb +0 -38
  352. data/lib/avo/resources/controls/execution_context.rb +0 -58
  353. data/lib/avo/resources/controls/items_holder.rb +0 -19
  354. data/lib/avo/resources/controls/link_to.rb +0 -27
  355. data/lib/avo/row.rb +0 -26
  356. data/lib/avo/row_builder.rb +0 -24
  357. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  358. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  359. data/lib/avo/sidebar.rb +0 -30
  360. data/lib/avo/sidebar_builder.rb +0 -24
  361. data/lib/avo/tab.rb +0 -72
  362. data/lib/avo/tab_builder.rb +0 -25
  363. data/lib/avo/tab_group.rb +0 -42
  364. data/lib/avo/tab_group_builder.rb +0 -43
  365. data/lib/avo/tools_manager.rb +0 -11
  366. data/lib/generators/avo/card/chartkick_generator.rb +0 -18
  367. data/lib/generators/avo/card/metric_generator.rb +0 -18
  368. data/lib/generators/avo/card/partial_generator.rb +0 -19
  369. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  370. data/lib/generators/avo/templates/standalone_action.tt +0 -8
  371. /data/app/components/avo/fields/common/files/view_type/{list_item_component.html.erb → list_component.html.erb} +0 -0
@@ -2,18 +2,16 @@ require_dependency "avo/base_controller"
2
2
 
3
3
  module Avo
4
4
  class AssociationsController < BaseController
5
- before_action :set_model, only: [:show, :index, :new, :create, :destroy, :order]
6
- before_action :hydrate_resource, only: [:show, :index, :new, :create, :destroy, :order]
5
+ before_action :set_record, only: [:show, :index, :new, :create, :destroy]
7
6
  before_action :set_related_resource_name
8
- before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy, :order]
7
+ before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy]
9
8
  before_action :set_related_authorization
10
9
  before_action :set_reflection_field
11
- before_action :set_related_model, only: [:show, :order]
12
- before_action :hydrate_related_resource, only: [:show, :index, :create, :destroy, :order]
10
+ before_action :set_related_record, only: [:show]
13
11
  before_action :set_reflection
14
- before_action :set_attachment_class, only: [:show, :index, :new, :create, :destroy, :order]
15
- before_action :set_attachment_resource, only: [:show, :index, :new, :create, :destroy, :order]
16
- before_action :set_attachment_model, only: [:create, :destroy, :order]
12
+ before_action :set_attachment_class, only: [:show, :index, :new, :create, :destroy]
13
+ before_action :set_attachment_resource, only: [:show, :index, :new, :create, :destroy]
14
+ before_action :set_attachment_record, only: [:create, :destroy]
17
15
  before_action :authorize_index_action, only: :index
18
16
  before_action :authorize_attach_action, only: :new
19
17
  before_action :authorize_detach_action, only: :destroy
@@ -21,55 +19,55 @@ module Avo
21
19
  def index
22
20
  @parent_resource = @resource.dup
23
21
  @resource = @related_resource
24
- @parent_model = @parent_resource.find_record(params[:id], params: params)
25
- @parent_resource.hydrate(model: @parent_model)
26
- association_name = BaseResource.valid_association_name(@parent_model, params[:related_name])
27
- @query = @related_authorization.apply_policy @parent_model.send(association_name)
22
+ @parent_record = @parent_resource.find_record(params[:id], params: params)
23
+ @parent_resource.hydrate(record: @parent_record)
24
+ association_name = BaseResource.valid_association_name(@parent_record, params[:related_name])
25
+ @query = @related_authorization.apply_policy @parent_record.send(association_name)
28
26
  @association_field = @parent_resource.get_field params[:related_name]
29
27
 
30
28
  if @association_field.present? && @association_field.scope.present?
31
- @query = Avo::Hosts::AssociationScopeHost.new(block: @association_field.scope, query: @query, parent: @parent_model).handle
29
+ @query = Avo::ExecutionContext.new(target: @association_field.scope, query: @query, parent: @parent_record).handle
32
30
  end
33
31
 
34
32
  super
35
33
  end
36
34
 
37
35
  def show
38
- @parent_resource, @parent_model = @resource, @model
36
+ @parent_resource, @parent_record = @resource, @record
39
37
 
40
- @resource, @model = @related_resource, @related_model
38
+ @resource, @record = @related_resource, @related_record
41
39
 
42
40
  super
43
41
  end
44
42
 
45
43
  def new
46
- @resource.hydrate(model: @model)
44
+ @resource.hydrate(record: @record)
47
45
 
48
- if @field.present? && !@field.searchable
46
+ if @field.present? && !@field.is_searchable?
49
47
  query = @related_authorization.apply_policy @attachment_class
50
48
 
51
49
  # Add the association scope to the query scope
52
50
  if @field.attach_scope.present?
53
- query = Avo::Hosts::AssociationScopeHost.new(block: @field.attach_scope, query: query, parent: @model).handle
51
+ query = Avo::ExecutionContext.new(target: @field.attach_scope, query: query, parent: @record).handle
54
52
  end
55
53
 
56
- @options = query.all.map do |model|
57
- [model.send(@attachment_resource.class.title), model.id]
54
+ @options = query.all.map do |record|
55
+ [@attachment_resource.new(record: record).record_title, record.id]
58
56
  end
59
57
  end
60
58
  end
61
59
 
62
60
  def create
63
- association_name = BaseResource.valid_association_name(@model, params[:related_name])
61
+ association_name = BaseResource.valid_association_name(@record, params[:related_name])
64
62
 
65
63
  if reflection_class == "HasManyReflection"
66
- @model.send(association_name) << @attachment_model
64
+ @record.send(association_name) << @attachment_record
67
65
  else
68
- @model.send("#{association_name}=", @attachment_model)
66
+ @record.send("#{association_name}=", @attachment_record)
69
67
  end
70
68
 
71
69
  respond_to do |format|
72
- if @model.save
70
+ if @record.save
73
71
  format.html { redirect_back fallback_location: resource_view_response_path, notice: t("avo.attachment_class_attached", attachment_class: @related_resource.name) }
74
72
  else
75
73
  format.html { render :new }
@@ -78,12 +76,12 @@ module Avo
78
76
  end
79
77
 
80
78
  def destroy
81
- association_name = BaseResource.valid_association_name(@model, params[:related_name])
79
+ association_name = BaseResource.valid_association_name(@record, params[:related_name])
82
80
 
83
81
  if reflection_class == "HasManyReflection"
84
- @model.send(association_name).delete @attachment_model
82
+ @record.send(association_name).destroy @attachment_record
85
83
  else
86
- @model.send("#{association_name}=", nil)
84
+ @record.send("#{association_name}=", nil)
87
85
  end
88
86
 
89
87
  respond_to do |format|
@@ -91,17 +89,10 @@ module Avo
91
89
  end
92
90
  end
93
91
 
94
- def order
95
- @parent_resource = @resource.dup
96
- @resource, @model = @related_resource, @related_model
97
-
98
- super
99
- end
100
-
101
92
  private
102
93
 
103
94
  def set_reflection
104
- @reflection = @model._reflections[params[:related_name].to_s]
95
+ @reflection = @record._reflections[params[:related_name].to_s]
105
96
  end
106
97
 
107
98
  def set_attachment_class
@@ -109,16 +100,16 @@ module Avo
109
100
  end
110
101
 
111
102
  def set_attachment_resource
112
- @attachment_resource = @field.use_resource || (App.get_resource_by_model_name @attachment_class)
103
+ @attachment_resource = @field.use_resource || (Avo.resource_manager.get_resource_by_model_class @attachment_class)
113
104
  end
114
105
 
115
- def set_attachment_model
116
- @attachment_model = @related_resource.find_record attachment_id, params: params
106
+ def set_attachment_record
107
+ @attachment_record = @related_resource.find_record attachment_id, params: params
117
108
  end
118
109
 
119
110
  def set_reflection_field
120
111
  @field = @resource.get_field_definitions.find { |f| f.id == @related_resource_name.to_sym }
121
- @field.hydrate(resource: @resource, model: @model, view: :new)
112
+ @field.hydrate(resource: @resource, record: @record, view: :new)
122
113
  rescue
123
114
  end
124
115
 
@@ -127,7 +118,7 @@ module Avo
127
118
  end
128
119
 
129
120
  def reflection_class
130
- reflection = @model._reflections[params[:related_name]]
121
+ reflection = @record._reflections[params[:related_name]]
131
122
 
132
123
  klass = reflection.class.name.demodulize.to_s
133
124
  klass = reflection.through_reflection.class.name.demodulize.to_s if klass == "ThroughReflection"
@@ -136,7 +127,7 @@ module Avo
136
127
  end
137
128
 
138
129
  def authorize_if_defined(method)
139
- @authorization.set_record(@model)
130
+ @authorization.set_record(@record)
140
131
 
141
132
  if @authorization.has_method?(method.to_sym)
142
133
  @authorization.authorize_action method.to_sym
@@ -158,8 +149,8 @@ module Avo
158
149
  private
159
150
 
160
151
  def set_related_authorization
161
- @related_authorization = if related_resource
162
- related_resource.authorization(user: _current_user)
152
+ @related_authorization = if @related_resource.present?
153
+ @related_resource.authorization(user: _current_user)
163
154
  else
164
155
  Services::AuthorizationService.new _current_user
165
156
  end
@@ -4,17 +4,17 @@ module Avo
4
4
  class AttachmentsController < ApplicationController
5
5
  before_action :set_resource_name, only: [:destroy, :create]
6
6
  before_action :set_resource, only: [:destroy, :create]
7
- before_action :set_model, only: [:destroy, :create]
7
+ before_action :set_record, only: [:destroy, :create]
8
8
 
9
9
  def create
10
10
  blob = ActiveStorage::Blob.create_and_upload! io: params[:file].to_io, filename: params[:filename]
11
- association_name = BaseResource.valid_attachment_name(@model, params[:attachment_key])
11
+ association_name = BaseResource.valid_attachment_name(@record, params[:attachment_key])
12
12
 
13
13
  if association_name.blank?
14
14
  raise ActionController::BadRequest.new("Could not find the attachment association for #{params[:attachment_key]} (check the `attachment_key` for this Trix field)")
15
15
  end
16
16
 
17
- @model.send(association_name).attach blob
17
+ @record.send(association_name).attach blob
18
18
 
19
19
  render json: {
20
20
  url: main_app.url_for(blob),
@@ -47,7 +47,7 @@ module Avo
47
47
  private
48
48
 
49
49
  def authorized_to(action)
50
- @resource.authorization.authorize_action("#{action}_#{params[:attachment_name]}?", record: @model, raise_exception: false)
50
+ @resource.authorization.authorize_action("#{action}_#{params[:attachment_name]}?", record: @record, raise_exception: false)
51
51
  end
52
52
  end
53
53
  end
@@ -6,14 +6,13 @@ module Avo
6
6
 
7
7
  before_action :set_resource_name
8
8
  before_action :set_resource
9
- before_action :hydrate_resource
10
9
  before_action :set_applied_filters, only: :index
11
- before_action :set_model, only: [:show, :edit, :destroy, :update, :order]
12
- before_action :set_model_to_fill
10
+ before_action :set_record, only: [:show, :edit, :destroy, :update, :preview]
11
+ before_action :set_record_to_fill
13
12
  before_action :set_edit_title_and_breadcrumbs, only: [:edit, :update]
14
- before_action :fill_model, only: [:create, :update]
13
+ before_action :fill_record, only: [:create, :update]
15
14
  # Don't run base authorizations for associations
16
- before_action :authorize_base_action, if: -> { controller_name != "associations" }
15
+ before_action :authorize_base_action, except: :preview, if: -> { controller_name != "associations" }
17
16
  before_action :set_pagy_locale, only: :index
18
17
 
19
18
  def index
@@ -29,11 +28,6 @@ module Avo
29
28
  @query = @resource.class.query_scope
30
29
  end
31
30
 
32
- # Remove default_scope for index view if no parent_resource present
33
- if @resource.unscoped_queries_on_index && @parent_resource.blank?
34
- @query = @query.unscoped
35
- end
36
-
37
31
  # Eager load the associations
38
32
  if @resource.includes.present?
39
33
  @query = @query.includes(*@resource.includes)
@@ -52,7 +46,7 @@ module Avo
52
46
  field_id = @index_params[:sort_by].to_sym
53
47
  field = @resource.get_field_definitions.find { |field| field.id == field_id }
54
48
  @query = if field&.sortable.is_a?(Proc)
55
- field.sortable.call(@query, @index_params[:sort_direction])
49
+ Avo::ExecutionContext.new(target: field.sortable, query: @query, direction: @index_params[:sort_direction]).handle
56
50
  else
57
51
  @query.order("#{@resource.model_class.table_name}.#{@index_params[:sort_by]} #{@index_params[:sort_direction]}")
58
52
  end
@@ -65,57 +59,62 @@ module Avo
65
59
  ).apply_query request, @query, filter_value
66
60
  end
67
61
 
68
- apply_pagination
62
+ extra_pagy_params = {}
63
+
64
+ # Reset open filters when a user navigates to a new page
65
+ extra_pagy_params[:keep_filters_panel_open] = if params[:keep_filters_panel_open] == "1"
66
+ "0"
67
+ end
68
+
69
+ safe_call :set_and_apply_scopes
70
+ safe_call :apply_dynamic_filters
71
+
72
+ @pagy, @records = pagy(pagy_query, items: @index_params[:per_page], link_extra: "data-turbo-frame=\"#{params[:turbo_frame]}\"", size: [1, 2, 2, 1], params: extra_pagy_params)
69
73
 
70
- # Create resources for each model
71
- @resources = @models.map do |model|
72
- @resource.hydrate(model: model, params: params).dup
74
+ # Create resources for each record
75
+ @resources = @records.map do |record|
76
+ @resource.hydrate(record: record, params: params).dup
73
77
  end
74
78
  end
75
79
 
76
80
  def show
77
- @resource.hydrate(model: @model, view: :show, user: _current_user, params: params)
81
+ @resource.hydrate(record: @record, view: :show, user: _current_user, params: params).detect_fields
78
82
 
79
83
  set_actions
80
84
 
81
85
  @page_title = @resource.default_panel_name.to_s
82
86
 
83
87
  # If we're accessing this resource via another resource add the parent to the breadcrumbs.
84
- if params[:via_resource_class].present? && params[:via_resource_id].present?
85
- via_resource = Avo::App.get_resource(params[:via_resource_class]).dup
86
- via_model = via_resource.find_record params[:via_resource_id], params: params
87
- via_resource.hydrate model: via_model
88
+ if params[:via_resource_class].present? && params[:via_record_id].present?
89
+ via_resource = Avo.resource_manager.get_resource(params[:via_resource_class])
90
+ via_record = via_resource.find_record params[:via_record_id], params: params
91
+ via_resource = via_resource.new record: via_record
88
92
 
89
93
  add_breadcrumb via_resource.plural_name, resources_path(resource: via_resource)
90
- add_breadcrumb via_resource.model_title, resource_path(model: via_model, resource: via_resource)
94
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
91
95
  else
92
96
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
93
97
  end
94
98
 
95
- add_breadcrumb @resource.model_title
99
+ add_breadcrumb @resource.record_title
96
100
  add_breadcrumb I18n.t("avo.details").upcase_first
97
101
  end
98
102
 
99
103
  def new
100
- @model = @resource.model_class.new
101
- @resource = @resource.hydrate(model: @model, view: :new, user: _current_user)
102
-
103
- # Handle special cases when creating a new record via a belongs_to relationship
104
- if params[:via_belongs_to_resource_class].present?
105
- return render turbo_stream: turbo_stream.append('attach_modal', partial: 'avo/base/new_via_belongs_to')
106
- end
104
+ @record = @resource.model_class.new
105
+ @resource = @resource.hydrate(record: @record, view: :new, user: _current_user)
107
106
 
108
107
  set_actions
109
108
 
110
109
  @page_title = @resource.default_panel_name.to_s
111
110
 
112
111
  if is_associated_record?
113
- via_resource = Avo::App.get_resource_by_model_name(params[:via_relation_class]).dup
114
- via_model = via_resource.find_record params[:via_resource_id], params: params
115
- via_resource.hydrate model: via_model
112
+ via_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
113
+ via_record = via_resource.find_record params[:via_record_id], params: params
114
+ via_resource = via_resource.new record: via_record
116
115
 
117
116
  add_breadcrumb via_resource.plural_name, resources_path(resource: via_resource)
118
- add_breadcrumb via_resource.model_title, resource_path(model: via_model, resource: via_resource)
117
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
119
118
  end
120
119
 
121
120
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
@@ -123,37 +122,37 @@ module Avo
123
122
  end
124
123
 
125
124
  def create
126
- # model gets instantiated and filled in the fill_model method
127
- saved = save_model
128
- @resource.hydrate(model: @model, view: :new, user: _current_user)
125
+ # record gets instantiated and filled in the fill_record method
126
+ saved = save_record
127
+ @resource.hydrate(record: @record, view: :new, user: _current_user)
129
128
 
130
129
  # This means that the record has been created through another parent record and we need to attach it somehow.
131
- if params[:via_resource_id].present? && params[:via_belongs_to_resource_class].nil?
132
- @reflection = @model._reflections[params[:via_relation]]
130
+ if params[:via_record_id].present?
131
+ @reflection = @record._reflections[params[:via_relation]]
133
132
  # Figure out what kind of association does the record have with the parent record
134
133
 
135
134
  # Fills in the required infor for belongs_to and has_many
136
135
  # Get the foreign key and set it to the id we received in the params
137
136
  if @reflection.is_a?(ActiveRecord::Reflection::BelongsToReflection) || @reflection.is_a?(ActiveRecord::Reflection::HasManyReflection)
138
- related_resource = Avo::App.get_resource_by_model_name params[:via_relation_class]
139
- related_record = related_resource.find_record params[:via_resource_id], params: params
137
+ related_resource = Avo.resource_manager.get_resource_by_model_class params[:via_relation_class]
138
+ related_record = related_resource.find_record params[:via_record_id], params: params
140
139
 
141
- @model.send("#{@reflection.foreign_key}=", related_record.id)
142
- @model.save
140
+ @record.send("#{@reflection.foreign_key}=", related_record.id)
141
+ @record.save
143
142
  end
144
143
 
145
144
  # For when working with has_one, has_one_through, has_many_through, has_and_belongs_to_many, polymorphic
146
145
  if @reflection.is_a? ActiveRecord::Reflection::ThroughReflection
147
146
  # find the record
148
- via_resource = ::Avo::App.get_resource_by_model_name(params[:via_relation_class]).dup
149
- @related_record = via_resource.find_record params[:via_resource_id], params: params
150
- association_name = BaseResource.valid_association_name(@model, params[:via_relation])
147
+ via_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
148
+ @related_record = via_resource.find_record params[:via_record_id], params: params
149
+ association_name = BaseResource.valid_association_name(@record, params[:via_relation])
151
150
 
152
151
  if params[:via_association_type] == "has_one"
153
152
  # On has_one scenarios we should switch the @record and @related_record
154
- @related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @model)
153
+ @related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @record)
155
154
  else
156
- @model.send(association_name) << @related_record
155
+ @record.send(association_name) << @related_record
157
156
  end
158
157
  end
159
158
  end
@@ -174,9 +173,9 @@ module Avo
174
173
  end
175
174
 
176
175
  def update
177
- # model gets instantiated and filled in the fill_model method
178
- saved = save_model
179
- @resource = @resource.hydrate(model: @model, view: :edit, user: _current_user)
176
+ # record gets instantiated and filled in the fill_record method
177
+ saved = save_record
178
+ @resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
180
179
  set_actions
181
180
 
182
181
  if saved
@@ -194,55 +193,46 @@ module Avo
194
193
  end
195
194
  end
196
195
 
197
- def order
198
- direction = params[:direction].to_sym
196
+ def preview
197
+ @resource.hydrate(record: @record, view: :show, user: _current_user, params: params)
199
198
 
200
- if direction.present?
201
- @resource
202
- .hydrate(model: @model, params: params)
203
- .ordering_host
204
- .order direction
205
- end
206
-
207
- respond_to do |format|
208
- format.html { redirect_to params[:referrer] || resources_path(resource: @resource) }
209
- end
199
+ render layout: params[:turbo_frame].blank?
210
200
  end
211
201
 
212
202
  private
213
203
 
214
- def save_model
204
+ def save_record
215
205
  perform_action_and_record_errors do
216
- save_model_action
206
+ save_record_action
217
207
  end
218
208
  end
219
209
 
220
- def save_model_action
221
- @model.save!
210
+ def save_record_action
211
+ @record.save!
222
212
  end
223
213
 
224
214
  def destroy_model
225
215
  perform_action_and_record_errors do
226
- destroy_model_action
216
+ destroy_record_action
227
217
  end
228
218
  end
229
219
 
230
- def destroy_model_action
231
- @model.destroy!
220
+ def destroy_record_action
221
+ @record.destroy!
232
222
  end
233
223
 
234
224
  def perform_action_and_record_errors(&block)
235
225
  begin
236
226
  succeeded = block.call
237
227
  rescue => exception
238
- # In case there's an error somewhere else than the model
228
+ # In case there's an error somewhere else than the record
239
229
  # Example: When you save a license that should create a user for it and creating that user throws and error.
240
230
  # Example: When you Try to delete a record and has a foreign key constraint.
241
231
  exception_message = exception.message
242
232
  end
243
233
 
244
- # Add the errors from the model
245
- @errors = @model.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
234
+ # Add the errors from the record
235
+ @errors = @record.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
246
236
 
247
237
  succeeded
248
238
  end
@@ -300,7 +290,7 @@ module Avo
300
290
  @index_params[:per_page] = cookies[:per_page]
301
291
  end
302
292
 
303
- if @parent_model.present?
293
+ if @parent_record.present?
304
294
  @index_params[:per_page] = Avo.configuration.via_per_page
305
295
  end
306
296
 
@@ -319,8 +309,20 @@ module Avo
319
309
  @index_params[:sort_direction] = params[:sort_direction] || :desc
320
310
 
321
311
  # View types
322
- @index_params[:view_type] = params[:view_type] || @resource.default_view_type || Avo.configuration.default_view_type
323
- @index_params[:available_view_types] = @resource.available_view_types
312
+ available_view_types = @resource.available_view_types
313
+ @index_params[:available_view_types] = available_view_types
314
+
315
+ @index_params[:view_type] = if params[:view_type].present?
316
+ params[:view_type]
317
+ elsif available_view_types.size == 1
318
+ available_view_types.first
319
+ else
320
+ @resource.default_view_type || Avo.configuration.default_view_type
321
+ end
322
+
323
+ if available_view_types.exclude? @index_params[:view_type].to_sym
324
+ raise "View type '#{@index_params[:view_type]}' is unavailable for #{@resource.class}."
325
+ end
324
326
  end
325
327
 
326
328
  def set_filters
@@ -338,7 +340,7 @@ module Avo
338
340
  @actions = @resource
339
341
  .get_actions
340
342
  .map do |action|
341
- action[:class].new(model: @model, resource: @resource, view: @view, arguments: action[:arguments])
343
+ action[:class].new(record: @record, resource: @resource, view: @view, arguments: action[:arguments])
342
344
  end
343
345
  .select do |action|
344
346
  action.visible_in_view(parent_resource: @parent_resource)
@@ -392,45 +394,41 @@ module Avo
392
394
  end
393
395
 
394
396
  def set_edit_title_and_breadcrumbs
395
- @resource = @resource.hydrate(model: @model, view: :edit, user: _current_user)
397
+ @resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
396
398
  @page_title = @resource.default_panel_name.to_s
397
399
 
398
400
  last_crumb_args = {}
399
401
  # If we're accessing this resource via another resource add the parent to the breadcrumbs.
400
- if params[:via_resource_class].present? && params[:via_resource_id].present?
401
- via_resource = Avo::App.get_resource(params[:via_resource_class]).dup
402
- via_model = via_resource.find_record params[:via_resource_id], params: params
403
- via_resource.hydrate model: via_model
402
+ if params[:via_resource_class].present? && params[:via_record_id].present?
403
+ via_resource = Avo.resource_manager.get_resource(params[:via_resource_class])
404
+ via_record = via_resource.find_record params[:via_record_id], params: params
405
+ via_resource = via_resource.new record: via_record
404
406
 
405
407
  add_breadcrumb via_resource.plural_name, resources_path(resource: @resource)
406
- add_breadcrumb via_resource.model_title, resource_path(model: via_model, resource: via_resource)
408
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
407
409
 
408
410
  last_crumb_args = {
409
411
  via_resource_class: params[:via_resource_class],
410
- via_resource_id: params[:via_resource_id]
412
+ via_record_id: params[:via_record_id]
411
413
  }
412
414
  else
413
415
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
414
416
  end
415
417
 
416
- add_breadcrumb @resource.model_title, resource_path(model: @resource.model, resource: @resource, **last_crumb_args)
418
+ add_breadcrumb @resource.record_title, resource_path(record: @resource.record, resource: @resource, **last_crumb_args)
417
419
  add_breadcrumb t("avo.edit").humanize
418
420
  end
419
421
 
420
422
  def create_success_action
421
- return render "close_modal_and_reload_field" if params[:via_belongs_to_resource_class].present?
422
-
423
423
  respond_to do |format|
424
424
  format.html { redirect_to after_create_path, notice: create_success_message}
425
425
  end
426
426
  end
427
427
 
428
428
  def create_fail_action
429
- flash.now[:error] = create_fail_message
430
-
431
429
  respond_to do |format|
430
+ flash.now[:error] = create_fail_message
432
431
  format.html { render :new, status: :unprocessable_entity }
433
- format.turbo_stream { render "create_fail_action" }
434
432
  end
435
433
  end
436
434
 
@@ -445,13 +443,13 @@ module Avo
445
443
  def after_create_path
446
444
  # If this is an associated record return to the association show page
447
445
  if is_associated_record?
448
- parent_resource = ::Avo::App.get_resource_by_model_name(params[:via_relation_class]).dup
449
- association_name = BaseResource.valid_association_name(@model, params[:via_relation])
446
+ parent_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
447
+ association_name = BaseResource.valid_association_name(@record, params[:via_relation])
450
448
 
451
449
  return resource_view_path(
452
- model: @model.send(association_name),
450
+ record: @record.send(association_name),
453
451
  resource: parent_resource,
454
- resource_id: params[:via_resource_id]
452
+ resource_id: params[:via_record_id]
455
453
  )
456
454
  end
457
455
 
@@ -487,7 +485,7 @@ module Avo
487
485
 
488
486
  # Needs a different name, otwherwise, in some places, this can be called instead helpers.resource_view_path
489
487
  def resource_view_response_path
490
- helpers.resource_view_path(model: @model, resource: @resource)
488
+ helpers.resource_view_path(record: @record, resource: @resource)
491
489
  end
492
490
 
493
491
  def destroy_success_action
@@ -497,10 +495,8 @@ module Avo
497
495
  end
498
496
 
499
497
  def destroy_fail_action
500
- flash[:error] = destroy_fail_message
501
-
502
498
  respond_to do |format|
503
- format.turbo_stream { render partial: "avo/partials/flash_alerts" }
499
+ format.html { redirect_back fallback_location: params[:referrer] || resources_path(resource: @resource, turbo_frame: params[:turbo_frame], view_type: params[:view_type]), error: destroy_fail_message }
504
500
  end
505
501
  end
506
502
 
@@ -522,14 +518,14 @@ module Avo
522
518
  if @resource.class.send(action) == :index
523
519
  resources_path(resource: @resource)
524
520
  elsif @resource.class.send(action) == :edit || Avo.configuration.resource_default_view == :edit
525
- edit_resource_path(resource: @resource, model: @resource.model)
521
+ edit_resource_path(resource: @resource, record: @resource.record)
526
522
  else
527
- resource_path(model: @model, resource: @resource)
523
+ resource_path(record: @record, resource: @resource)
528
524
  end
529
525
  end
530
526
 
531
527
  def is_associated_record?
532
- params[:via_relation_class].present? && params[:via_resource_id].present?
528
+ params[:via_relation_class].present? && params[:via_record_id].present?
533
529
  end
534
530
 
535
531
  # Set pagy locale from params or from avo configuration, if both nil locale = "en"
@@ -537,8 +533,12 @@ module Avo
537
533
  @pagy_locale = locale.to_s || Avo.configuration.locale || "en"
538
534
  end
539
535
 
540
- def apply_pagination
541
- @pagy, @models = @resource.apply_pagination(index_params: @index_params, query: @query)
536
+ def safe_call(method)
537
+ send(method) if respond_to?(method, true)
538
+ end
539
+
540
+ def pagy_query
541
+ @query
542
542
  end
543
543
  end
544
544
  end