@bildvitta/quasar-ui-asteroid 3.17.0-beta.20 → 3.17.0-beta.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (315) hide show
  1. package/package.json +1 -1
  2. package/src/assets/sounds/nave-notification.mp3 +0 -0
  3. package/src/asteroid.js +4 -4
  4. package/src/components/actions/QasActions.vue +81 -81
  5. package/src/components/actions/QasActions.yml +34 -34
  6. package/src/components/actions-menu/QasActionsMenu.vue +251 -251
  7. package/src/components/actions-menu/QasActionsMenu.yml +89 -89
  8. package/src/components/actions-menu/composables/use-delete.js +30 -30
  9. package/src/components/actions-menu/composables/use-double-split-actions.js +42 -42
  10. package/src/components/actions-menu/composables/use-options-actions.js +27 -27
  11. package/src/components/actions-menu/composables/use-single-action.js +17 -17
  12. package/src/components/actions-menu/composables/use-single-split-actions.js +35 -35
  13. package/src/components/actions-menu/composables/use-tooltips.js +43 -43
  14. package/src/components/actions-menu/utils/get-label.js +3 -3
  15. package/src/components/actions-menu/utils/set-click-handler.js +6 -6
  16. package/src/components/alert/QasAlert.test.js +43 -43
  17. package/src/components/alert/QasAlert.vue +110 -110
  18. package/src/components/alert/QasAlert.yml +39 -39
  19. package/src/components/app-bar/QasAppBar.vue +119 -119
  20. package/src/components/app-bar/QasAppBar.yml +44 -44
  21. package/src/components/app-menu/QasAppMenu.vue +392 -392
  22. package/src/components/app-menu/QasAppMenu.yml +73 -73
  23. package/src/components/app-menu/composables/use-app-menu-dropdown.js +71 -71
  24. package/src/components/app-menu/composables/use-app-user.js +49 -49
  25. package/src/components/app-menu/composables/use-development-badge.js +23 -23
  26. package/src/components/app-menu/private/PvAppMenuDropdown.vue +71 -71
  27. package/src/components/app-menu/private/PvAppMenuHelpChat.vue +222 -222
  28. package/src/components/app-user/QasAppUser.vue +281 -281
  29. package/src/components/app-user/QasAppUser.yml +56 -56
  30. package/src/components/avatar/QasAvatar.vue +95 -95
  31. package/src/components/avatar/QasAvatar.yml +38 -38
  32. package/src/components/avatar/enums/AvatarColors.js +10 -10
  33. package/src/components/badge/QasBadge.vue +87 -87
  34. package/src/components/badge/QasBadge.yml +55 -55
  35. package/src/components/board-generator/QasBoardGenerator.vue +712 -712
  36. package/src/components/board-generator/QasBoardGenerator.yml +167 -167
  37. package/src/components/box/QasBox.vue +51 -51
  38. package/src/components/box/QasBox.yml +29 -29
  39. package/src/components/breakline/QasBreakline.vue +38 -38
  40. package/src/components/breakline/QasBreakline.yml +25 -25
  41. package/src/components/btn/QasBtn.vue +148 -148
  42. package/src/components/btn/QasBtn.yml +48 -48
  43. package/src/components/btn-dropdown/QasBtnDropdown.vue +146 -146
  44. package/src/components/btn-dropdown/QasBtnDropdown.yml +59 -59
  45. package/src/components/card/QasCard.vue +132 -132
  46. package/src/components/card/QasCard.yml +44 -44
  47. package/src/components/card-image/QasCardImage.vue +95 -95
  48. package/src/components/card-image/QasCardImage.yml +48 -48
  49. package/src/components/chart-view/QasChartView.vue +441 -441
  50. package/src/components/chart-view/QasChartView.yml +109 -109
  51. package/src/components/chart-view/config/charts/bar.js +45 -45
  52. package/src/components/chart-view/config/charts/doughnut.js +43 -43
  53. package/src/components/chart-view/config/charts/index.js +9 -9
  54. package/src/components/chart-view/config/charts/line.js +57 -57
  55. package/src/components/chart-view/config/defaults/colors.js +19 -19
  56. package/src/components/chart-view/config/defaults/font.js +5 -5
  57. package/src/components/chart-view/config/defaults/index.js +2 -2
  58. package/src/components/chart-view/config/index.js +3 -3
  59. package/src/components/chart-view/config/plugins/index.js +3 -3
  60. package/src/components/chart-view/config/plugins/legend.js +9 -9
  61. package/src/components/chart-view/config/plugins/tooltip.js +15 -15
  62. package/src/components/chart-view/config/plugins/zoom.js +31 -31
  63. package/src/components/checkbox/QasCheckbox.vue +150 -150
  64. package/src/components/checkbox/QasCheckbox.yml +36 -36
  65. package/src/components/copy/QasCopy.vue +46 -46
  66. package/src/components/copy/QasCopy.yml +23 -23
  67. package/src/components/date/QasDate.vue +600 -600
  68. package/src/components/date/QasDate.yml +69 -69
  69. package/src/components/date/enums/DateMaskOptions.js +6 -6
  70. package/src/components/date-time-input/QasDateTimeInput.vue +269 -269
  71. package/src/components/date-time-input/QasDateTimeInput.yml +64 -64
  72. package/src/components/debugger/QasDebugger.vue +31 -31
  73. package/src/components/debugger/QasDebugger.yml +10 -10
  74. package/src/components/delete/QasDelete.vue +100 -100
  75. package/src/components/delete/QasDelete.yml +60 -60
  76. package/src/components/dialog/QasDialog.vue +217 -217
  77. package/src/components/dialog/QasDialog.yml +117 -117
  78. package/src/components/dialog/composables/use-cancel.js +40 -40
  79. package/src/components/dialog/composables/use-dynamic-components.js +86 -86
  80. package/src/components/dialog/composables/use-ok.js +45 -45
  81. package/src/components/dialog-router/QasDialogRouter.vue +86 -86
  82. package/src/components/dialog-router/QasDialogRouter.yml +23 -23
  83. package/src/components/drawer/QasDrawer.vue +118 -118
  84. package/src/components/drawer/QasDrawer.yml +58 -58
  85. package/src/components/empty-result-text/QasEmptyResultText.vue +18 -18
  86. package/src/components/empty-result-text/QasEmptyResultText.yml +14 -14
  87. package/src/components/expansion-item/QasExpansionItem.vue +291 -291
  88. package/src/components/expansion-item/QasExpansionItem.yml +76 -76
  89. package/src/components/field/QasField.vue +220 -220
  90. package/src/components/field/QasField.yml +36 -36
  91. package/src/components/filters/QasFilters.vue +472 -472
  92. package/src/components/filters/QasFilters.yml +171 -171
  93. package/src/components/filters/private/PvFiltersButton.vue +101 -101
  94. package/src/components/form-generator/QasFormGenerator.vue +274 -274
  95. package/src/components/form-generator/QasFormGenerator.yml +109 -109
  96. package/src/components/form-view/QasFormView.vue +484 -484
  97. package/src/components/form-view/QasFormView.yml +253 -253
  98. package/src/components/gallery/QasGallery.vue +243 -243
  99. package/src/components/gallery/QasGallery.yml +188 -188
  100. package/src/components/gallery/composables/use-delete.js +54 -54
  101. package/src/components/gallery/private/PvGalleryCarouselDialog.vue +92 -92
  102. package/src/components/gallery/private/PvGalleryDeleteDialog.vue +54 -54
  103. package/src/components/gallery-card/QasGalleryCard.vue +153 -153
  104. package/src/components/gallery-card/QasGalleryCard.yml +61 -61
  105. package/src/components/grabbable/QasGrabbable.vue +185 -185
  106. package/src/components/grabbable/QasGrabbable.yml +26 -26
  107. package/src/components/grid-generator/QasGridGenerator.vue +210 -210
  108. package/src/components/grid-generator/QasGridGenerator.yml +127 -127
  109. package/src/components/grid-item/QasGridItem.vue +89 -89
  110. package/src/components/grid-item/QasGridItem.yml +22 -22
  111. package/src/components/header/QasHeader.vue +152 -152
  112. package/src/components/header/QasHeader.yml +50 -50
  113. package/src/components/infinite-scroll/QasInfiniteScroll.vue +168 -168
  114. package/src/components/infinite-scroll/QasInfiniteScroll.yml +78 -78
  115. package/src/components/info/QasInfo.vue +155 -155
  116. package/src/components/info/QasInfo.yml +34 -34
  117. package/src/components/input/QasInput.vue +252 -252
  118. package/src/components/input/QasInput.yml +65 -65
  119. package/src/components/label/QasLabel.vue +61 -61
  120. package/src/components/label/QasLabel.yml +44 -44
  121. package/src/components/layout/QasLayout.vue +101 -101
  122. package/src/components/layout/QasLayout.yml +46 -46
  123. package/src/components/layout/private/PvLayoutNotificationCard.vue +86 -86
  124. package/src/components/layout/private/PvLayoutNotificationsDrawer.vue +140 -140
  125. package/src/components/list-items/QasListItems.vue +125 -125
  126. package/src/components/list-items/QasListItems.yml +71 -71
  127. package/src/components/list-view/QasListView.vue +302 -302
  128. package/src/components/list-view/QasListView.yml +169 -169
  129. package/src/components/map/QasMap.vue +75 -75
  130. package/src/components/map/QasMap.yml +33 -33
  131. package/src/components/nested-fields/QasNestedFields.vue +584 -584
  132. package/src/components/nested-fields/QasNestedFields.yml +296 -296
  133. package/src/components/numeric-input/QasNumericInput.vue +206 -206
  134. package/src/components/numeric-input/QasNumericInput.yml +85 -85
  135. package/src/components/option-group/QasOptionGroup.vue +54 -54
  136. package/src/components/option-group/QasOptionGroup.yml +30 -30
  137. package/src/components/page-header/QasPageHeader.vue +143 -143
  138. package/src/components/page-header/QasPageHeader.yml +42 -42
  139. package/src/components/pagination/QasPagination.vue +71 -71
  140. package/src/components/pagination/QasPagination.yml +4 -4
  141. package/src/components/password-input/QasPasswordInput.vue +110 -110
  142. package/src/components/password-input/QasPasswordInput.yml +111 -111
  143. package/src/components/password-strength-checker/QasPasswordStrengthChecker.vue +71 -71
  144. package/src/components/password-strength-checker/QasPasswordStrengthChecker.yml +103 -103
  145. package/src/components/profile/QasProfile.vue +98 -98
  146. package/src/components/profile/QasProfile.yml +60 -60
  147. package/src/components/radio/QasRadio.vue +62 -62
  148. package/src/components/radio/QasRadio.yml +11 -11
  149. package/src/components/resizer/QasResizer.vue +90 -90
  150. package/src/components/resizer/QasResizer.yml +24 -24
  151. package/src/components/search-box/QasSearchBox.vue +294 -294
  152. package/src/components/search-box/QasSearchBox.yml +154 -154
  153. package/src/components/search-input/QasSearchInput.vue +106 -106
  154. package/src/components/search-input/QasSearchInput.yml +48 -48
  155. package/src/components/select/QasSelect.vue +514 -514
  156. package/src/components/select/QasSelect.yml +157 -157
  157. package/src/components/select-list/QasSelectList.vue +238 -238
  158. package/src/components/select-list/QasSelectList.yml +108 -108
  159. package/src/components/select-list/private/PvSelectListCheckbox.vue +31 -31
  160. package/src/components/select-list-dialog/QasSelectListDialog.vue +395 -395
  161. package/src/components/select-list-dialog/QasSelectListDialog.yml +108 -108
  162. package/src/components/signature-pad/QasSignaturePad.vue +122 -122
  163. package/src/components/signature-pad/QasSignaturePad.yml +53 -53
  164. package/src/components/signature-uploader/QasSignatureUploader.vue +164 -164
  165. package/src/components/signature-uploader/QasSignatureUploader.yml +37 -37
  166. package/src/components/single-view/QasSingleView.vue +175 -175
  167. package/src/components/single-view/QasSingleView.yml +131 -131
  168. package/src/components/sortable/QasSortable.vue +151 -151
  169. package/src/components/sortable/QasSortable.yml +65 -65
  170. package/src/components/status/QasStatus.test.js +11 -11
  171. package/src/components/status/QasStatus.vue +29 -29
  172. package/src/components/status/QasStatus.yml +10 -10
  173. package/src/components/stepper/QasStepper.vue +152 -152
  174. package/src/components/stepper/QasStepper.yml +35 -35
  175. package/src/components/stepper-form-view/QasStepperFormView.vue +84 -84
  176. package/src/components/stepper-form-view/QasStepperFormView.yml +58 -58
  177. package/src/components/table-generator/QasTableGenerator.vue +416 -416
  178. package/src/components/table-generator/QasTableGenerator.yml +94 -94
  179. package/src/components/tabs-generator/QasTabsGenerator.vue +196 -196
  180. package/src/components/tabs-generator/QasTabsGenerator.yml +53 -53
  181. package/src/components/text-truncate/QasTextTruncate.vue +274 -274
  182. package/src/components/text-truncate/QasTextTruncate.yml +60 -60
  183. package/src/components/timeline/QasTimeline.vue +140 -140
  184. package/src/components/timeline/QasTimeline.yml +36 -36
  185. package/src/components/toggle/QasToggle.vue +14 -14
  186. package/src/components/toggle/QasToggle.yml +5 -5
  187. package/src/components/toggle-visibility/QasToggleVisibility.vue +79 -79
  188. package/src/components/toggle-visibility/QasToggleVisibility.yml +30 -30
  189. package/src/components/transfer/QasTransfer.vue +239 -239
  190. package/src/components/transfer/QasTransfer.yml +60 -60
  191. package/src/components/tree-generator/QasTreeForm.vue +62 -62
  192. package/src/components/tree-generator/QasTreeGenerator.vue +488 -488
  193. package/src/components/tree-generator/QasTreeGenerator.yml +81 -81
  194. package/src/components/uploader/QasUploader.vue +645 -645
  195. package/src/components/uploader/QasUploader.yml +192 -192
  196. package/src/components/uploader/private/PvUploaderGalleryCard.vue +357 -357
  197. package/src/components/welcome/QasWelcome.vue +125 -125
  198. package/src/components/welcome/QasWelcome.yml +23 -23
  199. package/src/components/welcome/private/PvWelcomeShortcutCard.vue +58 -58
  200. package/src/components/whatsapp-link/QasWhatsappLink.vue +34 -34
  201. package/src/components/whatsapp-link/QasWhatsappLink.yml +18 -18
  202. package/src/composables/index.js +8 -8
  203. package/src/composables/private/index.js +3 -3
  204. package/src/composables/private/use-generator.js +174 -174
  205. package/src/composables/private/use-toggle-visibility.js +48 -48
  206. package/src/composables/private/use-view.js +186 -186
  207. package/src/composables/use-context.js +15 -15
  208. package/src/composables/use-form.js +32 -32
  209. package/src/composables/use-history.js +46 -46
  210. package/src/composables/use-notifications.js +128 -114
  211. package/src/composables/use-query-cache.js +60 -60
  212. package/src/composables/use-screen.js +42 -42
  213. package/src/css/base/font-face.scss +28 -28
  214. package/src/css/base/index.scss +1 -1
  215. package/src/css/components/base.scss +12 -12
  216. package/src/css/components/button.scss +116 -116
  217. package/src/css/components/checkbox.scss +14 -14
  218. package/src/css/components/editor.scss +7 -7
  219. package/src/css/components/field.scss +88 -88
  220. package/src/css/components/index.scss +10 -10
  221. package/src/css/components/item.scss +52 -52
  222. package/src/css/components/radio.scss +18 -18
  223. package/src/css/components/scrollbar.scss +20 -20
  224. package/src/css/components/tabs.scss +3 -3
  225. package/src/css/components/toggle.scss +13 -13
  226. package/src/css/mixins/index.scss +3 -3
  227. package/src/css/mixins/set-brand.scss +15 -15
  228. package/src/css/mixins/set-button.scss +26 -26
  229. package/src/css/mixins/set-typography.scss +8 -8
  230. package/src/css/plugins/index.scss +2 -2
  231. package/src/css/plugins/loading.scss +5 -5
  232. package/src/css/plugins/notify.scss +100 -100
  233. package/src/css/utils/background.scss +34 -34
  234. package/src/css/utils/border-radius.scss +29 -29
  235. package/src/css/utils/border.scss +42 -42
  236. package/src/css/utils/container.scss +36 -36
  237. package/src/css/utils/fonts.scss +5 -5
  238. package/src/css/utils/index.scss +10 -10
  239. package/src/css/utils/line-height.scss +19 -19
  240. package/src/css/utils/opacity.scss +5 -5
  241. package/src/css/utils/scroll.scss +21 -21
  242. package/src/css/utils/text.scss +15 -15
  243. package/src/css/utils/unset.scss +8 -8
  244. package/src/css/variables/button.scss +4 -4
  245. package/src/css/variables/index.scss +6 -6
  246. package/src/css/variables/scrollbar.scss +11 -11
  247. package/src/css/variables/separator.scss +2 -2
  248. package/src/css/variables/shadow.scss +3 -3
  249. package/src/css/variables/spacing.scss +98 -98
  250. package/src/css/variables/typography.scss +149 -149
  251. package/src/directives/Test.js +13 -13
  252. package/src/enums/Align.js +7 -7
  253. package/src/enums/Spacing.js +98 -98
  254. package/src/enums/Status.js +33 -33
  255. package/src/helpers/add-counter-suffix.js +3 -3
  256. package/src/helpers/base-64-to-blob.js +21 -21
  257. package/src/helpers/camelize-fields-name.js +15 -15
  258. package/src/helpers/construct-object.js +29 -29
  259. package/src/helpers/copy-to-clipboard.js +15 -15
  260. package/src/helpers/destroy-nested-children-by-key.js +33 -33
  261. package/src/helpers/download-file.js +21 -21
  262. package/src/helpers/filter-list-by-handle.js +31 -31
  263. package/src/helpers/filter-object-to-array.js +29 -29
  264. package/src/helpers/filter-object.js +34 -34
  265. package/src/helpers/filters.js +163 -163
  266. package/src/helpers/find-children-by-key.js +14 -14
  267. package/src/helpers/get-greatest-common-divisor.js +16 -16
  268. package/src/helpers/get-normalized-options.js +20 -20
  269. package/src/helpers/get-placeholder.js +19 -19
  270. package/src/helpers/get-required-label.js +3 -3
  271. package/src/helpers/get-slot-children-text.js +15 -15
  272. package/src/helpers/handle-process.js +13 -13
  273. package/src/helpers/images.js +28 -28
  274. package/src/helpers/index.js +25 -25
  275. package/src/helpers/is-empty.js +3 -3
  276. package/src/helpers/is-local-development.js +3 -3
  277. package/src/helpers/private/gutter-validator.js +15 -15
  278. package/src/helpers/private/has-parent-by-class-name.js +15 -15
  279. package/src/helpers/promise-handler.js +40 -40
  280. package/src/helpers/rules.js +7 -7
  281. package/src/helpers/set-scroll-on-grab.js +128 -128
  282. package/src/index.cjs.js +1 -1
  283. package/src/index.esm.js +4 -4
  284. package/src/index.scss +38 -38
  285. package/src/index.umd.js +2 -2
  286. package/src/mixins/context.js +8 -8
  287. package/src/mixins/delete.js +48 -48
  288. package/src/mixins/dialog-router.js +17 -17
  289. package/src/mixins/form.js +11 -11
  290. package/src/mixins/generator.js +94 -94
  291. package/src/mixins/index.js +17 -17
  292. package/src/mixins/password.js +86 -86
  293. package/src/mixins/search-filter.js +354 -354
  294. package/src/mixins/view.js +156 -156
  295. package/src/pages/ErrorComponent.vue +74 -74
  296. package/src/pages/Forbidden.vue +29 -29
  297. package/src/pages/NotFound.vue +29 -29
  298. package/src/pages/ServerError.vue +29 -29
  299. package/src/pages/Unauthorized.vue +29 -29
  300. package/src/plugins/delete/Delete.js +107 -107
  301. package/src/plugins/delete/Delete.yml +75 -75
  302. package/src/plugins/dialog/Dialog.js +14 -14
  303. package/src/plugins/dialog/Dialog.yml +10 -10
  304. package/src/plugins/index.js +13 -13
  305. package/src/plugins/notify-error/NotifyError.js +13 -13
  306. package/src/plugins/notify-error/NotifyError.yml +11 -11
  307. package/src/plugins/notify-success/NotifySuccess.js +13 -13
  308. package/src/plugins/notify-success/NotifySuccess.yml +11 -11
  309. package/src/plugins/screen/Screen.js +35 -35
  310. package/src/plugins/screen/Screen.yml +16 -16
  311. package/src/shared/date-config.js +26 -26
  312. package/src/shared/fuse-config.js +4 -4
  313. package/src/shared/notify-config.js +7 -7
  314. package/src/vue-plugin/third-party-component-handler.js +29 -29
  315. package/src/vue-plugin.js +282 -282
@@ -1,175 +1,175 @@
1
- <template>
2
- <div :class="componentClass">
3
- <header v-if="hasHeaderSlot">
4
- <slot name="header" />
5
- </header>
6
-
7
- <slot v-if="canShowFetchErrorSlot" name="fetch-error" />
8
-
9
- <template v-else-if="hasResult">
10
- <slot />
11
- </template>
12
-
13
- <div v-else-if="!viewState.fetching">
14
- <qas-empty-result-text class="q-my-xl" />
15
- </div>
16
-
17
- <footer v-if="hasFooterSlot">
18
- <slot name="footer" />
19
- </footer>
20
-
21
- <q-inner-loading :showing="viewState.fetching">
22
- <q-spinner color="grey" size="3em" />
23
- </q-inner-loading>
24
- </div>
25
- </template>
26
-
27
- <script setup>
28
- import useView, { baseProps, baseEmits } from '../../composables/private/use-view'
29
-
30
- import debug from 'debug'
31
- import { decamelize } from 'humps'
32
- import { markRaw, computed, watch, inject } from 'vue'
33
- import { useRoute } from 'vue-router'
34
-
35
- const log = debug('asteroid-ui:qas-single-view')
36
-
37
- defineOptions({ name: 'QasSingleView' })
38
-
39
- const props = defineProps({
40
- ...baseProps,
41
-
42
- customId: {
43
- default: '',
44
- type: [Number, String]
45
- },
46
-
47
- result: {
48
- default: () => ({}),
49
- type: Object
50
- }
51
- })
52
-
53
- const emit = defineEmits([
54
- ...baseEmits,
55
-
56
- 'update:result',
57
- 'fetch-success',
58
- 'fetch-error'
59
- ])
60
-
61
- const slots = defineSlots()
62
-
63
- // globals
64
- const axios = inject('axios')
65
- const qas = inject('qas')
66
-
67
- // composables
68
- const route = useRoute()
69
-
70
- const {
71
- // state
72
- viewState,
73
-
74
- // computed
75
- componentClass,
76
- hasHeaderSlot,
77
- hasFooterSlot,
78
- canShowFetchErrorSlot,
79
-
80
- // functions
81
- errorHandler,
82
- fetchHandler,
83
- setErrors,
84
- setFields,
85
- setMetadata,
86
- setResult,
87
- updateModels
88
- } = useView({ emit, props, slots, mode: 'single' })
89
-
90
- // Expose
91
- defineExpose({ fetchSingle, fetchHandler })
92
-
93
- // computed
94
- const id = computed(() => props.customId || route.params.id)
95
-
96
- const resultModel = computed(() => {
97
- if (props.useStore) return qas.getGetter({ entity: props.entity, key: 'byId' })(id.value) || {}
98
-
99
- return viewState.value.result || {}
100
- })
101
-
102
- const hasResult = computed(() => !!resultModel.value)
103
-
104
- // watch
105
- watch(() => route, (to, from) => {
106
- if (to.name === from.name) {
107
- fetchHandler({ id: id.value, url: props.url }, fetchSingle)
108
- }
109
- })
110
-
111
- watch(() => resultModel.value, value => emit('update:result', markRaw({ ...value })))
112
-
113
- // created
114
- fetchHandler({ id: id.value, url: props.url }, fetchSingle)
115
-
116
- // functions
117
- async function fetchSingle (externalPayload = {}) {
118
- viewState.value.fetching = true
119
-
120
- try {
121
- const payload = { id: id.value, url: props.url, ...externalPayload }
122
-
123
- const response = await getAction(payload)
124
-
125
- const { errors, fields, metadata, result } = response.data
126
-
127
- setErrors(errors)
128
- setFields(fields)
129
- setMetadata(metadata)
130
-
131
- /**
132
- * result só precisa ser adicionado ao estado se não estiver usando store,
133
- * pois com a store é usado o getter.
134
- */
135
- !props.useStore && setResult(result)
136
-
137
- updateModels({
138
- errors: viewState.value.errors,
139
- fields: viewState.value.fields,
140
- metadata: viewState.value.metadata,
141
-
142
- ...(!props.useStore && { result: viewState.value.result })
143
- })
144
-
145
- emit('fetch-success', response)
146
-
147
- log(`[${props.entity}]:fetchSingle:success`, response)
148
- } catch (error) {
149
- errorHandler(error)
150
- emit('fetch-error', error)
151
-
152
- log(`[${props.entity}]:fetchSingle:error`, error)
153
- } finally {
154
- viewState.value.fetching = false
155
- }
156
- }
157
-
158
- function getAction (payload) {
159
- if (props.useStore) {
160
- return qas.getAction({
161
- entity: props.entity,
162
- key: 'fetchSingle',
163
- payload
164
- })
165
- }
166
-
167
- const { id: unusedID, url: unusedURL, ...externalPayload } = payload
168
-
169
- const decamelizedEntity = decamelize(props.entity, { separator: '-' })
170
-
171
- const url = props.url || `${decamelizedEntity}/${id.value}`
172
-
173
- return axios.get(url, { ...externalPayload })
174
- }
175
- </script>
1
+ <template>
2
+ <div :class="componentClass">
3
+ <header v-if="hasHeaderSlot">
4
+ <slot name="header" />
5
+ </header>
6
+
7
+ <slot v-if="canShowFetchErrorSlot" name="fetch-error" />
8
+
9
+ <template v-else-if="hasResult">
10
+ <slot />
11
+ </template>
12
+
13
+ <div v-else-if="!viewState.fetching">
14
+ <qas-empty-result-text class="q-my-xl" />
15
+ </div>
16
+
17
+ <footer v-if="hasFooterSlot">
18
+ <slot name="footer" />
19
+ </footer>
20
+
21
+ <q-inner-loading :showing="viewState.fetching">
22
+ <q-spinner color="grey" size="3em" />
23
+ </q-inner-loading>
24
+ </div>
25
+ </template>
26
+
27
+ <script setup>
28
+ import useView, { baseProps, baseEmits } from '../../composables/private/use-view'
29
+
30
+ import debug from 'debug'
31
+ import { decamelize } from 'humps'
32
+ import { markRaw, computed, watch, inject } from 'vue'
33
+ import { useRoute } from 'vue-router'
34
+
35
+ const log = debug('asteroid-ui:qas-single-view')
36
+
37
+ defineOptions({ name: 'QasSingleView' })
38
+
39
+ const props = defineProps({
40
+ ...baseProps,
41
+
42
+ customId: {
43
+ default: '',
44
+ type: [Number, String]
45
+ },
46
+
47
+ result: {
48
+ default: () => ({}),
49
+ type: Object
50
+ }
51
+ })
52
+
53
+ const emit = defineEmits([
54
+ ...baseEmits,
55
+
56
+ 'update:result',
57
+ 'fetch-success',
58
+ 'fetch-error'
59
+ ])
60
+
61
+ const slots = defineSlots()
62
+
63
+ // globals
64
+ const axios = inject('axios')
65
+ const qas = inject('qas')
66
+
67
+ // composables
68
+ const route = useRoute()
69
+
70
+ const {
71
+ // state
72
+ viewState,
73
+
74
+ // computed
75
+ componentClass,
76
+ hasHeaderSlot,
77
+ hasFooterSlot,
78
+ canShowFetchErrorSlot,
79
+
80
+ // functions
81
+ errorHandler,
82
+ fetchHandler,
83
+ setErrors,
84
+ setFields,
85
+ setMetadata,
86
+ setResult,
87
+ updateModels
88
+ } = useView({ emit, props, slots, mode: 'single' })
89
+
90
+ // Expose
91
+ defineExpose({ fetchSingle, fetchHandler })
92
+
93
+ // computed
94
+ const id = computed(() => props.customId || route.params.id)
95
+
96
+ const resultModel = computed(() => {
97
+ if (props.useStore) return qas.getGetter({ entity: props.entity, key: 'byId' })(id.value) || {}
98
+
99
+ return viewState.value.result || {}
100
+ })
101
+
102
+ const hasResult = computed(() => !!resultModel.value)
103
+
104
+ // watch
105
+ watch(() => route, (to, from) => {
106
+ if (to.name === from.name) {
107
+ fetchHandler({ id: id.value, url: props.url }, fetchSingle)
108
+ }
109
+ })
110
+
111
+ watch(() => resultModel.value, value => emit('update:result', markRaw({ ...value })))
112
+
113
+ // created
114
+ fetchHandler({ id: id.value, url: props.url }, fetchSingle)
115
+
116
+ // functions
117
+ async function fetchSingle (externalPayload = {}) {
118
+ viewState.value.fetching = true
119
+
120
+ try {
121
+ const payload = { id: id.value, url: props.url, ...externalPayload }
122
+
123
+ const response = await getAction(payload)
124
+
125
+ const { errors, fields, metadata, result } = response.data
126
+
127
+ setErrors(errors)
128
+ setFields(fields)
129
+ setMetadata(metadata)
130
+
131
+ /**
132
+ * result só precisa ser adicionado ao estado se não estiver usando store,
133
+ * pois com a store é usado o getter.
134
+ */
135
+ !props.useStore && setResult(result)
136
+
137
+ updateModels({
138
+ errors: viewState.value.errors,
139
+ fields: viewState.value.fields,
140
+ metadata: viewState.value.metadata,
141
+
142
+ ...(!props.useStore && { result: viewState.value.result })
143
+ })
144
+
145
+ emit('fetch-success', response)
146
+
147
+ log(`[${props.entity}]:fetchSingle:success`, response)
148
+ } catch (error) {
149
+ errorHandler(error)
150
+ emit('fetch-error', error)
151
+
152
+ log(`[${props.entity}]:fetchSingle:error`, error)
153
+ } finally {
154
+ viewState.value.fetching = false
155
+ }
156
+ }
157
+
158
+ function getAction (payload) {
159
+ if (props.useStore) {
160
+ return qas.getAction({
161
+ entity: props.entity,
162
+ key: 'fetchSingle',
163
+ payload
164
+ })
165
+ }
166
+
167
+ const { id: unusedID, url: unusedURL, ...externalPayload } = payload
168
+
169
+ const decamelizedEntity = decamelize(props.entity, { separator: '-' })
170
+
171
+ const url = props.url || `${decamelizedEntity}/${id.value}`
172
+
173
+ return axios.get(url, { ...externalPayload })
174
+ }
175
+ </script>
@@ -1,131 +1,131 @@
1
- type: component
2
-
3
- meta:
4
- desc: Componente para C.R.U.D. responsável pela visualização (Read) ou conhecido também como "show".
5
-
6
- props:
7
- before-fetch:
8
- desc: Callback para controlar como funciona o comportamento do fetchSingle.
9
- default: null
10
- type: Function
11
- examples: ['beforeFetch({ payload, resolve, done })']
12
-
13
- custom-id:
14
- desc: Por padrão, o componente vai pegar o "id" que vem como parâmetro na url, caso queira que o id seja diferente da url, use esta prop.
15
- type: String
16
- examples: ['my-custom-id']
17
-
18
- entity:
19
- desc: Entidade da store, por exemplo se tiver que trabalhar com modulo de usuários, teremos o model "users" na store, que vai ser nossa "entity".
20
- required: true
21
- type: String
22
-
23
- errors:
24
- model: true
25
- desc: Model de errors, utilizado para recuperar os errors fora do template.
26
- default: {}
27
- type: Object
28
- examples: [v-model:errors="errors"]
29
-
30
- fields:
31
- model: true
32
- desc: Model de fields, utilizado para recuperar os fields fora do template.
33
- default: {}
34
- type: Object
35
- examples: [v-model:fields="fields"]
36
-
37
- fetching:
38
- model: true
39
- desc: Model de fetching, utilizado para saber se o componente está fazendo fetching de dados.
40
- type: Boolean
41
- examples: [v-model:fetching="isFetching"]
42
-
43
- metadata:
44
- model: true
45
- desc: Model de metadata, utilizado para recuperar os metadata fora do template.
46
- default: {}
47
- type: Object
48
- examples: [v-model:metadata="metadata"]
49
-
50
- result:
51
- model: true
52
- desc: Model de result, utilizado para recuperar o resultado retornado pelo componente.
53
- type: Object
54
- examples: [v-model:result="result"]
55
-
56
- url:
57
- desc: Envia como parâmetro para a action "fetchSingle" do modulo correspondente a "entity".
58
- type: String
59
-
60
- use-boundary:
61
- desc: Controla o limite que o FormView terá, quando é "false", a tag pai deixa de ser um "QPage" para ser uma "div" e é removido as classes "container" e "spaced", comumente utilizando quando precisa usar o QasFormView dentro de um dialog.
62
- default: true
63
- type: Boolean
64
-
65
- use-route:
66
- desc: Controla se o componente usará internamente uma store do vuex/pinia ou se vai ser utilizado o axios diretamente.
67
- default: true
68
- type: Boolean
69
-
70
- slots:
71
- default:
72
- desc: 'Slot para ter o conteúdo principal (dentro do main).'
73
-
74
- fetch-error:
75
- desc: Slot disponibilizado em caso de fetchError.
76
-
77
- footer:
78
- desc: 'Slot para acessar o footer.'
79
-
80
- header:
81
- desc: 'Slot para acessar o header.'
82
-
83
- events:
84
- '@fetch-success -> function(value)':
85
- desc: Dispara quando a action "fetchSingle" é executada com sucesso.
86
- params:
87
- value:
88
- desc: Retorna todos os dados "cru" respondido pelo fetch.
89
- type: Object
90
-
91
- '@fetch-error -> function(value)':
92
- desc: Dispara quando a action "fetchSingle" cai em uma exceção.
93
- params:
94
- value:
95
- desc: Retorna todos os dados "cru" respondido na exceção do fetch.
96
- type: Object
97
-
98
- '@update:result -> function(value)':
99
- desc: Dispara quando a action "fetchSingle" é executada com sucesso, é chamado antes do evento "fetch-success".
100
- params:
101
- value:
102
- desc: lista retornada no "fetchSingle".
103
- type: Array
104
-
105
- '@update:fields -> function(value)':
106
- desc: Dispara quando a action "fetchSingle" é executada com sucesso, é chamado antes do evento "fetch-success".
107
- params:
108
- value:
109
- desc: fields.
110
- type: Object
111
-
112
- '@update:errors -> function(value)':
113
- desc: Dispara quando a action "fetchSingle" é chamada.
114
- params:
115
- value:
116
- desc: Errors durante o fetch.
117
- type: Object
118
-
119
- '@update:metadata -> function(value)':
120
- desc: Dispara quando a action "fetchSingle" acontece com sucesso, é chamado antes do evento "fetch-success".
121
- params:
122
- value:
123
- desc: metadata.
124
- type: Object
125
-
126
- '@update:fetching -> function(value)':
127
- desc: Dispara logo antes da action "fetchSingle" e ao cair no bloco "finally", ou seja, quando começar o fetching e após terminar.
128
- params:
129
- value:
130
- desc: Retorna se está ou não fazendo fetching de dados.
131
- type: Boolean
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente para C.R.U.D. responsável pela visualização (Read) ou conhecido também como "show".
5
+
6
+ props:
7
+ before-fetch:
8
+ desc: Callback para controlar como funciona o comportamento do fetchSingle.
9
+ default: null
10
+ type: Function
11
+ examples: ['beforeFetch({ payload, resolve, done })']
12
+
13
+ custom-id:
14
+ desc: Por padrão, o componente vai pegar o "id" que vem como parâmetro na url, caso queira que o id seja diferente da url, use esta prop.
15
+ type: String
16
+ examples: ['my-custom-id']
17
+
18
+ entity:
19
+ desc: Entidade da store, por exemplo se tiver que trabalhar com modulo de usuários, teremos o model "users" na store, que vai ser nossa "entity".
20
+ required: true
21
+ type: String
22
+
23
+ errors:
24
+ model: true
25
+ desc: Model de errors, utilizado para recuperar os errors fora do template.
26
+ default: {}
27
+ type: Object
28
+ examples: [v-model:errors="errors"]
29
+
30
+ fields:
31
+ model: true
32
+ desc: Model de fields, utilizado para recuperar os fields fora do template.
33
+ default: {}
34
+ type: Object
35
+ examples: [v-model:fields="fields"]
36
+
37
+ fetching:
38
+ model: true
39
+ desc: Model de fetching, utilizado para saber se o componente está fazendo fetching de dados.
40
+ type: Boolean
41
+ examples: [v-model:fetching="isFetching"]
42
+
43
+ metadata:
44
+ model: true
45
+ desc: Model de metadata, utilizado para recuperar os metadata fora do template.
46
+ default: {}
47
+ type: Object
48
+ examples: [v-model:metadata="metadata"]
49
+
50
+ result:
51
+ model: true
52
+ desc: Model de result, utilizado para recuperar o resultado retornado pelo componente.
53
+ type: Object
54
+ examples: [v-model:result="result"]
55
+
56
+ url:
57
+ desc: Envia como parâmetro para a action "fetchSingle" do modulo correspondente a "entity".
58
+ type: String
59
+
60
+ use-boundary:
61
+ desc: Controla o limite que o FormView terá, quando é "false", a tag pai deixa de ser um "QPage" para ser uma "div" e é removido as classes "container" e "spaced", comumente utilizando quando precisa usar o QasFormView dentro de um dialog.
62
+ default: true
63
+ type: Boolean
64
+
65
+ use-route:
66
+ desc: Controla se o componente usará internamente uma store do vuex/pinia ou se vai ser utilizado o axios diretamente.
67
+ default: true
68
+ type: Boolean
69
+
70
+ slots:
71
+ default:
72
+ desc: 'Slot para ter o conteúdo principal (dentro do main).'
73
+
74
+ fetch-error:
75
+ desc: Slot disponibilizado em caso de fetchError.
76
+
77
+ footer:
78
+ desc: 'Slot para acessar o footer.'
79
+
80
+ header:
81
+ desc: 'Slot para acessar o header.'
82
+
83
+ events:
84
+ '@fetch-success -> function(value)':
85
+ desc: Dispara quando a action "fetchSingle" é executada com sucesso.
86
+ params:
87
+ value:
88
+ desc: Retorna todos os dados "cru" respondido pelo fetch.
89
+ type: Object
90
+
91
+ '@fetch-error -> function(value)':
92
+ desc: Dispara quando a action "fetchSingle" cai em uma exceção.
93
+ params:
94
+ value:
95
+ desc: Retorna todos os dados "cru" respondido na exceção do fetch.
96
+ type: Object
97
+
98
+ '@update:result -> function(value)':
99
+ desc: Dispara quando a action "fetchSingle" é executada com sucesso, é chamado antes do evento "fetch-success".
100
+ params:
101
+ value:
102
+ desc: lista retornada no "fetchSingle".
103
+ type: Array
104
+
105
+ '@update:fields -> function(value)':
106
+ desc: Dispara quando a action "fetchSingle" é executada com sucesso, é chamado antes do evento "fetch-success".
107
+ params:
108
+ value:
109
+ desc: fields.
110
+ type: Object
111
+
112
+ '@update:errors -> function(value)':
113
+ desc: Dispara quando a action "fetchSingle" é chamada.
114
+ params:
115
+ value:
116
+ desc: Errors durante o fetch.
117
+ type: Object
118
+
119
+ '@update:metadata -> function(value)':
120
+ desc: Dispara quando a action "fetchSingle" acontece com sucesso, é chamado antes do evento "fetch-success".
121
+ params:
122
+ value:
123
+ desc: metadata.
124
+ type: Object
125
+
126
+ '@update:fetching -> function(value)':
127
+ desc: Dispara logo antes da action "fetchSingle" e ao cair no bloco "finally", ou seja, quando começar o fetching e após terminar.
128
+ params:
129
+ value:
130
+ desc: Retorna se está ou não fazendo fetching de dados.
131
+ type: Boolean