@drax/crud-vue 0.26.0 → 0.28.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": "0.26.0",
6
+ "version": "0.28.0",
7
7
  "type": "module",
8
8
  "main": "./src/index.ts",
9
9
  "module": "./src/index.ts",
@@ -24,16 +24,16 @@
24
24
  "format": "prettier --write src/"
25
25
  },
26
26
  "dependencies": {
27
- "@drax/common-front": "^0.26.0",
28
- "@drax/crud-front": "^0.26.0",
29
- "@drax/crud-share": "^0.26.0",
30
- "@drax/media-vue": "^0.26.0"
27
+ "@drax/common-front": "^0.28.0",
28
+ "@drax/crud-front": "^0.28.0",
29
+ "@drax/crud-share": "^0.28.0",
30
+ "@drax/media-vue": "^0.28.0"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "pinia": "^2.2.2",
34
34
  "vue": "^3.5.7",
35
35
  "vue-i18n": "^9.14.0",
36
- "vuetify": "^3.7.2"
36
+ "vuetify": "^3.9.2"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@rushstack/eslint-patch": "^1.8.0",
@@ -64,5 +64,5 @@
64
64
  "vue-tsc": "^2.1.10",
65
65
  "vuetify": "^3.8.2"
66
66
  },
67
- "gitHead": "e4b5e941f7d847b340cd290d650100caf1bebf0b"
67
+ "gitHead": "062c6d15dbbf8b6e337869549ab0bdbc27200a9e"
68
68
  }
package/src/EntityCrud.ts CHANGED
@@ -30,7 +30,8 @@ class EntityCrud implements IEntityCrud {
30
30
  key: 'actions',
31
31
  sortable: false,
32
32
  align: 'center',
33
- minWidth: '190px'
33
+ minWidth: '190px',
34
+ fixed: 'end'
34
35
  },
35
36
  ]
36
37
  }
@@ -211,6 +212,42 @@ class EntityCrud implements IEntityCrud {
211
212
  return true
212
213
  }
213
214
 
215
+ get containerFluid(){
216
+ return false
217
+ }
218
+
219
+ get cardDensity() : 'default' | 'comfortable' | 'compact' {
220
+ return 'default'
221
+ }
222
+
223
+ get cardClass() : string {
224
+ return 'rounded-xl'
225
+ }
226
+
227
+ get toolbarDensity() : 'default' | 'comfortable' | 'compact' {
228
+ return 'default'
229
+ }
230
+
231
+ get toolbarClass() : string {
232
+ return 'bg-primary'
233
+ }
234
+
235
+ get tableDensity() : 'default' | 'comfortable' | 'compact' {
236
+ return 'default'
237
+ }
238
+
239
+ get headerProps(){
240
+ return { class: 'bg-primary' }
241
+ }
242
+
243
+ get tableStriped() : null | 'odd' | 'even' {
244
+ return 'even'
245
+ }
246
+
247
+ get footerClass(){
248
+ return 'bg-primary'
249
+ }
250
+
214
251
 
215
252
  }
216
253
 
@@ -22,14 +22,14 @@ onBeforeMount(() => {
22
22
  prepareFilters()
23
23
  })
24
24
 
25
- const emit = defineEmits(['created', 'updated', 'deleted', 'viewed','canceled'])
25
+ const emit = defineEmits(['created', 'updated', 'deleted', 'viewed', 'canceled'])
26
26
 
27
27
 
28
28
  </script>
29
29
 
30
30
  <template>
31
- <v-container fluid class="mt-5">
32
- <v-card>
31
+ <v-container :fluid="entity.containerFluid" class="mt-5">
32
+ <v-card :class="entity.cardClass" :density="entity.cardDensity">
33
33
 
34
34
  <crud-list
35
35
  :entity="entity"
@@ -50,6 +50,16 @@ const emit = defineEmits(['created', 'updated', 'deleted', 'viewed','canceled'])
50
50
  </slot>
51
51
  </template>
52
52
 
53
+ <template v-for="iFilter in entity.filters"
54
+ :key="iFilter.name"
55
+ v-slot:[`filter.${iFilter.name}`]="{filter, filterIndex}"
56
+ >
57
+ <slot v-if="$slots[`filter.${iFilter.name}`]"
58
+ :name="`filter.${iFilter.name}`"
59
+ v-bind="{filter, filterIndex}"
60
+ />
61
+ </template>
62
+
53
63
  <template v-for="header in entity.headers" :key="header.key" v-slot:[`item.${header.key}`]="{item, value}">
54
64
  <slot :name="`item.${header.key}`" v-bind="{item, value}">
55
65
  {{ (Array.isArray(value) && value.length > 0) || !Array.isArray(value) ? value : '' }}
@@ -76,17 +76,21 @@ const emit = defineEmits(['applyFilter', 'clearFilter'])
76
76
  :lg="filter.lg ? filter.lg : 4"
77
77
  :xl="filter.xl ? filter.xl : 3"
78
78
  >
79
- <crud-form-field
80
- :field="filter"
81
- :entity="entity"
82
- v-model="valueModel[index].value"
83
- :clearable="true"
84
- density="compact"
85
- variant="outlined"
86
- :prepend-inner-icon="icon(filter)"
87
- hide-details disable-rules
88
- @updateValue="onUpdateValue"
89
- />
79
+
80
+ <slot :name="`filter.${filter.name}`" v-bind="{filter, filterIndex: index}">
81
+ <crud-form-field
82
+ :field="filter"
83
+ :entity="entity"
84
+ v-model="valueModel[index].value"
85
+ :clearable="true"
86
+ density="compact"
87
+ variant="outlined"
88
+ :prepend-inner-icon="icon(filter)"
89
+ hide-details disable-rules
90
+ @updateValue="onUpdateValue"
91
+ />
92
+ </slot>
93
+
90
94
  </v-col>
91
95
 
92
96
  </v-row>
@@ -310,7 +310,7 @@ defineEmits(['updateValue'])
310
310
  :append-inner-icon="appendInnerIcon"
311
311
 
312
312
  >
313
- <template v-if="field.endOfDay" v-slot:append-inner>
313
+ <template v-if="field.endOfDay && field.showEndOfDayChip !== false" v-slot:append-inner>
314
314
  <v-chip size="small">23:59</v-chip>
315
315
  </template>
316
316
  </v-date-input>
@@ -53,7 +53,9 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
53
53
 
54
54
  <template>
55
55
  <v-data-table-server
56
- class="border"
56
+ :density="entity.tableDensity"
57
+ :striped="entity.tableStriped"
58
+ :header-props="entity.headerProps"
57
59
  v-if="hasPermission(entity.permissions.view)"
58
60
  v-model:items-per-page="itemsPerPage"
59
61
  :items-per-page-options="[5, 10, 20, 50]"
@@ -68,8 +70,15 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
68
70
  item-value="name"
69
71
  @update:options="doPaginate"
70
72
  >
73
+
74
+ <template v-slot:bottom>
75
+ <v-data-table-footer :class="entity.footerClass"
76
+ :items-per-page-options="[5, 10, 20, 50]"
77
+ ></v-data-table-footer>
78
+ </template>
79
+
71
80
  <template v-slot:top>
72
- <v-toolbar density="compact">
81
+ <v-toolbar :class="entity.toolbarClass" :density="entity.toolbarDensity">
73
82
  <v-toolbar-title>
74
83
  {{ te(`${entity.name.toLowerCase()}.crud`) ? t(`${entity.name.toLowerCase()}.crud`) : entity.name }}
75
84
  </v-toolbar-title>
@@ -101,7 +110,7 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
101
110
  :entity="entity"
102
111
  />
103
112
 
104
- <v-card>
113
+ <v-card variant="flat">
105
114
  <v-card-text v-if="entity.searchEnable">
106
115
  <crud-search
107
116
  v-model="search"
@@ -110,23 +119,36 @@ defineEmits(['import', 'export', 'create', 'update', 'delete', 'view', 'edit'])
110
119
 
111
120
  <v-card-text class="pt-0">
112
121
  <slot name="filters" v-bind="{filters}"></slot>
122
+
113
123
  <crud-filters
114
- v-if="!$slots.filters"
115
- :entity="entity"
116
- v-model="filters"
117
- :action-buttons="entity.filterButtons"
118
- @clearFilter="clearFilters()"
119
- @applyFilter="applyFilters()"
120
- />
124
+ v-if="!$slots.filters"
125
+ :entity="entity"
126
+ v-model="filters"
127
+ :action-buttons="entity.filterButtons"
128
+ @clearFilter="clearFilters()"
129
+ @applyFilter="applyFilters()"
130
+ >
131
+
132
+ <template v-for="iFilter in entity.filters"
133
+ :key="iFilter.name"
134
+ v-slot:[`filter.${iFilter.name}`]="{filter, filterIndex}"
135
+ >
136
+ <slot v-if="$slots[`filter.${iFilter.name}`]"
137
+ :name="`filter.${iFilter.name}`"
138
+ v-bind="{filter, filterIndex}"
139
+ />
140
+ </template>
141
+ </crud-filters>
121
142
  </v-card-text>
122
143
 
123
144
  </v-card>
124
145
 
146
+ <v-divider></v-divider>
125
147
  </template>
126
148
 
127
149
 
128
150
  <template v-for="header in entity.headers" :key="header.key" v-slot:[`item.${header.key}`]="{item, value}">
129
- <slot :name="`item.${header.key}`" v-bind="{item, value}">
151
+ <slot v-if="$slots[`item.${header.key}`]" :name="`item.${header.key}`" v-bind="{item, value}">
130
152
  {{ value }}
131
153
  </slot>
132
154
  </template>
@@ -12,7 +12,6 @@ const {t} = useI18n()
12
12
  icon="mdi-plus"
13
13
  class="mr-1"
14
14
  variant="text"
15
- color="primary"
16
15
  >
17
16
  </v-btn>
18
17
  </template>
@@ -11,7 +11,7 @@ const {t} = useI18n()
11
11
  icon="mdi-pencil"
12
12
  class="mr-1"
13
13
  variant="text"
14
- color="primary"
14
+ color="blue"
15
15
  slim
16
16
  >
17
17
  </v-btn>
@@ -11,7 +11,7 @@ const {t} = useI18n()
11
11
  icon="mdi-magnify"
12
12
  class="mr-1"
13
13
  variant="text"
14
- color="secondary"
14
+ color="teal"
15
15
  slim
16
16
  >
17
17
  </v-btn>
@@ -226,6 +226,7 @@ export function useCrud(entity: IEntityCrud) {
226
226
 
227
227
  function onCreate() {
228
228
  store.setForm(entity.form)
229
+ store.resetErrors()
229
230
  store.setOperation("create")
230
231
  openDialog()
231
232
  }
@@ -42,6 +42,11 @@ export const useCrudStore = defineStore('CrudStore', {
42
42
  }
43
43
  }
44
44
  }
45
+ },
46
+ getFilterIndex(state: any) {
47
+ return (filterName: string) => {
48
+ return state.filters.findIndex((filter: any) => filter.field === filterName)
49
+ }
45
50
  }
46
51
 
47
52
  },