useRepository.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import {useContext} from '@nuxtjs/composition-api'
  2. import {Repository} from "@vuex-orm/core";
  3. import {$objectProperties} from "~/services/utils/objectProperties";
  4. import {Model} from '@/models/Model'
  5. import {AnyJson} from "~/types/types";
  6. class useRepository{
  7. public getRepository(model: typeof Model): Repository<Model>{
  8. const {store} = useContext()
  9. return store.$repo(model)
  10. }
  11. public initRepository(model: typeof Model, readOnly:boolean = true): Repository<Model>{
  12. const repository = this.getRepository(model)
  13. this.setReadOnly(repository, readOnly)
  14. return repository
  15. }
  16. public setReadOnly(repository: Repository<Model>, readOnly:boolean): void{
  17. repository.getModel().setReadOnly(readOnly)
  18. }
  19. public getReadOnly(repository: Repository<Model>): boolean{
  20. return repository.getModel().getReadOnly()
  21. }
  22. public editRepository(repository: Repository<Model>){
  23. return () => {
  24. this.setReadOnly(repository, false)
  25. }
  26. }
  27. public updateStoreFromField(repository: Repository, entry:AnyJson, value:any, field:string): void{
  28. entry[field] = value
  29. repository.update($objectProperties.cloneAndNest(entry))
  30. }
  31. public cleanRepository(repository: Repository){
  32. return () => {
  33. repository.flush()
  34. }
  35. }
  36. }
  37. export const useRepositoryHelper = new useRepository()