useMajorTreeInjection.js 897 B

12345678910111213141516171819202122232425262728
  1. import {ref, onMounted} from 'vue';
  2. import {findTreeNode} from "@/utils/tree-helper";
  3. import {injectLocal, provideLocal} from "@vueuse/core";
  4. import {useCacheStore} from "@/hooks/useCacheStore";
  5. import {cacheActions} from "@/hooks/defineCacheActions";
  6. const key = Symbol('MAJOR_TREE_SERVICE')
  7. export const useProvideMajorTreeService = () => {
  8. const {dispatchCache} = useCacheStore()
  9. const majorTree = ref([])
  10. const findNodeByCode = (code) => findTreeNode(majorTree.value, m => m.code == code)
  11. const findNode = (predicate) => findTreeNode(majorTree.value, predicate)
  12. onMounted(async () => majorTree.value = await dispatchCache(cacheActions.getMajorTree))
  13. const options = {
  14. majorTree,
  15. findNode,
  16. findNodeByCode
  17. }
  18. provideLocal(key, options)
  19. return options
  20. }
  21. export const useInjectMajorTreeService = () => {
  22. return injectLocal(key)
  23. }