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,18 +2,18 @@ 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]
6
+ before_action :hydrate_resource, only: [:show, :index, :new, :create, :destroy]
7
7
  before_action :set_related_resource_name
8
- before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy, :order]
8
+ before_action :set_related_resource, only: [:show, :index, :new, :create, :destroy]
9
9
  before_action :set_related_authorization
10
10
  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]
11
+ before_action :set_related_record, only: [:show]
12
+ before_action :hydrate_related_resource, only: [:show, :index, :create, :destroy]
13
13
  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]
14
+ before_action :set_attachment_class, only: [:show, :index, :new, :create, :destroy]
15
+ before_action :set_attachment_resource, only: [:show, :index, :new, :create, :destroy]
16
+ before_action :set_attachment_record, only: [:create, :destroy]
17
17
  before_action :authorize_index_action, only: :index
18
18
  before_action :authorize_attach_action, only: :new
19
19
  before_action :authorize_detach_action, only: :destroy
@@ -21,55 +21,55 @@ module Avo
21
21
  def index
22
22
  @parent_resource = @resource.dup
23
23
  @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)
24
+ @parent_record = @parent_resource.find_record(params[:id], params: params)
25
+ @parent_resource.hydrate(record: @parent_record)
26
+ association_name = BaseResource.valid_association_name(@parent_record, params[:related_name])
27
+ @query = @related_authorization.apply_policy @parent_record.send(association_name)
28
28
  @association_field = @parent_resource.get_field params[:related_name]
29
29
 
30
30
  if @association_field.present? && @association_field.scope.present?
31
- @query = Avo::Hosts::AssociationScopeHost.new(block: @association_field.scope, query: @query, parent: @parent_model).handle
31
+ @query = Avo::ExecutionContext.new(target: @association_field.scope, query: @query, parent: @parent_record).handle
32
32
  end
33
33
 
34
34
  super
35
35
  end
36
36
 
37
37
  def show
38
- @parent_resource, @parent_model = @resource, @model
38
+ @parent_resource, @parent_record = @resource, @record
39
39
 
40
- @resource, @model = @related_resource, @related_model
40
+ @resource, @record = @related_resource, @related_record
41
41
 
42
42
  super
43
43
  end
44
44
 
45
45
  def new
46
- @resource.hydrate(model: @model)
46
+ @resource.hydrate(record: @record)
47
47
 
48
- if @field.present? && !@field.searchable
48
+ if @field.present? && !@field.is_searchable?
49
49
  query = @related_authorization.apply_policy @attachment_class
50
50
 
51
51
  # Add the association scope to the query scope
52
52
  if @field.attach_scope.present?
53
- query = Avo::Hosts::AssociationScopeHost.new(block: @field.attach_scope, query: query, parent: @model).handle
53
+ query = Avo::ExecutionContext.new(target: @field.attach_scope, query: query, parent: @record).handle
54
54
  end
55
55
 
56
- @options = query.all.map do |model|
57
- [model.send(@attachment_resource.class.title), model.id]
56
+ @options = query.all.map do |record|
57
+ [record.send(@attachment_resource.class.title), record.id]
58
58
  end
59
59
  end
60
60
  end
61
61
 
62
62
  def create
63
- association_name = BaseResource.valid_association_name(@model, params[:related_name])
63
+ association_name = BaseResource.valid_association_name(@record, params[:related_name])
64
64
 
65
65
  if reflection_class == "HasManyReflection"
66
- @model.send(association_name) << @attachment_model
66
+ @record.send(association_name) << @attachment_record
67
67
  else
68
- @model.send("#{association_name}=", @attachment_model)
68
+ @record.send("#{association_name}=", @attachment_record)
69
69
  end
70
70
 
71
71
  respond_to do |format|
72
- if @model.save
72
+ if @record.save
73
73
  format.html { redirect_back fallback_location: resource_view_response_path, notice: t("avo.attachment_class_attached", attachment_class: @related_resource.name) }
74
74
  else
75
75
  format.html { render :new }
@@ -78,12 +78,12 @@ module Avo
78
78
  end
79
79
 
80
80
  def destroy
81
- association_name = BaseResource.valid_association_name(@model, params[:related_name])
81
+ association_name = BaseResource.valid_association_name(@record, params[:related_name])
82
82
 
83
83
  if reflection_class == "HasManyReflection"
84
- @model.send(association_name).delete @attachment_model
84
+ @record.send(association_name).delete @attachment_record
85
85
  else
86
- @model.send("#{association_name}=", nil)
86
+ @record.send("#{association_name}=", nil)
87
87
  end
88
88
 
89
89
  respond_to do |format|
@@ -91,17 +91,10 @@ module Avo
91
91
  end
92
92
  end
93
93
 
94
- def order
95
- @parent_resource = @resource.dup
96
- @resource, @model = @related_resource, @related_model
97
-
98
- super
99
- end
100
-
101
94
  private
102
95
 
103
96
  def set_reflection
104
- @reflection = @model._reflections[params[:related_name].to_s]
97
+ @reflection = @record._reflections[params[:related_name].to_s]
105
98
  end
106
99
 
107
100
  def set_attachment_class
@@ -109,16 +102,16 @@ module Avo
109
102
  end
110
103
 
111
104
  def set_attachment_resource
112
- @attachment_resource = @field.use_resource || (App.get_resource_by_model_name @attachment_class)
105
+ @attachment_resource = @field.use_resource || (Avo::App.resources.get_resource_by_model_class @attachment_class)
113
106
  end
114
107
 
115
- def set_attachment_model
116
- @attachment_model = @related_resource.find_record attachment_id, params: params
108
+ def set_attachment_record
109
+ @attachment_record = @related_resource.find_record attachment_id, params: params
117
110
  end
118
111
 
119
112
  def set_reflection_field
120
113
  @field = @resource.get_field_definitions.find { |f| f.id == @related_resource_name.to_sym }
121
- @field.hydrate(resource: @resource, model: @model, view: :new)
114
+ @field.hydrate(resource: @resource, record: @record, view: :new)
122
115
  rescue
123
116
  end
124
117
 
@@ -127,7 +120,7 @@ module Avo
127
120
  end
128
121
 
129
122
  def reflection_class
130
- reflection = @model._reflections[params[:related_name]]
123
+ reflection = @record._reflections[params[:related_name]]
131
124
 
132
125
  klass = reflection.class.name.demodulize.to_s
133
126
  klass = reflection.through_reflection.class.name.demodulize.to_s if klass == "ThroughReflection"
@@ -136,7 +129,7 @@ module Avo
136
129
  end
137
130
 
138
131
  def authorize_if_defined(method)
139
- @authorization.set_record(@model)
132
+ @authorization.set_record(@record)
140
133
 
141
134
  if @authorization.has_method?(method.to_sym)
142
135
  @authorization.authorize_action method.to_sym
@@ -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
- 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])
10
+ blob = ActiveStorage::Blob.create_and_upload! io: params[:file], filename: params[:filename]
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),
@@ -23,31 +23,16 @@ module Avo
23
23
  end
24
24
 
25
25
  def destroy
26
- if authorized_to :delete
27
- attachment = ActiveStorage::Attachment.find(params[:attachment_id])
26
+ attachment = ActiveStorage::Attachment.find(params[:attachment_id])
27
+ path = resource_path(record: @record, resource: @resource)
28
28
 
29
- flash[:notice] = if attachment.present?
30
- @destroyed = attachment.destroy
29
+ if attachment.present?
30
+ attachment.destroy
31
31
 
32
- t("avo.attachment_destroyed")
33
- else
34
- t("avo.failed_to_find_attachment")
35
- end
32
+ redirect_to params[:referrer] || path, notice: t("avo.attachment_destroyed")
36
33
  else
37
- flash[:notice] = t("avo.not_authorized")
34
+ redirect_back fallback_location: path, notice: t("avo.failed_to_find_attachment")
38
35
  end
39
-
40
- respond_to do |format|
41
- format.turbo_stream do
42
- render "destroy"
43
- end
44
- end
45
- end
46
-
47
- private
48
-
49
- def authorized_to(action)
50
- @resource.authorization.authorize_action("#{action}_#{params[:attachment_name]}?", record: @model, raise_exception: false)
51
36
  end
52
37
  end
53
38
  end
@@ -8,12 +8,12 @@ module Avo
8
8
  before_action :set_resource
9
9
  before_action :hydrate_resource
10
10
  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
11
+ before_action :set_record, only: [:show, :edit, :destroy, :update, :preview]
12
+ before_action :set_record_to_fill
13
13
  before_action :set_edit_title_and_breadcrumbs, only: [:edit, :update]
14
- before_action :fill_model, only: [:create, :update]
14
+ before_action :fill_record, only: [:create, :update]
15
15
  # Don't run base authorizations for associations
16
- before_action :authorize_base_action, if: -> { controller_name != "associations" }
16
+ before_action :authorize_base_action, except: :preview, if: -> { controller_name != "associations" }
17
17
  before_action :set_pagy_locale, only: :index
18
18
 
19
19
  def index
@@ -65,57 +65,73 @@ module Avo
65
65
  ).apply_query request, @query, filter_value
66
66
  end
67
67
 
68
- apply_pagination
68
+ extra_pagy_params = {}
69
69
 
70
- # Create resources for each model
71
- @resources = @models.map do |model|
72
- @resource.hydrate(model: model, params: params).dup
70
+ # Reset open filters when a user navigates to a new page
71
+ extra_pagy_params[:keep_filters_panel_open] = if params[:keep_filters_panel_open] == "1"
72
+ "0"
73
+ end
74
+
75
+ safe_call :set_and_apply_scopes
76
+
77
+ if Avo.avo_filters_installed? && params[AvoFilters.configuration.param_key].present?
78
+ # Apply dynamic filters
79
+ query_builder = AvoFilters::QueryBuilder.new(resource: @resource, params: params, query: @query)
80
+ @query = @query.ransack(**query_builder.ransack_query)
81
+ end
82
+
83
+ pagy_query = if @query.instance_of?(Ransack::Search)
84
+ @query.result(distinct: false)
85
+ else
86
+ @query
87
+ end
88
+
89
+ @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)
90
+
91
+ # Create resources for each record
92
+ @resources = @records.map do |record|
93
+ @resource.hydrate(record: record, params: params).dup
73
94
  end
74
95
  end
75
96
 
76
97
  def show
77
- @resource.hydrate(model: @model, view: :show, user: _current_user, params: params)
98
+ @resource.hydrate(record: @record, view: :show, user: _current_user, params: params)
78
99
 
79
100
  set_actions
80
101
 
81
102
  @page_title = @resource.default_panel_name.to_s
82
103
 
83
104
  # 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
105
+ if params[:via_resource_class].present? && params[:via_record_id].present?
106
+ via_resource = Avo::App.resources.get_resource(params[:via_resource_class]).dup
107
+ via_record = via_resource.find_record params[:via_record_id], params: params
108
+ via_resource.hydrate record: via_record
88
109
 
89
110
  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)
111
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
91
112
  else
92
113
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
93
114
  end
94
115
 
95
- add_breadcrumb @resource.model_title
116
+ add_breadcrumb @resource.record_title
96
117
  add_breadcrumb I18n.t("avo.details").upcase_first
97
118
  end
98
119
 
99
120
  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
121
+ @record = @resource.model_class.new
122
+ @resource = @resource.hydrate(record: @record, view: :new, user: _current_user)
107
123
 
108
124
  set_actions
109
125
 
110
126
  @page_title = @resource.default_panel_name.to_s
111
127
 
112
128
  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
129
+ via_resource = Avo::App.resources.get_resource_by_model_class(params[:via_relation_class]).dup
130
+ via_record = via_resource.find_record params[:via_record_id], params: params
131
+ via_resource.hydrate record: via_record
116
132
 
117
133
  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)
134
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
119
135
  end
120
136
 
121
137
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
@@ -123,38 +139,33 @@ module Avo
123
139
  end
124
140
 
125
141
  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)
142
+ # record gets instantiated and filled in the fill_record method
143
+ saved = save_record
144
+ @resource.hydrate(record: @record, view: :new, user: _current_user)
129
145
 
130
146
  # 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]]
147
+ if params[:via_record_id].present?
148
+ @reflection = @record._reflections[params[:via_relation]]
133
149
  # Figure out what kind of association does the record have with the parent record
134
150
 
135
151
  # Fills in the required infor for belongs_to and has_many
136
152
  # Get the foreign key and set it to the id we received in the params
137
153
  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
154
+ related_resource = Avo::App.resources.get_resource_by_model_class params[:via_relation_class]
155
+ related_record = related_resource.find_record params[:via_record_id], params: params
140
156
 
141
- @model.send("#{@reflection.foreign_key}=", related_record.id)
142
- @model.save
157
+ @record.send("#{@reflection.foreign_key}=", related_record.id)
158
+ @record.save
143
159
  end
144
160
 
145
161
  # For when working with has_one, has_one_through, has_many_through, has_and_belongs_to_many, polymorphic
146
162
  if @reflection.is_a? ActiveRecord::Reflection::ThroughReflection
147
163
  # 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])
151
-
152
- if params[:via_association_type] == "has_one"
153
- # On has_one scenarios we should switch the @record and @related_record
154
- @related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @model)
155
- else
156
- @model.send(association_name) << @related_record
157
- end
164
+ via_resource = ::Avo::App.resources.get_resource_by_model_class(params[:via_relation_class]).dup
165
+ @related_record = via_resource.find_record params[:via_record_id], params: params
166
+ association_name = BaseResource.valid_association_name(@record, params[:via_relation])
167
+
168
+ @record.send(association_name) << @related_record
158
169
  end
159
170
  end
160
171
 
@@ -174,9 +185,9 @@ module Avo
174
185
  end
175
186
 
176
187
  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)
188
+ # record gets instantiated and filled in the fill_record method
189
+ saved = save_record
190
+ @resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
180
191
  set_actions
181
192
 
182
193
  if saved
@@ -194,55 +205,38 @@ module Avo
194
205
  end
195
206
  end
196
207
 
197
- def order
198
- direction = params[:direction].to_sym
208
+ def preview
209
+ @resource.hydrate(record: @record, view: :show, user: _current_user, params: params)
199
210
 
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
211
+ render layout: params[:turbo_frame].blank?
210
212
  end
211
213
 
212
214
  private
213
215
 
214
- def save_model
216
+ def save_record
215
217
  perform_action_and_record_errors do
216
- save_model_action
218
+ @record.save!
217
219
  end
218
220
  end
219
221
 
220
- def save_model_action
221
- @model.save!
222
- end
223
-
224
222
  def destroy_model
225
223
  perform_action_and_record_errors do
226
- destroy_model_action
224
+ @record.destroy!
227
225
  end
228
226
  end
229
227
 
230
- def destroy_model_action
231
- @model.destroy!
232
- end
233
-
234
228
  def perform_action_and_record_errors(&block)
235
229
  begin
236
230
  succeeded = block.call
237
231
  rescue => exception
238
- # In case there's an error somewhere else than the model
232
+ # In case there's an error somewhere else than the record
239
233
  # Example: When you save a license that should create a user for it and creating that user throws and error.
240
234
  # Example: When you Try to delete a record and has a foreign key constraint.
241
235
  exception_message = exception.message
242
236
  end
243
237
 
244
- # Add the errors from the model
245
- @errors = @model.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
238
+ # Add the errors from the record
239
+ @errors = @record.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
246
240
 
247
241
  succeeded
248
242
  end
@@ -259,7 +253,7 @@ module Avo
259
253
  end
260
254
 
261
255
  def permitted_params
262
- @resource.get_field_definitions.select(&:updatable).map(&:to_permitted_param).concat(extra_params).uniq
256
+ @resource.get_field_definitions.select(&:updatable).map(&:to_permitted_param).concat extra_params
263
257
  end
264
258
 
265
259
  def extra_params
@@ -300,7 +294,7 @@ module Avo
300
294
  @index_params[:per_page] = cookies[:per_page]
301
295
  end
302
296
 
303
- if @parent_model.present?
297
+ if @parent_record.present?
304
298
  @index_params[:per_page] = Avo.configuration.via_per_page
305
299
  end
306
300
 
@@ -338,7 +332,7 @@ module Avo
338
332
  @actions = @resource
339
333
  .get_actions
340
334
  .map do |action|
341
- action[:class].new(model: @model, resource: @resource, view: @view, arguments: action[:arguments])
335
+ action[:class].new(record: @record, resource: @resource, view: @view, arguments: action[:arguments])
342
336
  end
343
337
  .select do |action|
344
338
  action.visible_in_view(parent_resource: @parent_resource)
@@ -392,45 +386,41 @@ module Avo
392
386
  end
393
387
 
394
388
  def set_edit_title_and_breadcrumbs
395
- @resource = @resource.hydrate(model: @model, view: :edit, user: _current_user)
389
+ @resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
396
390
  @page_title = @resource.default_panel_name.to_s
397
391
 
398
392
  last_crumb_args = {}
399
393
  # 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
394
+ if params[:via_resource_class].present? && params[:via_record_id].present?
395
+ via_resource = Avo::App.resources.get_resource(params[:via_resource_class]).dup
396
+ via_record = via_resource.find_record params[:via_record_id], params: params
397
+ via_resource.hydrate record: via_record
404
398
 
405
399
  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)
400
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
407
401
 
408
402
  last_crumb_args = {
409
403
  via_resource_class: params[:via_resource_class],
410
- via_resource_id: params[:via_resource_id]
404
+ via_record_id: params[:via_record_id]
411
405
  }
412
406
  else
413
407
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
414
408
  end
415
409
 
416
- add_breadcrumb @resource.model_title, resource_path(model: @resource.model, resource: @resource, **last_crumb_args)
410
+ add_breadcrumb @resource.record_title, resource_path(record: @resource.record, resource: @resource, **last_crumb_args)
417
411
  add_breadcrumb t("avo.edit").humanize
418
412
  end
419
413
 
420
414
  def create_success_action
421
- return render "close_modal_and_reload_field" if params[:via_belongs_to_resource_class].present?
422
-
423
415
  respond_to do |format|
424
416
  format.html { redirect_to after_create_path, notice: create_success_message}
425
417
  end
426
418
  end
427
419
 
428
420
  def create_fail_action
429
- flash.now[:error] = create_fail_message
430
-
431
421
  respond_to do |format|
422
+ flash.now[:error] = create_fail_message
432
423
  format.html { render :new, status: :unprocessable_entity }
433
- format.turbo_stream { render "create_fail_action" }
434
424
  end
435
425
  end
436
426
 
@@ -445,13 +435,13 @@ module Avo
445
435
  def after_create_path
446
436
  # If this is an associated record return to the association show page
447
437
  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])
438
+ parent_resource = ::Avo::App.resources.get_resource_by_model_class(params[:via_relation_class]).dup
439
+ association_name = BaseResource.valid_association_name(@record, params[:via_relation])
450
440
 
451
441
  return resource_view_path(
452
- model: @model.send(association_name),
442
+ record: @record.send(association_name),
453
443
  resource: parent_resource,
454
- resource_id: params[:via_resource_id]
444
+ resource_id: params[:via_record_id]
455
445
  )
456
446
  end
457
447
 
@@ -487,7 +477,7 @@ module Avo
487
477
 
488
478
  # Needs a different name, otwherwise, in some places, this can be called instead helpers.resource_view_path
489
479
  def resource_view_response_path
490
- helpers.resource_view_path(model: @model, resource: @resource)
480
+ helpers.resource_view_path(record: @record, resource: @resource)
491
481
  end
492
482
 
493
483
  def destroy_success_action
@@ -497,10 +487,8 @@ module Avo
497
487
  end
498
488
 
499
489
  def destroy_fail_action
500
- flash[:error] = destroy_fail_message
501
-
502
490
  respond_to do |format|
503
- format.turbo_stream { render partial: "avo/partials/flash_alerts" }
491
+ 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
492
  end
505
493
  end
506
494
 
@@ -522,14 +510,14 @@ module Avo
522
510
  if @resource.class.send(action) == :index
523
511
  resources_path(resource: @resource)
524
512
  elsif @resource.class.send(action) == :edit || Avo.configuration.resource_default_view == :edit
525
- edit_resource_path(resource: @resource, model: @resource.model)
513
+ edit_resource_path(resource: @resource, record: @resource.record)
526
514
  else
527
- resource_path(model: @model, resource: @resource)
515
+ resource_path(record: @record, resource: @resource)
528
516
  end
529
517
  end
530
518
 
531
519
  def is_associated_record?
532
- params[:via_relation_class].present? && params[:via_resource_id].present?
520
+ params[:via_relation_class].present? && params[:via_record_id].present?
533
521
  end
534
522
 
535
523
  # Set pagy locale from params or from avo configuration, if both nil locale = "en"
@@ -537,8 +525,8 @@ module Avo
537
525
  @pagy_locale = locale.to_s || Avo.configuration.locale || "en"
538
526
  end
539
527
 
540
- def apply_pagination
541
- @pagy, @models = @resource.apply_pagination(index_params: @index_params, query: @query)
528
+ def safe_call(method)
529
+ send(method) if respond_to?(method, true)
542
530
  end
543
531
  end
544
532
  end
@@ -2,7 +2,19 @@ require_dependency "avo/application_controller"
2
2
 
3
3
  module Avo
4
4
  class DebugController < ApplicationController
5
- def index
5
+ def status
6
+ end
7
+
8
+ def send_to_hq
9
+ url = "#{ENV["HQ_URL"]}/api/v3/debug_requests"
10
+ timeout = 10 # seconds
11
+ license_key = Avo::Services::DebugService.debug_report(request)[:hq_payload][:license_key]
12
+ body = params[:body]
13
+ body = {license_key: license_key, body: body, payload: Avo::Services::DebugService.debug_report(request).to_json}.to_json
14
+
15
+ HTTParty.post url, body: body, headers: {"Content-Type": "application/json"}, timeout: timeout
16
+
17
+ render turbo_stream: turbo_stream.replace(:send_to_hq, plain: "Payload sent to Avo HQ.")
6
18
  end
7
19
 
8
20
  def report
@@ -13,13 +25,13 @@ module Avo
13
25
 
14
26
  if license.valid?
15
27
  flash[:notice] = "avohq.io responded: \"#{license.id.humanize} license is valid\"."
16
- elsif license.response['reason'].present?
17
- flash[:error] = "avohq.io responded: \"#{license.response['reason']}\"."
28
+ elsif license.response["reason"].present?
29
+ flash[:error] = "avohq.io responded: \"#{license.response["reason"]}\"."
18
30
  else
19
- flash[:error] = license.response['error']
31
+ flash[:error] = license.response["error"]
20
32
  end
21
33
 
22
- redirect_back fallback_location: avo.avo_private_debug_index_path
34
+ redirect_back fallback_location: avo.avo_private_status_path
23
35
  end
24
36
  end
25
37
  end