Files
speckle-server/packages/frontend-2/lib/user/composables/meta.ts
T

59 lines
1.6 KiB
TypeScript

import { useApolloClient, useMutation, useQuery } from '@vue/apollo-composable'
import { graphql } from '~~/lib/common/generated/gql'
export const activeUserMetaQuery = graphql(`
query ActiveUserMeta {
activeUser {
meta {
legacyProjectsExplainerCollapsed
}
}
}
`)
export const updateLegacyProjectsExplainerMutation = graphql(`
mutation UpdateLegacyProjectsExplainer($value: Boolean!) {
activeUserMutations {
meta {
setLegacyProjectsExplainerCollapsed(value: $value)
}
}
}
`)
export function useActiveUserMeta() {
const { result } = useQuery(activeUserMetaQuery)
const { mutate: updateLegacyProjectsExplainer } = useMutation(
updateLegacyProjectsExplainerMutation
)
const apollo = useApolloClient().client
const cache = apollo.cache
const { activeUser } = useActiveUser()
const activeUserId = computed(() => activeUser.value?.id ?? '')
const meta = computed(() => result.value?.activeUser?.meta)
const hasCollapsedLegacyProjectsExplainer = computed(
() => meta.value?.legacyProjectsExplainerCollapsed
)
const updateLegacyProjectsExplainerCollapsed = async (value: boolean) => {
await updateLegacyProjectsExplainer({ value })
modifyObjectField(
cache,
getCacheId('User', activeUserId.value),
'meta',
({ helpers: { createUpdatedValue } }) =>
createUpdatedValue(({ update }) => {
update('legacyProjectsExplainerCollapsed', () => value)
})
)
}
return {
hasCollapsedLegacyProjectsExplainer,
updateLegacyProjectsExplainerCollapsed
}
}