avo 0.4.6 → 0.5.0.beta1

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 (520) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +35 -9
  3. data/Gemfile.lock +114 -88
  4. data/README.md +4 -0
  5. data/app/components/avo/common/badge_viewer_component.html.erb +24 -0
  6. data/app/components/avo/common/badge_viewer_component.rb +8 -0
  7. data/app/components/avo/common/boolean_check_component.html.erb +12 -0
  8. data/app/components/avo/common/boolean_check_component.rb +7 -0
  9. data/app/components/avo/common/boolean_group_component.html.erb +16 -0
  10. data/app/components/avo/common/boolean_group_component.rb +8 -0
  11. data/app/components/avo/common/files_list_viewer_component.html.erb +5 -0
  12. data/app/components/avo/common/files_list_viewer_component.rb +8 -0
  13. data/app/components/avo/common/gravatar_viewer_component.html.erb +12 -0
  14. data/app/components/avo/common/gravatar_viewer_component.rb +12 -0
  15. data/app/components/avo/common/heading_component.html.erb +13 -0
  16. data/app/components/avo/common/heading_component.rb +8 -0
  17. data/app/components/avo/common/multiple_file_viewer_component.html.erb +26 -0
  18. data/app/components/avo/common/multiple_file_viewer_component.rb +13 -0
  19. data/app/components/avo/common/single_file_viewer_component.html.erb +28 -0
  20. data/app/components/avo/common/single_file_viewer_component.rb +13 -0
  21. data/app/components/avo/common/status_viewer_component.html.erb +10 -0
  22. data/app/components/avo/common/status_viewer_component.rb +8 -0
  23. data/app/components/avo/edit/field_wrapper_component.html.erb +20 -0
  24. data/app/components/avo/edit/field_wrapper_component.rb +19 -0
  25. data/app/components/avo/edit/fields/belongs_to_field_component.html.erb +19 -0
  26. data/app/components/avo/edit/fields/belongs_to_field_component.rb +4 -0
  27. data/app/components/avo/edit/fields/boolean_field_component.html.erb +9 -0
  28. data/app/components/avo/edit/fields/boolean_field_component.rb +4 -0
  29. data/app/components/avo/edit/fields/boolean_group_field_component.html.erb +25 -0
  30. data/app/components/avo/edit/fields/boolean_group_field_component.rb +4 -0
  31. data/app/components/avo/edit/fields/code_field_component.html.erb +19 -0
  32. data/app/components/avo/edit/fields/code_field_component.rb +4 -0
  33. data/app/components/avo/edit/fields/country_field_component.html.erb +7 -0
  34. data/app/components/avo/edit/fields/country_field_component.rb +4 -0
  35. data/app/components/avo/edit/fields/date_field_component.html.erb +18 -0
  36. data/app/components/avo/edit/fields/date_field_component.rb +4 -0
  37. data/app/components/avo/edit/fields/date_time_field_component.html.erb +20 -0
  38. data/app/components/avo/edit/fields/date_time_field_component.rb +4 -0
  39. data/app/components/avo/edit/fields/external_image_field_component.html.erb +6 -0
  40. data/app/components/avo/edit/fields/external_image_field_component.rb +4 -0
  41. data/app/components/avo/edit/fields/field_component.rb +13 -0
  42. data/app/components/avo/edit/fields/file_field_component.html.erb +9 -0
  43. data/app/components/avo/edit/fields/file_field_component.rb +4 -0
  44. data/app/components/avo/edit/fields/files_field_component.html.erb +5 -0
  45. data/app/components/avo/edit/fields/files_field_component.rb +4 -0
  46. data/app/components/avo/edit/fields/heading_field_component.html.erb +3 -0
  47. data/app/components/avo/edit/fields/heading_field_component.rb +4 -0
  48. data/app/components/avo/edit/fields/hidden_field_component.html.erb +1 -0
  49. data/app/components/avo/edit/fields/hidden_field_component.rb +4 -0
  50. data/app/components/avo/edit/fields/id_field_component.html.erb +3 -0
  51. data/app/components/avo/edit/fields/id_field_component.rb +4 -0
  52. data/app/components/avo/edit/fields/markdown_field_component.html.erb +11 -0
  53. data/app/components/avo/edit/fields/markdown_field_component.rb +4 -0
  54. data/app/components/avo/edit/fields/number_field_component.html.erb +9 -0
  55. data/app/components/avo/edit/fields/number_field_component.rb +4 -0
  56. data/app/components/avo/edit/fields/password_field_component.html.erb +7 -0
  57. data/app/components/avo/edit/fields/password_field_component.rb +4 -0
  58. data/app/components/avo/edit/fields/select_field_component.html.erb +6 -0
  59. data/app/components/avo/edit/fields/select_field_component.rb +4 -0
  60. data/app/components/avo/edit/fields/status_field_component.html.erb +7 -0
  61. data/app/components/avo/edit/fields/status_field_component.rb +4 -0
  62. data/app/components/avo/edit/fields/text_field_component.html.erb +6 -0
  63. data/app/components/avo/edit/fields/text_field_component.rb +4 -0
  64. data/app/components/avo/edit/fields/textarea_field_component.html.erb +7 -0
  65. data/app/components/avo/edit/fields/textarea_field_component.rb +4 -0
  66. data/app/components/avo/edit/fields/trix_field_component.html.erb +11 -0
  67. data/app/components/avo/edit/fields/trix_field_component.rb +4 -0
  68. data/app/components/avo/index/field_wrapper_component.html.erb +7 -0
  69. data/app/components/avo/index/field_wrapper_component.rb +10 -0
  70. data/app/components/avo/index/fields/badge_field_component.html.erb +3 -0
  71. data/app/components/avo/index/fields/badge_field_component.rb +4 -0
  72. data/app/components/avo/index/fields/belongs_to_field_component.html.erb +7 -0
  73. data/app/components/avo/index/fields/belongs_to_field_component.rb +4 -0
  74. data/app/components/avo/index/fields/boolean_field_component.html.erb +3 -0
  75. data/app/components/avo/index/fields/boolean_field_component.rb +4 -0
  76. data/app/components/avo/index/fields/boolean_group_field_component.html.erb +3 -0
  77. data/app/components/avo/index/fields/boolean_group_field_component.rb +4 -0
  78. data/app/components/avo/index/fields/country_field_component.html.erb +7 -0
  79. data/app/components/avo/index/fields/country_field_component.rb +4 -0
  80. data/app/components/avo/index/fields/date_field_component.html.erb +3 -0
  81. data/app/components/avo/index/fields/date_field_component.rb +4 -0
  82. data/app/components/avo/index/fields/date_time_field_component.html.erb +3 -0
  83. data/app/components/avo/index/fields/date_time_field_component.rb +4 -0
  84. data/app/components/avo/index/fields/external_image_field_component.html.erb +9 -0
  85. data/app/components/avo/index/fields/external_image_field_component.rb +4 -0
  86. data/app/components/avo/index/fields/field_component.html.erb +1 -0
  87. data/app/components/avo/index/fields/field_component.rb +11 -0
  88. data/app/components/avo/index/fields/file_field_component.html.erb +11 -0
  89. data/app/components/avo/index/fields/file_field_component.rb +4 -0
  90. data/app/components/avo/index/fields/files_field_component.html.erb +3 -0
  91. data/app/components/avo/index/fields/files_field_component.rb +4 -0
  92. data/app/components/avo/index/fields/gravatar_field_component.html.erb +11 -0
  93. data/app/components/avo/index/fields/gravatar_field_component.rb +4 -0
  94. data/app/components/avo/index/fields/has_one_field_component.html.erb +7 -0
  95. data/app/components/avo/index/fields/has_one_field_component.rb +4 -0
  96. data/app/components/avo/index/fields/id_field_component.html.erb +10 -0
  97. data/app/components/avo/index/fields/id_field_component.rb +4 -0
  98. data/app/components/avo/index/fields/number_field_component.html.erb +3 -0
  99. data/app/components/avo/index/fields/number_field_component.rb +4 -0
  100. data/app/components/avo/index/fields/select_field_component.html.erb +3 -0
  101. data/app/components/avo/index/fields/select_field_component.rb +4 -0
  102. data/app/components/avo/index/fields/status_field_component.html.erb +3 -0
  103. data/app/components/avo/index/fields/status_field_component.rb +4 -0
  104. data/app/components/avo/index/fields/text_field_component.html.erb +3 -0
  105. data/app/components/avo/index/fields/text_field_component.rb +4 -0
  106. data/app/components/avo/index/grid_item_component.html.erb +41 -0
  107. data/app/components/avo/index/grid_item_component.rb +31 -0
  108. data/app/components/avo/index/resource_controls_component.html.erb +56 -0
  109. data/app/components/avo/index/resource_controls_component.rb +39 -0
  110. data/app/components/avo/index/resource_grid_component.html.erb +13 -0
  111. data/app/components/avo/index/resource_grid_component.rb +10 -0
  112. data/app/components/avo/index/resource_table_component.html.erb +16 -0
  113. data/app/components/avo/index/resource_table_component.rb +10 -0
  114. data/app/components/avo/index/table_row_component.html.erb +18 -0
  115. data/app/components/avo/index/table_row_component.rb +11 -0
  116. data/app/components/avo/loading_component.html.erb +10 -0
  117. data/app/components/avo/loading_component.rb +7 -0
  118. data/app/components/avo/modal_component.html.erb +20 -0
  119. data/app/components/avo/modal_component.rb +5 -0
  120. data/app/components/avo/navigation_heading_component.html.erb +3 -0
  121. data/app/components/avo/navigation_heading_component.rb +7 -0
  122. data/app/components/avo/navigation_link_component.html.erb +3 -0
  123. data/app/components/avo/navigation_link_component.rb +10 -0
  124. data/app/components/avo/panel_component.html.erb +27 -0
  125. data/app/components/avo/panel_component.rb +20 -0
  126. data/app/components/avo/resource_component.rb +14 -0
  127. data/app/components/avo/show/field_wrapper_component.html.erb +16 -0
  128. data/app/components/avo/show/field_wrapper_component.rb +15 -0
  129. data/app/components/avo/show/fields/badge_field_component.html.erb +3 -0
  130. data/app/components/avo/show/fields/badge_field_component.rb +4 -0
  131. data/app/components/avo/show/fields/belongs_to_field_component.html.erb +3 -0
  132. data/app/components/avo/show/fields/belongs_to_field_component.rb +4 -0
  133. data/app/components/avo/show/fields/boolean_field_component.html.erb +3 -0
  134. data/app/components/avo/show/fields/boolean_field_component.rb +4 -0
  135. data/app/components/avo/show/fields/boolean_group_field_component.html.erb +3 -0
  136. data/app/components/avo/show/fields/boolean_group_field_component.rb +4 -0
  137. data/app/components/avo/show/fields/code_field_component.html.erb +19 -0
  138. data/app/components/avo/show/fields/code_field_component.rb +4 -0
  139. data/app/components/avo/show/fields/country_field_component.html.erb +7 -0
  140. data/app/components/avo/show/fields/country_field_component.rb +4 -0
  141. data/app/components/avo/show/fields/date_field_component.html.erb +3 -0
  142. data/app/components/avo/show/fields/date_field_component.rb +4 -0
  143. data/app/components/avo/show/fields/date_time_field_component.html.erb +3 -0
  144. data/app/components/avo/show/fields/date_time_field_component.rb +4 -0
  145. data/app/components/avo/show/fields/external_image_field_component.html.erb +5 -0
  146. data/app/components/avo/show/fields/external_image_field_component.rb +4 -0
  147. data/app/components/avo/show/fields/field_component.rb +11 -0
  148. data/app/components/avo/show/fields/file_field_component.html.erb +3 -0
  149. data/app/components/avo/show/fields/file_field_component.rb +4 -0
  150. data/app/components/avo/show/fields/files_field_component.html.erb +3 -0
  151. data/app/components/avo/show/fields/files_field_component.rb +4 -0
  152. data/app/components/avo/show/fields/gravatar_field_component.html.erb +7 -0
  153. data/app/components/avo/show/fields/gravatar_field_component.rb +4 -0
  154. data/app/components/avo/show/fields/has_many_field_component.html.erb +3 -0
  155. data/app/components/avo/show/fields/has_many_field_component.rb +4 -0
  156. data/app/components/avo/show/fields/has_one_field_component.html.erb +19 -0
  157. data/app/components/avo/show/fields/has_one_field_component.rb +5 -0
  158. data/app/components/avo/show/fields/heading_field_component.html.erb +3 -0
  159. data/app/components/avo/show/fields/heading_field_component.rb +4 -0
  160. data/app/components/avo/show/fields/id_field_component.html.erb +3 -0
  161. data/app/components/avo/show/fields/id_field_component.rb +4 -0
  162. data/app/components/avo/show/fields/markdown_field_component.html.erb +10 -0
  163. data/app/components/avo/show/fields/markdown_field_component.rb +4 -0
  164. data/app/components/avo/show/fields/number_field_component.html.erb +3 -0
  165. data/app/components/avo/show/fields/number_field_component.rb +4 -0
  166. data/app/components/avo/show/fields/select_field_component.html.erb +3 -0
  167. data/app/components/avo/show/fields/select_field_component.rb +4 -0
  168. data/app/components/avo/show/fields/status_field_component.html.erb +3 -0
  169. data/app/components/avo/show/fields/status_field_component.rb +4 -0
  170. data/app/components/avo/show/fields/text_field_component.html.erb +3 -0
  171. data/app/components/avo/show/fields/text_field_component.rb +4 -0
  172. data/app/components/avo/show/fields/textarea_field_component.html.erb +3 -0
  173. data/app/components/avo/show/fields/textarea_field_component.rb +4 -0
  174. data/app/components/avo/show/fields/trix_field_component.html.erb +14 -0
  175. data/app/components/avo/show/fields/trix_field_component.rb +4 -0
  176. data/app/components/avo/views/resource_edit_component.html.erb +29 -0
  177. data/app/components/avo/views/resource_edit_component.rb +23 -0
  178. data/app/components/avo/views/resource_index_component.html.erb +62 -0
  179. data/app/components/avo/views/resource_index_component.rb +93 -0
  180. data/app/components/avo/views/resource_new_component.html.erb +25 -0
  181. data/app/components/avo/views/resource_new_component.rb +27 -0
  182. data/app/components/avo/views/resource_show_component.html.erb +64 -0
  183. data/app/components/avo/views/resource_show_component.rb +66 -0
  184. data/app/controllers/avo/actions_controller.rb +52 -22
  185. data/app/controllers/avo/application_controller.rb +183 -24
  186. data/app/controllers/avo/attachments_controller.rb +25 -0
  187. data/app/controllers/avo/base_controller.rb +218 -0
  188. data/app/controllers/avo/home_controller.rb +3 -0
  189. data/app/controllers/avo/relations_controller.rb +88 -19
  190. data/app/controllers/avo/resource_overview_controller.rb +3 -1
  191. data/app/controllers/avo/resources_controller.rb +2 -259
  192. data/app/controllers/avo/search_controller.rb +7 -6
  193. data/app/frontend/css/alerts.css +35 -0
  194. data/app/frontend/css/application.css +73 -0
  195. data/app/frontend/css/components/code.css +27 -0
  196. data/app/frontend/css/components/status.css +30 -0
  197. data/app/frontend/css/fonts.css +26 -0
  198. data/app/frontend/css/loader.css +134 -0
  199. data/app/frontend/css/pagination.css +67 -0
  200. data/app/frontend/css/tailwindcss/base.css +1 -0
  201. data/app/frontend/css/tailwindcss/components.css +1 -0
  202. data/app/frontend/css/tailwindcss/utilities.css +1 -0
  203. data/app/frontend/css/tooltips.css +105 -0
  204. data/app/frontend/css/typography.css +23 -0
  205. data/app/frontend/fonts/nunito-v16-latin-700.eot +0 -0
  206. data/app/frontend/fonts/nunito-v16-latin-700.svg +388 -0
  207. data/app/frontend/fonts/nunito-v16-latin-700.ttf +0 -0
  208. data/app/frontend/fonts/nunito-v16-latin-700.woff +0 -0
  209. data/app/frontend/fonts/nunito-v16-latin-700.woff2 +0 -0
  210. data/app/frontend/fonts/nunito-v16-latin-regular.eot +0 -0
  211. data/app/frontend/fonts/nunito-v16-latin-regular.svg +380 -0
  212. data/app/frontend/fonts/nunito-v16-latin-regular.ttf +0 -0
  213. data/app/frontend/fonts/nunito-v16-latin-regular.woff +0 -0
  214. data/app/frontend/fonts/nunito-v16-latin-regular.woff2 +0 -0
  215. data/app/frontend/images/logo.png +0 -0
  216. data/app/frontend/importmap.json.erb +5 -0
  217. data/app/frontend/js/controllers/action_controller.js +32 -0
  218. data/app/frontend/js/controllers/actions_picker_controller.js +44 -0
  219. data/app/frontend/js/controllers/alerts_controller.js +26 -0
  220. data/app/frontend/js/controllers/attachments_controller.js +9 -0
  221. data/app/frontend/js/controllers/boolean_filter_controller.js +21 -0
  222. data/app/frontend/js/controllers/fields/code_field_controller.js +35 -0
  223. data/app/frontend/js/controllers/fields/date_field_controller.js +53 -0
  224. data/app/frontend/js/controllers/fields/simple_mde_controller.js +26 -0
  225. data/app/frontend/js/controllers/filter_controller.js +52 -0
  226. data/app/frontend/js/controllers/hidden_input_controller.js +10 -0
  227. data/app/frontend/js/controllers/item_selector_controller.js +68 -0
  228. data/app/frontend/js/controllers/modal_controller.js +11 -0
  229. data/app/frontend/js/controllers/per_page_controller.js +9 -0
  230. data/app/frontend/js/controllers/select_filter_controller.js +15 -0
  231. data/app/frontend/js/controllers/tippy_controller.js +14 -0
  232. data/app/frontend/js/controllers/toggle_panel_controller.js +18 -0
  233. data/app/frontend/js/helpers/cast_boolean.js +2 -0
  234. data/app/frontend/js/toastr.js +9 -0
  235. data/app/frontend/packs/application.js +45 -0
  236. data/{public/avo-packs/media/svgs/arrow-circle-right-1ad1e15ec9a7aa54b67d126566a5aa2d.svg → app/frontend/svgs/arrow-circle-right.svg} +0 -0
  237. data/{public/avo-packs/media/svgs/arrow-left-0e8e808ff771a62a348d0232c8ccf539.svg → app/frontend/svgs/arrow-left.svg} +0 -0
  238. data/{public/avo-packs/media/svgs/avocado-bca389be7cf81162df902dfbd09b8adb.svg → app/frontend/svgs/avocado.svg} +0 -0
  239. data/app/frontend/svgs/badge-check-sm.svg +3 -0
  240. data/{public/avo-packs/media/svgs/check-circle-be9e4dcbd25467ae9a3d3c6c5c7a09fa.svg → app/frontend/svgs/check-circle.svg} +0 -0
  241. data/{public/avo-packs/media/svgs/chevron-down-01208b17a1f70a1bb8d82bba131da4f4.svg → app/frontend/svgs/chevron-down.svg} +0 -0
  242. data/{public/avo-packs/media/svgs/chevron-up-25ecf340dd76966d5ed63c85c025befc.svg → app/frontend/svgs/chevron-up.svg} +0 -0
  243. data/{public/avo-packs/media/svgs/code-69010c6ddb6ad50be8677f16468c51f8.svg → app/frontend/svgs/code.svg} +0 -0
  244. data/{public/avo-packs/media/svgs/color-swatch-60cf90fb6b5386e38f3b003f34e7ecbe.svg → app/frontend/svgs/color-swatch.svg} +0 -0
  245. data/app/frontend/svgs/document-text.svg +3 -0
  246. data/{public/avo-packs/media/svgs/download-c6ae3f12364a467c28cbf41dc90afbdd.svg → app/frontend/svgs/download.svg} +0 -0
  247. data/{public/avo-packs/media/svgs/edit-46c6dbef52ba6ddfc9afbc37186dfa2b.svg → app/frontend/svgs/edit.svg} +0 -0
  248. data/app/frontend/svgs/exclamation-circle-sm.svg +3 -0
  249. data/app/frontend/svgs/exclamation-sm.svg +3 -0
  250. data/{public/avo-packs/media/svgs/exclamation-8d1c0baa390a8df9bb52176011eb5892.svg → app/frontend/svgs/exclamation.svg} +0 -0
  251. data/{public/avo-packs/media/svgs/eye-cc6f85c70ebed6929712a5c7d51f102d.svg → app/frontend/svgs/eye.svg} +0 -0
  252. data/{public/avo-packs/media/svgs/filter-0007cddbc85cfe207f9876d4d184444a.svg → app/frontend/svgs/filter.svg} +0 -0
  253. data/{public/avo-packs/media/svgs/fire-782f08df79993311b6d907e12d9ebe9f.svg → app/frontend/svgs/fire.svg} +0 -0
  254. data/{public/avo-packs/media/svgs/game-board-6c59fe04181ac9954356c9f1f4d28053.svg → app/frontend/svgs/game-board.svg} +0 -0
  255. data/{public/avo-packs/media/svgs/globe-dfd9977c9d65814d2fc576904406dd08.svg → app/frontend/svgs/globe.svg} +0 -0
  256. data/app/frontend/svgs/information-circle-sm.svg +3 -0
  257. data/app/frontend/svgs/information-circle.svg +1 -0
  258. data/{public/avo-packs/media/svgs/library-7d391192a15da64fbb527908c9e035c7.svg → app/frontend/svgs/library.svg} +0 -0
  259. data/{public/avo-packs/media/svgs/photograph-9f37f1f5e6a48e68ce3b7d9cbe7b6fad.svg → app/frontend/svgs/photograph.svg} +0 -0
  260. data/app/frontend/svgs/play.svg +1 -0
  261. data/{public/avo-packs/media/svgs/plus-circle-b379b2a2aa803511ae5945b6fd323204.svg → app/frontend/svgs/plus-circle.svg} +0 -0
  262. data/{public/avo-packs/media/svgs/plus-530f0af27b9f1a4552454233c2f9a641.svg → app/frontend/svgs/plus.svg} +0 -0
  263. data/{public/avo-packs/media/svgs/question-mark-circle-3ece1d61091827910cdd097db711062b.svg → app/frontend/svgs/question-mark-circle.svg} +0 -0
  264. data/{public/avo-packs/media/svgs/save-e54acd7ac9646053e36382776f822756.svg → app/frontend/svgs/save.svg} +0 -0
  265. data/{public/avo-packs/media/svgs/selector-b43b3957d7cc121d06be14312613c218.svg → app/frontend/svgs/selector.svg} +0 -0
  266. data/{public/avo-packs/media/svgs/sort-ascending-f5bc0761702809cab20b0ea3065cb88a.svg → app/frontend/svgs/sort-ascending.svg} +0 -0
  267. data/{public/avo-packs/media/svgs/sort-descending-1c8ddc56c72be6781e59d808f9d06203.svg → app/frontend/svgs/sort-descending.svg} +0 -0
  268. data/{public/avo-packs/media/svgs/switch-horizontal-d23337f0fb533a86d14b746d25ad48ae.svg → app/frontend/svgs/switch-horizontal.svg} +0 -0
  269. data/{public/avo-packs/media/svgs/thumbs-down-44f83eacbf5b8fe0f2f085da75866ce0.svg → app/frontend/svgs/thumbs-down.svg} +0 -0
  270. data/{public/avo-packs/media/svgs/thumbs-up-b866900017db179b50d6b19a1424ed25.svg → app/frontend/svgs/thumbs-up.svg} +0 -0
  271. data/app/frontend/svgs/times.svg +3 -0
  272. data/app/frontend/svgs/trash-sm.svg +3 -0
  273. data/{public/avo-packs/media/svgs/trash-a61412a066e358bcc24494a5080b7255.svg → app/frontend/svgs/trash.svg} +0 -0
  274. data/{public/avo-packs/media/svgs/view-grid-add-d0ee477a044e5d46c0c62af66cb6de77.svg → app/frontend/svgs/view-grid-add.svg} +0 -0
  275. data/{public/avo-packs/media/svgs/view-grid-393669034db69f59497616d5416ae411.svg → app/frontend/svgs/view-grid.svg} +0 -0
  276. data/{public/avo-packs/media/svgs/view-list-8a7a159ca5d892f72cf8c6744a2074e2.svg → app/frontend/svgs/view-list.svg} +0 -0
  277. data/{public/avo-packs/media/svgs/x-circle-c540f9ccfe937ad9b4f662e0b65e47e2.svg → app/frontend/svgs/x-circle.svg} +0 -0
  278. data/app/helpers/avo/actions_helper.rb +4 -0
  279. data/app/helpers/avo/application_helper.rb +156 -3
  280. data/app/helpers/avo/attachments_helper.rb +4 -0
  281. data/app/helpers/avo/resources_helper.rb +101 -0
  282. data/app/mailers/avo/application_mailer.rb +1 -1
  283. data/app/views/avo/actions/show.html.erb +71 -0
  284. data/app/views/avo/attachments/show.html.erb +7 -0
  285. data/app/views/avo/base/_actions.html.erb +36 -0
  286. data/app/views/avo/base/_boolean_filter.html.erb +33 -0
  287. data/app/views/avo/base/_filters.html.erb +37 -0
  288. data/app/views/avo/base/_select_filter.html.erb +20 -0
  289. data/app/views/avo/base/edit.html.erb +1 -0
  290. data/app/views/avo/base/index.html.erb +15 -0
  291. data/app/views/avo/base/new.html.erb +1 -0
  292. data/app/views/avo/base/show.html.erb +3 -0
  293. data/app/views/avo/home/_actions.html.erb +16 -0
  294. data/app/views/avo/home/_docs.html.erb +9 -0
  295. data/app/views/avo/home/_filters.html.erb +16 -0
  296. data/app/views/avo/home/_resources.html.erb +29 -0
  297. data/app/views/avo/home/index.html.erb +54 -3
  298. data/app/views/avo/partials/_a_button.html.erb +7 -0
  299. data/app/views/avo/partials/_a_link.html.erb +7 -0
  300. data/app/views/avo/partials/_alert.html.erb +1 -0
  301. data/app/views/avo/partials/_alerts.html.erb +3 -0
  302. data/app/views/avo/partials/_empty_state.html.erb +17 -0
  303. data/app/views/{partials → avo/partials}/_footer.html.erb +0 -0
  304. data/app/views/{partials → avo/partials}/_header.html.erb +0 -0
  305. data/app/views/avo/partials/_javascript.html.erb +3 -0
  306. data/app/views/{partials → avo/partials}/_logo.html.erb +0 -0
  307. data/app/views/avo/partials/_paginator.html.erb +30 -0
  308. data/app/views/avo/partials/_sortable_component.html.erb +14 -0
  309. data/app/views/avo/partials/_table_header.html.erb +50 -0
  310. data/app/views/avo/partials/_view_toggle_button.html.erb +17 -0
  311. data/app/views/avo/relations/new.html.erb +29 -0
  312. data/app/views/avo/sidebar/_license_warning.html.erb +12 -0
  313. data/app/views/avo/sidebar/_license_warnings.html.erb +6 -0
  314. data/app/views/avo/sidebar/_sidebar.html.erb +23 -0
  315. data/app/views/kaminari/_first_page.html.erb +3 -0
  316. data/app/views/kaminari/_last_page.html.erb +3 -0
  317. data/app/views/kaminari/_next_page.html.erb +9 -0
  318. data/app/views/kaminari/_page.html.erb +12 -0
  319. data/app/views/kaminari/_prev_page.html.erb +9 -0
  320. data/app/views/layouts/avo/_filter_wrapper.html.erb +8 -0
  321. data/app/views/layouts/avo/application.html.erb +28 -40
  322. data/app/views/layouts/avo/application_vue.html.erb +61 -0
  323. data/avo.gemspec +5 -2
  324. data/bin/helpers.rb +34 -0
  325. data/bin/init +35 -0
  326. data/bin/rspec +8 -0
  327. data/bin/spring +17 -0
  328. data/bin/test +21 -0
  329. data/bin/webpack +9 -10
  330. data/bin/webpack-dev-server +9 -10
  331. data/config/cable.yml +11 -0
  332. data/config/initializers/inline_svg.rb +33 -0
  333. data/config/initializers/pagy.rb +1 -0
  334. data/config/routes.rb +22 -18
  335. data/config/spring.rb +7 -0
  336. data/config/webpack/environment.js +14 -10
  337. data/config/webpacker.yml +5 -4
  338. data/config/webpacker_packed.yml +86 -0
  339. data/db/factories.rb +10 -3
  340. data/db/migrate/20210305082639_add_url_to_teams.rb +5 -0
  341. data/lib/avo.rb +3 -0
  342. data/lib/avo/app/action.rb +51 -45
  343. data/lib/avo/app/actions_loader.rb +11 -0
  344. data/lib/avo/app/app.rb +57 -45
  345. data/lib/avo/app/fields/badge_field.rb +3 -30
  346. data/lib/avo/app/fields/belongs_to.rb +38 -50
  347. data/lib/avo/app/fields/boolean_field.rb +8 -10
  348. data/lib/avo/app/fields/boolean_group_field.rb +13 -11
  349. data/lib/avo/app/fields/code_field.rb +11 -9
  350. data/lib/avo/app/fields/country_field.rb +12 -21
  351. data/lib/avo/app/fields/currency_field.rb +1 -2
  352. data/lib/avo/app/fields/date_field.rb +16 -11
  353. data/lib/avo/app/fields/date_time_field.rb +38 -0
  354. data/lib/avo/app/fields/external_image_field.rb +23 -0
  355. data/lib/avo/app/fields/field.rb +76 -84
  356. data/lib/avo/app/fields/field_extensions/visible_in_different_views.rb +5 -5
  357. data/lib/avo/app/fields/file_field.rb +8 -14
  358. data/lib/avo/app/fields/files_field.rb +10 -18
  359. data/lib/avo/app/fields/gravatar_field.rb +18 -13
  360. data/lib/avo/app/fields/has_and_belongs_to_many.rb +13 -24
  361. data/lib/avo/app/fields/has_many.rb +13 -26
  362. data/lib/avo/app/fields/has_one.rb +23 -30
  363. data/lib/avo/app/fields/heading_field.rb +2 -8
  364. data/lib/avo/app/fields/hidden_field.rb +2 -2
  365. data/lib/avo/app/fields/id_field.rb +2 -8
  366. data/lib/avo/app/fields/key_value_field.rb +5 -2
  367. data/lib/avo/app/fields/markdown_field.rb +1 -1
  368. data/lib/avo/app/fields/number_field.rb +5 -12
  369. data/lib/avo/app/fields/password_field.rb +1 -1
  370. data/lib/avo/app/fields/select_field.rb +33 -10
  371. data/lib/avo/app/fields/status_field.rb +9 -7
  372. data/lib/avo/app/fields/text_field.rb +1 -8
  373. data/lib/avo/app/fields/textarea_field.rb +2 -9
  374. data/lib/avo/app/fields/trix_field.rb +3 -7
  375. data/lib/avo/app/fields_loader.rb +29 -0
  376. data/lib/avo/app/licensing/hq.rb +3 -3
  377. data/lib/avo/app/licensing/license.rb +1 -1
  378. data/lib/avo/app/resource.rb +184 -126
  379. data/lib/avo/app/services/authorization_service.rb +68 -6
  380. data/lib/avo/app/services/panel_service.rb +25 -0
  381. data/lib/avo/configuration.rb +7 -1
  382. data/lib/avo/engine.rb +4 -1
  383. data/lib/avo/version.rb +1 -1
  384. data/lib/generators/avo/controller_generator.rb +13 -0
  385. data/lib/generators/avo/resource_generator.rb +16 -2
  386. data/lib/generators/avo/templates/initializer/avo.rb +3 -0
  387. data/lib/generators/avo/templates/locales/avo.en.yml +5 -1
  388. data/lib/generators/avo/templates/resource/%plural_name%_controller.tt +2 -0
  389. data/lib/generators/avo/templates/resource/%singular_name%.tt +20 -0
  390. data/public/avo-packs/css/application-3598cfbb.css +6 -0
  391. data/public/avo-packs/css/application-3598cfbb.css.br +0 -0
  392. data/public/avo-packs/css/application-3598cfbb.css.gz +0 -0
  393. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js +2 -0
  394. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.br +0 -0
  395. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.gz +0 -0
  396. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map +1 -0
  397. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map.br +0 -0
  398. data/public/avo-packs/js/1-0565987ca0c3045602ad.chunk.js.map.gz +0 -0
  399. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js +26 -0
  400. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.LICENSE.txt +77 -0
  401. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.br +0 -0
  402. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.gz +0 -0
  403. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.map +1 -0
  404. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.map.br +0 -0
  405. data/public/avo-packs/js/application-6ba2bd1bca05d69b96e0.js.map.gz +0 -0
  406. data/public/avo-packs/manifest.json +17 -46
  407. data/public/avo-packs/manifest.json.br +0 -0
  408. data/public/avo-packs/manifest.json.gz +0 -0
  409. data/public/avo-packs/media/fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf +0 -0
  410. data/public/avo-packs/media/fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf.br +0 -0
  411. data/public/avo-packs/media/fonts/nunito-v16-latin-700-2cc22f9c0cf217cbfc371f3b74992305.ttf.gz +0 -0
  412. data/public/avo-packs/media/fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg +388 -0
  413. data/public/avo-packs/media/fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg.br +0 -0
  414. data/public/avo-packs/media/fonts/nunito-v16-latin-700-35bd1c96bc2e402cf22ea812ae067995.svg.gz +0 -0
  415. data/public/avo-packs/media/fonts/nunito-v16-latin-700-412073df419ad5f6f8f2ea76eb4aced9.woff2 +0 -0
  416. data/public/avo-packs/media/fonts/nunito-v16-latin-700-7c472b19cb573f537bad8ef62ca917ac.woff +0 -0
  417. data/public/avo-packs/media/fonts/nunito-v16-latin-700-df7e79af617f98cd3b95d320e8b2a1af.eot +0 -0
  418. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg +380 -0
  419. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg.br +0 -0
  420. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-00fbd8a72a3708b8314cce5f0515640e.svg.gz +0 -0
  421. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-2fae1e2418251b68fe5d0505ab93dd5c.eot +0 -0
  422. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-bcf84d6cb8a0ac214c8c14ba9af834f3.woff2 +0 -0
  423. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-cb632c9fe211ba2c2bf1564c9a9295cc.woff +0 -0
  424. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf +0 -0
  425. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf.br +0 -0
  426. data/public/avo-packs/media/fonts/nunito-v16-latin-regular-df8c4bee41b6ca0ed2b7b71456ed7fbb.ttf.gz +0 -0
  427. metadata +421 -134
  428. data/app/controllers/avo/filters_controller.rb +0 -19
  429. data/app/views/avo/home/router.html.erb +0 -8
  430. data/app/views/layouts/avo/_javascript.html.erb +0 -8
  431. data/app/views/layouts/avo/_translations.html.erb +0 -5
  432. data/config/webpack/loaders/vue-post-css.js +0 -20
  433. data/config/webpack/loaders/vue-svg.js +0 -21
  434. data/config/webpack/loaders/vue.js +0 -6
  435. data/lib/avo/app/fields/datetime_field.rb +0 -34
  436. data/lib/avo/app/resource_actions.rb +0 -18
  437. data/lib/avo/app/resource_fields.rb +0 -26
  438. data/lib/avo/app/resource_filters.rb +0 -18
  439. data/lib/generators/avo/templates/resource.rb +0 -14
  440. data/public/avo-packs/css/application-c9595d99.css +0 -3
  441. data/public/avo-packs/css/application-c9595d99.css.br +0 -0
  442. data/public/avo-packs/css/application-c9595d99.css.gz +0 -0
  443. data/public/avo-packs/js/application-54cdc48985a045c704ef.js +0 -3
  444. data/public/avo-packs/js/application-54cdc48985a045c704ef.js.LICENSE.txt +0 -767
  445. data/public/avo-packs/js/application-54cdc48985a045c704ef.js.br +0 -0
  446. data/public/avo-packs/js/application-54cdc48985a045c704ef.js.gz +0 -0
  447. data/public/avo-packs/js/application-54cdc48985a045c704ef.js.map +0 -1
  448. data/public/avo-packs/js/application-54cdc48985a045c704ef.js.map.br +0 -0
  449. data/public/avo-packs/js/application-54cdc48985a045c704ef.js.map.gz +0 -0
  450. data/public/avo-packs/media/font/fontello-068ca2b3.ttf +0 -0
  451. data/public/avo-packs/media/font/fontello-068ca2b3.ttf.br +0 -0
  452. data/public/avo-packs/media/font/fontello-068ca2b3.ttf.gz +0 -0
  453. data/public/avo-packs/media/font/fontello-8d4a4e6f.woff2 +0 -0
  454. data/public/avo-packs/media/font/fontello-9354499c.svg +0 -72
  455. data/public/avo-packs/media/font/fontello-9354499c.svg.br +0 -0
  456. data/public/avo-packs/media/font/fontello-9354499c.svg.gz +0 -0
  457. data/public/avo-packs/media/font/fontello-a782baa8.woff +0 -0
  458. data/public/avo-packs/media/font/fontello-e73a0647.eot +0 -0
  459. data/public/avo-packs/media/font/fontello-e73a0647.eot.br +0 -0
  460. data/public/avo-packs/media/font/fontello-e73a0647.eot.gz +0 -0
  461. data/public/avo-packs/media/svgs/arrow-circle-right-1ad1e15ec9a7aa54b67d126566a5aa2d.svg.br +0 -0
  462. data/public/avo-packs/media/svgs/arrow-circle-right-1ad1e15ec9a7aa54b67d126566a5aa2d.svg.gz +0 -0
  463. data/public/avo-packs/media/svgs/arrow-left-0e8e808ff771a62a348d0232c8ccf539.svg.br +0 -0
  464. data/public/avo-packs/media/svgs/avocado-bca389be7cf81162df902dfbd09b8adb.svg.br +0 -0
  465. data/public/avo-packs/media/svgs/avocado-bca389be7cf81162df902dfbd09b8adb.svg.gz +0 -0
  466. data/public/avo-packs/media/svgs/check-circle-be9e4dcbd25467ae9a3d3c6c5c7a09fa.svg.br +0 -0
  467. data/public/avo-packs/media/svgs/chevron-down-01208b17a1f70a1bb8d82bba131da4f4.svg.br +0 -0
  468. data/public/avo-packs/media/svgs/chevron-down-01208b17a1f70a1bb8d82bba131da4f4.svg.gz +0 -0
  469. data/public/avo-packs/media/svgs/chevron-up-25ecf340dd76966d5ed63c85c025befc.svg.br +0 -0
  470. data/public/avo-packs/media/svgs/chevron-up-25ecf340dd76966d5ed63c85c025befc.svg.gz +0 -0
  471. data/public/avo-packs/media/svgs/code-69010c6ddb6ad50be8677f16468c51f8.svg.br +0 -0
  472. data/public/avo-packs/media/svgs/color-swatch-60cf90fb6b5386e38f3b003f34e7ecbe.svg.br +0 -0
  473. data/public/avo-packs/media/svgs/color-swatch-60cf90fb6b5386e38f3b003f34e7ecbe.svg.gz +0 -0
  474. data/public/avo-packs/media/svgs/download-c6ae3f12364a467c28cbf41dc90afbdd.svg.br +0 -0
  475. data/public/avo-packs/media/svgs/download-c6ae3f12364a467c28cbf41dc90afbdd.svg.gz +0 -0
  476. data/public/avo-packs/media/svgs/edit-46c6dbef52ba6ddfc9afbc37186dfa2b.svg.br +0 -0
  477. data/public/avo-packs/media/svgs/edit-46c6dbef52ba6ddfc9afbc37186dfa2b.svg.gz +0 -0
  478. data/public/avo-packs/media/svgs/exclamation-8d1c0baa390a8df9bb52176011eb5892.svg.br +0 -0
  479. data/public/avo-packs/media/svgs/exclamation-8d1c0baa390a8df9bb52176011eb5892.svg.gz +0 -0
  480. data/public/avo-packs/media/svgs/eye-cc6f85c70ebed6929712a5c7d51f102d.svg.br +0 -1
  481. data/public/avo-packs/media/svgs/eye-cc6f85c70ebed6929712a5c7d51f102d.svg.gz +0 -0
  482. data/public/avo-packs/media/svgs/filter-0007cddbc85cfe207f9876d4d184444a.svg.br +0 -0
  483. data/public/avo-packs/media/svgs/filter-0007cddbc85cfe207f9876d4d184444a.svg.gz +0 -0
  484. data/public/avo-packs/media/svgs/fire-782f08df79993311b6d907e12d9ebe9f.svg.br +0 -0
  485. data/public/avo-packs/media/svgs/fire-782f08df79993311b6d907e12d9ebe9f.svg.gz +0 -0
  486. data/public/avo-packs/media/svgs/game-board-6c59fe04181ac9954356c9f1f4d28053.svg.br +0 -0
  487. data/public/avo-packs/media/svgs/game-board-6c59fe04181ac9954356c9f1f4d28053.svg.gz +0 -0
  488. data/public/avo-packs/media/svgs/globe-dfd9977c9d65814d2fc576904406dd08.svg.br +0 -0
  489. data/public/avo-packs/media/svgs/globe-dfd9977c9d65814d2fc576904406dd08.svg.gz +0 -0
  490. data/public/avo-packs/media/svgs/library-7d391192a15da64fbb527908c9e035c7.svg.br +0 -0
  491. data/public/avo-packs/media/svgs/photograph-9f37f1f5e6a48e68ce3b7d9cbe7b6fad.svg.br +0 -2
  492. data/public/avo-packs/media/svgs/photograph-9f37f1f5e6a48e68ce3b7d9cbe7b6fad.svg.gz +0 -0
  493. data/public/avo-packs/media/svgs/plus-530f0af27b9f1a4552454233c2f9a641.svg.br +0 -0
  494. data/public/avo-packs/media/svgs/plus-circle-b379b2a2aa803511ae5945b6fd323204.svg.br +0 -0
  495. data/public/avo-packs/media/svgs/question-mark-circle-3ece1d61091827910cdd097db711062b.svg.br +0 -0
  496. data/public/avo-packs/media/svgs/question-mark-circle-3ece1d61091827910cdd097db711062b.svg.gz +0 -0
  497. data/public/avo-packs/media/svgs/save-e54acd7ac9646053e36382776f822756.svg.br +0 -0
  498. data/public/avo-packs/media/svgs/save-e54acd7ac9646053e36382776f822756.svg.gz +0 -0
  499. data/public/avo-packs/media/svgs/selector-b43b3957d7cc121d06be14312613c218.svg.br +0 -0
  500. data/public/avo-packs/media/svgs/sort-ascending-f5bc0761702809cab20b0ea3065cb88a.svg.br +0 -0
  501. data/public/avo-packs/media/svgs/sort-descending-1c8ddc56c72be6781e59d808f9d06203.svg.br +0 -0
  502. data/public/avo-packs/media/svgs/switch-horizontal-d23337f0fb533a86d14b746d25ad48ae.svg.br +0 -2
  503. data/public/avo-packs/media/svgs/switch-horizontal-d23337f0fb533a86d14b746d25ad48ae.svg.gz +0 -0
  504. data/public/avo-packs/media/svgs/thumbs-down-44f83eacbf5b8fe0f2f085da75866ce0.svg.br +0 -0
  505. data/public/avo-packs/media/svgs/thumbs-down-44f83eacbf5b8fe0f2f085da75866ce0.svg.gz +0 -0
  506. data/public/avo-packs/media/svgs/thumbs-up-b866900017db179b50d6b19a1424ed25.svg.br +0 -4
  507. data/public/avo-packs/media/svgs/thumbs-up-b866900017db179b50d6b19a1424ed25.svg.gz +0 -0
  508. data/public/avo-packs/media/svgs/times-539256e95a00360c3bbc6160c6b695cd.svg +0 -1
  509. data/public/avo-packs/media/svgs/times-539256e95a00360c3bbc6160c6b695cd.svg.br +0 -0
  510. data/public/avo-packs/media/svgs/times-539256e95a00360c3bbc6160c6b695cd.svg.gz +0 -0
  511. data/public/avo-packs/media/svgs/trash-a61412a066e358bcc24494a5080b7255.svg.br +0 -0
  512. data/public/avo-packs/media/svgs/trash-a61412a066e358bcc24494a5080b7255.svg.gz +0 -0
  513. data/public/avo-packs/media/svgs/view-grid-393669034db69f59497616d5416ae411.svg.br +0 -1
  514. data/public/avo-packs/media/svgs/view-grid-393669034db69f59497616d5416ae411.svg.gz +0 -0
  515. data/public/avo-packs/media/svgs/view-grid-add-d0ee477a044e5d46c0c62af66cb6de77.svg.br +0 -0
  516. data/public/avo-packs/media/svgs/view-grid-add-d0ee477a044e5d46c0c62af66cb6de77.svg.gz +0 -0
  517. data/public/avo-packs/media/svgs/view-list-8a7a159ca5d892f72cf8c6744a2074e2.svg.br +0 -3
  518. data/public/avo-packs/media/svgs/view-list-8a7a159ca5d892f72cf8c6744a2074e2.svg.gz +0 -0
  519. data/public/avo-packs/media/svgs/x-circle-c540f9ccfe937ad9b4f662e0b65e47e2.svg.br +0 -0
  520. data/public/avo-packs/media/svgs/x-circle-c540f9ccfe937ad9b4f662e0b65e47e2.svg.gz +0 -0
@@ -1,10 +1,12 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class BooleanField < Field
4
+ attr_reader :true_value
5
+ attr_reader :false_value
6
+
4
7
  def initialize(name, **args, &block)
5
8
  @defaults = {
6
- sortable: true,
7
- component: 'boolean-field',
9
+ partial_name: 'boolean-field',
8
10
  computable: true,
9
11
  }
10
12
 
@@ -14,12 +16,8 @@ module Avo
14
16
  @false_value = args[:false_value].present? ? args[:false_value] : false
15
17
  end
16
18
 
17
- def hydrate_field(fields, model, resource, view)
18
- {
19
- value: resolve_attribute(fields[:value]),
20
- true_value: @true_value,
21
- false_value: @false_value,
22
- }
19
+ def value
20
+ resolve_attribute super
23
21
  end
24
22
 
25
23
  def resolve_attribute(value)
@@ -27,11 +25,11 @@ module Avo
27
25
  end
28
26
 
29
27
  def truthy_values
30
- ['true', @true_value]
28
+ ['true', '1', @true_value]
31
29
  end
32
30
 
33
31
  def falsy_values
34
- ['false', @false_value]
32
+ ['false', '0', @false_value]
35
33
  end
36
34
  end
37
35
  end
@@ -1,32 +1,34 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class BooleanGroupField < Field
4
+ attr_reader :options
5
+
4
6
  def initialize(name, **args, &block)
5
7
  @defaults = {
6
- component: 'boolean-group-field',
8
+ partial_name: 'boolean-group-field',
7
9
  computable: true,
8
10
  }
9
11
 
10
12
  super(name, **args, &block)
11
13
 
12
- @is_object_param = true
13
-
14
14
  @options = args[:options].present? ? args[:options] : {}
15
15
  end
16
16
 
17
- def hydrate_field(fields, model, resource, view)
18
- {
19
- options: @options,
20
- }
17
+ def to_permitted_param
18
+ ["#{id}": [] ]
21
19
  end
22
20
 
23
21
  def fill_field(model, key, value)
24
- return model unless value.is_a? ActionController::Parameters
25
-
26
22
  new_value = {}
27
23
 
28
- value.each do |key, value|
29
- new_value[key] = ActiveModel::Type::Boolean.new.cast value
24
+ # Filter out the empty ("") value boolean group generates
25
+ value = value.filter do |arr_value|
26
+ arr_value.present?
27
+ end
28
+
29
+ # Cast values to booleans
30
+ options.each do |id, label|
31
+ new_value[id] = value.include? id.to_s
30
32
  end
31
33
 
32
34
  model[id] = new_value
@@ -1,9 +1,16 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class CodeField < Field
4
+ attr_reader :height
5
+ attr_reader :language
6
+ attr_reader :theme
7
+ attr_reader :tab_size
8
+ attr_reader :indent_with_tabs
9
+ attr_reader :line_wrapping
10
+
4
11
  def initialize(name, **args, &block)
5
12
  @defaults = {
6
- component: 'code-field',
13
+ partial_name: 'code-field',
7
14
  }
8
15
 
9
16
  hide_on :index
@@ -13,14 +20,9 @@ module Avo
13
20
  @language = args[:language].present? ? args[:language].to_s : 'javascript'
14
21
  @theme = args[:theme].present? ? args[:theme].to_s : 'material-darker'
15
22
  @height = args[:height].present? ? args[:height].to_s : 'auto'
16
- end
17
-
18
- def hydrate_field(fields, model, resource, view)
19
- {
20
- language: @language,
21
- theme: @theme,
22
- height: @height,
23
- }
23
+ @tab_size = args[:tab_size].present? ? args[:tab_size] : 2
24
+ @indent_with_tabs = args[:indent_with_tabs].present? ? args[:indent_with_tabs] : false
25
+ @line_wrapping = args[:line_wrapping].present? ? args[:line_wrapping] : true
24
26
  end
25
27
  end
26
28
  end
@@ -1,10 +1,12 @@
1
1
  module Avo
2
2
  module Fields
3
3
  class CountryField < Field
4
+ attr_reader :countries
5
+ attr_reader :display_code
6
+
4
7
  def initialize(name, **args, &block)
5
8
  @defaults = {
6
- sortable: true,
7
- component: 'country-field',
9
+ partial_name: 'country-field',
8
10
  placeholder: I18n.t('avo.choose_a_country'),
9
11
  }
10
12
 
@@ -14,27 +16,16 @@ module Avo
14
16
  @display_code = args[:display_code].present? ? args[:display_code] : false
15
17
  end
16
18
 
17
- def hydrate_field(fields, model, resource, view)
18
- if [:show, :index].include? view
19
- value = fields[:computed_value] || fields[:value]
20
-
21
- # Just return the DB code.
22
- if @display_code
23
- return {
24
- value: value
25
- }
19
+ def select_options
20
+ if @display_code
21
+ countries.map do |code, name|
22
+ [code, code]
23
+ end
24
+ else
25
+ countries.map do |code, name|
26
+ [name, code]
26
27
  end
27
-
28
- # Compute and get the translated value.
29
- return {
30
- value: @countries[value],
31
- }
32
28
  end
33
-
34
- {
35
- countries: @countries,
36
- display_code: @display_code
37
- }
38
29
  end
39
30
  end
40
31
  end
@@ -3,8 +3,7 @@ module Avo
3
3
  class CurrencyField < Field
4
4
  def initialize(name, **args, &block)
5
5
  @defaults = {
6
- sortable: true,
7
- component: 'currency-field',
6
+ partial_name: 'currency-field',
8
7
  computable: true,
9
8
  }
10
9
 
@@ -3,29 +3,34 @@ require_relative 'text_field'
3
3
  module Avo
4
4
  module Fields
5
5
  class DateField < TextField
6
+ attr_reader :first_day_of_week
7
+ attr_reader :picker_format
8
+ attr_reader :format
9
+ attr_reader :placeholder
10
+ attr_reader :relative
11
+
6
12
  def initialize(name, **args, &block)
7
13
  @defaults = {
8
- sortable: true,
9
- component: 'datetime-field',
14
+ partial_name: 'date-field',
10
15
  }
11
16
 
12
17
  super(name, **args, &block)
13
18
 
14
19
  @first_day_of_week = args[:first_day_of_week].present? ? args[:first_day_of_week].to_i : 0
15
20
  @picker_format = args[:picker_format].present? ? args[:picker_format] : 'Y-m-d'
16
- @format = args[:format].present? ? args[:format] : 'YYYY-MM-DD'
21
+ @format = args[:format].present? ? args[:format] : :long
17
22
  @placeholder = args[:placeholder].present? ? args[:placeholder] : ''
18
23
  @relative = args[:relative].present? ? args[:relative] : false
19
24
  end
20
25
 
21
- def hydrate_field(fields, model, resource, view)
22
- {
23
- first_day_of_week: @first_day_of_week,
24
- picker_format: @picker_format,
25
- format: @format,
26
- placeholder: @placeholder,
27
- relative: @relative,
28
- }
26
+ def formatted_value
27
+ return if value.blank?
28
+
29
+ if @format.is_a?(Symbol)
30
+ value.to_s(@format)
31
+ else
32
+ value.strftime(@format)
33
+ end
29
34
  end
30
35
  end
31
36
  end
@@ -0,0 +1,38 @@
1
+ require_relative 'date_field'
2
+
3
+ module Avo
4
+ module Fields
5
+ class DateTimeField < DateField
6
+ attr_reader :format
7
+ attr_reader :time_24hr
8
+ attr_reader :timezone
9
+
10
+ def initialize(name, **args, &block)
11
+ super(name, **args, &block)
12
+
13
+ @partial_name = 'date-time-field'
14
+ @picker_format = args[:picker_format].present? ? args[:picker_format] : 'Y-m-d H:i:S'
15
+ @time_24hr = args[:time_24hr].present? ? args[:time_24hr] : false
16
+ @timezone = args[:timezone].present? ? args[:timezone] : Rails.application.config.time_zone
17
+ end
18
+
19
+ def formatted_value
20
+ return nil if value.nil?
21
+
22
+ if @format.is_a?(Symbol)
23
+ value.to_time.in_time_zone(timezone).to_s(@format)
24
+ else
25
+ value.to_time.in_time_zone(timezone).strftime(@format)
26
+ end
27
+ end
28
+
29
+ def fill_field(model, key, value)
30
+ return model if value.blank?
31
+
32
+ model[id] = value.to_time.in_time_zone(Rails.application.config.time_zone)
33
+
34
+ model
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,23 @@
1
+ module Avo
2
+ module Fields
3
+ class ExternalImageField < Field
4
+ attr_reader :width
5
+ attr_reader :height
6
+ attr_reader :radius
7
+
8
+ def initialize(name, **args, &block)
9
+ @defaults = {
10
+ partial_name: 'external-image-field',
11
+ computable: true,
12
+ }.merge(@defaults || {})
13
+
14
+ super(name, **args, &block)
15
+
16
+ @link_to_resource = args[:link_to_resource].present? ? args[:link_to_resource] : false
17
+ @width = 32
18
+ @height = 32
19
+ @radius = 0
20
+ end
21
+ end
22
+ end
23
+ end
@@ -10,7 +10,8 @@ module Avo
10
10
  attr_accessor :id
11
11
  attr_accessor :name
12
12
  attr_accessor :translation_key
13
- attr_accessor :component
13
+ attr_accessor :partial_name
14
+ attr_accessor :partial_path
14
15
  attr_accessor :updatable
15
16
  attr_accessor :sortable
16
17
  attr_accessor :required
@@ -18,13 +19,25 @@ module Avo
18
19
  attr_accessor :nullable
19
20
  attr_accessor :null_values
20
21
  attr_accessor :format_using
21
- attr_accessor :computable
22
- attr_accessor :is_array_param
23
- attr_accessor :is_object_param
22
+ attr_accessor :computed # if block is present
23
+ attr_accessor :computable # if allowed to be computable
24
+ attr_accessor :computed_value # the value after computation
24
25
  attr_accessor :block
25
26
  attr_accessor :placeholder
26
27
  attr_accessor :help
27
28
  attr_accessor :default
29
+ attr_accessor :can_see
30
+ attr_accessor :model
31
+ attr_accessor :resource
32
+ attr_accessor :view
33
+ attr_accessor :user
34
+ attr_accessor :action
35
+ attr_accessor :grid_position
36
+ attr_accessor :meta
37
+ attr_accessor :panel_name
38
+ attr_accessor :link_to_resource
39
+
40
+ @meta = {}
28
41
 
29
42
  def initialize(id, **args, &block)
30
43
  super(id, **args, &block)
@@ -39,7 +52,7 @@ module Avo
39
52
  name: id.to_s.humanize(keep_id_suffix: true),
40
53
  translation_key: nil,
41
54
  block: block,
42
- component: 'field',
55
+ partial_name: 'field',
43
56
  required: false,
44
57
  readonly: false,
45
58
  updatable: true,
@@ -47,11 +60,16 @@ module Avo
47
60
  nullable: false,
48
61
  null_values: null_values,
49
62
  computable: true,
50
- is_array_param: false,
63
+ computed: block.present?,
64
+ computed_value: false,
51
65
  format_using: false,
52
- placeholder: id.to_s.camelize,
66
+ placeholder: id.to_s.humanize,
53
67
  help: nil,
54
68
  default: nil,
69
+ can_see: nil,
70
+ grid_position: false,
71
+ meta: {},
72
+ panel_name: nil,
55
73
  }
56
74
 
57
75
  # Set the values in the following order
@@ -68,94 +86,44 @@ module Avo
68
86
  hide_on args[:hide_on] if args[:hide_on].present?
69
87
  only_on args[:only_on] if args[:only_on].present?
70
88
  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
71
93
  end
72
94
 
73
- def fetch_for_resource(model, resource, view)
74
- fields = {
75
- id: id,
76
- computed: block.present?,
77
- }
95
+ def hydrate(model: nil, resource: nil, action: nil, view: nil, panel_name: nil, user: nil)
96
+ @model = model if model.present?
97
+ @view = view if view.present?
98
+ @resource = resource if resource.present?
99
+ @action = action if action.present?
100
+ @user = user if user.present?
101
+ @panel_name = panel_name if panel_name.present?
78
102
 
79
- # Fill the properties with values
80
- @field_properties.each do |name, value|
81
- fields[name] = self.send(name)
82
- end
103
+ self
104
+ end
83
105
 
84
- # Set model value
85
- fields[:value] = model.send(id) if model_or_class(model) == 'model' and model.methods.include? id
106
+ def value
107
+ # Get model value
108
+ value = @model.send(id) if model_or_class(@model) == 'model' and @model.respond_to? id
86
109
 
87
- # Set default value for create view
88
- if view === :create
89
- if fields[:default].present? and fields[:default].respond_to? :call
90
- fields[:value] = fields[:default].call model, resource, view, self
110
+ if @view === :new or @action.present?
111
+ if default.present? and default.respond_to? :call
112
+ value = default.call @model, @resource, @view, self
91
113
  else
92
- fields[:value] = fields[:default]
114
+ value = default
93
115
  end
94
116
  end
95
117
 
96
118
  # Run callback block if present
97
- if computable and @block.present?
98
- fields[:computed_value] = @block.call model, resource, view, self
99
-
100
- fields[:value] = fields[:computed_value]
119
+ if computable and block.present?
120
+ value = block.call @model, @resource, @view, self
101
121
  end
102
122
 
103
- # Run each field's custom hydration
104
- fields.merge! self.hydrate_field(fields, model, resource, view)
105
-
106
123
  # Run the value through resolver if present
107
- fields[:value] = @format_using.call fields[:value] if @format_using.present?
108
-
109
- fields
110
- end
111
-
112
- def fetch_for_action(model, resource)
113
- fields = {
114
- id: id,
115
- # computed: block.present?,
116
- }
117
-
118
- # Fill the properties with values
119
- @field_properties.each do |name, value|
120
- fields[name] = self.send(name)
121
- end
122
-
123
- # Set initial value
124
- # fields[:value] = model.send(id) if model_or_class(model) == 'model' and model.methods.include? id
125
-
126
- # Set default value for create view
127
- if fields[:default].present? and fields[:default].respond_to? :call
128
- fields[:value] = fields[:default].call model, resource, self
129
- else
130
- fields[:value] = fields[:default]
131
- end
132
-
133
- # Run callback block if present
134
- # if computable and @block.present?
135
- # fields[:computed_value] = @block.call model, resource, self
136
-
137
- # fields[:value] = fields[:computed_value]
138
- # end
124
+ value = @format_using.call value if @format_using.present?
139
125
 
140
- # Run each field's custom hydration
141
- fields.merge! self.hydrate_field(fields, model, resource, :create)
142
-
143
- # Run the value through resolver if present
144
- fields[:value] = @format_using.call fields[:value] if @format_using.present?
145
-
146
- fields
147
- end
148
-
149
- def hydrate_field(fields, model, resource)
150
- final_value = fields[:value]
151
-
152
- if fields[:computed_value].present?
153
- final_value = fields[:computed_value]
154
- end
155
-
156
- {
157
- value: final_value
158
- }
126
+ value
159
127
  end
160
128
 
161
129
  def fill_field(model, key, value)
@@ -166,10 +134,16 @@ module Avo
166
134
  model
167
135
  end
168
136
 
137
+ def partial_path_for(view)
138
+ return @custom_partials[view] if @custom_partials.present? and @custom_partials[view].present?
139
+
140
+ "avo/fields/#{view}/#{partial_name}"
141
+ end
142
+
169
143
  # Try to see if the field has a different database ID than it's name
170
144
  def database_id(model)
171
145
  begin
172
- foreign_key(model)
146
+ foreign_key
173
147
  rescue => exception
174
148
  id
175
149
  end
@@ -183,12 +157,30 @@ module Avo
183
157
  value
184
158
  end
185
159
 
160
+ def to_permitted_param
161
+ id.to_sym
162
+ end
163
+
164
+ def component_name(view = :index)
165
+ "Avo::#{view.to_s.classify}::Fields::#{partial_name.gsub('-field', '').underscore.camelize}FieldComponent"
166
+ end
167
+
168
+ def model_errors
169
+ return {} if model.nil?
170
+
171
+ model.errors
172
+ end
173
+
174
+ def type
175
+ self.class.name.demodulize.to_s.underscore
176
+ end
177
+
186
178
  private
187
179
  def model_or_class(model)
188
180
  if model.class == String
189
- return 'class'
181
+ 'class'
190
182
  else
191
- return 'model'
183
+ 'model'
192
184
  end
193
185
  end
194
186
  end