avo 2.48.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 (376) 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 +15 -26
  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/hidden_field/edit_component.html.erb +1 -2
  40. data/app/components/avo/fields/index_component.rb +5 -5
  41. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  42. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  43. data/app/components/avo/fields/select_field/edit_component.html.erb +1 -1
  44. data/app/components/avo/fields/show_component.rb +4 -1
  45. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  46. data/app/components/avo/filters_component.html.erb +9 -3
  47. data/app/components/avo/filters_component.rb +4 -4
  48. data/app/components/avo/index/field_wrapper_component.rb +0 -12
  49. data/app/components/avo/index/grid_item_component.html.erb +13 -36
  50. data/app/components/avo/index/grid_item_component.rb +43 -16
  51. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  52. data/app/components/avo/index/resource_controls_component.rb +124 -17
  53. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  54. data/app/components/avo/index/resource_grid_component.rb +5 -2
  55. data/app/components/avo/index/resource_map_component.html.erb +1 -1
  56. data/app/components/avo/index/resource_map_component.rb +3 -3
  57. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  58. data/app/components/avo/index/resource_table_component.rb +14 -20
  59. data/app/components/avo/index/table_row_component.html.erb +8 -4
  60. data/app/components/avo/index/table_row_component.rb +3 -2
  61. data/app/components/avo/item_switcher_component.rb +2 -2
  62. data/app/components/avo/modal_component.html.erb +7 -12
  63. data/app/components/avo/modal_component.rb +0 -21
  64. data/app/components/avo/paginator_component.html.erb +40 -29
  65. data/app/components/avo/paginator_component.rb +5 -23
  66. data/app/components/avo/panel_component.html.erb +8 -6
  67. data/app/components/avo/referrer_params_component.html.erb +1 -2
  68. data/app/components/avo/resource_component.rb +189 -14
  69. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  70. data/app/components/avo/resource_sidebar_component.rb +1 -1
  71. data/app/components/avo/sidebar/link_component.rb +1 -1
  72. data/app/components/avo/sidebar_component.html.erb +10 -3
  73. data/app/components/avo/sidebar_component.rb +5 -3
  74. data/app/components/avo/sidebar_profile_component.html.erb +15 -8
  75. data/app/components/avo/tab_group_component.html.erb +13 -7
  76. data/app/components/avo/tab_group_component.rb +1 -6
  77. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  78. data/app/components/avo/tab_switcher_component.rb +4 -39
  79. data/app/components/avo/views/resource_edit_component.html.erb +12 -48
  80. data/app/components/avo/views/resource_edit_component.rb +7 -18
  81. data/app/components/avo/views/resource_index_component.html.erb +41 -47
  82. data/app/components/avo/views/resource_index_component.rb +62 -12
  83. data/app/components/avo/views/resource_show_component.html.erb +6 -149
  84. data/app/components/avo/views/resource_show_component.rb +6 -11
  85. data/app/controllers/avo/actions_controller.rb +27 -24
  86. data/app/controllers/avo/application_controller.rb +105 -151
  87. data/app/controllers/avo/associations_controller.rb +34 -43
  88. data/app/controllers/avo/attachments_controller.rb +4 -4
  89. data/app/controllers/avo/base_controller.rb +102 -102
  90. data/app/controllers/avo/debug_controller.rb +17 -5
  91. data/app/controllers/avo/home_controller.rb +1 -1
  92. data/app/controllers/avo/search_controller.rb +30 -51
  93. data/app/controllers/avo/team_users_controller.rb +4 -0
  94. data/app/controllers/concerns/avo/initializes_avo.rb +21 -0
  95. data/app/helpers/avo/application_helper.rb +15 -9
  96. data/app/helpers/avo/resources_helper.rb +1 -1
  97. data/app/helpers/avo/url_helpers.rb +27 -11
  98. data/app/javascript/avo.base.js +1 -0
  99. data/app/javascript/js/application.js +0 -3
  100. data/app/javascript/js/controllers/action_controller.js +5 -3
  101. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  102. data/app/javascript/js/controllers/fields/key_value_controller.js +1 -2
  103. data/app/javascript/js/controllers/filter_controller.js +1 -1
  104. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  105. data/app/javascript/js/controllers/preview_controller.js +24 -0
  106. data/app/javascript/js/controllers/search_controller.js +2 -2
  107. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  108. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  109. data/app/javascript/js/controllers.js +10 -6
  110. data/app/javascript/js/custom-stream-actions.js +15 -0
  111. data/app/views/avo/actions/keep_modal_open.turbo_stream.erb +5 -0
  112. data/app/views/avo/actions/show.html.erb +10 -7
  113. data/app/views/avo/associations/new.html.erb +2 -2
  114. data/app/views/avo/base/index.html.erb +3 -2
  115. data/app/views/avo/base/new.html.erb +2 -1
  116. data/app/views/avo/base/preview.html.erb +19 -0
  117. data/app/views/avo/base/show.html.erb +1 -1
  118. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  119. data/app/views/avo/debug/report.html.erb +32 -17
  120. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -14
  121. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  122. data/app/views/avo/partials/_footer.html.erb +1 -1
  123. data/app/views/avo/partials/_javascript.html.erb +5 -0
  124. data/app/views/avo/partials/_logo.html.erb +1 -1
  125. data/app/views/avo/partials/_navbar.html.erb +3 -5
  126. data/app/views/avo/partials/_table_header.html.erb +5 -11
  127. data/app/views/layouts/avo/application.html.erb +4 -2
  128. data/avo.gemspec +7 -7
  129. data/bin/dev +1 -1
  130. data/bin/prod +0 -0
  131. data/config/i18n-tasks.yml +1 -1
  132. data/config/initializers/pagy.rb +0 -2
  133. data/config/master.key +1 -0
  134. data/config/routes.rb +6 -10
  135. data/db/factories.rb +7 -1
  136. data/lib/avo/action_model.rb +20 -0
  137. data/lib/avo/asset_manager.rb +30 -0
  138. data/lib/avo/base_action.rb +57 -42
  139. data/lib/avo/base_resource.rb +264 -227
  140. data/lib/avo/base_resource_tool.rb +9 -16
  141. data/lib/avo/concerns/breadcrumbs.rb +2 -2
  142. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
  143. data/lib/avo/concerns/filters_session_handler.rb +5 -3
  144. data/lib/avo/concerns/has_controls.rb +37 -0
  145. data/lib/avo/concerns/has_description.rb +23 -0
  146. data/lib/avo/concerns/has_item_type.rb +42 -0
  147. data/lib/avo/concerns/has_items.rb +325 -0
  148. data/lib/avo/concerns/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
  149. data/lib/avo/concerns/is_resource_item.rb +24 -36
  150. data/lib/avo/concerns/is_visible.rb +15 -0
  151. data/lib/avo/concerns/model_class_constantized.rb +0 -2
  152. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  153. data/lib/avo/configuration/branding.rb +0 -12
  154. data/lib/avo/configuration.rb +1 -37
  155. data/lib/avo/current.rb +39 -0
  156. data/lib/avo/dsl/field_parser.rb +1 -1
  157. data/lib/avo/dynamic_router.rb +18 -3
  158. data/lib/avo/engine.rb +35 -30
  159. data/lib/avo/error_manager.rb +25 -0
  160. data/lib/avo/execution_context.rb +10 -14
  161. data/lib/avo/fields/badge_field.rb +1 -1
  162. data/lib/avo/fields/base_field.rb +91 -106
  163. data/lib/avo/fields/belongs_to_field.rb +18 -22
  164. data/lib/avo/fields/concerns/file_authorization.rb +2 -2
  165. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  166. data/lib/avo/fields/concerns/has_default.rb +1 -5
  167. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  168. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  169. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  170. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  171. data/lib/avo/fields/concerns/is_required.rb +5 -7
  172. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  173. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  174. data/lib/avo/fields/country_field.rb +4 -0
  175. data/lib/avo/fields/date_time_field.rb +1 -5
  176. data/lib/avo/fields/field_manager.rb +55 -0
  177. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  178. data/lib/avo/fields/has_base_field.rb +12 -15
  179. data/lib/avo/fields/has_many_field.rb +5 -2
  180. data/lib/avo/fields/has_one_field.rb +6 -10
  181. data/lib/avo/fields/heading_field.rb +4 -1
  182. data/lib/avo/fields/hidden_field.rb +1 -1
  183. data/lib/avo/fields/id_field.rb +1 -1
  184. data/lib/avo/fields/location_field.rb +8 -8
  185. data/lib/avo/fields/password_field.rb +1 -1
  186. data/lib/avo/fields/preview_field.rb +14 -0
  187. data/lib/avo/fields/select_field.rb +12 -8
  188. data/lib/avo/fields/status_field.rb +4 -0
  189. data/lib/avo/filters/base_filter.rb +8 -4
  190. data/lib/avo/html/builder.rb +7 -8
  191. data/lib/avo/item_grapher.rb +78 -0
  192. data/lib/avo/licensing/h_q.rb +8 -67
  193. data/lib/avo/licensing/license.rb +1 -1
  194. data/lib/avo/licensing/pro_license.rb +1 -7
  195. data/lib/avo/loaders/fields_loader.rb +7 -1
  196. data/lib/avo/plugin.rb +16 -0
  197. data/lib/avo/plugin_manager.rb +56 -0
  198. data/lib/avo/prefixed_test_helpers.rb +20 -0
  199. data/lib/avo/reloader.rb +3 -0
  200. data/lib/avo/resources/controls/actions_list.rb +7 -12
  201. data/lib/avo/resources/controls/attach_button.rb +15 -0
  202. data/lib/avo/resources/controls/back_button.rb +1 -1
  203. data/lib/avo/resources/controls/base_control.rb +15 -49
  204. data/lib/avo/resources/controls/create_button.rb +15 -0
  205. data/lib/avo/resources/controls/delete_button.rb +5 -1
  206. data/lib/avo/resources/controls/detach_button.rb +4 -1
  207. data/lib/avo/resources/controls/edit_button.rb +4 -1
  208. data/lib/avo/resources/controls/order_controls.rb +8 -0
  209. data/lib/avo/resources/controls/save_button.rb +13 -0
  210. data/lib/avo/resources/controls/show_button.rb +15 -0
  211. data/lib/avo/resources/items/holder.rb +84 -0
  212. data/lib/avo/resources/items/item_group.rb +49 -0
  213. data/lib/avo/resources/items/main_panel.rb +2 -0
  214. data/lib/avo/resources/items/panel.rb +2 -0
  215. data/lib/avo/resources/items/row.rb +54 -0
  216. data/lib/avo/resources/items/sidebar.rb +47 -0
  217. data/lib/avo/resources/items/tab.rb +60 -0
  218. data/lib/avo/resources/items/tab_group.rb +68 -0
  219. data/lib/avo/resources/resource_manager.rb +174 -0
  220. data/lib/avo/services/authorization_service.rb +11 -110
  221. data/lib/avo/services/debug_service.rb +93 -0
  222. data/lib/avo/services/encryption_service.rb +5 -1
  223. data/lib/avo/services/telemetry_service.rb +85 -0
  224. data/lib/avo/test_helpers.rb +362 -0
  225. data/lib/avo/tools/tool_manager.rb +30 -0
  226. data/lib/avo/version.rb +1 -1
  227. data/lib/avo.rb +115 -24
  228. data/lib/generators/avo/action_generator.rb +8 -8
  229. data/lib/generators/avo/card_generator.rb +27 -0
  230. data/lib/generators/avo/filter_generator.rb +8 -8
  231. data/lib/generators/avo/resource_generator.rb +4 -4
  232. data/lib/generators/avo/scope_generator.rb +15 -0
  233. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -15
  234. data/lib/generators/avo/templates/action.tt +8 -6
  235. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  236. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  237. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  238. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  239. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  240. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  241. data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
  242. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  243. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  244. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  245. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  246. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  247. data/lib/generators/avo/templates/initializer/avo.tt +1 -9
  248. data/lib/generators/avo/templates/locales/avo.ar.yml +6 -6
  249. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  250. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  251. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  252. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  253. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  254. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  255. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  256. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  257. data/lib/generators/avo/templates/resource/resource.tt +7 -7
  258. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  259. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  260. data/lib/generators/avo/templates/scope.tt +6 -0
  261. data/lib/generators/avo/templates/tool/view.tt +2 -2
  262. data/lib/tasks/avo_tasks.rake +27 -0
  263. data/public/avo-assets/avo.base.css +1810 -1189
  264. data/public/avo-assets/avo.base.js +217 -307
  265. data/public/avo-assets/avo.base.js.map +3 -3
  266. data/public/avo-assets/avo.css +9744 -0
  267. data/public/avo-assets/avo.js +513 -0
  268. data/public/avo-assets/avo.js.map +7 -0
  269. metadata +97 -139
  270. data/app/assets/stylesheets/css/tags.css +0 -32
  271. data/app/components/avo/card_component.html.erb +0 -46
  272. data/app/components/avo/card_component.rb +0 -25
  273. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  274. data/app/components/avo/dashboards/divider_component.rb +0 -19
  275. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  276. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  277. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  278. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  279. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  280. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  281. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  282. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  283. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  284. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  285. data/app/components/avo/index/ordering/base_component.rb +0 -9
  286. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  287. data/app/components/avo/index/ordering/button_component.rb +0 -23
  288. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  289. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  290. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  291. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  292. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  293. data/app/controllers/avo/dashboards_controller.rb +0 -22
  294. data/app/controllers/avo/reorder_controller.rb +0 -25
  295. data/app/javascript/js/controllers/base_controller.js +0 -22
  296. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  297. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  298. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  299. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  300. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  301. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  302. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  303. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  304. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  305. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  306. data/app/views/avo/dashboards/show.html.erb +0 -38
  307. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  308. data/app/views/avo/partials/_global_search.html.erb +0 -19
  309. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  310. data/lib/avo/app.rb +0 -237
  311. data/lib/avo/base_card.rb +0 -161
  312. data/lib/avo/concerns/fetches_things.rb +0 -150
  313. data/lib/avo/concerns/handles_field_args.rb +0 -47
  314. data/lib/avo/concerns/has_action_stimulus_controllers.rb +0 -15
  315. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  316. data/lib/avo/concerns/has_fields.rb +0 -334
  317. data/lib/avo/concerns/has_html_attributes.rb +0 -123
  318. data/lib/avo/concerns/pagination.rb +0 -53
  319. data/lib/avo/concerns/policy_helpers.rb +0 -31
  320. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  321. data/lib/avo/concerns/visible_items.rb +0 -51
  322. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  323. data/lib/avo/dashboards/base_divider.rb +0 -35
  324. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  325. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  326. data/lib/avo/dashboards/metric_card.rb +0 -9
  327. data/lib/avo/dashboards/partial_card.rb +0 -7
  328. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  329. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  330. data/lib/avo/fields/tags_field.rb +0 -102
  331. data/lib/avo/grid_collector.rb +0 -42
  332. data/lib/avo/hosts/association_scope_host.rb +0 -8
  333. data/lib/avo/hosts/base_host.rb +0 -25
  334. data/lib/avo/hosts/card_visibility.rb +0 -20
  335. data/lib/avo/hosts/dashboard_card.rb +0 -22
  336. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  337. data/lib/avo/hosts/ordering.rb +0 -22
  338. data/lib/avo/hosts/record_host.rb +0 -7
  339. data/lib/avo/hosts/resource_record_host.rb +0 -7
  340. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  341. data/lib/avo/hosts/search_scope_host.rb +0 -7
  342. data/lib/avo/hosts/view_record_host.rb +0 -7
  343. data/lib/avo/hosts/visibility_host.rb +0 -12
  344. data/lib/avo/items_holder.rb +0 -96
  345. data/lib/avo/main_panel.rb +0 -3
  346. data/lib/avo/menu/base_item.rb +0 -25
  347. data/lib/avo/menu/builder.rb +0 -82
  348. data/lib/avo/menu/dashboard.rb +0 -22
  349. data/lib/avo/menu/group.rb +0 -2
  350. data/lib/avo/menu/link.rb +0 -6
  351. data/lib/avo/menu/menu.rb +0 -2
  352. data/lib/avo/menu/resource.rb +0 -22
  353. data/lib/avo/menu/section.rb +0 -2
  354. data/lib/avo/panel.rb +0 -24
  355. data/lib/avo/panel_builder.rb +0 -25
  356. data/lib/avo/resources/controls/action.rb +0 -38
  357. data/lib/avo/resources/controls/execution_context.rb +0 -58
  358. data/lib/avo/resources/controls/items_holder.rb +0 -19
  359. data/lib/avo/resources/controls/link_to.rb +0 -27
  360. data/lib/avo/row.rb +0 -26
  361. data/lib/avo/row_builder.rb +0 -24
  362. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  363. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  364. data/lib/avo/sidebar.rb +0 -30
  365. data/lib/avo/sidebar_builder.rb +0 -24
  366. data/lib/avo/tab.rb +0 -72
  367. data/lib/avo/tab_builder.rb +0 -25
  368. data/lib/avo/tab_group.rb +0 -42
  369. data/lib/avo/tab_group_builder.rb +0 -43
  370. data/lib/avo/tools_manager.rb +0 -11
  371. data/lib/generators/avo/card/chartkick_generator.rb +0 -18
  372. data/lib/generators/avo/card/metric_generator.rb +0 -18
  373. data/lib/generators/avo/card/partial_generator.rb +0 -19
  374. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  375. data/lib/generators/avo/templates/standalone_action.tt +0 -8
  376. /data/app/components/avo/fields/common/files/view_type/{list_item_component.html.erb → list_component.html.erb} +0 -0
@@ -2,158 +2,15 @@
2
2
  data: {
3
3
  model_name: @resource.model_name.to_s,
4
4
  resource_name: @resource.class.to_s,
5
- model_id: @resource.model.id,
5
+ record_id: @resource.record.id,
6
6
  selected_resources_name: @resource.model_key,
7
- selected_resources: [@resource.model.id],
7
+ selected_resources: [@resource.record.id],
8
8
  **@resource.stimulus_data_attributes
9
9
  } do %>
10
- <%= render Avo::PanelComponent.new(name: title, description: @resource.resource_description, display_breadcrumbs: @reflection.blank?, index: 0, data: { panel_id: "main" }) do |c| %>
10
+ <%= render Avo::PanelComponent.new(name: title, description: @resource.description, display_breadcrumbs: @reflection.blank?, index: 0, data: { panel_id: "main" }) do |c| %>
11
11
  <% c.with_tools do %>
12
- <% if @resource.has_show_controls? %>
13
- <% @resource.render_show_controls.each do |control| %>
14
- <% if control.back_button? %>
15
- <%= a_link back_path,
16
- style: :text,
17
- title: control.title,
18
- data: {
19
- tippy: control.title ? :tooltip : nil,
20
- },
21
- icon: 'arrow-left' do %>
22
- <%= control.label %>
23
- <% end %>
24
- <% elsif control.delete_button? %>
25
- <% if can_see_the_destroy_button? %>
26
- <%= a_link helpers.resource_path(model: @resource.model, resource: @resource),
27
- style: :text,
28
- color: :red,
29
- icon: 'trash',
30
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
31
- title: control.title,
32
- data: {
33
- turbo_confirm: t('avo.are_you_sure', item: @resource.model.model_name.name.downcase),
34
- turbo_method: :delete,
35
- control: :destroy,
36
- tippy: control.title ? :tooltip : nil,
37
- 'resource-id': @resource.model.id,
38
- } do %>
39
- <%= control.label %>
40
- <% end %>
41
- <% end %>
42
- <% elsif can_act_on? && control.actions_list? %>
43
- <%= render Avo::ActionsComponent.new actions: @actions, resource: @resource, view: @view, exclude: control.exclude, include: control.include, style: control.style, color: control.color, label: control.label %>
44
- <% elsif control.edit_button? %>
45
- <% if @resource.authorization.authorize_action(:edit, raise_exception: false) %>
46
- <%= a_link edit_path,
47
- color: :primary,
48
- style: :primary,
49
- title: control.title,
50
- data: {
51
- tippy: control.title ? :tooltip : nil,
52
- },
53
- icon: 'edit' do %>
54
- <%= control.label %>
55
- <% end %>
56
- <% end %>
57
- <% elsif control.action? %>
58
- <% if render_action_control?(control.action) %>
59
- <%= a_link control.path,
60
- color: control.color,
61
- style: control.style,
62
- icon: control.icon,
63
- title: control.title,
64
- data: {
65
- tippy: control.title ? :tooltip : nil,
66
- 'turbo-frame': 'actions_show',
67
- 'action': 'click->actions-picker#visitAction',
68
- } do %>
69
- <%= control.label %>
70
- <% end %>
71
- <% end %>
72
- <% elsif control.link_to? %>
73
- <%= a_link control.path,
74
- color: control.color,
75
- style: control.style,
76
- icon: control.icon,
77
- title: control.title,
78
- target: control.target,
79
- class: control.class,
80
- data: {
81
- **control.data,
82
- tippy: control.title ? :tooltip : nil,
83
- } do %>
84
- <%= control.label %>
85
- <% end %>
86
- <% elsif control.detach_button? %>
87
- <% if @reflection.present? && @resource.model.present? && can_detach? %>
88
- <%= a_button url: detach_path,
89
- icon: 'detach',
90
- method: :delete,
91
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
92
- style: :text,
93
- data: {
94
- confirm: "Are you sure you want to detach this #{title}."
95
- } do %>
96
- <%= control.label %>
97
- <% end %>
98
- <% end %>
99
- <% end %>
100
- <% end %>
101
- <% else %>
102
- <% if @reflection.present? && @resource.model.present? %>
103
- <% if can_detach? %>
104
- <%= a_button url: detach_path,
105
- icon: 'detach',
106
- method: :delete,
107
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
108
- style: :text,
109
- data: {
110
- confirm: "Are you sure you want to detach this #{title}."
111
- } do %>
112
- <%= t('avo.detach_item', item: title).humanize %>
113
- <% end %>
114
- <% end %>
115
- <%= render Avo::ActionsComponent.new actions: @actions, resource: @resource, view: @view %>
116
- <% if can_see_the_edit_button? %>
117
- <%= a_link edit_path,
118
- color: :primary,
119
- style: :primary,
120
- icon: 'edit' do %>
121
- <%= t('avo.edit').capitalize %>
122
- <% end %>
123
- <% end %>
124
- <% else %>
125
- <%= a_link back_path,
126
- style: :text,
127
- icon: 'arrow-left' do %>
128
- <%= t('avo.go_back') %>
129
- <% end %>
130
- <% if can_see_the_destroy_button? %>
131
- <%= a_link destroy_path,
132
- style: :text,
133
- color: :red,
134
- icon: 'trash',
135
- form_class: 'flex flex-col sm:flex-row sm:inline-flex',
136
- data: {
137
- turbo_confirm: t('avo.are_you_sure', item: @resource.model.model_name.name.downcase),
138
- turbo_method: :delete,
139
- control: :destroy,
140
- 'resource-id': @resource.model.id,
141
- } do %>
142
- <%= t('avo.delete').capitalize %>
143
- <% end %>
144
- <% end %>
145
- <% if can_act_on? %>
146
- <%= render Avo::ActionsComponent.new actions: @actions, resource: @resource, view: @view %>
147
- <% end %>
148
- <% if @resource.authorization.authorize_action(:edit, raise_exception: false) %>
149
- <%= a_link edit_path,
150
- color: :primary,
151
- style: :primary,
152
- icon: 'edit' do %>
153
- <%= t('avo.edit').capitalize %>
154
- <% end %>
155
- <% end %>
156
- <% end %>
12
+ <% @resource.render_show_controls.each do |control| %>
13
+ <%= render_control control %>
157
14
  <% end %>
158
15
  <% end %>
159
16
  <% if main_panel.present? %>
@@ -162,7 +19,7 @@
162
19
  <div class="divide-y overflow-auto">
163
20
  <% main_panel.items.each_with_index do |field, index| %>
164
21
  <%= render field
165
- .hydrate(resource: @resource, model: @resource.model, user: @resource.user, view: view)
22
+ .hydrate(resource: @resource, record: @resource.record, user: @resource.user, view: view)
166
23
  .component_for_view(view)
167
24
  .new(field: field, resource: @resource, index: index, compact: sidebar.present?)
168
25
  %>
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
4
- include Avo::ResourcesHelper
5
4
  include Avo::ApplicationHelper
6
5
 
7
- def initialize(resource: nil, reflection: nil, parent_resource: nil, parent_model: nil, resource_panel: nil, actions: [])
6
+ def initialize(resource: nil, reflection: nil, parent_resource: nil, parent_record: nil, resource_panel: nil, actions: [])
8
7
  @resource = resource
9
8
  @reflection = reflection
10
9
  @resource_panel = resource_panel
11
10
  @actions = actions
12
- @parent_model = parent_model
11
+ @parent_record = parent_record
13
12
  @parent_resource = parent_resource
14
13
  @view = :show
15
14
  end
@@ -26,7 +25,7 @@ class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
26
25
 
27
26
  def back_path
28
27
  if via_resource?
29
- helpers.resource_path(model: association_resource.model_class, resource: association_resource, resource_id: params[:via_resource_id])
28
+ helpers.resource_path(record: association_resource.model_class, resource: association_resource, resource_id: params[:via_record_id])
30
29
  else
31
30
  helpers.resources_path(resource: @resource)
32
31
  end
@@ -38,20 +37,16 @@ class Avo::Views::ResourceShowComponent < Avo::ResourceComponent
38
37
  if via_resource?
39
38
  args = {
40
39
  via_resource_class: params[:via_resource_class],
41
- via_resource_id: params[:via_resource_id]
40
+ via_record_id: params[:via_record_id]
42
41
  }
43
42
  end
44
43
 
45
- helpers.edit_resource_path(model: @resource.model, resource: @resource, **args)
46
- end
47
-
48
- def render_action_control?(action)
49
- can_act_on? && action.visible_in_view(parent_resource: @parent_resource)
44
+ helpers.edit_resource_path(record: @resource.record, resource: @resource, **args)
50
45
  end
51
46
 
52
47
  private
53
48
 
54
- # In development and test environments we shoudl show the invalid field errors
49
+ # In development and test environments we should show the invalid field errors
55
50
  def should_display_invalid_fields_errors?
56
51
  (Rails.env.development? || Rails.env.test?) && @resource.invalid_fields.present?
57
52
  end
@@ -4,9 +4,9 @@ module Avo
4
4
  class ActionsController < ApplicationController
5
5
  before_action :set_resource_name
6
6
  before_action :set_resource
7
- before_action :set_model, only: :show, if: ->(request) do
8
- # Try to se the model only if the user is on the record page.
9
- # set_model will fail if it's tried to be used from the Index page.
7
+ before_action :set_record, only: :show, if: ->(request) do
8
+ # Try to se the record only if the user is on the record page.
9
+ # set_record will fail if it's tried to be used from the Index page.
10
10
  request.params[:id].present?
11
11
  end
12
12
  before_action :set_action, only: [:show, :handle]
@@ -15,7 +15,8 @@ module Avo
15
15
  # Se the view to :new so the default value gets prefilled
16
16
  @view = :new
17
17
 
18
- @resource.hydrate(model: @model, view: @view, user: _current_user, params: params)
18
+ @resource.hydrate(record: @record, view: @view, user: _current_user, params: params)
19
+ @record = ActionModel.new @action.get_attributes_for_action
19
20
  end
20
21
 
21
22
  def handle
@@ -30,12 +31,10 @@ module Avo
30
31
  resource: resource
31
32
  }
32
33
 
33
- unless @action.standalone
34
- args[:models] = if @selected_query.present?
35
- @resource.model_class.find_by_sql decrypted_query
36
- else
37
- @resource.find_record resource_ids, params: params
38
- end
34
+ args[:records] = if @selected_query.present?
35
+ @resource.model_class.find_by_sql decrypted_query
36
+ else
37
+ @resource.find_record resource_ids, params: params
39
38
  end
40
39
 
41
40
  performed_action = @action.handle_action(**args)
@@ -51,19 +50,17 @@ module Avo
51
50
 
52
51
  def set_action
53
52
  @action = action_class.new(
54
- model: @model,
53
+ record: @record,
55
54
  resource: @resource,
56
55
  user: _current_user,
57
56
  view: :new, # force the action view to in order to render new-related fields (hidden field)
58
- arguments: @resource.get_action_arguments(action_class)
57
+ arguments: decrypted_arguments || {}
59
58
  )
60
59
  end
61
60
 
62
61
  def action_class
63
- klass_name = params[:action_id].gsub("avo_actions_", "").camelize
64
-
65
62
  Avo::BaseAction.descendants.find do |action|
66
- action.to_s == klass_name
63
+ action.to_s == params[:action_id]
67
64
  end
68
65
  end
69
66
 
@@ -78,18 +75,14 @@ module Avo
78
75
  end
79
76
 
80
77
  respond_to do |format|
81
- format.turbo_stream do
78
+ format.html do
82
79
  # Flash the messages collected from the action
83
80
  flash_messages messages
84
81
 
85
82
  if response[:type] == :redirect
86
- render turbo_stream: turbo_stream.redirect_to(
87
- Avo::ExecutionContext.new(target: response[:path]).handle,
88
- nil,
89
- response[:redirect_args][:turbo_frame],
90
- **response[:redirect_args].except(:turbo_frame)
91
- )
92
- else
83
+ redirect_to Avo::ExecutionContext.new(target: response[:path]).handle,
84
+ **{allow_other_host: response[:allow_other_host], status: response[:status]}.compact
85
+ elsif response[:type] == :reload
93
86
  redirect_back fallback_location: resources_path(resource: @resource)
94
87
  end
95
88
  end
@@ -119,6 +112,16 @@ module Avo
119
112
  )
120
113
  end
121
114
 
115
+ def decrypted_arguments
116
+ arguments = params[:arguments] || params.dig(:fields, :arguments)
117
+ return if arguments.blank?
118
+
119
+ Avo::Services::EncryptionService.decrypt(
120
+ message: Base64.decode64(arguments),
121
+ purpose: :action_arguments
122
+ )
123
+ end
124
+
122
125
  def flash_messages(messages)
123
126
  messages.each do |message|
124
127
  flash[message[:type]] = message[:body]
@@ -130,7 +133,7 @@ module Avo
130
133
 
131
134
  respond_to do |format|
132
135
  format.turbo_stream do
133
- render partial: "avo/partials/flash_alerts"
136
+ render "keep_modal_open"
134
137
  end
135
138
  end
136
139
  end