avo 2.45.0 → 3.0.0.pre1

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

Potentially problematic release.


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

Files changed (415) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +23 -22
  3. data/Gemfile.lock +181 -160
  4. data/README.md +1 -1
  5. data/{public/avo-assets → app/assets/builds}/avo.base.css +479 -698
  6. data/app/assets/builds/avo.base.js +93804 -0
  7. data/app/assets/builds/avo.base.js.map +7 -0
  8. data/app/assets/stylesheets/avo.base.css +2 -2
  9. data/app/assets/svgs/failed_to_load.svg +1 -0
  10. data/app/assets/svgs/font.svg +1 -0
  11. data/app/assets/svgs/grid-empty-state.svg +1 -0
  12. data/app/assets/svgs/table-empty-state.svg +1 -0
  13. data/app/assets/svgs/triangle-up.svg +1 -0
  14. data/app/components/avo/actions_component.html.erb +18 -4
  15. data/app/components/avo/actions_component.rb +12 -18
  16. data/app/components/avo/alert_component.html.erb +1 -1
  17. data/app/components/avo/asset_manager/javascript_component.html.erb +3 -0
  18. data/app/components/avo/asset_manager/javascript_component.rb +13 -0
  19. data/app/components/avo/asset_manager/stylesheet_component.html.erb +3 -0
  20. data/app/components/avo/asset_manager/stylesheet_component.rb +13 -0
  21. data/app/components/avo/base_component.rb +14 -11
  22. data/app/components/avo/button_component.rb +20 -3
  23. data/app/components/avo/empty_state_component.rb +1 -1
  24. data/app/components/avo/field_wrapper_component.html.erb +4 -4
  25. data/app/components/avo/field_wrapper_component.rb +9 -9
  26. data/app/components/avo/fields/belongs_to_field/edit_component.html.erb +96 -118
  27. data/app/components/avo/fields/belongs_to_field/edit_component.rb +5 -20
  28. data/app/components/avo/fields/belongs_to_field/index_component.html.erb +1 -1
  29. data/app/components/avo/fields/belongs_to_field/show_component.rb +2 -2
  30. data/app/components/avo/fields/boolean_field/edit_component.html.erb +1 -2
  31. data/app/components/avo/fields/boolean_group_field/edit_component.html.erb +3 -3
  32. data/app/components/avo/fields/code_field/edit_component.html.erb +0 -1
  33. data/app/components/avo/fields/common/badge_viewer_component.html.erb +24 -1
  34. data/app/components/avo/fields/common/badge_viewer_component.rb +0 -24
  35. data/app/components/avo/fields/common/boolean_group_component.html.erb +2 -2
  36. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  37. data/app/components/avo/fields/common/files_list_viewer_component.rb +8 -0
  38. data/app/components/avo/fields/common/heading_component.html.erb +1 -1
  39. data/app/components/avo/fields/common/single_file_viewer_component.html.erb +56 -0
  40. data/app/components/avo/fields/common/single_file_viewer_component.rb +55 -0
  41. data/app/components/avo/fields/country_field/edit_component.html.erb +1 -3
  42. data/app/components/avo/fields/edit_component.rb +1 -1
  43. data/app/components/avo/fields/file_field/edit_component.html.erb +2 -4
  44. data/app/components/avo/fields/file_field/edit_component.rb +0 -1
  45. data/app/components/avo/fields/file_field/index_component.rb +2 -2
  46. data/app/components/avo/fields/file_field/show_component.html.erb +1 -1
  47. data/app/components/avo/fields/files_field/edit_component.html.erb +2 -4
  48. data/app/components/avo/fields/files_field/edit_component.rb +0 -1
  49. data/app/components/avo/fields/files_field/show_component.html.erb +1 -1
  50. data/app/components/avo/fields/has_many_field/show_component.html.erb +1 -1
  51. data/app/components/avo/fields/has_one_field/index_component.html.erb +1 -1
  52. data/app/components/avo/fields/has_one_field/show_component.html.erb +2 -2
  53. data/app/components/avo/fields/has_one_field/show_component.rb +3 -7
  54. data/app/components/avo/fields/index_component.rb +5 -6
  55. data/app/components/avo/fields/markdown_field/edit_component.html.erb +3 -4
  56. data/app/components/avo/fields/markdown_field/show_component.html.erb +3 -3
  57. data/app/components/avo/fields/number_field/edit_component.html.erb +1 -3
  58. data/app/components/avo/fields/password_field/edit_component.html.erb +1 -3
  59. data/app/components/avo/fields/preview_field/index_component.html.erb +10 -0
  60. data/app/components/avo/fields/preview_field/index_component.rb +4 -0
  61. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +0 -1
  62. data/app/components/avo/fields/select_field/edit_component.html.erb +2 -3
  63. data/app/components/avo/fields/show_component.rb +4 -1
  64. data/app/components/avo/fields/status_field/edit_component.html.erb +1 -1
  65. data/app/components/avo/fields/text_field/edit_component.html.erb +2 -3
  66. data/app/components/avo/fields/textarea_field/edit_component.html.erb +0 -1
  67. data/app/components/avo/fields/trix_field/edit_component.html.erb +1 -2
  68. data/app/components/avo/fields/trix_field/edit_component.rb +1 -1
  69. data/app/components/avo/fields/trix_field/show_component.html.erb +1 -1
  70. data/app/components/avo/filters_component.html.erb +9 -3
  71. data/app/components/avo/filters_component.rb +4 -4
  72. data/app/components/avo/index/field_wrapper_component.html.erb +1 -1
  73. data/app/components/avo/index/grid_item_component.html.erb +5 -2
  74. data/app/components/avo/index/grid_item_component.rb +7 -6
  75. data/app/components/avo/index/resource_controls_component.html.erb +3 -81
  76. data/app/components/avo/index/resource_controls_component.rb +128 -18
  77. data/app/components/avo/index/resource_grid_component.html.erb +5 -3
  78. data/app/components/avo/index/resource_grid_component.rb +5 -2
  79. data/app/components/avo/index/resource_table_component.html.erb +5 -4
  80. data/app/components/avo/index/resource_table_component.rb +14 -20
  81. data/app/components/avo/index/table_row_component.html.erb +8 -4
  82. data/app/components/avo/index/table_row_component.rb +3 -2
  83. data/app/components/avo/item_switcher_component.html.erb +5 -10
  84. data/app/components/avo/item_switcher_component.rb +2 -3
  85. data/app/components/avo/modal_component.html.erb +7 -12
  86. data/app/components/avo/modal_component.rb +0 -21
  87. data/app/components/avo/paginator_component.html.erb +40 -29
  88. data/app/components/avo/paginator_component.rb +5 -23
  89. data/app/components/avo/panel_component.html.erb +8 -11
  90. data/app/components/avo/panel_component.rb +0 -1
  91. data/app/components/avo/profile_item_component.html.erb +2 -17
  92. data/app/components/avo/profile_item_component.rb +1 -13
  93. data/app/components/avo/referrer_params_component.html.erb +1 -4
  94. data/app/components/avo/resource_component.rb +142 -30
  95. data/app/components/avo/resource_sidebar_component.html.erb +6 -2
  96. data/app/components/avo/sidebar/link_component.html.erb +0 -2
  97. data/app/components/avo/sidebar/link_component.rb +3 -5
  98. data/app/components/avo/sidebar_component.html.erb +9 -2
  99. data/app/components/avo/sidebar_component.rb +5 -3
  100. data/app/components/avo/sidebar_profile_component.html.erb +27 -20
  101. data/app/components/avo/tab_group_component.html.erb +13 -7
  102. data/app/components/avo/tab_group_component.rb +1 -6
  103. data/app/components/avo/tab_switcher_component.html.erb +17 -40
  104. data/app/components/avo/tab_switcher_component.rb +4 -39
  105. data/app/components/avo/views/resource_edit_component.html.erb +16 -52
  106. data/app/components/avo/views/resource_edit_component.rb +7 -18
  107. data/app/components/avo/views/resource_index_component.html.erb +38 -53
  108. data/app/components/avo/views/resource_index_component.rb +60 -16
  109. data/app/components/avo/views/resource_show_component.html.erb +8 -151
  110. data/app/components/avo/views/resource_show_component.rb +6 -11
  111. data/app/controllers/avo/actions_controller.rb +19 -16
  112. data/app/controllers/avo/application_controller.rb +40 -109
  113. data/app/controllers/avo/associations_controller.rb +34 -41
  114. data/app/controllers/avo/attachments_controller.rb +10 -25
  115. data/app/controllers/avo/base_controller.rb +91 -103
  116. data/app/controllers/avo/debug_controller.rb +17 -5
  117. data/app/controllers/avo/search_controller.rb +29 -54
  118. data/app/controllers/avo/team_users_controller.rb +4 -0
  119. data/app/controllers/concerns/avo/initializes_avo.rb +26 -0
  120. data/app/helpers/avo/application_helper.rb +20 -21
  121. data/app/helpers/avo/resources_helper.rb +1 -1
  122. data/app/helpers/avo/url_helpers.rb +27 -11
  123. data/app/javascript/avo.base.js +1 -0
  124. data/app/javascript/js/application.js +0 -5
  125. data/app/javascript/js/controllers/action_controller.js +5 -3
  126. data/app/javascript/js/controllers/actions_overflow_controller.js +62 -0
  127. data/app/javascript/js/controllers/fields/{easy_mde_controller.js → simple_mde_controller.js} +3 -4
  128. data/app/javascript/js/controllers/filter_controller.js +1 -1
  129. data/app/javascript/js/controllers/input_autofocus_controller.js +12 -0
  130. data/app/javascript/js/controllers/preview_controller.js +24 -0
  131. data/app/javascript/js/controllers/search_controller.js +1 -3
  132. data/app/javascript/js/controllers/self_destroy_controller.js +7 -0
  133. data/app/javascript/js/controllers/toggle_controller.js +48 -0
  134. data/app/javascript/js/controllers.js +12 -8
  135. data/app/javascript/js/custom-stream-actions.js +15 -0
  136. data/app/views/avo/{attachments/destroy.turbo_stream.erb → actions/keep_modal_open.turbo_stream.erb} +0 -2
  137. data/app/views/avo/actions/show.html.erb +11 -10
  138. data/app/views/avo/associations/new.html.erb +4 -4
  139. data/app/views/avo/base/index.html.erb +3 -2
  140. data/app/views/avo/base/new.html.erb +2 -1
  141. data/app/views/avo/base/preview.html.erb +19 -0
  142. data/app/views/avo/base/show.html.erb +1 -1
  143. data/app/views/avo/debug/_valid_indicator.html.erb +9 -0
  144. data/app/views/avo/debug/report.html.erb +32 -17
  145. data/app/views/avo/debug/{index.html.erb → status.html.erb} +31 -15
  146. data/app/views/avo/home/index.html.erb +1 -1
  147. data/app/views/avo/partials/_custom_tools_alert.html.erb +2 -2
  148. data/app/views/avo/partials/_javascript.html.erb +5 -0
  149. data/app/views/avo/partials/_logo.html.erb +1 -1
  150. data/app/views/avo/partials/_navbar.html.erb +3 -5
  151. data/app/views/avo/partials/_table_header.html.erb +5 -3
  152. data/app/views/avo/partials/_view_toggle_button.html.erb +0 -9
  153. data/app/views/avo/private/design.html.erb +2 -2
  154. data/app/views/layouts/avo/application.html.erb +3 -0
  155. data/avo.gemspec +6 -7
  156. data/bin/dev +1 -1
  157. data/bin/prod +0 -0
  158. data/config/i18n-tasks.yml +1 -1
  159. data/config/initializers/pagy.rb +10 -14
  160. data/config/master.key +1 -0
  161. data/config/routes.rb +8 -12
  162. data/db/factories.rb +7 -18
  163. data/lib/avo/action_model.rb +20 -0
  164. data/lib/avo/app.rb +90 -162
  165. data/lib/avo/asset_manager.rb +30 -0
  166. data/lib/avo/base_action.rb +38 -35
  167. data/lib/avo/base_resource.rb +107 -95
  168. data/lib/avo/base_resource_tool.rb +9 -16
  169. data/lib/avo/concerns/{can_replace_fields.rb → can_replace_items.rb} +3 -3
  170. data/lib/avo/concerns/filters_session_handler.rb +1 -0
  171. data/lib/avo/concerns/has_controls.rb +37 -0
  172. data/lib/avo/concerns/has_item_type.rb +38 -0
  173. data/lib/avo/concerns/{has_fields.rb → has_items.rb} +110 -97
  174. data/lib/avo/concerns/is_resource_item.rb +24 -36
  175. data/lib/avo/concerns/is_visible.rb +15 -0
  176. data/lib/avo/concerns/visible_in_different_views.rb +126 -0
  177. data/lib/avo/configuration/branding.rb +0 -12
  178. data/lib/avo/configuration.rb +8 -45
  179. data/lib/avo/current.rb +5 -0
  180. data/lib/avo/dsl/field_parser.rb +1 -1
  181. data/lib/avo/dynamic_router.rb +6 -2
  182. data/lib/avo/engine.rb +37 -30
  183. data/lib/avo/error_manager.rb +25 -0
  184. data/lib/avo/execution_context.rb +9 -15
  185. data/lib/avo/fields/badge_field.rb +1 -1
  186. data/lib/avo/fields/base_field.rb +72 -123
  187. data/lib/avo/fields/belongs_to_field.rb +14 -25
  188. data/lib/avo/fields/concerns/handles_field_args.rb +49 -0
  189. data/lib/avo/fields/concerns/has_default.rb +1 -5
  190. data/lib/avo/fields/concerns/has_field_name.rb +22 -0
  191. data/lib/avo/fields/concerns/has_html_attributes.rb +110 -0
  192. data/lib/avo/fields/concerns/is_disabled.rb +1 -5
  193. data/lib/avo/fields/concerns/is_readonly.rb +1 -5
  194. data/lib/avo/fields/concerns/is_required.rb +5 -7
  195. data/lib/avo/fields/concerns/is_searchable.rb +13 -0
  196. data/lib/avo/fields/concerns/use_resource.rb +5 -1
  197. data/lib/avo/fields/country_field.rb +4 -0
  198. data/lib/avo/fields/date_field.rb +3 -16
  199. data/lib/avo/fields/date_time_field.rb +1 -5
  200. data/lib/avo/fields/field_manager.rb +45 -0
  201. data/lib/avo/fields/file_field.rb +0 -2
  202. data/lib/avo/fields/files_field.rb +0 -6
  203. data/lib/avo/fields/has_and_belongs_to_many_field.rb +1 -2
  204. data/lib/avo/fields/has_base_field.rb +11 -14
  205. data/lib/avo/fields/has_many_field.rb +5 -2
  206. data/lib/avo/fields/has_one_field.rb +5 -10
  207. data/lib/avo/fields/heading_field.rb +4 -1
  208. data/lib/avo/fields/hidden_field.rb +1 -1
  209. data/lib/avo/fields/id_field.rb +2 -3
  210. data/lib/avo/fields/password_field.rb +1 -1
  211. data/lib/avo/fields/preview_field.rb +14 -0
  212. data/lib/avo/fields/select_field.rb +12 -8
  213. data/lib/avo/fields/status_field.rb +4 -0
  214. data/lib/avo/filters/base_filter.rb +3 -8
  215. data/lib/avo/grid_collector.rb +7 -9
  216. data/lib/avo/html/builder.rb +5 -8
  217. data/lib/avo/item_grapher.rb +78 -0
  218. data/lib/avo/licensing/h_q.rb +3 -67
  219. data/lib/avo/licensing/license.rb +2 -2
  220. data/lib/avo/licensing/license_manager.rb +1 -1
  221. data/lib/avo/licensing/{nil_license.rb → null_license.rb} +1 -1
  222. data/lib/avo/licensing/pro_license.rb +1 -7
  223. data/lib/avo/plugin.rb +6 -0
  224. data/lib/avo/plugin_manager.rb +58 -0
  225. data/lib/avo/prefixed_test_helpers.rb +20 -0
  226. data/lib/avo/reloader.rb +3 -0
  227. data/lib/avo/resources/controls/actions_list.rb +6 -12
  228. data/lib/avo/resources/controls/attach_button.rb +15 -0
  229. data/lib/avo/resources/controls/back_button.rb +1 -1
  230. data/lib/avo/resources/controls/base_control.rb +15 -49
  231. data/lib/avo/resources/controls/create_button.rb +15 -0
  232. data/lib/avo/resources/controls/delete_button.rb +5 -1
  233. data/lib/avo/resources/controls/detach_button.rb +4 -1
  234. data/lib/avo/resources/controls/edit_button.rb +4 -1
  235. data/lib/avo/resources/controls/order_controls.rb +8 -0
  236. data/lib/avo/resources/controls/save_button.rb +13 -0
  237. data/lib/avo/resources/controls/show_button.rb +15 -0
  238. data/lib/avo/resources/items/holder.rb +76 -0
  239. data/lib/avo/resources/items/item_group.rb +48 -0
  240. data/lib/avo/resources/items/main_panel.rb +2 -0
  241. data/lib/avo/resources/items/panel.rb +2 -0
  242. data/lib/avo/resources/items/sidebar.rb +47 -0
  243. data/lib/avo/resources/items/tab.rb +60 -0
  244. data/lib/avo/resources/items/tab_group.rb +68 -0
  245. data/lib/avo/resources/resource_manager.rb +181 -0
  246. data/lib/avo/services/authorization_service.rb +11 -110
  247. data/lib/avo/services/debug_service.rb +92 -0
  248. data/lib/avo/services/telemetry_service.rb +84 -0
  249. data/lib/avo/test_helpers.rb +362 -0
  250. data/lib/avo/tools/tool_manager.rb +30 -0
  251. data/lib/avo/version.rb +1 -1
  252. data/lib/avo.rb +7 -0
  253. data/lib/generators/avo/eject_generator.rb +0 -1
  254. data/lib/generators/avo/install_generator.rb +1 -11
  255. data/lib/generators/avo/resource_generator.rb +5 -23
  256. data/lib/generators/avo/scope_generator.rb +15 -0
  257. data/lib/generators/avo/tailwindcss/install_generator.rb +1 -18
  258. data/lib/generators/avo/templates/action.tt +1 -1
  259. data/lib/generators/avo/templates/cards/chartkick_card.tt +1 -1
  260. data/lib/generators/avo/templates/cards/chartkick_card_sample.tt +1 -1
  261. data/lib/generators/avo/templates/cards/metric_card.tt +1 -1
  262. data/lib/generators/avo/templates/cards/metric_card_sample.tt +1 -1
  263. data/lib/generators/avo/templates/cards/partial_card.tt +1 -1
  264. data/lib/generators/avo/templates/cards/partial_card_sample.tt +1 -1
  265. data/lib/generators/avo/templates/dashboards/dashboard.tt +1 -1
  266. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +1 -1
  267. data/lib/generators/avo/templates/filters/boolean_filter.tt +1 -1
  268. data/lib/generators/avo/templates/filters/multiple_select_filter.tt +1 -1
  269. data/lib/generators/avo/templates/filters/select_filter.tt +1 -1
  270. data/lib/generators/avo/templates/filters/text_filter.tt +1 -1
  271. data/lib/generators/avo/templates/initializer/avo.tt +1 -11
  272. data/lib/generators/avo/templates/locales/avo.ar.yml +5 -5
  273. data/lib/generators/avo/templates/locales/avo.en.yml +4 -5
  274. data/lib/generators/avo/templates/locales/avo.fr.yml +1 -2
  275. data/lib/generators/avo/templates/locales/avo.nb.yml +1 -2
  276. data/lib/generators/avo/templates/locales/avo.nn.yml +1 -2
  277. data/lib/generators/avo/templates/locales/avo.pt-BR.yml +1 -2
  278. data/lib/generators/avo/templates/locales/avo.pt.yml +1 -2
  279. data/lib/generators/avo/templates/locales/avo.ro.yml +6 -7
  280. data/lib/generators/avo/templates/locales/avo.tr.yml +1 -2
  281. data/lib/generators/avo/templates/resource/resource.tt +1 -1
  282. data/lib/generators/avo/templates/resource_tools/partial.tt +4 -4
  283. data/lib/generators/avo/templates/resource_tools/resource_tool.tt +1 -1
  284. data/lib/generators/avo/templates/scope.tt +6 -0
  285. data/lib/generators/avo/templates/standalone_action.tt +1 -1
  286. data/lib/generators/avo/templates/tailwindcss/Procfile.dev +1 -1
  287. data/lib/generators/avo/templates/tool/view.tt +2 -2
  288. data/lib/tasks/avo_tasks.rake +22 -0
  289. metadata +81 -159
  290. data/app/assets/stylesheets/css/tags.css +0 -32
  291. data/app/assets/svgs/map-empty-state.svg +0 -35
  292. data/app/assets/svgs/map-view-type.svg +0 -3
  293. data/app/components/avo/card_component.html.erb +0 -46
  294. data/app/components/avo/card_component.rb +0 -25
  295. data/app/components/avo/dashboards/divider_component.html.erb +0 -9
  296. data/app/components/avo/dashboards/divider_component.rb +0 -19
  297. data/app/components/avo/fields/area_field/edit_component.html.erb +0 -7
  298. data/app/components/avo/fields/area_field/edit_component.rb +0 -4
  299. data/app/components/avo/fields/area_field/show_component.html.erb +0 -8
  300. data/app/components/avo/fields/area_field/show_component.rb +0 -4
  301. data/app/components/avo/fields/belongs_to_field/autocomplete_component.html.erb +0 -47
  302. data/app/components/avo/fields/belongs_to_field/autocomplete_component.rb +0 -95
  303. data/app/components/avo/fields/common/files/controls_component.html.erb +0 -29
  304. data/app/components/avo/fields/common/files/controls_component.rb +0 -19
  305. data/app/components/avo/fields/common/files/list_viewer_component.html.erb +0 -20
  306. data/app/components/avo/fields/common/files/list_viewer_component.rb +0 -41
  307. data/app/components/avo/fields/common/files/view_type/grid_item_component.html.erb +0 -27
  308. data/app/components/avo/fields/common/files/view_type/grid_item_component.rb +0 -52
  309. data/app/components/avo/fields/common/files/view_type/list_item_component.html.erb +0 -22
  310. data/app/components/avo/fields/common/files/view_type/list_item_component.rb +0 -15
  311. data/app/components/avo/fields/location_field/edit_component.html.erb +0 -22
  312. data/app/components/avo/fields/location_field/edit_component.rb +0 -4
  313. data/app/components/avo/fields/location_field/show_component.html.erb +0 -7
  314. data/app/components/avo/fields/location_field/show_component.rb +0 -4
  315. data/app/components/avo/fields/tags_field/edit_component.html.erb +0 -35
  316. data/app/components/avo/fields/tags_field/edit_component.rb +0 -4
  317. data/app/components/avo/fields/tags_field/index_component.html.erb +0 -10
  318. data/app/components/avo/fields/tags_field/index_component.rb +0 -9
  319. data/app/components/avo/fields/tags_field/show_component.html.erb +0 -7
  320. data/app/components/avo/fields/tags_field/show_component.rb +0 -5
  321. data/app/components/avo/fields/tags_field/tag_component.html.erb +0 -9
  322. data/app/components/avo/fields/tags_field/tag_component.rb +0 -11
  323. data/app/components/avo/index/ordering/base_component.rb +0 -9
  324. data/app/components/avo/index/ordering/button_component.html.erb +0 -11
  325. data/app/components/avo/index/ordering/button_component.rb +0 -23
  326. data/app/components/avo/index/ordering/buttons_component.html.erb +0 -32
  327. data/app/components/avo/index/ordering/buttons_component.rb +0 -47
  328. data/app/components/avo/index/resource_map_component.html.erb +0 -16
  329. data/app/components/avo/index/resource_map_component.rb +0 -109
  330. data/app/components/avo/row_component.html.erb +0 -3
  331. data/app/components/avo/row_component.rb +0 -12
  332. data/app/components/avo/sidebar/item_switcher_component.html.erb +0 -16
  333. data/app/components/avo/sidebar/item_switcher_component.rb +0 -15
  334. data/app/controllers/avo/dashboards/cards_controller.rb +0 -37
  335. data/app/controllers/avo/dashboards_controller.rb +0 -22
  336. data/app/controllers/avo/reorder_controller.rb +0 -25
  337. data/app/javascript/js/controllers/base_controller.js +0 -22
  338. data/app/javascript/js/controllers/fields/reload_belongs_to_field_controller.js +0 -51
  339. data/app/javascript/js/controllers/fields/tags_field_controller.js +0 -127
  340. data/app/javascript/js/controllers/toggle_panel_controller.js +0 -18
  341. data/app/views/avo/base/_new_via_belongs_to.html.erb +0 -12
  342. data/app/views/avo/base/close_modal_and_reload_field.turbo_stream.erb +0 -8
  343. data/app/views/avo/base/create_fail_action.turbo_stream.erb +0 -13
  344. data/app/views/avo/dashboards/cards/_chartkick_card.html.erb +0 -3
  345. data/app/views/avo/dashboards/cards/_metric_card.html.erb +0 -5
  346. data/app/views/avo/dashboards/cards/chartkick_missing.html.erb +0 -14
  347. data/app/views/avo/dashboards/cards/show.html.erb +0 -3
  348. data/app/views/avo/dashboards/show.html.erb +0 -38
  349. data/app/views/avo/partials/_flash_alerts.turbo_stream.erb +0 -3
  350. data/app/views/avo/partials/_global_search.html.erb +0 -19
  351. data/app/views/avo/partials/_profile_menu_extra.html.erb +0 -2
  352. data/app/views/avo/sidebar/_license_warnings.html.erb +0 -6
  353. data/lib/avo/base_card.rb +0 -161
  354. data/lib/avo/concerns/fetches_things.rb +0 -150
  355. data/lib/avo/concerns/handles_field_args.rb +0 -47
  356. data/lib/avo/concerns/has_editable_controls.rb +0 -34
  357. data/lib/avo/concerns/has_html_attributes.rb +0 -108
  358. data/lib/avo/concerns/pagination.rb +0 -53
  359. data/lib/avo/concerns/policy_helpers.rb +0 -31
  360. data/lib/avo/concerns/visible_in_dashboard.rb +0 -31
  361. data/lib/avo/concerns/visible_items.rb +0 -51
  362. data/lib/avo/dashboards/base_dashboard.rb +0 -89
  363. data/lib/avo/dashboards/base_divider.rb +0 -35
  364. data/lib/avo/dashboards/chartkick_card.rb +0 -77
  365. data/lib/avo/dashboards/dashboard_card.rb +0 -6
  366. data/lib/avo/dashboards/metric_card.rb +0 -9
  367. data/lib/avo/dashboards/partial_card.rb +0 -7
  368. data/lib/avo/fields/area_field.rb +0 -39
  369. data/lib/avo/fields/concerns/file_authorization.rb +0 -31
  370. data/lib/avo/fields/field_extensions/has_field_name.rb +0 -19
  371. data/lib/avo/fields/field_extensions/visible_in_different_views.rb +0 -111
  372. data/lib/avo/fields/location_field.rb +0 -86
  373. data/lib/avo/fields/tags_field.rb +0 -102
  374. data/lib/avo/hosts/association_scope_host.rb +0 -8
  375. data/lib/avo/hosts/base_host.rb +0 -25
  376. data/lib/avo/hosts/card_visibility.rb +0 -20
  377. data/lib/avo/hosts/dashboard_card.rb +0 -22
  378. data/lib/avo/hosts/dashboard_visibility.rb +0 -19
  379. data/lib/avo/hosts/ordering.rb +0 -22
  380. data/lib/avo/hosts/record_host.rb +0 -7
  381. data/lib/avo/hosts/resource_record_host.rb +0 -7
  382. data/lib/avo/hosts/resource_view_record_host.rb +0 -7
  383. data/lib/avo/hosts/search_scope_host.rb +0 -7
  384. data/lib/avo/hosts/view_record_host.rb +0 -7
  385. data/lib/avo/hosts/visibility_host.rb +0 -12
  386. data/lib/avo/items_holder.rb +0 -96
  387. data/lib/avo/main_panel.rb +0 -3
  388. data/lib/avo/menu/base_item.rb +0 -25
  389. data/lib/avo/menu/builder.rb +0 -82
  390. data/lib/avo/menu/dashboard.rb +0 -22
  391. data/lib/avo/menu/group.rb +0 -2
  392. data/lib/avo/menu/link.rb +0 -6
  393. data/lib/avo/menu/menu.rb +0 -2
  394. data/lib/avo/menu/resource.rb +0 -22
  395. data/lib/avo/menu/section.rb +0 -2
  396. data/lib/avo/panel.rb +0 -24
  397. data/lib/avo/panel_builder.rb +0 -25
  398. data/lib/avo/resources/controls/action.rb +0 -38
  399. data/lib/avo/resources/controls/execution_context.rb +0 -58
  400. data/lib/avo/resources/controls/items_holder.rb +0 -19
  401. data/lib/avo/resources/controls/link_to.rb +0 -27
  402. data/lib/avo/row.rb +0 -26
  403. data/lib/avo/row_builder.rb +0 -24
  404. data/lib/avo/services/authorization_clients/nil_client.rb +0 -37
  405. data/lib/avo/services/authorization_clients/pundit_client.rb +0 -51
  406. data/lib/avo/sidebar.rb +0 -30
  407. data/lib/avo/sidebar_builder.rb +0 -24
  408. data/lib/avo/tab.rb +0 -72
  409. data/lib/avo/tab_builder.rb +0 -25
  410. data/lib/avo/tab_group.rb +0 -42
  411. data/lib/avo/tab_group_builder.rb +0 -43
  412. data/lib/avo/tools_manager.rb +0 -11
  413. data/lib/generators/avo/templates/locales/avo.es.yml +0 -126
  414. data/public/avo-assets/avo.base.js +0 -1037
  415. data/public/avo-assets/avo.base.js.map +0 -7
@@ -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
@@ -4,7 +4,7 @@ module Avo
4
4
  def initialize(id, **args, &block)
5
5
  super(id, **args, &block)
6
6
 
7
- only_on [:edit, :new]
7
+ only_on :forms
8
8
  end
9
9
  end
10
10
  end
@@ -5,13 +5,12 @@ module Avo
5
5
 
6
6
  def initialize(id, **args, &block)
7
7
  args[:readonly] = true
8
+ args[:sortable] = true
8
9
 
9
- hide_on [:edit, :new]
10
+ hide_on :forms
10
11
 
11
12
  super(id, **args, &block)
12
13
 
13
- add_boolean_prop args, :sortable, true
14
-
15
14
  @link_to_resource = args[:link_to_resource].present? ? args[:link_to_resource] : false
16
15
  end
17
16
  end
@@ -6,7 +6,7 @@ module Avo
6
6
 
7
7
  super(id, **args, &block)
8
8
 
9
- hide_on [:index, :show]
9
+ hide_on :index, :show
10
10
  end
11
11
  end
12
12
  end
@@ -0,0 +1,14 @@
1
+ module Avo
2
+ module Fields
3
+ class PreviewField < BaseField
4
+ def table_header_label
5
+ # If the user gives us a name, use that, if not, leave it blank
6
+ if @args[:name].present?
7
+ @args[:name]
8
+ else
9
+ ""
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
@@ -14,11 +14,14 @@ module Avo
14
14
 
15
15
  @options_from_args = if args[:options].is_a? Hash
16
16
  ActiveSupport::HashWithIndifferentAccess.new args[:options]
17
+ elsif args[:enum].present?
18
+ args[:enum]
17
19
  else
18
20
  args[:options]
19
21
  end
20
- @enum = args[:enum].present? ? args[:enum] : nil
21
- @display_value = args[:display_value].present? ? args[:display_value] : false
22
+
23
+ @enum = args[:enum]
24
+ @display_value = args[:display_value] || false
22
25
  end
23
26
 
24
27
  def options_for_select
@@ -56,13 +59,14 @@ module Avo
56
59
 
57
60
  private
58
61
 
59
- # Cache options as options given on block or as options received from arguments
60
62
  def options
61
- if options_from_args.respond_to? :call
62
- options_from_args.call model: model, resource: resource, view: view, field: self
63
- else
64
- options_from_args
65
- end
63
+ Avo::ExecutionContext.new(
64
+ target: options_from_args,
65
+ record: record,
66
+ resource: resource,
67
+ view: view,
68
+ field: self
69
+ ).handle
66
70
  end
67
71
  end
68
72
  end
@@ -17,6 +17,10 @@ module Avo
17
17
 
18
18
  status
19
19
  end
20
+
21
+ def options_for_filter
22
+ [@failed_when, @loading_when].flatten
23
+ end
20
24
  end
21
25
  end
22
26
  end