Merge pull request #27878 from overleaf/dp-share-project-modal-utils-typescript

Convert remaining share-project-modal utils to typescript

GitOrigin-RevId: fc3fc7fbf7c8057c57f0aab261e4cedc3f7c602e
This commit is contained in:
David
2025-08-14 08:06:24 +00:00
committed by Copybot
parent 450041e753
commit 671059fdfc
4 changed files with 38 additions and 16 deletions
@@ -13,9 +13,10 @@ import OLForm from '@/shared/components/ol/ol-form'
import OLFormGroup from '@/shared/components/ol/ol-form-group'
import { Select } from '@/shared/components/select'
import OLButton from '@/shared/components/ol/ol-button'
import { PermissionsLevel } from '@/features/ide-react/types/permissions'
export default function AddCollaborators({ readOnly }: { readOnly?: boolean }) {
const [privileges, setPrivileges] = useState('readAndWrite')
const [privileges, setPrivileges] = useState<PermissionsLevel>('readAndWrite')
const isMounted = useIsMounted()
@@ -176,7 +177,7 @@ export default function AddCollaborators({ readOnly }: { readOnly?: boolean }) {
const privilegeOptions = useMemo(() => {
const options: {
key: string
key: PermissionsLevel
label: string
description?: string | null
}[] = [
@@ -1,3 +1,4 @@
import { ProjectMember } from '@/shared/context/types/project-metadata'
import {
deleteJSON,
getJSON,
@@ -6,8 +7,13 @@ import {
} from '../../../infrastructure/fetch-json'
import { executeV2Captcha } from './captcha'
import getMeta from '@/utils/meta'
import { PermissionsLevel } from '@/features/ide-react/types/permissions'
export function sendInvite(projectId, email, privileges) {
export function sendInvite(
projectId: string,
email: string,
privileges: PermissionsLevel
) {
return executeV2Captcha(
getMeta('ol-ExposedSettings').recaptchaDisabled?.invite
).then(grecaptchaResponse => {
@@ -21,25 +27,35 @@ export function sendInvite(projectId, email, privileges) {
})
}
export function resendInvite(projectId, invite) {
export function resendInvite(projectId: string, invite: ProjectMember) {
return postJSON(`/project/${projectId}/invite/${invite._id}/resend`)
}
export function revokeInvite(projectId, invite) {
export function revokeInvite(projectId: string, invite: ProjectMember) {
return deleteJSON(`/project/${projectId}/invite/${invite._id}`)
}
export function updateMember(projectId, member, data) {
export function updateMember(
projectId: string,
member: ProjectMember,
data: { privilegeLevel: PermissionsLevel }
) {
return putJSON(`/project/${projectId}/users/${member._id}`, {
body: data,
})
}
export function removeMemberFromProject(projectId, member) {
export function removeMemberFromProject(
projectId: string,
member: ProjectMember
) {
return deleteJSON(`/project/${projectId}/users/${member._id}`)
}
export function transferProjectOwnership(projectId, member) {
export function transferProjectOwnership(
projectId: string,
member: ProjectMember
) {
return postJSON(`/project/${projectId}/transfer-ownership`, {
body: {
user_id: member._id,
@@ -47,16 +63,19 @@ export function transferProjectOwnership(projectId, member) {
})
}
export function setPublicAccessLevel(projectId, publicAccessLevel) {
export function setPublicAccessLevel(
projectId: string,
publicAccessLevel: string
) {
return postJSON(`/project/${projectId}/settings/admin`, {
body: { publicAccessLevel },
})
}
export function listProjectMembers(projectId) {
export function listProjectMembers(projectId: string) {
return getJSON(`/project/${projectId}/members`)
}
export function listProjectInvites(projectId) {
export function listProjectInvites(projectId: string) {
return getJSON(`/project/${projectId}/invites`)
}
@@ -1,7 +1,8 @@
let _recaptchaId
let _recaptchaResolve
export function executeV2Captcha(disabled = false) {
return new Promise((resolve, reject) => {
let _recaptchaId: string
let _recaptchaResolve: ((token: string) => void) | undefined
export function executeV2Captcha(disabled: boolean = false) {
return new Promise<void | string>((resolve, reject) => {
if (disabled || !window.grecaptcha) {
return resolve()
}
@@ -9,7 +10,7 @@ export function executeV2Captcha(disabled = false) {
try {
if (!_recaptchaId) {
_recaptchaId = window.grecaptcha.render('recaptcha', {
callback: token => {
callback: (token: string) => {
if (_recaptchaResolve) {
_recaptchaResolve(token)
_recaptchaResolve = undefined
+1
View File
@@ -28,5 +28,6 @@ declare global {
propensity?: (propensityId?: string) => void
olLoadGA?: () => void
grecaptcha?: any
}
}