From 53fdb1e8a515f27cbf31541f0d7292a3a7498db7 Mon Sep 17 00:00:00 2001 From: forehalo Date: Wed, 12 Feb 2025 08:13:07 +0000 Subject: [PATCH] refactor(server): workspace doc query (#10042) --- .../src/core/workspaces/resolvers/doc.ts | 46 ++++------ packages/backend/server/src/schema.gql | 7 +- .../permissions/services/doc-granted-users.ts | 11 +++ .../permissions/stores/doc-granted-users.ts | 16 ++++ .../modules/share-doc/entities/share-info.ts | 12 +-- .../src/modules/share-doc/stores/share.ts | 6 +- .../general-access/members-permission.tsx | 50 +++++++---- .../invite-member-editor.css.ts | 5 +- .../invite-member-editor.tsx | 30 ++++--- .../member-management/member-item.tsx | 54 +++++++----- .../view/share-menu/scroller.css.ts | 2 +- .../src/graphql/get-doc-default-role.gql | 7 ++ .../src/graphql/get-workspace-page-by-id.gql | 10 +++ .../get-workspace-public-page-by-id.gql | 8 -- .../frontend/graphql/src/graphql/index.ts | 60 +++++++++---- .../src/graphql/update-doc-default-role.gql | 3 + packages/frontend/graphql/src/schema.ts | 87 ++++++++++++------- 17 files changed, 262 insertions(+), 152 deletions(-) create mode 100644 packages/frontend/graphql/src/graphql/get-doc-default-role.gql create mode 100644 packages/frontend/graphql/src/graphql/get-workspace-page-by-id.gql delete mode 100644 packages/frontend/graphql/src/graphql/get-workspace-public-page-by-id.gql create mode 100644 packages/frontend/graphql/src/graphql/update-doc-default-role.gql diff --git a/packages/backend/server/src/core/workspaces/resolvers/doc.ts b/packages/backend/server/src/core/workspaces/resolvers/doc.ts index ccef5cad21..3e794027ec 100644 --- a/packages/backend/server/src/core/workspaces/resolvers/doc.ts +++ b/packages/backend/server/src/core/workspaces/resolvers/doc.ts @@ -61,6 +61,9 @@ class DocType implements Partial { @Field() public!: boolean; + + @Field(() => DocRole) + defaultRole!: DocRole; } @InputType() @@ -180,31 +183,13 @@ export class WorkspaceDocResolver { description: 'Get public page of a workspace by page id.', complexity: 2, nullable: true, - deprecationReason: 'use [WorkspaceType.publicDoc] instead', + deprecationReason: 'use [WorkspaceType.doc] instead', }) async publicPage( @Parent() workspace: WorkspaceType, @Args('pageId') pageId: string ) { - return this.publicDoc(workspace, pageId); - } - - @ResolveField(() => DocType, { - description: 'Get public page of a workspace by page id.', - complexity: 2, - nullable: true, - }) - async publicDoc( - @Parent() workspace: WorkspaceType, - @Args('docId') docId: string - ) { - return this.prisma.workspaceDoc.findFirst({ - where: { - workspaceId: workspace.id, - docId, - public: true, - }, - }); + return this.doc(workspace, pageId); } @ResolveField(() => DocType, { @@ -215,21 +200,26 @@ export class WorkspaceDocResolver { @Parent() workspace: WorkspaceType, @Args('docId') docId: string ): Promise { - const doc = await this.prisma.workspaceDoc.findFirst({ + const doc = await this.prisma.workspaceDoc.findUnique({ where: { - workspaceId: workspace.id, - docId, + workspaceId_docId: { + workspaceId: workspace.id, + docId, + }, }, }); - return ( - doc ?? { + if (!doc) { + return { docId, workspaceId: workspace.id, - public: false, mode: PublicDocMode.Page, - } - ); + public: false, + defaultRole: DocRole.Manager, + }; + } + + return doc; } @Mutation(() => DocType, { diff --git a/packages/backend/server/src/schema.gql b/packages/backend/server/src/schema.gql index 9456710ab1..a188d2c96f 100644 --- a/packages/backend/server/src/schema.gql +++ b/packages/backend/server/src/schema.gql @@ -297,6 +297,8 @@ enum DocRole { } type DocType { + defaultRole: DocRole! + """paginated doc granted users list""" grantedUsersList(pagination: PaginationInput!): PaginatedGrantedDocUserType! id: String! @@ -1320,14 +1322,11 @@ type WorkspaceType { """is Public workspace""" public: Boolean! - """Get public page of a workspace by page id.""" - publicDoc(docId: String!): DocType - """Get public docs of a workspace""" publicDocs: [DocType!]! """Get public page of a workspace by page id.""" - publicPage(pageId: String!): DocType @deprecated(reason: "use [WorkspaceType.publicDoc] instead") + publicPage(pageId: String!): DocType @deprecated(reason: "use [WorkspaceType.doc] instead") publicPages: [DocType!]! @deprecated(reason: "use [WorkspaceType.publicDocs] instead") """quota of workspace""" diff --git a/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts b/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts index 04bce19aad..e7eb5327d8 100644 --- a/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts +++ b/packages/frontend/core/src/modules/permissions/services/doc-granted-users.ts @@ -117,6 +117,9 @@ export class DocGrantedUsersService extends Service { this.grantedUsers$.next( this.grantedUsers$.value.filter(user => user.user.id !== userId) ); + if (this.grantedUserCount$.value > 0) { + this.grantedUserCount$.next(this.grantedUserCount$.value - 1); + } } async updateUserRole(userId: string, role: DocRole) { @@ -136,6 +139,14 @@ export class DocGrantedUsersService extends Service { ); } + async updateDocDefaultRole(role: DocRole) { + return await this.store.updateDocDefaultRole({ + docId: this.docService.doc.id, + workspaceId: this.workspaceService.workspace.id, + role, + }); + } + override dispose(): void { this.loadMore.unsubscribe(); } diff --git a/packages/frontend/core/src/modules/permissions/stores/doc-granted-users.ts b/packages/frontend/core/src/modules/permissions/stores/doc-granted-users.ts index e1cfb33908..e4baed92e5 100644 --- a/packages/frontend/core/src/modules/permissions/stores/doc-granted-users.ts +++ b/packages/frontend/core/src/modules/permissions/stores/doc-granted-users.ts @@ -6,6 +6,8 @@ import { grantDocUserRolesMutation, type PaginationInput, revokeDocUserRolesMutation, + type UpdateDocDefaultRoleInput, + updateDocDefaultRoleMutation, updateDocUserRoleMutation, } from '@affine/graphql'; import { Store } from '@toeverything/infra'; @@ -92,4 +94,18 @@ export class DocGrantedUsersStore extends Store { return res.updateDocUserRole; } + + async updateDocDefaultRole(input: UpdateDocDefaultRoleInput) { + if (!this.workspaceServerService.server) { + throw new Error('No Server'); + } + const res = await this.workspaceServerService.server.gql({ + query: updateDocDefaultRoleMutation, + variables: { + input, + }, + }); + + return res.updateDocDefaultRole; + } } diff --git a/packages/frontend/core/src/modules/share-doc/entities/share-info.ts b/packages/frontend/core/src/modules/share-doc/entities/share-info.ts index af80bb8284..b86237f704 100644 --- a/packages/frontend/core/src/modules/share-doc/entities/share-info.ts +++ b/packages/frontend/core/src/modules/share-doc/entities/share-info.ts @@ -1,7 +1,4 @@ -import type { - GetWorkspacePublicPageByIdQuery, - PublicDocMode, -} from '@affine/graphql'; +import type { GetWorkspacePageByIdQuery, PublicDocMode } from '@affine/graphql'; import { backoffRetry, catchErrorInto, @@ -20,14 +17,11 @@ import type { DocService } from '../../doc'; import type { WorkspaceService } from '../../workspace'; import type { ShareStore } from '../stores/share'; -type ShareInfoType = GetWorkspacePublicPageByIdQuery['workspace']['publicDoc']; +type ShareInfoType = GetWorkspacePageByIdQuery['workspace']['doc']; export class ShareInfo extends Entity { info$ = new LiveData(null); - isShared$ = this.info$.map(info => - // null means not loaded yet, undefined means not shared - info !== null ? info !== undefined : null - ); + isShared$ = this.info$.map(info => info?.public); sharedMode$ = this.info$.map(info => (info !== null ? info?.mode : null)); error$ = new LiveData(null); diff --git a/packages/frontend/core/src/modules/share-doc/stores/share.ts b/packages/frontend/core/src/modules/share-doc/stores/share.ts index d15a45935d..68cb66ba35 100644 --- a/packages/frontend/core/src/modules/share-doc/stores/share.ts +++ b/packages/frontend/core/src/modules/share-doc/stores/share.ts @@ -1,6 +1,6 @@ import type { PublicDocMode } from '@affine/graphql'; import { - getWorkspacePublicPageByIdQuery, + getWorkspacePageByIdQuery, publishPageMutation, revokePublicPageMutation, } from '@affine/graphql'; @@ -22,7 +22,7 @@ export class ShareStore extends Store { throw new Error('No Server'); } const data = await this.workspaceServerService.server.gql({ - query: getWorkspacePublicPageByIdQuery, + query: getWorkspacePageByIdQuery, variables: { pageId: docId, workspaceId, @@ -31,7 +31,7 @@ export class ShareStore extends Store { signal, }, }); - return data.workspace.publicDoc ?? undefined; + return data.workspace.doc ?? undefined; } async enableSharePage( diff --git a/packages/frontend/core/src/modules/share-menu/view/share-menu/general-access/members-permission.tsx b/packages/frontend/core/src/modules/share-menu/view/share-menu/general-access/members-permission.tsx index 8c07d28d07..ddc48b4502 100644 --- a/packages/frontend/core/src/modules/share-menu/view/share-menu/general-access/members-permission.tsx +++ b/packages/frontend/core/src/modules/share-menu/view/share-menu/general-access/members-permission.tsx @@ -1,12 +1,16 @@ import { Menu, MenuItem, MenuTrigger } from '@affine/component'; +import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks'; +import { DocGrantedUsersService } from '@affine/core/modules/permissions'; +import { ShareInfoService } from '@affine/core/modules/share-doc'; import { DocRole } from '@affine/graphql'; import { useI18n } from '@affine/i18n'; -import { useCallback, useMemo, useState } from 'react'; +import { useLiveData, useService } from '@toeverything/infra'; +import { useCallback, useMemo } from 'react'; import { PlanTag } from '../plan-tag'; import * as styles from './styles.css'; -const getRoleName = (role: DocRole, t: ReturnType) => { +const getRoleName = (t: ReturnType, role?: DocRole) => { switch (role) { case DocRole.Manager: return t['com.affine.share-menu.option.permission.can-manage'](); @@ -18,7 +22,7 @@ const getRoleName = (role: DocRole, t: ReturnType) => { return ''; } }; -// TODO(@JimmFly): impl the real permission + export const MembersPermission = ({ openPaywallModal, hittingPaywall, @@ -29,32 +33,44 @@ export const MembersPermission = ({ disabled?: boolean; }) => { const t = useI18n(); - const [docRole, setDocRole] = useState(DocRole.Manager); - const currentRoleName = useMemo(() => getRoleName(docRole, t), [docRole, t]); + const shareInfoService = useService(ShareInfoService); + const docGrantedUsersService = useService(DocGrantedUsersService); + const docDefaultRole = useLiveData( + shareInfoService.shareInfo.info$ + )?.defaultRole; + const currentRoleName = useMemo( + () => getRoleName(t, docDefaultRole), + [docDefaultRole, t] + ); - const changePermission = useCallback((newPermission: DocRole) => { - setDocRole(newPermission); - }, []); + const changePermission = useCallback( + async (docRole: DocRole) => { + await docGrantedUsersService.updateDocDefaultRole(docRole); + shareInfoService.shareInfo.revalidate(); + }, + [docGrantedUsersService, shareInfoService.shareInfo] + ); - const selectManage = useCallback(() => { - changePermission(DocRole.Manager); + const selectManage = useAsyncCallback(async () => { + await changePermission(DocRole.Manager); }, [changePermission]); - const selectEdit = useCallback(() => { + const selectEdit = useAsyncCallback(async () => { if (hittingPaywall) { openPaywallModal?.(); return; } - changePermission(DocRole.Editor); + await changePermission(DocRole.Editor); }, [changePermission, hittingPaywall, openPaywallModal]); - const selectRead = useCallback(() => { + const selectRead = useAsyncCallback(async () => { if (hittingPaywall) { openPaywallModal?.(); return; } - changePermission(DocRole.Reader); + await changePermission(DocRole.Reader); }, [changePermission, hittingPaywall, openPaywallModal]); + return (
@@ -69,7 +85,7 @@ export const MembersPermission = ({ <>
{t['com.affine.share-menu.option.permission.can-manage']()} @@ -77,7 +93,7 @@ export const MembersPermission = ({
@@ -88,7 +104,7 @@ export const MembersPermission = ({
diff --git a/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.css.ts b/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.css.ts index b89607fe53..c639b594cc 100644 --- a/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.css.ts +++ b/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.css.ts @@ -124,7 +124,10 @@ export const sentEmail = style({ gap: '8px', alignItems: 'center', fontSize: cssVar('fontSm'), - cursor: 'pointer', + + // TODO(@JimmFly): remove this when we have a sent email feature + cursor: 'not-allowed', + color: cssVarV2('text/disable'), }); export const checkbox = style({ diff --git a/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.tsx b/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.tsx index 4a82e83d25..a332dc5659 100644 --- a/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.tsx +++ b/packages/frontend/core/src/modules/share-menu/view/share-menu/invite-member-editor/invite-member-editor.tsx @@ -24,6 +24,7 @@ import { useI18n } from '@affine/i18n'; import { ArrowLeftBigIcon } from '@blocksuite/icons/rc'; import { useLiveData, useService } from '@toeverything/infra'; import clsx from 'clsx'; +import { debounce } from 'lodash-es'; import { type CompositionEventHandler, useCallback, @@ -70,7 +71,6 @@ export const InviteMemberEditor = ({ ); const memberSearchService = useService(MemberSearchService); - const searchText = useLiveData(memberSearchService.searchText$); useEffect(() => { // reset the search text when the component is mounted @@ -78,20 +78,25 @@ export const InviteMemberEditor = ({ memberSearchService.loadMore(); }, [memberSearchService]); + const debouncedSearch = useMemo( + () => debounce((value: string) => memberSearchService.search(value), 300), + [memberSearchService] + ); + const inputRef = useRef(null); const [focused, setFocused] = useState(false); const [composing, setComposing] = useState(false); + const [searchText, setSearchText] = useState(''); const handleValueChange = useCallback( (value: string) => { + setSearchText(value); if (!composing) { - memberSearchService.search(value); + debouncedSearch(value); } }, - [composing, memberSearchService] + [composing, debouncedSearch] ); - - const [shouldSendEmail, setShouldSendEmail] = useState(false); const workspaceDialogService = useService(WorkspaceDialogService); const onInvite = useAsyncCallback(async () => { @@ -122,15 +127,11 @@ export const InviteMemberEditor = ({ useCallback( e => { setComposing(false); - memberSearchService.search(e.currentTarget.value); + debouncedSearch(e.currentTarget.value); }, - [memberSearchService] + [debouncedSearch] ); - const onCheckboxChange = useCallback(() => { - setShouldSendEmail(prev => !prev); - }, []); - const focusInput = useCallback(() => { inputRef.current?.focus(); }, []); @@ -220,13 +221,14 @@ export const InviteMemberEditor = ({ /> )}
-
+
{t['com.affine.share-menu.invite-editor.sent-email']()} + {` (coming soon)`}
diff --git a/packages/frontend/core/src/modules/share-menu/view/share-menu/member-management/member-item.tsx b/packages/frontend/core/src/modules/share-menu/view/share-menu/member-management/member-item.tsx index 7940124466..b604f9e481 100644 --- a/packages/frontend/core/src/modules/share-menu/view/share-menu/member-management/member-item.tsx +++ b/packages/frontend/core/src/modules/share-menu/view/share-menu/member-management/member-item.tsx @@ -8,6 +8,7 @@ import { Tooltip, } from '@affine/component'; import { useAsyncCallback } from '@affine/core/components/hooks/affine-async-hooks'; +import { AuthService } from '@affine/core/modules/cloud'; import { DocService } from '@affine/core/modules/doc'; import { DocGrantedUsersService, @@ -17,6 +18,7 @@ import { import { DocRole, UserFriendlyError } from '@affine/graphql'; import { useI18n } from '@affine/i18n'; import { useLiveData, useService } from '@toeverything/infra'; +import clsx from 'clsx'; import { useMemo } from 'react'; import { PlanTag } from '../plan-tag'; @@ -32,6 +34,10 @@ export const MemberItem = ({ openPaywallModal: () => void; }) => { const user = grantedUser.user; + const session = useService(AuthService).session; + const account = useLiveData(session.account$); + const disableManage = + account?.id === user.id || grantedUser.role === DocRole.Owner; const role = useMemo(() => { switch (grantedUser.role) { @@ -78,30 +84,33 @@ export const MemberItem = ({
- - - } - contentOptions={{ - align: 'start', - }} - > - {role}
+ ) : ( + + } + contentOptions={{ + align: 'start', }} > - {role} - - + + {role} + + + )}
); }; @@ -184,6 +193,7 @@ const Options = ({ const removeMember = useAsyncCallback(async () => { try { await docGrantedUsersService.revokeUsersRole(userId); + docGrantedUsersService.loadMore(); } catch (error) { const err = UserFriendlyError.fromAnyError(error); notify.error({ diff --git a/packages/frontend/core/src/modules/share-menu/view/share-menu/scroller.css.ts b/packages/frontend/core/src/modules/share-menu/view/share-menu/scroller.css.ts index e2d7357879..ed8260469e 100644 --- a/packages/frontend/core/src/modules/share-menu/view/share-menu/scroller.css.ts +++ b/packages/frontend/core/src/modules/share-menu/view/share-menu/scroller.css.ts @@ -1,5 +1,5 @@ import { style } from '@vanilla-extract/css'; export const result = style({ - minHeight: '164px', + minHeight: '200px', maxHeight: '342px', }); diff --git a/packages/frontend/graphql/src/graphql/get-doc-default-role.gql b/packages/frontend/graphql/src/graphql/get-doc-default-role.gql new file mode 100644 index 0000000000..0a0d947192 --- /dev/null +++ b/packages/frontend/graphql/src/graphql/get-doc-default-role.gql @@ -0,0 +1,7 @@ +query getDocDefaultRole($workspaceId: String!, $docId: String!) { + workspace(id: $workspaceId) { + doc(docId: $docId) { + defaultRole + } + } +} \ No newline at end of file diff --git a/packages/frontend/graphql/src/graphql/get-workspace-page-by-id.gql b/packages/frontend/graphql/src/graphql/get-workspace-page-by-id.gql new file mode 100644 index 0000000000..d42a425d36 --- /dev/null +++ b/packages/frontend/graphql/src/graphql/get-workspace-page-by-id.gql @@ -0,0 +1,10 @@ +query getWorkspacePageById($workspaceId: String!, $pageId: String!) { + workspace(id: $workspaceId) { + doc(docId: $pageId) { + id + mode + defaultRole + public + } + } +} diff --git a/packages/frontend/graphql/src/graphql/get-workspace-public-page-by-id.gql b/packages/frontend/graphql/src/graphql/get-workspace-public-page-by-id.gql deleted file mode 100644 index b3c335f430..0000000000 --- a/packages/frontend/graphql/src/graphql/get-workspace-public-page-by-id.gql +++ /dev/null @@ -1,8 +0,0 @@ -query getWorkspacePublicPageById($workspaceId: String!, $pageId: String!) { - workspace(id: $workspaceId) { - publicDoc(docId: $pageId) { - id - mode - } - } -} diff --git a/packages/frontend/graphql/src/graphql/index.ts b/packages/frontend/graphql/src/graphql/index.ts index 84723aac7c..557f66a1f9 100644 --- a/packages/frontend/graphql/src/graphql/index.ts +++ b/packages/frontend/graphql/src/graphql/index.ts @@ -594,6 +594,21 @@ query getCurrentUser { }`, }; +export const getDocDefaultRoleQuery = { + id: 'getDocDefaultRoleQuery' as const, + operationName: 'getDocDefaultRole', + definitionName: 'workspace', + containsFile: false, + query: ` +query getDocDefaultRole($workspaceId: String!, $docId: String!) { + workspace(id: $workspaceId) { + doc(docId: $docId) { + defaultRole + } + } +}`, +}; + export const getInviteInfoQuery = { id: 'getInviteInfoQuery' as const, operationName: 'getInviteInfo', @@ -863,6 +878,24 @@ query getWorkspaceInfo($workspaceId: String!) { }`, }; +export const getWorkspacePageByIdQuery = { + id: 'getWorkspacePageByIdQuery' as const, + operationName: 'getWorkspacePageById', + definitionName: 'workspace', + containsFile: false, + query: ` +query getWorkspacePageById($workspaceId: String!, $pageId: String!) { + workspace(id: $workspaceId) { + doc(docId: $pageId) { + id + mode + defaultRole + public + } + } +}`, +}; + export const getWorkspacePageMetaByIdQuery = { id: 'getWorkspacePageMetaByIdQuery' as const, operationName: 'getWorkspacePageMetaById', @@ -900,22 +933,6 @@ query getWorkspacePublicById($id: String!) { }`, }; -export const getWorkspacePublicPageByIdQuery = { - id: 'getWorkspacePublicPageByIdQuery' as const, - operationName: 'getWorkspacePublicPageById', - definitionName: 'workspace', - containsFile: false, - query: ` -query getWorkspacePublicPageById($workspaceId: String!, $pageId: String!) { - workspace(id: $workspaceId) { - publicDoc(docId: $pageId) { - id - mode - } - } -}`, -}; - export const getWorkspacePublicPagesQuery = { id: 'getWorkspacePublicPagesQuery' as const, operationName: 'getWorkspacePublicPages', @@ -1363,6 +1380,17 @@ mutation updateAccount($id: String!, $input: ManageUserInput!) { }`, }; +export const updateDocDefaultRoleMutation = { + id: 'updateDocDefaultRoleMutation' as const, + operationName: 'updateDocDefaultRole', + definitionName: 'updateDocDefaultRole', + containsFile: false, + query: ` +mutation updateDocDefaultRole($input: UpdateDocDefaultRoleInput!) { + updateDocDefaultRole(input: $input) +}`, +}; + export const updateDocUserRoleMutation = { id: 'updateDocUserRoleMutation' as const, operationName: 'updateDocUserRole', diff --git a/packages/frontend/graphql/src/graphql/update-doc-default-role.gql b/packages/frontend/graphql/src/graphql/update-doc-default-role.gql new file mode 100644 index 0000000000..db639ff714 --- /dev/null +++ b/packages/frontend/graphql/src/graphql/update-doc-default-role.gql @@ -0,0 +1,3 @@ +mutation updateDocDefaultRole($input: UpdateDocDefaultRoleInput!) { + updateDocDefaultRole(input: $input) +} \ No newline at end of file diff --git a/packages/frontend/graphql/src/schema.ts b/packages/frontend/graphql/src/schema.ts index 27b5229418..fac0ee8fdd 100644 --- a/packages/frontend/graphql/src/schema.ts +++ b/packages/frontend/graphql/src/schema.ts @@ -359,6 +359,7 @@ export enum DocRole { export interface DocType { __typename?: 'DocType'; + defaultRole: DocRole; /** paginated doc granted users list */ grantedUsersList: PaginatedGrantedDocUserType; id: Scalars['String']['output']; @@ -1747,13 +1748,11 @@ export interface WorkspaceType { pageMeta: WorkspacePageMeta; /** is Public workspace */ public: Scalars['Boolean']['output']; - /** Get public page of a workspace by page id. */ - publicDoc: Maybe; /** Get public docs of a workspace */ publicDocs: Array; /** * Get public page of a workspace by page id. - * @deprecated use [WorkspaceType.publicDoc] instead + * @deprecated use [WorkspaceType.doc] instead */ publicPage: Maybe; /** @deprecated use [WorkspaceType.publicDocs] instead */ @@ -1793,10 +1792,6 @@ export interface WorkspaceTypePageMetaArgs { pageId: Scalars['String']['input']; } -export interface WorkspaceTypePublicDocArgs { - docId: Scalars['String']['input']; -} - export interface WorkspaceTypePublicPageArgs { pageId: Scalars['String']['input']; } @@ -2354,6 +2349,19 @@ export type GetCurrentUserQuery = { } | null; }; +export type GetDocDefaultRoleQueryVariables = Exact<{ + workspaceId: Scalars['String']['input']; + docId: Scalars['String']['input']; +}>; + +export type GetDocDefaultRoleQuery = { + __typename?: 'Query'; + workspace: { + __typename?: 'WorkspaceType'; + doc: { __typename?: 'DocType'; defaultRole: DocRole }; + }; +}; + export type GetInviteInfoQueryVariables = Exact<{ inviteId: Scalars['String']['input']; }>; @@ -2601,6 +2609,25 @@ export type GetWorkspaceInfoQuery = { workspace: { __typename?: 'WorkspaceType'; team: boolean }; }; +export type GetWorkspacePageByIdQueryVariables = Exact<{ + workspaceId: Scalars['String']['input']; + pageId: Scalars['String']['input']; +}>; + +export type GetWorkspacePageByIdQuery = { + __typename?: 'Query'; + workspace: { + __typename?: 'WorkspaceType'; + doc: { + __typename?: 'DocType'; + id: string; + mode: PublicDocMode; + defaultRole: DocRole; + public: boolean; + }; + }; +}; + export type GetWorkspacePageMetaByIdQueryVariables = Exact<{ id: Scalars['String']['input']; pageId: Scalars['String']['input']; @@ -2637,23 +2664,6 @@ export type GetWorkspacePublicByIdQuery = { workspace: { __typename?: 'WorkspaceType'; public: boolean }; }; -export type GetWorkspacePublicPageByIdQueryVariables = Exact<{ - workspaceId: Scalars['String']['input']; - pageId: Scalars['String']['input']; -}>; - -export type GetWorkspacePublicPageByIdQuery = { - __typename?: 'Query'; - workspace: { - __typename?: 'WorkspaceType'; - publicDoc: { - __typename?: 'DocType'; - id: string; - mode: PublicDocMode; - } | null; - }; -}; - export type GetWorkspacePublicPagesQueryVariables = Exact<{ workspaceId: Scalars['String']['input']; }>; @@ -3056,6 +3066,15 @@ export type UpdateAccountMutation = { }; }; +export type UpdateDocDefaultRoleMutationVariables = Exact<{ + input: UpdateDocDefaultRoleInput; +}>; + +export type UpdateDocDefaultRoleMutation = { + __typename?: 'Mutation'; + updateDocDefaultRole: boolean; +}; + export type UpdateDocUserRoleMutationVariables = Exact<{ input: UpdateDocUserRoleInput; }>; @@ -3398,6 +3417,11 @@ export type Queries = variables: GetCurrentUserQueryVariables; response: GetCurrentUserQuery; } + | { + name: 'getDocDefaultRoleQuery'; + variables: GetDocDefaultRoleQueryVariables; + response: GetDocDefaultRoleQuery; + } | { name: 'getInviteInfoQuery'; variables: GetInviteInfoQueryVariables; @@ -3473,6 +3497,11 @@ export type Queries = variables: GetWorkspaceInfoQueryVariables; response: GetWorkspaceInfoQuery; } + | { + name: 'getWorkspacePageByIdQuery'; + variables: GetWorkspacePageByIdQueryVariables; + response: GetWorkspacePageByIdQuery; + } | { name: 'getWorkspacePageMetaByIdQuery'; variables: GetWorkspacePageMetaByIdQueryVariables; @@ -3483,11 +3512,6 @@ export type Queries = variables: GetWorkspacePublicByIdQueryVariables; response: GetWorkspacePublicByIdQuery; } - | { - name: 'getWorkspacePublicPageByIdQuery'; - variables: GetWorkspacePublicPageByIdQueryVariables; - response: GetWorkspacePublicPageByIdQuery; - } | { name: 'getWorkspacePublicPagesQuery'; variables: GetWorkspacePublicPagesQueryVariables; @@ -3790,6 +3814,11 @@ export type Mutations = variables: UpdateAccountMutationVariables; response: UpdateAccountMutation; } + | { + name: 'updateDocDefaultRoleMutation'; + variables: UpdateDocDefaultRoleMutationVariables; + response: UpdateDocDefaultRoleMutation; + } | { name: 'updateDocUserRoleMutation'; variables: UpdateDocUserRoleMutationVariables;