avo 2.49.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 (377) 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/date_field_controller.js +3 -7
  103. data/app/javascript/js/controllers/fields/key_value_controller.js +1 -2
  104. data/app/javascript/js/controllers/filter_controller.js +1 -1
  105. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  106. data/app/javascript/js/controllers/preview_controller.js +24 -0
  107. data/app/javascript/js/controllers/search_controller.js +2 -2
  108. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  109. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  110. data/app/javascript/js/controllers.js +10 -6
  111. data/app/javascript/js/custom-stream-actions.js +15 -0
  112. data/app/views/avo/actions/keep_modal_open.turbo_stream.erb +5 -0
  113. data/app/views/avo/actions/show.html.erb +10 -7
  114. data/app/views/avo/associations/new.html.erb +2 -2
  115. data/app/views/avo/base/index.html.erb +3 -2
  116. data/app/views/avo/base/new.html.erb +2 -1
  117. data/app/views/avo/base/preview.html.erb +19 -0
  118. data/app/views/avo/base/show.html.erb +1 -1
  119. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  120. data/app/views/avo/debug/report.html.erb +32 -17
  121. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -14
  122. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  123. data/app/views/avo/partials/_footer.html.erb +1 -1
  124. data/app/views/avo/partials/_javascript.html.erb +5 -0
  125. data/app/views/avo/partials/_logo.html.erb +1 -1
  126. data/app/views/avo/partials/_navbar.html.erb +3 -5
  127. data/app/views/avo/partials/_table_header.html.erb +5 -11
  128. data/app/views/layouts/avo/application.html.erb +4 -2
  129. data/avo.gemspec +11 -12
  130. data/bin/dev +1 -1
  131. data/bin/prod +0 -0
  132. data/config/i18n-tasks.yml +1 -1
  133. data/config/initializers/pagy.rb +0 -2
  134. data/config/master.key +1 -0
  135. data/config/routes.rb +6 -10
  136. data/db/factories.rb +7 -1
  137. data/lib/avo/action_model.rb +20 -0
  138. data/lib/avo/asset_manager.rb +30 -0
  139. data/lib/avo/base_action.rb +57 -42
  140. data/lib/avo/base_resource.rb +264 -227
  141. data/lib/avo/base_resource_tool.rb +9 -16
  142. data/lib/avo/concerns/breadcrumbs.rb +2 -2
  143. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
  144. data/lib/avo/concerns/filters_session_handler.rb +5 -3
  145. data/lib/avo/concerns/has_controls.rb +37 -0
  146. data/lib/avo/concerns/has_description.rb +23 -0
  147. data/lib/avo/concerns/has_item_type.rb +42 -0
  148. data/lib/avo/concerns/has_items.rb +325 -0
  149. data/lib/avo/concerns/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
  150. data/lib/avo/concerns/is_resource_item.rb +24 -36
  151. data/lib/avo/concerns/is_visible.rb +15 -0
  152. data/lib/avo/concerns/model_class_constantized.rb +0 -2
  153. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  154. data/lib/avo/configuration/branding.rb +0 -12
  155. data/lib/avo/configuration.rb +1 -37
  156. data/lib/avo/current.rb +39 -0
  157. data/lib/avo/dsl/field_parser.rb +1 -1
  158. data/lib/avo/dynamic_router.rb +18 -3
  159. data/lib/avo/engine.rb +35 -30
  160. data/lib/avo/error_manager.rb +25 -0
  161. data/lib/avo/execution_context.rb +10 -14
  162. data/lib/avo/fields/badge_field.rb +1 -1
  163. data/lib/avo/fields/base_field.rb +91 -106
  164. data/lib/avo/fields/belongs_to_field.rb +18 -22
  165. data/lib/avo/fields/concerns/file_authorization.rb +2 -2
  166. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  167. data/lib/avo/fields/concerns/has_default.rb +1 -5
  168. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  169. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  170. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  171. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  172. data/lib/avo/fields/concerns/is_required.rb +5 -7
  173. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  174. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  175. data/lib/avo/fields/country_field.rb +4 -0
  176. data/lib/avo/fields/date_time_field.rb +3 -14
  177. data/lib/avo/fields/field_manager.rb +55 -0
  178. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  179. data/lib/avo/fields/has_base_field.rb +12 -15
  180. data/lib/avo/fields/has_many_field.rb +5 -2
  181. data/lib/avo/fields/has_one_field.rb +6 -10
  182. data/lib/avo/fields/heading_field.rb +4 -1
  183. data/lib/avo/fields/hidden_field.rb +1 -1
  184. data/lib/avo/fields/id_field.rb +1 -1
  185. data/lib/avo/fields/location_field.rb +8 -8
  186. data/lib/avo/fields/password_field.rb +1 -1
  187. data/lib/avo/fields/preview_field.rb +14 -0
  188. data/lib/avo/fields/select_field.rb +12 -8
  189. data/lib/avo/fields/status_field.rb +4 -0
  190. data/lib/avo/filters/base_filter.rb +8 -4
  191. data/lib/avo/html/builder.rb +7 -8
  192. data/lib/avo/item_grapher.rb +78 -0
  193. data/lib/avo/licensing/h_q.rb +8 -67
  194. data/lib/avo/licensing/license.rb +1 -1
  195. data/lib/avo/licensing/pro_license.rb +1 -7
  196. data/lib/avo/loaders/fields_loader.rb +7 -1
  197. data/lib/avo/plugin.rb +16 -0
  198. data/lib/avo/plugin_manager.rb +56 -0
  199. data/lib/avo/prefixed_test_helpers.rb +20 -0
  200. data/lib/avo/reloader.rb +3 -0
  201. data/lib/avo/resources/controls/actions_list.rb +7 -12
  202. data/lib/avo/resources/controls/attach_button.rb +15 -0
  203. data/lib/avo/resources/controls/back_button.rb +1 -1
  204. data/lib/avo/resources/controls/base_control.rb +15 -49
  205. data/lib/avo/resources/controls/create_button.rb +15 -0
  206. data/lib/avo/resources/controls/delete_button.rb +5 -1
  207. data/lib/avo/resources/controls/detach_button.rb +4 -1
  208. data/lib/avo/resources/controls/edit_button.rb +4 -1
  209. data/lib/avo/resources/controls/order_controls.rb +8 -0
  210. data/lib/avo/resources/controls/save_button.rb +13 -0
  211. data/lib/avo/resources/controls/show_button.rb +15 -0
  212. data/lib/avo/resources/items/holder.rb +84 -0
  213. data/lib/avo/resources/items/item_group.rb +49 -0
  214. data/lib/avo/resources/items/main_panel.rb +2 -0
  215. data/lib/avo/resources/items/panel.rb +2 -0
  216. data/lib/avo/resources/items/row.rb +54 -0
  217. data/lib/avo/resources/items/sidebar.rb +47 -0
  218. data/lib/avo/resources/items/tab.rb +60 -0
  219. data/lib/avo/resources/items/tab_group.rb +68 -0
  220. data/lib/avo/resources/resource_manager.rb +174 -0
  221. data/lib/avo/services/authorization_service.rb +11 -110
  222. data/lib/avo/services/debug_service.rb +93 -0
  223. data/lib/avo/services/encryption_service.rb +5 -1
  224. data/lib/avo/services/telemetry_service.rb +85 -0
  225. data/lib/avo/test_helpers.rb +362 -0
  226. data/lib/avo/tools/tool_manager.rb +30 -0
  227. data/lib/avo/version.rb +1 -1
  228. data/lib/avo.rb +115 -24
  229. data/lib/generators/avo/action_generator.rb +8 -8
  230. data/lib/generators/avo/card_generator.rb +27 -0
  231. data/lib/generators/avo/filter_generator.rb +8 -8
  232. data/lib/generators/avo/resource_generator.rb +4 -4
  233. data/lib/generators/avo/scope_generator.rb +15 -0
  234. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -15
  235. data/lib/generators/avo/templates/action.tt +8 -6
  236. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  237. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  238. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  239. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  240. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  241. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  242. data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
  243. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  244. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  245. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  246. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  247. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  248. data/lib/generators/avo/templates/initializer/avo.tt +1 -9
  249. data/lib/generators/avo/templates/locales/avo.ar.yml +6 -6
  250. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  251. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  252. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  253. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  254. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  255. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  256. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  257. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  258. data/lib/generators/avo/templates/resource/resource.tt +7 -7
  259. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  260. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  261. data/lib/generators/avo/templates/scope.tt +6 -0
  262. data/lib/generators/avo/templates/tool/view.tt +2 -2
  263. data/lib/tasks/avo_tasks.rake +27 -0
  264. data/public/avo-assets/avo.base.css +1810 -1189
  265. data/public/avo-assets/avo.base.js +217 -307
  266. data/public/avo-assets/avo.base.js.map +3 -3
  267. data/public/avo-assets/avo.css +9744 -0
  268. data/public/avo-assets/avo.js +513 -0
  269. data/public/avo-assets/avo.js.map +7 -0
  270. metadata +102 -146
  271. data/app/assets/stylesheets/css/tags.css +0 -32
  272. data/app/components/avo/card_component.html.erb +0 -46
  273. data/app/components/avo/card_component.rb +0 -25
  274. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  275. data/app/components/avo/dashboards/divider_component.rb +0 -19
  276. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  277. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  278. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  279. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  280. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  281. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  282. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  283. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  284. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  285. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  286. data/app/components/avo/index/ordering/base_component.rb +0 -9
  287. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  288. data/app/components/avo/index/ordering/button_component.rb +0 -23
  289. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  290. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  291. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  292. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  293. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  294. data/app/controllers/avo/dashboards_controller.rb +0 -22
  295. data/app/controllers/avo/reorder_controller.rb +0 -25
  296. data/app/javascript/js/controllers/base_controller.js +0 -22
  297. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  298. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  299. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  300. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  301. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  302. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  303. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  304. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  305. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  306. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  307. data/app/views/avo/dashboards/show.html.erb +0 -38
  308. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  309. data/app/views/avo/partials/_global_search.html.erb +0 -19
  310. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  311. data/lib/avo/app.rb +0 -237
  312. data/lib/avo/base_card.rb +0 -161
  313. data/lib/avo/concerns/fetches_things.rb +0 -150
  314. data/lib/avo/concerns/handles_field_args.rb +0 -47
  315. data/lib/avo/concerns/has_action_stimulus_controllers.rb +0 -15
  316. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  317. data/lib/avo/concerns/has_fields.rb +0 -334
  318. data/lib/avo/concerns/has_html_attributes.rb +0 -123
  319. data/lib/avo/concerns/pagination.rb +0 -53
  320. data/lib/avo/concerns/policy_helpers.rb +0 -31
  321. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  322. data/lib/avo/concerns/visible_items.rb +0 -51
  323. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  324. data/lib/avo/dashboards/base_divider.rb +0 -35
  325. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  326. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  327. data/lib/avo/dashboards/metric_card.rb +0 -9
  328. data/lib/avo/dashboards/partial_card.rb +0 -7
  329. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  330. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  331. data/lib/avo/fields/tags_field.rb +0 -102
  332. data/lib/avo/grid_collector.rb +0 -42
  333. data/lib/avo/hosts/association_scope_host.rb +0 -8
  334. data/lib/avo/hosts/base_host.rb +0 -25
  335. data/lib/avo/hosts/card_visibility.rb +0 -20
  336. data/lib/avo/hosts/dashboard_card.rb +0 -22
  337. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  338. data/lib/avo/hosts/ordering.rb +0 -22
  339. data/lib/avo/hosts/record_host.rb +0 -7
  340. data/lib/avo/hosts/resource_record_host.rb +0 -7
  341. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  342. data/lib/avo/hosts/search_scope_host.rb +0 -7
  343. data/lib/avo/hosts/view_record_host.rb +0 -7
  344. data/lib/avo/hosts/visibility_host.rb +0 -12
  345. data/lib/avo/items_holder.rb +0 -96
  346. data/lib/avo/main_panel.rb +0 -3
  347. data/lib/avo/menu/base_item.rb +0 -25
  348. data/lib/avo/menu/builder.rb +0 -82
  349. data/lib/avo/menu/dashboard.rb +0 -22
  350. data/lib/avo/menu/group.rb +0 -2
  351. data/lib/avo/menu/link.rb +0 -6
  352. data/lib/avo/menu/menu.rb +0 -2
  353. data/lib/avo/menu/resource.rb +0 -22
  354. data/lib/avo/menu/section.rb +0 -2
  355. data/lib/avo/panel.rb +0 -24
  356. data/lib/avo/panel_builder.rb +0 -25
  357. data/lib/avo/resources/controls/action.rb +0 -38
  358. data/lib/avo/resources/controls/execution_context.rb +0 -58
  359. data/lib/avo/resources/controls/items_holder.rb +0 -19
  360. data/lib/avo/resources/controls/link_to.rb +0 -27
  361. data/lib/avo/row.rb +0 -26
  362. data/lib/avo/row_builder.rb +0 -24
  363. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  364. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  365. data/lib/avo/sidebar.rb +0 -30
  366. data/lib/avo/sidebar_builder.rb +0 -24
  367. data/lib/avo/tab.rb +0 -72
  368. data/lib/avo/tab_builder.rb +0 -25
  369. data/lib/avo/tab_group.rb +0 -42
  370. data/lib/avo/tab_group_builder.rb +0 -43
  371. data/lib/avo/tools_manager.rb +0 -11
  372. data/lib/generators/avo/card/chartkick_generator.rb +0 -18
  373. data/lib/generators/avo/card/metric_generator.rb +0 -18
  374. data/lib/generators/avo/card/partial_generator.rb +0 -19
  375. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  376. data/lib/generators/avo/templates/standalone_action.tt +0 -8
  377. /data/app/components/avo/fields/common/files/view_type/{list_item_component.html.erb → list_component.html.erb} +0 -0
@@ -1,25 +0,0 @@
1
- require "dry-initializer"
2
-
3
- # This object holds some data that is usually needed to compute blocks around the app.
4
- module Avo
5
- module Hosts
6
- class BaseHost
7
- extend Dry::Initializer
8
-
9
- option :context, default: proc { Avo::App.context }
10
- option :params, default: proc { Avo::App.params }
11
- option :view_context, default: proc { Avo::App.view_context }
12
- option :current_user, default: proc { Avo::App.current_user }
13
- option :main_app, default: proc { view_context.main_app }
14
- option :avo, default: proc { view_context.avo }
15
- # This is optional because we might instantiate the `Host` first and later hydrate it with a block.
16
- option :block, optional: true
17
-
18
- delegate :authorize, to: Avo::Services::AuthorizationService
19
-
20
- def handle
21
- instance_exec(&block)
22
- end
23
- end
24
- end
25
- end
@@ -1,20 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class CardVisibility
6
- extend Dry::Initializer
7
-
8
- option :block, default: proc { proc {} }
9
- option :current_user, default: proc { ::Avo::App.current_user }
10
- option :context, default: proc { ::Avo::App.context }
11
- option :parent
12
- option :card
13
- option :params, default: proc { ::Avo::App.params }
14
-
15
- def handle
16
- instance_exec(&block)
17
- end
18
- end
19
- end
20
- end
@@ -1,22 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class DashboardCard
6
- extend Dry::Initializer
7
-
8
- option :context
9
- option :range
10
- option :dashboard
11
- option :card
12
- option :params
13
- option :options
14
-
15
- delegate :result, to: :card
16
-
17
- def compute_result
18
- instance_exec(&card.query_block)
19
- end
20
- end
21
- end
22
- end
@@ -1,19 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class DashboardVisibility
6
- extend Dry::Initializer
7
-
8
- option :block, default: proc { proc {} }
9
- option :current_user, default: proc { ::Avo::App.current_user }
10
- option :context, default: proc { ::Avo::App.context }
11
- option :dashboard
12
- option :params, default: proc { ::Avo::App.params }
13
-
14
- def handle
15
- instance_exec(&block)
16
- end
17
- end
18
- end
19
- end
@@ -1,22 +0,0 @@
1
- require "dry-initializer"
2
-
3
- module Avo
4
- module Hosts
5
- class Ordering
6
- extend Dry::Initializer
7
-
8
- option :options, default: proc { {} }
9
- option :resource
10
- option :record, default: proc { resource.model }
11
- option :params, default: proc { resource.params }
12
-
13
- def order(direction)
14
- action = options.dig(:actions, direction.to_sym)
15
-
16
- if action.present?
17
- instance_exec(&action)
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class RecordHost < BaseHost
4
- option :record
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class ResourceRecordHost < RecordHost
4
- option :resource
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class ResourceViewRecordHost < ViewRecordHost
4
- option :resource
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class SearchScopeHost < BaseHost
4
- option :scope
5
- end
6
- end
7
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class ViewRecordHost < RecordHost
4
- option :view
5
- end
6
- end
7
- end
@@ -1,12 +0,0 @@
1
- module Avo
2
- module Hosts
3
- class VisibilityHost < BaseHost
4
- option :parent_resource
5
- option :resource
6
- option :arguments
7
-
8
- # View is optional because in filter context the view is always :index
9
- option :view, optional: true
10
- end
11
- end
12
- end
@@ -1,96 +0,0 @@
1
- module Avo
2
- class ItemsHolder
3
- attr_reader :tools
4
- attr_writer :items
5
- attr_accessor :invalid_fields
6
-
7
- def items
8
- items = @items
9
-
10
- if Avo::App.license.lacks_with_trial(:custom_fields)
11
- items.reject! { |item| item.is_field? && item.custom? }
12
- end
13
-
14
- if Avo::App.license.lacks_with_trial(:advanced_fields)
15
- items.reject! { |item| item.is_field? && item.type == "tags" }
16
- end
17
-
18
- items
19
- end
20
-
21
- def initialize
22
- @items = []
23
- @items_index = 0
24
- @invalid_fields = []
25
- end
26
-
27
- # Adds a field to the bag
28
- def field(field_name, **args, &block)
29
- field_parser = Avo::Dsl::FieldParser.new(id: field_name, order_index: @items_index, **args, &block).parse
30
-
31
- if field_parser.invalid?
32
- as = args.fetch(:as, nil)
33
-
34
- # End execution ehre and add the field to the invalid_fileds payload so we know to wanr the developer about that.
35
- # @todo: Make sure this warning is still active
36
- return add_invalid_field({
37
- name: field_name,
38
- as: as,
39
- # resource: resource_class.name,
40
- message: "There's an invalid field configuration for this resource. <br/> <code class='px-1 py-px rounded bg-red-600'>field :#{field_name}, as: #{as}</code>"
41
- })
42
- end
43
-
44
- add_item field_parser.instance
45
- end
46
-
47
- def tabs(instance)
48
- add_item instance
49
- end
50
-
51
- def tab(name, **args, &block)
52
- add_item Avo::TabBuilder.parse_block(name: name, **args, &block)
53
- end
54
-
55
- def row(**args, &block)
56
- add_item Avo::RowBuilder.parse_block(**args, &block)
57
- end
58
-
59
- def tool(klass, **args)
60
- instance = klass.new(**args)
61
- add_item instance
62
- end
63
-
64
- def panel(panel_name = nil, **args, &block)
65
- panel = Avo::PanelBuilder.parse_block(name: panel_name, **args, &block)
66
-
67
- add_item panel
68
- end
69
-
70
- def heading(body = nil, **args, &block)
71
- field = Avo::Fields::HeadingField.new(body, **args)
72
-
73
- add_item field
74
- end
75
-
76
- def sidebar(instance)
77
- add_item instance
78
- end
79
-
80
- def add_item(instance)
81
- @items << instance
82
-
83
- increment_order_index
84
- end
85
-
86
- private
87
-
88
- def add_invalid_field(payload)
89
- @invalid_fields << payload
90
- end
91
-
92
- def increment_order_index
93
- @items_index += 1
94
- end
95
- end
96
- end
@@ -1,3 +0,0 @@
1
- class Avo::MainPanel < Avo::Panel
2
- class_attribute :item_type, default: :main_panel
3
- end
@@ -1,25 +0,0 @@
1
- require "dry-initializer"
2
-
3
- class Avo::Menu::BaseItem
4
- extend Dry::Initializer
5
-
6
- option :collapsable, default: proc { false }
7
- option :collapsed, default: proc { false }
8
- option :icon, optional: true
9
- option :items, default: proc { [] }
10
- option :name, default: proc { "" }
11
- option :visible, default: proc { true }
12
- option :data, default: proc { {} }
13
-
14
- def visible?
15
- return visible if visible.in? [true, false]
16
-
17
- if visible.respond_to? :call
18
- Avo::Hosts::BaseHost.new(block: visible).handle
19
- end
20
- end
21
-
22
- def navigation_label
23
- label || entity_label
24
- end
25
- end
@@ -1,82 +0,0 @@
1
- class Avo::Menu::Builder
2
- class << self
3
- def parse_menu(&block)
4
- Docile.dsl_eval(Avo::Menu::Builder.new, &block).build
5
- end
6
- end
7
-
8
- delegate :context, to: ::Avo::App
9
- delegate :current_user, to: ::Avo::App
10
- delegate :params, to: ::Avo::App
11
- delegate :request, to: ::Avo::App
12
- delegate :root_path, to: ::Avo::App
13
- delegate :view_context, to: ::Avo::App
14
- delegate :main_app, to: :view_context
15
- delegate :avo, to: :view_context
16
-
17
- def initialize(name: nil, items: [])
18
- @menu = Avo::Menu::Menu.new
19
-
20
- @menu.name = name
21
- @menu.items = items
22
- end
23
-
24
- # Adds a link
25
- def link(name, path = nil, **args)
26
- path ||= args[:path]
27
- @menu.items << Avo::Menu::Link.new(name: name, path: path, **args)
28
- end
29
- alias_method :link_to, :link
30
-
31
- # Validates and adds a resource
32
- def resource(name, **args)
33
- name = name.to_s.singularize
34
- res = Avo::App.guess_resource(name)
35
-
36
- if res.present?
37
- @menu.items << Avo::Menu::Resource.new(resource: name, **args)
38
- end
39
- end
40
- alias_method :resources, :resource
41
-
42
- # Adds a dashboard
43
- def dashboard(dashboard, **args)
44
- @menu.items << Avo::Menu::Dashboard.new(dashboard: dashboard, **args)
45
- end
46
-
47
- # Adds a section
48
- def section(name = nil, **args, &block)
49
- @menu.items << Avo::Menu::Section.new(name: name, **args, items: self.class.parse_menu(&block).items)
50
- end
51
-
52
- # Adds a group
53
- def group(name = nil, **args, &block)
54
- @menu.items << Avo::Menu::Group.new(name: name, **args, items: self.class.parse_menu(&block).items)
55
- end
56
-
57
- # Add all the resources
58
- def all_resources(**args)
59
- Avo::App.resources_for_navigation.each do |res|
60
- resource res.route_key, **args
61
- end
62
- end
63
-
64
- # Add all the dashboards
65
- def all_dashboards(**args)
66
- Avo::App.dashboards_for_navigation.each do |dash|
67
- dashboard dash.id, **args
68
- end
69
- end
70
-
71
- # Add all the tools
72
- def all_tools(**args)
73
- Avo::App.tools_for_navigation.each do |tool|
74
- link tool.humanize, path: root_path(paths: [tool])
75
- end
76
- end
77
-
78
- # Fetch the menu
79
- def build
80
- @menu
81
- end
82
- end
@@ -1,22 +0,0 @@
1
- class Avo::Menu::Dashboard < Avo::Menu::BaseItem
2
- extend Dry::Initializer
3
-
4
- option :dashboard
5
- option :label, optional: true
6
-
7
- def parsed_dashboard
8
- dashboard_by_id || dashboard_by_name
9
- end
10
-
11
- def dashboard_by_name
12
- Avo::App.get_dashboard_by_name dashboard.to_s
13
- end
14
-
15
- def dashboard_by_id
16
- Avo::App.get_dashboard_by_id dashboard.to_s
17
- end
18
-
19
- def entity_label
20
- parsed_dashboard.navigation_label
21
- end
22
- end
@@ -1,2 +0,0 @@
1
- class Avo::Menu::Group < Avo::Menu::BaseItem
2
- end
data/lib/avo/menu/link.rb DELETED
@@ -1,6 +0,0 @@
1
- class Avo::Menu::Link < Avo::Menu::BaseItem
2
- option :path, default: proc { "" }
3
- option :target, optional: true
4
- option :method, optional: true
5
- option :params, optional: true
6
- end
data/lib/avo/menu/menu.rb DELETED
@@ -1,2 +0,0 @@
1
- class Avo::Menu::Menu < OpenStruct
2
- end
@@ -1,22 +0,0 @@
1
- class Avo::Menu::Resource < Avo::Menu::BaseItem
2
- extend Dry::Initializer
3
-
4
- option :resource
5
- option :label, optional: true
6
- option :params, default: proc { {} }
7
-
8
- def parsed_resource
9
- @parsed_resource ||= Avo::App.guess_resource resource.to_s
10
- end
11
-
12
- def entity_label
13
- parsed_resource.navigation_label
14
- end
15
-
16
- def fetch_params
17
- Avo::ExecutionContext.new(
18
- target: params,
19
- resource: parsed_resource
20
- ).handle
21
- end
22
- end
@@ -1,2 +0,0 @@
1
- class Avo::Menu::Section < Avo::Menu::BaseItem
2
- end
data/lib/avo/panel.rb DELETED
@@ -1,24 +0,0 @@
1
- class Avo::Panel
2
- include Avo::Concerns::IsResourceItem
3
- include Avo::Concerns::VisibleItems
4
-
5
- class_attribute :item_type, default: :panel
6
-
7
- attr_reader :name
8
- attr_reader :view
9
- attr_reader :description
10
- attr_accessor :items_holder
11
-
12
- delegate :items, :add_item, to: :items_holder
13
-
14
- def initialize(name: nil, description: nil, view: nil)
15
- @name = name
16
- @view = view
17
- @description = description
18
- @items_holder = Avo::ItemsHolder.new
19
- end
20
-
21
- def has_items?
22
- @items.present?
23
- end
24
- end
@@ -1,25 +0,0 @@
1
- class Avo::PanelBuilder
2
- class << self
3
- def parse_block(**args, &block)
4
- Docile.dsl_eval(new(**args), &block).build
5
- end
6
- end
7
-
8
- delegate :heading, to: :items_holder
9
- delegate :field, to: :items_holder
10
- delegate :row, to: :items_holder
11
- delegate :items, to: :items_holder
12
-
13
- attr_reader :items_holder
14
-
15
- def initialize(name: nil, **args)
16
- @panel = Avo::Panel.new(name: name, **args)
17
- @items_holder = Avo::ItemsHolder.new
18
- end
19
-
20
- # Fetch the tab
21
- def build
22
- @panel.items_holder = @items_holder
23
- @panel
24
- end
25
- end
@@ -1,38 +0,0 @@
1
- module Avo
2
- module Resources
3
- module Controls
4
- class Action < BaseControl
5
- attr_reader :klass
6
-
7
- def initialize(klass, record: nil, resource: nil, view: nil, **args)
8
- super(**args)
9
-
10
- @klass = klass
11
- @resource = resource
12
- @record = record
13
- @view = view
14
- end
15
-
16
- def action
17
- @instance ||= @klass.new(
18
- model: @record,
19
- resource: @resource,
20
- view: @view,
21
- arguments: @resource.get_action_arguments(klass)
22
- )
23
- end
24
-
25
- def path
26
- Avo::Services::URIService.parse(@resource.record_path)
27
- .append_paths("actions")
28
- .append_query(action_id: action.param_id)
29
- .to_s
30
- end
31
-
32
- def label
33
- @args[:label] || action.action_name
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,58 +0,0 @@
1
- require "dry-initializer"
2
-
3
- # This object holds some data tha is usually needed to compute blocks around the app.
4
- module Avo
5
- module Resources
6
- module Controls
7
- class ExecutionContext
8
- extend Dry::Initializer
9
-
10
- option :context, default: proc { Avo::App.context }
11
- option :params, default: proc { Avo::App.params }
12
- option :view_context, default: proc { Avo::App.view_context }
13
- option :current_user, default: proc { Avo::App.current_user }
14
- option :items_holder, default: proc { Avo::Resources::Controls::ItemsHolder.new }
15
- option :resource, optional: true
16
- option :record, optional: true
17
- option :view, optional: true
18
- option :block, optional: true
19
-
20
- delegate :authorize, to: Avo::Services::AuthorizationService
21
-
22
- def handle
23
- instance_exec(&block)
24
- end
25
-
26
- private
27
-
28
- def back_button(**args)
29
- items_holder.add_item Avo::Resources::Controls::BackButton.new(**args)
30
- end
31
-
32
- def delete_button(**args)
33
- items_holder.add_item Avo::Resources::Controls::DeleteButton.new(**args)
34
- end
35
-
36
- def detach_button(**args)
37
- items_holder.add_item Avo::Resources::Controls::DetachButton.new(**args)
38
- end
39
-
40
- def edit_button(**args)
41
- items_holder.add_item Avo::Resources::Controls::EditButton.new(**args)
42
- end
43
-
44
- def link_to(label, path, **args)
45
- items_holder.add_item Avo::Resources::Controls::LinkTo.new(label: label, path: path, **args)
46
- end
47
-
48
- def actions_list(**args)
49
- items_holder.add_item Avo::Resources::Controls::ActionsList.new(**args)
50
- end
51
-
52
- def action(klass, **args)
53
- items_holder.add_item Avo::Resources::Controls::Action.new(klass, record: record, resource: resource, view: view, **args)
54
- end
55
- end
56
- end
57
- end
58
- end
@@ -1,19 +0,0 @@
1
- module Avo
2
- module Resources
3
- module Controls
4
- class ItemsHolder
5
- attr_reader :items
6
-
7
- def initialize
8
- @items = []
9
- end
10
-
11
- def add_item(instance)
12
- @items << instance
13
-
14
- self
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,27 +0,0 @@
1
- module Avo
2
- module Resources
3
- module Controls
4
- class LinkTo < BaseControl
5
- def initialize(**args)
6
- super(**args)
7
- end
8
-
9
- def path
10
- @args[:path]
11
- end
12
-
13
- def target
14
- @args[:target] || nil
15
- end
16
-
17
- def data
18
- @args[:data] || {}
19
- end
20
-
21
- def class
22
- @args[:class] || nil
23
- end
24
- end
25
- end
26
- end
27
- end
data/lib/avo/row.rb DELETED
@@ -1,26 +0,0 @@
1
- class Avo::Row
2
- include Avo::Concerns::IsResourceItem
3
- include Avo::Concerns::VisibleItems
4
-
5
- class_attribute :item_type, default: :row
6
-
7
- attr_reader :view
8
- attr_accessor :items_holder
9
-
10
- delegate :items, :add_item, to: :items_holder
11
-
12
- def initialize(view: nil)
13
- @view = view
14
- @items_holder = Avo::ItemsHolder.new
15
- end
16
-
17
- def hydrate(view: nil, **args)
18
- @view = view
19
-
20
- self
21
- end
22
-
23
- def has_items?
24
- @items.present?
25
- end
26
- end