Work to new structures

This commit is contained in:
andrewwallacespeckle
2025-03-18 16:59:44 +00:00
parent 79beb79d2e
commit 8ce86e856a
11 changed files with 527 additions and 59 deletions
@@ -0,0 +1,58 @@
<template>
<!-- TODO: Add seat type filter to the query -->
<FormSelectBase
v-model="selectedValue"
:items="seatTypes"
name="seatType"
:label="label || 'Seat Type'"
class="min-w-[110px]"
:label-id="labelId"
:button-id="buttonId"
mount-menu-on-body
:show-label="showLabel"
:fully-control-value="fullyControlValue"
:disabled="disabled"
:clearable="clearable"
>
<template #nothing-selected>Select seat type</template>
<template #something-selected="{ value }">
<div class="truncate text-foreground capitalize">
{{ value }}
</div>
</template>
<template #option="{ item }">
<div class="flex flex-col space-y-0.5">
<span class="truncate capitalize">{{ item }}</span>
</div>
</template>
</FormSelectBase>
</template>
<script setup lang="ts">
import { useFormSelectChildInternals } from '@speckle/ui-components'
type ValueType = string | string[] | undefined
const emit = defineEmits<{
(e: 'update:modelValue', v: ValueType): void
}>()
const props = defineProps<{
modelValue?: ValueType
fullyControlValue?: boolean
label?: string
disabled?: boolean
showLabel?: boolean
clearable?: boolean
}>()
const labelId = useId()
const buttonId = useId()
const { selectedValue } = useFormSelectChildInternals<string>({
props: toRefs(props),
emit
})
const seatTypes = ['editor', 'viewer']
</script>
@@ -23,6 +23,14 @@
hide-description
:hide-items="[Roles.Workspace.Guest]"
/>
<FormSelectSeatType
v-if="showSeatFilter"
v-model="seatType"
fully-control-value
clearable
class="!min-w-40"
hide-description
/>
</div>
<template v-if="showInviteButton">
<div v-if="!isWorkspaceAdmin" v-tippy="'You must be a workspace admin'">
@@ -60,10 +68,12 @@ const props = defineProps<{
workspace: MaybeNullOrUndefined<SettingsWorkspacesMembersTableHeader_WorkspaceFragment>
showRoleFilter?: boolean
showInviteButton?: boolean
showSeatFilter?: boolean
}>()
const search = defineModel<string>('search')
const role = defineModel<WorkspaceRoles>('role')
const seatType = defineModel<string>('seatType')
const { on, bind } = useDebouncedTextInput({ model: search })
const isInviteDialogOpen = ref(false)
@@ -2,7 +2,7 @@
<div>
<CommonAlert color="neutral" hide-icon class="mb-6 mt-2">
<template #description>
Guests are external collaborators. They cant create or add others to workspace
Guests are external collaborators. They can't create or add others to workspace
projects. Read more about
<!-- TODO: Add link to roles and seats page -->
<NuxtLink to="#" class="underline">Speckle roles and seats.</NuxtLink>
@@ -10,16 +10,18 @@
</CommonAlert>
<SettingsWorkspacesMembersTableHeader
v-model:search="search"
v-model:seat-type="seatTypeFilter"
search-placeholder="Search guests..."
:workspace="workspace"
show-invite-button
show-seat-filter
/>
<LayoutTable
class="mt-6 md:mt-8"
:columns="[
{ id: 'name', header: 'Name', classes: 'col-span-3' },
{ id: 'email', header: 'Email', classes: 'col-span-3' },
{ id: 'role', header: 'Seat', classes: 'col-span-2' },
{ id: 'seat', header: 'Seat', classes: 'col-span-2' },
{ id: 'joined', header: 'Joined', classes: 'col-span-3' },
{
id: 'actions',
@@ -43,17 +45,18 @@
</span>
</div>
</template>
<!-- TODO: Add email -->
<template #email="">
<!-- TODO: Add email -->
<span class="text-body-xs text-foreground">EMAIL</span>
</template>
<template #projects="{ item }">
<span class="text-body-xs text-foreground-2">
<CommonBadge color-classes="bg-foundation-2 text-foreground-2" rounded>
{{ item.projectRoles.length }} project{{
item.projectRoles.length !== 1 ? 's' : ''
}}
</CommonBadge>
<template #seat="{ item }">
<span class="text-foreground">
<div
v-tippy="`Explainer`"
class="border-b border-dashed border-outline-5 max-w-max select-none capitalize"
>
{{ item.seatType }}
</div>
</span>
</template>
<!-- TODO: Add joined at date -->
@@ -110,7 +113,7 @@
<script setup lang="ts">
import type {
SettingsWorkspacesMembersGuestsTable_WorkspaceFragment,
SettingsWorkspacesMembersNewGuestsTable_WorkspaceFragment,
WorkspaceCollaborator
} from '~/lib/common/generated/gql/graphql'
import { graphql } from '~/lib/common/generated/gql'
@@ -123,9 +126,10 @@ import type { LayoutMenuItem } from '~~/lib/layout/helpers/components'
import { EllipsisHorizontalIcon, XMarkIcon } from '@heroicons/vue/24/outline'
graphql(`
fragment SettingsWorkspacesMembersGuestsTable_WorkspaceCollaborator on WorkspaceCollaborator {
fragment SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator on WorkspaceCollaborator {
id
role
seatType
user {
id
avatar
@@ -143,7 +147,7 @@ graphql(`
`)
graphql(`
fragment SettingsWorkspacesMembersGuestsTable_Workspace on Workspace {
fragment SettingsWorkspacesMembersNewGuestsTable_Workspace on Workspace {
id
...SettingsWorkspacesMembersTableHeader_Workspace
...SettingsSharedDeleteUserDialog_Workspace
@@ -151,7 +155,7 @@ graphql(`
team {
items {
id
...SettingsWorkspacesMembersGuestsTable_WorkspaceCollaborator
...SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator
}
}
}
@@ -164,13 +168,14 @@ enum ActionTypes {
}
const props = defineProps<{
workspace: MaybeNullOrUndefined<SettingsWorkspacesMembersGuestsTable_WorkspaceFragment>
workspace: MaybeNullOrUndefined<SettingsWorkspacesMembersNewGuestsTable_WorkspaceFragment>
workspaceSlug: string
}>()
const updateUserRole = useWorkspaceUpdateRole()
const search = ref('')
const seatTypeFilter = ref<string>()
const showActionsMenu = ref<Record<string, boolean>>({})
const showDeleteUserRoleDialog = ref(false)
const showGuestsPermissionsDialog = ref(false)
@@ -191,18 +196,21 @@ const { result: searchResult, loading: searchResultLoading } = useQuery(
slug: props.workspaceSlug
}),
() => ({
enabled: !!search.value.length
enabled: !!search.value.length || !!seatTypeFilter.value
})
)
const guests = computed(() => {
const guestArray = search.value.length
? searchResult.value?.workspaceBySlug?.team.items
: props.workspace?.team.items
const guestArray =
search.value.length || seatTypeFilter.value
? searchResult.value?.workspaceBySlug?.team.items
: props.workspace?.team.items
return (guestArray || []).filter(
(item): item is WorkspaceCollaborator => item.role === Roles.Workspace.Guest
)
return (guestArray || [])
.filter(
(item): item is WorkspaceCollaborator => item.role === Roles.Workspace.Guest
)
.filter((item) => !seatTypeFilter.value || item.seatType === seatTypeFilter.value)
})
const isWorkspaceAdmin = computed(() => props.workspace?.role === Roles.Workspace.Admin)
@@ -0,0 +1,189 @@
<template>
<div>
<SettingsWorkspacesMembersTableHeader
v-model:search="search"
search-placeholder="Search pending invites..."
:workspace="workspace"
show-invite-button
/>
<LayoutTable
class="mt-6 md:mt-8 mb-12"
:columns="[
{ id: 'name', header: 'Name', classes: 'col-span-4' },
{ id: 'invitedBy', header: 'Invited by', classes: 'col-span-3' },
{ id: 'seat', header: 'Seat', classes: 'col-span-2' },
{ id: 'lastRemindedOn', header: 'Last reminded on', classes: 'col-span-2' },
{
id: 'actions',
header: '',
classes: 'col-span-1 flex items-center justify-end'
}
]"
:items="invites"
:loading="searchResultLoading"
:empty-message="
search.length
? 'No invites with the specified filter found'
: 'No pending invites'
"
>
<template #name="{ item }">
<div class="flex items-center gap-2">
<UserAvatar v-if="item.user" hide-tooltip :user="item.user" />
<span class="truncate text-body-xs text-foreground">{{ item.title }}</span>
<CommonBadge
rounded
color-classes="bg-highlight-3 text-foreground-2 capitalize"
>
{{ item.role }}
</CommonBadge>
</div>
</template>
<template #invitedBy="{ item }">
<div class="flex items-center gap-2">
<UserAvatar hide-tooltip :user="item.invitedBy" />
<span class="truncate text-body-xs text-foreground">
{{ item.invitedBy.name }}
</span>
</div>
</template>
<!-- TODO: Add seat type -->
<template #seat="">
<span class="text-foreground">
<div
v-tippy="`Explainer`"
class="border-b border-dashed border-outline-5 max-w-max select-none capitalize"
>
SEAT TYPE
</div>
</span>
</template>
<template #lastRemindedOn="{ item }">
<span class="text-body-xs text-foreground-2">
{{ formattedFullDate(item.updatedAt) }}
</span>
</template>
<template #actions="{ item }">
<LayoutMenu
v-model:open="showActionsMenu[item.id]"
:items="actionsItems"
mount-menu-on-body
:menu-position="HorizontalDirection.Left"
@chosen="({ item: actionItem }) => onActionChosen(actionItem, item)"
>
<FormButton
:color="showActionsMenu[item.id] ? 'outline' : 'subtle'"
hide-text
:icon-right="showActionsMenu[item.id] ? XMarkIcon : EllipsisHorizontalIcon"
@click="toggleMenu(item.id)"
/>
</LayoutMenu>
</template>
</LayoutTable>
</div>
</template>
<script setup lang="ts">
import { XMarkIcon, EllipsisHorizontalIcon } from '@heroicons/vue/24/outline'
import { useQuery } from '@vue/apollo-composable'
import { graphql } from '~/lib/common/generated/gql'
import type { SettingsWorkspacesMembersInvitesTable_WorkspaceFragment } from '~/lib/common/generated/gql/graphql'
import {
useCancelWorkspaceInvite,
useResendWorkspaceInvite
} from '~/lib/settings/composables/workspaces'
import { settingsWorkspacesInvitesSearchQuery } from '~/lib/settings/graphql/queries'
import type { LayoutMenuItem } from '~~/lib/layout/helpers/components'
import { HorizontalDirection } from '~~/lib/common/composables/window'
import type { MaybeNullOrUndefined } from '@speckle/shared'
graphql(`
fragment SettingsWorkspacesMembersNewInvitesTable_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {
id
inviteId
role
title
updatedAt
user {
id
...LimitedUserAvatar
}
invitedBy {
id
...LimitedUserAvatar
}
}
`)
graphql(`
fragment SettingsWorkspacesMembersInvitesTable_Workspace on Workspace {
id
...SettingsWorkspacesMembersTableHeader_Workspace
invitedTeam {
...SettingsWorkspacesMembersInvitesTable_PendingWorkspaceCollaborator
}
}
`)
const props = defineProps<{
workspaceSlug: string
workspace: MaybeNullOrUndefined<SettingsWorkspacesMembersInvitesTable_WorkspaceFragment>
}>()
const search = ref('')
const showActionsMenu = ref<Record<string, boolean>>({})
const cancelInvite = useCancelWorkspaceInvite()
const resendInvite = useResendWorkspaceInvite()
const { result: searchResult, loading: searchResultLoading } = useQuery(
settingsWorkspacesInvitesSearchQuery,
() => ({
invitesFilter: {
search: search.value
},
slug: props.workspaceSlug
}),
() => ({
enabled: !!search.value.length
})
)
const invites = computed(() =>
search.value.length
? searchResult.value?.workspaceBySlug.invitedTeam
: props.workspace?.invitedTeam
)
const actionsItems: LayoutMenuItem[][] = [
[{ title: 'Resend invite', id: 'resend-invite' }],
[{ title: 'Delete invite', id: 'delete-invite' }]
]
const onActionChosen = async (
actionItem: LayoutMenuItem,
item: NonNullable<typeof invites.value>[0]
) => {
if (!props.workspace?.id) return
switch (actionItem.id) {
case 'resend-invite':
await resendInvite({
input: {
workspaceId: props.workspace.id,
inviteId: item.inviteId
}
})
break
case 'delete-invite':
await cancelInvite({
workspaceId: props.workspace.id,
inviteId: item.inviteId
})
break
}
}
const toggleMenu = (itemId: string) => {
showActionsMenu.value[itemId] = !showActionsMenu.value[itemId]
}
</script>
@@ -0,0 +1,143 @@
<template>
<div>
<LayoutTable
class="mt-2 mb-12"
:columns="[
{ id: 'name', header: 'Name', classes: 'col-span-2' },
{ id: 'email', header: 'Email', classes: 'col-span-3' },
{ id: 'createdAt', header: 'Requested at', classes: 'col-span-3' },
{ id: 'status', header: 'Status', classes: 'col-span-2' },
{
id: 'actions',
header: '',
classes: 'col-span-2 flex items-center justify-end'
}
]"
:items="joinRequests"
empty-message="There are no pending join requests"
>
<template #name="{ item }">
<div class="flex items-center gap-2">
<UserAvatar hide-tooltip :user="item.user" />
<span class="truncate text-body-xs text-foreground">
{{ item.user.name }}
</span>
</div>
</template>
<!-- TODO: Add email -->
<template #email="">
<span class="truncate text-body-xs text-foreground">EMAIL</span>
</template>
<template #createdAt="{ item }">
<p class="text-body-xs text-foreground">
{{ formattedFullDate(item.createdAt) }}
</p>
</template>
<template #status="{ item }">
<span class="truncate text-body-xs text-foreground capitalize">
{{ item.status }}
</span>
</template>
<template #actions="{ item }">
<div
v-if="item.status === WorkspaceJoinRequestStatus.Pending"
class="flex items-center gap-x-2"
>
<FormButton color="outline" size="sm" @click="onApprove(item)">
Approve
</FormButton>
<FormButton color="outline" size="sm" @click="onDeny(item)">Deny</FormButton>
</div>
<span v-else />
</template>
</LayoutTable>
<WorkspaceJoinRequestApproveDialog
v-model:open="showApproveJoinRequestDialog"
:join-request="requestToApprove"
/>
</div>
</template>
<script setup lang="ts">
import { orderBy } from 'lodash-es'
import dayjs from 'dayjs'
import type { MaybeNullOrUndefined } from '@speckle/shared'
import {
type SettingsWorkspacesMembersRequestsTable_WorkspaceFragment,
type WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequestFragment,
WorkspaceJoinRequestStatus
} from '~~/lib/common/generated/gql/graphql'
import { graphql } from '~/lib/common/generated/gql'
import { useWorkspaceJoinRequest } from '~/lib/workspaces/composables/joinRequests'
graphql(`
fragment SettingsWorkspacesMembersRequestsTable_Workspace on Workspace {
...SettingsWorkspacesMembersTableHeader_Workspace
id
adminWorkspacesJoinRequests {
totalCount
items {
...WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequest
id
createdAt
status
user {
id
avatar
name
}
}
}
}
`)
const props = defineProps<{
workspace: MaybeNullOrUndefined<SettingsWorkspacesMembersRequestsTable_WorkspaceFragment>
}>()
const { deny } = useWorkspaceJoinRequest()
const showApproveJoinRequestDialog = ref(false)
const requestToApprove =
ref<WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequestFragment>()
const joinRequests = computed(() => {
const thirtyDaysAgo = dayjs().subtract(30, 'days')
const filtered =
props.workspace?.adminWorkspacesJoinRequests?.items.filter((request) => {
if (request.status === WorkspaceJoinRequestStatus.Pending) return true
return dayjs(request.createdAt).isAfter(thirtyDaysAgo)
}) ?? []
return orderBy(
filtered,
[
(request) => (request.status === WorkspaceJoinRequestStatus.Pending ? 1 : 0),
'createdAt'
],
['desc', 'desc']
)
})
const onApprove = (
request: WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequestFragment
) => {
requestToApprove.value = request
showApproveJoinRequestDialog.value = true
}
const onDeny = async (
request: WorkspaceJoinRequestApproveDialog_WorkspaceJoinRequestFragment
) => {
if (!props.workspace?.id) return
await deny(
{
workspaceId: props.workspace?.id,
userId: request.user.id
},
request.id
)
}
</script>
@@ -11,9 +11,11 @@
<SettingsWorkspacesMembersTableHeader
v-model:search="search"
v-model:role="roleFilter"
v-model:seat-type="seatTypeFilter"
search-placeholder="Search members..."
:workspace="workspace"
show-role-filter
show-seat-filter
show-invite-button
/>
<LayoutTable
@@ -21,7 +23,7 @@
:columns="[
{ id: 'name', header: 'Name', classes: 'col-span-3' },
{ id: 'email', header: 'Email', classes: 'col-span-3' },
{ id: 'role', header: 'Seat', classes: 'col-span-2' },
{ id: 'seat', header: 'Seat', classes: 'col-span-2' },
{ id: 'joined', header: 'Joined', classes: 'col-span-3' },
{
id: 'actions',
@@ -39,6 +41,13 @@
<div class="flex items-center gap-2">
<UserAvatar hide-tooltip :user="item" />
<span class="truncate text-body-xs text-foreground">{{ item.name }}</span>
<CommonBadge
v-if="item.role === Roles.Workspace.Admin"
rounded
color-classes="bg-highlight-3 text-foreground-2"
>
Admin
</CommonBadge>
<div
v-if="
item.workspaceDomainPolicyCompliant === false &&
@@ -57,11 +66,14 @@
<!-- TODO: Add email -->
<span class="text-body-xs text-foreground">EMAIL</span>
</template>
<template #role="{ item }">
<span class="text-foreground-2">
<span>
{{ isWorkspaceRole(item.role) ? getRoleLabel(item.role).title : '' }}
</span>
<template #seat="{ item }">
<span class="text-foreground">
<div
v-tippy="`Explainer`"
class="border-b border-dashed border-outline-5 max-w-max select-none capitalize"
>
{{ item.seatType }}
</div>
</span>
</template>
<!-- TODO: Add joined at date -->
@@ -112,7 +124,7 @@
import { Roles, type WorkspaceRoles, type MaybeNullOrUndefined } from '@speckle/shared'
import { settingsWorkspacesMembersSearchQuery } from '~~/lib/settings/graphql/queries'
import { useQuery } from '@vue/apollo-composable'
import type { SettingsWorkspacesMembersTable_WorkspaceFragment } from '~~/lib/common/generated/gql/graphql'
import type { SettingsWorkspacesNewMembersTable_WorkspaceFragment } from '~~/lib/common/generated/gql/graphql'
import { graphql } from '~/lib/common/generated/gql'
import {
EllipsisHorizontalIcon,
@@ -122,7 +134,6 @@ import {
import { useWorkspaceUpdateRole } from '~/lib/workspaces/composables/management'
import type { LayoutMenuItem } from '~~/lib/layout/helpers/components'
import { HorizontalDirection } from '~~/lib/common/composables/window'
import { getRoleLabel } from '~~/lib/settings/helpers/utils'
type UserItem = (typeof members)['value'][0]
@@ -130,6 +141,7 @@ graphql(`
fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {
id
role
seatType
user {
id
avatar
@@ -149,7 +161,7 @@ graphql(`
team {
items {
id
...SettingsWorkspacesMembersTable_WorkspaceCollaborator
...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator
}
}
}
@@ -162,12 +174,13 @@ enum ActionTypes {
}
const props = defineProps<{
workspace: MaybeNullOrUndefined<SettingsWorkspacesMembersTable_WorkspaceFragment>
workspace: MaybeNullOrUndefined<SettingsWorkspacesNewMembersTable_WorkspaceFragment>
workspaceSlug: string
}>()
const search = ref('')
const roleFilter = ref<WorkspaceRoles>()
const seatTypeFilter = ref<string>()
const { result: searchResult, loading: searchResultLoading } = useQuery(
settingsWorkspacesMembersSearchQuery,
@@ -176,12 +189,13 @@ const { result: searchResult, loading: searchResultLoading } = useQuery(
search: search.value,
roles: roleFilter.value
? [roleFilter.value]
: [Roles.Workspace.Admin, Roles.Workspace.Member]
: [Roles.Workspace.Admin, Roles.Workspace.Member],
seatType: seatTypeFilter.value
},
slug: props.workspaceSlug
}),
() => ({
enabled: !!search.value.length || !!roleFilter.value
enabled: !!search.value.length || !!roleFilter.value || !!seatTypeFilter.value
})
)
@@ -198,12 +212,13 @@ const showActionsMenu = ref<Record<string, boolean>>({})
const members = computed(() => {
const memberArray =
search.value.length || roleFilter.value
search.value.length || roleFilter.value || seatTypeFilter.value
? searchResult.value?.workspaceBySlug?.team.items
: props.workspace?.team.items
return (memberArray || [])
.map(({ user, ...rest }) => ({
.map(({ user, seatType, ...rest }) => ({
...user,
seatType,
...rest
}))
.filter((user) => user.role !== Roles.Workspace.Guest)
@@ -218,7 +233,7 @@ const canRemoveMember = computed(
)
const hasNoResults = computed(
() =>
(search.value.length || roleFilter.value) &&
(search.value.length || roleFilter.value || seatTypeFilter.value) &&
searchResult.value?.workspaceBySlug?.team.items.length === 0
)
@@ -130,8 +130,11 @@ type Documents = {
"\n fragment SettingsWorkspacesMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n user {\n id\n avatar\n name\n company\n workspaceDomainPolicyCompliant\n }\n }\n": typeof types.SettingsWorkspacesMembersTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n": typeof types.SettingsWorkspacesMembersTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesMembersTableHeader_Workspace on Workspace {\n id\n role\n ...InviteDialogWorkspace_Workspace\n }\n": typeof types.SettingsWorkspacesMembersTableHeader_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\n }\n }\n": typeof types.SettingsWorkspacesNewMembersTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n": typeof types.SettingsWorkspacesNewMembersTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n company\n }\n projectRoles {\n role\n project {\n id\n name\n }\n }\n }\n": typeof types.SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesMembersNewGuestsTable_Workspace on Workspace {\n id\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator\n }\n }\n }\n": typeof types.SettingsWorkspacesMembersNewGuestsTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesMembersNewInvitesTable_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n inviteId\n role\n title\n updatedAt\n user {\n id\n ...LimitedUserAvatar\n }\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n }\n": typeof types.SettingsWorkspacesMembersNewInvitesTable_PendingWorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\n }\n }\n": typeof types.SettingsWorkspacesNewMembersTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\n }\n }\n": typeof types.SettingsWorkspacesNewMembersTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesRegionsSelect_ServerRegionItem on ServerRegionItem {\n id\n key\n name\n description\n }\n": typeof types.SettingsWorkspacesRegionsSelect_ServerRegionItemFragmentDoc,
"\n fragment SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomain on WorkspaceDomain {\n id\n domain\n }\n": typeof types.SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomainFragmentDoc,
"\n fragment SettingsWorkspacesSecurityDomainRemoveDialog_Workspace on Workspace {\n id\n domains {\n ...SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomain\n }\n }\n": typeof types.SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceFragmentDoc,
@@ -323,10 +326,10 @@ type Documents = {
"\n query SettingsWorkspaceRegions($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n ...SettingsWorkspacesRegions_Workspace\n }\n serverInfo {\n ...SettingsWorkspacesRegions_ServerInfo\n }\n }\n": typeof types.SettingsWorkspaceRegionsDocument,
"\n query SettingsWorkspacesMembers($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembers_Workspace\n }\n }\n": typeof types.SettingsWorkspacesMembersDocument,
"\n query SettingsWorkspacesMembersTable($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersTable_Workspace\n ...SettingsWorkspacesNewMembersTable_Workspace\n }\n }\n": typeof types.SettingsWorkspacesMembersTableDocument,
"\n query SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n }\n }\n": typeof types.SettingsWorkspacesMembersGuestsDocument,
"\n query SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n ...SettingsWorkspacesMembersNewGuestsTable_Workspace\n }\n }\n": typeof types.SettingsWorkspacesMembersGuestsDocument,
"\n query SettingsWorkspacesMembersInvites($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersInvitesTable_Workspace\n }\n }\n": typeof types.SettingsWorkspacesMembersInvitesDocument,
"\n query SettingsWorkspacesMembersRequests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersRequestsTable_Workspace\n }\n }\n": typeof types.SettingsWorkspacesMembersRequestsDocument,
"\n query SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n }\n": typeof types.SettingsWorkspacesMembersSearchDocument,
"\n query SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\n }\n }\n }\n": typeof types.SettingsWorkspacesMembersSearchDocument,
"\n query SettingsWorkspacesInvitesSearch(\n $slug: String!\n $invitesFilter: PendingWorkspaceCollaboratorsFilter\n ) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersInvitesTable_Workspace\n }\n }\n": typeof types.SettingsWorkspacesInvitesSearchDocument,
"\n query SettingsWorkspacesProjects(\n $slug: String!\n $limit: Int!\n $cursor: String\n $filter: WorkspaceProjectsFilter\n ) {\n workspaceBySlug(slug: $slug) {\n id\n slug\n readOnly\n projects(limit: $limit, cursor: $cursor, filter: $filter) {\n cursor\n ...SettingsWorkspacesProjects_ProjectCollection\n }\n }\n }\n": typeof types.SettingsWorkspacesProjectsDocument,
"\n query SettingsWorkspaceSecurity($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesSecurity_Workspace\n }\n activeUser {\n ...SettingsWorkspacesSecurity_User\n }\n }\n": typeof types.SettingsWorkspaceSecurityDocument,
@@ -535,8 +538,11 @@ const documents: Documents = {
"\n fragment SettingsWorkspacesMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n user {\n id\n avatar\n name\n company\n workspaceDomainPolicyCompliant\n }\n }\n": types.SettingsWorkspacesMembersTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n": types.SettingsWorkspacesMembersTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesMembersTableHeader_Workspace on Workspace {\n id\n role\n ...InviteDialogWorkspace_Workspace\n }\n": types.SettingsWorkspacesMembersTableHeader_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\n }\n }\n": types.SettingsWorkspacesNewMembersTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n": types.SettingsWorkspacesNewMembersTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n company\n }\n projectRoles {\n role\n project {\n id\n name\n }\n }\n }\n": types.SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesMembersNewGuestsTable_Workspace on Workspace {\n id\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator\n }\n }\n }\n": types.SettingsWorkspacesMembersNewGuestsTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesMembersNewInvitesTable_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n inviteId\n role\n title\n updatedAt\n user {\n id\n ...LimitedUserAvatar\n }\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n }\n": types.SettingsWorkspacesMembersNewInvitesTable_PendingWorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\n }\n }\n": types.SettingsWorkspacesNewMembersTable_WorkspaceCollaboratorFragmentDoc,
"\n fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\n }\n }\n": types.SettingsWorkspacesNewMembersTable_WorkspaceFragmentDoc,
"\n fragment SettingsWorkspacesRegionsSelect_ServerRegionItem on ServerRegionItem {\n id\n key\n name\n description\n }\n": types.SettingsWorkspacesRegionsSelect_ServerRegionItemFragmentDoc,
"\n fragment SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomain on WorkspaceDomain {\n id\n domain\n }\n": types.SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomainFragmentDoc,
"\n fragment SettingsWorkspacesSecurityDomainRemoveDialog_Workspace on Workspace {\n id\n domains {\n ...SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceDomain\n }\n }\n": types.SettingsWorkspacesSecurityDomainRemoveDialog_WorkspaceFragmentDoc,
@@ -728,10 +734,10 @@ const documents: Documents = {
"\n query SettingsWorkspaceRegions($slug: String!) {\n workspaceBySlug(slug: $slug) {\n id\n ...SettingsWorkspacesRegions_Workspace\n }\n serverInfo {\n ...SettingsWorkspacesRegions_ServerInfo\n }\n }\n": types.SettingsWorkspaceRegionsDocument,
"\n query SettingsWorkspacesMembers($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembers_Workspace\n }\n }\n": types.SettingsWorkspacesMembersDocument,
"\n query SettingsWorkspacesMembersTable($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersTable_Workspace\n ...SettingsWorkspacesNewMembersTable_Workspace\n }\n }\n": types.SettingsWorkspacesMembersTableDocument,
"\n query SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n }\n }\n": types.SettingsWorkspacesMembersGuestsDocument,
"\n query SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n ...SettingsWorkspacesMembersNewGuestsTable_Workspace\n }\n }\n": types.SettingsWorkspacesMembersGuestsDocument,
"\n query SettingsWorkspacesMembersInvites($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersInvitesTable_Workspace\n }\n }\n": types.SettingsWorkspacesMembersInvitesDocument,
"\n query SettingsWorkspacesMembersRequests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersRequestsTable_Workspace\n }\n }\n": types.SettingsWorkspacesMembersRequestsDocument,
"\n query SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n }\n": types.SettingsWorkspacesMembersSearchDocument,
"\n query SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\n }\n }\n }\n": types.SettingsWorkspacesMembersSearchDocument,
"\n query SettingsWorkspacesInvitesSearch(\n $slug: String!\n $invitesFilter: PendingWorkspaceCollaboratorsFilter\n ) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersInvitesTable_Workspace\n }\n }\n": types.SettingsWorkspacesInvitesSearchDocument,
"\n query SettingsWorkspacesProjects(\n $slug: String!\n $limit: Int!\n $cursor: String\n $filter: WorkspaceProjectsFilter\n ) {\n workspaceBySlug(slug: $slug) {\n id\n slug\n readOnly\n projects(limit: $limit, cursor: $cursor, filter: $filter) {\n cursor\n ...SettingsWorkspacesProjects_ProjectCollection\n }\n }\n }\n": types.SettingsWorkspacesProjectsDocument,
"\n query SettingsWorkspaceSecurity($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesSecurity_Workspace\n }\n activeUser {\n ...SettingsWorkspacesSecurity_User\n }\n }\n": types.SettingsWorkspaceSecurityDocument,
@@ -1305,11 +1311,23 @@ export function graphql(source: "\n fragment SettingsWorkspacesMembersTableHead
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
export function graphql(source: "\n fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\n }\n }\n"): (typeof documents)["\n fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\n }\n }\n"];
export function graphql(source: "\n fragment SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n company\n }\n projectRoles {\n role\n project {\n id\n name\n }\n }\n }\n"): (typeof documents)["\n fragment SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n company\n }\n projectRoles {\n role\n project {\n id\n name\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 fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n"): (typeof documents)["\n fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n"];
export function graphql(source: "\n fragment SettingsWorkspacesMembersNewGuestsTable_Workspace on Workspace {\n id\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator\n }\n }\n }\n"): (typeof documents)["\n fragment SettingsWorkspacesMembersNewGuestsTable_Workspace on Workspace {\n id\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesMembersNewGuestsTable_WorkspaceCollaborator\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 fragment SettingsWorkspacesMembersNewInvitesTable_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n inviteId\n role\n title\n updatedAt\n user {\n id\n ...LimitedUserAvatar\n }\n invitedBy {\n id\n ...LimitedUserAvatar\n }\n }\n"): (typeof documents)["\n fragment SettingsWorkspacesMembersNewInvitesTable_PendingWorkspaceCollaborator on PendingWorkspaceCollaborator {\n id\n inviteId\n role\n title\n updatedAt\n user {\n id\n ...LimitedUserAvatar\n }\n invitedBy {\n id\n ...LimitedUserAvatar\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 fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\n }\n }\n"): (typeof documents)["\n fragment SettingsWorkspacesNewMembersTable_WorkspaceCollaborator on WorkspaceCollaborator {\n id\n role\n seatType\n user {\n id\n avatar\n name\n workspaceDomainPolicyCompliant\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 fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\n }\n }\n"): (typeof documents)["\n fragment SettingsWorkspacesNewMembersTable_Workspace on Workspace {\n id\n name\n ...SettingsSharedDeleteUserDialog_Workspace\n ...SettingsWorkspacesMembersTableHeader_Workspace\n ...SettingsWorkspacesMembersChangeRoleDialog_Workspace\n team {\n items {\n id\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -2077,7 +2095,7 @@ export function graphql(source: "\n query SettingsWorkspacesMembersTable($slug:
/**
* 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 SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n }\n }\n"): (typeof documents)["\n query SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n }\n }\n"];
export function graphql(source: "\n query SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n ...SettingsWorkspacesMembersNewGuestsTable_Workspace\n }\n }\n"): (typeof documents)["\n query SettingsWorkspacesMembersGuests($slug: String!) {\n workspaceBySlug(slug: $slug) {\n ...SettingsWorkspacesMembersGuestsTable_Workspace\n ...SettingsWorkspacesMembersNewGuestsTable_Workspace\n }\n }\n"];
/**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/
@@ -2089,7 +2107,7 @@ export function graphql(source: "\n query SettingsWorkspacesMembersRequests($sl
/**
* 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 SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n }\n"): (typeof documents)["\n query SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n }\n }\n }\n }\n"];
export function graphql(source: "\n query SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\n }\n }\n }\n"): (typeof documents)["\n query SettingsWorkspacesMembersSearch($slug: String!, $filter: WorkspaceTeamFilter) {\n workspaceBySlug(slug: $slug) {\n id\n team(filter: $filter) {\n items {\n id\n ...SettingsWorkspacesMembersTable_WorkspaceCollaborator\n ...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator\n }\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
@@ -83,6 +83,7 @@ export const settingsWorkspacesMembersGuestsQuery = graphql(`
query SettingsWorkspacesMembersGuests($slug: String!) {
workspaceBySlug(slug: $slug) {
...SettingsWorkspacesMembersGuestsTable_Workspace
...SettingsWorkspacesMembersNewGuestsTable_Workspace
}
}
`)
@@ -111,6 +112,7 @@ export const settingsWorkspacesMembersSearchQuery = graphql(`
items {
id
...SettingsWorkspacesMembersTable_WorkspaceCollaborator
...SettingsWorkspacesNewMembersTable_WorkspaceCollaborator
}
}
}
@@ -1,5 +1,11 @@
<template>
<SettingsWorkspacesMembersNewInvitesTable
v-if="isWorkspaceNewPlansEnabled"
:workspace="workspace"
:workspace-slug="slug"
/>
<SettingsWorkspacesMembersInvitesTable
v-else
:workspace="workspace"
:workspace-slug="slug"
/>
@@ -9,6 +15,8 @@
import { useQuery } from '@vue/apollo-composable'
import { settingsWorkspacesMembersInvitesQuery } from '~/lib/settings/graphql/queries'
const isWorkspaceNewPlansEnabled = useWorkspaceNewPlansEnabled()
const route = useRoute()
const slug = computed(() => (route.params.slug as string) || '')
@@ -1,5 +1,11 @@
<template>
<SettingsWorkspacesMembersNewJoinRequestsTable
v-if="isWorkspaceNewPlansEnabled"
:workspace="workspace"
:workspace-slug="slug"
/>
<SettingsWorkspacesMembersJoinRequestsTable
v-else
:workspace="workspace"
:workspace-slug="slug"
/>
@@ -9,6 +15,8 @@
import { useQuery } from '@vue/apollo-composable'
import { settingsWorkspacesMembersRequestsQuery } from '~/lib/settings/graphql/queries'
const isWorkspaceNewPlansEnabled = useWorkspaceNewPlansEnabled()
const route = useRoute()
const slug = computed(() => (route.params.slug as string) || '')