|
|
@@ -1,68 +1,43 @@
|
|
|
-import { AnyJson, AnyStore } from '~/types/interfaces'
|
|
|
-import {computed, ComputedRef, useContext} from "@nuxtjs/composition-api";
|
|
|
+import { AnyStore } from '~/types/interfaces'
|
|
|
+import {computed, ComputedRef} from "@nuxtjs/composition-api";
|
|
|
|
|
|
/**
|
|
|
* @category composables/form
|
|
|
- * @class UseDirtyForm
|
|
|
- * Use Classe pour gérer l'apparition de message si le formulaire est dirty
|
|
|
+ * @param store
|
|
|
+ * Composable pour gérer l'apparition de message si le formulaire est dirty
|
|
|
*/
|
|
|
-export class UseForm {
|
|
|
- private store: AnyStore
|
|
|
- private readonly handler: any
|
|
|
+export function useForm(store: AnyStore){
|
|
|
|
|
|
- constructor () {
|
|
|
- const {store} = useContext()
|
|
|
- this.store = store
|
|
|
- this.handler = getEventHandler()
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Composition function
|
|
|
- */
|
|
|
- public invoke (): AnyJson {
|
|
|
- const readonly: ComputedRef<boolean> = computed(() => {
|
|
|
- return this.store.state.form.readonly
|
|
|
- })
|
|
|
+ const handler: any = getEventHandler()
|
|
|
|
|
|
- return {
|
|
|
- markFormAsDirty: () => this.markAsDirty(),
|
|
|
- markFormAsNotDirty: () => this.markAsNotDirty(),
|
|
|
- readonly
|
|
|
- }
|
|
|
- }
|
|
|
+ const readonly: ComputedRef<boolean> = computed(() => {
|
|
|
+ return store.state.form.readonly
|
|
|
+ })
|
|
|
|
|
|
/**
|
|
|
* définit le formulaire comme Dirty (modifié)
|
|
|
*/
|
|
|
- private markAsDirty () {
|
|
|
- this.store.commit('form/setDirty', true)
|
|
|
- this.addEventListener()
|
|
|
+ function markAsDirty () {
|
|
|
+ store.commit('form/setDirty', true)
|
|
|
+ if (process.browser) {
|
|
|
+ window.addEventListener('beforeunload', handler)
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* Définit le formulaire comme non dirty (non modifié)
|
|
|
*/
|
|
|
- private markAsNotDirty () {
|
|
|
- this.store.commit('form/setDirty', false)
|
|
|
- this.clearEventListener()
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Ajoute un Event avant le départ de la page
|
|
|
- */
|
|
|
- private addEventListener () {
|
|
|
+ function markAsNotDirty () {
|
|
|
+ store.commit('form/setDirty', false)
|
|
|
if (process.browser) {
|
|
|
- window.addEventListener('beforeunload', this.handler)
|
|
|
+ window.removeEventListener('beforeunload', handler)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * Supprime l'Event avant le départ de la page
|
|
|
- */
|
|
|
- private clearEventListener () {
|
|
|
- if (process.browser) {
|
|
|
- window.removeEventListener('beforeunload', this.handler)
|
|
|
- }
|
|
|
+ return {
|
|
|
+ markAsDirty,
|
|
|
+ markAsNotDirty,
|
|
|
+ readonly
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -74,4 +49,3 @@ function getEventHandler () {
|
|
|
e.returnValue = ''
|
|
|
}
|
|
|
}
|
|
|
-export const $useForm = () => new UseForm().invoke()
|