feat: add speckleConBannerDismissed to activeUser.meta

This commit is contained in:
andrewwallacespeckle
2025-05-20 13:55:32 +02:00
parent d2f2d95bb5
commit c571d51d27
13 changed files with 183 additions and 10 deletions
@@ -1,8 +1,18 @@
<template>
<CommonCard class="relative !px-3 !py-2.5 bg-foundation shadow-sm">
<FormButton
class="absolute top-1 right-1"
size="sm"
color="subtle"
:icon-right="XMarkIcon"
hide-text
@click="dismissSpeckleConBanner"
>
<span class="sr-only">Close</span>
</FormButton>
<div class="flex flex-col gap-y-2 text-foreground">
<span class="text-[10px] font-mono uppercase tracking-widest">
Upcoming Event
Upcoming event
</span>
<h3 class="text-body-xs font-semibold leading-tight tracking-tight">
SpeckleCON:
@@ -28,14 +38,20 @@
</CommonCard>
</template>
<script setup lang="ts">
import { ArrowUpRightIcon } from '@heroicons/vue/24/solid'
import { ArrowUpRightIcon, XMarkIcon } from '@heroicons/vue/24/solid'
import { useMixpanel } from '~~/lib/core/composables/mp'
import { useActiveUserMeta } from '~~/lib/user/composables/meta'
const mixpanel = useMixpanel()
const { updateSpeckleConBannerDismissed } = useActiveUserMeta()
const onCTAClick = () => {
mixpanel.track('SpeckleCON CTA Clicked', {
location: 'sidebar'
})
}
const dismissSpeckleConBanner = async () => {
await updateSpeckleConBannerDismissed(true)
}
</script>
@@ -167,6 +167,7 @@ import { useActiveUser } from '~~/lib/auth/composables/activeUser'
import { useNavigation } from '~~/lib/navigation/composables/navigation'
import { useMixpanel } from '~~/lib/core/composables/mp'
import dayjs from 'dayjs'
import { useActiveUserMeta } from '~/lib/user/composables/meta'
const { isLoggedIn } = useActiveUser()
const isWorkspacesEnabled = useIsWorkspacesEnabled()
@@ -174,6 +175,7 @@ const route = useRoute()
const { activeWorkspaceSlug, isProjectsActive } = useNavigation()
const { $intercom } = useNuxtApp()
const mixpanel = useMixpanel()
const { hasDismissedSpeckleConBanner } = useActiveUserMeta()
const isOpenMobile = ref(false)
const showExplainerVideoDialog = ref(false)
@@ -193,6 +195,7 @@ const showSidebar = computed(() => {
})
const showSpeckleConPromo = computed(() => {
if (hasDismissedSpeckleConBanner.value) return false
return dayjs('2025-11-08').isAfter(dayjs())
})
@@ -325,9 +325,10 @@ type Documents = {
"\n fragment AppAuthorAvatar on AppAuthor {\n id\n name\n avatar\n }\n": typeof types.AppAuthorAvatarFragmentDoc,
"\n fragment LimitedUserAvatar on LimitedUser {\n id\n name\n avatar\n }\n": typeof types.LimitedUserAvatarFragmentDoc,
"\n fragment ActiveUserAvatar on User {\n id\n name\n avatar\n }\n": typeof types.ActiveUserAvatarFragmentDoc,
"\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n }\n }\n }\n": typeof types.ActiveUserMetaDocument,
"\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n speckleConBannerDismissed\n }\n }\n }\n": typeof types.ActiveUserMetaDocument,
"\n mutation UpdateWorkspaceExplainer($value: Boolean!) {\n activeUserMutations {\n meta {\n setNewWorkspaceExplainerDismissed(value: $value)\n }\n }\n }\n": typeof types.UpdateWorkspaceExplainerDocument,
"\n mutation UpdateLegacyProjectsExplainer($value: Boolean!) {\n activeUserMutations {\n meta {\n setLegacyProjectsExplainerCollapsed(value: $value)\n }\n }\n }\n": typeof types.UpdateLegacyProjectsExplainerDocument,
"\n mutation UpdateSpeckleConBannerDismissed($value: Boolean!) {\n activeUserMutations {\n meta {\n setSpeckleConBannerDismissed(value: $value)\n }\n }\n }\n": typeof types.UpdateSpeckleConBannerDismissedDocument,
"\n subscription OnUserProjectsUpdate {\n userProjectsUpdated {\n type\n id\n project {\n ...ProjectDashboardItem\n }\n }\n }\n ": typeof types.OnUserProjectsUpdateDocument,
"\n mutation UpdateUser($input: UserUpdateInput!) {\n activeUserMutations {\n update(user: $input) {\n id\n name\n bio\n company\n avatar\n }\n }\n }\n": typeof types.UpdateUserDocument,
"\n mutation UpdateNotificationPreferences($input: JSONObject!) {\n userNotificationPreferencesUpdate(preferences: $input)\n }\n": typeof types.UpdateNotificationPreferencesDocument,
@@ -738,9 +739,10 @@ const documents: Documents = {
"\n fragment AppAuthorAvatar on AppAuthor {\n id\n name\n avatar\n }\n": types.AppAuthorAvatarFragmentDoc,
"\n fragment LimitedUserAvatar on LimitedUser {\n id\n name\n avatar\n }\n": types.LimitedUserAvatarFragmentDoc,
"\n fragment ActiveUserAvatar on User {\n id\n name\n avatar\n }\n": types.ActiveUserAvatarFragmentDoc,
"\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n }\n }\n }\n": types.ActiveUserMetaDocument,
"\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n speckleConBannerDismissed\n }\n }\n }\n": types.ActiveUserMetaDocument,
"\n mutation UpdateWorkspaceExplainer($value: Boolean!) {\n activeUserMutations {\n meta {\n setNewWorkspaceExplainerDismissed(value: $value)\n }\n }\n }\n": types.UpdateWorkspaceExplainerDocument,
"\n mutation UpdateLegacyProjectsExplainer($value: Boolean!) {\n activeUserMutations {\n meta {\n setLegacyProjectsExplainerCollapsed(value: $value)\n }\n }\n }\n": types.UpdateLegacyProjectsExplainerDocument,
"\n mutation UpdateSpeckleConBannerDismissed($value: Boolean!) {\n activeUserMutations {\n meta {\n setSpeckleConBannerDismissed(value: $value)\n }\n }\n }\n": types.UpdateSpeckleConBannerDismissedDocument,
"\n subscription OnUserProjectsUpdate {\n userProjectsUpdated {\n type\n id\n project {\n ...ProjectDashboardItem\n }\n }\n }\n ": types.OnUserProjectsUpdateDocument,
"\n mutation UpdateUser($input: UserUpdateInput!) {\n activeUserMutations {\n update(user: $input) {\n id\n name\n bio\n company\n avatar\n }\n }\n }\n": types.UpdateUserDocument,
"\n mutation UpdateNotificationPreferences($input: JSONObject!) {\n userNotificationPreferencesUpdate(preferences: $input)\n }\n": types.UpdateNotificationPreferencesDocument,
@@ -2101,7 +2103,7 @@ export function graphql(source: "\n fragment ActiveUserAvatar on User {\n id
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n }\n }\n }\n"): (typeof documents)["\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n }\n }\n }\n"];
export function graphql(source: "\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n speckleConBannerDismissed\n }\n }\n }\n"): (typeof documents)["\n query ActiveUserMeta {\n activeUser {\n meta {\n newWorkspaceExplainerDismissed\n legacyProjectsExplainerCollapsed\n speckleConBannerDismissed\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -2110,6 +2112,10 @@ export function graphql(source: "\n mutation UpdateWorkspaceExplainer($value: B
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n mutation UpdateLegacyProjectsExplainer($value: Boolean!) {\n activeUserMutations {\n meta {\n setLegacyProjectsExplainerCollapsed(value: $value)\n }\n }\n }\n"): (typeof documents)["\n mutation UpdateLegacyProjectsExplainer($value: Boolean!) {\n activeUserMutations {\n meta {\n setLegacyProjectsExplainerCollapsed(value: $value)\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n mutation UpdateSpeckleConBannerDismissed($value: Boolean!) {\n activeUserMutations {\n meta {\n setSpeckleConBannerDismissed(value: $value)\n }\n }\n }\n"): (typeof documents)["\n mutation UpdateSpeckleConBannerDismissed($value: Boolean!) {\n activeUserMutations {\n meta {\n setSpeckleConBannerDismissed(value: $value)\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
File diff suppressed because one or more lines are too long
@@ -7,6 +7,7 @@ export const activeUserMetaQuery = graphql(`
meta {
newWorkspaceExplainerDismissed
legacyProjectsExplainerCollapsed
speckleConBannerDismissed
}
}
}
@@ -32,6 +33,16 @@ export const updateLegacyProjectsExplainerMutation = graphql(`
}
`)
export const updateSpeckleConBannerDismissedMutation = graphql(`
mutation UpdateSpeckleConBannerDismissed($value: Boolean!) {
activeUserMutations {
meta {
setSpeckleConBannerDismissed(value: $value)
}
}
}
`)
export function useActiveUserMeta() {
const { result } = useQuery(activeUserMetaQuery)
const { mutate: updateWorkspaceExplainer } = useMutation(
@@ -40,6 +51,9 @@ export function useActiveUserMeta() {
const { mutate: updateLegacyProjectsExplainer } = useMutation(
updateLegacyProjectsExplainerMutation
)
const { mutate: updateSpeckleConBanner } = useMutation(
updateSpeckleConBannerDismissedMutation
)
const apollo = useApolloClient().client
const cache = apollo.cache
const { activeUser } = useActiveUser()
@@ -55,6 +69,10 @@ export function useActiveUserMeta() {
() => meta.value?.legacyProjectsExplainerCollapsed
)
const hasDismissedSpeckleConBanner = computed(
() => meta.value?.speckleConBannerDismissed ?? false
)
const updateNewWorkspaceExplainerDismissed = async (value: boolean) => {
await updateWorkspaceExplainer({ value })
@@ -83,10 +101,26 @@ export function useActiveUserMeta() {
)
}
const updateSpeckleConBannerDismissed = async (value: boolean) => {
await updateSpeckleConBanner({ value })
modifyObjectField(
cache,
getCacheId('User', activeUserId.value),
'meta',
({ helpers: { createUpdatedValue } }) =>
createUpdatedValue(({ update }) => {
update('speckleConBannerDismissed', () => value)
})
)
}
return {
hasDismissedNewWorkspaceExplainer,
hasCollapsedLegacyProjectsExplainer,
hasDismissedSpeckleConBanner,
updateNewWorkspaceExplainerDismissed,
updateLegacyProjectsExplainerCollapsed,
hasDismissedNewWorkspaceExplainer,
hasCollapsedLegacyProjectsExplainer
updateSpeckleConBannerDismissed
}
}
@@ -1,10 +1,12 @@
type UserMeta {
newWorkspaceExplainerDismissed: Boolean!
speckleConBannerDismissed: Boolean!
legacyProjectsExplainerCollapsed: Boolean!
}
type UserMetaMutations {
setNewWorkspaceExplainerDismissed(value: Boolean!): Boolean!
setSpeckleConBannerDismissed(value: Boolean!): Boolean!
setLegacyProjectsExplainerCollapsed(value: Boolean!): Boolean!
}
+1
View File
@@ -299,6 +299,7 @@ export const UsersMeta = buildMetaTableHelper(
'activeWorkspace',
'isProjectsActive',
'newWorkspaceExplainerDismissed',
'speckleConBannerDismissed',
'legacyProjectsExplainerCollapsed',
// Used in tests
'foo',
@@ -4148,12 +4148,14 @@ export type UserMeta = {
__typename?: 'UserMeta';
legacyProjectsExplainerCollapsed: Scalars['Boolean']['output'];
newWorkspaceExplainerDismissed: Scalars['Boolean']['output'];
speckleConBannerDismissed: Scalars['Boolean']['output'];
};
export type UserMetaMutations = {
__typename?: 'UserMetaMutations';
setLegacyProjectsExplainerCollapsed: Scalars['Boolean']['output'];
setNewWorkspaceExplainerDismissed: Scalars['Boolean']['output'];
setSpeckleConBannerDismissed: Scalars['Boolean']['output'];
};
@@ -4166,6 +4168,11 @@ export type UserMetaMutationsSetNewWorkspaceExplainerDismissedArgs = {
value: Scalars['Boolean']['input'];
};
export type UserMetaMutationsSetSpeckleConBannerDismissedArgs = {
value: Scalars['Boolean']['input'];
};
export type UserProjectCollection = {
__typename?: 'UserProjectCollection';
cursor?: Maybe<Scalars['String']['output']>;
@@ -7293,12 +7300,14 @@ export type UserGendoAiCreditsResolvers<ContextType = GraphQLContext, ParentType
export type UserMetaResolvers<ContextType = GraphQLContext, ParentType extends ResolversParentTypes['UserMeta'] = ResolversParentTypes['UserMeta']> = {
legacyProjectsExplainerCollapsed?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
newWorkspaceExplainerDismissed?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
speckleConBannerDismissed?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};
export type UserMetaMutationsResolvers<ContextType = GraphQLContext, ParentType extends ResolversParentTypes['UserMetaMutations'] = ResolversParentTypes['UserMetaMutations']> = {
setLegacyProjectsExplainerCollapsed?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<UserMetaMutationsSetLegacyProjectsExplainerCollapsedArgs, 'value'>>;
setNewWorkspaceExplainerDismissed?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<UserMetaMutationsSetNewWorkspaceExplainerDismissedArgs, 'value'>>;
setSpeckleConBannerDismissed?: Resolver<ResolversTypes['Boolean'], ParentType, ContextType, RequireFields<UserMetaMutationsSetSpeckleConBannerDismissedArgs, 'value'>>;
__isTypeOf?: IsTypeOfResolverFn<ParentType, ContextType>;
};
@@ -228,6 +228,13 @@ export = {
})
return !!metaVal?.value
},
speckleConBannerDismissed: async (parent, _args, ctx) => {
const metaVal = await ctx.loaders.users.getUserMeta.load({
userId: parent.userId,
key: UsersMeta.metaKey.speckleConBannerDismissed
})
return !!metaVal?.value
},
legacyProjectsExplainerCollapsed: async (parent, _args, ctx) => {
const metaVal = await ctx.loaders.users.getUserMeta.load({
userId: parent.userId,
@@ -411,6 +418,16 @@ export = {
args.value
)
return !!res.value
},
setSpeckleConBannerDismissed: async (_parent, args, ctx) => {
const meta = metaHelpers(Users, db)
const res = await meta.set(
ctx.userId!,
UsersMeta.metaKey.speckleConBannerDismissed,
args.value
)
return !!res.value
}
}
@@ -199,6 +199,7 @@ export const getNewWorkspaceExplainerDismissedQuery = gql`
}
}
`
export const setNewWorkspaceExplainerDismissedMutation = gql`
mutation SetNewWorkspaceExplainerDismissed($input: Boolean!) {
activeUserMutations {
@@ -209,6 +210,26 @@ export const setNewWorkspaceExplainerDismissedMutation = gql`
}
`
export const getSpeckleConBannerDismissedQuery = gql`
query GetSpeckleConBannerDismissed {
activeUser {
meta {
speckleConBannerDismissed
}
}
}
`
export const setSpeckleConBannerDismissedMutation = gql`
mutation SetSpeckleConBannerDismissed($input: Boolean!) {
activeUserMutations {
meta {
setSpeckleConBannerDismissed(value: $input)
}
}
}
`
export const getLegacyProjectsExplainerCollapsedQuery = gql`
query GetLegacyProjectsExplainerCollapsed {
activeUser {
@@ -2,8 +2,10 @@ import { BasicTestUser, createTestUser } from '@/test/authHelper'
import {
GetLegacyProjectsExplainerCollapsedDocument,
GetNewWorkspaceExplainerDismissedDocument,
GetSpeckleConBannerDismissedDocument,
SetLegacyProjectsExplainerCollapsedDocument,
SetNewWorkspaceExplainerDismissedDocument
SetNewWorkspaceExplainerDismissedDocument,
SetSpeckleConBannerDismissedDocument
} from '@/test/graphql/generated/graphql'
import { testApolloServer, TestApolloServer } from '@/test/graphqlHelper'
import { beforeEachContext } from '@/test/hooks'
@@ -41,6 +43,23 @@ describe('UserMeta GraphQL', () => {
expect(getRes2.data?.activeUser?.meta.newWorkspaceExplainerDismissed).to.be.true
})
it('speckleConBannerDismissed get/set works', async () => {
const getRes = await apollo.execute(GetSpeckleConBannerDismissedDocument, {})
expect(getRes).to.not.haveGraphQLErrors()
expect(getRes.data?.activeUser?.meta.speckleConBannerDismissed).to.be.false
const setRes = await apollo.execute(SetSpeckleConBannerDismissedDocument, {
input: true
})
expect(setRes).to.not.haveGraphQLErrors()
expect(setRes.data?.activeUserMutations?.meta.setSpeckleConBannerDismissed).to.be
.true
const getRes2 = await apollo.execute(GetSpeckleConBannerDismissedDocument, {})
expect(getRes2).to.not.haveGraphQLErrors()
expect(getRes2.data?.activeUser?.meta.speckleConBannerDismissed).to.be.true
})
it('setLegacyProjectsExplainerCollapsed get/set works', async () => {
const getRes = await apollo.execute(GetLegacyProjectsExplainerCollapsedDocument, {})
expect(getRes).to.not.haveGraphQLErrors()
@@ -4128,12 +4128,14 @@ export type UserMeta = {
__typename?: 'UserMeta';
legacyProjectsExplainerCollapsed: Scalars['Boolean']['output'];
newWorkspaceExplainerDismissed: Scalars['Boolean']['output'];
speckleConBannerDismissed: Scalars['Boolean']['output'];
};
export type UserMetaMutations = {
__typename?: 'UserMetaMutations';
setLegacyProjectsExplainerCollapsed: Scalars['Boolean']['output'];
setNewWorkspaceExplainerDismissed: Scalars['Boolean']['output'];
setSpeckleConBannerDismissed: Scalars['Boolean']['output'];
};
@@ -4146,6 +4148,11 @@ export type UserMetaMutationsSetNewWorkspaceExplainerDismissedArgs = {
value: Scalars['Boolean']['input'];
};
export type UserMetaMutationsSetSpeckleConBannerDismissedArgs = {
value: Scalars['Boolean']['input'];
};
export type UserProjectCollection = {
__typename?: 'UserProjectCollection';
cursor?: Maybe<Scalars['String']['output']>;
@@ -4129,12 +4129,14 @@ export type UserMeta = {
__typename?: 'UserMeta';
legacyProjectsExplainerCollapsed: Scalars['Boolean']['output'];
newWorkspaceExplainerDismissed: Scalars['Boolean']['output'];
speckleConBannerDismissed: Scalars['Boolean']['output'];
};
export type UserMetaMutations = {
__typename?: 'UserMetaMutations';
setLegacyProjectsExplainerCollapsed: Scalars['Boolean']['output'];
setNewWorkspaceExplainerDismissed: Scalars['Boolean']['output'];
setSpeckleConBannerDismissed: Scalars['Boolean']['output'];
};
@@ -4147,6 +4149,11 @@ export type UserMetaMutationsSetNewWorkspaceExplainerDismissedArgs = {
value: Scalars['Boolean']['input'];
};
export type UserMetaMutationsSetSpeckleConBannerDismissedArgs = {
value: Scalars['Boolean']['input'];
};
export type UserProjectCollection = {
__typename?: 'UserProjectCollection';
cursor?: Maybe<Scalars['String']['output']>;
@@ -5287,6 +5294,18 @@ export type SetNewWorkspaceExplainerDismissedMutationVariables = Exact<{
export type SetNewWorkspaceExplainerDismissedMutation = { __typename?: 'Mutation', activeUserMutations: { __typename?: 'ActiveUserMutations', meta: { __typename?: 'UserMetaMutations', setNewWorkspaceExplainerDismissed: boolean } } };
export type GetSpeckleConBannerDismissedQueryVariables = Exact<{ [key: string]: never; }>;
export type GetSpeckleConBannerDismissedQuery = { __typename?: 'Query', activeUser?: { __typename?: 'User', meta: { __typename?: 'UserMeta', speckleConBannerDismissed: boolean } } | null };
export type SetSpeckleConBannerDismissedMutationVariables = Exact<{
input: Scalars['Boolean']['input'];
}>;
export type SetSpeckleConBannerDismissedMutation = { __typename?: 'Mutation', activeUserMutations: { __typename?: 'ActiveUserMutations', meta: { __typename?: 'UserMetaMutations', setSpeckleConBannerDismissed: boolean } } };
export type GetLegacyProjectsExplainerCollapsedQueryVariables = Exact<{ [key: string]: never; }>;
@@ -6371,6 +6390,8 @@ export const GetProjectWithVersionsDocument = {"kind":"Document","definitions":[
export const GetProjectWithModelVersionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetProjectWithModelVersions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"project"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"id"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"models"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"versions"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"items"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"referencedObject"}}]}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<GetProjectWithModelVersionsQuery, GetProjectWithModelVersionsQueryVariables>;
export const GetNewWorkspaceExplainerDismissedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetNewWorkspaceExplainerDismissed"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"newWorkspaceExplainerDismissed"}}]}}]}}]}}]} as unknown as DocumentNode<GetNewWorkspaceExplainerDismissedQuery, GetNewWorkspaceExplainerDismissedQueryVariables>;
export const SetNewWorkspaceExplainerDismissedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetNewWorkspaceExplainerDismissed"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUserMutations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setNewWorkspaceExplainerDismissed"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"value"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}]}]}}]}}]}}]} as unknown as DocumentNode<SetNewWorkspaceExplainerDismissedMutation, SetNewWorkspaceExplainerDismissedMutationVariables>;
export const GetSpeckleConBannerDismissedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSpeckleConBannerDismissed"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"speckleConBannerDismissed"}}]}}]}}]}}]} as unknown as DocumentNode<GetSpeckleConBannerDismissedQuery, GetSpeckleConBannerDismissedQueryVariables>;
export const SetSpeckleConBannerDismissedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetSpeckleConBannerDismissed"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUserMutations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setSpeckleConBannerDismissed"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"value"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}]}]}}]}}]}}]} as unknown as DocumentNode<SetSpeckleConBannerDismissedMutation, SetSpeckleConBannerDismissedMutationVariables>;
export const GetLegacyProjectsExplainerCollapsedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetLegacyProjectsExplainerCollapsed"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUser"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"legacyProjectsExplainerCollapsed"}}]}}]}}]}}]} as unknown as DocumentNode<GetLegacyProjectsExplainerCollapsedQuery, GetLegacyProjectsExplainerCollapsedQueryVariables>;
export const SetLegacyProjectsExplainerCollapsedDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"SetLegacyProjectsExplainerCollapsed"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Boolean"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"activeUserMutations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"meta"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"setLegacyProjectsExplainerCollapsed"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"value"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}]}]}}]}}]}}]} as unknown as DocumentNode<SetLegacyProjectsExplainerCollapsedMutation, SetLegacyProjectsExplainerCollapsedMutationVariables>;
export const CreateWorkspaceInviteDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"CreateWorkspaceInvite"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"String"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"input"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"WorkspaceInviteCreateInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"workspaceMutations"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"invites"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"create"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"workspaceId"},"value":{"kind":"Variable","name":{"kind":"Name","value":"workspaceId"}}},{"kind":"Argument","name":{"kind":"Name","value":"input"},"value":{"kind":"Variable","name":{"kind":"Name","value":"input"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicWorkspace"}},{"kind":"Field","name":{"kind":"Name","value":"invitedTeam"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"FragmentSpread","name":{"kind":"Name","value":"BasicPendingWorkspaceCollaborator"}}]}}]}}]}}]}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicWorkspace"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"Workspace"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}},{"kind":"Field","name":{"kind":"Name","value":"slug"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"readOnly"}}]}},{"kind":"FragmentDefinition","name":{"kind":"Name","value":"BasicPendingWorkspaceCollaborator"},"typeCondition":{"kind":"NamedType","name":{"kind":"Name","value":"PendingWorkspaceCollaborator"}},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"inviteId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceId"}},{"kind":"Field","name":{"kind":"Name","value":"workspaceName"}},{"kind":"Field","name":{"kind":"Name","value":"title"}},{"kind":"Field","name":{"kind":"Name","value":"role"}},{"kind":"Field","name":{"kind":"Name","value":"invitedBy"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"user"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"name"}}]}},{"kind":"Field","name":{"kind":"Name","value":"token"}}]}}]} as unknown as DocumentNode<CreateWorkspaceInviteMutation, CreateWorkspaceInviteMutationVariables>;