vue-laravel-crud 1.8.0 → 1.8.1

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vue-laravel-crud",
3
- "version": "1.8.0",
3
+ "version": "1.8.1",
4
4
  "description": "",
5
5
  "homepage": "https://github.com/clonixdev/vue-laravel-crud",
6
6
  "main": "dist/vue-laravel-crud.ssr.js",
@@ -18,7 +18,7 @@ export default /*#__PURE__*/ {
18
18
  data() {
19
19
  return {
20
20
 
21
- crudUuid:"",
21
+ crudUuid: "",
22
22
  moment: moment,
23
23
  loading: false,
24
24
  firstLoad: false,
@@ -387,7 +387,7 @@ export default /*#__PURE__*/ {
387
387
 
388
388
  mounted() {
389
389
  const now = Math.floor(Date.now() / 1000);
390
- this.crudUuid = ''+now;
390
+ this.crudUuid = '' + now;
391
391
  this.isMobile = window.matchMedia("(max-width: 1024px)").matches;
392
392
 
393
393
  // Agregar un oyente de eventos para actualizar isMobile cuando cambia el tamaño de la pantalla
@@ -411,12 +411,12 @@ export default /*#__PURE__*/ {
411
411
  if (fieldName === primaryKey) {
412
412
  continue; // Salta este campo
413
413
  }
414
-
415
- console.debug("debug field",field);
414
+
415
+ console.debug("debug field", field);
416
416
 
417
417
  if (field.type === 'relation') {
418
418
  // Si es una relación, inicializa como un objeto vacío.
419
- console.debug("Relation",field);
419
+ console.debug("Relation", field);
420
420
 
421
421
  if (this.vuexInitRelations == true || (Array.isArray(this.vuexInitRelations) && this.vuexInitRelations.includes(fieldName))) {
422
422
  itemDefault[fieldName] = {};
@@ -425,35 +425,35 @@ export default /*#__PURE__*/ {
425
425
  } else {
426
426
 
427
427
 
428
- console.debug("Field",field);
428
+ console.debug("Field", field);
429
429
 
430
430
 
431
- // Si no tiene un valor por defecto definido, inicializa según su tipo
432
- /*switch (field.constructor.name) {
433
- case 'StringField':
434
- itemDefault[fieldName] = '';
435
- break;
436
- case 'NumberField':
437
- itemDefault[fieldName] = 0;
438
- break;
439
- // Agrega más casos según los tipos de campos que uses en tu modelo
440
- default:
431
+ // Si no tiene un valor por defecto definido, inicializa según su tipo
432
+ /*switch (field.constructor.name) {
433
+ case 'StringField':
434
+ itemDefault[fieldName] = '';
435
+ break;
436
+ case 'NumberField':
437
+ itemDefault[fieldName] = 0;
438
+ break;
439
+ // Agrega más casos según los tipos de campos que uses en tu modelo
440
+ default:
441
441
 
442
- console.debug("Undefined constructor ",fieldName,field.constructor.name);
443
- // Tipo de campo no reconocido, puedes manejarlo de acuerdo a tus necesidades
444
- itemDefault[fieldName] = null;
445
- }*/
442
+ console.debug("Undefined constructor ",fieldName,field.constructor.name);
443
+ // Tipo de campo no reconocido, puedes manejarlo de acuerdo a tus necesidades
444
+ itemDefault[fieldName] = null;
445
+ }*/
446
446
 
447
447
 
448
- if (typeof field.value === 'function') {
449
- itemDefault[fieldName] = field.value();
450
- }else if(field.value){
451
- itemDefault[fieldName] = field.value;
452
- }else{
453
- itemDefault[fieldName] = null;
454
- }
448
+ if (typeof field.value === 'function') {
449
+ itemDefault[fieldName] = field.value();
450
+ } else if (field.value) {
451
+ itemDefault[fieldName] = field.value;
452
+ } else {
453
+ itemDefault[fieldName] = null;
454
+ }
455
+
455
456
 
456
-
457
457
  }
458
458
  }
459
459
 
@@ -761,23 +761,23 @@ export default /*#__PURE__*/ {
761
761
  },
762
762
 
763
763
  updateData(data, allowCreate = true) {
764
- // Convertir this.items a un mapa para acceso rápido por id
765
- const itemsMap = new Map(this.items.map(item => [item.id, item]));
766
-
767
- // Recorrer cada elemento de data
768
- data.forEach(newItem => {
769
- if (itemsMap.has(newItem.id)) {
770
- // Actualizar el item existente
771
- const existingItem = itemsMap.get(newItem.id);
772
- Object.assign(existingItem, newItem);
773
- } else if (allowCreate) {
774
- // Agregar el nuevo item si allowCreate es true
775
- this.items.push(newItem);
776
- }
777
- });
764
+ // Convertir this.items a un mapa para acceso rápido por id
765
+ const itemsMap = new Map(this.items.map(item => [item.id, item]));
766
+
767
+ // Recorrer cada elemento de data
768
+ data.forEach(newItem => {
769
+ if (itemsMap.has(newItem.id)) {
770
+ // Actualizar el item existente
771
+ const existingItem = itemsMap.get(newItem.id);
772
+ Object.assign(existingItem, newItem);
773
+ } else if (allowCreate) {
774
+ // Agregar el nuevo item si allowCreate es true
775
+ this.items.push(newItem);
776
+ }
777
+ });
778
778
 
779
- // Convertir el mapa de vuelta a un array, si es necesario
780
- this.items = Array.from(itemsMap.values());
779
+ // Convertir el mapa de vuelta a un array, si es necesario
780
+ this.items = Array.from(itemsMap.values());
781
781
  },
782
782
  showItem(id, itemIndex = null) {
783
783
  if (itemIndex == null) {
@@ -818,7 +818,7 @@ export default /*#__PURE__*/ {
818
818
 
819
819
  refresh() {
820
820
  this.$emit("refresh", {});
821
-
821
+
822
822
  if (this.infiniteScroll) {
823
823
  this.pagination.current_page = 1;
824
824
  this.infiniteScrollKey++;
@@ -882,7 +882,7 @@ export default /*#__PURE__*/ {
882
882
  this.loading = false;
883
883
  this.firstLoad = true;
884
884
  },
885
- fetchItemsLocal(){
885
+ fetchItemsLocal() {
886
886
  if (this.grouped) {
887
887
  this.groupItems(this.models);
888
888
  } else {
@@ -894,8 +894,8 @@ export default /*#__PURE__*/ {
894
894
 
895
895
  },
896
896
  fetchItems(page = 1, concat = false) {
897
-
898
-
897
+
898
+
899
899
  this.$emit("beforeFetch", {});
900
900
  if (this.useVuexORM) {
901
901
  return this.fetchItemsVuex(page, concat);
@@ -903,7 +903,7 @@ export default /*#__PURE__*/ {
903
903
 
904
904
 
905
905
  if (!this.ajax) {
906
- return this.fetchItemsLocal(page,concat);
906
+ return this.fetchItemsLocal(page, concat);
907
907
  }
908
908
 
909
909
  this.loading = true;
@@ -1058,8 +1058,8 @@ export default /*#__PURE__*/ {
1058
1058
  await this.model.$delete(ids);
1059
1059
 
1060
1060
  } else {
1061
- let result = await this.model.api().delete(this.apiUrl + "/" + this.modelName+'/bulk-destroy' , {
1062
- params: { ids: ids},
1061
+ let result = await this.model.api().delete(this.apiUrl + "/" + this.modelName + '/bulk-destroy', {
1062
+ params: { ids: ids },
1063
1063
  delete: ids
1064
1064
  });
1065
1065
 
@@ -1072,7 +1072,7 @@ export default /*#__PURE__*/ {
1072
1072
  return;
1073
1073
  }
1074
1074
  }
1075
-
1075
+
1076
1076
  this.toastSuccess("Elemento eliminados.");
1077
1077
  },
1078
1078
  deleteItem(id, index) {
@@ -1132,7 +1132,7 @@ export default /*#__PURE__*/ {
1132
1132
  await this.model.$delete(id);
1133
1133
 
1134
1134
  } else {
1135
- let result = await this.model.api().delete(this.apiUrl + "/" + this.modelName+'/' + id, {
1135
+ let result = await this.model.api().delete(this.apiUrl + "/" + this.modelName + '/' + id, {
1136
1136
  delete: 1
1137
1137
  });
1138
1138
 
@@ -1179,7 +1179,7 @@ export default /*#__PURE__*/ {
1179
1179
  }
1180
1180
  },
1181
1181
 
1182
- showExportModal(){
1182
+ showExportModal() {
1183
1183
  this.$refs["modal-export"].show();
1184
1184
  },
1185
1185
 
@@ -1216,7 +1216,7 @@ export default /*#__PURE__*/ {
1216
1216
  },
1217
1217
 
1218
1218
 
1219
- showImportModal(){
1219
+ showImportModal() {
1220
1220
  this.$refs["modal-import"].show();
1221
1221
  },
1222
1222
  importItems() {
@@ -1295,19 +1295,19 @@ export default /*#__PURE__*/ {
1295
1295
 
1296
1296
  if (this.vuexLocalforage) {
1297
1297
 
1298
- if(this.markDirty){
1298
+ if (this.markDirty) {
1299
1299
  this.item.dirty = true;
1300
1300
  }
1301
1301
 
1302
1302
  if (this.item.id) {
1303
-
1304
- result = await this.model.$create({ data:this.item});
1305
- console.debug("save item 4", this.item,result);
1303
+
1304
+ result = await this.model.$create({ data: this.item });
1305
+ console.debug("save item 4", this.item, result);
1306
1306
  create = false;
1307
1307
  } else {
1308
1308
 
1309
- result = await this.model.$create({ data:this.item});
1310
- console.debug("save item 5", this.item,result);
1309
+ result = await this.model.$create({ data: this.item });
1310
+ console.debug("save item 5", this.item, result);
1311
1311
  create = true;
1312
1312
  }
1313
1313
 
@@ -1316,7 +1316,7 @@ export default /*#__PURE__*/ {
1316
1316
  let jsondata = this.item.$toJson();
1317
1317
  console.debug("save item 2", this.item, jsondata);
1318
1318
  if (this.item.id) {
1319
- result = await this.model.api().put(this.apiUrl + "/" + this.modelName+'/' + this.item.id, jsondata);
1319
+ result = await this.model.api().put(this.apiUrl + "/" + this.modelName + '/' + this.item.id, jsondata);
1320
1320
  create = false;
1321
1321
  } else {
1322
1322
  result = await this.model.api().post(this.apiUrl + "/" + this.modelName, jsondata);
@@ -1878,7 +1878,6 @@ export default /*#__PURE__*/ {
1878
1878
  <span>{{ item.crudgrouplabel }}</span>
1879
1879
  </th>
1880
1880
 
1881
-
1882
1881
  <slot name="row" v-bind:item="item" v-else>
1883
1882
  <td v-for="(column, indexc) in columns" :key="indexc" :scope="column.prop == 'id' ? 'row' : ''">
1884
1883
  <slot :name="'cell-' + column.prop" v-bind:item="item" v-bind:index="index" v-bind:itemindex="index"
@@ -1952,7 +1951,7 @@ export default /*#__PURE__*/ {
1952
1951
  </p>
1953
1952
  </div>
1954
1953
 
1955
- <div v-if="displayMode == displayModes.MODE_CARDS">
1954
+ <div v-else-if="displayMode == displayModes.MODE_CARDS">
1956
1955
  <draggable v-model="items" :group="draggableGroup" :draggable="orderable ? '.item' : '.none'" @start="drag = true"
1957
1956
  @end="drag = false" @sort="onSort()" @add="onDraggableAdded($event)" @change="onDraggableChange($event)"
1958
1957
  :options="draggableOptions">
@@ -1960,23 +1959,12 @@ export default /*#__PURE__*/ {
1960
1959
  :cols="{ default: 12 / colLg, 1400: 12 / colXl, 1200: 12 / colLg, 1000: 12 / colMd, 700: 12 / colSm, 400: 12 / colXs }"
1961
1960
  :gutter="{ default: '15px', 700: '15px' }">
1962
1961
  <div v-for="(item, index) in itemsList" v-bind:key="index" class="item">
1963
- <slot name="card" v-bind:item="item">
1964
- <ItemCard
1965
- v-for="(item, index) in itemsList"
1966
- :key="index"
1967
- :item="item"
1968
- :columns="columns"
1969
- :index="index"
1970
- :cardClass="cardClass"
1971
- :cardHideFooter="cardHideFooter"
1972
- :itemValue="itemValue"
1973
- :getStateValue="getStateValue"
1974
- :getArrayValue="getArrayValue"
1975
- :showItem="showItem"
1976
- :updateItem="updateItem"
1977
- :removeItem="removeItem"
1978
- />
1979
- </slot>
1962
+ <slot name="card" v-bind:item="item">
1963
+ <ItemCard v-for="(item, index) in itemsList" :key="index" :item="item" :columns="columns" :index="index"
1964
+ :cardClass="cardClass" :cardHideFooter="cardHideFooter" :itemValue="itemValue"
1965
+ :getStateValue="getStateValue" :getArrayValue="getArrayValue" :showItem="showItem"
1966
+ :updateItem="updateItem" :removeItem="removeItem" />
1967
+ </slot>
1980
1968
  </div>
1981
1969
  </masonry>
1982
1970
  </draggable>
@@ -1987,29 +1975,35 @@ export default /*#__PURE__*/ {
1987
1975
 
1988
1976
  </div>
1989
1977
 
1990
- <div v-if="displayMode == displayModes.MODE_KANBAN">
1991
- <div v-for="(item, index) in itemsList" v-bind:key="index" class="item">
1992
- <slot name="card" v-bind:item="item">
1993
- <ItemCard
1994
- v-for="(item, index) in itemsList"
1995
- :key="index"
1996
- :item="item"
1997
- :columns="columns"
1998
- :index="index"
1999
- :cardClass="cardClass"
2000
- :cardHideFooter="cardHideFooter"
2001
- :itemValue="itemValue"
2002
- :getStateValue="getStateValue"
2003
- :getArrayValue="getArrayValue"
2004
- :showItem="showItem"
2005
- :updateItem="updateItem"
2006
- :removeItem="removeItem"
2007
- />
2008
- </slot>
1978
+ <div v-else-if="displayMode == displayModes.MODE_KANBAN">
1979
+
1980
+
1981
+ <div v-for="(column, colIndex) in items" :key="colIndex" class="kanban-column">
1982
+ <div class="kanban-column-header">
1983
+ {{ colIndex }}
1984
+ </div>
1985
+
1986
+ {{ JSON.stringify(column) }}
1987
+
1988
+
1989
+ <draggable v-model="column.items" group="kanban" class="kanban-column-body" @end="onDragEnd">
1990
+
1991
+ <div v-for="(item, index) in itemsList" v-bind:key="index" class="item">
1992
+ <slot name="card" v-bind:item="item">
1993
+ <ItemCard v-for="(item, index) in itemsList" :key="index" :item="item" :columns="columns" :index="index"
1994
+ :cardClass="cardClass" :cardHideFooter="cardHideFooter" :itemValue="itemValue"
1995
+ :getStateValue="getStateValue" :getArrayValue="getArrayValue" :showItem="showItem"
1996
+ :updateItem="updateItem" :removeItem="removeItem" />
1997
+ </slot>
1998
+ </div>
1999
+
2000
+ </draggable>
2001
+
2009
2002
  </div>
2003
+
2010
2004
  </div>
2011
2005
 
2012
- <div v-if="displayMode == displayModes.MODE_CUSTOM">
2006
+ <div v-else-if="displayMode == displayModes.MODE_CUSTOM">
2013
2007
  <div :class="listContainerClass">
2014
2008
  <p v-if="!loading && items && items.length == 0 && !infiniteScroll" class="p-3">
2015
2009
  {{ messageEmptyResults }}
@@ -2193,4 +2187,47 @@ tr td:first-child {
2193
2187
  }
2194
2188
  }
2195
2189
  }
2190
+
2191
+
2192
+ .kanban-board {
2193
+ display: flex;
2194
+ gap: 1rem;
2195
+ overflow-x: auto;
2196
+ padding: 1rem;
2197
+ }
2198
+
2199
+ .kanban-column {
2200
+ background: #f4f5f7;
2201
+ border-radius: 8px;
2202
+ width: 300px;
2203
+ display: flex;
2204
+ flex-direction: column;
2205
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
2206
+ }
2207
+
2208
+ .kanban-column-header {
2209
+ font-weight: bold;
2210
+ padding: 0.5rem;
2211
+ background: #dfe1e6;
2212
+ border-radius: 8px 8px 0 0;
2213
+ text-align: center;
2214
+ }
2215
+
2216
+ .kanban-column-body {
2217
+ padding: 0.5rem;
2218
+ min-height: 100px;
2219
+ background: #ffffff;
2220
+ border-radius: 0 0 8px 8px;
2221
+ display: flex;
2222
+ flex-direction: column;
2223
+ gap: 0.5rem;
2224
+ }
2225
+
2226
+ .kanban-card {
2227
+ background: #ffffff;
2228
+ border-radius: 4px;
2229
+ padding: 1rem;
2230
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);
2231
+ cursor: grab;
2232
+ }
2196
2233
  </style>