@bildvitta/quasar-ui-asteroid 2.16.0 → 3.0.0-alpha.2

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 (280) hide show
  1. package/dist/api/QasActions.json +40 -0
  2. package/dist/api/QasActionsMenu.json +64 -0
  3. package/dist/api/QasAlert.json +40 -0
  4. package/dist/api/QasAppBar.json +52 -0
  5. package/dist/api/QasAppMenu.json +38 -0
  6. package/dist/api/QasAvatar.json +44 -0
  7. package/dist/api/QasBox.json +16 -0
  8. package/dist/api/QasBreakline.json +32 -0
  9. package/dist/api/QasBtn.json +16 -0
  10. package/dist/api/QasCard.json +52 -0
  11. package/dist/api/QasCheckboxGroup.json +38 -0
  12. package/dist/api/QasCopy.json +29 -0
  13. package/dist/api/QasDateTimeInput.json +60 -0
  14. package/dist/api/QasDebugger.json +13 -0
  15. package/dist/api/QasDelete.json +64 -0
  16. package/dist/api/QasDialog.json +109 -0
  17. package/dist/api/QasDialogRouter.json +31 -0
  18. package/dist/api/QasField.json +56 -0
  19. package/dist/api/QasFilters.json +111 -0
  20. package/dist/api/QasFormGenerator.json +92 -0
  21. package/dist/api/QasFormView.json +228 -0
  22. package/dist/api/QasGallery.json +54 -0
  23. package/dist/api/QasGridGenerator.json +108 -0
  24. package/dist/api/QasInput.json +40 -0
  25. package/dist/api/QasLabel.json +40 -0
  26. package/dist/api/QasLayout.json +47 -0
  27. package/dist/api/QasListItems.json +72 -0
  28. package/dist/api/QasListView.json +161 -0
  29. package/dist/api/QasMap.json +41 -0
  30. package/dist/api/QasNestedFields.json +223 -0
  31. package/dist/api/QasNumericInput.json +68 -0
  32. package/dist/api/QasPageHeader.json +36 -0
  33. package/dist/api/QasPasswordInput.json +121 -0
  34. package/dist/api/QasPasswordStrengthChecker.json +126 -0
  35. package/dist/api/QasProfile.json +74 -0
  36. package/dist/api/QasResizer.json +34 -0
  37. package/dist/api/QasSearchBox.json +91 -0
  38. package/dist/api/QasSelect.json +88 -0
  39. package/dist/api/QasSelectList.json +134 -0
  40. package/dist/api/QasSignaturePad.json +63 -0
  41. package/dist/api/QasSignatureUploader.json +41 -0
  42. package/dist/api/QasSingleView.json +147 -0
  43. package/dist/api/QasSortable.json +80 -0
  44. package/dist/api/QasTableGenerator.json +56 -0
  45. package/dist/api/QasTabsGenerator.json +90 -0
  46. package/dist/api/QasTextTruncate.json +38 -0
  47. package/dist/api/QasTransfer.json +70 -0
  48. package/dist/api/QasUploader.json +143 -0
  49. package/dist/asteroid.cjs.css +1 -0
  50. package/dist/asteroid.cjs.js +9307 -0
  51. package/dist/asteroid.cjs.min.js +6 -0
  52. package/dist/asteroid.esm.css +1 -0
  53. package/dist/asteroid.esm.js +9298 -0
  54. package/dist/asteroid.esm.min.js +6 -0
  55. package/dist/asteroid.umd.css +1 -0
  56. package/dist/asteroid.umd.js +9301 -0
  57. package/dist/asteroid.umd.min.js +6 -0
  58. package/dist/vetur/asteroid-attributes.json +1178 -0
  59. package/dist/vetur/asteroid-tags.json +535 -0
  60. package/package.json +41 -56
  61. package/src/assets/logo-modular.svg +1 -1
  62. package/src/asteroid.js +1 -0
  63. package/src/components/actions/QasActions.vue +45 -0
  64. package/src/components/actions/QasActions.yml +24 -0
  65. package/src/components/actions-menu/QasActionsMenu.vue +41 -14
  66. package/src/components/actions-menu/QasActionsMenu.yml +63 -0
  67. package/src/components/alert/QasAlert.vue +90 -0
  68. package/src/components/alert/QasAlert.yml +33 -0
  69. package/src/components/app-bar/QasAppBar.vue +16 -13
  70. package/src/components/app-bar/QasAppBar.yml +51 -0
  71. package/src/components/app-menu/QasAppMenu.vue +10 -12
  72. package/src/components/app-menu/QasAppMenu.yml +32 -0
  73. package/src/components/avatar/QasAvatar.vue +17 -9
  74. package/src/components/avatar/QasAvatar.yml +38 -0
  75. package/src/components/box/QasBox.vue +12 -4
  76. package/src/components/box/QasBox.yml +13 -0
  77. package/src/components/breakline/QasBreakline.vue +37 -0
  78. package/src/components/breakline/QasBreakline.yml +25 -0
  79. package/src/components/btn/QasBtn.vue +27 -24
  80. package/src/components/btn/QasBtn.yml +13 -0
  81. package/src/components/card/QasCard.vue +32 -33
  82. package/src/components/card/QasCard.yml +42 -0
  83. package/src/components/checkbox-group/QasCheckboxGroup.vue +50 -17
  84. package/src/components/checkbox-group/QasCheckboxGroup.yml +30 -0
  85. package/src/components/copy/QasCopy.vue +22 -11
  86. package/src/components/copy/QasCopy.yml +20 -0
  87. package/src/components/date-time-input/QasDateTimeInput.vue +18 -26
  88. package/src/components/date-time-input/QasDateTimeInput.yml +54 -0
  89. package/src/components/debugger/QasDebugger.vue +2 -0
  90. package/src/components/debugger/QasDebugger.yml +10 -0
  91. package/src/components/delete/QasDelete.vue +43 -16
  92. package/src/components/delete/QasDelete.yml +52 -0
  93. package/src/components/dialog/QasDialog.vue +63 -67
  94. package/src/components/dialog/QasDialog.yml +86 -0
  95. package/src/components/dialog-router/QasDialogRouter.vue +14 -4
  96. package/src/components/dialog-router/QasDialogRouter.yml +23 -0
  97. package/src/components/field/QasField.vue +21 -24
  98. package/src/components/field/QasField.yml +31 -0
  99. package/src/components/filters/QasFilters.vue +33 -26
  100. package/src/components/filters/QasFilters.yml +91 -0
  101. package/src/components/form-generator/QasFormGenerator.vue +13 -15
  102. package/src/components/form-generator/QasFormGenerator.yml +64 -0
  103. package/src/components/form-view/QasFormView.vue +129 -69
  104. package/src/components/form-view/QasFormView.yml +179 -0
  105. package/src/components/gallery/QasGallery.vue +47 -30
  106. package/src/components/gallery/QasGallery.yml +51 -0
  107. package/src/components/grid-generator/QasGridGenerator.vue +15 -7
  108. package/src/components/grid-generator/QasGridGenerator.yml +73 -0
  109. package/src/components/index.js +0 -0
  110. package/src/components/input/QasInput.vue +43 -36
  111. package/src/components/input/QasInput.yml +32 -0
  112. package/src/components/label/QasLabel.vue +14 -15
  113. package/src/components/label/QasLabel.yml +28 -0
  114. package/src/components/layout/QasLayout.vue +13 -21
  115. package/src/components/layout/QasLayout.yml +38 -0
  116. package/src/components/list-items/QasListItems.vue +15 -12
  117. package/src/components/list-items/QasListItems.yml +57 -0
  118. package/src/components/list-view/QasListView.vue +57 -31
  119. package/src/components/list-view/QasListView.yml +132 -0
  120. package/src/components/map/QasMap.vue +15 -31
  121. package/src/components/map/QasMap.yml +33 -0
  122. package/src/components/nested-fields/QasNestedFields.vue +57 -47
  123. package/src/components/nested-fields/QasNestedFields.yml +180 -0
  124. package/src/components/numeric-input/QasNumericInput.vue +31 -22
  125. package/src/components/numeric-input/QasNumericInput.yml +51 -0
  126. package/src/components/page-header/QasPageHeader.vue +20 -11
  127. package/src/components/page-header/QasPageHeader.yml +24 -0
  128. package/src/components/password-input/QasPasswordInput.vue +24 -21
  129. package/src/components/password-input/QasPasswordInput.yml +103 -0
  130. package/src/components/password-strength-checker/QasPasswordStrengthChecker.vue +51 -34
  131. package/src/components/password-strength-checker/QasPasswordStrengthChecker.yml +103 -0
  132. package/src/components/profile/QasProfile.vue +15 -13
  133. package/src/components/profile/QasProfile.yml +60 -0
  134. package/src/components/resizer/QasResizer.vue +3 -3
  135. package/src/components/resizer/QasResizer.yml +23 -0
  136. package/src/components/search-box/QasSearchBox.vue +50 -21
  137. package/src/components/search-box/QasSearchBox.yml +76 -0
  138. package/src/components/select/QasSelect.vue +51 -50
  139. package/src/components/select/QasSelect.yml +62 -0
  140. package/src/components/select-list/QasSelectList.vue +72 -53
  141. package/src/components/select-list/QasSelectList.yml +116 -0
  142. package/src/components/signature-pad/QasSignaturePad.vue +60 -40
  143. package/src/components/signature-pad/QasSignaturePad.yml +53 -0
  144. package/src/components/signature-uploader/QasSignatureUploader.vue +19 -17
  145. package/src/components/signature-uploader/QasSignatureUploader.yml +36 -0
  146. package/src/components/single-view/QasSingleView.vue +41 -22
  147. package/src/components/single-view/QasSingleView.yml +116 -0
  148. package/src/components/sortable/QasSortable.vue +51 -30
  149. package/src/components/sortable/QasSortable.yml +65 -0
  150. package/src/components/table-generator/QasTableGenerator.vue +112 -21
  151. package/src/components/table-generator/QasTableGenerator.yml +46 -0
  152. package/src/components/tabs-generator/QasTabsGenerator.vue +37 -25
  153. package/src/components/tabs-generator/QasTabsGenerator.yml +67 -0
  154. package/src/components/text-truncate/QasTextTruncate.vue +25 -17
  155. package/src/components/text-truncate/QasTextTruncate.yml +32 -0
  156. package/src/components/transfer/QasTransfer.vue +48 -49
  157. package/src/components/transfer/QasTransfer.yml +59 -0
  158. package/src/components/uploader/QasUploader.vue +169 -48
  159. package/src/components/uploader/QasUploader.yml +117 -0
  160. package/src/css/background.scss +1 -1
  161. package/src/css/border.scss +7 -6
  162. package/src/css/design-system.scss +0 -43
  163. package/src/css/fonts.scss +2 -28
  164. package/src/css/opacity.scss +0 -4
  165. package/src/css/set-brand.scss +15 -0
  166. package/src/css/transitions.scss +1 -1
  167. package/src/helpers/add-counter-suffix.js +3 -0
  168. package/src/helpers/{base64ToBlob.js → base-64-to-blob.js} +0 -0
  169. package/src/helpers/{constructObject.js → construct-object.js} +0 -0
  170. package/src/helpers/filter-object.js +8 -6
  171. package/src/helpers/filters.js +8 -4
  172. package/src/helpers/{greatestCommonDivisor.js → get-greatest-common-divisor.js} +0 -0
  173. package/src/helpers/get-slot-children-text.js +15 -0
  174. package/src/helpers/images.js +28 -0
  175. package/src/helpers/index.js +11 -59
  176. package/src/helpers/{isLocalDevelopment.js → is-local-development.js} +0 -0
  177. package/src/helpers/set-scroll-on-grab.js +61 -0
  178. package/src/index.cjs.js +1 -0
  179. package/src/index.esm.js +4 -0
  180. package/src/index.scss +19 -21
  181. package/src/index.umd.js +2 -0
  182. package/src/mixins/context.js +1 -1
  183. package/src/mixins/dialog-router.js +17 -0
  184. package/src/mixins/form.js +4 -12
  185. package/src/mixins/generator.js +14 -14
  186. package/src/mixins/index.js +2 -8
  187. package/src/mixins/password.js +73 -11
  188. package/src/mixins/screen.js +8 -6
  189. package/src/mixins/view.js +62 -22
  190. package/src/plugins/dialog/Dialog.js +14 -0
  191. package/src/plugins/dialog/Dialog.yml +10 -0
  192. package/src/plugins/index.js +4 -2
  193. package/src/plugins/{NotifyError.js → notify-error/NotifyError.js} +0 -0
  194. package/src/plugins/notify-error/NotifyError.yml +11 -0
  195. package/src/plugins/{NotifySuccess.js → notify-success/NotifySuccess.js} +3 -3
  196. package/src/plugins/notify-success/NotifySuccess.yml +11 -0
  197. package/src/store/history.js +43 -0
  198. package/src/store/index.js +1 -0
  199. package/src/vue-plugin.js +185 -0
  200. package/.babelrc +0 -12
  201. package/.storybook/main.js +0 -35
  202. package/.storybook/preview.js +0 -26
  203. package/debug.log +0 -1
  204. package/index.js +0 -4
  205. package/jest-setup.js +0 -1
  206. package/jest.config.json +0 -22
  207. package/postcss.config.js +0 -5
  208. package/src/components/Introduction.stories.mdx +0 -12
  209. package/src/components/actions-menu/QasActionsMenu.stories.js +0 -73
  210. package/src/components/app-bar/QasAppBar.stories.js +0 -84
  211. package/src/components/app-menu/QasAppMenu.stories.js +0 -66
  212. package/src/components/apps-menu/QasAppsMenu.spec.js +0 -58
  213. package/src/components/apps-menu/QasAppsMenu.stories.js +0 -54
  214. package/src/components/apps-menu/QasAppsMenu.vue +0 -48
  215. package/src/components/avatar/QasAvatar.spec.js +0 -14
  216. package/src/components/avatar/QasAvatar.stories.js +0 -52
  217. package/src/components/box/QasBox.spec.js +0 -18
  218. package/src/components/box/QasBox.stories.js +0 -35
  219. package/src/components/break-line/QasBreakLine.stories.js +0 -57
  220. package/src/components/break-line/QasBreakLine.vue +0 -52
  221. package/src/components/btn/QasBtn.stories.js +0 -45
  222. package/src/components/btn-actions/QasBtnActions.stories.js +0 -77
  223. package/src/components/btn-actions/QasBtnActions.vue +0 -54
  224. package/src/components/card/QasCard.stories.js +0 -126
  225. package/src/components/checkbox-group/QasCheckboxGroup.stories.js +0 -59
  226. package/src/components/copy/QasCopy.stories.js +0 -41
  227. package/src/components/date-time-input/QasDateTimeInput.stories.js +0 -67
  228. package/src/components/debugger/QasDebugger.stories.js +0 -33
  229. package/src/components/delete/QasDelete.stories.js +0 -80
  230. package/src/components/dialog/QasDialog.stories.js +0 -139
  231. package/src/components/dialog-router/QasDialogRouter.stories.js +0 -38
  232. package/src/components/field/QasField.stories.js +0 -181
  233. package/src/components/filters/QasFilters.stories.js +0 -121
  234. package/src/components/form-generator/QasFormGenerator.stories.js +0 -115
  235. package/src/components/form-view/QasFormView.stories.js +0 -236
  236. package/src/components/gallery/QasGallery.stories.js +0 -91
  237. package/src/components/grid-generator/QasGridGenerator.stories.js +0 -142
  238. package/src/components/input/QasInput.stories.js +0 -78
  239. package/src/components/label/QasLabel.stories.js +0 -60
  240. package/src/components/layout/QasLayout.stories.js +0 -104
  241. package/src/components/list-items/QasListItems.stories.js +0 -135
  242. package/src/components/list-view/QasListView.stories.js +0 -168
  243. package/src/components/map/QasMap.stories.js +0 -75
  244. package/src/components/nested-fields/QasNestedFields.stories.js +0 -255
  245. package/src/components/numeric-input/QasNumericInput.stories.js +0 -92
  246. package/src/components/page-header/QasPageHeader.stories.js +0 -61
  247. package/src/components/password-input/QasPasswordInput.stories.js +0 -76
  248. package/src/components/password-strength-checker/QasPasswordStrengthChecker.stories.js +0 -54
  249. package/src/components/profile/QasProfile.stories.js +0 -131
  250. package/src/components/resizer/QasResizer.stories.js +0 -43
  251. package/src/components/search-box/QasSearchBox.stories.js +0 -111
  252. package/src/components/select/QasSelect.stories.js +0 -113
  253. package/src/components/select-list/QasSelectList.stories.js +0 -153
  254. package/src/components/signature-pad/QasSignaturePad.stories.js +0 -51
  255. package/src/components/signature-uploader/QasSignatureUploader.stories.js +0 -69
  256. package/src/components/single-view/QasSingleView.stories.js +0 -130
  257. package/src/components/sortable/QasSortable.stories.js +0 -80
  258. package/src/components/table-generator/QasTableGenerator.stories.js +0 -120
  259. package/src/components/tabs-generator/QasTabsGenerator.stories.js +0 -145
  260. package/src/components/text-truncate/QasTextTruncate.stories.js +0 -55
  261. package/src/components/tip/QasTip.stories.js +0 -57
  262. package/src/components/tip/QasTip.vue +0 -68
  263. package/src/components/tooltip/QasTooltip.stories.js +0 -63
  264. package/src/components/tooltip/QasTooltip.vue +0 -81
  265. package/src/components/transfer/QasTransfer.stories.js +0 -118
  266. package/src/components/uploader/QasCustomUploader.vue +0 -120
  267. package/src/components/uploader/QasUploader.stories.js +0 -139
  268. package/src/directives/Test.js +0 -13
  269. package/src/helpers/historyHandler.js +0 -52
  270. package/src/helpers/label.js +0 -3
  271. package/src/index.js +0 -249
  272. package/src/mixins/map-markers.js +0 -26
  273. package/src/mixins/unsaved-changes.js +0 -24
  274. package/src/mixins/uploader.js +0 -30
  275. package/src/mocks/json/user.json +0 -27
  276. package/src/mocks/json/users-new.json +0 -23
  277. package/src/mocks/json/users.json +0 -97
  278. package/src/mocks/storeModule.js +0 -71
  279. package/src/pages/Forbidden.vue +0 -6
  280. package/src/pages/NotFound.vue +0 -6
@@ -0,0 +1,38 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente de layout que engloba o "QasAppBar" e "QasAppMenu".
5
+
6
+ props:
7
+ app-bar-props:
8
+ desc: Propriedades do "QasAppBar".
9
+ default: {}
10
+ type: Object
11
+
12
+ app-menu-props:
13
+ desc: Propriedades do "QasAppMenu".
14
+ default: { animation: 500 }
15
+ type: Object
16
+
17
+ model-value:
18
+ desc: Model do componente, responsável por abrir/fechar menu lateral.
19
+ default: true
20
+ type: Boolean
21
+
22
+ slots:
23
+ app-bar:
24
+ desc: Slot para substituir o "QasAppBar".
25
+
26
+ app-menu:
27
+ desc: Slot para substituir o "QasAppMenu".
28
+
29
+ default:
30
+ desc: Slot para substituir o "QPageContainer".
31
+
32
+ events:
33
+ '@update:model-value -> function(value)':
34
+ desc: Dispara quando o model-value altera, também usado para v-model.
35
+ params:
36
+ value:
37
+ desc: Valor do mode-value.
38
+ type: Boolean
@@ -1,13 +1,13 @@
1
1
  <template>
2
2
  <div class="qas-list-items shadow-primary">
3
3
  <q-list bordered class="rounded-borders" separator>
4
- <q-item v-for="(item, index) in list" :key="index" v-ripple :clickable="!useIconRedirect" :to="redirect(item)">
4
+ <q-item v-for="(item, index) in list" :key="index" v-ripple :clickable="!redirectOnIcon" :to="redirect(item)">
5
5
  <slot :index="index" :item="item" name="item">
6
6
  <q-item-section>
7
7
  <slot :index="index" :item="item" name="item-section-left" />
8
8
  </q-item-section>
9
9
 
10
- <q-item-section side>
10
+ <q-item-section v-if="useSectionActions" side>
11
11
  <slot :index="index" :item="item" name="item-section-side">
12
12
  <qas-btn flat round :to="getRedirectPayload(item)">
13
13
  <q-icon v-bind="iconProps" />
@@ -24,13 +24,15 @@
24
24
  import QasBtn from '../btn/QasBtn.vue'
25
25
 
26
26
  export default {
27
+ name: 'QasListItems',
28
+
27
29
  components: {
28
30
  QasBtn
29
31
  },
30
32
 
31
33
  props: {
32
34
  iconProps: {
33
- default: () => ({ name: 'o_chevron_right', color: 'primary' }),
35
+ default: () => ({ color: 'primary', name: 'o_chevron_right' }),
34
36
  type: Object
35
37
  },
36
38
 
@@ -44,9 +46,9 @@ export default {
44
46
  type: String
45
47
  },
46
48
 
47
- paramKey: {
48
- default: 'id',
49
- type: String
49
+ redirectOnIcon: {
50
+ default: true,
51
+ type: Boolean
50
52
  },
51
53
 
52
54
  to: {
@@ -54,21 +56,22 @@ export default {
54
56
  type: Object
55
57
  },
56
58
 
57
- useIconRedirect: {
59
+ useSectionActions: {
60
+ default: true,
58
61
  type: Boolean
59
62
  }
60
63
  },
61
64
 
62
65
  methods: {
63
- redirect (item) {
64
- return this.useIconRedirect ? undefined : this.getRedirectPayload(item)
65
- },
66
-
67
66
  getRedirectPayload (item) {
68
67
  return {
69
- params: { [this.paramKey]: item[this.redirectKey] },
68
+ params: { [this.redirectKey]: item[this.redirectKey] },
70
69
  ...this.to
71
70
  }
71
+ },
72
+
73
+ redirect (item) {
74
+ return this.redirectOnIcon ? undefined : this.getRedirectPayload(item)
72
75
  }
73
76
  }
74
77
  }
@@ -0,0 +1,57 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente para listagem.
5
+
6
+ props:
7
+ icon-props:
8
+ desc: Props do [QIcon](https://quasar.dev/vue-components/icon#introduction)
9
+ default: { color: 'primary', name: 'o_chevron_right' }
10
+ type: Object
11
+
12
+ list:
13
+ desc: Lista para ser selecionada.
14
+ default: []
15
+ type: Array
16
+
17
+ redirect-key:
18
+ desc: Você pode enviar qualquer chave/valor dentro do array de objeto da prop "list", esta prop serve para você identificar qual vai ser a chave que vai redirecionar ao clicar no botão.
19
+ default: uuid
20
+ type: String
21
+
22
+ redirect-on-icon:
23
+ desc: Controla se o redirecionamento vai acontecer quando clicar no item inteiro ou somente no icon.
24
+ default: true
25
+ type: Boolean
26
+
27
+ to:
28
+ desc: Configuração passada para o vue-router.
29
+ default: {}
30
+ type: Object
31
+ examples: ["{ name: 'Root' }"]
32
+
33
+ use-section-actions:
34
+ desc: Controla se exibe ou não seção de actions, onde fica o Ícone de redirecionamento.
35
+ default: true
36
+ type: Boolean
37
+
38
+ slots:
39
+ item-section-left:
40
+ desc: Slot para acessar seção da esquerda.
41
+ scope:
42
+ item:
43
+ desc: Item dentro da listagem, vai depender do que foi passado.
44
+ type: Object
45
+ index:
46
+ desc: Posição do item na lista.
47
+ type: Number
48
+
49
+ item-section-side:
50
+ desc: Slot para acessar seção da direita, onde fica o Ícone.
51
+ scope:
52
+ item:
53
+ desc: Item dentro da listagem, vai depender do que foi passado.
54
+ type: Object
55
+ index:
56
+ desc: Posição do item na lista.
57
+ type: Number
@@ -1,21 +1,21 @@
1
1
  <template>
2
- <component :is="componentTag">
2
+ <component :is="mx_componentTag" :class="mx_componentClass">
3
3
  <q-pull-to-refresh :disable="disableRefresh" @refresh="refresh">
4
4
  <header v-if="hasHeaderSlot">
5
- <slot :fields="fields" :metadata="metadata" name="header" :results="results" />
5
+ <slot name="header" />
6
6
  </header>
7
7
 
8
- <slot v-if="!noFilter" :entity="entity" :errors="errors" :fields="fields" :metadata="metadata" name="filter" :results="results">
8
+ <slot v-if="useFilter" name="filter">
9
9
  <qas-filters v-bind="filtersProps" :entity="entity" />
10
10
  </slot>
11
11
 
12
12
  <main class="relative-position">
13
13
  <div v-if="hasResults">
14
- <slot :fields="fields" :metadata="metadata" :results="results" />
14
+ <slot />
15
15
  </div>
16
16
 
17
- <div v-else-if="!isFetching">
18
- <slot :fields="fields" :metadata="metadata" name="empty-results">
17
+ <div v-else-if="!mx_isFetching">
18
+ <slot name="empty-results">
19
19
  <div class="q-my-xl text-center">
20
20
  <q-icon class="q-mb-sm text-center" color="grey-6" name="o_search" size="38px" />
21
21
  <div class="text-grey-6">Nenhum item encontrado.</div>
@@ -31,7 +31,7 @@
31
31
  <q-pagination v-model="page" boundary-links class="flex-center" direction-links :input="$q.screen.lt.sm" :max="totalPages" :max-pages="6" @click="changePage" />
32
32
  </div>
33
33
 
34
- <q-inner-loading :showing="hasResults && isFetching">
34
+ <q-inner-loading :showing="hasResults && mx_isFetching">
35
35
  <q-spinner color="grey" size="3em" />
36
36
  </q-inner-loading>
37
37
  </main>
@@ -42,10 +42,9 @@
42
42
  </template>
43
43
 
44
44
  <script>
45
- import contextMixin from '../../mixins/context.js'
46
- import viewMixin from '../../mixins/view.js'
47
-
45
+ import { viewMixin, contextMixin } from '../../mixins'
48
46
  import QasFilters from '../filters/QasFilters.vue'
47
+ import { extend } from 'quasar'
49
48
 
50
49
  export default {
51
50
  components: {
@@ -59,17 +58,29 @@ export default {
59
58
  type: Boolean
60
59
  },
61
60
 
62
- noFilter: {
63
- default: false,
61
+ useFilter: {
62
+ default: true,
64
63
  type: Boolean
65
64
  },
66
65
 
67
66
  filtersProps: {
68
67
  default: () => ({}),
69
68
  type: Object
69
+ },
70
+
71
+ results: {
72
+ default: () => [],
73
+ type: Array
70
74
  }
71
75
  },
72
76
 
77
+ emits: [
78
+ 'fetch-success',
79
+ 'fetch-error',
80
+ 'update:errors',
81
+ 'update:results'
82
+ ],
83
+
73
84
  data () {
74
85
  return {
75
86
  page: 1
@@ -77,13 +88,8 @@ export default {
77
88
  },
78
89
 
79
90
  computed: {
80
- context () {
81
- const { limit, ordering, page, search, ...filters } = this.$route.query
82
- return { filters, limit, ordering, page: page ? parseInt(page) : 1, search }
83
- },
84
-
85
91
  hasHeaderSlot () {
86
- return !!(this.$slots.header || this.$scopedSlots.header)
92
+ return !!this.$slots.header
87
93
  },
88
94
 
89
95
  hasPages () {
@@ -91,10 +97,10 @@ export default {
91
97
  },
92
98
 
93
99
  hasResults () {
94
- return !!(this.results || []).length
100
+ return !!(this.resultsModel || []).length
95
101
  },
96
102
 
97
- results () {
103
+ resultsModel () {
98
104
  return this.$store.getters[`${this.entity}/list`]
99
105
  },
100
106
 
@@ -104,9 +110,18 @@ export default {
104
110
  },
105
111
 
106
112
  watch: {
107
- $route () {
108
- this.fetchList()
109
- this.setCurrentPage()
113
+ $route (to, from) {
114
+ if (to.name === from.name) {
115
+ this.fetchList()
116
+ this.setCurrentPage()
117
+ }
118
+ },
119
+
120
+ resultsModel: {
121
+ handler (value) {
122
+ this.$emit('update:results', extend([], true, value))
123
+ },
124
+ immediate: true
110
125
  }
111
126
  },
112
127
 
@@ -121,23 +136,34 @@ export default {
121
136
  this.$router.push({ query })
122
137
  },
123
138
 
124
- async fetchList () {
125
- this.isFetching = true
139
+ async fetchList (filters = {}) {
140
+ this.mx_isFetching = true
126
141
 
127
142
  try {
128
- const response = await this.$store.dispatch(`${this.entity}/fetchList`, { ...this.context, url: this.url })
143
+ const response = await this.$store.dispatch(
144
+ `${this.entity}/fetchList`,
145
+ { ...this.mx_context, url: this.url, filters }
146
+ )
147
+
129
148
  const { errors, fields, metadata } = response.data
130
149
 
131
- this.setErrors(errors)
132
- this.setFields(fields)
133
- this.setMetadata(metadata)
150
+ this.mx_setErrors(errors)
151
+ this.mx_setFields(fields)
152
+ this.mx_setMetadata(metadata)
153
+
154
+ this.mx_updateModels({
155
+ errors: this.mx_errors,
156
+ fields: this.mx_fields,
157
+ metadata: this.mx_metadata
158
+ })
134
159
 
135
160
  this.$emit('fetch-success', response)
136
161
  } catch (error) {
137
- this.fetchError(error)
162
+ this.mx_fetchError(error)
163
+ this.$emit('update:errors', error)
138
164
  this.$emit('fetch-error', error)
139
165
  } finally {
140
- this.isFetching = false
166
+ this.mx_isFetching = false
141
167
  }
142
168
  },
143
169
 
@@ -0,0 +1,132 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente para C.R.U.D. responsável pela parte de listagem (Read).
5
+
6
+ props:
7
+ entity:
8
+ 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".
9
+ required: true
10
+ type: String
11
+
12
+ dialog:
13
+ desc: Este componente pode ser utilizado dentro de um dialog, neste caso o componente pai não pode ser um "QPage" e sim uma "div", esta prop cuida disto.
14
+ type: Boolean
15
+
16
+ url:
17
+ desc: Envia como parâmetro para a action "fetchList" do modulo correspondente a "entity".
18
+ type: String
19
+
20
+ results:
21
+ model: true
22
+ desc: Model de results, utilizado para recuperar a lista retornada pelo componente.
23
+ default: []
24
+ type: Array
25
+ examples: [v-model:results="results"]
26
+
27
+ fields:
28
+ model: true
29
+ desc: Model de fields, utilizado para recuperar os fields fora do template.
30
+ default: {}
31
+ type: Object
32
+ examples: [v-model:fields="fields"]
33
+
34
+ errors:
35
+ model: true
36
+ desc: Model de errors, utilizado para recuperar os errors fora do template.
37
+ default: {}
38
+ type: Object
39
+ examples: [v-model:errors="errors"]
40
+
41
+ metadata:
42
+ model: true
43
+ desc: Model de metadata, utilizado para recuperar os metadata fora do template.
44
+ default: {}
45
+ type: Object
46
+ examples: [v-model:metadata="metadata"]
47
+
48
+ fetching:
49
+ model: true
50
+ desc: Model de fetching, utilizado para saber se o componente está fazendo fetching de dados.
51
+ type: Boolean
52
+ examples: [v-model:fetching="isFetching"]
53
+
54
+ disable-refresh:
55
+ desc: Desabilita o [pull-to-refresh](https://quasar.dev/vue-components/pull-to-refresh#basic).
56
+ type: Boolean
57
+
58
+ use-filter:
59
+ desc: Controla se o componente vai usar ou não o componente "QasFilters".
60
+ default: true
61
+ type: Boolean
62
+
63
+ filters-props:
64
+ desc: Repassa as props para o componente "QasFilters".
65
+ default: {}
66
+ type: Object
67
+
68
+ slots:
69
+ header:
70
+ desc: 'Slot para acessar o header.'
71
+
72
+ filter:
73
+ desc: 'Slot para acessar o filtro.'
74
+
75
+ default:
76
+ desc: 'Slot para ter o conteúdo principal (dentro do main).'
77
+
78
+ empty-results:
79
+ desc: 'Slot acessar quando a listagem está vazia.'
80
+
81
+ footer:
82
+ desc: 'Slot para acessar o footer.'
83
+
84
+ events:
85
+ '@update:results -> function(value)':
86
+ desc: Dispara quando a action "fetchList" é executada com sucesso, é chamado antes do evento "fetch-success".
87
+ params:
88
+ value:
89
+ desc: lista retornada no "fetchList".
90
+ type: Array
91
+
92
+ '@update:fields -> function(value)':
93
+ desc: Dispara quando a action "fetchList" é executada com sucesso, é chamado antes do evento "fetch-success".
94
+ params:
95
+ value:
96
+ desc: fields.
97
+ type: Object
98
+
99
+ '@update:errors -> function(value)':
100
+ desc: Dispara quando a action "fetchList" é chamada.
101
+ params:
102
+ value:
103
+ desc: Errors durante o fetch.
104
+ type: Object
105
+
106
+ '@update:metadata -> function(value)':
107
+ desc: Dispara quando a action "fetchList" acontece com sucesso, é chamado antes do evento "fetch-success".
108
+ params:
109
+ value:
110
+ desc: metadata.
111
+ type: Object
112
+
113
+ '@update:fetching -> function(value)':
114
+ desc: Dispara logo antes da action "fetchList" e ao cair no bloco "finally", ou seja, quando começar o fetching e após terminar.
115
+ params:
116
+ value:
117
+ desc: Retorna se está ou não fazendo fetching de dados.
118
+ type: Boolean
119
+
120
+ '@fetch-success -> function(value)':
121
+ desc: Dispara quando a action "fetchList" é executada com sucesso.
122
+ params:
123
+ value:
124
+ desc: Retorna todos os dados "cru" respondido pelo fetch.
125
+ type: Object
126
+
127
+ '@fetch-error -> function(value)':
128
+ desc: Dispara quando a action "fetchList" cai em uma exceção.
129
+ params:
130
+ value:
131
+ desc: Retorna todos os dados "cru" respondido na exceção do fetch.
132
+ type: Object
@@ -1,37 +1,24 @@
1
1
  <template>
2
2
  <div class="qas-map">
3
- <!-- TODO descomentar quando implementar o input de pesquisa -->
4
- <!-- <div v-if="hasSearch" class="items-center no-wrap row">
5
- <gmap-autocomplete class="q-field__native q-placeholder" placeholder="Pesquisar..." />
6
- <q-icon color="primary" name="o_search" size="24px" />
7
- </div> -->
8
- <gmap-map :center="centerPosition" class="qas-map__draw" :zoom="zoom">
9
- <gmap-marker v-for="(marker, index) in markers" :key="index" :draggable="marker.draggable" :icon="marker.icon" :position="marker.position" @dragend="getPosition" @mouseout="closePopup" @mouseover="openPopup(marker, index)">
10
- <gmap-info-window :opened="canShowPopup(index)">
3
+ <g-map-map :center="centerPosition" class="qas-map__draw" :zoom="zoom">
4
+ <g-map-marker v-for="(marker, index) in markers" :key="index" :draggable="marker.draggable" :icon="marker.icon" :position="marker.position" @dragend="updatePosition" @mouseout="closePopup" @mouseover="openPopup(marker, index)">
5
+ <g-map-info-window :opened="canShowPopup(index)">
11
6
  <div class="text-weight-bold">{{ marker.title }}</div>
12
7
  <div>{{ marker.description }}</div>
13
- </gmap-info-window>
14
- </gmap-marker>
15
- </gmap-map>
8
+ </g-map-info-window>
9
+ </g-map-marker>
10
+ </g-map-map>
16
11
  </div>
17
12
  </template>
18
13
 
19
14
  <script>
20
- import formMixin from '../../mixins/form.js'
21
-
22
15
  export default {
23
- mixins: [
24
- formMixin
25
- ],
16
+ name: 'QasMap',
26
17
 
27
18
  props: {
28
19
  centerPosition: {
29
20
  type: Object,
30
- default: () => {}
31
- },
32
-
33
- hasSearch: {
34
- type: Boolean
21
+ default: () => ({})
35
22
  },
36
23
 
37
24
  markers: {
@@ -39,7 +26,7 @@ export default {
39
26
  default: () => []
40
27
  },
41
28
 
42
- showPopup: {
29
+ usePopup: {
43
30
  type: Boolean
44
31
  },
45
32
 
@@ -49,11 +36,13 @@ export default {
49
36
  }
50
37
  },
51
38
 
39
+ emits: ['update-position'],
40
+
52
41
  data () {
53
42
  return {
54
43
  isPopupDisplayed: false,
55
44
  currentPlace: null,
56
- indexMarker: ''
45
+ indexMarker: null
57
46
  }
58
47
  },
59
48
 
@@ -64,28 +53,23 @@ export default {
64
53
  },
65
54
 
66
55
  canShowPopup (index) {
67
- return this.isPopupDisplayed && this.showPopup && index === this.indexMarker
56
+ return this.isPopupDisplayed && this.usePopup && index === this.indexMarker
68
57
  },
69
58
 
70
59
  closePopup () {
71
60
  this.isPopupDisplayed = false
72
61
  },
73
62
 
74
- getPosition (mouseEvent) {
63
+ updatePosition (mouseEvent) {
75
64
  this.$emit('update-position', mouseEvent.latLng.toJSON())
76
65
  }
77
-
78
- // TODO descomentar quando implementar o input de pesquisa
79
- // setPlace (place) {
80
- // this.currentPlace = place
81
- // }
82
66
  }
83
67
  }
84
68
  </script>
85
69
 
86
70
  <style lang="scss">
87
71
  .qas-map {
88
- &__draw{
72
+ &__draw {
89
73
  height: 300px;
90
74
  width: 100%;
91
75
  }
@@ -0,0 +1,33 @@
1
+ type: component
2
+
3
+ meta:
4
+ desc: Componente para gerar google maps.
5
+
6
+ props:
7
+ center-position:
8
+ desc: Opções de localização onde o mapa vai ser centralizado.
9
+ default: {}
10
+ type: Object
11
+ examples: ["{ lat: -21.17663, lng: -47.820839 }"]
12
+
13
+ markers:
14
+ desc: Marcadores (pin) do mapa.
15
+ default: []
16
+ type: Array
17
+
18
+ use-popup:
19
+ desc: Controla se os markers vai ter popup ou não.
20
+ type: Boolean
21
+
22
+ zoom:
23
+ desc: Zoom do mapa.
24
+ default: 17
25
+ type: Number
26
+
27
+ events:
28
+ '@update-position -> function(value)':
29
+ desc: Dispara muda a posição do marker.
30
+ params:
31
+ value:
32
+ desc: Nova posição.
33
+ type: Object