user.ts 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. // Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. import { useCurrentUserQuery } from '@common/graphql/api'
  3. import { defineStore } from 'pinia'
  4. import { QueryHandler } from '@common/server/apollo/handler'
  5. import type { SingleValueStore, UserData } from '@common/types/store'
  6. import useLocaleStore from '@common/stores/locale'
  7. import hasPermission from '@common/permissions/hasPermission'
  8. import type {
  9. CurrentUserQuery,
  10. CurrentUserQueryVariables,
  11. } from '@common/graphql/types'
  12. import testFlags from '@common/utils/testFlags'
  13. let currentUserQuery: QueryHandler<CurrentUserQuery, CurrentUserQueryVariables>
  14. const getCurrentUserQuery = () => {
  15. if (currentUserQuery) return currentUserQuery
  16. currentUserQuery = new QueryHandler(
  17. useCurrentUserQuery({ fetchPolicy: 'no-cache' }),
  18. )
  19. return currentUserQuery
  20. }
  21. const useSessionUserStore = defineStore('sessionUser', {
  22. state: (): SingleValueStore<Maybe<UserData>> => {
  23. return {
  24. value: null,
  25. }
  26. },
  27. actions: {
  28. async getCurrentUser(): Promise<UserData> {
  29. const currentUserQuery = getCurrentUserQuery()
  30. const result = await currentUserQuery.loadedResult(true)
  31. this.value = result?.currentUser || null
  32. // Check if the locale is different, then a update is needed.
  33. const locale = useLocaleStore()
  34. const userLocale = this.value?.preferences?.locale
  35. if (userLocale && (userLocale !== locale.value || !locale.value)) {
  36. await locale.updateLocale(userLocale)
  37. }
  38. if (this.value) {
  39. testFlags.set('useSessionUserStore.getCurrentUser.loaded')
  40. }
  41. return this.value
  42. },
  43. hasPermission(requiredPermission: Array<string>): boolean {
  44. return hasPermission(
  45. requiredPermission,
  46. this.value?.permissions?.names || [],
  47. )
  48. },
  49. },
  50. })
  51. export default useSessionUserStore