avo 2.46.0 → 3.0.2

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 (409) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +28 -26
  3. data/Gemfile.lock +231 -161
  4. data/README.md +19 -27
  5. data/Rakefile +2 -0
  6. data/app/assets/stylesheets/avo.base.css +1 -1
  7. data/app/assets/svgs/font.svg +1 -0
  8. data/app/assets/svgs/triangle-up.svg +1 -0
  9. data/app/components/avo/actions_component.html.erb +19 -5
  10. data/app/components/avo/actions_component.rb +39 -19
  11. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  12. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  13. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  14. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  15. data/app/components/avo/base_component.rb +15 -12
  16. data/app/components/avo/button_component.rb +20 -3
  17. data/app/components/avo/empty_state_component.rb +1 -1
  18. data/app/components/avo/field_wrapper_component.html.erb +1 -1
  19. data/app/components/avo/field_wrapper_component.rb +12 -29
  20. data/app/components/avo/fields/area_field/edit_component.html.erb +2 -2
  21. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +75 -79
  22. data/app/components/avo/fields/belongs_to_field/edit_component.rb +7 -7
  23. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  24. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  25. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -1
  26. data/app/components/avo/fields/boolean_field/index_component.html.erb +1 -1
  27. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  28. data/app/components/avo/fields/common/badge_viewer_component.rb +1 -1
  29. data/app/components/avo/fields/common/boolean_check_component.html.erb +1 -12
  30. data/app/components/avo/fields/common/boolean_check_component.rb +2 -1
  31. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  32. data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +2 -2
  33. data/app/components/avo/fields/common/gravatar_viewer_component.html.erb +1 -1
  34. data/app/components/avo/fields/common/gravatar_viewer_component.rb +2 -2
  35. data/app/components/avo/fields/common/heading_component.html.erb +3 -8
  36. data/app/components/avo/fields/common/heading_component.rb +1 -3
  37. data/app/components/avo/fields/common/key_value_component.html.erb +2 -2
  38. data/app/components/avo/fields/common/key_value_component.rb +2 -2
  39. data/app/components/avo/fields/common/progress_bar_component.rb +3 -9
  40. data/app/components/avo/fields/common/status_viewer_component.html.erb +3 -0
  41. data/app/components/avo/fields/edit_component.rb +2 -2
  42. data/app/components/avo/fields/external_image_field/index_component.html.erb +1 -1
  43. data/app/components/avo/fields/file_field/index_component.html.erb +2 -2
  44. data/app/components/avo/fields/gravatar_field/index_component.html.erb +1 -1
  45. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  46. data/app/components/avo/fields/has_one_field/show_component.html.erb +3 -2
  47. data/app/components/avo/fields/has_one_field/show_component.rb +2 -2
  48. data/app/components/avo/fields/heading_field/edit_component.html.erb +1 -1
  49. data/app/components/avo/fields/heading_field/show_component.html.erb +1 -1
  50. data/app/components/avo/fields/id_field/index_component.html.erb +1 -1
  51. data/app/components/avo/fields/index_component.rb +6 -6
  52. data/app/components/avo/fields/location_field/edit_component.html.erb +12 -10
  53. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  54. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  55. data/app/components/avo/fields/select_field/edit_component.html.erb +1 -1
  56. data/app/components/avo/fields/show_component.rb +5 -2
  57. data/app/components/avo/fields/text_field/index_component.html.erb +1 -1
  58. data/app/components/avo/fields/trix_field/edit_component.html.erb +2 -2
  59. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  60. data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
  61. data/app/components/avo/filters_component.html.erb +9 -3
  62. data/app/components/avo/filters_component.rb +4 -4
  63. data/app/components/avo/index/field_wrapper_component.rb +1 -13
  64. data/app/components/avo/index/grid_item_component.html.erb +13 -36
  65. data/app/components/avo/index/grid_item_component.rb +43 -16
  66. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  67. data/app/components/avo/index/resource_controls_component.rb +125 -18
  68. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  69. data/app/components/avo/index/resource_grid_component.rb +5 -2
  70. data/app/components/avo/index/resource_map_component.html.erb +1 -1
  71. data/app/components/avo/index/resource_map_component.rb +3 -3
  72. data/app/components/avo/index/resource_table_component.html.erb +3 -2
  73. data/app/components/avo/index/resource_table_component.rb +8 -7
  74. data/app/components/avo/index/table_row_component.html.erb +9 -5
  75. data/app/components/avo/index/table_row_component.rb +3 -2
  76. data/app/components/avo/items/panel_component.html.erb +25 -0
  77. data/app/components/avo/items/panel_component.rb +43 -0
  78. data/app/components/avo/items/switcher_component.html.erb +17 -0
  79. data/app/components/avo/items/switcher_component.rb +79 -0
  80. data/app/components/avo/items/visible_items_component.html.erb +10 -0
  81. data/app/components/avo/items/visible_items_component.rb +11 -0
  82. data/app/components/avo/modal_component.html.erb +3 -4
  83. data/app/components/avo/paginator_component.html.erb +1 -1
  84. data/app/components/avo/paginator_component.rb +6 -6
  85. data/app/components/avo/panel_component.html.erb +7 -5
  86. data/app/components/avo/referrer_params_component.html.erb +1 -1
  87. data/app/components/avo/resource_component.rb +205 -26
  88. data/app/components/avo/resource_sidebar_component.html.erb +15 -18
  89. data/app/components/avo/resource_sidebar_component.rb +5 -3
  90. data/app/components/avo/sidebar/link_component.rb +1 -1
  91. data/app/components/avo/sidebar_component.html.erb +10 -3
  92. data/app/components/avo/sidebar_component.rb +5 -3
  93. data/app/components/avo/sidebar_profile_component.html.erb +18 -12
  94. data/app/components/avo/tab_group_component.html.erb +14 -8
  95. data/app/components/avo/tab_group_component.rb +1 -6
  96. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  97. data/app/components/avo/tab_switcher_component.rb +6 -41
  98. data/app/components/avo/views/resource_edit_component.html.erb +23 -86
  99. data/app/components/avo/views/resource_edit_component.rb +20 -19
  100. data/app/components/avo/views/resource_index_component.html.erb +42 -47
  101. data/app/components/avo/views/resource_index_component.rb +76 -13
  102. data/app/components/avo/views/resource_show_component.html.erb +16 -177
  103. data/app/components/avo/views/resource_show_component.rb +16 -10
  104. data/app/controllers/avo/actions_controller.rb +29 -31
  105. data/app/controllers/avo/application_controller.rb +119 -180
  106. data/app/controllers/avo/associations_controller.rb +34 -43
  107. data/app/controllers/avo/attachments_controller.rb +4 -4
  108. data/app/controllers/avo/base_controller.rb +139 -91
  109. data/app/controllers/avo/debug_controller.rb +17 -5
  110. data/app/controllers/avo/home_controller.rb +1 -1
  111. data/app/controllers/avo/search_controller.rb +56 -50
  112. data/app/controllers/concerns/avo/initializes_avo.rb +22 -0
  113. data/app/helpers/avo/application_helper.rb +18 -8
  114. data/app/helpers/avo/resources_helper.rb +1 -1
  115. data/app/helpers/avo/url_helpers.rb +28 -12
  116. data/app/javascript/avo.base.js +1 -0
  117. data/app/javascript/js/controllers/action_controller.js +5 -3
  118. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  119. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +7 -7
  120. data/app/javascript/js/controllers/filter_controller.js +1 -1
  121. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  122. data/app/javascript/js/controllers/preview_controller.js +24 -0
  123. data/app/javascript/js/controllers/search_controller.js +4 -2
  124. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  125. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  126. data/app/javascript/js/controllers.js +11 -5
  127. data/app/javascript/js/custom-stream-actions.js +15 -0
  128. data/app/views/avo/actions/show.html.erb +10 -6
  129. data/app/views/avo/associations/new.html.erb +2 -2
  130. data/app/views/avo/base/_new_via_belongs_to.html.erb +1 -1
  131. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +3 -3
  132. data/app/views/avo/base/create_fail_action.turbo_stream.erb +2 -2
  133. data/app/views/avo/base/edit.html.erb +1 -1
  134. data/app/views/avo/base/index.html.erb +4 -3
  135. data/app/views/avo/base/new.html.erb +2 -1
  136. data/app/views/avo/base/preview.html.erb +19 -0
  137. data/app/views/avo/base/show.html.erb +2 -2
  138. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  139. data/app/views/avo/debug/report.html.erb +32 -17
  140. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -14
  141. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  142. data/app/views/avo/partials/_footer.html.erb +1 -1
  143. data/app/views/avo/partials/_javascript.html.erb +5 -0
  144. data/app/views/avo/partials/_logo.html.erb +1 -1
  145. data/app/views/avo/partials/_navbar.html.erb +3 -5
  146. data/app/views/avo/partials/_resource_search.html.erb +1 -0
  147. data/app/views/avo/partials/_table_header.html.erb +5 -11
  148. data/app/views/layouts/avo/application.html.erb +5 -4
  149. data/avo.gemspec +10 -8
  150. data/bin/dev +3 -1
  151. data/bin/prod +0 -0
  152. data/config/master.key +1 -0
  153. data/config/routes.rb +7 -10
  154. data/db/factories.rb +6 -0
  155. data/lib/avo/asset_manager.rb +30 -0
  156. data/lib/avo/base_action.rb +82 -67
  157. data/lib/avo/base_resource.rb +286 -226
  158. data/lib/avo/base_resource_tool.rb +9 -16
  159. data/lib/avo/concerns/borrow_items_holder.rb +35 -0
  160. data/lib/avo/concerns/breadcrumbs.rb +2 -2
  161. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
  162. data/lib/avo/concerns/filters_session_handler.rb +7 -5
  163. data/lib/avo/concerns/has_controls.rb +37 -0
  164. data/lib/avo/concerns/has_description.rb +23 -0
  165. data/lib/avo/concerns/has_helpers.rb +18 -0
  166. data/lib/avo/concerns/has_item_type.rb +42 -0
  167. data/lib/avo/concerns/has_items.rb +339 -0
  168. data/lib/avo/concerns/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
  169. data/lib/avo/concerns/hydration.rb +17 -0
  170. data/lib/avo/concerns/is_resource_item.rb +16 -36
  171. data/lib/avo/concerns/is_visible.rb +15 -0
  172. data/lib/avo/concerns/model_class_constantized.rb +0 -2
  173. data/lib/avo/concerns/visible_in_different_views.rb +132 -0
  174. data/lib/avo/concerns/visible_items.rb +7 -38
  175. data/lib/avo/configuration/branding.rb +0 -12
  176. data/lib/avo/configuration.rb +28 -11
  177. data/lib/avo/current.rb +39 -0
  178. data/lib/avo/dsl/field_parser.rb +3 -3
  179. data/lib/avo/dynamic_router.rb +18 -3
  180. data/lib/avo/engine.rb +35 -30
  181. data/lib/avo/error_manager.rb +25 -0
  182. data/lib/avo/execution_context.rb +14 -15
  183. data/lib/avo/fields/base_field.rb +84 -122
  184. data/lib/avo/fields/belongs_to_field.rb +19 -23
  185. data/lib/avo/fields/concerns/file_authorization.rb +2 -2
  186. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  187. data/lib/avo/fields/concerns/has_default.rb +1 -5
  188. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  189. data/lib/avo/fields/concerns/has_html_attributes.rb +112 -0
  190. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  191. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  192. data/lib/avo/fields/concerns/is_required.rb +5 -7
  193. data/lib/avo/fields/concerns/is_searchable.rb +15 -0
  194. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  195. data/lib/avo/fields/concerns/use_view_components.rb +45 -0
  196. data/lib/avo/fields/country_field.rb +4 -0
  197. data/lib/avo/fields/date_time_field.rb +1 -5
  198. data/lib/avo/fields/external_image_field.rb +2 -2
  199. data/lib/avo/fields/field_manager.rb +55 -0
  200. data/lib/avo/fields/file_field.rb +2 -2
  201. data/lib/avo/fields/gravatar_field.rb +2 -2
  202. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  203. data/lib/avo/fields/has_base_field.rb +21 -17
  204. data/lib/avo/fields/has_many_field.rb +5 -2
  205. data/lib/avo/fields/has_one_field.rb +8 -12
  206. data/lib/avo/fields/heading_field.rb +9 -14
  207. data/lib/avo/fields/hidden_field.rb +1 -1
  208. data/lib/avo/fields/id_field.rb +3 -3
  209. data/lib/avo/fields/location_field.rb +10 -10
  210. data/lib/avo/fields/password_field.rb +1 -1
  211. data/lib/avo/fields/preview_field.rb +14 -0
  212. data/lib/avo/fields/select_field.rb +12 -8
  213. data/lib/avo/fields/status_field.rb +7 -1
  214. data/lib/avo/fields/text_field.rb +2 -2
  215. data/lib/avo/filters/base_filter.rb +9 -4
  216. data/lib/avo/html/builder.rb +8 -8
  217. data/lib/avo/item_grapher.rb +78 -0
  218. data/lib/avo/licensing/h_q.rb +11 -73
  219. data/lib/avo/licensing/license.rb +5 -1
  220. data/lib/avo/licensing/license_manager.rb +1 -1
  221. data/lib/avo/licensing/pro_license.rb +1 -7
  222. data/lib/avo/loaders/fields_loader.rb +7 -1
  223. data/lib/avo/plugin.rb +36 -0
  224. data/lib/avo/plugin_manager.rb +56 -0
  225. data/lib/avo/prefixed_test_helpers.rb +20 -0
  226. data/lib/avo/reloader.rb +3 -0
  227. data/lib/avo/resources/controls/actions_list.rb +7 -12
  228. data/lib/avo/resources/controls/attach_button.rb +15 -0
  229. data/lib/avo/resources/controls/back_button.rb +1 -1
  230. data/lib/avo/resources/controls/base_control.rb +15 -49
  231. data/lib/avo/resources/controls/create_button.rb +15 -0
  232. data/lib/avo/resources/controls/delete_button.rb +5 -1
  233. data/lib/avo/resources/controls/detach_button.rb +4 -1
  234. data/lib/avo/resources/controls/edit_button.rb +4 -1
  235. data/lib/avo/resources/controls/order_controls.rb +8 -0
  236. data/lib/avo/resources/controls/save_button.rb +13 -0
  237. data/lib/avo/resources/controls/show_button.rb +15 -0
  238. data/lib/avo/resources/items/holder.rb +96 -0
  239. data/lib/avo/resources/items/item_group.rb +44 -0
  240. data/lib/avo/resources/items/main_panel.rb +12 -0
  241. data/lib/avo/resources/items/panel.rb +2 -0
  242. data/lib/avo/resources/items/row.rb +42 -0
  243. data/lib/avo/resources/items/sidebar.rb +46 -0
  244. data/lib/avo/resources/items/tab.rb +54 -0
  245. data/lib/avo/resources/items/tab_group.rb +62 -0
  246. data/lib/avo/resources/resource_manager.rb +179 -0
  247. data/lib/avo/services/authorization_service.rb +11 -110
  248. data/lib/avo/services/debug_service.rb +93 -0
  249. data/lib/avo/services/encryption_service.rb +8 -12
  250. data/lib/avo/services/telemetry_service.rb +85 -0
  251. data/lib/avo/test_helpers.rb +362 -0
  252. data/lib/avo/tools/tool_manager.rb +30 -0
  253. data/lib/avo/version.rb +1 -1
  254. data/lib/avo/view_inquirer.rb +36 -0
  255. data/lib/avo.rb +109 -24
  256. data/lib/generators/avo/action_generator.rb +8 -8
  257. data/lib/generators/avo/card_generator.rb +27 -0
  258. data/lib/generators/avo/concerns/parent_controller.rb +20 -0
  259. data/lib/generators/avo/controller_generator.rb +3 -0
  260. data/lib/generators/avo/eject_generator.rb +180 -15
  261. data/lib/generators/avo/field_generator.rb +49 -2
  262. data/lib/generators/avo/filter_generator.rb +8 -8
  263. data/lib/generators/avo/js/install_generator.rb +2 -2
  264. data/lib/generators/avo/resource_generator.rb +12 -9
  265. data/lib/generators/avo/scope_generator.rb +15 -0
  266. data/lib/generators/avo/tailwindcss/install_generator.rb +70 -26
  267. data/lib/generators/avo/templates/action.tt +8 -6
  268. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  269. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  270. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  271. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  272. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  273. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  274. data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
  275. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  276. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  277. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  278. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  279. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  280. data/lib/generators/avo/templates/initializer/avo.tt +7 -3
  281. data/lib/generators/avo/templates/locales/avo.ar.yml +1 -0
  282. data/lib/generators/avo/templates/locales/avo.en.yml +4 -3
  283. data/lib/generators/avo/templates/locales/avo.es.yml +1 -0
  284. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -0
  285. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -0
  286. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -0
  287. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -0
  288. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -0
  289. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -5
  290. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -0
  291. data/lib/generators/avo/templates/resource/controller.tt +1 -1
  292. data/lib/generators/avo/templates/resource/resource.tt +7 -7
  293. data/lib/generators/avo/templates/resource_tools/partial.tt +2 -2
  294. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  295. data/lib/generators/avo/templates/scope.tt +6 -0
  296. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  297. data/lib/generators/avo/templates/tailwindcss/avo.tailwind.css +5 -3
  298. data/lib/generators/avo/templates/tailwindcss/tailwind.config.js +11 -0
  299. data/lib/tasks/avo_tasks.rake +72 -4
  300. data/public/avo-assets/avo.base.css +1893 -1187
  301. data/public/avo-assets/avo.base.js +217 -305
  302. data/public/avo-assets/avo.base.js.map +3 -3
  303. data/public/avo-assets/avo.css +9744 -0
  304. data/public/avo-assets/avo.js +513 -0
  305. data/public/avo-assets/avo.js.map +7 -0
  306. data/tailwind.custom.js +47 -0
  307. data/tailwind.preset.js +152 -0
  308. metadata +106 -116
  309. data/app/components/avo/card_component.html.erb +0 -46
  310. data/app/components/avo/card_component.rb +0 -25
  311. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  312. data/app/components/avo/dashboards/divider_component.rb +0 -19
  313. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  314. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  315. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  316. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  317. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  318. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  319. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  320. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  321. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  322. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  323. data/app/components/avo/index/ordering/base_component.rb +0 -9
  324. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  325. data/app/components/avo/index/ordering/button_component.rb +0 -23
  326. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  327. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  328. data/app/components/avo/item_switcher_component.html.erb +0 -27
  329. data/app/components/avo/item_switcher_component.rb +0 -48
  330. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  331. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  332. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  333. data/app/controllers/avo/dashboards_controller.rb +0 -22
  334. data/app/controllers/avo/reorder_controller.rb +0 -25
  335. data/app/javascript/js/controllers/base_controller.js +0 -22
  336. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  337. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  338. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  339. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  340. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  341. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  342. data/app/views/avo/dashboards/show.html.erb +0 -38
  343. data/app/views/avo/partials/_global_search.html.erb +0 -19
  344. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  345. data/lib/avo/app.rb +0 -237
  346. data/lib/avo/base_card.rb +0 -161
  347. data/lib/avo/concerns/fetches_things.rb +0 -150
  348. data/lib/avo/concerns/handles_field_args.rb +0 -47
  349. data/lib/avo/concerns/has_action_stimulus_controllers.rb +0 -15
  350. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  351. data/lib/avo/concerns/has_fields.rb +0 -334
  352. data/lib/avo/concerns/has_html_attributes.rb +0 -123
  353. data/lib/avo/concerns/policy_helpers.rb +0 -31
  354. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  355. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  356. data/lib/avo/dashboards/base_divider.rb +0 -35
  357. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  358. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  359. data/lib/avo/dashboards/metric_card.rb +0 -9
  360. data/lib/avo/dashboards/partial_card.rb +0 -7
  361. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  362. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  363. data/lib/avo/fields/tags_field.rb +0 -102
  364. data/lib/avo/grid_collector.rb +0 -42
  365. data/lib/avo/hosts/association_scope_host.rb +0 -8
  366. data/lib/avo/hosts/base_host.rb +0 -25
  367. data/lib/avo/hosts/card_visibility.rb +0 -20
  368. data/lib/avo/hosts/dashboard_card.rb +0 -22
  369. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  370. data/lib/avo/hosts/ordering.rb +0 -22
  371. data/lib/avo/hosts/record_host.rb +0 -7
  372. data/lib/avo/hosts/resource_record_host.rb +0 -7
  373. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  374. data/lib/avo/hosts/search_scope_host.rb +0 -7
  375. data/lib/avo/hosts/view_record_host.rb +0 -7
  376. data/lib/avo/hosts/visibility_host.rb +0 -12
  377. data/lib/avo/items_holder.rb +0 -96
  378. data/lib/avo/main_panel.rb +0 -3
  379. data/lib/avo/menu/base_item.rb +0 -25
  380. data/lib/avo/menu/builder.rb +0 -82
  381. data/lib/avo/menu/dashboard.rb +0 -22
  382. data/lib/avo/menu/group.rb +0 -2
  383. data/lib/avo/menu/link.rb +0 -6
  384. data/lib/avo/menu/menu.rb +0 -2
  385. data/lib/avo/menu/resource.rb +0 -22
  386. data/lib/avo/menu/section.rb +0 -2
  387. data/lib/avo/panel.rb +0 -24
  388. data/lib/avo/panel_builder.rb +0 -25
  389. data/lib/avo/resources/controls/action.rb +0 -38
  390. data/lib/avo/resources/controls/execution_context.rb +0 -58
  391. data/lib/avo/resources/controls/items_holder.rb +0 -19
  392. data/lib/avo/resources/controls/link_to.rb +0 -27
  393. data/lib/avo/row.rb +0 -26
  394. data/lib/avo/row_builder.rb +0 -24
  395. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  396. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  397. data/lib/avo/sidebar.rb +0 -30
  398. data/lib/avo/sidebar_builder.rb +0 -24
  399. data/lib/avo/tab.rb +0 -72
  400. data/lib/avo/tab_builder.rb +0 -25
  401. data/lib/avo/tab_group.rb +0 -42
  402. data/lib/avo/tab_group_builder.rb +0 -43
  403. data/lib/avo/tools_manager.rb +0 -11
  404. data/lib/generators/avo/card/chartkick_generator.rb +0 -18
  405. data/lib/generators/avo/card/metric_generator.rb +0 -18
  406. data/lib/generators/avo/card/partial_generator.rb +0 -19
  407. data/lib/generators/avo/templates/js/avo.custom.js +0 -2
  408. data/lib/generators/avo/templates/standalone_action.tt +0 -8
  409. /data/app/assets/stylesheets/css/{tags.css → fields/tags.css} +0 -0
@@ -6,14 +6,14 @@ 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 :detect_fields
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
@@ -29,19 +29,11 @@ module Avo
29
29
  @query = @resource.class.query_scope
30
30
  end
31
31
 
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
32
  # Eager load the associations
38
33
  if @resource.includes.present?
39
34
  @query = @query.includes(*@resource.includes)
40
35
  end
41
36
 
42
- # Eager load the active storage attachments
43
- @query = eager_load_files(@resource, @query)
44
-
45
37
  # Sort the items
46
38
  if @index_params[:sort_by].present?
47
39
  unless @index_params[:sort_by].eql? :created_at
@@ -52,7 +44,7 @@ module Avo
52
44
  field_id = @index_params[:sort_by].to_sym
53
45
  field = @resource.get_field_definitions.find { |field| field.id == field_id }
54
46
  @query = if field&.sortable.is_a?(Proc)
55
- field.sortable.call(@query, @index_params[:sort_direction])
47
+ Avo::ExecutionContext.new(target: field.sortable, query: @query, direction: @index_params[:sort_direction]).handle
56
48
  else
57
49
  @query.order("#{@resource.model_class.table_name}.#{@index_params[:sort_by]} #{@index_params[:sort_direction]}")
58
50
  end
@@ -65,40 +57,46 @@ module Avo
65
57
  ).apply_query request, @query, filter_value
66
58
  end
67
59
 
60
+ safe_call :set_and_apply_scopes
61
+ safe_call :apply_dynamic_filters
68
62
  apply_pagination
69
63
 
70
- # Create resources for each model
71
- @resources = @models.map do |model|
72
- @resource.hydrate(model: model, params: params).dup
64
+ # Create resources for each record
65
+ @resources = @records.map do |record|
66
+ @resource.hydrate(record: record, params: params).dup
73
67
  end
68
+
69
+ set_component_for __method__
74
70
  end
75
71
 
76
72
  def show
77
- @resource.hydrate(model: @model, view: :show, user: _current_user, params: params)
73
+ @resource.hydrate(record: @record, view: :show, user: _current_user, params: params).detect_fields
78
74
 
79
75
  set_actions
80
76
 
81
77
  @page_title = @resource.default_panel_name.to_s
82
78
 
83
79
  # 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
80
+ if params[:via_resource_class].present? && params[:via_record_id].present?
81
+ via_resource = Avo.resource_manager.get_resource(params[:via_resource_class])
82
+ via_record = via_resource.find_record params[:via_record_id], params: params
83
+ via_resource = via_resource.new record: via_record
88
84
 
89
85
  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)
86
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
91
87
  else
92
88
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
93
89
  end
94
90
 
95
- add_breadcrumb @resource.model_title
91
+ add_breadcrumb @resource.record_title
96
92
  add_breadcrumb I18n.t("avo.details").upcase_first
93
+
94
+ set_component_for __method__
97
95
  end
98
96
 
99
97
  def new
100
- @model = @resource.model_class.new
101
- @resource = @resource.hydrate(model: @model, view: :new, user: _current_user)
98
+ @record = @resource.model_class.new
99
+ @resource = @resource.hydrate(record: @record, view: :new, user: _current_user)
102
100
 
103
101
  # Handle special cases when creating a new record via a belongs_to relationship
104
102
  if params[:via_belongs_to_resource_class].present?
@@ -110,50 +108,52 @@ module Avo
110
108
  @page_title = @resource.default_panel_name.to_s
111
109
 
112
110
  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
111
+ via_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
112
+ via_record = via_resource.find_record params[:via_record_id], params: params
113
+ via_resource = via_resource.new record: via_record
116
114
 
117
115
  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)
116
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
119
117
  end
120
118
 
121
119
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
122
120
  add_breadcrumb t("avo.new").humanize
121
+
122
+ set_component_for __method__, fallback_view: :edit
123
123
  end
124
124
 
125
125
  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)
126
+ # record gets instantiated and filled in the fill_record method
127
+ saved = save_record
128
+ @resource.hydrate(record: @record, view: :new, user: _current_user)
129
129
 
130
130
  # 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]]
131
+ if params[:via_record_id].present? && params[:via_belongs_to_resource_class].nil?
132
+ @reflection = @record._reflections[params[:via_relation]]
133
133
  # Figure out what kind of association does the record have with the parent record
134
134
 
135
135
  # Fills in the required infor for belongs_to and has_many
136
136
  # Get the foreign key and set it to the id we received in the params
137
137
  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
138
+ related_resource = Avo.resource_manager.get_resource_by_model_class params[:via_relation_class]
139
+ related_record = related_resource.find_record params[:via_record_id], params: params
140
140
 
141
- @model.send("#{@reflection.foreign_key}=", related_record.id)
142
- @model.save
141
+ @record.send("#{@reflection.foreign_key}=", related_record.id)
142
+ @record.save
143
143
  end
144
144
 
145
145
  # For when working with has_one, has_one_through, has_many_through, has_and_belongs_to_many, polymorphic
146
146
  if @reflection.is_a? ActiveRecord::Reflection::ThroughReflection
147
147
  # 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])
148
+ via_resource = Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
149
+ @related_record = via_resource.find_record params[:via_record_id], params: params
150
+ association_name = BaseResource.valid_association_name(@record, params[:via_relation])
151
151
 
152
152
  if params[:via_association_type] == "has_one"
153
153
  # On has_one scenarios we should switch the @record and @related_record
154
- @related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @model)
154
+ @related_record.send("#{@reflection.parent_reflection.inverse_of.name}=", @record)
155
155
  else
156
- @model.send(association_name) << @related_record
156
+ @record.send(association_name) << @related_record
157
157
  end
158
158
  end
159
159
  end
@@ -162,6 +162,8 @@ module Avo
162
162
  add_breadcrumb t("avo.new").humanize
163
163
  set_actions
164
164
 
165
+ set_component_for :edit
166
+
165
167
  if saved
166
168
  create_success_action
167
169
  else
@@ -171,14 +173,18 @@ module Avo
171
173
 
172
174
  def edit
173
175
  set_actions
176
+
177
+ set_component_for __method__
174
178
  end
175
179
 
176
180
  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)
181
+ # record gets instantiated and filled in the fill_record method
182
+ saved = save_record
183
+ @resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
180
184
  set_actions
181
185
 
186
+ set_component_for :edit
187
+
182
188
  if saved
183
189
  update_success_action
184
190
  else
@@ -194,55 +200,46 @@ module Avo
194
200
  end
195
201
  end
196
202
 
197
- def order
198
- direction = params[:direction].to_sym
199
-
200
- if direction.present?
201
- @resource
202
- .hydrate(model: @model, params: params)
203
- .ordering_host
204
- .order direction
205
- end
203
+ def preview
204
+ @resource.hydrate(record: @record, view: :show, user: _current_user, params: params)
206
205
 
207
- respond_to do |format|
208
- format.html { redirect_to params[:referrer] || resources_path(resource: @resource) }
209
- end
206
+ render layout: params[:turbo_frame].blank?
210
207
  end
211
208
 
212
209
  private
213
210
 
214
- def save_model
211
+ def save_record
215
212
  perform_action_and_record_errors do
216
- save_model_action
213
+ save_record_action
217
214
  end
218
215
  end
219
216
 
220
- def save_model_action
221
- @model.save!
217
+ def save_record_action
218
+ @record.save!
222
219
  end
223
220
 
224
221
  def destroy_model
225
222
  perform_action_and_record_errors do
226
- destroy_model_action
223
+ destroy_record_action
227
224
  end
228
225
  end
229
226
 
230
- def destroy_model_action
231
- @model.destroy!
227
+ def destroy_record_action
228
+ @record.destroy!
232
229
  end
233
230
 
234
231
  def perform_action_and_record_errors(&block)
235
232
  begin
236
233
  succeeded = block.call
237
234
  rescue => exception
238
- # In case there's an error somewhere else than the model
235
+ # In case there's an error somewhere else than the record
239
236
  # Example: When you save a license that should create a user for it and creating that user throws and error.
240
237
  # Example: When you Try to delete a record and has a foreign key constraint.
241
238
  exception_message = exception.message
242
239
  end
243
240
 
244
- # Add the errors from the model
245
- @errors = @model.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
241
+ # Add the errors from the record
242
+ @errors = @record.errors.full_messages.reject { |error| exception_message.include? error }.unshift exception_message
246
243
 
247
244
  succeeded
248
245
  end
@@ -300,7 +297,7 @@ module Avo
300
297
  @index_params[:per_page] = cookies[:per_page]
301
298
  end
302
299
 
303
- if @parent_model.present?
300
+ if @parent_record.present?
304
301
  @index_params[:per_page] = Avo.configuration.via_per_page
305
302
  end
306
303
 
@@ -319,8 +316,20 @@ module Avo
319
316
  @index_params[:sort_direction] = params[:sort_direction] || :desc
320
317
 
321
318
  # 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
319
+ available_view_types = @resource.available_view_types
320
+ @index_params[:available_view_types] = available_view_types
321
+
322
+ @index_params[:view_type] = if params[:view_type].present?
323
+ params[:view_type]
324
+ elsif available_view_types.size == 1
325
+ available_view_types.first
326
+ else
327
+ @resource.default_view_type || Avo.configuration.default_view_type
328
+ end
329
+
330
+ if available_view_types.exclude? @index_params[:view_type].to_sym
331
+ raise "View type '#{@index_params[:view_type]}' is unavailable for #{@resource.class}."
332
+ end
324
333
  end
325
334
 
326
335
  def set_filters
@@ -338,7 +347,7 @@ module Avo
338
347
  @actions = @resource
339
348
  .get_actions
340
349
  .map do |action|
341
- action[:class].new(model: @model, resource: @resource, view: @view, arguments: action[:arguments])
350
+ action[:class].new(record: @record, resource: @resource, view: @view, arguments: action[:arguments])
342
351
  end
343
352
  .select do |action|
344
353
  action.visible_in_view(parent_resource: @parent_resource)
@@ -392,28 +401,28 @@ module Avo
392
401
  end
393
402
 
394
403
  def set_edit_title_and_breadcrumbs
395
- @resource = @resource.hydrate(model: @model, view: :edit, user: _current_user)
404
+ @resource = @resource.hydrate(record: @record, view: :edit, user: _current_user)
396
405
  @page_title = @resource.default_panel_name.to_s
397
406
 
398
407
  last_crumb_args = {}
399
408
  # 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
409
+ if params[:via_resource_class].present? && params[:via_record_id].present?
410
+ via_resource = Avo.resource_manager.get_resource(params[:via_resource_class])
411
+ via_record = via_resource.find_record params[:via_record_id], params: params
412
+ via_resource = via_resource.new record: via_record
404
413
 
405
414
  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)
415
+ add_breadcrumb via_resource.record_title, resource_path(record: via_record, resource: via_resource)
407
416
 
408
417
  last_crumb_args = {
409
418
  via_resource_class: params[:via_resource_class],
410
- via_resource_id: params[:via_resource_id]
419
+ via_record_id: params[:via_record_id]
411
420
  }
412
421
  else
413
422
  add_breadcrumb @resource.plural_name.humanize, resources_path(resource: @resource)
414
423
  end
415
424
 
416
- add_breadcrumb @resource.model_title, resource_path(model: @resource.model, resource: @resource, **last_crumb_args)
425
+ add_breadcrumb @resource.record_title, resource_path(record: @resource.record, resource: @resource, **last_crumb_args)
417
426
  add_breadcrumb t("avo.edit").humanize
418
427
  end
419
428
 
@@ -445,13 +454,18 @@ module Avo
445
454
  def after_create_path
446
455
  # If this is an associated record return to the association show page
447
456
  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])
457
+ parent_resource = if params[:via_resource_class].present?
458
+ Avo.resource_manager.get_resource(params[:via_resource_class])
459
+ else
460
+ Avo.resource_manager.get_resource_by_model_class(params[:via_relation_class])
461
+ end
462
+
463
+ association_name = BaseResource.valid_association_name(@record, params[:via_relation])
450
464
 
451
465
  return resource_view_path(
452
- model: @model.send(association_name),
466
+ record: @record.send(association_name),
453
467
  resource: parent_resource,
454
- resource_id: params[:via_resource_id]
468
+ resource_id: params[:via_record_id]
455
469
  )
456
470
  end
457
471
 
@@ -487,7 +501,7 @@ module Avo
487
501
 
488
502
  # Needs a different name, otwherwise, in some places, this can be called instead helpers.resource_view_path
489
503
  def resource_view_response_path
490
- helpers.resource_view_path(model: @model, resource: @resource)
504
+ helpers.resource_view_path(record: @record, resource: @resource)
491
505
  end
492
506
 
493
507
  def destroy_success_action
@@ -521,15 +535,15 @@ module Avo
521
535
 
522
536
  if @resource.class.send(action) == :index
523
537
  resources_path(resource: @resource)
524
- elsif @resource.class.send(action) == :edit || Avo.configuration.resource_default_view == :edit
525
- edit_resource_path(resource: @resource, model: @resource.model)
538
+ elsif @resource.class.send(action) == :edit || Avo.configuration.resource_default_view.edit?
539
+ edit_resource_path(resource: @resource, record: @resource.record)
526
540
  else
527
- resource_path(model: @model, resource: @resource)
541
+ resource_path(record: @record, resource: @resource)
528
542
  end
529
543
  end
530
544
 
531
545
  def is_associated_record?
532
- params[:via_relation_class].present? && params[:via_resource_id].present?
546
+ params[:via_relation_class].present? && params[:via_record_id].present?
533
547
  end
534
548
 
535
549
  # Set pagy locale from params or from avo configuration, if both nil locale = "en"
@@ -537,8 +551,42 @@ module Avo
537
551
  @pagy_locale = locale.to_s || Avo.configuration.locale || "en"
538
552
  end
539
553
 
554
+ def safe_call(method)
555
+ send(method) if respond_to?(method, true)
556
+ end
557
+
558
+ def pagy_query
559
+ @query
560
+ end
561
+
562
+ # Set the view component for the current view
563
+ # It will try to use the custom component if it's set, otherwise it will use the default one
564
+ def set_component_for(view, fallback_view: nil)
565
+ # Fetch the components from the resource
566
+ components = Avo::ExecutionContext.new(
567
+ target: @resource.components,
568
+ resource: @resource,
569
+ record: @record,
570
+ view: @view
571
+ ).handle
572
+
573
+ # If the component is not set, use the default one
574
+ if (custom_component = components.dig("resource_#{view}_component".to_sym)).nil?
575
+ return @component = "Avo::Views::Resource#{(fallback_view || view).to_s.classify}Component".constantize
576
+ end
577
+
578
+ # If the component is set, try to use it
579
+ @component = custom_component.to_s.safe_constantize
580
+
581
+ # If the component is not found, raise an error
582
+ if @component.nil?
583
+ raise "The component '#{custom_component}' was not found.\n" \
584
+ "That component was fetched from 'self.components' option inside '#{@resource.class}' resource."
585
+ end
586
+ end
587
+
540
588
  def apply_pagination
541
- @pagy, @models = @resource.apply_pagination(index_params: @index_params, query: @query)
589
+ @pagy, @records = @resource.apply_pagination(index_params: @index_params, query: pagy_query)
542
590
  end
543
591
  end
544
592
  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
@@ -14,7 +14,7 @@ module Avo
14
14
  redirect_to computed_path
15
15
  elsif !Rails.env.development?
16
16
  @page_title = "Get started"
17
- resource = Avo::App.resources.min_by { |resource| resource.model_key }
17
+ resource = Avo.resource_manager.all.min_by { |resource| resource.model_key }
18
18
  redirect_to resources_path(resource: resource)
19
19
  end
20
20
  end