useNextStepFactory.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import {FORM_STATUS, SUBMIT_TYPE} from "~/types/enums";
  2. import {useContext} from "@nuxtjs/composition-api";
  3. import {Store} from "vuex";
  4. import {AnyJson} from "~/types/interfaces";
  5. import {Route} from "vue-router";
  6. /**
  7. * @category composables/form
  8. * @class UseNextStepFactory
  9. * Use Classe pour gérer actions post submit
  10. */
  11. export default class UseNextStepFactory{
  12. private store: Store<any>
  13. private router: any
  14. constructor() {
  15. const {store, app: {router}} = useContext()
  16. this.store = store
  17. this.router = router
  18. }
  19. invoke(args: any, response: AnyJson){
  20. const factory: AnyJson = {}
  21. factory[SUBMIT_TYPE.SAVE] = () => this.save(args, response.id)
  22. factory[SUBMIT_TYPE.SAVE_AND_BACK] = () => this.saveAndGoTo(args)
  23. return factory
  24. }
  25. /**
  26. * Action Sauvegarder qui redirige vers la page d'edit si on est en mode create
  27. * @param route
  28. * @param id
  29. */
  30. save(route: Route, id: number){
  31. if(this.store.state.form.formStatus === FORM_STATUS.CREATE){
  32. route.path += id
  33. this.router.push(route)
  34. }
  35. }
  36. /**
  37. * Action sauvegarder et route suivante qui redirige vers une route
  38. * @param route
  39. */
  40. saveAndGoTo(route: Route){
  41. this.router.push(route)
  42. }
  43. }