refs #5673 feat(crudModel): add saveFn prop
gitea/salix-front/pipeline/head This commit looks good Details

This commit is contained in:
Alex Moreno 2023-09-19 10:21:24 +02:00
parent ea8a7de6d2
commit 52fcbdb689
3 changed files with 10 additions and 30 deletions

View File

@ -53,6 +53,10 @@ const $props = defineProps({
type: Object, type: Object,
default: null, default: null,
}, },
saveFn: {
type: Function,
default: null,
},
}); });
const isLoading = ref(false); const isLoading = ref(false);
@ -83,6 +87,7 @@ onUnmounted(() => {
function tMobile(...args) { function tMobile(...args) {
if (!quasar.platform.is.mobile) return t(...args); if (!quasar.platform.is.mobile) return t(...args);
} }
async function fetch(data) { async function fetch(data) {
if (data && Array.isArray(data)) { if (data && Array.isArray(data)) {
let $index = 0; let $index = 0;
@ -128,17 +133,18 @@ async function onSubmit() {
} }
async function saveChanges(data) { async function saveChanges(data) {
if ($props.saveFn) return $props.saveFn(data, getChanges);
const changes = data || getChanges(); const changes = data || getChanges();
try { try {
await axios.post($props.saveUrl || $props.url + '/crud', changes); await axios.post($props.saveUrl || $props.url + '/crud', changes);
} catch (e) { } catch (e) {
return (isLoading.value = false); return (isLoading.value = false);
} }
originalData.value = JSON.parse(JSON.stringify(formData.value)); originalData.value = JSON.parse(JSON.stringify(formData.value));
if (changes.creates?.length) await vnPaginateRef.value.fetch();
hasChanges.value = false; hasChanges.value = false;
isLoading.value = false; isLoading.value = false;
if (changes.creates?.length) await vnPaginateRef.value.fetch();
} }
async function insert() { async function insert() {
@ -249,12 +255,9 @@ watch(formUrl, async () => {
</script> </script>
<template> <template>
<VnPaginate <VnPaginate
@submit="onSubmit"
@reset="reset"
:url="url" :url="url"
v-bind="$attrs" v-bind="$attrs"
@on-fetch="fetch" @on-fetch="fetch"
class="q-pa-md"
:skeleton="false" :skeleton="false"
ref="vnPaginateRef" ref="vnPaginateRef"
> >

View File

@ -1,6 +1,5 @@
<script setup> <script setup>
import axios from 'axios'; import { ref, onMounted, computed } from 'vue';
import { ref, onMounted, computed, onUpdated } from 'vue';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { useI18n } from 'vue-i18n'; import { useI18n } from 'vue-i18n';
import CardSummary from 'components/ui/CardSummary.vue'; import CardSummary from 'components/ui/CardSummary.vue';

View File

@ -1,4 +1,4 @@
import { createWrapper, axios } from 'app/test/vitest/helper'; import { createWrapper } from 'app/test/vitest/helper';
import CrudModel from 'components/CrudModel.vue'; import CrudModel from 'components/CrudModel.vue';
import { vi, afterEach, beforeEach, beforeAll, describe, expect, it } from 'vitest'; import { vi, afterEach, beforeEach, beforeAll, describe, expect, it } from 'vitest';
@ -95,28 +95,6 @@ describe('CrudModel', () => {
}); });
}); });
// TODO: test .onOk()
describe('remove()', () => {
it('should remove', async () => {
vi.spyOn(vm.quasar, 'dialog');
vm.originalData = [
{ id: 1, name: 'Tony Starks', $index: 1 },
{ id: 2, name: 'Jessica Jones', $index: 2 },
{ id: 3, name: 'Bruce Wayne', $index: 3 },
];
vm.state.set('crudModel', [
{ id: 1, name: 'New name one', $index: 1 },
{ id: 2, name: 'New name two', $index: 2 },
{ id: 3, name: 'Bruce Wayne', $index: 3 },
]);
await vm.remove([{ id: 1 }]);
expect(vm.quasar.dialog).toHaveBeenCalled();
});
});
describe('getDifferences()', () => { describe('getDifferences()', () => {
it('should return the differences between two objects', async () => { it('should return the differences between two objects', async () => {
const obj1 = { const obj1 = {