avo 2.46.0 → 3.0.0.pre1

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

Potentially problematic release.


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

Files changed (417) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -22
  3. data/Gemfile.lock +181 -160
  4. data/README.md +1 -1
  5. data/{public/avo-assets → app/assets/builds}/avo.base.css +479 -698
  6. data/app/assets/builds/avo.base.js +93804 -0
  7. data/app/assets/builds/avo.base.js.map +7 -0
  8. data/app/assets/stylesheets/avo.base.css +2 -2
  9. data/app/assets/svgs/failed_to_load.svg +1 -0
  10. data/app/assets/svgs/font.svg +1 -0
  11. data/app/assets/svgs/grid-empty-state.svg +1 -0
  12. data/app/assets/svgs/table-empty-state.svg +1 -0
  13. data/app/assets/svgs/triangle-up.svg +1 -0
  14. data/app/components/avo/actions_component.html.erb +18 -4
  15. data/app/components/avo/actions_component.rb +12 -18
  16. data/app/components/avo/alert_component.html.erb +1 -1
  17. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  18. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  19. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  20. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  21. data/app/components/avo/base_component.rb +14 -11
  22. data/app/components/avo/button_component.rb +20 -3
  23. data/app/components/avo/empty_state_component.rb +1 -1
  24. data/app/components/avo/field_wrapper_component.html.erb +4 -4
  25. data/app/components/avo/field_wrapper_component.rb +12 -23
  26. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  27. data/app/components/avo/fields/belongs_to_field/edit_component.rb +5 -20
  28. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  29. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  30. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -2
  31. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  32. data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
  33. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  34. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  35. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  36. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  37. data/app/components/avo/fields/common/files_list_viewer_component.rb +8 -0
  38. data/app/components/avo/fields/common/heading_component.html.erb +1 -1
  39. data/app/components/avo/fields/common/single_file_viewer_component.html.erb +56 -0
  40. data/app/components/avo/fields/common/single_file_viewer_component.rb +55 -0
  41. data/app/components/avo/fields/country_field/edit_component.html.erb +1 -3
  42. data/app/components/avo/fields/edit_component.rb +1 -1
  43. data/app/components/avo/fields/file_field/edit_component.html.erb +2 -4
  44. data/app/components/avo/fields/file_field/edit_component.rb +0 -1
  45. data/app/components/avo/fields/file_field/index_component.rb +2 -2
  46. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  47. data/app/components/avo/fields/files_field/edit_component.html.erb +2 -4
  48. data/app/components/avo/fields/files_field/edit_component.rb +0 -1
  49. data/app/components/avo/fields/files_field/show_component.html.erb +1 -1
  50. data/app/components/avo/fields/has_many_field/show_component.html.erb +1 -1
  51. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  52. data/app/components/avo/fields/has_one_field/show_component.html.erb +2 -2
  53. data/app/components/avo/fields/has_one_field/show_component.rb +3 -7
  54. data/app/components/avo/fields/index_component.rb +5 -6
  55. data/app/components/avo/fields/markdown_field/edit_component.html.erb +3 -4
  56. data/app/components/avo/fields/markdown_field/show_component.html.erb +3 -3
  57. data/app/components/avo/fields/number_field/edit_component.html.erb +1 -3
  58. data/app/components/avo/fields/password_field/edit_component.html.erb +1 -3
  59. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  60. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  61. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +0 -1
  62. data/app/components/avo/fields/select_field/edit_component.html.erb +2 -3
  63. data/app/components/avo/fields/show_component.rb +4 -1
  64. data/app/components/avo/fields/status_field/edit_component.html.erb +1 -1
  65. data/app/components/avo/fields/text_field/edit_component.html.erb +2 -3
  66. data/app/components/avo/fields/textarea_field/edit_component.html.erb +0 -1
  67. data/app/components/avo/fields/trix_field/edit_component.html.erb +1 -2
  68. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  69. data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
  70. data/app/components/avo/filters_component.html.erb +9 -3
  71. data/app/components/avo/filters_component.rb +4 -4
  72. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  73. data/app/components/avo/index/grid_item_component.html.erb +5 -2
  74. data/app/components/avo/index/grid_item_component.rb +7 -6
  75. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  76. data/app/components/avo/index/resource_controls_component.rb +128 -18
  77. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  78. data/app/components/avo/index/resource_grid_component.rb +5 -2
  79. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  80. data/app/components/avo/index/resource_table_component.rb +14 -20
  81. data/app/components/avo/index/table_row_component.html.erb +8 -4
  82. data/app/components/avo/index/table_row_component.rb +3 -2
  83. data/app/components/avo/item_switcher_component.html.erb +5 -10
  84. data/app/components/avo/item_switcher_component.rb +2 -3
  85. data/app/components/avo/modal_component.html.erb +7 -12
  86. data/app/components/avo/modal_component.rb +0 -21
  87. data/app/components/avo/paginator_component.html.erb +40 -29
  88. data/app/components/avo/paginator_component.rb +5 -23
  89. data/app/components/avo/panel_component.html.erb +8 -11
  90. data/app/components/avo/panel_component.rb +0 -1
  91. data/app/components/avo/profile_item_component.html.erb +2 -17
  92. data/app/components/avo/profile_item_component.rb +1 -13
  93. data/app/components/avo/referrer_params_component.html.erb +1 -4
  94. data/app/components/avo/resource_component.rb +142 -30
  95. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  96. data/app/components/avo/sidebar/link_component.html.erb +0 -2
  97. data/app/components/avo/sidebar/link_component.rb +3 -5
  98. data/app/components/avo/sidebar_component.html.erb +9 -2
  99. data/app/components/avo/sidebar_component.rb +5 -3
  100. data/app/components/avo/sidebar_profile_component.html.erb +27 -20
  101. data/app/components/avo/tab_group_component.html.erb +13 -7
  102. data/app/components/avo/tab_group_component.rb +1 -6
  103. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  104. data/app/components/avo/tab_switcher_component.rb +4 -39
  105. data/app/components/avo/views/resource_edit_component.html.erb +16 -52
  106. data/app/components/avo/views/resource_edit_component.rb +7 -18
  107. data/app/components/avo/views/resource_index_component.html.erb +38 -53
  108. data/app/components/avo/views/resource_index_component.rb +60 -16
  109. data/app/components/avo/views/resource_show_component.html.erb +8 -151
  110. data/app/components/avo/views/resource_show_component.rb +6 -11
  111. data/app/controllers/avo/actions_controller.rb +19 -16
  112. data/app/controllers/avo/application_controller.rb +40 -109
  113. data/app/controllers/avo/associations_controller.rb +34 -41
  114. data/app/controllers/avo/attachments_controller.rb +10 -25
  115. data/app/controllers/avo/base_controller.rb +91 -103
  116. data/app/controllers/avo/debug_controller.rb +17 -5
  117. data/app/controllers/avo/search_controller.rb +29 -54
  118. data/app/controllers/avo/team_users_controller.rb +4 -0
  119. data/app/controllers/concerns/avo/initializes_avo.rb +26 -0
  120. data/app/helpers/avo/application_helper.rb +20 -21
  121. data/app/helpers/avo/resources_helper.rb +1 -1
  122. data/app/helpers/avo/url_helpers.rb +27 -11
  123. data/app/javascript/avo.base.js +1 -0
  124. data/app/javascript/js/application.js +0 -5
  125. data/app/javascript/js/controllers/action_controller.js +5 -3
  126. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  127. data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
  128. data/app/javascript/js/controllers/filter_controller.js +1 -1
  129. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  130. data/app/javascript/js/controllers/preview_controller.js +24 -0
  131. data/app/javascript/js/controllers/search_controller.js +1 -3
  132. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  133. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  134. data/app/javascript/js/controllers.js +12 -8
  135. data/app/javascript/js/custom-stream-actions.js +15 -0
  136. data/app/views/avo/{attachments/destroy.turbo_stream.erb → actions/keep_modal_open.turbo_stream.erb} +0 -2
  137. data/app/views/avo/actions/show.html.erb +12 -11
  138. data/app/views/avo/associations/new.html.erb +4 -4
  139. data/app/views/avo/base/index.html.erb +3 -2
  140. data/app/views/avo/base/new.html.erb +2 -1
  141. data/app/views/avo/base/preview.html.erb +19 -0
  142. data/app/views/avo/base/show.html.erb +1 -1
  143. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  144. data/app/views/avo/debug/report.html.erb +32 -17
  145. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -15
  146. data/app/views/avo/home/index.html.erb +1 -1
  147. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  148. data/app/views/avo/partials/_javascript.html.erb +5 -0
  149. data/app/views/avo/partials/_logo.html.erb +1 -1
  150. data/app/views/avo/partials/_navbar.html.erb +3 -5
  151. data/app/views/avo/partials/_table_header.html.erb +5 -3
  152. data/app/views/avo/partials/_view_toggle_button.html.erb +0 -9
  153. data/app/views/avo/private/design.html.erb +2 -2
  154. data/app/views/layouts/avo/application.html.erb +3 -0
  155. data/avo.gemspec +6 -7
  156. data/bin/dev +1 -1
  157. data/bin/prod +0 -0
  158. data/config/i18n-tasks.yml +1 -1
  159. data/config/initializers/pagy.rb +10 -14
  160. data/config/master.key +1 -0
  161. data/config/routes.rb +8 -12
  162. data/db/factories.rb +7 -18
  163. data/lib/avo/action_model.rb +20 -0
  164. data/lib/avo/app.rb +90 -162
  165. data/lib/avo/asset_manager.rb +30 -0
  166. data/lib/avo/base_action.rb +38 -36
  167. data/lib/avo/base_resource.rb +108 -96
  168. data/lib/avo/base_resource_tool.rb +9 -16
  169. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +3 -3
  170. data/lib/avo/concerns/filters_session_handler.rb +1 -0
  171. data/lib/avo/concerns/has_controls.rb +37 -0
  172. data/lib/avo/concerns/has_item_type.rb +38 -0
  173. data/lib/avo/concerns/{has_fields.rb → has_items.rb} +110 -97
  174. data/lib/avo/concerns/{has_resource_stimulus_controllers.rb → has_stimulus_controllers.rb} +1 -1
  175. data/lib/avo/concerns/is_resource_item.rb +24 -36
  176. data/lib/avo/concerns/is_visible.rb +15 -0
  177. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  178. data/lib/avo/configuration/branding.rb +0 -12
  179. data/lib/avo/configuration.rb +8 -45
  180. data/lib/avo/current.rb +5 -0
  181. data/lib/avo/dsl/field_parser.rb +1 -1
  182. data/lib/avo/dynamic_router.rb +6 -2
  183. data/lib/avo/engine.rb +37 -30
  184. data/lib/avo/error_manager.rb +25 -0
  185. data/lib/avo/execution_context.rb +9 -15
  186. data/lib/avo/fields/badge_field.rb +1 -1
  187. data/lib/avo/fields/base_field.rb +72 -124
  188. data/lib/avo/fields/belongs_to_field.rb +14 -25
  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 +110 -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 +13 -0
  197. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  198. data/lib/avo/fields/country_field.rb +4 -0
  199. data/lib/avo/fields/date_field.rb +3 -16
  200. data/lib/avo/fields/date_time_field.rb +1 -5
  201. data/lib/avo/fields/field_manager.rb +45 -0
  202. data/lib/avo/fields/file_field.rb +0 -2
  203. data/lib/avo/fields/files_field.rb +0 -6
  204. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  205. data/lib/avo/fields/has_base_field.rb +11 -14
  206. data/lib/avo/fields/has_many_field.rb +5 -2
  207. data/lib/avo/fields/has_one_field.rb +5 -10
  208. data/lib/avo/fields/heading_field.rb +4 -1
  209. data/lib/avo/fields/hidden_field.rb +1 -1
  210. data/lib/avo/fields/id_field.rb +2 -3
  211. data/lib/avo/fields/password_field.rb +1 -1
  212. data/lib/avo/fields/preview_field.rb +14 -0
  213. data/lib/avo/fields/select_field.rb +12 -8
  214. data/lib/avo/fields/status_field.rb +4 -0
  215. data/lib/avo/filters/base_filter.rb +3 -8
  216. data/lib/avo/grid_collector.rb +7 -9
  217. data/lib/avo/html/builder.rb +5 -8
  218. data/lib/avo/item_grapher.rb +78 -0
  219. data/lib/avo/licensing/h_q.rb +4 -68
  220. data/lib/avo/licensing/license.rb +2 -2
  221. data/lib/avo/licensing/license_manager.rb +1 -1
  222. data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
  223. data/lib/avo/licensing/pro_license.rb +1 -7
  224. data/lib/avo/plugin.rb +6 -0
  225. data/lib/avo/plugin_manager.rb +58 -0
  226. data/lib/avo/prefixed_test_helpers.rb +20 -0
  227. data/lib/avo/reloader.rb +3 -0
  228. data/lib/avo/resources/controls/actions_list.rb +6 -12
  229. data/lib/avo/resources/controls/attach_button.rb +15 -0
  230. data/lib/avo/resources/controls/back_button.rb +1 -1
  231. data/lib/avo/resources/controls/base_control.rb +15 -49
  232. data/lib/avo/resources/controls/create_button.rb +15 -0
  233. data/lib/avo/resources/controls/delete_button.rb +5 -1
  234. data/lib/avo/resources/controls/detach_button.rb +4 -1
  235. data/lib/avo/resources/controls/edit_button.rb +4 -1
  236. data/lib/avo/resources/controls/order_controls.rb +8 -0
  237. data/lib/avo/resources/controls/save_button.rb +13 -0
  238. data/lib/avo/resources/controls/show_button.rb +15 -0
  239. data/lib/avo/resources/items/holder.rb +76 -0
  240. data/lib/avo/resources/items/item_group.rb +48 -0
  241. data/lib/avo/resources/items/main_panel.rb +2 -0
  242. data/lib/avo/resources/items/panel.rb +2 -0
  243. data/lib/avo/resources/items/sidebar.rb +47 -0
  244. data/lib/avo/resources/items/tab.rb +60 -0
  245. data/lib/avo/resources/items/tab_group.rb +68 -0
  246. data/lib/avo/resources/resource_manager.rb +181 -0
  247. data/lib/avo/services/authorization_service.rb +11 -110
  248. data/lib/avo/services/debug_service.rb +92 -0
  249. data/lib/avo/services/telemetry_service.rb +84 -0
  250. data/lib/avo/test_helpers.rb +362 -0
  251. data/lib/avo/tools/tool_manager.rb +30 -0
  252. data/lib/avo/version.rb +1 -1
  253. data/lib/avo.rb +7 -0
  254. data/lib/generators/avo/eject_generator.rb +0 -1
  255. data/lib/generators/avo/install_generator.rb +1 -11
  256. data/lib/generators/avo/resource_generator.rb +5 -23
  257. data/lib/generators/avo/scope_generator.rb +15 -0
  258. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -18
  259. data/lib/generators/avo/templates/action.tt +1 -1
  260. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  261. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  262. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  263. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  264. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  265. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  266. data/lib/generators/avo/templates/dashboards/dashboard.tt +1 -1
  267. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  268. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  269. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  270. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  271. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  272. data/lib/generators/avo/templates/initializer/avo.tt +1 -11
  273. data/lib/generators/avo/templates/locales/avo.ar.yml +6 -6
  274. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  275. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  276. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  277. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  278. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  279. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  280. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  281. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  282. data/lib/generators/avo/templates/resource/resource.tt +1 -1
  283. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  284. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  285. data/lib/generators/avo/templates/scope.tt +6 -0
  286. data/lib/generators/avo/templates/standalone_action.tt +1 -1
  287. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  288. data/lib/generators/avo/templates/tool/view.tt +2 -2
  289. data/lib/tasks/avo_tasks.rake +22 -0
  290. metadata +82 -161
  291. data/app/assets/stylesheets/css/tags.css +0 -32
  292. data/app/assets/svgs/map-empty-state.svg +0 -35
  293. data/app/assets/svgs/map-view-type.svg +0 -3
  294. data/app/components/avo/card_component.html.erb +0 -46
  295. data/app/components/avo/card_component.rb +0 -25
  296. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  297. data/app/components/avo/dashboards/divider_component.rb +0 -19
  298. data/app/components/avo/fields/area_field/edit_component.html.erb +0 -7
  299. data/app/components/avo/fields/area_field/edit_component.rb +0 -4
  300. data/app/components/avo/fields/area_field/show_component.html.erb +0 -8
  301. data/app/components/avo/fields/area_field/show_component.rb +0 -4
  302. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  303. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  304. data/app/components/avo/fields/common/files/controls_component.html.erb +0 -29
  305. data/app/components/avo/fields/common/files/controls_component.rb +0 -19
  306. data/app/components/avo/fields/common/files/list_viewer_component.html.erb +0 -20
  307. data/app/components/avo/fields/common/files/list_viewer_component.rb +0 -41
  308. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +0 -27
  309. data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +0 -52
  310. data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +0 -22
  311. data/app/components/avo/fields/common/files/view_type/list_item_component.rb +0 -15
  312. data/app/components/avo/fields/location_field/edit_component.html.erb +0 -22
  313. data/app/components/avo/fields/location_field/edit_component.rb +0 -4
  314. data/app/components/avo/fields/location_field/show_component.html.erb +0 -7
  315. data/app/components/avo/fields/location_field/show_component.rb +0 -4
  316. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  317. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  318. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  319. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  320. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  321. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  322. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  323. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  324. data/app/components/avo/index/ordering/base_component.rb +0 -9
  325. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  326. data/app/components/avo/index/ordering/button_component.rb +0 -23
  327. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  328. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  329. data/app/components/avo/index/resource_map_component.html.erb +0 -16
  330. data/app/components/avo/index/resource_map_component.rb +0 -109
  331. data/app/components/avo/row_component.html.erb +0 -3
  332. data/app/components/avo/row_component.rb +0 -12
  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/reload_belongs_to_field_controller.js +0 -51
  340. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  341. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  342. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  343. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  344. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  345. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  346. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  347. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  348. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  349. data/app/views/avo/dashboards/show.html.erb +0 -38
  350. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  351. data/app/views/avo/partials/_global_search.html.erb +0 -19
  352. data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
  353. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  354. data/lib/avo/base_card.rb +0 -161
  355. data/lib/avo/concerns/fetches_things.rb +0 -150
  356. data/lib/avo/concerns/handles_field_args.rb +0 -47
  357. data/lib/avo/concerns/has_action_stimulus_controllers.rb +0 -15
  358. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  359. data/lib/avo/concerns/has_html_attributes.rb +0 -123
  360. data/lib/avo/concerns/pagination.rb +0 -53
  361. data/lib/avo/concerns/policy_helpers.rb +0 -31
  362. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  363. data/lib/avo/concerns/visible_items.rb +0 -51
  364. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  365. data/lib/avo/dashboards/base_divider.rb +0 -35
  366. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  367. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  368. data/lib/avo/dashboards/metric_card.rb +0 -9
  369. data/lib/avo/dashboards/partial_card.rb +0 -7
  370. data/lib/avo/fields/area_field.rb +0 -39
  371. data/lib/avo/fields/concerns/file_authorization.rb +0 -31
  372. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  373. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  374. data/lib/avo/fields/location_field.rb +0 -86
  375. data/lib/avo/fields/tags_field.rb +0 -102
  376. data/lib/avo/hosts/association_scope_host.rb +0 -8
  377. data/lib/avo/hosts/base_host.rb +0 -25
  378. data/lib/avo/hosts/card_visibility.rb +0 -20
  379. data/lib/avo/hosts/dashboard_card.rb +0 -22
  380. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  381. data/lib/avo/hosts/ordering.rb +0 -22
  382. data/lib/avo/hosts/record_host.rb +0 -7
  383. data/lib/avo/hosts/resource_record_host.rb +0 -7
  384. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  385. data/lib/avo/hosts/search_scope_host.rb +0 -7
  386. data/lib/avo/hosts/view_record_host.rb +0 -7
  387. data/lib/avo/hosts/visibility_host.rb +0 -12
  388. data/lib/avo/items_holder.rb +0 -96
  389. data/lib/avo/main_panel.rb +0 -3
  390. data/lib/avo/menu/base_item.rb +0 -25
  391. data/lib/avo/menu/builder.rb +0 -82
  392. data/lib/avo/menu/dashboard.rb +0 -22
  393. data/lib/avo/menu/group.rb +0 -2
  394. data/lib/avo/menu/link.rb +0 -6
  395. data/lib/avo/menu/menu.rb +0 -2
  396. data/lib/avo/menu/resource.rb +0 -22
  397. data/lib/avo/menu/section.rb +0 -2
  398. data/lib/avo/panel.rb +0 -24
  399. data/lib/avo/panel_builder.rb +0 -25
  400. data/lib/avo/resources/controls/action.rb +0 -38
  401. data/lib/avo/resources/controls/execution_context.rb +0 -58
  402. data/lib/avo/resources/controls/items_holder.rb +0 -19
  403. data/lib/avo/resources/controls/link_to.rb +0 -27
  404. data/lib/avo/row.rb +0 -26
  405. data/lib/avo/row_builder.rb +0 -24
  406. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  407. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  408. data/lib/avo/sidebar.rb +0 -30
  409. data/lib/avo/sidebar_builder.rb +0 -24
  410. data/lib/avo/tab.rb +0 -72
  411. data/lib/avo/tab_builder.rb +0 -25
  412. data/lib/avo/tab_group.rb +0 -42
  413. data/lib/avo/tab_group_builder.rb +0 -43
  414. data/lib/avo/tools_manager.rb +0 -11
  415. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  416. data/public/avo-assets/avo.base.js +0 -1037
  417. data/public/avo-assets/avo.base.js.map +0 -7
@@ -57,6 +57,7 @@ module Avo
57
57
  # - is_disabled?
58
58
 
59
59
  class BelongsToField < BaseField
60
+ include Avo::Fields::Concerns::IsSearchable
60
61
  include Avo::Fields::Concerns::UseResource
61
62
 
62
63
  attr_accessor :target
@@ -84,10 +85,6 @@ module Avo
84
85
  @use_resource = args[:use_resource] || nil
85
86
  end
86
87
 
87
- def searchable
88
- @searchable && ::Avo::App.license.has_with_trial(:searchable_associations)
89
- end
90
-
91
88
  def value
92
89
  if is_polymorphic?
93
90
  # Get the value from the pre-filled assoociation record
@@ -118,12 +115,12 @@ module Avo
118
115
 
119
116
  def values_for_type(model = nil)
120
117
  resource = target_resource
121
- resource = App.get_resource_by_model_name model if model.present?
118
+ resource = Avo::App.resources.get_resource_by_model_class model if model.present?
122
119
 
123
120
  query = resource.class.query_scope
124
121
 
125
122
  if attach_scope.present?
126
- query = Avo::Hosts::AssociationScopeHost.new(block: attach_scope, query: query, parent: get_model).handle
123
+ query = Avo::ExecutionContext.new(target: attach_scope, query: query, parent: get_model).handle
127
124
  end
128
125
 
129
126
  query.all.map do |model|
@@ -160,8 +157,8 @@ module Avo
160
157
  def foreign_key
161
158
  return polymorphic_as if polymorphic_as.present?
162
159
 
163
- if @model.present?
164
- get_model_class(@model).reflections[@relation_method].foreign_key
160
+ if @record.present?
161
+ get_model_class(@record).reflections[@relation_method].foreign_key
165
162
  elsif @resource.present? && @resource.model_class.reflections[@relation_method].present?
166
163
  @resource.model_class.reflections[@relation_method].foreign_key
167
164
  end
@@ -200,12 +197,10 @@ module Avo
200
197
  return model unless model.methods.include? key.to_sym
201
198
 
202
199
  if polymorphic_as.present?
203
- valid_model_class = valid_polymorphic_class params["#{polymorphic_as}_type"]
204
-
205
- model.send("#{polymorphic_as}_type=", valid_model_class)
200
+ model.send("#{polymorphic_as}_type=", params["#{polymorphic_as}_type"])
206
201
 
207
202
  # If the type is blank, reset the id too.
208
- if valid_model_class.blank?
203
+ if params["#{polymorphic_as}_type"].blank?
209
204
  model.send("#{polymorphic_as}_id=", nil)
210
205
  else
211
206
  model.send("#{polymorphic_as}_id=", params["#{polymorphic_as}_id"])
@@ -217,12 +212,6 @@ module Avo
217
212
  model
218
213
  end
219
214
 
220
- def valid_polymorphic_class(possible_class)
221
- types.find do |type|
222
- type.to_s == possible_class.to_s
223
- end
224
- end
225
-
226
215
  def database_id
227
216
  # If the field is a polymorphic value, return the polymorphic_type as key and pre-fill the _id in fill_field.
228
217
  return "#{polymorphic_as}_type" if polymorphic_as.present?
@@ -237,7 +226,7 @@ module Avo
237
226
 
238
227
  if is_polymorphic?
239
228
  if value.present?
240
- return App.get_resource_by_model_name(value.class)
229
+ return Avo::App.resources.get_resource_by_model_class(value.class)
241
230
  else
242
231
  return nil
243
232
  end
@@ -245,19 +234,19 @@ module Avo
245
234
 
246
235
  reflection_key = polymorphic_as || id
247
236
 
248
- if @model._reflections[reflection_key.to_s].klass.present?
249
- App.get_resource_by_model_name @model._reflections[reflection_key.to_s].klass.to_s
250
- elsif @model._reflections[reflection_key.to_s].options[:class_name].present?
251
- App.get_resource_by_model_name @model._reflections[reflection_key.to_s].options[:class_name]
237
+ if @record._reflections[reflection_key.to_s].klass.present?
238
+ Avo::App.resources.get_resource_by_model_class @record._reflections[reflection_key.to_s].klass.to_s
239
+ elsif @record._reflections[reflection_key.to_s].options[:class_name].present?
240
+ Avo::App.resources.get_resource_by_model_class @record._reflections[reflection_key.to_s].options[:class_name]
252
241
  else
253
242
  App.get_resource_by_name reflection_key.to_s
254
243
  end
255
244
  end
256
245
 
257
246
  def get_model
258
- return @model if @model.present?
247
+ return @record if @record.present?
259
248
 
260
- @resource.model
249
+ @resource.record
261
250
  rescue
262
251
  nil
263
252
  end
@@ -0,0 +1,49 @@
1
+ module Avo
2
+ module Fields
3
+ module Concerns
4
+ module HandlesFieldArgs
5
+ extend ActiveSupport::Concern
6
+
7
+ private
8
+
9
+ # Add an instance variable from args
10
+ # That may be a string, boolean, or array
11
+ # Each args should also have a default value
12
+ def add_prop_from_args(args = {}, name: nil, type: :string, default: nil)
13
+ value = default
14
+
15
+ if type == :boolean
16
+ case args[name.to_sym]
17
+ when nil
18
+ value = default
19
+ when false
20
+ value = false
21
+ when true
22
+ value = true
23
+ end
24
+ else
25
+ value = args[name.to_sym] unless args.dig(name.to_sym).nil?
26
+ end
27
+
28
+ instance_variable_set(:"@#{name}", value)
29
+ end
30
+
31
+ def add_boolean_prop(args, name, default = false)
32
+ add_prop_from_args args, name: name, default: default, type: :boolean
33
+ end
34
+
35
+ def add_array_prop(args, name, default = [])
36
+ add_prop_from_args args, name: name, default: default, type: :array
37
+ end
38
+
39
+ def add_object_prop(args, name, default = {})
40
+ add_prop_from_args args, name: name, default: default, type: :object
41
+ end
42
+
43
+ def add_string_prop(args, name, default = nil)
44
+ add_prop_from_args args, name: name, default: default, type: :string
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -5,11 +5,7 @@ module Avo
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  def computed_default_value
8
- if default.respond_to? :call
9
- Avo::Hosts::ResourceViewRecordHost.new(block: default, record: model, view: view, resource: resource).handle
10
- else
11
- default
12
- end
8
+ Avo::ExecutionContext.new(target: default, record: record, view: view, resource: resource).handle
13
9
  end
14
10
  end
15
11
  end
@@ -0,0 +1,22 @@
1
+ module Avo
2
+ module Fields
3
+ module Concerns
4
+ module HasFieldName
5
+ extend ActiveSupport::Concern
6
+
7
+ class_methods do
8
+ def field_name(name)
9
+ self.field_name_attribute = name
10
+ end
11
+
12
+ # Get the field name
13
+ def get_field_name
14
+ return field_name_attribute if field_name_attribute.present?
15
+
16
+ to_s.demodulize.underscore.gsub "_field", ""
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,110 @@
1
+ module Avo
2
+ module Fields
3
+ module Concerns
4
+ module HasHTMLAttributes
5
+ extend ActiveSupport::Concern
6
+
7
+ attr_reader :html
8
+
9
+ # Used to get attributes for elements and views
10
+ #
11
+ # examples:
12
+ # get_html :data, view: :edit, element: :input
13
+ # get_html :classes, view: :show, element: :wrapper
14
+ # get_html :styles, view: :index, element: :wrapper
15
+ def get_html(name = nil, element:, view:)
16
+ if [view, element].any?(&:nil?)
17
+ default_attribute_value name
18
+ end
19
+
20
+ parsed = parse_html
21
+
22
+ attributes = if parsed.is_a? Hash
23
+ get_html_from_hash name, element: element, hash: parsed, view: view
24
+ elsif parsed.is_a? Avo::HTML::Builder
25
+ get_html_from_block name, element: element, html_builder: parsed, view: view
26
+ elsif parsed.nil?
27
+ # Handle empty parsed by returning an empty state
28
+ default_attribute_value name
29
+ end
30
+
31
+ add_default_data_attributes attributes, name, element, view
32
+ end
33
+
34
+ private
35
+
36
+ # Returns Hash, HTML::Builder, or nil.
37
+ def parse_html
38
+ return if @html.nil?
39
+
40
+ if @html.is_a? Hash
41
+ @html
42
+ elsif @html.respond_to? :call
43
+ Avo::HTML::Builder.parse_block(record: record, resource: resource, &@html)
44
+ end
45
+ end
46
+
47
+ def default_attribute_value(name)
48
+ name == :data ? {} : ""
49
+ end
50
+
51
+ def add_default_data_attributes(attributes, name, element, view)
52
+ if !attributes.nil? && name == :data && element == :input && view.in?([:edit, :new]) && resource.present? && resource.respond_to?(:get_stimulus_controllers)
53
+ extra_attributes = resource.get_stimulus_controllers
54
+ .split(" ")
55
+ .map do |controller|
56
+ [:"#{controller}-target", "#{id.to_s.underscore}_#{type.to_s.underscore}_input".camelize(:lower)]
57
+ end
58
+ .to_h
59
+
60
+ attributes.merge extra_attributes
61
+ else
62
+ attributes
63
+ end
64
+ end
65
+
66
+ def get_html_from_block(name = nil, element:, html_builder:, view:)
67
+ values = []
68
+
69
+ # get view ancestor
70
+ values << html_builder.dig_stack(view, element, name)
71
+ # get element ancestor
72
+ values << html_builder.dig_stack(element, name)
73
+ # get direct ancestor
74
+ values << html_builder.dig_stack(name)
75
+
76
+ values_type = if name == :data
77
+ :hash
78
+ else
79
+ :string
80
+ end
81
+
82
+ merge_values_as(as: values_type, values: values)
83
+ end
84
+
85
+ def get_html_from_hash(name = nil, element:, hash:, view:)
86
+ # @todo: what if this is not a Hash but a string?
87
+ hash.dig(view, element, name) || {}
88
+ end
89
+
90
+ # Merge the values from all possible locations.
91
+ # If the result is "blank", return nil so the attributes are not outputted to the DOM.
92
+ #
93
+ # Ex: if the style attribute is empty return `nil` instead of an empty space `" "`
94
+ def merge_values_as(as: :array, values: [])
95
+ result = if as == :array
96
+ values.flatten
97
+ elsif as == :string
98
+ values.select do |value|
99
+ value.is_a? String
100
+ end.join " "
101
+ elsif as == :hash
102
+ values.reduce({}, :merge)
103
+ end
104
+
105
+ result if result.present?
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -7,11 +7,7 @@ module Avo
7
7
  attr_reader :disabled
8
8
 
9
9
  def is_disabled?
10
- if disabled.respond_to? :call
11
- Avo::Hosts::ResourceViewRecordHost.new(block: disabled, record: model, view: view, resource: resource).handle
12
- else
13
- disabled
14
- end
10
+ Avo::ExecutionContext.new(target: disabled, record: record, view: view, resource: resource).handle
15
11
  end
16
12
  end
17
13
  end
@@ -5,11 +5,7 @@ module Avo
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  def is_readonly?
8
- if readonly.respond_to? :call
9
- Avo::Hosts::ResourceViewRecordHost.new(block: readonly, record: model, view: view, resource: resource).handle
10
- else
11
- readonly
12
- end
8
+ Avo::ExecutionContext.new(target: readonly, record: record, view: view, resource: resource).handle
13
9
  end
14
10
  end
15
11
  end
@@ -5,17 +5,15 @@ module Avo
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  def is_required?
8
- if required.respond_to? :call
9
- Avo::Hosts::ResourceViewRecordHost.new(block: required, record: model, view: view, resource: resource).handle
10
- else
11
- required.nil? ? required_from_validators : required
12
- end
8
+ return required_from_validators if required.nil?
9
+
10
+ Avo::ExecutionContext.new(target: required, record: record, view: view, resource: resource).handle
13
11
  end
14
12
 
15
13
  private
16
14
 
17
15
  def required_from_validators
18
- return false if model.nil?
16
+ return false if record.nil?
19
17
 
20
18
  validators.any? do |validator|
21
19
  validator.is_a? ActiveModel::Validations::PresenceValidator
@@ -23,7 +21,7 @@ module Avo
23
21
  end
24
22
 
25
23
  def validators
26
- model.class.validators_on(id)
24
+ record.class.validators_on(id)
27
25
  end
28
26
  end
29
27
  end
@@ -0,0 +1,13 @@
1
+ module Avo
2
+ module Fields
3
+ module Concerns
4
+ module IsSearchable
5
+ extend ActiveSupport::Concern
6
+
7
+ def is_searchable?
8
+ defined?(AvoPro) && @searchable && ::Avo::App.license.has_with_trial(:searchable_associations)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -5,7 +5,11 @@ module Avo
5
5
  extend ActiveSupport::Concern
6
6
 
7
7
  def use_resource
8
- App.get_resource @use_resource
8
+ Avo::App.resources.get_resource @use_resource
9
+ rescue
10
+ # On boot we eager load the resources before the app is set.
11
+ # Because of that, we don't have a resource manager.
12
+ nil
9
13
  end
10
14
  end
11
15
  end
@@ -30,6 +30,10 @@ module Avo
30
30
  end
31
31
  end
32
32
  end
33
+
34
+ def options_for_filter
35
+ select_options
36
+ end
33
37
  end
34
38
  end
35
39
  end
@@ -20,26 +20,13 @@ module Avo
20
20
  def formatted_value
21
21
  return if value.blank?
22
22
 
23
- try_iso8601
23
+ value.iso8601
24
24
  end
25
25
 
26
26
  def edit_formatted_value
27
- formatted_value
28
- end
29
-
30
- private
27
+ return nil if value.nil?
31
28
 
32
- def try_iso8601
33
- if value.respond_to?(:iso8601)
34
- value.iso8601
35
- elsif value.is_a?(String)
36
- parsed = DateTime.parse(value.dup)
37
- if parsed.present?
38
- parsed
39
- end
40
- else
41
- value
42
- end
29
+ value.iso8601
43
30
  end
44
31
  end
45
32
  end
@@ -51,11 +51,7 @@ module Avo
51
51
  end
52
52
 
53
53
  def timezone
54
- if @timezone.respond_to?(:call)
55
- return Avo::Hosts::ResourceViewRecordHost.new(block: @timezone, record: resource.model, resource: resource, view: view).handle
56
- end
57
-
58
- @timezone
54
+ Avo::ExecutionContext.new(target: @timezone, record: resource.record, resource: resource, view: view).handle
59
55
  end
60
56
  end
61
57
  end
@@ -0,0 +1,45 @@
1
+ module Avo
2
+ module Fields
3
+ class FieldManager
4
+ class << self
5
+ def build
6
+ instance = new
7
+ instance.init_fields
8
+ instance
9
+ end
10
+ end
11
+
12
+ attr_reader :fields
13
+
14
+ alias_method :all, :fields
15
+
16
+ def initialize
17
+ @fields = []
18
+ end
19
+
20
+ # This method will find all fields available in the Avo::Fields namespace and add them to the fields class_variable array
21
+ # so later we can instantiate them on our resources.
22
+ #
23
+ # If the field has their `def_method` set up it will follow that convention, if not it will snake_case the name:
24
+ #
25
+ # Avo::Fields::TextField -> text
26
+ # Avo::Fields::DateTimeField -> date_time
27
+ def init_fields
28
+ Avo::Fields::BaseField.descendants.each do |class_name|
29
+ next if class_name.to_s == "BaseField"
30
+
31
+ if class_name.to_s.end_with? "Field"
32
+ load_field class_name.get_field_name, class_name
33
+ end
34
+ end
35
+ end
36
+
37
+ def load_field(method_name, klass)
38
+ fields.push(
39
+ name: method_name,
40
+ class: klass
41
+ )
42
+ end
43
+ end
44
+ end
45
+ end
@@ -7,7 +7,6 @@ module Avo
7
7
  attr_accessor :is_audio
8
8
  attr_accessor :direct_upload
9
9
  attr_accessor :accept
10
- attr_reader :display_filename
11
10
 
12
11
  def initialize(id, **args, &block)
13
12
  super(id, **args, &block)
@@ -18,7 +17,6 @@ module Avo
18
17
  @is_audio = args[:is_audio].present? ? args[:is_audio] : false
19
18
  @direct_upload = args[:direct_upload].present? ? args[:direct_upload] : false
20
19
  @accept = args[:accept].present? ? args[:accept] : nil
21
- @display_filename = args[:display_filename].nil? ? true : args[:display_filename]
22
20
  end
23
21
 
24
22
  def path
@@ -5,9 +5,6 @@ module Avo
5
5
  attr_accessor :is_image
6
6
  attr_accessor :direct_upload
7
7
  attr_accessor :accept
8
- attr_reader :display_filename
9
- attr_reader :view_type
10
- attr_reader :hide_view_type_switcher
11
8
 
12
9
  def initialize(id, **args, &block)
13
10
  super(id, **args, &block)
@@ -16,9 +13,6 @@ module Avo
16
13
  @is_image = args[:is_image].present? ? args[:is_image] : @is_avatar
17
14
  @direct_upload = args[:direct_upload].present? ? args[:direct_upload] : false
18
15
  @accept = args[:accept].present? ? args[:accept] : nil
19
- @display_filename = args[:display_filename].nil? ? true : args[:display_filename]
20
- @view_type = args[:view_type] || :grid
21
- @hide_view_type_switcher = args[:hide_view_type_switcher]
22
16
  end
23
17
 
24
18
  def view_component_name
@@ -4,8 +4,7 @@ module Avo
4
4
  def initialize(id, **args, &block)
5
5
  args[:updatable] = false
6
6
 
7
- hide_on :all
8
- show_on Avo.configuration.resource_default_view
7
+ only_on Avo.configuration.resource_default_view
9
8
 
10
9
  super(id, **args, &block)
11
10
  end
@@ -1,6 +1,7 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class HasBaseField < BaseField
4
+ include Avo::Fields::Concerns::IsSearchable
4
5
  include Avo::Fields::Concerns::UseResource
5
6
 
6
7
  attr_accessor :display
@@ -25,12 +26,8 @@ module Avo
25
26
  @link_to_child_resource = args[:link_to_child_resource] || false
26
27
  end
27
28
 
28
- def searchable
29
- @searchable && ::Avo::App.license.has_with_trial(:searchable_associations)
30
- end
31
-
32
- def resource
33
- @resource || Avo::App.get_resource_by_model_name(@model.class)
29
+ def field_resource
30
+ resource || Avo::App.resources.get_resource_by_model_class(@record.class)
34
31
  end
35
32
 
36
33
  def turbo_frame
@@ -38,9 +35,9 @@ module Avo
38
35
  end
39
36
 
40
37
  def frame_url
41
- Avo::Services::URIService.parse(@resource.record_path)
38
+ Avo::Services::URIService.parse(field_resource.record_path)
42
39
  .append_path(id.to_s)
43
- .append_query(turbo_frame: turbo_frame.to_s)
40
+ .append_query(turbo_frame: turbo_frame)
44
41
  .to_s
45
42
  end
46
43
 
@@ -59,12 +56,12 @@ module Avo
59
56
  end
60
57
 
61
58
  def target_resource
62
- if @model._reflections[id.to_s].klass.present?
63
- Avo::App.get_resource_by_model_name @model._reflections[id.to_s].klass.to_s
64
- elsif @model._reflections[id.to_s].options[:class_name].present?
65
- Avo::App.get_resource_by_model_name @model._reflections[id.to_s].options[:class_name]
59
+ if @record._reflections[id.to_s].klass.present?
60
+ Avo::App.resources.get_resource_by_model_class @record._reflections[id.to_s].klass.to_s
61
+ elsif @record._reflections[id.to_s].options[:class_name].present?
62
+ Avo::App.resources.get_resource_by_model_class @record._reflections[id.to_s].options[:class_name]
66
63
  else
67
- Avo::App.get_resource_by_name id.to_s
64
+ Avo::App.resources.get_resource_by_name id.to_s
68
65
  end
69
66
  end
70
67
 
@@ -90,7 +87,7 @@ module Avo
90
87
 
91
88
  def authorized?
92
89
  method = "view_#{id}?".to_sym
93
- service = resource.authorization
90
+ service = field_resource.authorization
94
91
 
95
92
  if service.has_method? method
96
93
  service.authorize_action(method, raise_exception: false)
@@ -4,11 +4,14 @@ module Avo
4
4
  def initialize(id, **args, &block)
5
5
  args[:updatable] = false
6
6
 
7
- hide_on :all
8
- show_on Avo.configuration.resource_default_view
7
+ only_on Avo.configuration.resource_default_view
9
8
 
10
9
  super(id, **args, &block)
11
10
  end
11
+
12
+ def translated_name(default:)
13
+ t(translation_key, count: 2, default: default_name).capitalize
14
+ end
12
15
  end
13
16
  end
14
17
  end
@@ -4,7 +4,7 @@ module Avo
4
4
  attr_accessor :relation_method
5
5
 
6
6
  def initialize(id, **args, &block)
7
- hide_on :new, :edit
7
+ hide_on :forms
8
8
 
9
9
  super(id, **args, &block)
10
10
 
@@ -17,12 +17,8 @@ module Avo
17
17
  value.send(target_resource.title)
18
18
  end
19
19
 
20
- def resource
21
- Avo::App.get_resource_by_model_name @model.class
22
- end
23
-
24
20
  def frame_url
25
- Avo::Services::URIService.parse(@resource.record_path)
21
+ Avo::Services::URIService.parse(field_resource.record_path)
26
22
  .append_paths(id, value.id)
27
23
  .append_query(turbo_frame: turbo_frame)
28
24
  .to_s
@@ -30,14 +26,13 @@ module Avo
30
26
 
31
27
  def fill_field(model, key, value, params)
32
28
  if value.blank?
33
- related_model = nil
29
+ related_record = nil
34
30
  else
35
31
  related_class = model.class.reflections[name.to_s.downcase].class_name
36
- related_resource = ::Avo::App.get_resource_by_model_name(related_class)
37
- related_model = related_resource.find_record value
32
+ related_record = related_class.safe_constantize.find value
38
33
  end
39
34
 
40
- model.public_send("#{key}=", related_model)
35
+ model.public_send("#{key}=", related_record)
41
36
 
42
37
  model
43
38
  end
@@ -1,4 +1,4 @@
1
- require 'securerandom'
1
+ require "securerandom"
2
2
 
3
3
  module Avo
4
4
  module Fields
@@ -16,6 +16,9 @@ module Avo
16
16
 
17
17
  super(content, **args, &block)
18
18
 
19
+ # this field is not used to update anything
20
+ @for_presentation_only = true
21
+
19
22
  hide_on :index
20
23
 
21
24
  @as_html = args[:as_html].present? ? args[:as_html] : false