avo 2.45.0 → 3.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of avo might be problematic. Click here for more details.

Files changed (415) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -22
  3. data/Gemfile.lock +181 -160
  4. data/README.md +1 -1
  5. data/{public/avo-assets → app/assets/builds}/avo.base.css +479 -698
  6. data/app/assets/builds/avo.base.js +93804 -0
  7. data/app/assets/builds/avo.base.js.map +7 -0
  8. data/app/assets/stylesheets/avo.base.css +2 -2
  9. data/app/assets/svgs/failed_to_load.svg +1 -0
  10. data/app/assets/svgs/font.svg +1 -0
  11. data/app/assets/svgs/grid-empty-state.svg +1 -0
  12. data/app/assets/svgs/table-empty-state.svg +1 -0
  13. data/app/assets/svgs/triangle-up.svg +1 -0
  14. data/app/components/avo/actions_component.html.erb +18 -4
  15. data/app/components/avo/actions_component.rb +12 -18
  16. data/app/components/avo/alert_component.html.erb +1 -1
  17. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  18. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  19. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  20. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  21. data/app/components/avo/base_component.rb +14 -11
  22. data/app/components/avo/button_component.rb +20 -3
  23. data/app/components/avo/empty_state_component.rb +1 -1
  24. data/app/components/avo/field_wrapper_component.html.erb +4 -4
  25. data/app/components/avo/field_wrapper_component.rb +9 -9
  26. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  27. data/app/components/avo/fields/belongs_to_field/edit_component.rb +5 -20
  28. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  29. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  30. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -2
  31. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  32. data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
  33. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  34. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  35. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  36. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  37. data/app/components/avo/fields/common/files_list_viewer_component.rb +8 -0
  38. data/app/components/avo/fields/common/heading_component.html.erb +1 -1
  39. data/app/components/avo/fields/common/single_file_viewer_component.html.erb +56 -0
  40. data/app/components/avo/fields/common/single_file_viewer_component.rb +55 -0
  41. data/app/components/avo/fields/country_field/edit_component.html.erb +1 -3
  42. data/app/components/avo/fields/edit_component.rb +1 -1
  43. data/app/components/avo/fields/file_field/edit_component.html.erb +2 -4
  44. data/app/components/avo/fields/file_field/edit_component.rb +0 -1
  45. data/app/components/avo/fields/file_field/index_component.rb +2 -2
  46. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  47. data/app/components/avo/fields/files_field/edit_component.html.erb +2 -4
  48. data/app/components/avo/fields/files_field/edit_component.rb +0 -1
  49. data/app/components/avo/fields/files_field/show_component.html.erb +1 -1
  50. data/app/components/avo/fields/has_many_field/show_component.html.erb +1 -1
  51. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  52. data/app/components/avo/fields/has_one_field/show_component.html.erb +2 -2
  53. data/app/components/avo/fields/has_one_field/show_component.rb +3 -7
  54. data/app/components/avo/fields/index_component.rb +5 -6
  55. data/app/components/avo/fields/markdown_field/edit_component.html.erb +3 -4
  56. data/app/components/avo/fields/markdown_field/show_component.html.erb +3 -3
  57. data/app/components/avo/fields/number_field/edit_component.html.erb +1 -3
  58. data/app/components/avo/fields/password_field/edit_component.html.erb +1 -3
  59. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  60. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  61. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +0 -1
  62. data/app/components/avo/fields/select_field/edit_component.html.erb +2 -3
  63. data/app/components/avo/fields/show_component.rb +4 -1
  64. data/app/components/avo/fields/status_field/edit_component.html.erb +1 -1
  65. data/app/components/avo/fields/text_field/edit_component.html.erb +2 -3
  66. data/app/components/avo/fields/textarea_field/edit_component.html.erb +0 -1
  67. data/app/components/avo/fields/trix_field/edit_component.html.erb +1 -2
  68. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  69. data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
  70. data/app/components/avo/filters_component.html.erb +9 -3
  71. data/app/components/avo/filters_component.rb +4 -4
  72. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  73. data/app/components/avo/index/grid_item_component.html.erb +5 -2
  74. data/app/components/avo/index/grid_item_component.rb +7 -6
  75. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  76. data/app/components/avo/index/resource_controls_component.rb +128 -18
  77. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  78. data/app/components/avo/index/resource_grid_component.rb +5 -2
  79. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  80. data/app/components/avo/index/resource_table_component.rb +14 -20
  81. data/app/components/avo/index/table_row_component.html.erb +8 -4
  82. data/app/components/avo/index/table_row_component.rb +3 -2
  83. data/app/components/avo/item_switcher_component.html.erb +5 -10
  84. data/app/components/avo/item_switcher_component.rb +2 -3
  85. data/app/components/avo/modal_component.html.erb +7 -12
  86. data/app/components/avo/modal_component.rb +0 -21
  87. data/app/components/avo/paginator_component.html.erb +40 -29
  88. data/app/components/avo/paginator_component.rb +5 -23
  89. data/app/components/avo/panel_component.html.erb +8 -11
  90. data/app/components/avo/panel_component.rb +0 -1
  91. data/app/components/avo/profile_item_component.html.erb +2 -17
  92. data/app/components/avo/profile_item_component.rb +1 -13
  93. data/app/components/avo/referrer_params_component.html.erb +1 -4
  94. data/app/components/avo/resource_component.rb +142 -30
  95. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  96. data/app/components/avo/sidebar/link_component.html.erb +0 -2
  97. data/app/components/avo/sidebar/link_component.rb +3 -5
  98. data/app/components/avo/sidebar_component.html.erb +9 -2
  99. data/app/components/avo/sidebar_component.rb +5 -3
  100. data/app/components/avo/sidebar_profile_component.html.erb +27 -20
  101. data/app/components/avo/tab_group_component.html.erb +13 -7
  102. data/app/components/avo/tab_group_component.rb +1 -6
  103. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  104. data/app/components/avo/tab_switcher_component.rb +4 -39
  105. data/app/components/avo/views/resource_edit_component.html.erb +16 -52
  106. data/app/components/avo/views/resource_edit_component.rb +7 -18
  107. data/app/components/avo/views/resource_index_component.html.erb +38 -53
  108. data/app/components/avo/views/resource_index_component.rb +60 -16
  109. data/app/components/avo/views/resource_show_component.html.erb +8 -151
  110. data/app/components/avo/views/resource_show_component.rb +6 -11
  111. data/app/controllers/avo/actions_controller.rb +19 -16
  112. data/app/controllers/avo/application_controller.rb +40 -109
  113. data/app/controllers/avo/associations_controller.rb +34 -41
  114. data/app/controllers/avo/attachments_controller.rb +10 -25
  115. data/app/controllers/avo/base_controller.rb +91 -103
  116. data/app/controllers/avo/debug_controller.rb +17 -5
  117. data/app/controllers/avo/search_controller.rb +29 -54
  118. data/app/controllers/avo/team_users_controller.rb +4 -0
  119. data/app/controllers/concerns/avo/initializes_avo.rb +26 -0
  120. data/app/helpers/avo/application_helper.rb +20 -21
  121. data/app/helpers/avo/resources_helper.rb +1 -1
  122. data/app/helpers/avo/url_helpers.rb +27 -11
  123. data/app/javascript/avo.base.js +1 -0
  124. data/app/javascript/js/application.js +0 -5
  125. data/app/javascript/js/controllers/action_controller.js +5 -3
  126. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  127. data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
  128. data/app/javascript/js/controllers/filter_controller.js +1 -1
  129. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  130. data/app/javascript/js/controllers/preview_controller.js +24 -0
  131. data/app/javascript/js/controllers/search_controller.js +1 -3
  132. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  133. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  134. data/app/javascript/js/controllers.js +12 -8
  135. data/app/javascript/js/custom-stream-actions.js +15 -0
  136. data/app/views/avo/{attachments/destroy.turbo_stream.erb → actions/keep_modal_open.turbo_stream.erb} +0 -2
  137. data/app/views/avo/actions/show.html.erb +11 -10
  138. data/app/views/avo/associations/new.html.erb +4 -4
  139. data/app/views/avo/base/index.html.erb +3 -2
  140. data/app/views/avo/base/new.html.erb +2 -1
  141. data/app/views/avo/base/preview.html.erb +19 -0
  142. data/app/views/avo/base/show.html.erb +1 -1
  143. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  144. data/app/views/avo/debug/report.html.erb +32 -17
  145. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -15
  146. data/app/views/avo/home/index.html.erb +1 -1
  147. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  148. data/app/views/avo/partials/_javascript.html.erb +5 -0
  149. data/app/views/avo/partials/_logo.html.erb +1 -1
  150. data/app/views/avo/partials/_navbar.html.erb +3 -5
  151. data/app/views/avo/partials/_table_header.html.erb +5 -3
  152. data/app/views/avo/partials/_view_toggle_button.html.erb +0 -9
  153. data/app/views/avo/private/design.html.erb +2 -2
  154. data/app/views/layouts/avo/application.html.erb +3 -0
  155. data/avo.gemspec +6 -7
  156. data/bin/dev +1 -1
  157. data/bin/prod +0 -0
  158. data/config/i18n-tasks.yml +1 -1
  159. data/config/initializers/pagy.rb +10 -14
  160. data/config/master.key +1 -0
  161. data/config/routes.rb +8 -12
  162. data/db/factories.rb +7 -18
  163. data/lib/avo/action_model.rb +20 -0
  164. data/lib/avo/app.rb +90 -162
  165. data/lib/avo/asset_manager.rb +30 -0
  166. data/lib/avo/base_action.rb +38 -35
  167. data/lib/avo/base_resource.rb +107 -95
  168. data/lib/avo/base_resource_tool.rb +9 -16
  169. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +3 -3
  170. data/lib/avo/concerns/filters_session_handler.rb +1 -0
  171. data/lib/avo/concerns/has_controls.rb +37 -0
  172. data/lib/avo/concerns/has_item_type.rb +38 -0
  173. data/lib/avo/concerns/{has_fields.rb → has_items.rb} +110 -97
  174. data/lib/avo/concerns/is_resource_item.rb +24 -36
  175. data/lib/avo/concerns/is_visible.rb +15 -0
  176. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  177. data/lib/avo/configuration/branding.rb +0 -12
  178. data/lib/avo/configuration.rb +8 -45
  179. data/lib/avo/current.rb +5 -0
  180. data/lib/avo/dsl/field_parser.rb +1 -1
  181. data/lib/avo/dynamic_router.rb +6 -2
  182. data/lib/avo/engine.rb +37 -30
  183. data/lib/avo/error_manager.rb +25 -0
  184. data/lib/avo/execution_context.rb +9 -15
  185. data/lib/avo/fields/badge_field.rb +1 -1
  186. data/lib/avo/fields/base_field.rb +72 -123
  187. data/lib/avo/fields/belongs_to_field.rb +14 -25
  188. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  189. data/lib/avo/fields/concerns/has_default.rb +1 -5
  190. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  191. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  192. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  193. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  194. data/lib/avo/fields/concerns/is_required.rb +5 -7
  195. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  196. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  197. data/lib/avo/fields/country_field.rb +4 -0
  198. data/lib/avo/fields/date_field.rb +3 -16
  199. data/lib/avo/fields/date_time_field.rb +1 -5
  200. data/lib/avo/fields/field_manager.rb +45 -0
  201. data/lib/avo/fields/file_field.rb +0 -2
  202. data/lib/avo/fields/files_field.rb +0 -6
  203. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  204. data/lib/avo/fields/has_base_field.rb +11 -14
  205. data/lib/avo/fields/has_many_field.rb +5 -2
  206. data/lib/avo/fields/has_one_field.rb +5 -10
  207. data/lib/avo/fields/heading_field.rb +4 -1
  208. data/lib/avo/fields/hidden_field.rb +1 -1
  209. data/lib/avo/fields/id_field.rb +2 -3
  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 +4 -0
  214. data/lib/avo/filters/base_filter.rb +3 -8
  215. data/lib/avo/grid_collector.rb +7 -9
  216. data/lib/avo/html/builder.rb +5 -8
  217. data/lib/avo/item_grapher.rb +78 -0
  218. data/lib/avo/licensing/h_q.rb +3 -67
  219. data/lib/avo/licensing/license.rb +2 -2
  220. data/lib/avo/licensing/license_manager.rb +1 -1
  221. data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
  222. data/lib/avo/licensing/pro_license.rb +1 -7
  223. data/lib/avo/plugin.rb +6 -0
  224. data/lib/avo/plugin_manager.rb +58 -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 +6 -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 +76 -0
  239. data/lib/avo/resources/items/item_group.rb +48 -0
  240. data/lib/avo/resources/items/main_panel.rb +2 -0
  241. data/lib/avo/resources/items/panel.rb +2 -0
  242. data/lib/avo/resources/items/sidebar.rb +47 -0
  243. data/lib/avo/resources/items/tab.rb +60 -0
  244. data/lib/avo/resources/items/tab_group.rb +68 -0
  245. data/lib/avo/resources/resource_manager.rb +181 -0
  246. data/lib/avo/services/authorization_service.rb +11 -110
  247. data/lib/avo/services/debug_service.rb +92 -0
  248. data/lib/avo/services/telemetry_service.rb +84 -0
  249. data/lib/avo/test_helpers.rb +362 -0
  250. data/lib/avo/tools/tool_manager.rb +30 -0
  251. data/lib/avo/version.rb +1 -1
  252. data/lib/avo.rb +7 -0
  253. data/lib/generators/avo/eject_generator.rb +0 -1
  254. data/lib/generators/avo/install_generator.rb +1 -11
  255. data/lib/generators/avo/resource_generator.rb +5 -23
  256. data/lib/generators/avo/scope_generator.rb +15 -0
  257. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -18
  258. data/lib/generators/avo/templates/action.tt +1 -1
  259. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  260. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  261. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  262. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  263. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  264. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  265. data/lib/generators/avo/templates/dashboards/dashboard.tt +1 -1
  266. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  267. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  268. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  269. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  270. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  271. data/lib/generators/avo/templates/initializer/avo.tt +1 -11
  272. data/lib/generators/avo/templates/locales/avo.ar.yml +5 -5
  273. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  274. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  275. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  276. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  277. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  278. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  279. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  280. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  281. data/lib/generators/avo/templates/resource/resource.tt +1 -1
  282. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  283. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  284. data/lib/generators/avo/templates/scope.tt +6 -0
  285. data/lib/generators/avo/templates/standalone_action.tt +1 -1
  286. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  287. data/lib/generators/avo/templates/tool/view.tt +2 -2
  288. data/lib/tasks/avo_tasks.rake +22 -0
  289. metadata +81 -159
  290. data/app/assets/stylesheets/css/tags.css +0 -32
  291. data/app/assets/svgs/map-empty-state.svg +0 -35
  292. data/app/assets/svgs/map-view-type.svg +0 -3
  293. data/app/components/avo/card_component.html.erb +0 -46
  294. data/app/components/avo/card_component.rb +0 -25
  295. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  296. data/app/components/avo/dashboards/divider_component.rb +0 -19
  297. data/app/components/avo/fields/area_field/edit_component.html.erb +0 -7
  298. data/app/components/avo/fields/area_field/edit_component.rb +0 -4
  299. data/app/components/avo/fields/area_field/show_component.html.erb +0 -8
  300. data/app/components/avo/fields/area_field/show_component.rb +0 -4
  301. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  302. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  303. data/app/components/avo/fields/common/files/controls_component.html.erb +0 -29
  304. data/app/components/avo/fields/common/files/controls_component.rb +0 -19
  305. data/app/components/avo/fields/common/files/list_viewer_component.html.erb +0 -20
  306. data/app/components/avo/fields/common/files/list_viewer_component.rb +0 -41
  307. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +0 -27
  308. data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +0 -52
  309. data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +0 -22
  310. data/app/components/avo/fields/common/files/view_type/list_item_component.rb +0 -15
  311. data/app/components/avo/fields/location_field/edit_component.html.erb +0 -22
  312. data/app/components/avo/fields/location_field/edit_component.rb +0 -4
  313. data/app/components/avo/fields/location_field/show_component.html.erb +0 -7
  314. data/app/components/avo/fields/location_field/show_component.rb +0 -4
  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/index/resource_map_component.html.erb +0 -16
  329. data/app/components/avo/index/resource_map_component.rb +0 -109
  330. data/app/components/avo/row_component.html.erb +0 -3
  331. data/app/components/avo/row_component.rb +0 -12
  332. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  333. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  334. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  335. data/app/controllers/avo/dashboards_controller.rb +0 -22
  336. data/app/controllers/avo/reorder_controller.rb +0 -25
  337. data/app/javascript/js/controllers/base_controller.js +0 -22
  338. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  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/base/_new_via_belongs_to.html.erb +0 -12
  342. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  343. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  344. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  345. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  346. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  347. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  348. data/app/views/avo/dashboards/show.html.erb +0 -38
  349. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  350. data/app/views/avo/partials/_global_search.html.erb +0 -19
  351. data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
  352. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  353. data/lib/avo/base_card.rb +0 -161
  354. data/lib/avo/concerns/fetches_things.rb +0 -150
  355. data/lib/avo/concerns/handles_field_args.rb +0 -47
  356. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  357. data/lib/avo/concerns/has_html_attributes.rb +0 -108
  358. data/lib/avo/concerns/pagination.rb +0 -53
  359. data/lib/avo/concerns/policy_helpers.rb +0 -31
  360. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  361. data/lib/avo/concerns/visible_items.rb +0 -51
  362. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  363. data/lib/avo/dashboards/base_divider.rb +0 -35
  364. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  365. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  366. data/lib/avo/dashboards/metric_card.rb +0 -9
  367. data/lib/avo/dashboards/partial_card.rb +0 -7
  368. data/lib/avo/fields/area_field.rb +0 -39
  369. data/lib/avo/fields/concerns/file_authorization.rb +0 -31
  370. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  371. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  372. data/lib/avo/fields/location_field.rb +0 -86
  373. data/lib/avo/fields/tags_field.rb +0 -102
  374. data/lib/avo/hosts/association_scope_host.rb +0 -8
  375. data/lib/avo/hosts/base_host.rb +0 -25
  376. data/lib/avo/hosts/card_visibility.rb +0 -20
  377. data/lib/avo/hosts/dashboard_card.rb +0 -22
  378. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  379. data/lib/avo/hosts/ordering.rb +0 -22
  380. data/lib/avo/hosts/record_host.rb +0 -7
  381. data/lib/avo/hosts/resource_record_host.rb +0 -7
  382. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  383. data/lib/avo/hosts/search_scope_host.rb +0 -7
  384. data/lib/avo/hosts/view_record_host.rb +0 -7
  385. data/lib/avo/hosts/visibility_host.rb +0 -12
  386. data/lib/avo/items_holder.rb +0 -96
  387. data/lib/avo/main_panel.rb +0 -3
  388. data/lib/avo/menu/base_item.rb +0 -25
  389. data/lib/avo/menu/builder.rb +0 -82
  390. data/lib/avo/menu/dashboard.rb +0 -22
  391. data/lib/avo/menu/group.rb +0 -2
  392. data/lib/avo/menu/link.rb +0 -6
  393. data/lib/avo/menu/menu.rb +0 -2
  394. data/lib/avo/menu/resource.rb +0 -22
  395. data/lib/avo/menu/section.rb +0 -2
  396. data/lib/avo/panel.rb +0 -24
  397. data/lib/avo/panel_builder.rb +0 -25
  398. data/lib/avo/resources/controls/action.rb +0 -38
  399. data/lib/avo/resources/controls/execution_context.rb +0 -58
  400. data/lib/avo/resources/controls/items_holder.rb +0 -19
  401. data/lib/avo/resources/controls/link_to.rb +0 -27
  402. data/lib/avo/row.rb +0 -26
  403. data/lib/avo/row_builder.rb +0 -24
  404. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  405. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  406. data/lib/avo/sidebar.rb +0 -30
  407. data/lib/avo/sidebar_builder.rb +0 -24
  408. data/lib/avo/tab.rb +0 -72
  409. data/lib/avo/tab_builder.rb +0 -25
  410. data/lib/avo/tab_group.rb +0 -42
  411. data/lib/avo/tab_group_builder.rb +0 -43
  412. data/lib/avo/tools_manager.rb +0 -11
  413. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  414. data/public/avo-assets/avo.base.js +0 -1037
  415. data/public/avo-assets/avo.base.js.map +0 -7
@@ -1,31 +0,0 @@
1
- module Avo
2
- module Concerns
3
- module PolicyHelpers
4
- extend ActiveSupport::Concern
5
-
6
- class_methods do
7
- def inherit_association_from_policy(association_name, policy_class)
8
- [:create, :edit, :update, :destroy, :show, :reorder, :act_on].each do |method_action|
9
- define_policy_method(method_action, association_name, policy_class)
10
- end
11
-
12
- define_policy_method("view", association_name, policy_class, "index")
13
- end
14
-
15
- private
16
-
17
- # Define a method for the given action and association name.
18
- # Call the policy class with the given action passing the user and record.
19
- # Example:
20
- # def create_team_members?
21
- # TeamMemberPolicy.new(user, record).create?
22
- # end
23
- def define_policy_method(method_action, association_name, policy_class, policy_action = method_action)
24
- define_method "#{method_action}_#{association_name}?" do
25
- policy_class.new(user, record).send "#{policy_action}?"
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,31 +0,0 @@
1
- module Avo
2
- module Concerns
3
- module VisibleInDashboard
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- class_attribute :visible, default: true
8
- end
9
-
10
- def is_visible?
11
- # Default is true
12
- return true if visible == true
13
-
14
- # Hide if false
15
- return false if visible == false
16
-
17
- if visible.respond_to? :call
18
- call_block
19
- end
20
- end
21
-
22
- def is_hidden?
23
- !is_visible?
24
- end
25
-
26
- def call_block
27
- ::Avo::Hosts::DashboardVisibility.new(block: visible, dashboard: self).handle
28
- end
29
- end
30
- end
31
- end
@@ -1,51 +0,0 @@
1
- # This concern helps us figure out what items are visible for each tab, panel or sidebar
2
- module Avo
3
- module Concerns
4
- module VisibleItems
5
- extend ActiveSupport::Concern
6
- def items
7
- if items_holder.present?
8
- items_holder.items
9
- else
10
- []
11
- end
12
- end
13
-
14
- def visible_items
15
- items
16
- .map do |item|
17
- if item.respond_to? :hydrate
18
- item.hydrate(view: view)
19
- end
20
-
21
- item
22
- end
23
- .map do |item|
24
- visible(item) ? item : nil
25
- end
26
- .compact
27
- end
28
-
29
- def visible(item)
30
- return item.visible? unless item.is_field?
31
-
32
- return false if item.respond_to?(:authorized?) && item.resource.present? && !item.authorized?
33
-
34
- item.visible? && item.visible_on?(view)
35
- end
36
-
37
- def visible?
38
- any_item_visible = visible_items.any?
39
- return any_item_visible unless respond_to?(:visible_on?)
40
-
41
- visible_on?(view) && any_item_visible
42
- end
43
-
44
- def hydrate(view: nil)
45
- @view = view
46
-
47
- self
48
- end
49
- end
50
- end
51
- end
@@ -1,89 +0,0 @@
1
- module Avo
2
- module Dashboards
3
- class BaseDashboard
4
- # TODO: convert the dashboards from classes to instances.
5
- extend Avo::Concerns::VisibleInDashboard
6
- extend ActiveSupport::DescendantsTracker
7
-
8
- class_attribute :id
9
- class_attribute :name
10
- class_attribute :description
11
- class_attribute :items_holder
12
- class_attribute :grid_cols, default: 3
13
- # TODO: remove this when you make the conversion.
14
- class_attribute :visible, default: true
15
- class_attribute :index, default: 0
16
- class_attribute :authorize, default: -> { true }
17
-
18
- class << self
19
- def options_deprecation_message
20
- Rails.logger.warn "DEPRECATION WARNING: Card options parameter is deprecated in favor of arguments parameter and will be removed from Avo version 3.0.0"
21
- end
22
-
23
- def card(klass, label: nil, description: nil, cols: nil, rows: nil, refresh_every: nil, options: {}, arguments: {}, visible: nil)
24
- options_deprecation_message if options.present?
25
- self.items_holder ||= []
26
-
27
- self.items_holder << klass.new(
28
- dashboard: self,
29
- label: label,
30
- description: description,
31
- cols: cols,
32
- rows: rows,
33
- refresh_every: refresh_every,
34
- options: options,
35
- arguments: arguments,
36
- index: index,
37
- visible: visible
38
- )
39
- self.index += 1
40
- end
41
-
42
- def item_at_index(index)
43
- items.find do |item|
44
- next if item.index.blank?
45
-
46
- item.index == index
47
- end
48
- end
49
-
50
- def divider(**args)
51
- self.items_holder ||= []
52
-
53
- self.items_holder << BaseDivider.new(dashboard: self, **args)
54
- end
55
-
56
- def items
57
- items = self.items_holder || []
58
-
59
- items.filter do |item|
60
- item.is_visible?
61
- end
62
- end
63
-
64
- def classes
65
- case grid_cols
66
- when 3
67
- "sm:grid-cols-3"
68
- when 4
69
- "sm:grid-cols-4"
70
- when 5
71
- "sm:grid-cols-5"
72
- when 6
73
- "sm:grid-cols-6"
74
- else
75
- "sm:grid-cols-3"
76
- end
77
- end
78
-
79
- def navigation_label
80
- name
81
- end
82
-
83
- def navigation_path
84
- Avo::App.view_context.avo.dashboard_path id
85
- end
86
- end
87
- end
88
- end
89
- end
@@ -1,35 +0,0 @@
1
- module Avo
2
- module Dashboards
3
- class BaseDivider
4
- include Avo::Concerns::VisibleInDashboard
5
-
6
- attr_reader :dashboard
7
- attr_reader :label
8
- attr_reader :invisible
9
- attr_reader :index
10
- attr_reader :visible
11
-
12
- class_attribute :id
13
-
14
- def initialize(dashboard: nil, label: nil, invisible: false, index: nil, visible: true)
15
- @dashboard = dashboard
16
- @label = label
17
- @invisible = invisible
18
- @index = index
19
- @visible = visible
20
- end
21
-
22
- def is_divider?
23
- true
24
- end
25
-
26
- def is_card?
27
- false
28
- end
29
-
30
- def call_block
31
- ::Avo::Hosts::CardVisibility.new(block: visible, card: self, parent: dashboard).handle
32
- end
33
- end
34
- end
35
- end
@@ -1,77 +0,0 @@
1
- module Avo
2
- module Dashboards
3
- class ChartkickCard < BaseCard
4
- class_attribute :chart_type
5
- class_attribute :chart_options, default: {}
6
- class_attribute :flush, default: true
7
- class_attribute :legend, default: false
8
- class_attribute :scale, default: false
9
- class_attribute :legend_on_left, default: false
10
- class_attribute :legend_on_right, default: false
11
-
12
- def chartkick_classes
13
- case chart_type
14
- when :area_chart, :line_chart, :scatter_chart, :bar_chart, :column_chart
15
- if self.class.flush
16
- "-mx-1.5 top-auto -bottom-1.5"
17
- else
18
- "px-2"
19
- end
20
- else
21
- ""
22
- end
23
- end
24
-
25
- def chartkick_options
26
- card_height = 144
27
- card_heading = 40
28
-
29
- default = {
30
- # figure our the available height for the chart
31
- height: "#{(rows * card_height) - card_heading}px",
32
- colors: ::Avo.configuration.branding.chart_colors,
33
- library: {
34
- discrete: false,
35
- points: false,
36
- animation: true
37
- },
38
- id: "#{dashboard.id}-#{rand(10_000..99_999)}"
39
- }
40
-
41
- no_scale_options = {display: false}
42
- no_scale = {
43
- library: {
44
- scales: {
45
- x: no_scale_options,
46
- y: no_scale_options
47
- }
48
- }
49
- }
50
-
51
- no_legend = {library: {plugins: {legend: {display: false}}}}
52
- legend_on_left = {library: {plugins: {legend: {position: "left"}}}}
53
- legend_on_right = {library: {plugins: {legend: {position: "right"}}}}
54
-
55
- # Add chart.js configuration for the different states
56
- unless self.class.legend
57
- default = default.deep_merge(no_legend)
58
- end
59
-
60
- unless self.class.scale
61
- default = default.deep_merge(no_scale)
62
- end
63
-
64
- if self.class.legend_on_left
65
- default = default.deep_merge(legend_on_left)
66
- end
67
-
68
- if self.class.legend_on_right
69
- default = default.deep_merge(legend_on_right)
70
- end
71
-
72
- # Add the custom chart options at the end
73
- default.deep_merge(self.class.chart_options)
74
- end
75
- end
76
- end
77
- end
@@ -1,6 +0,0 @@
1
- module Avo
2
- module Dashboards
3
- class DashboardCard < Avo::BaseCard
4
- end
5
- end
6
- end
@@ -1,9 +0,0 @@
1
- module Avo
2
- module Dashboards
3
- class MetricCard < BaseCard
4
- class_attribute :prefix
5
- class_attribute :suffix
6
- # @todo: transform 1234 to 1.2K
7
- end
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- module Avo
2
- module Dashboards
3
- class PartialCard < Avo::BaseCard
4
- class_attribute :partial
5
- end
6
- end
7
- end
@@ -1,39 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Avo
4
- module Fields
5
- class AreaField < BaseField
6
- attr_reader :mapkick_options
7
- attr_reader :datapoint_options
8
-
9
- def initialize(id, **args, &block)
10
- hide_on :index
11
-
12
- super(id, **args, &block)
13
-
14
- @geometry = args[:geometry].presence || :polygon # Accepts: `:polygon` or `:multi_polygon`
15
- @mapkick_options = args[:mapkick_options].presence || {}
16
- @datapoint_options = args[:datapoint_options].presence || {}
17
- end
18
-
19
- def map_data
20
- data_source = {
21
- geometry: {
22
- type: @geometry.to_s.classify,
23
- coordinates: value
24
- }
25
- }
26
-
27
- [data_source.merge(datapoint_options)]
28
- end
29
-
30
- def coordinates
31
- value.present? ? JSON.parse(value) : []
32
- end
33
-
34
- def geometry
35
- @geometry.to_s.classify
36
- end
37
- end
38
- end
39
- end
@@ -1,31 +0,0 @@
1
- module Avo
2
- module Fields
3
- module Concerns
4
- module FileAuthorization
5
- extend ActiveSupport::Concern
6
-
7
- delegate :authorization, to: :@resource
8
- delegate :authorize_action, to: :authorization
9
- delegate :id, :model, to: :@field
10
-
11
- def can_upload_file?
12
- authorize_file_action(:upload)
13
- end
14
-
15
- def can_delete_file?
16
- authorize_file_action(:delete)
17
- end
18
-
19
- def can_download_file?
20
- authorize_file_action(:download)
21
- end
22
-
23
- private
24
-
25
- def authorize_file_action(action)
26
- authorize_action("#{action}_#{id}?", record: model, raise_exception: false)
27
- end
28
- end
29
- end
30
- end
31
- end
@@ -1,19 +0,0 @@
1
- module Avo
2
- module Fields
3
- module FieldExtensions
4
- module HasFieldName
5
- # Set the field name
6
- def field_name(name)
7
- self.field_name_attribute = name
8
- end
9
-
10
- # Get the field name
11
- def get_field_name
12
- return field_name_attribute if field_name_attribute.present?
13
-
14
- to_s.demodulize.underscore.gsub "_field", ""
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,111 +0,0 @@
1
- module Avo
2
- module Fields
3
- module FieldExtensions
4
- module VisibleInDifferentViews
5
- attr_accessor :show_on_index
6
- attr_accessor :show_on_show
7
- attr_accessor :show_on_new
8
- attr_accessor :show_on_edit
9
-
10
- def initialize(id = nil, **args, &block)
11
- @show_on_index = @show_on_index.nil? ? true : @show_on_index
12
- @show_on_show = @show_on_show.nil? ? true : @show_on_show
13
- @show_on_new = @show_on_new.nil? ? true : @show_on_new
14
- @show_on_edit = @show_on_edit.nil? ? true : @show_on_edit
15
- end
16
-
17
- # Validates if the field is visible on certain view
18
- def visible_on?(view)
19
- raise "No view specified on visibility check." if view.blank?
20
-
21
- send :"show_on_#{view}"
22
- end
23
-
24
- def show_on(*where)
25
- return show_on_all if where.include? :all
26
-
27
- normalize_views(where).flatten.each do |view|
28
- show_on_view view
29
- end
30
- end
31
-
32
- def hide_on(*where)
33
- return hide_on_all if where.include? :all
34
-
35
- normalize_views(where).flatten.each do |view|
36
- hide_on_view view
37
- end
38
- end
39
-
40
- def only_on(*where)
41
- hide_on_all
42
- normalize_views(where).flatten.each do |view|
43
- show_on_view view
44
- end
45
- end
46
-
47
- def except_on(*where)
48
- show_on_all
49
- normalize_views(where).flatten.each do |view|
50
- hide_on_view view
51
- end
52
- end
53
-
54
- # When submitting the form on creation, the new page will be create but we don't have a visibility marker for create so we'll default to new
55
- def show_on_create
56
- show_on_new
57
- end
58
-
59
- # When submitting the form on update, the new page will be create but we don't have a visibility marker for update so we'll default to edit
60
- def show_on_update
61
- show_on_edit
62
- end
63
-
64
- private
65
-
66
- def show_on_view(view)
67
- send("show_on_#{view}=", true)
68
- end
69
-
70
- def hide_on_view(view)
71
- send("show_on_#{view}=", false)
72
- end
73
-
74
- def only_on_view(view)
75
- hide_on_all
76
- show_on_view view
77
- end
78
-
79
- def except_on_view(view)
80
- show_on_all
81
- hide_on_view view
82
- end
83
-
84
- def show_on_all
85
- @show_on_index = true
86
- @show_on_show = true
87
- @show_on_edit = true
88
- @show_on_new = true
89
- end
90
-
91
- def hide_on_all
92
- @show_on_index = false
93
- @show_on_show = false
94
- @show_on_edit = false
95
- @show_on_new = false
96
- end
97
-
98
- def normalize_views(*views_and_groups)
99
- forms = views_and_groups.flatten! & [:forms]
100
-
101
- if forms.present?
102
- views_and_groups -= forms
103
- views_and_groups += [:new, :edit]
104
- end
105
-
106
- views_and_groups.flatten.uniq
107
- end
108
- end
109
- end
110
- end
111
- end
@@ -1,86 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Avo
4
- module Fields
5
- class LocationField < BaseField
6
- attr_reader :stored_as, :zoom
7
-
8
- def initialize(id, **args, &block)
9
- hide_on :index
10
- super(id, **args, &block)
11
-
12
- @stored_as = args[:stored_as].present? ? args[:stored_as] : nil # You can pass it an array of db columns [:latitude, :longitude]
13
- @zoom = args[:zoom].present? ? args[:zoom].to_i : 15
14
- end
15
-
16
- def value_as_array?
17
- stored_as.is_a?(Array) && stored_as.count == 2
18
- end
19
-
20
- def as_lat_long_field_id(get)
21
- if get == :lat
22
- "#{id}[#{stored_as.first}]"
23
- elsif get == :long
24
- "#{id}[#{stored_as.last}]"
25
- end
26
- end
27
-
28
- def as_lat_long_placeholder(get)
29
- if get == :lat
30
- "Enter #{stored_as.first}"
31
- elsif get == :long
32
- "Enter #{stored_as.last}"
33
- end
34
- end
35
-
36
- def as_lat_long_value(get)
37
- if get == :lat
38
- model.send(stored_as.first)
39
- elsif get == :long
40
- model.send(stored_as.last)
41
- end
42
- end
43
-
44
- def fill_field(model, key, value, params)
45
- if value_as_array?
46
- latitude_field, longitude_field = stored_as
47
- model.send("#{latitude_field}=", value[latitude_field])
48
- model.send("#{longitude_field}=", value[longitude_field])
49
- model
50
- else
51
- super(model, key, value.split(","), params)
52
- end
53
- end
54
-
55
- def to_permitted_param
56
- if value_as_array?
57
- [:"#{id}", "#{id}": {}]
58
- else
59
- super
60
- end
61
- end
62
-
63
- def value
64
- if value_as_array?
65
- [@model.send(stored_as.first), @model.send(stored_as.last)]
66
- else
67
- super
68
- end
69
- end
70
-
71
- def value_present?
72
- return value.first.present? && value.second.present? if value.is_a?(Array) && value.count == 2
73
-
74
- value.present?
75
- end
76
-
77
- def assign_value(record:, value:)
78
- return super if stored_as.blank?
79
-
80
- stored_as.each_with_index do |database_id, index|
81
- record.send("#{database_id}=", value[index])
82
- end
83
- end
84
- end
85
- end
86
- end