59 lines
1.6 KiB
TypeScript
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
|
|
}
|
|
}
|