Merge pull request #4149 from specklesystems/dim/one-more-time-for-mirna
feat: removes docs link, adds usecases quickstart card
This commit is contained in:
@@ -27,11 +27,23 @@ export type ActiveUserMutations = {
|
||||
emailMutations: UserEmailMutations;
|
||||
/** Mark onboarding as complete */
|
||||
finishOnboarding: Scalars['Boolean']['output'];
|
||||
setActiveWorkspace: Scalars['Boolean']['output'];
|
||||
/** Edit a user's profile */
|
||||
update: User;
|
||||
};
|
||||
|
||||
|
||||
export type ActiveUserMutationsFinishOnboardingArgs = {
|
||||
input?: InputMaybe<OnboardingCompletionInput>;
|
||||
};
|
||||
|
||||
|
||||
export type ActiveUserMutationsSetActiveWorkspaceArgs = {
|
||||
isProjectsActive?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
slug?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
|
||||
export type ActiveUserMutationsUpdateArgs = {
|
||||
user: UserUpdateInput;
|
||||
};
|
||||
@@ -243,6 +255,11 @@ export type AutomateAuthCodePayloadTest = {
|
||||
workspaceId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
/** Additional resources to validate user access to. */
|
||||
export type AutomateAuthCodeResources = {
|
||||
workspaceId?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type AutomateFunction = {
|
||||
__typename?: 'AutomateFunction';
|
||||
/** Only returned if user is a part of this speckle server */
|
||||
@@ -938,6 +955,18 @@ export type DiscoverableStreamsSortingInput = {
|
||||
type: DiscoverableStreamsSortType;
|
||||
};
|
||||
|
||||
export type DiscoverableWorkspaceCollaborator = {
|
||||
__typename?: 'DiscoverableWorkspaceCollaborator';
|
||||
avatar?: Maybe<Scalars['String']['output']>;
|
||||
};
|
||||
|
||||
export type DiscoverableWorkspaceCollaboratorCollection = {
|
||||
__typename?: 'DiscoverableWorkspaceCollaboratorCollection';
|
||||
cursor?: Maybe<Scalars['String']['output']>;
|
||||
items: Array<DiscoverableWorkspaceCollaborator>;
|
||||
totalCount: Scalars['Int']['output'];
|
||||
};
|
||||
|
||||
export type EditCommentInput = {
|
||||
commentId: Scalars['String']['input'];
|
||||
content: CommentContentInput;
|
||||
@@ -1151,6 +1180,31 @@ export type LimitedWorkspace = {
|
||||
name: Scalars['String']['output'];
|
||||
/** Unique workspace short id. Used for navigation. */
|
||||
slug: Scalars['String']['output'];
|
||||
/** Workspace members visible to people with verified email domain */
|
||||
team?: Maybe<DiscoverableWorkspaceCollaboratorCollection>;
|
||||
};
|
||||
|
||||
|
||||
/** Workspace metadata visible to non-workspace members. */
|
||||
export type LimitedWorkspaceTeamArgs = {
|
||||
cursor?: InputMaybe<Scalars['String']['input']>;
|
||||
limit?: Scalars['Int']['input'];
|
||||
};
|
||||
|
||||
export type LimitedWorkspaceJoinRequest = {
|
||||
__typename?: 'LimitedWorkspaceJoinRequest';
|
||||
createdAt: Scalars['DateTime']['output'];
|
||||
id: Scalars['String']['output'];
|
||||
status: WorkspaceJoinRequestStatus;
|
||||
user: LimitedUser;
|
||||
workspace: LimitedWorkspace;
|
||||
};
|
||||
|
||||
export type LimitedWorkspaceJoinRequestCollection = {
|
||||
__typename?: 'LimitedWorkspaceJoinRequestCollection';
|
||||
cursor?: Maybe<Scalars['String']['output']>;
|
||||
items: Array<LimitedWorkspaceJoinRequest>;
|
||||
totalCount: Scalars['Int']['output'];
|
||||
};
|
||||
|
||||
export type MarkCommentViewedInput = {
|
||||
@@ -1811,10 +1865,18 @@ export type ObjectCreateInput = {
|
||||
streamId: Scalars['String']['input'];
|
||||
};
|
||||
|
||||
export type OnboardingCompletionInput = {
|
||||
plans?: InputMaybe<Array<Scalars['String']['input']>>;
|
||||
role?: InputMaybe<Scalars['String']['input']>;
|
||||
source?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export enum PaidWorkspacePlans {
|
||||
Business = 'business',
|
||||
Plus = 'plus',
|
||||
Starter = 'starter'
|
||||
Pro = 'pro',
|
||||
Starter = 'starter',
|
||||
Team = 'team'
|
||||
}
|
||||
|
||||
export type PasswordStrengthCheckFeedback = {
|
||||
@@ -1889,6 +1951,13 @@ export type PendingWorkspaceCollaboratorsFilter = {
|
||||
search?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export type Price = {
|
||||
__typename?: 'Price';
|
||||
amount: Scalars['Float']['output'];
|
||||
currency: Scalars['String']['output'];
|
||||
currencySymbol: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
export type Project = {
|
||||
__typename?: 'Project';
|
||||
allowPublicComments: Scalars['Boolean']['output'];
|
||||
@@ -2621,7 +2690,6 @@ export type Query = {
|
||||
* Either token or workspaceId must be specified, or both
|
||||
*/
|
||||
workspaceInvite?: Maybe<PendingWorkspaceCollaborator>;
|
||||
workspacePricingPlans: Scalars['JSONObject']['output'];
|
||||
/** Find workspaces a given user email can use SSO to sign with */
|
||||
workspaceSsoByEmail: Array<LimitedWorkspace>;
|
||||
};
|
||||
@@ -2662,6 +2730,7 @@ export type QueryAutomateFunctionsArgs = {
|
||||
|
||||
export type QueryAutomateValidateAuthCodeArgs = {
|
||||
payload: AutomateAuthCodePayloadTest;
|
||||
resources?: InputMaybe<AutomateAuthCodeResources>;
|
||||
};
|
||||
|
||||
|
||||
@@ -2866,6 +2935,8 @@ export type ServerAutomateInfo = {
|
||||
export type ServerConfiguration = {
|
||||
__typename?: 'ServerConfiguration';
|
||||
blobSizeLimitBytes: Scalars['Int']['output'];
|
||||
/** Whether the email feature is enabled on this server */
|
||||
isEmailEnabled: Scalars['Boolean']['output'];
|
||||
objectMultipartUploadSizeLimitBytes: Scalars['Int']['output'];
|
||||
objectSizeLimitBytes: Scalars['Int']['output'];
|
||||
};
|
||||
@@ -3016,6 +3087,8 @@ export type ServerStats = {
|
||||
|
||||
export type ServerWorkspacesInfo = {
|
||||
__typename?: 'ServerWorkspacesInfo';
|
||||
/** Up-to-date prices for paid & non-invoiced Workspace plans */
|
||||
planPrices: Array<WorkspacePlanPrice>;
|
||||
/**
|
||||
* This is a backend control variable for the workspaces feature set.
|
||||
* Since workspaces need a backend logic to be enabled, this is not enough as a feature flag.
|
||||
@@ -3624,6 +3697,8 @@ export type UpgradePlanInput = {
|
||||
*/
|
||||
export type User = {
|
||||
__typename?: 'User';
|
||||
/** The last-visited workspace for the given user */
|
||||
activeWorkspace?: Maybe<Workspace>;
|
||||
/**
|
||||
* All the recent activity from this user in chronological order
|
||||
* @deprecated Part of the old API surface and will be removed in the future.
|
||||
@@ -3671,6 +3746,8 @@ export type User = {
|
||||
id: Scalars['ID']['output'];
|
||||
/** Whether post-sign up onboarding has been finished or skipped entirely */
|
||||
isOnboardingFinished?: Maybe<Scalars['Boolean']['output']>;
|
||||
/** Returns `true` if last visited project was "legacy" "personal project" outside of a workspace */
|
||||
isProjectsActive?: Maybe<Scalars['Boolean']['output']>;
|
||||
name: Scalars['String']['output'];
|
||||
notificationPreferences: Scalars['JSONObject']['output'];
|
||||
profiles?: Maybe<Scalars['JSONObject']['output']>;
|
||||
@@ -3707,6 +3784,7 @@ export type User = {
|
||||
versions: CountOnlyCollection;
|
||||
/** Get all invitations to workspaces that the active user has */
|
||||
workspaceInvites: Array<PendingWorkspaceCollaborator>;
|
||||
workspaceJoinRequests?: Maybe<LimitedWorkspaceJoinRequestCollection>;
|
||||
/** Get the workspaces for the user */
|
||||
workspaces: WorkspaceCollection;
|
||||
};
|
||||
@@ -3808,6 +3886,17 @@ export type UserVersionsArgs = {
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Full user type, should only be used in the context of admin operations or
|
||||
* when a user is reading/writing info about himself
|
||||
*/
|
||||
export type UserWorkspaceJoinRequestsArgs = {
|
||||
cursor?: InputMaybe<Scalars['String']['input']>;
|
||||
filter?: InputMaybe<WorkspaceJoinRequestFilter>;
|
||||
limit?: Scalars['Int']['input'];
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Full user type, should only be used in the context of admin operations or
|
||||
* when a user is reading/writing info about himself
|
||||
@@ -4420,6 +4509,10 @@ export type WorkspaceJoinRequestCollection = {
|
||||
totalCount: Scalars['Int']['output'];
|
||||
};
|
||||
|
||||
export type WorkspaceJoinRequestFilter = {
|
||||
status?: InputMaybe<WorkspaceJoinRequestStatus>;
|
||||
};
|
||||
|
||||
export type WorkspaceJoinRequestMutations = {
|
||||
__typename?: 'WorkspaceJoinRequestMutations';
|
||||
approve: Scalars['Boolean']['output'];
|
||||
@@ -4544,6 +4637,13 @@ export type WorkspacePlan = {
|
||||
status: WorkspacePlanStatuses;
|
||||
};
|
||||
|
||||
export type WorkspacePlanPrice = {
|
||||
__typename?: 'WorkspacePlanPrice';
|
||||
id: Scalars['String']['output'];
|
||||
monthly?: Maybe<Price>;
|
||||
yearly?: Maybe<Price>;
|
||||
};
|
||||
|
||||
export enum WorkspacePlanStatuses {
|
||||
CancelationScheduled = 'cancelationScheduled',
|
||||
Canceled = 'canceled',
|
||||
@@ -4560,8 +4660,10 @@ export enum WorkspacePlans {
|
||||
Free = 'free',
|
||||
Plus = 'plus',
|
||||
PlusInvoiced = 'plusInvoiced',
|
||||
Pro = 'pro',
|
||||
Starter = 'starter',
|
||||
StarterInvoiced = 'starterInvoiced',
|
||||
Team = 'team',
|
||||
Unlimited = 'unlimited'
|
||||
}
|
||||
|
||||
@@ -4589,10 +4691,12 @@ export type WorkspaceProjectMutations = {
|
||||
__typename?: 'WorkspaceProjectMutations';
|
||||
create: Project;
|
||||
/**
|
||||
* Update project region and move all regional data to new db.
|
||||
* TODO: Currently performs all operations synchronously in request, should probably be scheduled.
|
||||
* Schedule a job that will:
|
||||
* - Move all regional data to target region
|
||||
* - Update project region key
|
||||
* - TODO: Eventually delete data in previous region
|
||||
*/
|
||||
moveToRegion: Project;
|
||||
moveToRegion: Scalars['String']['output'];
|
||||
moveToWorkspace: Project;
|
||||
updateRole: Project;
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
<div
|
||||
v-if="buttons"
|
||||
class="flex flex-col flex-wrap md:flex-row gap-y-2 md:gap-x-2 gap-y-0 mt-3"
|
||||
class="flex flex-col flex-wrap md:flex-row gap-y-2 md:gap-x-2 md:gap-y-0 mt-3"
|
||||
>
|
||||
<div
|
||||
v-for="(button, index) in buttons"
|
||||
|
||||
@@ -15,21 +15,17 @@
|
||||
<div class="flex flex-col-reverse lg:flex-col gap-y-12">
|
||||
<section>
|
||||
<h2 class="text-heading-sm text-foreground-2">Quickstart</h2>
|
||||
<div class="grid grid-cols-1 md:grid-cols-3 gap-3 pt-5">
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3 pt-5">
|
||||
<CommonCard
|
||||
v-for="quickStartItem in quickStartItems"
|
||||
:key="quickStartItem.title"
|
||||
:title="quickStartItem.title"
|
||||
:description="quickStartItem.description"
|
||||
:buttons="quickStartItem.buttons"
|
||||
:is-external-route="quickStartItem.isExternalRoute"
|
||||
v-for="useCase in useCaseItems"
|
||||
:key="useCase.title"
|
||||
:title="useCase.title"
|
||||
:description="useCase.description"
|
||||
:buttons="useCase.buttons"
|
||||
is-external-route
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
<!-- <section>
|
||||
<h2 class="text-heading-sm text-foreground-2">Connectors</h2>
|
||||
|
||||
</section> -->
|
||||
<section>
|
||||
<div class="flex items-center justify-between">
|
||||
<h2 class="text-heading-sm text-foreground-2">Recently updated projects</h2>
|
||||
@@ -57,6 +53,19 @@
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
<section>
|
||||
<h2 class="text-heading-sm text-foreground-2">Highlighted workflows</h2>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-3 pt-5">
|
||||
<CommonCard
|
||||
v-for="workflowItem in workflowItems"
|
||||
:key="workflowItem.title"
|
||||
:title="workflowItem.title"
|
||||
:description="workflowItem.description"
|
||||
:buttons="workflowItem.buttons"
|
||||
is-external-route
|
||||
/>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
<section>
|
||||
<div class="flex items-center justify-between">
|
||||
@@ -86,24 +95,20 @@ import {
|
||||
} from '~~/lib/dashboard/graphql/queries'
|
||||
import type { QuickStartItem } from '~~/lib/dashboard/helpers/types'
|
||||
import { useQuery } from '@vue/apollo-composable'
|
||||
// import { useMixpanel } from '~~/lib/core/composables/mp'
|
||||
import { useMixpanel } from '~~/lib/core/composables/mp'
|
||||
import {
|
||||
docsPageUrl,
|
||||
forumPageUrl,
|
||||
homeRoute,
|
||||
connectorsRoute,
|
||||
projectsRoute,
|
||||
tutorialsRoute
|
||||
tutorialsRoute,
|
||||
connectorsRoute,
|
||||
forumPageUrl
|
||||
} from '~~/lib/common/helpers/route'
|
||||
// import type { ManagerExtension } from '~~/lib/common/utils/downloadManager'
|
||||
// import { downloadManager } from '~~/lib/common/utils/downloadManager'
|
||||
// import { ToastNotificationType, useGlobalToast } from '~~/lib/common/composables/toast'
|
||||
import type { LayoutDialogButton } from '@speckle/ui-components'
|
||||
import type { PromoBanner } from '~/lib/promo-banners/types'
|
||||
import { tutorialItems } from '~/lib/dashboard/helpers/tutorials'
|
||||
import { useUserProjectsUpdatedTracking } from '~~/lib/user/composables/projectUpdates'
|
||||
|
||||
// const mixpanel = useMixpanel()
|
||||
const mixpanel = useMixpanel()
|
||||
const isWorkspacesEnabled = useIsWorkspacesEnabled()
|
||||
const { result: projectsResult } = useQuery(dashboardProjectsPageQuery)
|
||||
const { result: workspacesResult } = useQuery(
|
||||
@@ -113,14 +118,82 @@ const { result: workspacesResult } = useQuery(
|
||||
enabled: isWorkspacesEnabled.value
|
||||
})
|
||||
)
|
||||
// const { triggerNotification } = useGlobalToast()
|
||||
|
||||
const { isGuest } = useActiveUser()
|
||||
const router = useRouter()
|
||||
useUserProjectsUpdatedTracking()
|
||||
|
||||
const promoBanners = ref<PromoBanner[]>()
|
||||
const openNewProject = ref(false)
|
||||
const quickStartItems = shallowRef<QuickStartItem[]>([
|
||||
|
||||
const workflowItems = shallowRef<QuickStartItem[]>([
|
||||
{
|
||||
title: 'Design Coordination',
|
||||
description:
|
||||
"The smoothest design coordination for AEC! Ditch files. Share only what's needed and catch changes instantly.",
|
||||
buttons: [
|
||||
{
|
||||
text: 'View workflows',
|
||||
props: { to: 'https://www.speckle.systems/use-cases/design-coordination' },
|
||||
onClick: () => {
|
||||
mixpanel.track('Workflow Card Clicked', {
|
||||
title: 'Design Coordination'
|
||||
})
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Business Intelligence',
|
||||
description:
|
||||
'Get from boring BIM data to insightful dashboards! Swap guesswork for informed decisions.',
|
||||
buttons: [
|
||||
{
|
||||
text: 'View workflows',
|
||||
props: { to: 'https://www.speckle.systems/use-cases/business-intelligence' },
|
||||
onClick: () => {
|
||||
mixpanel.track('Workflow Card Clicked', {
|
||||
title: 'Business Intelligence'
|
||||
})
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Online Collaboration',
|
||||
description:
|
||||
'View, share, and brainstorm on 3D models online! Share with anyone—no desktop apps, no licenses, no hassle.',
|
||||
buttons: [
|
||||
{
|
||||
text: 'View workflows',
|
||||
props: { to: 'https://www.speckle.systems/use-cases/online-collaboration' },
|
||||
onClick: () => {
|
||||
mixpanel.track('Workflow Card Clicked', {
|
||||
title: 'Online Collaboration'
|
||||
})
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Automation',
|
||||
description:
|
||||
'Goodbye, repetitive tasks! Kick into high gear with pre-built automations for your workflows.',
|
||||
buttons: [
|
||||
{
|
||||
text: 'View workflows',
|
||||
props: { to: 'https://www.speckle.systems/use-cases/automate' },
|
||||
onClick: () => {
|
||||
mixpanel.track('Workflow Card Clicked', {
|
||||
title: 'Automation'
|
||||
})
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
])
|
||||
|
||||
const useCaseItems = shallowRef<QuickStartItem[]>([
|
||||
{
|
||||
title: 'Install Connectors',
|
||||
description:
|
||||
@@ -133,16 +206,6 @@ const quickStartItems = shallowRef<QuickStartItem[]>([
|
||||
],
|
||||
isExternalRoute: false
|
||||
},
|
||||
{
|
||||
title: "Don't know where to start?",
|
||||
description: "We'll walk you through some of most common usage scenarios.",
|
||||
buttons: [
|
||||
{
|
||||
text: 'Open documentation',
|
||||
props: { to: docsPageUrl }
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
title: 'Have a question you need answered?',
|
||||
description: 'Submit your question on the forum and get help from the community.',
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
export type ManagerExtension = 'exe' | 'dmg'
|
||||
|
||||
/* Util to download the Manager file */
|
||||
export const downloadManager = (extension: ManagerExtension) => {
|
||||
const fileName = `manager.${extension}`
|
||||
const downloadLink = `https://releases.speckle.dev/manager2/installer/${fileName}`
|
||||
|
||||
const a = document.createElement('a')
|
||||
a.style.display = 'none'
|
||||
a.href = downloadLink
|
||||
a.download = fileName
|
||||
document.body.appendChild(a)
|
||||
a.click()
|
||||
document.body.removeChild(a)
|
||||
}
|
||||
Reference in New Issue
Block a user