avo 2.43.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 (414) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +30 -26
  3. data/Gemfile.lock +235 -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 +37 -41
  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/application.js +3 -0
  118. data/app/javascript/js/controllers/action_controller.js +3 -1
  119. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  120. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +7 -7
  121. data/app/javascript/js/controllers/filter_controller.js +1 -1
  122. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  123. data/app/javascript/js/controllers/preview_controller.js +24 -0
  124. data/app/javascript/js/controllers/search_controller.js +4 -2
  125. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  126. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  127. data/app/javascript/js/controllers.js +11 -5
  128. data/app/javascript/js/custom-stream-actions.js +15 -0
  129. data/app/views/avo/actions/show.html.erb +10 -7
  130. data/app/views/avo/associations/new.html.erb +2 -2
  131. data/app/views/avo/base/_new_via_belongs_to.html.erb +1 -1
  132. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +3 -3
  133. data/app/views/avo/base/create_fail_action.turbo_stream.erb +2 -2
  134. data/app/views/avo/base/edit.html.erb +1 -1
  135. data/app/views/avo/base/index.html.erb +4 -3
  136. data/app/views/avo/base/new.html.erb +2 -1
  137. data/app/views/avo/base/preview.html.erb +19 -0
  138. data/app/views/avo/base/show.html.erb +2 -2
  139. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  140. data/app/views/avo/debug/report.html.erb +32 -17
  141. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -14
  142. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  143. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +1 -1
  144. data/app/views/avo/partials/_footer.html.erb +1 -1
  145. data/app/views/avo/partials/_javascript.html.erb +5 -0
  146. data/app/views/avo/partials/_logo.html.erb +1 -1
  147. data/app/views/avo/partials/_navbar.html.erb +3 -5
  148. data/app/views/avo/partials/_resource_search.html.erb +1 -0
  149. data/app/views/avo/partials/_table_header.html.erb +5 -11
  150. data/app/views/layouts/avo/application.html.erb +5 -4
  151. data/avo.gemspec +11 -8
  152. data/bin/dev +3 -1
  153. data/bin/prod +0 -0
  154. data/config/i18n-tasks.yml +1 -1
  155. data/config/initializers/pagy.rb +2 -0
  156. data/config/master.key +1 -0
  157. data/config/routes.rb +7 -10
  158. data/db/factories.rb +6 -0
  159. data/lib/avo/asset_manager.rb +30 -0
  160. data/lib/avo/base_action.rb +84 -82
  161. data/lib/avo/base_resource.rb +286 -225
  162. data/lib/avo/base_resource_tool.rb +9 -16
  163. data/lib/avo/concerns/borrow_items_holder.rb +35 -0
  164. data/lib/avo/concerns/breadcrumbs.rb +2 -2
  165. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +5 -9
  166. data/lib/avo/concerns/filters_session_handler.rb +7 -5
  167. data/lib/avo/concerns/has_controls.rb +37 -0
  168. data/lib/avo/concerns/has_description.rb +23 -0
  169. data/lib/avo/concerns/has_helpers.rb +18 -0
  170. data/lib/avo/concerns/has_item_type.rb +42 -0
  171. data/lib/avo/concerns/has_items.rb +339 -0
  172. data/lib/avo/concerns/hydration.rb +17 -0
  173. data/lib/avo/concerns/is_resource_item.rb +16 -36
  174. data/lib/avo/concerns/is_visible.rb +15 -0
  175. data/lib/avo/concerns/model_class_constantized.rb +0 -2
  176. data/lib/avo/concerns/pagination.rb +53 -0
  177. data/lib/avo/concerns/visible_in_different_views.rb +132 -0
  178. data/lib/avo/concerns/visible_items.rb +7 -38
  179. data/lib/avo/configuration/branding.rb +0 -12
  180. data/lib/avo/configuration.rb +28 -11
  181. data/lib/avo/current.rb +39 -0
  182. data/lib/avo/dsl/field_parser.rb +3 -3
  183. data/lib/avo/dynamic_router.rb +18 -3
  184. data/lib/avo/engine.rb +35 -30
  185. data/lib/avo/error_manager.rb +25 -0
  186. data/lib/avo/execution_context.rb +14 -15
  187. data/lib/avo/fields/base_field.rb +84 -115
  188. data/lib/avo/fields/belongs_to_field.rb +19 -23
  189. data/lib/avo/fields/concerns/file_authorization.rb +2 -2
  190. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  191. data/lib/avo/fields/concerns/has_default.rb +1 -5
  192. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  193. data/lib/avo/fields/concerns/has_html_attributes.rb +112 -0
  194. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  195. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  196. data/lib/avo/fields/concerns/is_required.rb +5 -7
  197. data/lib/avo/fields/concerns/is_searchable.rb +15 -0
  198. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  199. data/lib/avo/fields/concerns/use_view_components.rb +45 -0
  200. data/lib/avo/fields/country_field.rb +4 -0
  201. data/lib/avo/fields/date_time_field.rb +1 -5
  202. data/lib/avo/fields/external_image_field.rb +2 -2
  203. data/lib/avo/fields/field_manager.rb +55 -0
  204. data/lib/avo/fields/file_field.rb +2 -2
  205. data/lib/avo/fields/gravatar_field.rb +2 -2
  206. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  207. data/lib/avo/fields/has_base_field.rb +21 -17
  208. data/lib/avo/fields/has_many_field.rb +5 -2
  209. data/lib/avo/fields/has_one_field.rb +8 -12
  210. data/lib/avo/fields/heading_field.rb +9 -14
  211. data/lib/avo/fields/hidden_field.rb +1 -1
  212. data/lib/avo/fields/id_field.rb +3 -3
  213. data/lib/avo/fields/location_field.rb +10 -10
  214. data/lib/avo/fields/password_field.rb +1 -1
  215. data/lib/avo/fields/preview_field.rb +14 -0
  216. data/lib/avo/fields/select_field.rb +12 -8
  217. data/lib/avo/fields/status_field.rb +7 -1
  218. data/lib/avo/fields/text_field.rb +2 -2
  219. data/lib/avo/filters/base_filter.rb +9 -4
  220. data/lib/avo/html/builder.rb +8 -8
  221. data/lib/avo/item_grapher.rb +78 -0
  222. data/lib/avo/licensing/h_q.rb +11 -73
  223. data/lib/avo/licensing/license.rb +5 -1
  224. data/lib/avo/licensing/license_manager.rb +1 -1
  225. data/lib/avo/licensing/pro_license.rb +1 -7
  226. data/lib/avo/loaders/fields_loader.rb +7 -1
  227. data/lib/avo/plugin.rb +36 -0
  228. data/lib/avo/plugin_manager.rb +56 -0
  229. data/lib/avo/prefixed_test_helpers.rb +20 -0
  230. data/lib/avo/reloader.rb +3 -0
  231. data/lib/avo/resources/controls/actions_list.rb +7 -12
  232. data/lib/avo/resources/controls/attach_button.rb +15 -0
  233. data/lib/avo/resources/controls/back_button.rb +1 -1
  234. data/lib/avo/resources/controls/base_control.rb +15 -49
  235. data/lib/avo/resources/controls/create_button.rb +15 -0
  236. data/lib/avo/resources/controls/delete_button.rb +5 -1
  237. data/lib/avo/resources/controls/detach_button.rb +4 -1
  238. data/lib/avo/resources/controls/edit_button.rb +4 -1
  239. data/lib/avo/resources/controls/order_controls.rb +8 -0
  240. data/lib/avo/resources/controls/save_button.rb +13 -0
  241. data/lib/avo/resources/controls/show_button.rb +15 -0
  242. data/lib/avo/resources/items/holder.rb +96 -0
  243. data/lib/avo/resources/items/item_group.rb +44 -0
  244. data/lib/avo/resources/items/main_panel.rb +12 -0
  245. data/lib/avo/resources/items/panel.rb +2 -0
  246. data/lib/avo/resources/items/row.rb +42 -0
  247. data/lib/avo/resources/items/sidebar.rb +46 -0
  248. data/lib/avo/resources/items/tab.rb +54 -0
  249. data/lib/avo/resources/items/tab_group.rb +62 -0
  250. data/lib/avo/resources/resource_manager.rb +179 -0
  251. data/lib/avo/services/authorization_service.rb +11 -110
  252. data/lib/avo/services/debug_service.rb +93 -0
  253. data/lib/avo/services/encryption_service.rb +8 -12
  254. data/lib/avo/services/telemetry_service.rb +85 -0
  255. data/lib/avo/test_helpers.rb +362 -0
  256. data/lib/avo/tools/tool_manager.rb +30 -0
  257. data/lib/avo/version.rb +1 -1
  258. data/lib/avo/view_inquirer.rb +36 -0
  259. data/lib/avo.rb +109 -24
  260. data/lib/generators/avo/action_generator.rb +8 -8
  261. data/lib/generators/avo/card_generator.rb +27 -0
  262. data/lib/generators/avo/concerns/parent_controller.rb +20 -0
  263. data/lib/generators/avo/controller_generator.rb +3 -0
  264. data/lib/generators/avo/eject_generator.rb +180 -15
  265. data/lib/generators/avo/field_generator.rb +49 -2
  266. data/lib/generators/avo/filter_generator.rb +8 -8
  267. data/lib/generators/avo/js/install_generator.rb +2 -2
  268. data/lib/generators/avo/resource_generator.rb +12 -9
  269. data/lib/generators/avo/scope_generator.rb +15 -0
  270. data/lib/generators/avo/tailwindcss/install_generator.rb +70 -26
  271. data/lib/generators/avo/templates/action.tt +8 -6
  272. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  273. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  274. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  275. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  276. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  277. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  278. data/lib/generators/avo/templates/dashboards/dashboard.tt +5 -3
  279. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  280. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  281. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  282. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  283. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  284. data/lib/generators/avo/templates/initializer/avo.tt +7 -3
  285. data/lib/generators/avo/templates/locales/avo.ar.yml +7 -6
  286. data/lib/generators/avo/templates/locales/avo.en.yml +6 -3
  287. data/lib/generators/avo/templates/locales/avo.es.yml +127 -0
  288. data/lib/generators/avo/templates/locales/avo.fr.yml +3 -0
  289. data/lib/generators/avo/templates/locales/avo.nb.yml +3 -0
  290. data/lib/generators/avo/templates/locales/avo.nn.yml +3 -0
  291. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +3 -0
  292. data/lib/generators/avo/templates/locales/avo.pt.yml +3 -0
  293. data/lib/generators/avo/templates/locales/avo.ro.yml +8 -5
  294. data/lib/generators/avo/templates/locales/avo.tr.yml +3 -0
  295. data/lib/generators/avo/templates/resource/controller.tt +1 -1
  296. data/lib/generators/avo/templates/resource/resource.tt +7 -7
  297. data/lib/generators/avo/templates/resource_tools/partial.tt +2 -2
  298. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  299. data/lib/generators/avo/templates/scope.tt +6 -0
  300. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  301. data/lib/generators/avo/templates/tailwindcss/avo.tailwind.css +5 -3
  302. data/lib/generators/avo/templates/tailwindcss/tailwind.config.js +11 -0
  303. data/lib/tasks/avo_tasks.rake +72 -4
  304. data/public/avo-assets/avo.base.css +1893 -1187
  305. data/public/avo-assets/avo.base.js +223 -311
  306. data/public/avo-assets/avo.base.js.map +3 -3
  307. data/public/avo-assets/avo.css +9744 -0
  308. data/public/avo-assets/avo.js +513 -0
  309. data/public/avo-assets/avo.js.map +7 -0
  310. data/tailwind.custom.js +47 -0
  311. data/tailwind.preset.js +152 -0
  312. metadata +121 -116
  313. data/app/components/avo/card_component.html.erb +0 -46
  314. data/app/components/avo/card_component.rb +0 -25
  315. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  316. data/app/components/avo/dashboards/divider_component.rb +0 -19
  317. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  318. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  319. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  320. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  321. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  322. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  323. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  324. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  325. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  326. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  327. data/app/components/avo/index/ordering/base_component.rb +0 -9
  328. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  329. data/app/components/avo/index/ordering/button_component.rb +0 -23
  330. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  331. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  332. data/app/components/avo/item_switcher_component.html.erb +0 -27
  333. data/app/components/avo/item_switcher_component.rb +0 -48
  334. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  335. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  336. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  337. data/app/controllers/avo/dashboards_controller.rb +0 -22
  338. data/app/controllers/avo/reorder_controller.rb +0 -25
  339. data/app/controllers/avo/team_users_controller.rb +0 -4
  340. data/app/javascript/js/controllers/base_controller.js +0 -22
  341. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  342. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  343. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  344. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  345. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  346. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  347. data/app/views/avo/dashboards/show.html.erb +0 -38
  348. data/app/views/avo/partials/_global_search.html.erb +0 -19
  349. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  350. data/lib/avo/action_model.rb +0 -20
  351. data/lib/avo/app.rb +0 -237
  352. data/lib/avo/base_card.rb +0 -161
  353. data/lib/avo/concerns/fetches_things.rb +0 -150
  354. data/lib/avo/concerns/handles_field_args.rb +0 -47
  355. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  356. data/lib/avo/concerns/has_fields.rb +0 -334
  357. data/lib/avo/concerns/has_html_attributes.rb +0 -108
  358. data/lib/avo/concerns/policy_helpers.rb +0 -31
  359. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  360. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  361. data/lib/avo/dashboards/base_divider.rb +0 -35
  362. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  363. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  364. data/lib/avo/dashboards/metric_card.rb +0 -9
  365. data/lib/avo/dashboards/partial_card.rb +0 -7
  366. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  367. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  368. data/lib/avo/fields/tags_field.rb +0 -102
  369. data/lib/avo/grid_collector.rb +0 -42
  370. data/lib/avo/hosts/association_scope_host.rb +0 -8
  371. data/lib/avo/hosts/base_host.rb +0 -25
  372. data/lib/avo/hosts/card_visibility.rb +0 -20
  373. data/lib/avo/hosts/dashboard_card.rb +0 -22
  374. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  375. data/lib/avo/hosts/ordering.rb +0 -22
  376. data/lib/avo/hosts/record_host.rb +0 -7
  377. data/lib/avo/hosts/resource_record_host.rb +0 -7
  378. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  379. data/lib/avo/hosts/search_scope_host.rb +0 -7
  380. data/lib/avo/hosts/view_record_host.rb +0 -7
  381. data/lib/avo/hosts/visibility_host.rb +0 -12
  382. data/lib/avo/items_holder.rb +0 -96
  383. data/lib/avo/main_panel.rb +0 -3
  384. data/lib/avo/menu/base_item.rb +0 -25
  385. data/lib/avo/menu/builder.rb +0 -82
  386. data/lib/avo/menu/dashboard.rb +0 -22
  387. data/lib/avo/menu/group.rb +0 -2
  388. data/lib/avo/menu/link.rb +0 -6
  389. data/lib/avo/menu/menu.rb +0 -2
  390. data/lib/avo/menu/resource.rb +0 -22
  391. data/lib/avo/menu/section.rb +0 -2
  392. data/lib/avo/panel.rb +0 -24
  393. data/lib/avo/panel_builder.rb +0 -25
  394. data/lib/avo/resources/controls/action.rb +0 -38
  395. data/lib/avo/resources/controls/execution_context.rb +0 -58
  396. data/lib/avo/resources/controls/items_holder.rb +0 -19
  397. data/lib/avo/resources/controls/link_to.rb +0 -27
  398. data/lib/avo/row.rb +0 -26
  399. data/lib/avo/row_builder.rb +0 -24
  400. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  401. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  402. data/lib/avo/sidebar.rb +0 -30
  403. data/lib/avo/sidebar_builder.rb +0 -24
  404. data/lib/avo/tab.rb +0 -72
  405. data/lib/avo/tab_builder.rb +0 -25
  406. data/lib/avo/tab_group.rb +0 -42
  407. data/lib/avo/tab_group_builder.rb +0 -43
  408. data/lib/avo/tools_manager.rb +0 -11
  409. data/lib/generators/avo/card/chartkick_generator.rb +0 -18
  410. data/lib/generators/avo/card/metric_generator.rb +0 -18
  411. data/lib/generators/avo/card/partial_generator.rb +0 -19
  412. data/lib/generators/avo/templates/js/avo.custom.js +0 -2
  413. data/lib/generators/avo/templates/standalone_action.tt +0 -8
  414. /data/app/assets/stylesheets/css/{tags.css → fields/tags.css} +0 -0
@@ -1,7 +1,7 @@
1
1
  <div data-controller="reload-belongs-to-field"
2
2
  data-action="turbo:before-stream-render@document->reload-belongs-to-field#beforeStreamRender"
3
3
  data-reload-belongs-to-field-polymorphic-value="<%= is_polymorphic? %>"
4
- data-reload-belongs-to-field-searchable-value="<%= @field.searchable %>"
4
+ data-reload-belongs-to-field-searchable-value="<%= @field.is_searchable? %>"
5
5
  data-reload-belongs-to-field-relation-name-value="<%= @field.id %>"
6
6
  data-reload-belongs-to-field-target-name-value="<%= form.object_name %>[<%= @field.id_input_foreign_key %>]"
7
7
  >
@@ -9,18 +9,18 @@
9
9
  <%
10
10
  # Set the model keys so we can pass them over
11
11
  model_keys = @field.types.map do |type|
12
- resource = Avo::App.get_resource_by_model_name(type.to_s)
12
+ resource = Avo.resource_manager.get_resource_by_model_class(type.to_s)
13
13
  [type.to_s, resource.model_key]
14
14
  end.to_h
15
15
  %>
16
16
  <div class="divide-y"
17
17
  data-controller="belongs-to-field"
18
- data-searchable="<%= @field.searchable %>"
18
+ data-searchable="<%= @field.is_searchable? %>"
19
19
  data-association="<%= @field.id %>"
20
20
  data-association-class="<%= @field&.target_resource&.model_class || nil %>"
21
21
  >
22
22
  <%= field_wrapper **field_wrapper_args, help: @field.polymorphic_help || '' do %>
23
- <%= @form.select @field.type_input_foreign_key, @field.types.map { |type| [::Avo::App.get_resource_by_model_name(type.to_s).name, type.to_s] },
23
+ <%= @form.select @field.type_input_foreign_key, @field.types.map { |type| [Avo.resource_manager.get_resource_by_model_class(type.to_s).name, type.to_s] },
24
24
  {
25
25
  value: @field.value,
26
26
  include_blank: @field.placeholder,
@@ -47,91 +47,87 @@
47
47
  data-belongs-to-field-target="type"
48
48
  data-type="<%= type %>"
49
49
  >
50
- <%= field_wrapper **field_wrapper_args, label: ::Avo::App.get_resource_by_model_name(type.to_s).name do %>
51
- <div class="flex flex-col gap-1">
52
- <% if @field.searchable %>
53
- <%= render Avo::Fields::BelongsToField::AutocompleteComponent.new form: @form,
54
- disabled: disabled,
55
- field: @field,
56
- foreign_key: @field.id_input_foreign_key,
57
- model_key: model_keys[type.to_s],
58
- polymorphic_record: polymorphic_record,
59
- resource: @resource,
60
- style: @field.get_html(:style, view: view, element: :input),
61
- type: type,
62
- classes: classes("w-full"),
63
- view: view
64
- %>
65
- <% else %>
66
- <%= @form.select @field.id_input_foreign_key,
67
- options_for_select(@field.values_for_type(type), @resource.present? && @resource.model.present? ? @resource.model[@field.id_input_foreign_key] : nil),
68
- {
69
- value: @resource.model[@field.id_input_foreign_key].to_s,
70
- include_blank: @field.placeholder,
71
- },
72
- {
73
- class: classes("w-full"),
74
- data: @field.get_html(:data, view: view, element: :input),
75
- disabled: disabled
76
- }
77
- %>
78
- <%
79
- # If the select field is disabled, no value will be sent. It's how HTML works.
80
- # Thus the extra hidden field to actually send the related id to the server.
81
- if disabled %>
82
- <%= @form.hidden_field @field.id_input_foreign_key %>
83
- <% end %>
50
+ <%= field_wrapper **field_wrapper_args, label: Avo.resource_manager.get_resource_by_model_class(type.to_s).name do %>
51
+ <% if @field.is_searchable? %>
52
+ <%= render Avo::Pro::SearchableAssociations::AutocompleteComponent.new form: @form,
53
+ disabled: disabled,
54
+ field: @field,
55
+ foreign_key: @field.id_input_foreign_key,
56
+ model_key: model_keys[type.to_s],
57
+ polymorphic_record: polymorphic_record,
58
+ resource: @resource,
59
+ style: @field.get_html(:style, view: view, element: :input),
60
+ type: type,
61
+ classes: classes("w-full"),
62
+ view: view
63
+ %>
64
+ <% else %>
65
+ <%= @form.select @field.id_input_foreign_key,
66
+ options_for_select(@field.values_for_type(type), @resource.present? && @resource.record.present? ? @resource.record[@field.id_input_foreign_key] : nil),
67
+ {
68
+ value: @resource.record[@field.id_input_foreign_key].to_s,
69
+ include_blank: @field.placeholder,
70
+ },
71
+ {
72
+ class: classes("w-full"),
73
+ data: @field.get_html(:data, view: view, element: :input),
74
+ disabled: disabled
75
+ }
76
+ %>
77
+ <%
78
+ # If the select field is disabled, no value will be sent. It's how HTML works.
79
+ # Thus the extra hidden field to actually send the related id to the server.
80
+ if disabled %>
81
+ <%= @form.hidden_field @field.id_input_foreign_key %>
84
82
  <% end %>
85
- <% create_href = create_path(::Avo::App.get_resource_by_model_name(type.to_s)) %>
86
- <% if !disabled && create_href.present? %>
87
- <%= link_to t("avo.create_new_item", item: type.to_s.downcase),
88
- create_href,
89
- class: "text-sm"
90
- %>
91
- <% end %>
92
- </div>
83
+ <% end %>
84
+ <% create_href = create_path(Avo.resource_manager.get_resource_by_model_class(type.to_s)) %>
85
+ <% if !disabled && create_href.present? %>
86
+ <%= link_to t("avo.create_new_item", item: type.to_s.downcase),
87
+ create_href,
88
+ class: "text-sm"
89
+ %>
90
+ <% end %>
93
91
  <% end %>
94
92
  </div>
95
93
  <% end %>
96
94
  </div>
97
95
  <% else %>
98
96
  <%= field_wrapper **field_wrapper_args do %>
99
- <div class="flex flex-col gap-1">
100
- <% if @field.searchable %>
101
- <%= render Avo::Fields::BelongsToField::AutocompleteComponent.new form: @form,
102
- field: @field,
103
- model_key: @field.target_resource&.model_key,
104
- foreign_key: @field.id_input_foreign_key,
105
- resource: @resource,
97
+ <% if @field.is_searchable? %>
98
+ <%= render Avo::Pro::SearchableAssociations::AutocompleteComponent.new form: @form,
99
+ field: @field,
100
+ model_key: @field.target_resource&.model_key,
101
+ foreign_key: @field.id_input_foreign_key,
102
+ resource: @resource,
103
+ disabled: disabled,
104
+ classes: classes("w-full"),
105
+ view: view,
106
+ style: @field.get_html(:style, view: view, element: :input)
107
+ %>
108
+ <% else %>
109
+ <%= @form.select @field.id_input_foreign_key, @field.options,
110
+ {
111
+ include_blank: @field.placeholder,
112
+ value: @field.value
113
+ },
114
+ {
115
+ class: classes("w-full"),
116
+ data: @field.get_html(:data, view: view, element: :input),
106
117
  disabled: disabled,
107
- classes: classes("w-full"),
108
- view: view,
109
118
  style: @field.get_html(:style, view: view, element: :input)
110
- %>
111
- <% else %>
112
- <%= @form.select @field.id_input_foreign_key, @field.options,
113
- {
114
- include_blank: @field.placeholder,
115
- value: @field.value
116
- },
117
- {
118
- class: classes("w-full"),
119
- data: @field.get_html(:data, view: view, element: :input),
120
- disabled: disabled,
121
- style: @field.get_html(:style, view: view, element: :input)
122
- }
123
- %>
124
- <%
125
- # If the select field is disabled, no value will be sent. It's how HTML works.
126
- # Thus the extra hidden field to actually send the related id to the server.
127
- if disabled %>
128
- <%= @form.hidden_field @field.id_input_foreign_key %>
129
- <% end %>
130
- <% end %>
131
- <% if !disabled && create_path.present? %>
132
- <%= link_to t("avo.create_new_item", item: @field.name.downcase), create_path, class: "text-sm" %>
119
+ }
120
+ %>
121
+ <%
122
+ # If the select field is disabled, no value will be sent. It's how HTML works.
123
+ # Thus the extra hidden field to actually send the related id to the server.
124
+ if disabled %>
125
+ <%= @form.hidden_field @field.id_input_foreign_key %>
133
126
  <% end %>
134
- </div>
127
+ <% end %>
128
+ <% if !disabled && create_path.present? %>
129
+ <%= link_to t("avo.create_new_item", item: @field.name.downcase), create_path, class: "text-sm" %>
130
+ <% end %>
135
131
  <% end %>
136
132
  <% end %>
137
133
  </div>
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Avo::Fields::BelongsToField::EditComponent < Avo::Fields::EditComponent
4
- def initialize(**args)
5
- super(**args)
4
+ def initialize(...)
5
+ super(...)
6
6
 
7
7
  @polymorphic_record = nil
8
8
  end
@@ -28,16 +28,16 @@ class Avo::Fields::BelongsToField::EditComponent < Avo::Fields::EditComponent
28
28
 
29
29
  # Get the polymorphic class
30
30
  def polymorphic_class
31
- @resource.model["#{@field.foreign_key}_type"]
31
+ @resource.record["#{@field.foreign_key}_type"]
32
32
  end
33
33
 
34
34
  def polymorphic_resource
35
- ::Avo::App.get_resource_by_model_name(polymorphic_class)
35
+ Avo.resource_manager.get_resource_by_model_class(polymorphic_class)
36
36
  end
37
37
 
38
38
  # Get the polymorphic id
39
39
  def polymorphic_id
40
- @resource.model["#{@field.foreign_key}_id"]
40
+ @resource.record["#{@field.foreign_key}_id"]
41
41
  end
42
42
 
43
43
  # Get the actual resource
@@ -63,7 +63,7 @@ class Avo::Fields::BelongsToField::EditComponent < Avo::Fields::EditComponent
63
63
  helpers.new_resource_path(**{
64
64
  via_relation: @field.id.to_s,
65
65
  resource: target_resource || @field.target_resource,
66
- via_resource_id: resource.model.to_param,
66
+ via_record_id: resource.record.to_param,
67
67
  via_belongs_to_resource_class: resource.class.name
68
68
  }.compact)
69
69
  end
@@ -71,6 +71,6 @@ class Avo::Fields::BelongsToField::EditComponent < Avo::Fields::EditComponent
71
71
  private
72
72
 
73
73
  def visit_through_association?
74
- @field.target_resource.class.to_s == params[:via_resource_class].to_s
74
+ @field.target_resource.to_s == params[:via_resource_class].to_s
75
75
  end
76
76
  end
@@ -1,4 +1,4 @@
1
1
  <%= index_field_wrapper **field_wrapper_args do %>
2
- <%= link_to @field.label, helpers.resource_view_path(model: @field.value, resource: @field.target_resource)
2
+ <%= link_to @field.label, helpers.resource_view_path(record: @field.value, resource: @field.target_resource)
3
3
  %>
4
4
  <% end %>
@@ -3,10 +3,10 @@
3
3
  class Avo::Fields::BelongsToField::ShowComponent < Avo::Fields::ShowComponent
4
4
  def resource_view_path
5
5
  helpers.resource_view_path(
6
- model: @field.value,
6
+ record: @field.value,
7
7
  resource: @field.target_resource,
8
8
  via_resource_class: @resource.class.to_s,
9
- via_resource_id: @resource.model.to_param
9
+ via_record_id: @resource.record.to_param
10
10
  )
11
11
  end
12
12
  end
@@ -3,7 +3,7 @@
3
3
  <%= @form.check_box @field.id,
4
4
  value: @field.value,
5
5
  checked: @field.value,
6
- class: "text-lg h-4 w-4 checked:bg-primary-400 focus:checked:!bg-primary-400 #{@field.get_html(:classes, view: view, element: :input)}",
6
+ class: "text-lg h-4 w-4 checked:bg-primary-400 focus:checked:!bg-primary-400 rounded #{@field.get_html(:classes, view: view, element: :input)}",
7
7
  data: @field.get_html(:data, view: view, element: :input),
8
8
  disabled: disabled?,
9
9
  style: @field.get_html(:style, view: view, element: :input)
@@ -1,3 +1,3 @@
1
- <%= index_field_wrapper **field_wrapper_args, dash_if_blank: false, center_content: true, flush: true do %>
1
+ <%= index_field_wrapper **field_wrapper_args, dash_if_blank: false, flush: true do %>
2
2
  <%= render Avo::Fields::Common::BooleanCheckComponent.new checked: @field.value %>
3
3
  <% end %>
@@ -1,8 +1,8 @@
1
1
  <%= field_wrapper **field_wrapper_args do %>
2
2
  <div class="flex items-center">
3
3
  <div class="space-y-2">
4
- <% model_param_key = model_name_from_record_or_class(@resource.model).param_key %>
5
- <%= check_box_tag "#{model_name_from_record_or_class(@resource.model).param_key}[#{@field.id}][]", '', true, { class: "hidden" } %>
4
+ <% model_param_key = model_name_from_record_or_class(@resource.record).param_key %>
5
+ <%= check_box_tag "#{model_param_key}[#{@field.id}][]", '', true, { class: "hidden" } %>
6
6
  <% @field.options.each do |id, label| %>
7
7
  <%
8
8
  checked = false
@@ -18,7 +18,7 @@
18
18
  %>
19
19
  <label class="block">
20
20
  <%= check_box_tag "#{model_param_key}[#{@field.id}][]", id, checked, {
21
- class: "w-4 h-4 #{@field.get_html(:classes, view: view, element: :input)}",
21
+ class: "w-4 h-4 rounded checked:bg-primary-400 focus:checked:!bg-primary-400 #{@field.get_html(:classes, view: view, element: :input)}",
22
22
  data: @field.get_html(:data, view: view, element: :input),
23
23
  disabled: disabled?,
24
24
  id: "#{model_param_key}_#{@field.id}_#{id}",
@@ -17,7 +17,7 @@ class Avo::Fields::Common::BadgeViewerComponent < ViewComponent::Base
17
17
  background = :info
18
18
 
19
19
  @options.invert.each do |values, type|
20
- if [values].flatten.map { |value| value }.include? @value
20
+ if [values].flatten.map { |value| value.to_s }.include? @value.to_s
21
21
  background = type.to_sym
22
22
  next
23
23
  end
@@ -1,12 +1 @@
1
- <%
2
- classes = 'h-6 float-left mr-1'
3
-
4
- if @checked
5
- classes += ' text-green-600'
6
- icon = 'heroicons/outline/check-circle'
7
- else
8
- classes += ' text-red-500'
9
- icon = 'heroicons/outline/x-circle'
10
- end
11
- %>
12
- <%= helpers.svg "#{icon}.svg", class: classes %>
1
+ <%= helpers.svg "#{@icon}.svg", class: @classes %>
@@ -2,6 +2,7 @@
2
2
 
3
3
  class Avo::Fields::Common::BooleanCheckComponent < ViewComponent::Base
4
4
  def initialize(checked: false)
5
- @checked = checked
5
+ @icon = checked ? "heroicons/outline/check-circle" : "heroicons/outline/x-circle"
6
+ @classes = "h-6 #{checked ? "text-green-600" : "text-red-500"}"
6
7
  end
7
8
  end
@@ -6,8 +6,8 @@
6
6
  @options.each do |id, label|
7
7
  checked = @value.present? && @value[id.to_s].present?
8
8
  %>
9
- <div class="flex flex-nowrap">
10
- <%= render Avo::Fields::Common::BooleanCheckComponent.new checked: checked %>
9
+ <div class="flex flex-nowrap">
10
+ <%= render Avo::Fields::Common::BooleanCheckComponent.new checked: checked %>
11
11
  <div class="ml-px text-left py-px"><%= label %></div>
12
12
  </div>
13
13
  <% end %>
@@ -42,9 +42,9 @@ class Avo::Fields::Common::Files::ViewType::GridItemComponent < ViewComponent::B
42
42
  record_persisted?
43
43
  end
44
44
 
45
- # If model is not persistent blob is automatically destroyed otherwise it can be "lost" on storage
45
+ # If record is not persistent blob is automatically destroyed otherwise it can be "lost" on storage
46
46
  def record_persisted?
47
- return true if @resource.model.persisted?
47
+ return true if @resource.record.persisted?
48
48
 
49
49
  ActiveStorage::Blob.destroy(file.blob_id) if file.blob_id.present?
50
50
  false
@@ -9,4 +9,4 @@
9
9
  url = URI::HTTPS.build(host: "www.gravatar.com", path: "/avatar/#{@md5}", query: query)
10
10
  classes = @rounded ? 'rounded-full' : ''
11
11
  %>
12
- <%= link_to_if @link_to_resource.present?, image_tag(url.to_s, class: classes, width: options[:size], height: options[:size]), @link, title: @title %>
12
+ <%= link_to_if @link_to_record.present?, image_tag(url.to_s, class: classes, width: options[:size], height: options[:size]), @link, title: @title %>
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Avo::Fields::Common::GravatarViewerComponent < ViewComponent::Base
4
- def initialize(md5: nil, link: nil, default: nil, size: nil, rounded: false, link_to_resource: false, title: nil)
4
+ def initialize(md5: nil, link: nil, default: nil, size: nil, rounded: false, link_to_record: false, title: nil)
5
5
  @md5 = md5
6
6
  @link = link
7
7
  @default = default
8
8
  @size = size
9
9
  @rounded = rounded
10
- @link_to_resource = link_to_resource
10
+ @link_to_record = link_to_record
11
11
  @title = title
12
12
  end
13
13
  end
@@ -1,14 +1,9 @@
1
1
  <div class="flex items-start py-1 leading-tight bg-gray-100 text-gray-500 text-xs">
2
2
  <div class="py-2 px-6 h-full w-full">
3
- <% if empty %>
4
- <% elsif value.present? %>
5
- <% if as_html %>
6
- <%= sanitize value %>
7
- <% else %>
8
- <div class="font-semibold uppercase"><%= value %></div>
9
- <% end %>
3
+ <% if as_html %>
4
+ <%= sanitize value %>
10
5
  <% else %>
11
-
6
+ <div class="font-semibold uppercase"><%= value %></div>
12
7
  <% end %>
13
8
  </div>
14
9
  </div>
@@ -3,11 +3,9 @@
3
3
  class Avo::Fields::Common::HeadingComponent < ViewComponent::Base
4
4
  attr_reader :value
5
5
  attr_reader :as_html
6
- attr_reader :empty
7
6
 
8
- def initialize(value:, as_html:, empty:)
7
+ def initialize(value:, as_html:)
9
8
  @value = value
10
9
  @as_html = as_html
11
- @empty = empty
12
10
  end
13
11
  end
@@ -3,7 +3,7 @@
3
3
  data-key-value-target="controller"
4
4
  data-options="<%= @field.options.to_json %>"
5
5
  data-input-classes="<%= input_classes %>"
6
- data-editable="<%= @view.in?([:edit, :new]) %>"
6
+ data-editable="<%= @view.form? %>"
7
7
  >
8
8
  <div class="w-full flex flex-col">
9
9
  <div class="flex w-full">
@@ -14,7 +14,7 @@
14
14
  <div class="w-1/2 py-3 px-3 uppercase font-semibold text-xs text-white">
15
15
  <%= @field.value_label %>
16
16
  </div>
17
- <% if @view.in?([:edit, :new]) %>
17
+ <% if @view.form? %>
18
18
  <div class="flex items-center justify-center p-2 px-3 border-l border-gray-600">
19
19
  <a href="javascript:void(0);"
20
20
  title="<%= @field.action_text %>"
@@ -5,9 +5,9 @@ class Avo::Fields::Common::KeyValueComponent < ViewComponent::Base
5
5
 
6
6
  attr_reader :view
7
7
 
8
- def initialize(field:, form: nil, view: :show)
8
+ def initialize(field:, form: nil, view: "show")
9
9
  @field = field
10
10
  @form = form
11
- @view = view
11
+ @view = Avo::ViewInquirer.new(view)
12
12
  end
13
13
  end
@@ -7,19 +7,13 @@ class Avo::Fields::Common::ProgressBarComponent < ViewComponent::Base
7
7
  attr_reader :max
8
8
  attr_reader :view
9
9
 
10
- def initialize(value:, display_value: false, value_suffix: nil, max: 100, view: :index)
10
+ def initialize(value:, display_value: false, value_suffix: nil, max: 100, view: "index")
11
11
  @value = value
12
12
  @display_value = display_value
13
13
  @value_suffix = value_suffix
14
14
  @max = max
15
- @view = view
15
+ @view = Avo::ViewInquirer.new(view)
16
16
  end
17
17
 
18
- def show?
19
- view == :show
20
- end
21
-
22
- def index?
23
- view == :index
24
- end
18
+ delegate :show?, :index?, to: :view
25
19
  end
@@ -2,12 +2,15 @@
2
2
  classes = "inline-block"
3
3
  classes += " text-red-600" if @status == 'failed'
4
4
  classes += " text-green-600" if @status == 'success'
5
+ classes += " text-gray-600" if @status == 'neutral'
5
6
  %>
6
7
  <div class="flex flex-shrink-0 <%= classes %> items-center">
7
8
  <% if @status == 'success' %>
8
9
  <%= helpers.svg 'heroicons/solid/check-circle', class: 'h-4' %>
9
10
  <% elsif @status == 'failed' %>
10
11
  <%= helpers.svg 'heroicons/solid/x-circle', class: 'h-4' %>
12
+ <% elsif @status == 'neutral' %>
13
+ <%= helpers.svg 'heroicons/solid/minus-circle', class: 'h-4' %>
11
14
  <% elsif @status == 'loading' %>
12
15
  <div class="spinner">
13
16
  <div class="double-bounce1 bg-gray-600"></div>
@@ -20,11 +20,11 @@ class Avo::Fields::EditComponent < ViewComponent::Base
20
20
  @multiple = multiple
21
21
  @resource = resource
22
22
  @stacked = stacked
23
- @view = :edit
23
+ @view = Avo::ViewInquirer.new("edit")
24
24
  end
25
25
 
26
26
  def classes(extra_classes = "")
27
- helpers.input_classes("#{@field.get_html(:classes, view: view, element: :input)} #{extra_classes}", has_error: @field.model_errors.include?(@field.id))
27
+ helpers.input_classes("#{@field.get_html(:classes, view: view, element: :input)} #{extra_classes}", has_error: @field.record_errors.include?(@field.id))
28
28
  end
29
29
 
30
30
  def render?
@@ -1,6 +1,6 @@
1
1
  <%= index_field_wrapper **field_wrapper_args, flush: true do %>
2
2
  <% if @field.value.present? %>
3
- <%= link_to_if @field.link_to_resource.present?,
3
+ <%= link_to_if @field.link_to_record.present?,
4
4
  image_tag(@field.value,
5
5
  height: @field.height,
6
6
  style: "border-radius: #{@field.radius}px; max-height: #{@field.height}#{@field.height.to_s&.ends_with?('px') ? '' : 'px'};"),
@@ -1,9 +1,9 @@
1
1
  <%= index_field_wrapper **field_wrapper_args, flush: flush? do %>
2
2
  <% if @field.value.present? %>
3
3
  <% if @field.value.attached? && @field.value.representable? && @field.is_image %>
4
- <%= link_to_if @field.link_to_resource, image_tag(helpers.main_app.url_for(@field.value), class: 'h-10'), resource_view_path, class: 'block' %>
4
+ <%= link_to_if @field.link_to_record, image_tag(helpers.main_app.url_for(@field.value), class: 'h-10'), resource_view_path, class: 'block' %>
5
5
  <% elsif @field.value.attached? && @field.is_audio %>
6
- <%= link_to_if @field.link_to_resource, audio_tag(helpers.main_app.url_for(@field.value), controls: true, preload: false, class: 'max-h-full h-10'), resource_view_path, class: 'block h-8' %>
6
+ <%= link_to_if @field.link_to_record, audio_tag(helpers.main_app.url_for(@field.value), controls: true, preload: false, class: 'max-h-full h-10'), resource_view_path, class: 'block h-8' %>
7
7
  <% else %>
8
8
  <%= @field.value.filename %>
9
9
  <% end %>
@@ -4,7 +4,7 @@
4
4
  default: @field.default,
5
5
  size: @field.size,
6
6
  rounded: @field.rounded,
7
- link_to_resource: @field.link_to_resource,
7
+ link_to_record: @field.link_to_record,
8
8
  link: resource_view_path,
9
9
  title: t('avo.view_item', item: @resource.name).humanize
10
10
  )
@@ -1,3 +1,3 @@
1
1
  <%= index_field_wrapper **field_wrapper_args do %>
2
- <%= link_to @field.label, helpers.resource_path(model: @field.value, resource: @field.target_resource) %>
2
+ <%= link_to @field.label, helpers.resource_path(record: @field.value, resource: @field.target_resource) %>
3
3
  <% end %>
@@ -9,8 +9,9 @@
9
9
  <%= a_link attach_path,
10
10
  icon: 'heroicons/outline/link',
11
11
  color: :primary,
12
+ style: :text,
12
13
  'data-turbo-frame': 'attach_modal' do %>
13
- <%= t('avo.attach_item', item: @field.name.downcase) %>
14
+ <%= t('avo.attach_item', item: @field.name.humanize(capitalize: false)) %>
14
15
  <% end %>
15
16
  <% end %>
16
17
  <% if !@field.is_readonly? && !@field.is_disabled? && can_see_the_create_button? %>
@@ -20,7 +21,7 @@
20
21
  'data-turbo-frame': '_top',
21
22
  style: :primary,
22
23
  color: :primary do %>
23
- <%= t('avo.create_new_item', item: @field.name.downcase ) %>
24
+ <%= t('avo.create_new_item', item: @field.name.humanize(capitalize: false) ) %>
24
25
  <% end %>
25
26
  <% end %>
26
27
  <% end %>
@@ -21,7 +21,7 @@ class Avo::Fields::HasOneField::ShowComponent < Avo::Fields::ShowComponent
21
21
  end
22
22
 
23
23
  def attach_path
24
- helpers.avo.resources_associations_new_path(@resource.singular_model_key, @resource.model.to_param, @field.id)
24
+ helpers.avo.resources_associations_new_path(@resource.singular_model_key, @resource.record.to_param, @field.id)
25
25
  end
26
26
 
27
27
  def can_see_the_create_button?
@@ -41,7 +41,7 @@ class Avo::Fields::HasOneField::ShowComponent < Avo::Fields::ShowComponent
41
41
  args = {
42
42
  via_relation: association_id,
43
43
  via_relation_class: @resource.model_class.to_s,
44
- via_resource_id: @resource.model.to_param,
44
+ via_record_id: @resource.record.to_param,
45
45
  via_association_type: :has_one
46
46
  }
47
47
 
@@ -1,3 +1,3 @@
1
1
  <div <% if @index == 0 %> class="overflow-hidden rounded-t" <% end %> data-field-id="<%= @field.id %>">
2
- <%= render Avo::Fields::Common::HeadingComponent.new value: @field.name, as_html: @field.as_html, empty: @field.empty %>
2
+ <%= render Avo::Fields::Common::HeadingComponent.new value: @field.value, as_html: @field.as_html %>
3
3
  </div>
@@ -1,3 +1,3 @@
1
1
  <div <% if @index == 0 %> class="overflow-hidden rounded-t" <% end %> data-field-id="<%= @field.id %>">
2
- <%= render Avo::Fields::Common::HeadingComponent.new value: @field.name, as_html: @field.as_html, empty: @field.empty %>
2
+ <%= render Avo::Fields::Common::HeadingComponent.new value: @field.value, as_html: @field.as_html %>
3
3
  </div>
@@ -1,3 +1,3 @@
1
1
  <%= index_field_wrapper **field_wrapper_args, class: 'whitespace-no-wrap w-[1%]' do %>
2
- <% link_to_if (@field.link_to_resource or Avo.configuration.id_links_to_resource), @field.value, resource_view_path, title: t('avo.view_item', item: @resource.name).humanize %>
2
+ <% link_to_if (@field.link_to_record or Avo.configuration.id_links_to_resource), @field.value, resource_view_path, title: t('avo.view_item', item: @resource.name).humanize %>
3
3
  <% end %>