atom-nuxt 1.4.2 → 1.4.4
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/dist/module.json
CHANGED
|
@@ -246,6 +246,7 @@ const dialogOpen = computed({
|
|
|
246
246
|
});
|
|
247
247
|
const page = computed(() => props.loaderKey ? parseQuery(route.query[props.loaderKey])?.page ?? 1 : route.query.page ?? 1);
|
|
248
248
|
const filterValues = props.loaderKey ? ref({ ...props.customFilters, ...parseQuery(route.query[props.loaderKey]) }) : ref({ ...props.customFilters, ...route.query });
|
|
249
|
+
const isInitialLoad = ref(true);
|
|
249
250
|
const onQueryChange = (page2) => {
|
|
250
251
|
console.error("QUERY CHANGED");
|
|
251
252
|
const newQuery = {};
|
|
@@ -289,6 +290,11 @@ watch(() => filterValues, () => {
|
|
|
289
290
|
console.error("ROUTE CHANGED");
|
|
290
291
|
debouncedGet();
|
|
291
292
|
}, { deep: true });
|
|
293
|
+
watch(listPending, (isPending) => {
|
|
294
|
+
if (!isPending && isInitialLoad.value) {
|
|
295
|
+
isInitialLoad.value = false;
|
|
296
|
+
}
|
|
297
|
+
});
|
|
292
298
|
const debouncedGet = useDebounceFn(() => {
|
|
293
299
|
console.error("DEBOUNCED GET");
|
|
294
300
|
getItems(Number.parseInt(page.value) ?? null, null, filterValues.value);
|
|
@@ -336,9 +342,46 @@ const createForm = () => {
|
|
|
336
342
|
}
|
|
337
343
|
router.push(newQuery);
|
|
338
344
|
};
|
|
345
|
+
function deepCloneWithFiles(obj, seen = /* @__PURE__ */ new WeakMap()) {
|
|
346
|
+
if (obj === null || typeof obj !== "object") {
|
|
347
|
+
return obj;
|
|
348
|
+
}
|
|
349
|
+
if (seen.has(obj)) {
|
|
350
|
+
return seen.get(obj);
|
|
351
|
+
}
|
|
352
|
+
if (obj instanceof File || obj instanceof Blob) {
|
|
353
|
+
return obj;
|
|
354
|
+
}
|
|
355
|
+
if (obj instanceof Date) {
|
|
356
|
+
return new Date(obj.getTime());
|
|
357
|
+
}
|
|
358
|
+
if (obj instanceof RegExp) {
|
|
359
|
+
return new RegExp(obj.source, obj.flags);
|
|
360
|
+
}
|
|
361
|
+
if (Array.isArray(obj)) {
|
|
362
|
+
const arrCopy = [];
|
|
363
|
+
seen.set(obj, arrCopy);
|
|
364
|
+
for (let i = 0; i < obj.length; i++) {
|
|
365
|
+
arrCopy[i] = deepCloneWithFiles(obj[i], seen);
|
|
366
|
+
}
|
|
367
|
+
return arrCopy;
|
|
368
|
+
}
|
|
369
|
+
const objCopy = {};
|
|
370
|
+
seen.set(obj, objCopy);
|
|
371
|
+
for (const key in obj) {
|
|
372
|
+
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
373
|
+
const value = obj[key];
|
|
374
|
+
if (typeof value === "function") {
|
|
375
|
+
continue;
|
|
376
|
+
}
|
|
377
|
+
objCopy[key] = deepCloneWithFiles(value, seen);
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return objCopy;
|
|
381
|
+
}
|
|
339
382
|
const saveAction = async () => {
|
|
340
383
|
formPending.value = true;
|
|
341
|
-
let itemToSave =
|
|
384
|
+
let itemToSave = deepCloneWithFiles(toRaw(item.value));
|
|
342
385
|
if (props.beforeSave != null) {
|
|
343
386
|
itemToSave = await props.beforeSave(itemToSave);
|
|
344
387
|
}
|
|
@@ -429,43 +472,59 @@ const exportAction = async () => {
|
|
|
429
472
|
<div :class="contentClasses">
|
|
430
473
|
<v-progress-linear :active="listPending" indeterminate color="primary"></v-progress-linear>
|
|
431
474
|
<v-row>
|
|
432
|
-
<v-col v-if="!hideFilters && filters.length > 0" cols="12" md="3">
|
|
475
|
+
<v-col v-if="!hideFilters && (filters.length > 0 || isInitialLoad)" cols="12" md="3">
|
|
433
476
|
<div>
|
|
434
|
-
<
|
|
435
|
-
<
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
477
|
+
<div v-if="isInitialLoad">
|
|
478
|
+
<v-skeleton-loader
|
|
479
|
+
type="heading, list-item, list-item, list-item"
|
|
480
|
+
class="mb-3"
|
|
481
|
+
></v-skeleton-loader>
|
|
482
|
+
</div>
|
|
483
|
+
<template v-else>
|
|
484
|
+
<slot name="filtersTitle">
|
|
485
|
+
<h3 v-if="filtersTitle" class="mb-2">{{ filtersTitle }}</h3>
|
|
486
|
+
</slot>
|
|
487
|
+
<slot name="filters" :filters="filters">
|
|
488
|
+
<div :class="filterClasses">
|
|
489
|
+
<crud-filter-list v-model="filterValues" :filters="filters"></crud-filter-list>
|
|
490
|
+
</div>
|
|
491
|
+
</slot>
|
|
492
|
+
</template>
|
|
442
493
|
</div>
|
|
443
494
|
</v-col>
|
|
444
|
-
<v-col cols="12" :md="hideFilters || filters.length === 0 ? '12' : '9'">
|
|
495
|
+
<v-col cols="12" :md="hideFilters || (filters.length === 0 && !isInitialLoad) ? '12' : '9'">
|
|
445
496
|
<div class="">
|
|
446
|
-
<
|
|
447
|
-
<
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
{{ noResultsText }}
|
|
452
|
-
</v-alert>
|
|
453
|
-
</slot>
|
|
454
|
-
<slot v-if="hasListErrors" name="error" :errors="listErrors">
|
|
455
|
-
<crud-error-display :errors="listErrors"></crud-error-display>
|
|
456
|
-
</slot>
|
|
457
|
-
<div :class="resultClasses">
|
|
458
|
-
<slot
|
|
459
|
-
v-if="totalItems > 0"
|
|
460
|
-
:items="items"
|
|
461
|
-
:pending="listPending"
|
|
462
|
-
:update-action="updateForm"
|
|
463
|
-
:view-action="viewForm"
|
|
464
|
-
:delete-action="deleteForm"
|
|
465
|
-
:form-pending="formPending"
|
|
466
|
-
>
|
|
467
|
-
</slot>
|
|
497
|
+
<div v-if="isInitialLoad">
|
|
498
|
+
<v-skeleton-loader
|
|
499
|
+
type="heading, card, card, card"
|
|
500
|
+
class="mb-3"
|
|
501
|
+
></v-skeleton-loader>
|
|
468
502
|
</div>
|
|
503
|
+
<template v-else>
|
|
504
|
+
<slot name="resultsTitle">
|
|
505
|
+
<h3 v-if="resultsTitle" class="mb-2">{{ resultsTitle }}</h3>
|
|
506
|
+
</slot>
|
|
507
|
+
<slot v-if="!listPending && totalItems === 0 && !hasListErrors" name="empty" :create-action="createForm">
|
|
508
|
+
<v-alert icon="mdi-playlist-remove" type="info" class="pa-5">
|
|
509
|
+
{{ noResultsText }}
|
|
510
|
+
</v-alert>
|
|
511
|
+
</slot>
|
|
512
|
+
<slot v-if="hasListErrors" name="error" :errors="listErrors">
|
|
513
|
+
<crud-error-display :errors="listErrors"></crud-error-display>
|
|
514
|
+
</slot>
|
|
515
|
+
<div :class="resultClasses">
|
|
516
|
+
<slot
|
|
517
|
+
v-if="totalItems > 0"
|
|
518
|
+
:items="items"
|
|
519
|
+
:pending="listPending"
|
|
520
|
+
:update-action="updateForm"
|
|
521
|
+
:view-action="viewForm"
|
|
522
|
+
:delete-action="deleteForm"
|
|
523
|
+
:form-pending="formPending"
|
|
524
|
+
>
|
|
525
|
+
</slot>
|
|
526
|
+
</div>
|
|
527
|
+
</template>
|
|
469
528
|
</div>
|
|
470
529
|
<div v-if="totalItems > 0 && totalPages > 1" class="pa-3">
|
|
471
530
|
<span class="d-none d-md-block pa-3">Page {{ currentPage }} of {{ totalPages }} pages with {{ totalItems }} items</span>
|