@bildvitta/quasar-ui-asteroid 3.0.0-beta.2 → 3.0.0-beta.20

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 (173) hide show
  1. package/dist/api/QasActionsMenu.json +15 -15
  2. package/dist/api/QasAppBar.json +4 -8
  3. package/dist/api/QasAppMenu.json +11 -7
  4. package/dist/api/QasBtn.json +8 -4
  5. package/dist/api/QasCard.json +17 -13
  6. package/dist/api/QasCheckboxGroup.json +8 -8
  7. package/dist/api/QasCopy.json +4 -4
  8. package/dist/api/QasDateTimeInput.json +16 -16
  9. package/dist/api/QasDelete.json +17 -17
  10. package/dist/api/QasDialog.json +24 -20
  11. package/dist/api/QasFilters.json +14 -14
  12. package/dist/api/QasFormGenerator.json +57 -26
  13. package/dist/api/QasFormView.json +115 -87
  14. package/dist/api/QasGallery.json +4 -4
  15. package/dist/api/QasGridGenerator.json +40 -39
  16. package/dist/api/QasInput.json +13 -13
  17. package/dist/api/QasListItems.json +18 -17
  18. package/dist/api/QasListView.json +67 -53
  19. package/dist/api/QasNestedFields.json +45 -35
  20. package/dist/api/QasNumericInput.json +31 -12
  21. package/dist/api/QasPageHeader.json +7 -7
  22. package/dist/api/QasPasswordInput.json +13 -13
  23. package/dist/api/QasPasswordStrengthChecker.json +12 -12
  24. package/dist/api/QasProfile.json +5 -5
  25. package/dist/api/QasResizer.json +11 -11
  26. package/dist/api/QasSearchBox.json +90 -8
  27. package/dist/api/QasSelect.json +92 -25
  28. package/dist/api/QasSelectList.json +16 -14
  29. package/dist/api/QasSignaturePad.json +1 -1
  30. package/dist/api/QasSignatureUploader.json +9 -9
  31. package/dist/api/QasSingleView.json +52 -43
  32. package/dist/api/QasSortable.json +20 -20
  33. package/dist/api/QasTableGenerator.json +5 -5
  34. package/dist/api/QasTabsGenerator.json +5 -2
  35. package/dist/api/QasTransfer.json +9 -9
  36. package/dist/api/QasUploader.json +22 -17
  37. package/dist/asteroid.cjs.css +1 -1
  38. package/dist/asteroid.cjs.js +3904 -3102
  39. package/dist/asteroid.cjs.min.js +2 -2
  40. package/dist/asteroid.esm.css +1 -1
  41. package/dist/asteroid.esm.js +3908 -3106
  42. package/dist/asteroid.esm.min.js +2 -2
  43. package/dist/asteroid.umd.css +1 -1
  44. package/dist/asteroid.umd.js +3907 -3106
  45. package/dist/asteroid.umd.min.js +2 -2
  46. package/dist/vetur/asteroid-attributes.json +387 -303
  47. package/dist/vetur/asteroid-tags.json +129 -108
  48. package/package.json +1 -1
  49. package/src/assets/gear.svg +27 -0
  50. package/src/components/actions/QasActions.vue +1 -5
  51. package/src/components/actions-menu/QasActionsMenu.vue +4 -10
  52. package/src/components/actions-menu/QasActionsMenu.yml +15 -15
  53. package/src/components/app-bar/QasAppBar.vue +18 -14
  54. package/src/components/app-bar/QasAppBar.yml +4 -8
  55. package/src/components/app-menu/QasAppMenu.vue +8 -7
  56. package/src/components/app-menu/QasAppMenu.yml +11 -7
  57. package/src/components/avatar/QasAvatar.vue +0 -4
  58. package/src/components/box/QasBox.vue +1 -1
  59. package/src/components/btn/QasBtn.vue +11 -15
  60. package/src/components/btn/QasBtn.yml +7 -3
  61. package/src/components/card/QasCard.vue +18 -9
  62. package/src/components/card/QasCard.yml +17 -13
  63. package/src/components/checkbox-group/QasCheckboxGroup.yml +9 -8
  64. package/src/components/copy/QasCopy.vue +1 -1
  65. package/src/components/copy/QasCopy.yml +4 -3
  66. package/src/components/date-time-input/QasDateTimeInput.vue +39 -41
  67. package/src/components/date-time-input/QasDateTimeInput.yml +16 -16
  68. package/src/components/delete/QasDelete.vue +15 -1
  69. package/src/components/delete/QasDelete.yml +15 -15
  70. package/src/components/dialog/QasDialog.vue +28 -9
  71. package/src/components/dialog/QasDialog.yml +22 -18
  72. package/src/components/dialog-router/QasDialogRouter.vue +1 -1
  73. package/src/components/field/QasField.vue +15 -14
  74. package/src/components/filters/QasFilters.vue +30 -13
  75. package/src/components/filters/QasFilters.yml +14 -14
  76. package/src/components/form-generator/QasFormGenerator.vue +87 -12
  77. package/src/components/form-generator/QasFormGenerator.yml +32 -18
  78. package/src/components/form-view/QasFormView.vue +142 -60
  79. package/src/components/form-view/QasFormView.yml +91 -67
  80. package/src/components/gallery/QasGallery.vue +4 -8
  81. package/src/components/gallery/QasGallery.yml +4 -4
  82. package/src/components/grid-generator/QasGridGenerator.vue +23 -7
  83. package/src/components/grid-generator/QasGridGenerator.yml +29 -27
  84. package/src/components/input/QasInput.vue +37 -21
  85. package/src/components/input/QasInput.yml +13 -13
  86. package/src/components/layout/QasLayout.vue +4 -0
  87. package/src/components/list-items/QasListItems.vue +16 -24
  88. package/src/components/list-items/QasListItems.yml +14 -15
  89. package/src/components/list-view/QasListView.vue +48 -20
  90. package/src/components/list-view/QasListView.yml +58 -46
  91. package/src/components/map/QasMap.vue +5 -5
  92. package/src/components/nested-fields/QasNestedFields.vue +29 -21
  93. package/src/components/nested-fields/QasNestedFields.yml +35 -28
  94. package/src/components/numeric-input/QasNumericInput.vue +45 -27
  95. package/src/components/numeric-input/QasNumericInput.yml +26 -12
  96. package/src/components/page-header/QasPageHeader.vue +14 -11
  97. package/src/components/page-header/QasPageHeader.yml +4 -4
  98. package/src/components/password-input/QasPasswordInput.vue +17 -16
  99. package/src/components/password-input/QasPasswordInput.yml +11 -11
  100. package/src/components/password-strength-checker/QasPasswordStrengthChecker.yml +10 -10
  101. package/src/components/profile/QasProfile.vue +3 -6
  102. package/src/components/profile/QasProfile.yml +5 -5
  103. package/src/components/resizer/QasResizer.vue +1 -1
  104. package/src/components/resizer/QasResizer.yml +6 -5
  105. package/src/components/search-box/QasSearchBox.vue +138 -42
  106. package/src/components/search-box/QasSearchBox.yml +74 -7
  107. package/src/components/select/QasSelect.vue +63 -53
  108. package/src/components/select/QasSelect.yml +68 -17
  109. package/src/components/select-list/QasSelectList.vue +13 -32
  110. package/src/components/select-list/QasSelectList.yml +13 -14
  111. package/src/components/signature-pad/QasSignaturePad.vue +1 -1
  112. package/src/components/signature-pad/QasSignaturePad.yml +1 -1
  113. package/src/components/signature-uploader/QasSignatureUploader.vue +13 -14
  114. package/src/components/signature-uploader/QasSignatureUploader.yml +9 -9
  115. package/src/components/single-view/QasSingleView.vue +24 -8
  116. package/src/components/single-view/QasSingleView.yml +45 -38
  117. package/src/components/sortable/QasSortable.yml +17 -17
  118. package/src/components/table-generator/QasTableGenerator.vue +14 -6
  119. package/src/components/table-generator/QasTableGenerator.yml +5 -5
  120. package/src/components/tabs-generator/QasTabsGenerator.vue +2 -2
  121. package/src/components/tabs-generator/QasTabsGenerator.yml +2 -2
  122. package/src/components/text-truncate/QasTextTruncate.vue +2 -5
  123. package/src/components/transfer/QasTransfer.vue +5 -7
  124. package/src/components/transfer/QasTransfer.yml +9 -9
  125. package/src/components/uploader/QasUploader.vue +63 -16
  126. package/src/components/uploader/QasUploader.yml +17 -12
  127. package/src/composables/index.js +1 -1
  128. package/src/composables/{useHistory.js → use-history.js} +0 -0
  129. package/src/css/components/base.scss +3 -0
  130. package/src/css/components/field.scss +4 -0
  131. package/src/css/components/index.scss +4 -0
  132. package/src/css/components/radio.scss +3 -0
  133. package/src/css/components/tabs.scss +3 -0
  134. package/src/css/mixins/index.scss +1 -0
  135. package/src/css/{set-brand.scss → mixins/set-brand.scss} +0 -0
  136. package/src/css/{background.scss → utils/background.scss} +0 -0
  137. package/src/css/{border-radius.scss → utils/border-radius.scss} +0 -0
  138. package/src/css/{border.scss → utils/border.scss} +0 -0
  139. package/src/css/{container.scss → utils/container.scss} +0 -0
  140. package/src/css/{fonts.scss → utils/fonts.scss} +0 -0
  141. package/src/css/utils/index.scss +9 -0
  142. package/src/css/{line-height.scss → utils/line-height.scss} +0 -0
  143. package/src/css/{opacity.scss → utils/opacity.scss} +0 -0
  144. package/src/css/{text.scss → utils/text.scss} +0 -0
  145. package/src/css/{unset.scss → utils/unset.scss} +0 -0
  146. package/src/css/variables/button.scss +3 -0
  147. package/src/css/variables/index.scss +3 -0
  148. package/src/css/variables/shadow.scss +33 -0
  149. package/src/css/variables/typography.scss +139 -0
  150. package/src/helpers/camelize-fields-name.js +15 -0
  151. package/src/helpers/filters.js +2 -0
  152. package/src/helpers/get-normalized-options.js +20 -0
  153. package/src/helpers/handle-process.js +13 -0
  154. package/src/helpers/index.js +3 -0
  155. package/src/index.scss +11 -12
  156. package/src/mixins/generator.js +10 -2
  157. package/src/mixins/index.js +3 -3
  158. package/src/mixins/search-filter.js +227 -0
  159. package/src/mixins/view.js +35 -13
  160. package/src/pages/ErrorComponent.vue +56 -0
  161. package/src/pages/Forbidden.vue +21 -5
  162. package/src/pages/NotFound.vue +21 -5
  163. package/src/pages/ServerError.vue +25 -0
  164. package/src/pages/Unauthorized.vue +28 -0
  165. package/src/plugins/index.js +4 -2
  166. package/src/plugins/logger/Logger.js +44 -0
  167. package/src/plugins/logger/Logger.yml +9 -0
  168. package/src/plugins/screen/Screen.js +5 -0
  169. package/src/vue-plugin.js +6 -3
  170. package/src/assets/logo-modular.svg +0 -1
  171. package/src/css/design-system.scss +0 -18
  172. package/src/css/shadow.scss +0 -7
  173. package/src/mixins/screen.js +0 -34
@@ -4,29 +4,28 @@ meta:
4
4
  desc: Componente para C.R.U.D. responsável pela visualização (Read) ou conhecido também como "show".
5
5
 
6
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
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 })']
11
12
 
12
13
  custom-id:
13
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.
14
15
  type: String
15
16
  examples: ['my-custom-id']
16
17
 
17
- dialog:
18
- 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.
19
- type: Boolean
20
-
21
- url:
22
- desc: Envia como parâmetro para a action "fetchSingle" do modulo correspondente a "entity".
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
23
21
  type: String
24
22
 
25
- result:
23
+ errors:
26
24
  model: true
27
- desc: Model de result, utilizado para recuperar o resultado retornado pelo componente.
25
+ desc: Model de errors, utilizado para recuperar os errors fora do template.
26
+ default: {}
28
27
  type: Object
29
- examples: [v-model:result="result"]
28
+ examples: [v-model:errors="errors"]
30
29
 
31
30
  fields:
32
31
  model: true
@@ -35,12 +34,11 @@ props:
35
34
  type: Object
36
35
  examples: [v-model:fields="fields"]
37
36
 
38
- errors:
37
+ fetching:
39
38
  model: true
40
- desc: Model de errors, utilizado para recuperar os errors fora do template.
41
- default: {}
42
- type: Object
43
- examples: [v-model:errors="errors"]
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"]
44
42
 
45
43
  metadata:
46
44
  model: true
@@ -49,23 +47,46 @@ props:
49
47
  type: Object
50
48
  examples: [v-model:metadata="metadata"]
51
49
 
52
- fetching:
50
+ result:
53
51
  model: true
54
- desc: Model de fetching, utilizado para saber se o componente está fazendo fetching de dados.
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
55
63
  type: Boolean
56
- examples: [v-model:fetching="isFetching"]
57
64
 
58
65
  slots:
59
- header:
60
- desc: 'Slot para acessar o header.'
61
-
62
66
  default:
63
67
  desc: 'Slot para ter o conteúdo principal (dentro do main).'
64
68
 
65
69
  footer:
66
70
  desc: 'Slot para acessar o footer.'
67
71
 
72
+ header:
73
+ desc: 'Slot para acessar o header.'
74
+
68
75
  events:
76
+ '@fetch-success -> function(value)':
77
+ desc: Dispara quando a action "fetchSingle" é executada com sucesso.
78
+ params:
79
+ value:
80
+ desc: Retorna todos os dados "cru" respondido pelo fetch.
81
+ type: Object
82
+
83
+ '@fetch-error -> function(value)':
84
+ desc: Dispara quando a action "fetchSingle" cai em uma exceção.
85
+ params:
86
+ value:
87
+ desc: Retorna todos os dados "cru" respondido na exceção do fetch.
88
+ type: Object
89
+
69
90
  '@update:result -> function(value)':
70
91
  desc: Dispara quando a action "fetchSingle" é executada com sucesso, é chamado antes do evento "fetch-success".
71
92
  params:
@@ -100,17 +121,3 @@ events:
100
121
  value:
101
122
  desc: Retorna se está ou não fazendo fetching de dados.
102
123
  type: Boolean
103
-
104
- '@fetch-success -> function(value)':
105
- desc: Dispara quando a action "fetchSingle" é executada com sucesso.
106
- params:
107
- value:
108
- desc: Retorna todos os dados "cru" respondido pelo fetch.
109
- type: Object
110
-
111
- '@fetch-error -> function(value)':
112
- desc: Dispara quando a action "fetchSingle" cai em uma exceção.
113
- params:
114
- value:
115
- desc: Retorna todos os dados "cru" respondido na exceção do fetch.
116
- type: Object
@@ -9,15 +9,22 @@ props:
9
9
  required: true
10
10
  type: String
11
11
 
12
+ list:
13
+ desc: Lista que vai ser reordenada.
14
+ default: []
15
+ type: Array
16
+
12
17
  sortable-options:
13
18
  desc: Opções do "sortablejs" (https://github.com/SortableJS/Sortable#options).
14
19
  default: { animation: 500 }
15
20
  type: Object
16
21
 
17
- list:
18
- desc: Lista que vai ser reordenada.
22
+ sorted:
23
+ desc: Model da lista reordenada
19
24
  default: []
20
25
  type: Array
26
+ examples: [v-model:sorted="fields"]
27
+ model: true
21
28
 
22
29
  tag:
23
30
  desc: Tag do componente pai.
@@ -28,24 +35,17 @@ props:
28
35
  desc: Parâmetro enviado para a action "replace".
29
36
  type: String
30
37
 
31
- sorted:
32
- desc: Model da lista reordenada
33
- default: []
34
- type: Array
35
- examples: [v-model:sorted="fields"]
36
- model: true
37
-
38
38
  slots:
39
39
  default:
40
40
  desc: Slot para adicionar os items que serão reordenados.
41
41
 
42
42
  events:
43
- '@update:sorted -> function(value)':
44
- desc: Dispara no created e toda vez que a prop "list" muda, usado para o v-model:sorted.
43
+ '@error -> function(value)':
44
+ desc: Dispara toda vez que acontece algum erro ao salvar a nova ordenação.
45
45
  params:
46
46
  value:
47
- desc: Lista contendo nova ordenação.
48
- type: Array
47
+ desc: fields.
48
+ type: Object
49
49
 
50
50
  '@sort -> function(value)':
51
51
  desc: Dispara toda vez que acontece uma nova ordenação.
@@ -57,9 +57,9 @@ events:
57
57
  desc: fields.
58
58
  type: Object
59
59
 
60
- '@error -> function(value)':
61
- desc: Dispara toda vez que acontece algum erro ao salvar a nova ordenação.
60
+ '@update:sorted -> function(value)':
61
+ desc: Dispara no created e toda vez que a prop "list" muda, usado para o v-model:sorted.
62
62
  params:
63
63
  value:
64
- desc: fields.
65
- type: Object
64
+ desc: Lista contendo nova ordenação.
65
+ type: Array
@@ -16,13 +16,10 @@
16
16
  import { extend } from 'quasar'
17
17
  import { humanize } from '../../helpers/filters'
18
18
  import { setScrollOnGrab } from '../../helpers'
19
- import screenMixin from '../../mixins/screen'
20
19
 
21
20
  export default {
22
21
  name: 'QasTableGenerator',
23
22
 
24
- mixins: [screenMixin],
25
-
26
23
  props: {
27
24
  columns: {
28
25
  default: () => [],
@@ -104,6 +101,8 @@ export default {
104
101
  columnByField(this.fields[index])
105
102
  }
106
103
 
104
+ this.$qas.logger.group('QasTableGenerator - Automatic columns', [columns])
105
+
107
106
  return columns
108
107
  }
109
108
 
@@ -116,6 +115,8 @@ export default {
116
115
  }
117
116
  })
118
117
 
118
+ this.$qas.logger.group('QasTableGenerator - columns', [columns])
119
+
119
120
  return columns
120
121
  },
121
122
 
@@ -132,9 +133,11 @@ export default {
132
133
  },
133
134
 
134
135
  resultsByFields () {
136
+ if (!Object.keys(this.fields).length) return []
137
+
135
138
  const results = extend(true, [], this.results)
136
139
 
137
- return results.map((result, index) => {
140
+ const mappedResults = results.map((result, index) => {
138
141
  for (const key in result) {
139
142
  result.default = this.results[index]
140
143
  result[key] = humanize(this.fields[key], result[key]) || this.emptyResultText
@@ -142,6 +145,10 @@ export default {
142
145
 
143
146
  return result
144
147
  })
148
+
149
+ this.$qas.logger.group('QasTableGenerator - resultsByFields', [mappedResults])
150
+
151
+ return mappedResults
145
152
  },
146
153
 
147
154
  rowsPerPage () {
@@ -149,7 +156,7 @@ export default {
149
156
  },
150
157
 
151
158
  tableClass () {
152
- return this.mx_isSmall && 'qas-table-generator--mobile'
159
+ return this.$qas.screen.isSmall && 'qas-table-generator--mobile'
153
160
  },
154
161
 
155
162
  hasScrollOnGrab () {
@@ -202,10 +209,11 @@ export default {
202
209
  handleScrollOnGrab () {
203
210
  const fullTableWidth = this.getFullTableWidth()
204
211
  const containerTableWidth = this.getContainerTableWidth()
212
+ const hasScrollOnGrab = !!Object.keys(this.scrollOnGrab).length
205
213
 
206
214
  if (fullTableWidth > containerTableWidth) {
207
215
  this.initializeScrollOnGrab()
208
- } else if (this.hasScrollOnGrab) {
216
+ } else if (hasScrollOnGrab) {
209
217
  this.scrollOnGrab.destroyEvents()
210
218
  this.scrollOnGrab.element.style.cursor = 'auto'
211
219
  this.scrollOnGrab = {}
@@ -9,6 +9,11 @@ props:
9
9
  default: []
10
10
  type: Array
11
11
 
12
+ empty-result-text:
13
+ desc: Quando uma célula da tabela está vazia, esta prop define qual será o valor padrão.
14
+ default: '-'
15
+ type: String
16
+
12
17
  fields:
13
18
  desc: Lista de field contendo informações necessárias para a criação da tabela.
14
19
  default: {}
@@ -26,11 +31,6 @@ props:
26
31
  default: name
27
32
  type: String
28
33
 
29
- empty-result-text:
30
- desc: Quando uma célula da tabela está vazia, esta prop define qual será o valor padrão.
31
- default: '-'
32
- type: String
33
-
34
34
  use-scroll-on-grab:
35
35
  desc: Adiciona scroll pelo mouse ao arrastar tabela em todas as telas (Celular, Desktop).
36
36
  default: true
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <q-tabs v-model="model" :active-color="activeColor" :indicator-color="indicatorColor" outside-arrows>
3
3
  <slot v-for="(tab, key) in formattedTabs" :item="tab" :name="`tab-${tab.value}`">
4
- <q-tab :key="key" v-bind="tab" :class="tabClass" :label="tab.label" :name="key">
4
+ <q-tab :key="key" v-bind="tab" :class="tabClass" :label="tab.label" :name="tab.value">
5
5
  <slot :item="tab" :name="`tab-after-${tab.value}`">
6
6
  <q-badge v-if="counters[key]" :label="counters[key]" v-bind="defaultCounterProps" />
7
7
  </slot>
@@ -50,7 +50,7 @@ export default {
50
50
  tabs: {
51
51
  default: () => ({}),
52
52
  required: true,
53
- type: Object
53
+ type: [Object, Array]
54
54
  }
55
55
  },
56
56
 
@@ -38,9 +38,9 @@ props:
38
38
  type: String
39
39
 
40
40
  tabs:
41
- desc: Objeto contendo todas as tabs a serem geradas.
41
+ desc: Objeto ou Array contendo todas as tabs a serem geradas.
42
42
  default: {}
43
- type: Object
43
+ type: [Object, Array]
44
44
  examples: ["{ tab1: 'tab1', tab2: 'tab2' }"]
45
45
 
46
46
  slots:
@@ -18,7 +18,6 @@
18
18
  </template>
19
19
 
20
20
  <script>
21
- import screenMixin from '../../mixins/screen'
22
21
  import QasDialog from '../dialog/QasDialog.vue'
23
22
 
24
23
  export default {
@@ -28,8 +27,6 @@ export default {
28
27
  QasDialog
29
28
  },
30
29
 
31
- mixins: [screenMixin],
32
-
33
30
  props: {
34
31
  dialogProps: {
35
32
  type: Object,
@@ -69,7 +66,7 @@ export default {
69
66
 
70
67
  computed: {
71
68
  truncateTextClass () {
72
- return (this.isTruncated || this.mx_isSmall) && 'ellipsis q-pr-sm'
69
+ return (this.isTruncated || this.$qas.screen.isSmall) && 'ellipsis q-pr-sm'
73
70
  },
74
71
 
75
72
  isTruncated () {
@@ -84,7 +81,7 @@ export default {
84
81
  return {
85
82
  cancel: false,
86
83
  ok: false,
87
- useCloseIcon: true,
84
+ useCloseButton: true,
88
85
  ...this.dialogProps,
89
86
  card: {
90
87
  title: this.dialogTitle,
@@ -49,7 +49,6 @@
49
49
  </template>
50
50
 
51
51
  <script>
52
- import { screenMixin } from '../../mixins'
53
52
  import { extend } from 'quasar'
54
53
 
55
54
  import QasBtn from '../btn/QasBtn.vue'
@@ -65,8 +64,6 @@ export default {
65
64
  QasSearchBox
66
65
  },
67
66
 
68
- mixins: [screenMixin],
69
-
70
67
  props: {
71
68
  emitValue: {
72
69
  type: Boolean
@@ -124,15 +121,15 @@ export default {
124
121
 
125
122
  computed: {
126
123
  actionsClass () {
127
- return !this.mx_isSmall && 'column'
124
+ return !this.$qas.screen.isSmall && 'column'
128
125
  },
129
126
 
130
127
  gutterClass () {
131
- return `q-col-gutter-${this.mx_untilLarge ? 'md' : 'xl'}`
128
+ return `q-col-gutter-${this.$qas.screen.untilLarge ? 'md' : 'xl'}`
132
129
  },
133
130
 
134
131
  iconClass () {
135
- return !this.mx_isSmall && 'qas-transfer__icon'
132
+ return !this.$qas.screen.isSmall && 'qas-transfer__icon'
136
133
  },
137
134
 
138
135
  searchBoxProps () {
@@ -147,6 +144,7 @@ export default {
147
144
  options: {
148
145
  handler (value) {
149
146
  this.optionsList = extend(true, [], value)
147
+ this.setSelectedFromValue(true)
150
148
  },
151
149
 
152
150
  immediate: true
@@ -212,7 +210,7 @@ export default {
212
210
  },
213
211
 
214
212
  setSelectedFromValue (isFirst) {
215
- this.modelValue.forEach(item => {
213
+ this.optionsList.length && this.modelValue.forEach(item => {
216
214
  const selected = this.optionsList.find(option => {
217
215
  return option[this.valueKey] === (this.emitValue ? item : item[this.valueKey])
218
216
  })
@@ -8,25 +8,25 @@ props:
8
8
  desc: Controla como sera o retorno do model, se "true" será um array de string, se "false" array de objeto.
9
9
  type: Boolean
10
10
 
11
- model-value:
12
- desc: Model do componente, controla quais itens estão na segunda coluna.
13
- default: []
14
- type: Array
15
-
16
11
  fuse-options:
17
12
  desc: Configurações do [fuse.js](https://fusejs.io/api/options.html).
18
13
  default: { keys: ['label'] }
19
14
  type: Object
20
15
 
16
+ label-key:
17
+ desc: Nos options, você pode passar um array de objeto com qualquer chave/valor, esta prop serve para identificar qual será o equivalente ao "label".
18
+ default: label
19
+ type: String
20
+
21
21
  label:
22
22
  desc: Rotulo que vai ficar em cima da primeira coluna.
23
23
  type: String
24
24
  required: true
25
25
 
26
- label-key:
27
- desc: Nos options, você pode passar um array de objeto com qualquer chave/valor, esta prop serve para identificar qual será o equivalente ao "label".
28
- default: label
29
- type: String
26
+ model-value:
27
+ desc: Model do componente, controla quais itens estão na segunda coluna.
28
+ default: []
29
+ type: Array
30
30
 
31
31
  options:
32
32
  desc: Array de objetos com todos items que serão transferidos
@@ -15,7 +15,7 @@
15
15
 
16
16
  <qas-btn v-if="showAddFile" ref="buttonUpload" color="white" dense flat icon="o_add" round @click="$refs.hiddenInput.click()" />
17
17
 
18
- <input ref="hiddenInput" class="qas-uploader__input" :multiple="isMultiple" type="file">
18
+ <input ref="hiddenInput" :accept="attributes.accept" class="qas-uploader__input" :multiple="isMultiple" type="file">
19
19
 
20
20
  <qas-btn ref="buttonCleanFiles" class="hidden" color="white" @click="scope.removeUploadedFiles" />
21
21
  <qas-btn v-if="scope.canUpload" color="white" dense flat icon="o_cloud_upload" round @click="scope.upload" />
@@ -28,7 +28,7 @@
28
28
  <slot name="list" :scope="scope">
29
29
  <div class="col-12 q-col-gutter-md row">
30
30
  <div v-for="(file, index) in getFilesList(scope.files, scope)" :key="index" class="row" :class="itemClass">
31
- <qas-avatar class="q-mr-sm" color="grey-3" icon="o_attach_file" :image="file.image" rounded :text-color="getColorFileIcon(file)" />
31
+ <qas-avatar class="q-mr-sm" color="contrast-primary" icon="o_attach_file" :image="file.url" rounded :text-color="getColorFileIcon(file)" />
32
32
 
33
33
  <div class="col items-center no-wrap row">
34
34
  <div class="column no-wrap" :class="{ col: isMultiple }">
@@ -131,6 +131,10 @@ export default {
131
131
 
132
132
  uploading: {
133
133
  type: Boolean
134
+ },
135
+
136
+ useObjectModel: {
137
+ type: Boolean
134
138
  }
135
139
  },
136
140
 
@@ -244,12 +248,19 @@ export default {
244
248
  uploaded (response) {
245
249
  const fullPath = response.xhr.responseURL.split('?').shift()
246
250
 
247
- this.$emit(
248
- 'update:modelValue',
249
- this.isMultiple ? [...this.modelValue, fullPath] : fullPath || ''
250
- )
251
+ const objectValue = {
252
+ format: response.files[0].type,
253
+ url: fullPath,
254
+ name: response.files[0].name
255
+ }
256
+
257
+ const model = this.useObjectModel ? objectValue : fullPath
258
+
259
+ this.$emit('update:modelValue', this.isMultiple ? [...this.modelValue, model] : model || '')
251
260
 
252
261
  this.updateUploading(false)
262
+
263
+ this.$qas.logger.group('QasUploader - uploaded', [this.modelValue])
253
264
  },
254
265
 
255
266
  async fetchCredentials (filename) {
@@ -260,6 +271,12 @@ export default {
260
271
  entity: this.entity,
261
272
  filename
262
273
  })
274
+
275
+ this.$qas.logger.group(
276
+ 'QasUploader - fetchCredentials -> resposta de /upload-credentials/',
277
+ [data]
278
+ )
279
+
263
280
  return data
264
281
  } finally {
265
282
  this.isFetching = false
@@ -278,8 +295,16 @@ export default {
278
295
  }
279
296
 
280
297
  const clonedValue = extend(true, [], this.modelValue)
281
- const numberIndex = this.modelValue.findIndex(file => this.getFileName(file) === index)
298
+ const numberIndex = this.modelValue.findIndex(file => {
299
+ if (this.useObjectModel) {
300
+ return file.uuid === index || file.url.includes(index)
301
+ }
302
+
303
+ return this.getFileName(file) === index
304
+ })
305
+
282
306
  clonedValue.splice(numberIndex, 1)
307
+
283
308
  this.$emit('update:modelValue', clonedValue)
284
309
  },
285
310
 
@@ -288,12 +313,10 @@ export default {
288
313
  },
289
314
 
290
315
  getFilesList (uploadedFiles) {
291
- const pathsList = Array.isArray(this.modelValue) ? this.modelValue : (this.modelValue ? [this.modelValue] : [])
292
-
293
316
  uploadedFiles = uploadedFiles.map((file, indexToDelete) => {
294
317
  return {
295
318
  isUploaded: true,
296
- image: file.xhr ? file.xhr.responseURL.split('?').shift() : '',
319
+ url: file.xhr ? file.xhr.responseURL.split('?').shift() : '',
297
320
  name: file.name,
298
321
  progressLabel: file.__progressLabel,
299
322
  sizeLabel: file.__sizeLabel,
@@ -302,11 +325,20 @@ export default {
302
325
  }
303
326
  })
304
327
 
328
+ const pathsList = Array.isArray(this.modelValue)
329
+ ? this.modelValue
330
+ : (this.modelValue ? [this.modelValue] : [])
331
+
305
332
  const mergedList = [...pathsList, ...uploadedFiles]
306
333
 
307
334
  const files = {}
308
335
 
309
336
  mergedList.forEach(file => {
337
+ if (this.useObjectModel && file.uuid) {
338
+ files[file.uuid] = file
339
+ return
340
+ }
341
+
310
342
  if (file.isFailed) {
311
343
  files[file.name] = file
312
344
  return
@@ -314,21 +346,23 @@ export default {
314
346
 
315
347
  if (typeof file === 'string') {
316
348
  const fileName = this.getFileName(file)
317
- files[fileName] = { image: file, isUploaded: false, name: fileName }
349
+ files[fileName] = { url: file, isUploaded: false, name: fileName }
318
350
  return
319
351
  }
320
352
 
321
- if (file.image) {
322
- const fileName = this.getFileName(file.image)
353
+ if (file.url) {
354
+ const fileName = this.getFileName(file.url)
323
355
  files[fileName] = file
324
356
  }
325
357
  })
326
358
 
359
+ this.$qas.logger.group('QasUploader - getFilesList', [files])
360
+
327
361
  return files
328
362
  },
329
363
 
330
364
  getFileNameClass (isFailed) {
331
- return isFailed ? 'text-negative' : 'text-grey-8'
365
+ return isFailed ? 'text-negative' : 'text-grey-9'
332
366
  },
333
367
 
334
368
  isFailed (file) {
@@ -343,6 +377,8 @@ export default {
343
377
  const filesList = Array.from(this.hiddenInputElement.files)
344
378
  const processedFiles = []
345
379
 
380
+ this.$refs.hiddenInput.value = ''
381
+
346
382
  filesList.forEach(file => processedFiles.push(this.resizeImage(file)))
347
383
  this.uploader.addFiles(await Promise.all(processedFiles))
348
384
  },
@@ -362,7 +398,14 @@ export default {
362
398
  // Retorna largura e altura da original da imagem
363
399
  const { width, height } = await getImageSize(image)
364
400
 
365
- if (width <= this.sizeLimit) return file
401
+ if (width <= this.sizeLimit) {
402
+ this.$qas.logger.info(`
403
+ QasUploader - resizeImage -> Tamanho da imagem menor que o tamanho limite,
404
+ sendo assim, não faz o resize
405
+ `)
406
+
407
+ return file
408
+ }
366
409
 
367
410
  // Retorna os novos tamanhos redimensionados
368
411
  const resizedDimensions = getResizeDimensions(this.sizeLimit, width, height)
@@ -380,7 +423,11 @@ export default {
380
423
  const resizedImage = await pica.resize(image, canvas, this.defaultPicaResizeOptions)
381
424
  const blob = await pica.toBlob(resizedImage, type, 0.90)
382
425
 
383
- return new File([blob], file.name, { type })
426
+ const newFile = new File([blob], file.name, { type })
427
+
428
+ this.$qas.logger.group('QasUploader - resizeImage -> nova imagem', [newFile])
429
+
430
+ return newFile
384
431
  } catch {
385
432
  // Caso não consiga redimensionar retorna o arquivo original
386
433
  return file