user.ts 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. // Copyright (C) 2012-2021 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. let currentUserQuery: QueryHandler<CurrentUserQuery, CurrentUserQueryVariables>
  13. const getCurrentUserQuery = () => {
  14. if (currentUserQuery) return currentUserQuery
  15. currentUserQuery = new QueryHandler(
  16. useCurrentUserQuery({ fetchPolicy: 'no-cache' }),
  17. )
  18. return currentUserQuery
  19. }
  20. const useSessionUserStore = defineStore('sessionUser', {
  21. state: (): SingleValueStore<Maybe<UserData>> => {
  22. return {
  23. value: null,
  24. }
  25. },
  26. actions: {
  27. async getCurrentUser(): Promise<UserData> {
  28. const currentUserQuery = getCurrentUserQuery()
  29. const result = await currentUserQuery.loadedResult(true)
  30. this.value = result?.currentUser || null
  31. // Check if the locale is different, then a update is needed.
  32. const locale = useLocaleStore()
  33. const userLocale = this.value?.preferences?.locale
  34. if (userLocale && (userLocale !== locale.value || !locale.value)) {
  35. await locale.updateLocale(userLocale)
  36. }
  37. return this.value
  38. },
  39. hasPermission(requiredPermission: Array<string>): boolean {
  40. return hasPermission(
  41. requiredPermission,
  42. this.value?.permissions?.names || [],
  43. )
  44. },
  45. },
  46. })
  47. export default useSessionUserStore