|
|
@@ -59,12 +59,13 @@
|
|
|
</template>
|
|
|
|
|
|
<script lang="ts">
|
|
|
- import {computed, defineComponent, onBeforeMount, onBeforeUnmount, reactive, toRefs, useContext} from '@nuxtjs/composition-api'
|
|
|
+ import {computed, defineComponent, onBeforeMount, onBeforeUnmount, onUnmounted, reactive, toRefs, useContext, watch, ref} from '@nuxtjs/composition-api'
|
|
|
import {repositoryHelper} from "~/services/store/repository";
|
|
|
import {queryHelper} from "~/services/store/query";
|
|
|
import {Query} from "@vuex-orm/core";
|
|
|
import {QUERY_TYPE, TYPE_ALERT} from "~/types/enums";
|
|
|
import {alert} from "~/types/interfaces";
|
|
|
+ import {$useDirtyForm} from "~/use/form/useDirtyForm";
|
|
|
|
|
|
export default defineComponent({
|
|
|
props: {
|
|
|
@@ -83,9 +84,9 @@
|
|
|
},
|
|
|
setup: function (props) {
|
|
|
const {$dataPersister, store, app: {router, i18n}} = useContext()
|
|
|
+ const {markFormAsDirty, markFormAsNotDirty} = $useDirtyForm(store)
|
|
|
|
|
|
const {id, query} = toRefs(props)
|
|
|
- const repository = repositoryHelper.getRepository(props.model)
|
|
|
const properties = reactive({
|
|
|
valid: false,
|
|
|
saveOk: false,
|
|
|
@@ -100,18 +101,14 @@
|
|
|
return queryHelper.getFlattenEntry(query.value, id.value)
|
|
|
})
|
|
|
|
|
|
- const handler = getEventHandler()
|
|
|
-
|
|
|
const updateRepository = (newValue: string, field: string) => {
|
|
|
- addEventListener(handler)
|
|
|
- store.commit('form/setDirty', true)
|
|
|
- repositoryHelper.updateStoreFromField(repository, entry.value, newValue, field)
|
|
|
+ markFormAsDirty()
|
|
|
+ repositoryHelper.updateStoreFromField(props.model, entry.value, newValue, field)
|
|
|
}
|
|
|
|
|
|
const submit = async () => {
|
|
|
try {
|
|
|
- store.commit('form/setDirty', false)
|
|
|
- clearEventListener(handler)
|
|
|
+ markFormAsNotDirty()
|
|
|
await $dataPersister.invoke({
|
|
|
type: QUERY_TYPE.MODEL,
|
|
|
model: props.model,
|
|
|
@@ -133,14 +130,6 @@
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- onBeforeMount(() => {
|
|
|
- clearEventListener(handler)
|
|
|
- })
|
|
|
-
|
|
|
- onBeforeUnmount(() => {
|
|
|
- clearEventListener(handler)
|
|
|
- })
|
|
|
-
|
|
|
const showDialog = computed(() => {
|
|
|
return store.state.form.showConfirmToLeave
|
|
|
})
|
|
|
@@ -155,12 +144,12 @@
|
|
|
}
|
|
|
|
|
|
const goEvenUnsavedData = () => {
|
|
|
- store.commit('form/setDirty', false)
|
|
|
+ markFormAsNotDirty()
|
|
|
store.commit('form/setShowConfirmToLeave', false)
|
|
|
|
|
|
const entryCopy = query.value.first()
|
|
|
if (entryCopy && entryCopy.$getAttributes()['originalState']) {
|
|
|
- repositoryHelper.persist(repository, entryCopy.$getAttributes()['originalState'])
|
|
|
+ repositoryHelper.persist(props.model, entryCopy.$getAttributes()['originalState'])
|
|
|
}
|
|
|
|
|
|
if (router) {
|
|
|
@@ -181,28 +170,6 @@
|
|
|
}
|
|
|
}
|
|
|
})
|
|
|
-
|
|
|
- function getEventHandler() {
|
|
|
- return function (e: any) {
|
|
|
- // Cancel the event
|
|
|
- e.preventDefault();
|
|
|
- // Chrome requires returnValue to be set
|
|
|
- e.returnValue = '';
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- function addEventListener(handler: any) {
|
|
|
- if (process.browser) {
|
|
|
- window.addEventListener('beforeunload', handler);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- function clearEventListener(handler: any) {
|
|
|
- if (process.browser) {
|
|
|
- window.removeEventListener('beforeunload', handler);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
</script>
|
|
|
|
|
|
<style scoped>
|