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,47 +0,0 @@
1
- <div data-controller="search" class="resource-search flex items-center h-full w-full" data-turbo-remove-before-cache>
2
- <div class="w-full hidden"
3
- data-search-target="autocomplete"
4
- data-search-resource="<%= @model_key %>"
5
- data-translation-keys='{"no_item_found": "<%= I18n.translate 'avo.no_item_found' %>"}'
6
- data-via-association="belongs_to"
7
- data-via-association-id="<%= @field.id %>"
8
- data-via-reflection-id="<%= @field.model.id %>"
9
- data-via-reflection-class="<%= @field.model.class.to_s %>"
10
- data-via-parent-resource-id="<%= params[:via_resource_id] %>"
11
- data-via-parent-resource-class="<%= params[:via_relation_class] %>"
12
- data-via-relation="<%= params[:via_relation] %>"
13
- ></div>
14
- <div class="relative w-full" autocomplete="off">
15
- <%= @form.text_field @foreign_key,
16
- class: classes,
17
- # This instructs the search_controller if it should enable/disabled this field when the user switches polymorphic associations
18
- # It should not enable the field if the record is being created through an association
19
- data: {
20
- 'search-target': 'button clearValue',
21
- 'should-be-disabled': @disabled,
22
- **@field.get_html(:data, view: view, element: :input)
23
- },
24
- disabled: true,
25
- placeholder: @field.placeholder,
26
- style: @field.get_html(:style, view: view, element: :input),
27
- type: :text,
28
- value: field_label %>
29
- <% unless @disabled %>
30
- <button class="absolute top-1/2 left-auto right-3 mr-px -mt-2 cursor-pointer hidden text-gray-500"
31
- type="button"
32
- data-tippy="tooltip"
33
- data-search-target="clearButton"
34
- title="<%= I18n.translate 'avo.clear_value' %>"
35
- data-action="click->search#clearValue"
36
- ><%= helpers.svg 'x', class: 'h-4' %>
37
- </button>
38
- <% end %>
39
- </div>
40
- <%= @form.hidden_field @foreign_key,
41
- value: field_value,
42
- data: {
43
- 'search-target': 'hiddenId clearValue',
44
- **@field.get_html(:data, view: view, element: :input)
45
- }
46
- %>
47
- </div>
@@ -1,95 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Fields::BelongsToField::AutocompleteComponent < ViewComponent::Base
4
- attr_reader :classes
5
- attr_reader :view
6
-
7
- def initialize(form:, field:, model_key:, foreign_key:, disabled: false, type: nil, resource: nil, polymorphic_record: nil, view: nil, style: nil, classes: nil)
8
- @form = form
9
- @field = field
10
- @type = type
11
- @view = view
12
- @model_key = model_key
13
- @foreign_key = foreign_key
14
- @resource = resource
15
- @disabled = disabled
16
- @style = style
17
- @classes = classes
18
- @polymorphic_record = polymorphic_record
19
- end
20
-
21
- def field_label
22
- result = @field.field_label
23
-
24
- # New records won't have the value (instantiated model) present but the polymorphic_type and polymorphic_id prefilled
25
- if should_prefill?
26
- result = @field.value&.class == @type ? @field.field_label : nil
27
- end
28
-
29
- result
30
- end
31
-
32
- def field_value
33
- result = @field.field_value
34
-
35
- # New records won't have the value (instantiated model) present but the polymorphic_type and polymorphic_id prefilled
36
- if should_prefill?
37
- result = @field.value&.class == @type ? @field.field_value : nil
38
- end
39
-
40
- result
41
- end
42
-
43
- def reflection_class
44
- has_polymorphic_association? ? polymorphic_class : @resource.model_class._reflections[@field.id.to_s].klass
45
- end
46
-
47
- private
48
-
49
- def should_prefill?
50
- # default this conditional to true
51
- is_polymorphic = true
52
-
53
- # if this is a field that can be polymorphic (belongs_to)
54
- if @field.respond_to? :is_polymorphic?
55
- is_polymorphic = @field.is_polymorphic?
56
- end
57
-
58
- is_polymorphic && searchable? && !(new_record? && has_polymorphic_association?)
59
- end
60
-
61
- def searchable?
62
- @field.searchable
63
- end
64
-
65
- def new_record?
66
- @resource.model.new_record?
67
- end
68
-
69
- def has_polymorphic_association?
70
- polymorphic_class.present? && polymorphic_id.present?
71
- end
72
-
73
- # Get the polymorphic class
74
- def polymorphic_class
75
- @resource.model["#{@field.foreign_key}_type"]
76
- end
77
-
78
- # Get the polymorphic id
79
- def polymorphic_id
80
- @resource.model["#{@field.foreign_key}_id"]
81
- end
82
-
83
- # Get the resource for that polymorphic class
84
- def polymorphic_resource
85
- ::Avo::App.get_resource_by_model_name polymorphic_class
86
- end
87
-
88
- # Extract the needed fields to identify the record for polymorphic associations
89
- def polymorphic_fields
90
- {
91
- id: polymorphic_resource.id,
92
- label: polymorphic_resource.title
93
- }
94
- end
95
- end
@@ -1,35 +0,0 @@
1
- <%= field_wrapper **field_wrapper_args, data: {
2
- controller: "tags-field",
3
- tags_field_mode_value: @field.mode,
4
- tags_field_whitelist_items_value: @field.suggestions.to_json,
5
- tags_field_disallowed_items_value: @field.disallowed.to_json,
6
- tags_field_enforce_suggestions_value: @field.enforce_suggestions,
7
- tags_field_suggestions_max_items_value: @field.suggestions_max_items,
8
- tags_field_close_on_select_value: @field.close_on_select,
9
- tags_field_delimiters_value: @field.delimiters,
10
- tags_field_fetch_values_from_value: @field.fetch_values_from,
11
- } do %>
12
- <%# We use a dummy field so the back action from Turbo does not brake the field %>
13
- <%# dummy field %>
14
- <%= text_field_tag "#{@field.id}-dummy", '',
15
- class: classes("w-full"),
16
- data: {
17
- tags_field_target: :fakeInput,
18
- },
19
- disabled: disabled?,
20
- placeholder: @field.placeholder,
21
- style: @field.get_html(:style, view: view, element: :input),
22
- value: ''
23
- %>
24
- <%# real field %>
25
- <%= @form.text_field @field.id,
26
- class: classes("hidden w-full border-primary-500 focus-within:border-primary-500"),
27
- data: {
28
- tags_field_target: :input,
29
- },
30
- disabled: disabled?,
31
- placeholder: @field.placeholder,
32
- style: @field.get_html(:style, view: view, element: :input),
33
- value: @field.field_value.to_json
34
- %>
35
- <% end %>
@@ -1,4 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Fields::TagsField::EditComponent < Avo::Fields::EditComponent
4
- end
@@ -1,10 +0,0 @@
1
- <%= index_field_wrapper **field_wrapper_args, flush: true do %>
2
- <div class="flex gap-1 items-center flex-nowrap">
3
- <% value.take(3).each do |item| %>
4
- <%= render Avo::Fields::TagsField::TagComponent.new(label: label_from_item(item)) %>
5
- <% end %>
6
- <% if value.count > 3 %>
7
- <%= render Avo::Fields::TagsField::TagComponent.new(label: '...', title: I18n.t('avo.x_items_more', count: value.count - 3)) %>
8
- <% end %>
9
- </div>
10
- <% end %>
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Fields::TagsField::IndexComponent < Avo::Fields::IndexComponent
4
- include Avo::Fields::Concerns::ItemLabels
5
-
6
- def value
7
- @field.field_value
8
- end
9
- end
@@ -1,7 +0,0 @@
1
- <%= field_wrapper **field_wrapper_args do %>
2
- <div class="flex gap-1 items-center flex-wrap">
3
- <% @field.field_value.each do |item| %>
4
- <%= render Avo::Fields::TagsField::TagComponent.new(label: label_from_item(item)) %>
5
- <% end %>
6
- </div>
7
- <% end %>
@@ -1,5 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Fields::TagsField::ShowComponent < Avo::Fields::ShowComponent
4
- include Avo::Fields::Concerns::ItemLabels
5
- end
@@ -1,9 +0,0 @@
1
- <div class="flex px-2 py-1 rounded bg-gray-100 text-sm text-gray-800 font-normal flex-shrink-0"
2
- <% if title.present? %>
3
- data-tippy="tooltip"
4
- title="<%= title %>"
5
- <% end %>
6
- data-target="tag-component"
7
- >
8
- <%= label %>
9
- </div>
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Fields::TagsField::TagComponent < ViewComponent::Base
4
- attr_reader :label
5
- attr_reader :title
6
-
7
- def initialize(label: nil, title: nil)
8
- @label = label
9
- @title = title
10
- end
11
- end
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Index::Ordering::BaseComponent < Avo::BaseComponent
4
- private
5
-
6
- def order_actions
7
- @resource.class.order_actions
8
- end
9
- end
@@ -1,11 +0,0 @@
1
- <%= button_to order_path(direction: direction, referrer: request.fullpath),
2
- title: t("avo.order.#{direction}").capitalize,
3
- method: :patch,
4
- class: 'flex items-center',
5
- data: {
6
- target: "order:#{direction}",
7
- 'turbo-frame': params[:turbo_frame],
8
- 'tippy': 'tooltip',
9
- } do %>
10
- <%= helpers.svg(svg, class: 'text-gray-400 h-6 hover:text-gray-600') %>
11
- <% end %>
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Index::Ordering::ButtonComponent < Avo::Index::Ordering::BaseComponent
4
- attr_accessor :resource
5
- attr_accessor :reflection
6
- attr_accessor :direction
7
- attr_accessor :svg
8
-
9
- def initialize(resource:, direction:, svg: nil, reflection: nil)
10
- @resource = resource
11
- @reflection = reflection
12
- @direction = direction
13
- @svg = svg
14
- end
15
-
16
- def render?
17
- order_actions[direction].present?
18
- end
19
-
20
- def order_path(args)
21
- Avo::App.view_context.avo.reorder_order_path(resource.route_key, resource.model.to_param, **args)
22
- end
23
- end
@@ -1,32 +0,0 @@
1
- <div class="flex items-center justify-center" data-component="<%= self.class.to_s.underscore %>">
2
- <% if display_inline? %>
3
- <div class="flex max-w-xs rounded">
4
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :higher, svg: 'arrow-up' %>
5
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :lower, svg: 'arrow-down' %>
6
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :to_top, svg: 'download-solid-reversed' %>
7
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :to_bottom, svg: 'download-solid' %>
8
- </div>
9
- <% else %>
10
- <div class="popover inline-block"
11
- data-controller="popover"
12
- data-popover-translate-x="<%= Avo.configuration.resource_controls_placement == :left ? '20%' : '-100%' %>"
13
- data-popover-translate-y="-32px"
14
- data-action="mouseover->popover#mouseOver mouseout->popover#mouseOut"
15
- >
16
- <%= button_tag nil,
17
- title: t('avo.order.reorder_record').capitalize,
18
- class: 'flex items-center',
19
- data: {
20
- 'tippy': 'tooltip',
21
- } do
22
- %>
23
- <%= helpers.svg('switch-vertical', class: 'text-gray-400 h-6 hover:text-gray-600') %>
24
- <% end %>
25
- <div class="flex hidden absolute max-w-xs bg-white rounded p-2" data-popover-target="content">
26
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :higher, svg: 'arrow-up' %>
27
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :lower, svg: 'arrow-down' %>
28
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :to_top, svg: 'download-solid-reversed' %>
29
- <%= render Avo::Index::Ordering::ButtonComponent.new resource: @resource, reflection: @reflection, direction: :to_bottom, svg: 'download-solid' %>
30
- </div>
31
- <% end %>
32
- </div>
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Index::Ordering::ButtonsComponent < Avo::Index::Ordering::BaseComponent
4
- def initialize(resource: nil, reflection: nil, view_type: nil)
5
- @resource = resource
6
- @reflection = reflection
7
- @view_type = view_type
8
- end
9
-
10
- def render?
11
- has_with_trial(:resource_ordering) && can_order_any? && view_type_is_table? && enabled_in_view?
12
- end
13
-
14
- private
15
-
16
- def can_order_any?
17
- order_actions.present?
18
- end
19
-
20
- def view_type_is_table?
21
- @view_type.to_sym == :table
22
- end
23
-
24
- def display_inline?
25
- ordering[:display_inline]
26
- end
27
-
28
- def enabled_in_view?
29
- in_association = @reflection.present?
30
-
31
- if in_association
32
- visible_on_option.include? :association
33
- else
34
- visible_on_option.include? :index
35
- end
36
- end
37
-
38
- def visible_on_option
39
- return [] if ordering.nil?
40
-
41
- [ordering[:visible_on]].flatten
42
- end
43
-
44
- def ordering
45
- @resource.class.ordering
46
- end
47
- end
@@ -1,27 +0,0 @@
1
- <% if item.is_tool? %>
2
- <% if item&.partial.present? %>
3
- <%= render item.partial, tool: item, form: @form %>
4
- <% end %>
5
- <% elsif item.is_panel? %>
6
- <%= render Avo::PanelComponent.new(name: item.name, description: item.description, index: index) do |c| %>
7
- <% c.with_body do %>
8
- <div class="divide-y">
9
- <% item.visible_items.each_with_index do |field, index| %>
10
- <%= render Avo::ItemSwitcherComponent.new resource: @resource, item: field, index: index, view: @view, form: form %>
11
- <% end %>
12
- </div>
13
- <% end %>
14
- <% end %>
15
- <% elsif item.is_tab_group? %>
16
- <%= render tab_group_component %>
17
- <% elsif item.is_field? %>
18
- <%= render field_component %>
19
- <% elsif item.is_row? %>
20
- <%= render Avo::RowComponent.new do |c| %>
21
- <% c.with_body do %>
22
- <% item.visible_items.each_with_index do |field, index| %>
23
- <%= render Avo::ItemSwitcherComponent.new resource: @resource, item: field, index: index, view: @view, form: form %>
24
- <% end %>
25
- <% end %>
26
- <% end %>
27
- <% end %>
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::ItemSwitcherComponent < Avo::BaseComponent
4
- include Turbo::FramesHelper
5
-
6
- attr_reader :resource
7
- attr_reader :reflection
8
- attr_reader :index
9
- attr_reader :item
10
- attr_reader :view
11
-
12
- def initialize(resource: nil, reflection: nil, item: nil, index: nil, view: nil, form: nil)
13
- @resource = resource
14
- @reflection = reflection
15
- @form = form
16
- @index = index
17
- @item = item
18
- @view = view
19
- end
20
-
21
- def form
22
- @form || nil
23
- end
24
-
25
- def render?
26
- # Stops rendering if the field should be hidden in reflections
27
- if item.is_field?
28
- return false if in_reflection? && item.hidden_in_reflection?
29
- end
30
-
31
- return false if item.is_main_panel?
32
-
33
- true
34
- end
35
-
36
- def in_reflection?
37
- @reflection.present?
38
- end
39
-
40
- def tab_group_component
41
- Avo::TabGroupComponent.new resource: @resource, group: item.hydrate(view: view), index: index, params: params, form: form, view: view, tabs_style: item.style
42
- end
43
-
44
- def field_component
45
- final_item = item.dup.hydrate(resource: @resource, model: @resource.model, user: resource.user, view: view)
46
- final_item.component_for_view(@view).new(field: final_item, resource: @resource, index: index, form: form)
47
- end
48
- end
@@ -1,16 +0,0 @@
1
- <% if item.is_a? Avo::Menu::Link %>
2
- <%= render Avo::Sidebar::LinkComponent.new label: item.name, path: item.path, target: item.target, data: item.data, icon: item.icon %>
3
- <% end %>
4
- <% if item.is_a? Avo::Menu::Resource %>
5
- <%= render Avo::Sidebar::LinkComponent.new label: item.navigation_label, path: helpers.resources_path(resource: resource, **item.fetch_params), data: item.data, icon: item.icon %>
6
- <% end %>
7
- <% if item.is_a? Avo::Menu::Dashboard %>
8
- <%= render Avo::Sidebar::LinkComponent.new label: item.navigation_label, path: dashboard.navigation_path, data: item.data, icon: item.icon %>
9
- <% end %>
10
- <% if item.is_a? Avo::Menu::Section %>
11
- <%= render Avo::Sidebar::SectionComponent.new item: item %>
12
- <% end %>
13
- <% if item.is_a? Avo::Menu::Group %>
14
- <%= render Avo::Sidebar::GroupComponent.new item: item %>
15
- <% end %>
16
-
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Avo::Sidebar::ItemSwitcherComponent < Avo::Sidebar::BaseItemComponent
4
- def resource
5
- item.parsed_resource
6
- end
7
-
8
- def dashboard
9
- item.parsed_dashboard
10
- end
11
-
12
- def render?
13
- item.visible?
14
- end
15
- end
@@ -1,37 +0,0 @@
1
- require_dependency "avo/application_controller"
2
-
3
- module Avo
4
- module Dashboards
5
- class CardsController < ApplicationController
6
- before_action :set_dashboard
7
- before_action :set_card
8
- before_action :detect_chartkick
9
-
10
- def show
11
- render(:chartkick_missing) unless @chartkick_installed
12
- end
13
-
14
- private
15
-
16
- def set_dashboard
17
- @dashboard = Avo::App.get_dashboard_by_id params[:dashboard_id]
18
-
19
- raise ActionController::RoutingError.new("Not Found") if @dashboard.nil? || @dashboard.is_hidden?
20
- end
21
-
22
- def set_card
23
- @card = @dashboard.item_at_index(params[:index].to_i).tap do |card|
24
- card.hydrate(dashboard: @dashboard)
25
- end
26
- end
27
-
28
- def detect_chartkick
29
- @chartkick_installed = if @card.class.ancestors.map(&:to_s).include?("Avo::Dashboards::ChartkickCard")
30
- defined?(Chartkick)
31
- else
32
- true
33
- end
34
- end
35
- end
36
- end
37
- end
@@ -1,22 +0,0 @@
1
- require_dependency "avo/application_controller"
2
-
3
- module Avo
4
- class DashboardsController < ApplicationController
5
- before_action :set_dashboard, only: :show
6
-
7
- def show
8
- @page_title = @dashboard.name
9
- end
10
-
11
- private
12
-
13
- def set_dashboard
14
- @dashboard = Avo::App.get_dashboard_by_id params[:id]
15
-
16
- authorized = Avo::Hosts::BaseHost.new(block: @dashboard.authorize).handle
17
- raise Avo::NotAuthorizedError.new if !authorized
18
-
19
- raise ActionController::RoutingError.new("Not Found") if @dashboard.nil? || @dashboard.is_hidden?
20
- end
21
- end
22
- end
@@ -1,25 +0,0 @@
1
- require_dependency "avo/application_controller"
2
-
3
- module Avo
4
- class ReorderController < ApplicationController
5
- before_action :set_resource_name
6
- before_action :set_resource
7
- before_action :hydrate_resource
8
- before_action :set_model
9
-
10
- def order
11
- direction = params[:direction].to_sym
12
-
13
- if direction.present?
14
- @resource
15
- .hydrate(model: @model, params: params)
16
- .ordering_host
17
- .order direction
18
- end
19
-
20
- respond_to do |format|
21
- format.html { redirect_to params[:referrer] || resources_path(resource: @resource) }
22
- end
23
- end
24
- end
25
- end
@@ -1,22 +0,0 @@
1
- import { Controller } from '@hotwired/stimulus'
2
-
3
- export default class extends Controller {
4
- /**
5
- * Helper that parses the data attribute value to JSON
6
- */
7
- getJsonAttribute(target, attribute, defaultValue = []) {
8
- let result = defaultValue
9
- try {
10
- result = JSON.parse(target.getAttribute(attribute))
11
- } catch (error) {}
12
-
13
- return result
14
- }
15
-
16
- /**
17
- * Parses the attribute to boolean
18
- */
19
- getBooleanAttribute(target, attribute) {
20
- return target.getAttribute(attribute) === '1'
21
- }
22
- }