@drax/crud-vue 2.4.0 → 2.7.0

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.
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "2.4.0",
6
+ "version": "2.7.0",
7
7
  "type": "module",
8
8
  "main": "./src/index.ts",
9
9
  "module": "./src/index.ts",
@@ -24,7 +24,7 @@
24
24
  "format": "prettier --write src/"
25
25
  },
26
26
  "dependencies": {
27
- "@drax/common-front": "^2.2.0",
27
+ "@drax/common-front": "^2.6.0",
28
28
  "@drax/crud-front": "^2.0.0",
29
29
  "@drax/crud-share": "^2.4.0",
30
30
  "@drax/media-vue": "^2.2.1"
@@ -50,5 +50,5 @@
50
50
  "vue-tsc": "^3.2.4",
51
51
  "vuetify": "^3.11.8"
52
52
  },
53
- "gitHead": "4e247435d6ffc0772296e6d013a78d2d00e31ffe"
53
+ "gitHead": "6914eb5bfd532fb5e510b95c7d17b5b2ada8b07d"
54
54
  }
package/src/EntityCrud.ts CHANGED
@@ -303,11 +303,11 @@ class EntityCrud implements IEntityCrud {
303
303
  }
304
304
 
305
305
  get inputVariantView(): IEntityCrudFieldVariant {
306
- return 'filled'
306
+ return 'solo-filled'
307
307
  }
308
308
 
309
309
  get inputVariantDelete() : IEntityCrudFieldVariant{
310
- return 'underlined'
310
+ return 'solo-filled'
311
311
  }
312
312
 
313
313
 
@@ -3,7 +3,7 @@ import {useI18n} from "vue-i18n";
3
3
  import type {IEntityCrud, IEntityCrudField} from "@drax/crud-share";
4
4
  import {getItemId} from "../helpers/getItemId";
5
5
  import CrudFormField from "./CrudFormField.vue";
6
- import {computed, defineEmits, defineProps, ref} from "vue";
6
+ import {computed, ref} from "vue";
7
7
  import type {PropType} from "vue";
8
8
  import {useCrudStore} from "../stores/UseCrudStore";
9
9
  import {useCrud} from "../composables/UseCrud";
@@ -132,6 +132,10 @@ const rules = computed(() => {
132
132
  }
133
133
  })
134
134
 
135
+ const onlyView = computed(()=> {
136
+ return ['delete','view'].includes(operation?.value)
137
+ })
138
+
135
139
  </script>
136
140
 
137
141
  <template>
@@ -158,12 +162,13 @@ const rules = computed(() => {
158
162
  :xl="field.xl ? field.xl : undefined"
159
163
  >
160
164
  <slot :name="`field.${field.name}`" v-bind="{field}">
165
+
161
166
  <crud-form-field
162
167
  :field="field"
163
168
  :entity="entity"
164
169
  v-model="form[field.name]"
165
170
  :clearable="false"
166
- :readonly="['delete','view'].includes(operation) || field.readonly"
171
+ :readonly="onlyView || field.readonly"
167
172
  :variant="variant"
168
173
  :prepend-inner-icon="field?.prependInnerIcon"
169
174
  :prepend-icon="field?.prependIcon"
@@ -206,12 +211,15 @@ const rules = computed(() => {
206
211
  :xl="field.xl ? field.xl : undefined"
207
212
  >
208
213
  <slot :name="`field.${field.name}`" v-bind="{field}">
214
+
215
+
216
+
209
217
  <crud-form-field
210
218
  :field="field"
211
219
  :entity="entity"
212
220
  v-model="form[field.name]"
213
221
  :clearable="false"
214
- :readonly="['delete','view'].includes(operation) || field.readonly"
222
+ :readonly="onlyView || field.readonly"
215
223
  :variant="variant"
216
224
  :prepend-inner-icon="field?.prependInnerIcon"
217
225
  :prepend-icon="field?.prependIcon"
@@ -18,7 +18,7 @@ const {hasPermission} = useAuth()
18
18
 
19
19
  const valueModel = defineModel<any>({type: [String, Number, Boolean, Object, Array], default: false})
20
20
 
21
- const {index, entity, field, parentField, errorMessages, rules} = defineProps({
21
+ const {index, entity, field, parentField, errorMessages, rules, readonly, hideDetails} = defineProps({
22
22
  entity: {type: Object as PropType<IEntityCrud>, required: true},
23
23
  field: {type: Object as PropType<IEntityCrudField | IEntityCrudFilter | undefined>, required: true},
24
24
  prependIcon: {type: String, default: ''},
@@ -79,7 +79,14 @@ const inputErrors = computed(() => {
79
79
  defineEmits(['updateValue'])
80
80
 
81
81
 
82
+ const hasHideDetails = computed(()=>{
83
+ if(readonly){
84
+ return true
85
+ }else{
86
+ return hideDetails ?? field.hideDetails
87
+ }
82
88
 
89
+ })
83
90
 
84
91
  </script>
85
92
 
@@ -102,7 +109,7 @@ defineEmits(['updateValue'])
102
109
  :density="density"
103
110
  :variant="variant"
104
111
  :clearable="clearable"
105
- :hide-details="hideDetails ?? field.hideDetails"
112
+ :hide-details="hasHideDetails"
106
113
  :single-line="singleLine"
107
114
  :prepend-icon="prependIcon"
108
115
  :append-icon="appendIcon"
@@ -128,7 +135,7 @@ defineEmits(['updateValue'])
128
135
  :density="density"
129
136
  :variant="variant"
130
137
  :clearable="clearable"
131
- :hide-details="hideDetails ?? field.hideDetails"
138
+ :hide-details="hasHideDetails"
132
139
  :single-line="singleLine"
133
140
  :prepend-icon="prependIcon"
134
141
  :append-icon="appendIcon"
@@ -152,7 +159,7 @@ defineEmits(['updateValue'])
152
159
  :density="density"
153
160
  :variant="variant"
154
161
  :clearable="clearable"
155
- :hide-details="hideDetails ?? field.hideDetails"
162
+ :hide-details="hasHideDetails"
156
163
  :single-line="singleLine"
157
164
  :prepend-icon="prependIcon"
158
165
  :append-icon="appendIcon"
@@ -179,7 +186,7 @@ defineEmits(['updateValue'])
179
186
  :density="density"
180
187
  :variant="variant"
181
188
  :clearable="clearable"
182
- :hide-details="hideDetails ?? field.hideDetails"
189
+ :hide-details="hasHideDetails"
183
190
  :single-line="singleLine"
184
191
  :rules="rules"
185
192
  @update:modelValue="$emit('updateValue')"
@@ -208,7 +215,7 @@ defineEmits(['updateValue'])
208
215
  :density="density"
209
216
  :variant="variant"
210
217
  :clearable="clearable"
211
- :hide-details="hideDetails ?? field.hideDetails"
218
+ :hide-details="hasHideDetails"
212
219
  :single-line="singleLine"
213
220
  :rules="rules"
214
221
  @update:modelValue="$emit('updateValue')"
@@ -250,7 +257,7 @@ defineEmits(['updateValue'])
250
257
  :density="density"
251
258
  :variant="variant"
252
259
  :clearable="clearable"
253
- :hide-details="hideDetails ?? field.hideDetails"
260
+ :hide-details="hasHideDetails"
254
261
  :single-line="singleLine"
255
262
  :rules="rules"
256
263
  @update:modelValue="$emit('updateValue')"
@@ -279,7 +286,7 @@ defineEmits(['updateValue'])
279
286
  :density="density"
280
287
  :variant="variant"
281
288
  :clearable="clearable"
282
- :hide-details="hideDetails ?? field.hideDetails"
289
+ :hide-details="hasHideDetails"
283
290
  :single-line="singleLine"
284
291
  @update:modelValue="$emit('updateValue')"
285
292
  :prepend-icon="prependIcon"
@@ -299,7 +306,7 @@ defineEmits(['updateValue'])
299
306
  :density="density"
300
307
  :variant="variant"
301
308
  :clearable="clearable"
302
- :hide-details="hideDetails ?? field.hideDetails"
309
+ :hide-details="hasHideDetails"
303
310
  :single-line="singleLine"
304
311
  @update:modelValue="$emit('updateValue')"
305
312
  :prepend-icon="prependIcon"
@@ -321,7 +328,7 @@ defineEmits(['updateValue'])
321
328
  :density="density"
322
329
  :variant="variant"
323
330
  :clearable="clearable"
324
- :hide-details="hideDetails ?? field.hideDetails"
331
+ :hide-details="hasHideDetails"
325
332
  :single-line="singleLine"
326
333
  @update:modelValue="$emit('updateValue')"
327
334
  :prepend-icon="prependIcon"
@@ -347,7 +354,7 @@ defineEmits(['updateValue'])
347
354
  :density="density"
348
355
  :variant="variant"
349
356
  :clearable="clearable"
350
- :hide-details="hideDetails ?? field.hideDetails"
357
+ :hide-details="hasHideDetails"
351
358
  :single-line="singleLine"
352
359
  @update:modelValue="$emit('updateValue')"
353
360
  :prepend-icon="prependIcon"
@@ -371,7 +378,7 @@ defineEmits(['updateValue'])
371
378
  :density="density"
372
379
  :variant="variant"
373
380
  :clearable="clearable"
374
- :hide-details="hideDetails ?? field.hideDetails"
381
+ :hide-details="hasHideDetails"
375
382
  :single-line="singleLine"
376
383
  @update:modelValue="(v) => {
377
384
  if(field.endOfDay){
@@ -412,7 +419,7 @@ defineEmits(['updateValue'])
412
419
  :variant="variant"
413
420
  :readonly="readonly"
414
421
  :clearable="clearable"
415
- :hide-details="hideDetails ?? field.hideDetails"
422
+ :hide-details="hasHideDetails"
416
423
  :single-line="singleLine"
417
424
  :prepend-icon="prependIcon"
418
425
  :append-icon="appendIcon"
@@ -425,23 +432,31 @@ defineEmits(['updateValue'])
425
432
 
426
433
  <v-card-title class="text-h5">{{ field.label }}</v-card-title>
427
434
  <v-card-text>
428
- <crud-form-field
429
- v-for="oField in field.objectFields"
430
- :entity="entity"
431
- :field="oField"
432
- :parent-field="field.name"
433
- v-model="valueModel[oField.name]"
434
- :density="density"
435
- :variant="variant"
436
- :clearable="clearable"
437
- :hide-details="hideDetails ?? field.hideDetails"
438
- :single-line="singleLine"
439
- @updateValue="$emit('updateValue')"
440
- :prepend-icon="prependIcon"
441
- :append-icon="appendIcon"
442
- :prepend-inner-icon="prependInnerIcon"
443
- :append-inner-icon="appendInnerIcon"
444
- ></crud-form-field>
435
+
436
+ <v-row dense>
437
+ <v-col cols="12" v-for="oField in field.objectFields">
438
+ <crud-form-field
439
+
440
+ :entity="entity"
441
+ :field="oField"
442
+ :parent-field="field.name"
443
+ :readonly="readonly"
444
+ v-model="valueModel[oField.name]"
445
+ :density="density"
446
+ :variant="variant"
447
+ :clearable="clearable"
448
+ :hide-details="hasHideDetails"
449
+ :single-line="singleLine"
450
+ @updateValue="$emit('updateValue')"
451
+ :prepend-icon="prependIcon"
452
+ :append-icon="appendIcon"
453
+ :prepend-inner-icon="prependInnerIcon"
454
+ :append-inner-icon="appendInnerIcon"
455
+ ></crud-form-field>
456
+ </v-col>
457
+
458
+ </v-row>
459
+
445
460
  </v-card-text>
446
461
 
447
462
  </v-card>
@@ -464,7 +479,7 @@ defineEmits(['updateValue'])
464
479
  :density="density"
465
480
  :variant="variant"
466
481
  :clearable="clearable"
467
- :hide-details="hideDetails ?? field.hideDetails"
482
+ :hide-details="hasHideDetails"
468
483
  :single-line="singleLine"
469
484
  :rules="rules"
470
485
  @update:modelValue="$emit('updateValue')"
@@ -494,7 +509,7 @@ defineEmits(['updateValue'])
494
509
  :density="density"
495
510
  :variant="variant"
496
511
  :clearable="clearable"
497
- :hide-details="hideDetails ?? field.hideDetails"
512
+ :hide-details="hasHideDetails"
498
513
  :single-line="singleLine"
499
514
  :rules="rules"
500
515
  @update:modelValue="$emit('updateValue')"
@@ -525,7 +540,7 @@ defineEmits(['updateValue'])
525
540
  :density="density"
526
541
  :variant="variant"
527
542
  :clearable="clearable"
528
- :hide-details="hideDetails ?? field.hideDetails"
543
+ :hide-details="hasHideDetails"
529
544
  :single-line="singleLine"
530
545
  @updateValue="$emit('updateValue')"
531
546
  :prepend-icon="prependIcon"
@@ -553,7 +568,7 @@ defineEmits(['updateValue'])
553
568
  :density="density"
554
569
  :variant="variant"
555
570
  :clearable="clearable"
556
- :hide-details="hideDetails ?? field.hideDetails"
571
+ :hide-details="hasHideDetails"
557
572
  :single-line="singleLine"
558
573
  :rules="rules"
559
574
  @update:modelValue="$emit('updateValue')"
@@ -574,7 +589,7 @@ defineEmits(['updateValue'])
574
589
  :density="density"
575
590
  :variant="variant"
576
591
  :clearable="clearable"
577
- :hide-details="hideDetails ?? field.hideDetails"
592
+ :hide-details="hasHideDetails"
578
593
  :single-line="singleLine"
579
594
  @updateValue="$emit('updateValue')"
580
595
  />
@@ -588,7 +603,7 @@ defineEmits(['updateValue'])
588
603
  :density="density"
589
604
  :variant="variant"
590
605
  :clearable="clearable"
591
- :hide-details="hideDetails ?? field.hideDetails"
606
+ :hide-details="hasHideDetails"
592
607
  :single-line="singleLine"
593
608
  :error-messages="inputErrors"
594
609
  @updateValue="$emit('updateValue')"
@@ -26,7 +26,7 @@ const {entity} = defineProps({
26
26
 
27
27
  const {
28
28
  loading, itemsPerPage, page, sortBy, search, totalItems, items,
29
- doPaginate, filters, applyFilters, clearFilters
29
+ doPaginate, filters, applyFilters, clearFilters, paginationError
30
30
  } = useCrud(entity)
31
31
 
32
32
  // Usar el composable de columnas
@@ -61,6 +61,19 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
61
61
  @update:options="doPaginate"
62
62
  >
63
63
 
64
+ <template v-slot:no-data>
65
+ <v-alert
66
+ v-if="paginationError"
67
+ variant="tonal"
68
+ class="w-100 ma-2"
69
+ style="width: 100%; min-width: 100%"
70
+ prominent
71
+ type="error"
72
+ :text="te(paginationError) ? t(paginationError) : paginationError"
73
+ />
74
+ <v-alert v-else variant="tonal" class="w-100 ma-2 " type="info" :text="te('crud.noData') ? t('crud.noData') : 'No data' " />
75
+ </template>
76
+
64
77
  <template v-slot:bottom>
65
78
  <v-data-table-footer :class="entity.footerClass"
66
79
  :items-per-page-options="[5, 10, 20, 50]"
@@ -80,12 +93,12 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
80
93
 
81
94
  <crud-import-button
82
95
  :entity="entity"
83
- @import="v => $emit('import', v)"
96
+ @import="(v:any) => $emit('import', v)"
84
97
  />
85
98
 
86
99
  <crud-export-button
87
100
  :entity="entity"
88
- @export="v => $emit('export',v)"
101
+ @export="(v:any) => $emit('export',v)"
89
102
  />
90
103
 
91
104
  <crud-group-by-button
@@ -1,7 +1,7 @@
1
1
  <script setup lang="ts">
2
2
  import {useI18n} from "vue-i18n";
3
3
  import {debounce} from "@drax/common-front"
4
- import {ref, defineModel, watch} from "vue"
4
+ import {ref, watch} from "vue"
5
5
 
6
6
 
7
7
  const {t} = useI18n()
@@ -1,6 +1,6 @@
1
1
  <script setup lang="ts">
2
2
  import {useI18n} from "vue-i18n";
3
- import {defineProps, type PropType, ref} from "vue";
3
+ import { type PropType, ref} from "vue";
4
4
  import type {IEntityCrud} from "@drax/crud-share";
5
5
  import CrudForm from "../CrudForm.vue";
6
6
  import CrudDialog from "../CrudDialog.vue";
@@ -18,6 +18,14 @@ export function useCrud(entity: IEntityCrud) {
18
18
  }
19
19
  })
20
20
 
21
+ const paginationError = computed({
22
+ get() {
23
+ return store.paginationError
24
+ }, set(value) {
25
+ store.setPaginationError(value)
26
+ }
27
+ })
28
+
21
29
  const dialog = computed({
22
30
  get() {
23
31
  return store.dialog
@@ -148,6 +156,7 @@ export function useCrud(entity: IEntityCrud) {
148
156
 
149
157
  async function doPaginate() {
150
158
  store.setLoading(true)
159
+ store.setPaginationError("")
151
160
  try {
152
161
 
153
162
  const r: IDraxPaginateResult<any> = await entity?.provider.paginate({
@@ -160,7 +169,13 @@ export function useCrud(entity: IEntityCrud) {
160
169
  })
161
170
  store.setItems(r.items)
162
171
  store.setTotalItems(r.total)
163
- } catch (e) {
172
+ } catch (e: any) {
173
+ store.setItems([])
174
+ store.setTotalItems(0)
175
+ if(e && e.message){
176
+ store.setPaginationError(e.message)
177
+
178
+ }
164
179
  console.error("Error paginating", e)
165
180
  } finally {
166
181
  store.setLoading(false)
@@ -401,7 +416,7 @@ export function useCrud(entity: IEntityCrud) {
401
416
  return {
402
417
  doPaginate, doExport, doUpdate, doCreate, doDelete,
403
418
  onView, onCreate, onEdit, onDelete, onCancel, onSubmit, resetCrudStore,
404
- operation, dialog, form, notify, error, message, formValid,
419
+ operation, dialog, form, notify, error, paginationError, message, formValid,
405
420
  loading, itemsPerPage, page, sortBy, search, totalItems, items,
406
421
  prepareFilters, filters, clearFilters, applyFilters,
407
422
  exportFiles, exportLoading, exportListVisible, exportError,
@@ -11,6 +11,7 @@ export const useCrudStore = (id: string = 'entity') => defineStore('CrudStore'+i
11
11
  notify: false as boolean,
12
12
  message: '' as string,
13
13
  error: '' as string,
14
+ paginationError: '' as string,
14
15
  filters: [] as IDraxFieldFilter[],
15
16
  items: [] as any[],
16
17
  totalItems: 0 as number,
@@ -139,6 +140,9 @@ export const useCrudStore = (id: string = 'entity') => defineStore('CrudStore'+i
139
140
 
140
141
  clearVisibleColumns() {
141
142
  this.visibleColumns = []
143
+ },
144
+ setPaginationError(val: string){
145
+ this.paginationError = val
142
146
  }
143
147
  }
144
148