avo 2.44.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 (411) 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 +9 -15
  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 +5 -4
  73. data/app/components/avo/index/resource_table_component.rb +24 -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 +29 -40
  84. data/app/components/avo/paginator_component.rb +23 -5
  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 -84
  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 -181
  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 +145 -98
  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 +3 -1
  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 +9 -5
  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/_flash_alerts.turbo_stream.erb +1 -1
  143. data/app/views/avo/partials/_footer.html.erb +1 -1
  144. data/app/views/avo/partials/_javascript.html.erb +5 -0
  145. data/app/views/avo/partials/_logo.html.erb +1 -1
  146. data/app/views/avo/partials/_navbar.html.erb +3 -5
  147. data/app/views/avo/partials/_resource_search.html.erb +1 -0
  148. data/app/views/avo/partials/_table_header.html.erb +5 -11
  149. data/app/views/layouts/avo/application.html.erb +5 -4
  150. data/avo.gemspec +10 -8
  151. data/bin/dev +3 -1
  152. data/bin/prod +0 -0
  153. data/config/i18n-tasks.yml +1 -1
  154. data/config/initializers/pagy.rb +2 -0
  155. data/config/master.key +1 -0
  156. data/config/routes.rb +7 -10
  157. data/db/factories.rb +6 -0
  158. data/lib/avo/asset_manager.rb +30 -0
  159. data/lib/avo/base_action.rb +78 -60
  160. data/lib/avo/base_resource.rb +286 -225
  161. data/lib/avo/base_resource_tool.rb +9 -16
  162. data/lib/avo/concerns/borrow_items_holder.rb +35 -0
  163. data/lib/avo/concerns/breadcrumbs.rb +2 -2
  164. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
  165. data/lib/avo/concerns/filters_session_handler.rb +7 -5
  166. data/lib/avo/concerns/has_controls.rb +37 -0
  167. data/lib/avo/concerns/has_description.rb +23 -0
  168. data/lib/avo/concerns/has_helpers.rb +18 -0
  169. data/lib/avo/concerns/has_item_type.rb +42 -0
  170. data/lib/avo/concerns/has_items.rb +339 -0
  171. data/lib/avo/concerns/hydration.rb +17 -0
  172. data/lib/avo/concerns/is_resource_item.rb +16 -36
  173. data/lib/avo/concerns/is_visible.rb +15 -0
  174. data/lib/avo/concerns/model_class_constantized.rb +0 -2
  175. data/lib/avo/concerns/pagination.rb +53 -0
  176. data/lib/avo/concerns/visible_in_different_views.rb +132 -0
  177. data/lib/avo/concerns/visible_items.rb +7 -38
  178. data/lib/avo/configuration/branding.rb +0 -12
  179. data/lib/avo/configuration.rb +28 -11
  180. data/lib/avo/current.rb +39 -0
  181. data/lib/avo/dsl/field_parser.rb +3 -3
  182. data/lib/avo/dynamic_router.rb +18 -3
  183. data/lib/avo/engine.rb +35 -30
  184. data/lib/avo/error_manager.rb +25 -0
  185. data/lib/avo/execution_context.rb +14 -15
  186. data/lib/avo/fields/base_field.rb +84 -121
  187. data/lib/avo/fields/belongs_to_field.rb +19 -23
  188. data/lib/avo/fields/concerns/file_authorization.rb +2 -2
  189. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  190. data/lib/avo/fields/concerns/has_default.rb +1 -5
  191. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  192. data/lib/avo/fields/concerns/has_html_attributes.rb +112 -0
  193. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  194. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  195. data/lib/avo/fields/concerns/is_required.rb +5 -7
  196. data/lib/avo/fields/concerns/is_searchable.rb +15 -0
  197. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  198. data/lib/avo/fields/concerns/use_view_components.rb +45 -0
  199. data/lib/avo/fields/country_field.rb +4 -0
  200. data/lib/avo/fields/date_time_field.rb +1 -5
  201. data/lib/avo/fields/external_image_field.rb +2 -2
  202. data/lib/avo/fields/field_manager.rb +55 -0
  203. data/lib/avo/fields/file_field.rb +2 -2
  204. data/lib/avo/fields/gravatar_field.rb +2 -2
  205. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  206. data/lib/avo/fields/has_base_field.rb +21 -17
  207. data/lib/avo/fields/has_many_field.rb +5 -2
  208. data/lib/avo/fields/has_one_field.rb +8 -12
  209. data/lib/avo/fields/heading_field.rb +9 -14
  210. data/lib/avo/fields/hidden_field.rb +1 -1
  211. data/lib/avo/fields/id_field.rb +3 -3
  212. data/lib/avo/fields/location_field.rb +10 -10
  213. data/lib/avo/fields/password_field.rb +1 -1
  214. data/lib/avo/fields/preview_field.rb +14 -0
  215. data/lib/avo/fields/select_field.rb +12 -8
  216. data/lib/avo/fields/status_field.rb +7 -1
  217. data/lib/avo/fields/text_field.rb +2 -2
  218. data/lib/avo/filters/base_filter.rb +9 -4
  219. data/lib/avo/html/builder.rb +8 -8
  220. data/lib/avo/item_grapher.rb +78 -0
  221. data/lib/avo/licensing/h_q.rb +11 -73
  222. data/lib/avo/licensing/license.rb +5 -1
  223. data/lib/avo/licensing/license_manager.rb +1 -1
  224. data/lib/avo/licensing/pro_license.rb +1 -7
  225. data/lib/avo/loaders/fields_loader.rb +7 -1
  226. data/lib/avo/plugin.rb +36 -0
  227. data/lib/avo/plugin_manager.rb +56 -0
  228. data/lib/avo/prefixed_test_helpers.rb +20 -0
  229. data/lib/avo/reloader.rb +3 -0
  230. data/lib/avo/resources/controls/actions_list.rb +7 -12
  231. data/lib/avo/resources/controls/attach_button.rb +15 -0
  232. data/lib/avo/resources/controls/back_button.rb +1 -1
  233. data/lib/avo/resources/controls/base_control.rb +15 -49
  234. data/lib/avo/resources/controls/create_button.rb +15 -0
  235. data/lib/avo/resources/controls/delete_button.rb +5 -1
  236. data/lib/avo/resources/controls/detach_button.rb +4 -1
  237. data/lib/avo/resources/controls/edit_button.rb +4 -1
  238. data/lib/avo/resources/controls/order_controls.rb +8 -0
  239. data/lib/avo/resources/controls/save_button.rb +13 -0
  240. data/lib/avo/resources/controls/show_button.rb +15 -0
  241. data/lib/avo/resources/items/holder.rb +96 -0
  242. data/lib/avo/resources/items/item_group.rb +44 -0
  243. data/lib/avo/resources/items/main_panel.rb +12 -0
  244. data/lib/avo/resources/items/panel.rb +2 -0
  245. data/lib/avo/resources/items/row.rb +42 -0
  246. data/lib/avo/resources/items/sidebar.rb +46 -0
  247. data/lib/avo/resources/items/tab.rb +54 -0
  248. data/lib/avo/resources/items/tab_group.rb +62 -0
  249. data/lib/avo/resources/resource_manager.rb +179 -0
  250. data/lib/avo/services/authorization_service.rb +11 -110
  251. data/lib/avo/services/debug_service.rb +93 -0
  252. data/lib/avo/services/encryption_service.rb +8 -12
  253. data/lib/avo/services/telemetry_service.rb +85 -0
  254. data/lib/avo/test_helpers.rb +362 -0
  255. data/lib/avo/tools/tool_manager.rb +30 -0
  256. data/lib/avo/version.rb +1 -1
  257. data/lib/avo/view_inquirer.rb +36 -0
  258. data/lib/avo.rb +109 -24
  259. data/lib/generators/avo/action_generator.rb +8 -8
  260. data/lib/generators/avo/card_generator.rb +27 -0
  261. data/lib/generators/avo/concerns/parent_controller.rb +20 -0
  262. data/lib/generators/avo/controller_generator.rb +3 -0
  263. data/lib/generators/avo/eject_generator.rb +180 -15
  264. data/lib/generators/avo/field_generator.rb +49 -2
  265. data/lib/generators/avo/filter_generator.rb +8 -8
  266. data/lib/generators/avo/js/install_generator.rb +2 -2
  267. data/lib/generators/avo/resource_generator.rb +12 -9
  268. data/lib/generators/avo/scope_generator.rb +15 -0
  269. data/lib/generators/avo/tailwindcss/install_generator.rb +70 -26
  270. data/lib/generators/avo/templates/action.tt +8 -6
  271. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  272. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  273. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  274. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  275. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  276. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  277. data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
  278. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  279. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  280. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  281. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  282. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  283. data/lib/generators/avo/templates/initializer/avo.tt +7 -3
  284. data/lib/generators/avo/templates/locales/avo.ar.yml +7 -6
  285. data/lib/generators/avo/templates/locales/avo.en.yml +6 -3
  286. data/lib/generators/avo/templates/locales/avo.es.yml +127 -0
  287. data/lib/generators/avo/templates/locales/avo.fr.yml +3 -0
  288. data/lib/generators/avo/templates/locales/avo.nb.yml +3 -0
  289. data/lib/generators/avo/templates/locales/avo.nn.yml +3 -0
  290. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +3 -0
  291. data/lib/generators/avo/templates/locales/avo.pt.yml +3 -0
  292. data/lib/generators/avo/templates/locales/avo.ro.yml +8 -5
  293. data/lib/generators/avo/templates/locales/avo.tr.yml +3 -0
  294. data/lib/generators/avo/templates/resource/controller.tt +1 -1
  295. data/lib/generators/avo/templates/resource/resource.tt +7 -7
  296. data/lib/generators/avo/templates/resource_tools/partial.tt +2 -2
  297. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  298. data/lib/generators/avo/templates/scope.tt +6 -0
  299. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  300. data/lib/generators/avo/templates/tailwindcss/avo.tailwind.css +5 -3
  301. data/lib/generators/avo/templates/tailwindcss/tailwind.config.js +11 -0
  302. data/lib/tasks/avo_tasks.rake +72 -4
  303. data/public/avo-assets/avo.base.css +1893 -1187
  304. data/public/avo-assets/avo.base.js +217 -305
  305. data/public/avo-assets/avo.base.js.map +3 -3
  306. data/public/avo-assets/avo.css +9744 -0
  307. data/public/avo-assets/avo.js +513 -0
  308. data/public/avo-assets/avo.js.map +7 -0
  309. data/tailwind.custom.js +47 -0
  310. data/tailwind.preset.js +152 -0
  311. metadata +107 -114
  312. data/app/components/avo/card_component.html.erb +0 -46
  313. data/app/components/avo/card_component.rb +0 -25
  314. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  315. data/app/components/avo/dashboards/divider_component.rb +0 -19
  316. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  317. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  318. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  319. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  320. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  321. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  322. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  323. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  324. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  325. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  326. data/app/components/avo/index/ordering/base_component.rb +0 -9
  327. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  328. data/app/components/avo/index/ordering/button_component.rb +0 -23
  329. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  330. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  331. data/app/components/avo/item_switcher_component.html.erb +0 -27
  332. data/app/components/avo/item_switcher_component.rb +0 -48
  333. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  334. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  335. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  336. data/app/controllers/avo/dashboards_controller.rb +0 -22
  337. data/app/controllers/avo/reorder_controller.rb +0 -25
  338. data/app/javascript/js/controllers/base_controller.js +0 -22
  339. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  340. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  341. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  342. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  343. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  344. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  345. data/app/views/avo/dashboards/show.html.erb +0 -38
  346. data/app/views/avo/partials/_global_search.html.erb +0 -19
  347. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  348. data/lib/avo/app.rb +0 -237
  349. data/lib/avo/base_card.rb +0 -161
  350. data/lib/avo/concerns/fetches_things.rb +0 -150
  351. data/lib/avo/concerns/handles_field_args.rb +0 -47
  352. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  353. data/lib/avo/concerns/has_fields.rb +0 -334
  354. data/lib/avo/concerns/has_html_attributes.rb +0 -108
  355. data/lib/avo/concerns/policy_helpers.rb +0 -31
  356. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  357. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  358. data/lib/avo/dashboards/base_divider.rb +0 -35
  359. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  360. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  361. data/lib/avo/dashboards/metric_card.rb +0 -9
  362. data/lib/avo/dashboards/partial_card.rb +0 -7
  363. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  364. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  365. data/lib/avo/fields/tags_field.rb +0 -102
  366. data/lib/avo/grid_collector.rb +0 -42
  367. data/lib/avo/hosts/association_scope_host.rb +0 -8
  368. data/lib/avo/hosts/base_host.rb +0 -25
  369. data/lib/avo/hosts/card_visibility.rb +0 -20
  370. data/lib/avo/hosts/dashboard_card.rb +0 -22
  371. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  372. data/lib/avo/hosts/ordering.rb +0 -22
  373. data/lib/avo/hosts/record_host.rb +0 -7
  374. data/lib/avo/hosts/resource_record_host.rb +0 -7
  375. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  376. data/lib/avo/hosts/search_scope_host.rb +0 -7
  377. data/lib/avo/hosts/view_record_host.rb +0 -7
  378. data/lib/avo/hosts/visibility_host.rb +0 -12
  379. data/lib/avo/items_holder.rb +0 -96
  380. data/lib/avo/main_panel.rb +0 -3
  381. data/lib/avo/menu/base_item.rb +0 -25
  382. data/lib/avo/menu/builder.rb +0 -82
  383. data/lib/avo/menu/dashboard.rb +0 -22
  384. data/lib/avo/menu/group.rb +0 -2
  385. data/lib/avo/menu/link.rb +0 -6
  386. data/lib/avo/menu/menu.rb +0 -2
  387. data/lib/avo/menu/resource.rb +0 -22
  388. data/lib/avo/menu/section.rb +0 -2
  389. data/lib/avo/panel.rb +0 -24
  390. data/lib/avo/panel_builder.rb +0 -25
  391. data/lib/avo/resources/controls/action.rb +0 -38
  392. data/lib/avo/resources/controls/execution_context.rb +0 -58
  393. data/lib/avo/resources/controls/items_holder.rb +0 -19
  394. data/lib/avo/resources/controls/link_to.rb +0 -27
  395. data/lib/avo/row.rb +0 -26
  396. data/lib/avo/row_builder.rb +0 -24
  397. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  398. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  399. data/lib/avo/sidebar.rb +0 -30
  400. data/lib/avo/sidebar_builder.rb +0 -24
  401. data/lib/avo/tab.rb +0 -72
  402. data/lib/avo/tab_builder.rb +0 -25
  403. data/lib/avo/tab_group.rb +0 -42
  404. data/lib/avo/tab_group_builder.rb +0 -43
  405. data/lib/avo/tools_manager.rb +0 -11
  406. data/lib/generators/avo/card/chartkick_generator.rb +0 -18
  407. data/lib/generators/avo/card/metric_generator.rb +0 -18
  408. data/lib/generators/avo/card/partial_generator.rb +0 -19
  409. data/lib/generators/avo/templates/js/avo.custom.js +0 -2
  410. data/lib/generators/avo/templates/standalone_action.tt +0 -8
  411. /data/app/assets/stylesheets/css/{tags.css → fields/tags.css} +0 -0
@@ -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
@@ -1,24 +0,0 @@
1
- class Avo::RowBuilder
2
- class << self
3
- def parse_block(**args, &block)
4
- Docile.dsl_eval(new(**args), &block).build
5
- end
6
- end
7
-
8
- attr_reader :items_holder
9
-
10
- delegate :field, to: :items_holder
11
- delegate :tool, to: :items_holder
12
- delegate :items, to: :items_holder
13
-
14
- def initialize(**args)
15
- @row = Avo::Row.new(**args)
16
- @items_holder = Avo::ItemsHolder.new
17
- end
18
-
19
- # Fetch the tab
20
- def build
21
- @row.items_holder = @items_holder
22
- @row
23
- end
24
- end
@@ -1,37 +0,0 @@
1
- module Avo
2
- module Services
3
- module AuthorizationClients
4
- class NilClient
5
- def authorize(user, record, action, policy_class: nil)
6
- true
7
- end
8
-
9
- def policy(user, record)
10
- NilPolicy.new
11
- end
12
-
13
- def policy!(user, record)
14
- NilPolicy.new
15
- end
16
-
17
- def apply_policy(user, model, policy_class: nil)
18
- model
19
- end
20
-
21
- class NilPolicy
22
- def initialize(user = nil, record = nil)
23
- end
24
- # rubocop:enable Style/RedundantInitialize
25
-
26
- def method_missing(method, *args, &block)
27
- self
28
- end
29
-
30
- def respond_to_missing?
31
- true
32
- end
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,51 +0,0 @@
1
- module Avo
2
- module Services
3
- module AuthorizationClients
4
- class PunditClient
5
- def authorize(user, record, action, policy_class: nil)
6
- Pundit.authorize(user, record, action, policy_class: policy_class)
7
- rescue Pundit::NotDefinedError => error
8
- raise NoPolicyError.new error.message
9
- rescue Pundit::NotAuthorizedError => error
10
- raise NotAuthorizedError.new error.message
11
- end
12
-
13
- def policy(user, record)
14
- Pundit.policy(user, record)
15
- end
16
-
17
- def policy!(user, record)
18
- Pundit.policy!(user, record)
19
- rescue Pundit::NotDefinedError => error
20
- raise NoPolicyError.new error.message
21
- end
22
-
23
- def apply_policy(user, model, policy_class: nil)
24
- # Try and figure out the scope from a given policy or auto-detected one
25
- scope_from_policy_class = scope_for_policy_class(policy_class)
26
-
27
- # If we discover one use it.
28
- # Else fallback to pundit.
29
- if scope_from_policy_class.present?
30
- scope_from_policy_class.new(user, model).resolve
31
- else
32
- Pundit.policy_scope!(user, model)
33
- end
34
- rescue Pundit::NotDefinedError => error
35
- raise NoPolicyError.new error.message
36
- end
37
-
38
- private
39
-
40
- # Fetches the scope for a given policy
41
- def scope_for_policy_class(policy_class = nil)
42
- return if policy_class.blank?
43
-
44
- if policy_class.present? && defined?(policy_class::Scope)
45
- policy_class::Scope
46
- end
47
- end
48
- end
49
- end
50
- end
51
- end
data/lib/avo/sidebar.rb DELETED
@@ -1,30 +0,0 @@
1
- class Avo::Sidebar
2
- include Avo::Concerns::IsResourceItem
3
- include Avo::Concerns::VisibleItems
4
- include Avo::Fields::FieldExtensions::VisibleInDifferentViews
5
-
6
- class_attribute :item_type, default: :sidebar
7
- delegate :items, :add_item, to: :items_holder
8
-
9
- attr_reader :name
10
- attr_reader :view
11
- attr_accessor :items_holder
12
-
13
- def initialize(name: nil, view: nil, **args)
14
- # Initialize the visibility markers
15
- super
16
-
17
- @name = name
18
- @items_holder = Avo::ItemsHolder.new
19
- @view = view
20
-
21
- show_on args[:show_on] if args[:show_on].present?
22
- hide_on args[:hide_on] if args[:hide_on].present?
23
- only_on args[:only_on] if args[:only_on].present?
24
- except_on args[:except_on] if args[:except_on].present?
25
- end
26
-
27
- def empty?
28
- visible_items.blank?
29
- end
30
- end
@@ -1,24 +0,0 @@
1
- class Avo::SidebarBuilder
2
- class << self
3
- def parse_block(**args, &block)
4
- Docile.dsl_eval(new(**args), &block).build
5
- end
6
- end
7
-
8
- attr_reader :items_holder
9
-
10
- delegate :field, to: :items_holder
11
- delegate :items, to: :items_holder
12
- delegate :heading, to: :items_holder
13
-
14
- def initialize(name: nil, **args)
15
- @sidebar = Avo::Sidebar.new(**args)
16
- @items_holder = Avo::ItemsHolder.new
17
- end
18
-
19
- # Fetch the sidebar
20
- def build
21
- @sidebar.items_holder = @items_holder
22
- @sidebar
23
- end
24
- end