avo 1.4.0.pre.1 → 1.4.4.pre.1

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 (347) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +2 -0
  3. data/Gemfile.lock +10 -4
  4. data/README.md +5 -4
  5. data/app/components/avo/fields/badge_field/index_component.html.erb +3 -0
  6. data/app/components/avo/fields/badge_field/index_component.rb +4 -0
  7. data/app/components/avo/fields/badge_field/show_component.html.erb +3 -0
  8. data/app/components/avo/fields/badge_field/show_component.rb +4 -0
  9. data/app/components/avo/{edit/fields/belongs_to_field_component.html.erb → fields/belongs_to_field/edit_component.html.erb} +0 -0
  10. data/app/components/avo/{edit/fields/belongs_to_field_component.rb → fields/belongs_to_field/edit_component.rb} +1 -1
  11. data/app/components/avo/{index/fields/belongs_to_field_component.html.erb → fields/belongs_to_field/index_component.html.erb} +0 -0
  12. data/app/components/avo/fields/belongs_to_field/index_component.rb +4 -0
  13. data/app/components/avo/{show/fields/belongs_to_field_component.html.erb → fields/belongs_to_field/show_component.html.erb} +0 -0
  14. data/app/components/avo/fields/belongs_to_field/show_component.rb +4 -0
  15. data/app/components/avo/{edit/fields/boolean_field_component.html.erb → fields/boolean_field/edit_component.html.erb} +0 -0
  16. data/app/components/avo/fields/boolean_field/edit_component.rb +4 -0
  17. data/app/components/avo/fields/boolean_field/index_component.html.erb +3 -0
  18. data/app/components/avo/fields/boolean_field/index_component.rb +4 -0
  19. data/app/components/avo/{show/fields/boolean_field_component.html.erb → fields/boolean_field/show_component.html.erb} +1 -1
  20. data/app/components/avo/fields/boolean_field/show_component.rb +4 -0
  21. data/app/components/avo/{edit/fields/boolean_group_field_component.html.erb → fields/boolean_group_field/edit_component.html.erb} +0 -0
  22. data/app/components/avo/fields/boolean_group_field/edit_component.rb +4 -0
  23. data/app/components/avo/fields/boolean_group_field/index_component.html.erb +3 -0
  24. data/app/components/avo/fields/boolean_group_field/index_component.rb +4 -0
  25. data/app/components/avo/fields/boolean_group_field/show_component.html.erb +3 -0
  26. data/app/components/avo/fields/boolean_group_field/show_component.rb +4 -0
  27. data/app/components/avo/{edit/fields/code_field_component.html.erb → fields/code_field/edit_component.html.erb} +0 -0
  28. data/app/components/avo/fields/code_field/edit_component.rb +4 -0
  29. data/app/components/avo/{show/fields/code_field_component.html.erb → fields/code_field/show_component.html.erb} +0 -0
  30. data/app/components/avo/fields/code_field/show_component.rb +4 -0
  31. data/app/components/avo/{common → fields/common}/badge_viewer_component.html.erb +0 -0
  32. data/app/components/avo/{common → fields/common}/badge_viewer_component.rb +1 -1
  33. data/app/components/avo/{common → fields/common}/boolean_check_component.html.erb +0 -0
  34. data/app/components/avo/{common → fields/common}/boolean_check_component.rb +1 -1
  35. data/app/components/avo/{common → fields/common}/boolean_group_component.html.erb +1 -1
  36. data/app/components/avo/{common → fields/common}/boolean_group_component.rb +1 -1
  37. data/app/components/avo/fields/common/files_list_viewer_component.html.erb +5 -0
  38. data/app/components/avo/{common → fields/common}/files_list_viewer_component.rb +1 -1
  39. data/app/components/avo/{common → fields/common}/gravatar_viewer_component.html.erb +0 -0
  40. data/app/components/avo/{common → fields/common}/gravatar_viewer_component.rb +1 -1
  41. data/app/components/avo/{common → fields/common}/heading_component.html.erb +0 -0
  42. data/app/components/avo/{common → fields/common}/heading_component.rb +1 -1
  43. data/app/components/avo/{common → fields/common}/key_value_component.html.erb +0 -0
  44. data/app/components/avo/{common → fields/common}/key_value_component.rb +1 -1
  45. data/app/components/avo/{common → fields/common}/multiple_file_viewer_component.html.erb +0 -0
  46. data/app/components/avo/{common → fields/common}/multiple_file_viewer_component.rb +1 -1
  47. data/app/components/avo/{common → fields/common}/single_file_viewer_component.html.erb +0 -0
  48. data/app/components/avo/{common → fields/common}/single_file_viewer_component.rb +1 -1
  49. data/app/components/avo/fields/common/status_viewer_component.html.erb +18 -0
  50. data/app/components/avo/{common → fields/common}/status_viewer_component.rb +1 -1
  51. data/app/components/avo/{edit/fields/country_field_component.html.erb → fields/country_field/edit_component.html.erb} +0 -0
  52. data/app/components/avo/fields/country_field/edit_component.rb +4 -0
  53. data/app/components/avo/{index/fields/country_field_component.html.erb → fields/country_field/index_component.html.erb} +0 -0
  54. data/app/components/avo/fields/country_field/index_component.rb +4 -0
  55. data/app/components/avo/{show/fields/country_field_component.html.erb → fields/country_field/show_component.html.erb} +0 -0
  56. data/app/components/avo/fields/country_field/show_component.rb +4 -0
  57. data/app/components/avo/{edit/fields/date_field_component.html.erb → fields/date_field/edit_component.html.erb} +0 -0
  58. data/app/components/avo/fields/date_field/edit_component.rb +4 -0
  59. data/app/components/avo/{index/fields/date_field_component.html.erb → fields/date_field/index_component.html.erb} +0 -0
  60. data/app/components/avo/fields/date_field/index_component.rb +4 -0
  61. data/app/components/avo/{show/fields/date_field_component.html.erb → fields/date_field/show_component.html.erb} +0 -0
  62. data/app/components/avo/fields/date_field/show_component.rb +4 -0
  63. data/app/components/avo/{edit/fields/date_time_field_component.html.erb → fields/date_time_field/edit_component.html.erb} +0 -0
  64. data/app/components/avo/fields/date_time_field/edit_component.rb +4 -0
  65. data/app/components/avo/{index/fields/date_time_field_component.html.erb → fields/date_time_field/index_component.html.erb} +0 -0
  66. data/app/components/avo/fields/date_time_field/index_component.rb +4 -0
  67. data/app/components/avo/{show/fields/date_time_field_component.html.erb → fields/date_time_field/show_component.html.erb} +0 -0
  68. data/app/components/avo/fields/date_time_field/show_component.rb +4 -0
  69. data/app/components/avo/{edit/fields/field_component.rb → fields/edit_component.rb} +1 -1
  70. data/app/components/avo/{edit/fields/external_image_field_component.html.erb → fields/external_image_field/edit_component.html.erb} +0 -0
  71. data/app/components/avo/fields/external_image_field/edit_component.rb +4 -0
  72. data/app/components/avo/{index/fields/external_image_field_component.html.erb → fields/external_image_field/index_component.html.erb} +0 -0
  73. data/app/components/avo/fields/external_image_field/index_component.rb +4 -0
  74. data/app/components/avo/{show/fields/external_image_field_component.html.erb → fields/external_image_field/show_component.html.erb} +0 -0
  75. data/app/components/avo/fields/external_image_field/show_component.rb +4 -0
  76. data/app/components/avo/{edit/fields/file_field_component.html.erb → fields/file_field/edit_component.html.erb} +1 -1
  77. data/app/components/avo/fields/file_field/edit_component.rb +4 -0
  78. data/app/components/avo/{index/fields/file_field_component.html.erb → fields/file_field/index_component.html.erb} +1 -1
  79. data/app/components/avo/fields/file_field/index_component.rb +4 -0
  80. data/app/components/avo/fields/file_field/show_component.html.erb +3 -0
  81. data/app/components/avo/fields/file_field/show_component.rb +4 -0
  82. data/app/components/avo/{edit/fields/files_field_component.html.erb → fields/files_field/edit_component.html.erb} +1 -1
  83. data/app/components/avo/fields/files_field/edit_component.rb +4 -0
  84. data/app/components/avo/{index/fields/files_field_component.html.erb → fields/files_field/index_component.html.erb} +0 -0
  85. data/app/components/avo/fields/files_field/index_component.rb +4 -0
  86. data/app/components/avo/fields/files_field/show_component.html.erb +3 -0
  87. data/app/components/avo/fields/files_field/show_component.rb +4 -0
  88. data/app/components/avo/{index/fields/gravatar_field_component.html.erb → fields/gravatar_field/index_component.html.erb} +2 -2
  89. data/app/components/avo/fields/gravatar_field/index_component.rb +4 -0
  90. data/app/components/avo/{show/fields/gravatar_field_component.html.erb → fields/gravatar_field/show_component.html.erb} +1 -1
  91. data/app/components/avo/fields/gravatar_field/show_component.rb +4 -0
  92. data/app/components/avo/{show/fields/has_many_field_component.html.erb → fields/has_many_field/show_component.html.erb} +0 -0
  93. data/app/components/avo/fields/has_many_field/show_component.rb +4 -0
  94. data/app/components/avo/{index/fields/has_one_field_component.html.erb → fields/has_one_field/index_component.html.erb} +0 -0
  95. data/app/components/avo/fields/has_one_field/index_component.rb +4 -0
  96. data/app/components/avo/{show/fields/has_one_field_component.html.erb → fields/has_one_field/show_component.html.erb} +0 -0
  97. data/app/components/avo/fields/has_one_field/show_component.rb +5 -0
  98. data/app/components/avo/{show/fields/heading_field_component.html.erb → fields/heading_field/edit_component.html.erb} +1 -1
  99. data/app/components/avo/fields/heading_field/edit_component.rb +4 -0
  100. data/app/components/avo/{edit/fields/heading_field_component.html.erb → fields/heading_field/show_component.html.erb} +1 -1
  101. data/app/components/avo/fields/heading_field/show_component.rb +4 -0
  102. data/app/components/avo/{edit/fields/hidden_field_component.html.erb → fields/hidden_field/edit_component.html.erb} +0 -0
  103. data/app/components/avo/fields/hidden_field/edit_component.rb +4 -0
  104. data/app/components/avo/{edit/fields/id_field_component.html.erb → fields/id_field/edit_component.html.erb} +0 -0
  105. data/app/components/avo/fields/id_field/edit_component.rb +4 -0
  106. data/app/components/avo/fields/id_field/index_component.html.erb +3 -0
  107. data/app/components/avo/fields/id_field/index_component.rb +4 -0
  108. data/app/components/avo/{show/fields/id_field_component.html.erb → fields/id_field/show_component.html.erb} +0 -0
  109. data/app/components/avo/fields/id_field/show_component.rb +4 -0
  110. data/app/components/avo/fields/index_component.rb +20 -0
  111. data/app/components/avo/{edit/fields/key_value_field_component.html.erb → fields/key_value_field/edit_component.html.erb} +1 -1
  112. data/app/components/avo/fields/key_value_field/edit_component.rb +4 -0
  113. data/app/components/avo/{show/fields/key_value_field_component.html.erb → fields/key_value_field/show_component.html.erb} +1 -1
  114. data/app/components/avo/fields/key_value_field/show_component.rb +4 -0
  115. data/app/components/avo/{edit/fields/markdown_field_component.html.erb → fields/markdown_field/edit_component.html.erb} +0 -0
  116. data/app/components/avo/fields/markdown_field/edit_component.rb +4 -0
  117. data/app/components/avo/{show/fields/markdown_field_component.html.erb → fields/markdown_field/show_component.html.erb} +1 -1
  118. data/app/components/avo/fields/markdown_field/show_component.rb +4 -0
  119. data/app/components/avo/{edit/fields/number_field_component.html.erb → fields/number_field/edit_component.html.erb} +3 -3
  120. data/app/components/avo/fields/number_field/edit_component.rb +4 -0
  121. data/app/components/avo/{index/fields/number_field_component.html.erb → fields/number_field/index_component.html.erb} +0 -0
  122. data/app/components/avo/fields/number_field/index_component.rb +4 -0
  123. data/app/components/avo/{show/fields/number_field_component.html.erb → fields/number_field/show_component.html.erb} +0 -0
  124. data/app/components/avo/fields/number_field/show_component.rb +4 -0
  125. data/app/components/avo/{edit/fields/password_field_component.html.erb → fields/password_field/edit_component.html.erb} +0 -0
  126. data/app/components/avo/fields/password_field/edit_component.rb +4 -0
  127. data/app/components/avo/fields/progress_bar_field/edit_component.html.erb +26 -0
  128. data/app/components/avo/fields/progress_bar_field/edit_component.rb +4 -0
  129. data/app/components/avo/fields/progress_bar_field/index_component.html.erb +8 -0
  130. data/app/components/avo/fields/progress_bar_field/index_component.rb +4 -0
  131. data/app/components/avo/fields/progress_bar_field/show_component.html.erb +8 -0
  132. data/app/components/avo/fields/progress_bar_field/show_component.rb +4 -0
  133. data/app/components/avo/{edit/fields/select_field_component.html.erb → fields/select_field/edit_component.html.erb} +0 -0
  134. data/app/components/avo/fields/select_field/edit_component.rb +4 -0
  135. data/app/components/avo/{index/fields/select_field_component.html.erb → fields/select_field/index_component.html.erb} +0 -0
  136. data/app/components/avo/fields/select_field/index_component.rb +4 -0
  137. data/app/components/avo/{show/fields/select_field_component.html.erb → fields/select_field/show_component.html.erb} +0 -0
  138. data/app/components/avo/fields/select_field/show_component.rb +4 -0
  139. data/app/components/avo/{show/fields/field_component.rb → fields/show_component.rb} +1 -1
  140. data/app/components/avo/{edit/fields/status_field_component.html.erb → fields/status_field/edit_component.html.erb} +0 -0
  141. data/app/components/avo/fields/status_field/edit_component.rb +4 -0
  142. data/app/components/avo/fields/status_field/index_component.html.erb +3 -0
  143. data/app/components/avo/fields/status_field/index_component.rb +4 -0
  144. data/app/components/avo/fields/status_field/show_component.html.erb +3 -0
  145. data/app/components/avo/fields/status_field/show_component.rb +4 -0
  146. data/app/components/avo/{edit/fields/text_field_component.html.erb → fields/text_field/edit_component.html.erb} +0 -0
  147. data/app/components/avo/fields/text_field/edit_component.rb +4 -0
  148. data/app/components/avo/fields/text_field/index_component.html.erb +3 -0
  149. data/app/components/avo/fields/text_field/index_component.rb +4 -0
  150. data/app/components/avo/{show/fields/text_field_component.html.erb → fields/text_field/show_component.html.erb} +0 -0
  151. data/app/components/avo/fields/text_field/show_component.rb +4 -0
  152. data/app/components/avo/{edit/fields/textarea_field_component.html.erb → fields/textarea_field/edit_component.html.erb} +1 -1
  153. data/app/components/avo/fields/textarea_field/edit_component.rb +4 -0
  154. data/app/components/avo/{show/fields/textarea_field_component.html.erb → fields/textarea_field/show_component.html.erb} +0 -0
  155. data/app/components/avo/fields/textarea_field/show_component.rb +4 -0
  156. data/app/components/avo/{edit/fields/trix_field_component.html.erb → fields/trix_field/edit_component.html.erb} +1 -2
  157. data/app/components/avo/fields/trix_field/edit_component.rb +4 -0
  158. data/app/components/avo/{show/fields/trix_field_component.html.erb → fields/trix_field/show_component.html.erb} +0 -0
  159. data/app/components/avo/fields/trix_field/show_component.rb +4 -0
  160. data/app/components/avo/index/resource_controls_component.html.erb +2 -3
  161. data/app/components/avo/index/table_row_component.html.erb +1 -1
  162. data/app/components/avo/panel_component.html.erb +1 -1
  163. data/app/components/avo/panel_component.rb +4 -4
  164. data/app/components/avo/views/resource_edit_component.html.erb +2 -2
  165. data/app/components/avo/views/resource_index_component.html.erb +6 -6
  166. data/app/components/avo/views/resource_new_component.html.erb +2 -2
  167. data/app/components/avo/views/resource_show_component.html.erb +5 -5
  168. data/app/controllers/avo/application_controller.rb +14 -7
  169. data/app/controllers/avo/base_controller.rb +26 -2
  170. data/app/controllers/avo/home_controller.rb +1 -1
  171. data/app/controllers/avo/relations_controller.rb +1 -1
  172. data/app/controllers/avo/search_controller.rb +50 -35
  173. data/app/helpers/avo/resources_helper.rb +0 -44
  174. data/app/packs/entrypoints/application.css +3 -1
  175. data/app/packs/entrypoints/application.js +3 -0
  176. data/app/packs/js/controllers/fields/key_value_controller.js +0 -1
  177. data/app/packs/js/controllers/search_controller.js +120 -0
  178. data/app/packs/js/helpers/debounce_promise.js +13 -0
  179. data/app/packs/stylesheets/components/progress.css +13 -0
  180. data/app/packs/stylesheets/components/status.css +31 -20
  181. data/app/packs/stylesheets/search.css +79 -0
  182. data/app/packs/svgs/check-circle-sm.svg +3 -0
  183. data/app/packs/svgs/x-circle-sm.svg +3 -0
  184. data/app/views/avo/actions/show.html.erb +1 -1
  185. data/app/views/avo/partials/_global_search.html.erb +17 -0
  186. data/app/views/avo/partials/_profile_dropdown.html.erb +19 -0
  187. data/app/views/avo/partials/_resource_search.html.erb +10 -0
  188. data/app/views/layouts/avo/application.html.erb +7 -6
  189. data/avo.gemspec +2 -1
  190. data/config/routes.rb +2 -6
  191. data/db/factories.rb +3 -0
  192. data/db/migrate/20210421064037_add_color_to_teams.rb +5 -0
  193. data/db/migrate/20210423075924_add_progress_to_projects.rb +5 -0
  194. data/lib/avo/app.rb +12 -21
  195. data/lib/avo/base_resource.rb +91 -7
  196. data/lib/avo/configuration.rb +3 -1
  197. data/lib/avo/engine.rb +1 -0
  198. data/lib/avo/fields/badge_field.rb +4 -6
  199. data/lib/avo/fields/base_field.rb +68 -83
  200. data/lib/avo/fields/belongs_to_field.rb +11 -11
  201. data/lib/avo/fields/boolean_field.rb +2 -7
  202. data/lib/avo/fields/boolean_group_field.rb +2 -7
  203. data/lib/avo/fields/code_field.rb +3 -7
  204. data/lib/avo/fields/country_field.rb +3 -6
  205. data/lib/avo/fields/currency_field.rb +4 -13
  206. data/lib/avo/fields/date_field.rb +2 -8
  207. data/lib/avo/fields/date_time_field.rb +2 -3
  208. data/lib/avo/fields/external_image_field.rb +3 -7
  209. data/lib/avo/fields/file_field.rb +8 -8
  210. data/lib/avo/fields/files_field.rb +6 -8
  211. data/lib/avo/fields/gravatar_field.rb +6 -9
  212. data/lib/avo/fields/has_and_belongs_to_many_field.rb +6 -7
  213. data/lib/avo/fields/has_many_field.rb +3 -9
  214. data/lib/avo/fields/has_one_field.rb +3 -8
  215. data/lib/avo/fields/heading_field.rb +10 -8
  216. data/lib/avo/fields/hidden_field.rb +2 -6
  217. data/lib/avo/fields/id_field.rb +5 -17
  218. data/lib/avo/fields/key_value_field.rb +4 -6
  219. data/lib/avo/fields/markdown_field.rb +3 -5
  220. data/lib/avo/fields/number_field.rb +8 -11
  221. data/lib/avo/fields/password_field.rb +2 -6
  222. data/lib/avo/fields/progress_bar_field.rb +19 -0
  223. data/lib/avo/fields/select_field.rb +13 -12
  224. data/lib/avo/fields/status_field.rb +2 -6
  225. data/lib/avo/fields/text_field.rb +3 -6
  226. data/lib/avo/fields/textarea_field.rb +4 -7
  227. data/lib/avo/fields/trix_field.rb +5 -9
  228. data/lib/avo/fields_collector.rb +47 -11
  229. data/lib/avo/licensing/license.rb +10 -0
  230. data/lib/avo/licensing/pro_license.rb +4 -1
  231. data/lib/avo/services/authorization_service.rb +1 -1
  232. data/lib/avo/version.rb +1 -1
  233. data/lib/generators/avo/eject_generator.rb +1 -0
  234. data/lib/generators/avo/field_generator.rb +17 -0
  235. data/lib/generators/avo/filter_generator.rb +1 -1
  236. data/lib/generators/avo/templates/field/%singular_name%_field.rb.tt +5 -0
  237. data/lib/generators/avo/templates/field/components/edit_component.html.erb.tt +6 -0
  238. data/lib/generators/avo/templates/field/components/edit_component.rb.tt +4 -0
  239. data/lib/generators/avo/templates/field/components/index_component.html.erb.tt +3 -0
  240. data/lib/generators/avo/templates/field/components/index_component.rb.tt +4 -0
  241. data/lib/generators/avo/templates/field/components/show_component.html.erb.tt +3 -0
  242. data/lib/generators/avo/templates/field/components/show_component.rb.tt +4 -0
  243. data/lib/generators/avo/templates/initializer/avo.tt +1 -0
  244. data/lib/generators/avo/templates/resource/resource.tt +3 -0
  245. data/lib/generators/avo/templates/tool/view.tt +1 -1
  246. data/public/avo-packs/css/{application-5bdca030.css → application-d69fe930.css} +303 -50
  247. data/public/avo-packs/css/application-d69fe930.css.br +0 -0
  248. data/public/avo-packs/css/application-d69fe930.css.gz +0 -0
  249. data/public/avo-packs/css/application-d69fe930.css.map +1 -0
  250. data/public/avo-packs/css/application-d69fe930.css.map.br +0 -0
  251. data/public/avo-packs/css/application-d69fe930.css.map.gz +0 -0
  252. data/public/avo-packs/js/application-7b3d507875f4bc1f6677.js +26 -0
  253. data/public/avo-packs/js/{application-16a456a2b7cb56b01153.js.LICENSE.txt → application-7b3d507875f4bc1f6677.js.LICENSE.txt} +0 -0
  254. data/public/avo-packs/js/application-7b3d507875f4bc1f6677.js.br +0 -0
  255. data/public/avo-packs/js/application-7b3d507875f4bc1f6677.js.gz +0 -0
  256. data/public/avo-packs/js/{application-16a456a2b7cb56b01153.js.map → application-7b3d507875f4bc1f6677.js.map} +1 -1
  257. data/public/avo-packs/js/application-7b3d507875f4bc1f6677.js.map.br +0 -0
  258. data/public/avo-packs/js/application-7b3d507875f4bc1f6677.js.map.gz +0 -0
  259. data/public/avo-packs/manifest.json +15 -15
  260. metadata +206 -173
  261. data/app/components/avo/common/files_list_viewer_component.html.erb +0 -5
  262. data/app/components/avo/common/status_viewer_component.html.erb +0 -10
  263. data/app/components/avo/edit/fields/boolean_field_component.rb +0 -4
  264. data/app/components/avo/edit/fields/boolean_group_field_component.rb +0 -4
  265. data/app/components/avo/edit/fields/code_field_component.rb +0 -4
  266. data/app/components/avo/edit/fields/country_field_component.rb +0 -4
  267. data/app/components/avo/edit/fields/date_field_component.rb +0 -4
  268. data/app/components/avo/edit/fields/date_time_field_component.rb +0 -4
  269. data/app/components/avo/edit/fields/external_image_field_component.rb +0 -4
  270. data/app/components/avo/edit/fields/file_field_component.rb +0 -4
  271. data/app/components/avo/edit/fields/files_field_component.rb +0 -4
  272. data/app/components/avo/edit/fields/heading_field_component.rb +0 -4
  273. data/app/components/avo/edit/fields/hidden_field_component.rb +0 -4
  274. data/app/components/avo/edit/fields/id_field_component.rb +0 -4
  275. data/app/components/avo/edit/fields/key_value_field_component.rb +0 -4
  276. data/app/components/avo/edit/fields/markdown_field_component.rb +0 -4
  277. data/app/components/avo/edit/fields/number_field_component.rb +0 -4
  278. data/app/components/avo/edit/fields/password_field_component.rb +0 -4
  279. data/app/components/avo/edit/fields/select_field_component.rb +0 -4
  280. data/app/components/avo/edit/fields/status_field_component.rb +0 -4
  281. data/app/components/avo/edit/fields/text_field_component.rb +0 -4
  282. data/app/components/avo/edit/fields/textarea_field_component.rb +0 -4
  283. data/app/components/avo/edit/fields/trix_field_component.rb +0 -4
  284. data/app/components/avo/index/fields/badge_field_component.html.erb +0 -3
  285. data/app/components/avo/index/fields/badge_field_component.rb +0 -4
  286. data/app/components/avo/index/fields/belongs_to_field_component.rb +0 -4
  287. data/app/components/avo/index/fields/boolean_field_component.html.erb +0 -3
  288. data/app/components/avo/index/fields/boolean_field_component.rb +0 -4
  289. data/app/components/avo/index/fields/boolean_group_field_component.html.erb +0 -3
  290. data/app/components/avo/index/fields/boolean_group_field_component.rb +0 -4
  291. data/app/components/avo/index/fields/country_field_component.rb +0 -4
  292. data/app/components/avo/index/fields/date_field_component.rb +0 -4
  293. data/app/components/avo/index/fields/date_time_field_component.rb +0 -4
  294. data/app/components/avo/index/fields/external_image_field_component.rb +0 -4
  295. data/app/components/avo/index/fields/field_component.html.erb +0 -1
  296. data/app/components/avo/index/fields/field_component.rb +0 -11
  297. data/app/components/avo/index/fields/file_field_component.rb +0 -4
  298. data/app/components/avo/index/fields/files_field_component.rb +0 -4
  299. data/app/components/avo/index/fields/gravatar_field_component.rb +0 -4
  300. data/app/components/avo/index/fields/has_one_field_component.rb +0 -4
  301. data/app/components/avo/index/fields/id_field_component.html.erb +0 -10
  302. data/app/components/avo/index/fields/id_field_component.rb +0 -4
  303. data/app/components/avo/index/fields/number_field_component.rb +0 -4
  304. data/app/components/avo/index/fields/select_field_component.rb +0 -4
  305. data/app/components/avo/index/fields/status_field_component.html.erb +0 -3
  306. data/app/components/avo/index/fields/status_field_component.rb +0 -4
  307. data/app/components/avo/index/fields/text_field_component.html.erb +0 -3
  308. data/app/components/avo/index/fields/text_field_component.rb +0 -4
  309. data/app/components/avo/show/fields/badge_field_component.html.erb +0 -3
  310. data/app/components/avo/show/fields/badge_field_component.rb +0 -4
  311. data/app/components/avo/show/fields/belongs_to_field_component.rb +0 -4
  312. data/app/components/avo/show/fields/boolean_field_component.rb +0 -4
  313. data/app/components/avo/show/fields/boolean_group_field_component.html.erb +0 -3
  314. data/app/components/avo/show/fields/boolean_group_field_component.rb +0 -4
  315. data/app/components/avo/show/fields/code_field_component.rb +0 -4
  316. data/app/components/avo/show/fields/country_field_component.rb +0 -4
  317. data/app/components/avo/show/fields/date_field_component.rb +0 -4
  318. data/app/components/avo/show/fields/date_time_field_component.rb +0 -4
  319. data/app/components/avo/show/fields/external_image_field_component.rb +0 -4
  320. data/app/components/avo/show/fields/file_field_component.html.erb +0 -3
  321. data/app/components/avo/show/fields/file_field_component.rb +0 -4
  322. data/app/components/avo/show/fields/files_field_component.html.erb +0 -3
  323. data/app/components/avo/show/fields/files_field_component.rb +0 -4
  324. data/app/components/avo/show/fields/gravatar_field_component.rb +0 -4
  325. data/app/components/avo/show/fields/has_many_field_component.rb +0 -4
  326. data/app/components/avo/show/fields/has_one_field_component.rb +0 -5
  327. data/app/components/avo/show/fields/heading_field_component.rb +0 -4
  328. data/app/components/avo/show/fields/id_field_component.rb +0 -4
  329. data/app/components/avo/show/fields/key_value_field_component.rb +0 -4
  330. data/app/components/avo/show/fields/markdown_field_component.rb +0 -4
  331. data/app/components/avo/show/fields/number_field_component.rb +0 -4
  332. data/app/components/avo/show/fields/select_field_component.rb +0 -4
  333. data/app/components/avo/show/fields/status_field_component.html.erb +0 -3
  334. data/app/components/avo/show/fields/status_field_component.rb +0 -4
  335. data/app/components/avo/show/fields/text_field_component.rb +0 -4
  336. data/app/components/avo/show/fields/textarea_field_component.rb +0 -4
  337. data/app/components/avo/show/fields/trix_field_component.rb +0 -4
  338. data/public/avo-packs/css/application-5bdca030.css.br +0 -0
  339. data/public/avo-packs/css/application-5bdca030.css.gz +0 -0
  340. data/public/avo-packs/css/application-5bdca030.css.map +0 -1
  341. data/public/avo-packs/css/application-5bdca030.css.map.br +0 -0
  342. data/public/avo-packs/css/application-5bdca030.css.map.gz +0 -0
  343. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js +0 -26
  344. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.br +0 -0
  345. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.gz +0 -0
  346. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.map.br +0 -0
  347. data/public/avo-packs/js/application-16a456a2b7cb56b01153.js.map.gz +0 -0
@@ -0,0 +1,10 @@
1
+ <div data-controller="search" class="resource-search flex items-center h-full w-full" data-turbo-remove-before-cache>
2
+ <div class="w-full"
3
+ data-search-target="autocomplete"
4
+ data-search-resource="<%= resource %>"
5
+ data-translation-keys='{"no_item_found": "<%= I18n.translate 'avo.no_item_found' %>"}'
6
+ data-debounce-timeout='<%= Avo.configuration.search_debounce %>'
7
+ >
8
+ </div>
9
+ <div class="relative inline-flex text-gray-400 text-sm border border-gray-300 rounded-full cursor-pointer" data-search-target="button"></div>
10
+ </div>
@@ -19,14 +19,15 @@
19
19
  <%= render partial: 'avo/sidebar/sidebar' %>
20
20
 
21
21
  <div class="flex-1 flex flex-col h-full overflow-auto">
22
- <div class="relative bg-white p-2 shadow-md h-16 w-full flex flex-shrink-0 items-center z-50" v-if="layout !== 'blank'">
23
- <div class="ml-6">
22
+ <div class="relative bg-white p-2 shadow-md h-16 w-full flex flex-shrink-0 items-center z-50 px-6" v-if="layout !== 'blank'">
23
+ <div>
24
24
  <%= render partial: "avo/partials/header" %>
25
25
  </div>
26
- <div class="flex-1 flex justify-center">
27
- <div class="w-64">
28
- <%# <resources-search :global="true"> %>
29
- </div>
26
+ <div class="flex-1 flex ml-4 pl-4">
27
+ <%= render partial: "avo/partials/global_search" if ::Avo::App.license.has_with_trial(:global_search) %>
28
+ </div>
29
+ <div class="align-end">
30
+ <%= render partial: "avo/partials/profile_dropdown" %>
30
31
  </div>
31
32
  </div>
32
33
 
data/avo.gemspec CHANGED
@@ -32,7 +32,7 @@ Gem::Specification.new do |spec|
32
32
  spec.files = Dir["{bin,app,config,db,lib,public}/**/*", "MIT-LICENSE", "Rakefile", "README.md", "avo.gemspec", "Gemfile", "Gemfile.lock"]
33
33
 
34
34
  spec.add_dependency "rails", ">= 6.0"
35
- spec.add_dependency "pagy", ">= 3.1.3", "< 4.0"
35
+ spec.add_dependency "pagy"
36
36
  spec.add_dependency "zeitwerk"
37
37
  spec.add_dependency "countries"
38
38
  spec.add_dependency "pundit"
@@ -45,4 +45,5 @@ Gem::Specification.new do |spec|
45
45
  spec.add_dependency "meta-tags"
46
46
  spec.add_dependency "breadcrumbs_on_rails"
47
47
  spec.add_dependency "manifester"
48
+ spec.add_dependency "ransack"
48
49
  end
data/config/routes.rb CHANGED
@@ -4,6 +4,8 @@ Avo::Engine.routes.draw do
4
4
  get "resources", to: redirect("/avo")
5
5
 
6
6
  scope "avo_api", as: "avo_api" do
7
+ get "/search", to: "search#index"
8
+ get "/:resource_name/search", to: "search#show"
7
9
  post "/resources/:resource_name/:id/attachments/", to: "attachments#create"
8
10
  end
9
11
 
@@ -27,10 +29,4 @@ Avo::Engine.routes.draw do
27
29
  post "/:resource_name/:id/:related_name", to: "relations#create"
28
30
  delete "/:resource_name/:id/:related_name/:related_id", to: "relations#destroy"
29
31
  end
30
-
31
- # get '/avo-api/search', to: 'search#index'
32
- # get '/avo-api/:resource_name/search', to: 'search#resource'
33
-
34
- # Tools
35
- # get '/avo-tools/resource-overview', to: 'resource_overview#index'
36
32
  end
data/db/factories.rb CHANGED
@@ -13,6 +13,7 @@ FactoryBot.define do
13
13
  name { Faker::Company.name }
14
14
  description { Faker::Lorem.paragraph(sentence_count: 4) }
15
15
  url { Faker::Internet.url }
16
+ color { Faker::Color.hex_color }
16
17
  end
17
18
 
18
19
  factory :post do
@@ -24,6 +25,7 @@ FactoryBot.define do
24
25
  Time.now - rand(10...365).days
25
26
  end
26
27
  end
28
+ status { 0 }
27
29
  end
28
30
 
29
31
  factory :project do
@@ -36,5 +38,6 @@ FactoryBot.define do
36
38
  users_required { Faker::Number.between(from: 10, to: 100) }
37
39
  started_at { Time.now - rand(10...365).days }
38
40
  meta { [{foo: "bar", hey: "hi"}, {bar: "baz"}, {hoho: "hohoho"}].sample }
41
+ progress { Faker::Number.between(from: 0, to: 100) }
39
42
  end
40
43
  end
@@ -0,0 +1,5 @@
1
+ class AddColorToTeams < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :teams, :color, :string
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddProgressToProjects < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :projects, :progress, :integer
4
+ end
5
+ end
data/lib/avo/app.rb CHANGED
@@ -1,13 +1,12 @@
1
1
  module Avo
2
2
  class App
3
- class_attribute :app, default: {
4
- resources: [],
5
- cache_store: nil
6
- }
3
+ class_attribute :resources, default: []
4
+ class_attribute :cache_store, default: nil
7
5
  class_attribute :fields, default: []
8
6
  class_attribute :request, default: nil
9
7
  class_attribute :context, default: nil
10
8
  class_attribute :license, default: nil
9
+ class_attribute :current_user, default: nil
11
10
 
12
11
  class << self
13
12
  def boot
@@ -16,15 +15,16 @@ module Avo
16
15
  I18n.locale = Avo.configuration.language_code
17
16
 
18
17
  if Rails.cache.instance_of?(ActiveSupport::Cache::NullStore)
19
- app[:cache_store] ||= ActiveSupport::Cache::MemoryStore.new
18
+ self.cache_store ||= ActiveSupport::Cache::MemoryStore.new
20
19
  else
21
- app[:cache_store] = Rails.cache
20
+ self.cache_store = Rails.cache
22
21
  end
23
22
  end
24
23
 
25
- def init(request:, context:)
24
+ def init(request:, context:, current_user:)
26
25
  self.request = request
27
26
  self.context = context
27
+ self.current_user = current_user
28
28
 
29
29
  self.license = Licensing::LicenseManager.new(Licensing::HQ.new(request).response).license
30
30
 
@@ -38,10 +38,6 @@ module Avo
38
38
  init_resources
39
39
  end
40
40
 
41
- def cache_store
42
- app[:cache_store]
43
- end
44
-
45
41
  # This method will find all fields available in the Avo::Fields namespace and add them to the fields class_variable array
46
42
  # so later we can instantiate them on our resources.
47
43
  #
@@ -67,7 +63,7 @@ module Avo
67
63
  end
68
64
 
69
65
  def init_resources
70
- app[:resources] = BaseResource.descendants
66
+ self.resources = BaseResource.descendants
71
67
  .select do |resource|
72
68
  resource != BaseResource
73
69
  end
@@ -78,15 +74,11 @@ module Avo
78
74
  end
79
75
  end
80
76
 
81
- def get_resources
82
- app[:resources]
83
- end
84
-
85
77
  # Returns the Avo resource by camelized name
86
78
  #
87
79
  # get_resource_by_name('User') => UserResource
88
80
  def get_resource(resource)
89
- app[:resources].find do |available_resource|
81
+ resources.find do |available_resource|
90
82
  "#{resource}Resource".safe_constantize == available_resource.class
91
83
  end
92
84
  end
@@ -103,7 +95,7 @@ module Avo
103
95
  # get_resource_by_name('User') => UserResource
104
96
  # get_resource_by_name(User) => UserResource
105
97
  def get_resource_by_model_name(name)
106
- get_resources.find do |resource|
98
+ resources.find do |resource|
107
99
  resource.model_class.model_name.name == name.to_s
108
100
  end
109
101
  end
@@ -113,7 +105,7 @@ module Avo
113
105
  # get_resource_by_controller_name('delayed_backend_active_record_jobs') => DelayedJobResource
114
106
  # get_resource_by_controller_name('users') => UserResource
115
107
  def get_resource_by_controller_name(name)
116
- get_resources.find do |resource|
108
+ resources.find do |resource|
117
109
  resource.model_class.to_s.pluralize.underscore.tr("/", "_") == name.to_s
118
110
  end
119
111
  end
@@ -126,8 +118,7 @@ module Avo
126
118
  end
127
119
 
128
120
  def get_available_resources(user = nil)
129
- App.get_resources
130
- .select do |resource|
121
+ resources.select do |resource|
131
122
  Services::AuthorizationService.authorize user, resource.model, Avo.configuration.authorization_methods.stringify_keys["index"], raise_exception: false
132
123
  end
133
124
  .sort_by { |r| r.name }
@@ -11,7 +11,7 @@ module Avo
11
11
 
12
12
  class_attribute :id, default: :id
13
13
  class_attribute :title, default: :id
14
- class_attribute :search, default: [:id]
14
+ class_attribute :search_query, default: nil
15
15
  class_attribute :includes, default: []
16
16
  class_attribute :model_class
17
17
  class_attribute :translation_key
@@ -42,6 +42,18 @@ module Avo
42
42
 
43
43
  self.filters_loader.use filter_class
44
44
  end
45
+
46
+ def scope
47
+ authorization.apply_policy model_class
48
+ end
49
+
50
+ def authorization
51
+ Avo::Services::AuthorizationService.new Avo::App.current_user
52
+ end
53
+ end
54
+
55
+ def initialize
56
+ self.class.model_class = model_class
45
57
  end
46
58
 
47
59
  def hydrate(model: nil, view: nil, user: nil, params: nil)
@@ -61,9 +73,17 @@ module Avo
61
73
  def get_field_definitions
62
74
  return [] if self.class.fields.blank?
63
75
 
64
- self.class.fields.map do |field|
76
+ fields = self.class.fields.map do |field|
65
77
  field.hydrate(resource: self, panel_name: default_panel_name, user: user)
66
78
  end
79
+
80
+ if Avo::App.license.has_with_trial(:custom_fields)
81
+ fields = fields.reject do |field|
82
+ field.custom?
83
+ end
84
+ end
85
+
86
+ fields
67
87
  end
68
88
 
69
89
  def get_fields(panel: nil, reflection: nil)
@@ -88,9 +108,9 @@ module Avo
88
108
  end
89
109
  end
90
110
 
91
- fields.map do |field|
92
- field.hydrate(model: @model, view: @view, resource: self)
93
- end
111
+ hydrate_fields(model: @model, view: @view)
112
+
113
+ fields
94
114
  end
95
115
 
96
116
  def get_grid_fields
@@ -111,8 +131,16 @@ module Avo
111
131
  self.class.actions_loader.bag
112
132
  end
113
133
 
134
+ def hydrate_fields(model: nil, view: nil)
135
+ fields.map do |field|
136
+ field.hydrate(model: @model, view: @view, resource: self)
137
+ end
138
+
139
+ self
140
+ end
141
+
114
142
  def default_panel_name
115
- return @params[:related_name].capitalize if @params[:related_name].present?
143
+ return @params[:related_name].capitalize if @params.present? && @params[:related_name].present?
116
144
 
117
145
  case @view
118
146
  when :show
@@ -218,7 +246,11 @@ module Avo
218
246
 
219
247
  def fill_model(model, params)
220
248
  # Map the received params to their actual fields
221
- fields_by_database_id = get_field_definitions.map { |field| [field.database_id(model).to_s, field] }.to_h
249
+ fields_by_database_id = get_field_definitions
250
+ .reject do |field|
251
+ field.computed
252
+ end
253
+ .map { |field| [field.database_id(model).to_s, field] }.to_h
222
254
 
223
255
  params.each do |key, value|
224
256
  field = fields_by_database_id[key]
@@ -293,5 +325,57 @@ module Avo
293
325
  end
294
326
  end
295
327
  end
328
+
329
+ def avo_path
330
+ "#{Avo.configuration.root_path}/resources/#{model_class.model_name.route_key}/#{model.id}"
331
+ end
332
+
333
+ def label_field
334
+ get_field_definitions.find do |field|
335
+ field.as_label.present?
336
+ end
337
+ rescue
338
+ nil
339
+ end
340
+
341
+ def label
342
+ label_field.value || model_title
343
+ rescue
344
+ model_title
345
+ end
346
+
347
+ def avatar_field
348
+ get_field_definitions.find do |field|
349
+ field.as_avatar.present?
350
+ end
351
+ rescue
352
+ nil
353
+ end
354
+
355
+ def avatar
356
+ avatar_field.to_image
357
+ rescue
358
+ nil
359
+ end
360
+
361
+ def avatar_type
362
+ avatar_field.as_avatar
363
+ rescue
364
+ nil
365
+ end
366
+
367
+ def description_field
368
+ get_field_definitions.find do |field|
369
+ field.as_description.present?
370
+ end
371
+ rescue
372
+ nil
373
+ end
374
+
375
+ def description
376
+ description_field.value
377
+ rescue
378
+ nil
379
+ end
296
380
  end
297
381
  end
@@ -22,6 +22,7 @@ module Avo
22
22
  attr_accessor :display_breadcrumbs
23
23
  attr_accessor :initial_breadcrumbs
24
24
  attr_accessor :home_path
25
+ attr_accessor :search_debounce
25
26
 
26
27
  def initialize
27
28
  @root_path = "/avo"
@@ -35,7 +36,7 @@ module Avo
35
36
  @default_view_type = :table
36
37
  @license = "community"
37
38
  @license_key = nil
38
- @current_user = proc {}
39
+ @current_user = proc { current_user }
39
40
  @authenticate = proc {}
40
41
  @authorization_methods = {
41
42
  index: "index?",
@@ -56,6 +57,7 @@ module Avo
56
57
  }
57
58
  @display_breadcrumbs = true
58
59
  @home_path = nil
60
+ @search_debounce = 300
59
61
  end
60
62
 
61
63
  def locale_tag
data/lib/avo/engine.rb CHANGED
@@ -15,6 +15,7 @@ module Avo
15
15
 
16
16
  initializer "avo.autoload", before: :set_autoload_paths do |app|
17
17
  [
18
+ ["app", "avo", "fields"],
18
19
  ["app", "avo", "filters"],
19
20
  ["app", "avo", "actions"],
20
21
  ["app", "avo", "resources"]
@@ -1,17 +1,15 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class BadgeField < BaseField
4
- def initialize(name, **args, &block)
5
- @defaults = {
6
- partial_name: "badge-field"
7
- }
4
+ attr_reader :options
8
5
 
9
- super(name, **args, &block)
6
+ def initialize(id, **args, &block)
7
+ super(id, **args, &block)
10
8
 
11
9
  hide_on [:edit, :new]
12
10
 
13
11
  default_options = {info: :info, success: :success, danger: :danger, warning: :warning}
14
- @meta[:options] = args[:options].present? ? default_options.merge(args[:options]) : default_options
12
+ @options = args[:options].present? ? default_options.merge(args[:options]) : default_options
15
13
  end
16
14
  end
17
15
  end
@@ -5,91 +5,71 @@ module Avo
5
5
  extend Avo::Fields::FieldExtensions::HasFieldName
6
6
  include Avo::Fields::FieldExtensions::VisibleInDifferentViews
7
7
 
8
- attr_accessor :id
9
- attr_accessor :name
10
- attr_accessor :translation_key
11
- attr_accessor :partial_name
12
- attr_accessor :partial_path
13
- attr_accessor :updatable
14
- attr_accessor :sortable
15
- attr_accessor :required
16
- attr_accessor :readonly
17
- attr_accessor :nullable
18
- attr_accessor :null_values
19
- attr_accessor :format_using
20
- attr_accessor :computed # if block is present
21
- attr_accessor :computable # if allowed to be computable
22
- attr_accessor :computed_value # the value after computation
23
- attr_accessor :block
24
- attr_accessor :placeholder
25
- attr_accessor :help
26
- attr_accessor :default
27
- attr_accessor :visible
28
- attr_accessor :model
29
- attr_accessor :resource
30
- attr_accessor :view
31
- attr_accessor :user
32
- attr_accessor :action
33
- attr_accessor :meta
34
- attr_accessor :panel_name
35
- attr_accessor :link_to_resource
36
- attr_accessor :options
8
+ attr_reader :id
9
+ attr_reader :name
10
+ attr_reader :translation_key
11
+ attr_reader :block
12
+ attr_reader :required
13
+ attr_reader :readonly
14
+ attr_reader :sortable
15
+ attr_reader :nullable
16
+ attr_reader :null_values
17
+ attr_reader :format_using
18
+ attr_reader :placeholder
19
+ attr_reader :help
20
+ attr_reader :default
21
+ attr_reader :visible
22
+ attr_reader :as_label
23
+ attr_reader :as_avatar
24
+ attr_reader :as_description
25
+
26
+ # Private options
27
+ attr_reader :updatable
28
+ attr_reader :computable # if allowed to be computable
29
+ attr_reader :computed # if block is present
30
+ attr_reader :computed_value # the value after computation
31
+
32
+ # Hydrated payload
33
+ attr_reader :model
34
+ attr_reader :view
35
+ attr_reader :resource
36
+ attr_reader :action
37
+ attr_reader :user
38
+ attr_reader :panel_name
37
39
 
38
40
  class_attribute :field_name_attribute
39
41
 
40
- @meta = {}
41
-
42
- def initialize(id, **args, &block)
42
+ def initialize(id, _options: {}, **args, &block)
43
43
  super(id, **args, &block)
44
- @defaults ||= {}
45
-
46
- args = @defaults.merge(args).symbolize_keys
47
-
48
- null_values = [nil, "", *args[:null_values]]
49
- # The field properties as a hash {property: default_value}
50
- @field_properties = {
51
- id: id,
52
- name: id.to_s.humanize(keep_id_suffix: true),
53
- translation_key: nil,
54
- block: block,
55
- partial_name: "field",
56
- required: false,
57
- readonly: false,
58
- updatable: true,
59
- sortable: false,
60
- nullable: false,
61
- null_values: null_values,
62
- computable: true,
63
- computed: block.present?,
64
- computed_value: false,
65
- format_using: false,
66
- placeholder: id.to_s.humanize,
67
- help: nil,
68
- default: nil,
69
- visible: true,
70
- meta: {},
71
- panel_name: nil,
72
- options: {}
73
- }
74
-
75
- # Set the values in the following order
76
- # - app defaults
77
- # - field defaults
78
- # - field option
79
- @field_properties.each do |name, default_value|
80
- final_value = args[name.to_sym]
81
- send("#{name}=", name != "null_values" && (final_value.nil? || !defined?(final_value)) ? default_value : final_value)
82
- end
44
+
45
+ @id = id
46
+ @name = args[:name] || id.to_s.humanize(keep_id_suffix: true)
47
+ @translation_key = args[:translation_key]
48
+ @block = block
49
+ @required = args[:required] || false
50
+ @readonly = args[:readonly] || false
51
+ @sortable = args[:sortable] || false
52
+ @nullable = args[:nullable] || false
53
+ @null_values = args[:null_values] || [nil, ""]
54
+ @format_using = args[:format_using] || nil
55
+ @placeholder = args[:placeholder] || id.to_s.humanize(keep_id_suffix: true)
56
+ @help = args[:help] || nil
57
+ @default = args[:default] || nil
58
+ @visible = args[:visible] || true
59
+ @as_label = args[:as_label] || false
60
+ @as_avatar = args[:as_avatar] || false
61
+ @as_description = args[:as_description] || false
62
+
63
+ @updatable = true
64
+ @computable = true
65
+ @computed = block.present?
66
+ @computed_value = nil
83
67
 
84
68
  # Set the visibility
85
69
  show_on args[:show_on] if args[:show_on].present?
86
70
  hide_on args[:hide_on] if args[:hide_on].present?
87
71
  only_on args[:only_on] if args[:only_on].present?
88
72
  except_on args[:except_on] if args[:except_on].present?
89
-
90
- if args[:use_partials].present?
91
- @custom_partials = args[:use_partials]
92
- end
93
73
  end
94
74
 
95
75
  def hydrate(model: nil, resource: nil, action: nil, view: nil, panel_name: nil, user: nil)
@@ -142,12 +122,6 @@ module Avo
142
122
  model
143
123
  end
144
124
 
145
- def partial_path_for(view)
146
- return @custom_partials[view] if @custom_partials.present? && @custom_partials[view].present?
147
-
148
- "avo/fields/#{view}/#{partial_name}"
149
- end
150
-
151
125
  # Try to see if the field has a different database ID than it's name
152
126
  def database_id(model)
153
127
  foreign_key
@@ -167,8 +141,13 @@ module Avo
167
141
  id.to_sym
168
142
  end
169
143
 
170
- def component_name(view = :index)
171
- "Avo::#{view.to_s.classify}::Fields::#{partial_name.gsub("-field", "").underscore.camelize}FieldComponent"
144
+ def view_component_name
145
+ "#{type.classify}Field"
146
+ end
147
+
148
+ def component_for_view(view = :index)
149
+ # puts ['component_for_view->', "Avo::Fields::#{type.classify}Field::#{view.to_s.classify}Component"].inspect
150
+ "Avo::Fields::#{view_component_name}::#{view.to_s.classify}Component".safe_constantize
172
151
  end
173
152
 
174
153
  def model_errors
@@ -181,6 +160,12 @@ module Avo
181
160
  self.class.name.demodulize.to_s.underscore.gsub("_field", "")
182
161
  end
183
162
 
163
+ def custom?
164
+ !method(:initialize).source_location.first.include?("lib/avo/field")
165
+ rescue
166
+ true
167
+ end
168
+
184
169
  private
185
170
 
186
171
  def model_or_class(model)