Explorar o código

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

Convert remaining share-project-modal utils to typescript

GitOrigin-RevId: fc3fc7fbf7c8057c57f0aab261e4cedc3f7c602e
David hai 1 ano
pai
achega
671059fdfc

+ 3 - 2
services/web/frontend/js/features/share-project-modal/components/add-collaborators.tsx

@@ -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
     }[] = [

+ 28 - 9
services/web/frontend/js/features/share-project-modal/utils/api.js → services/web/frontend/js/features/share-project-modal/utils/api.ts

@@ -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`)
 }

+ 6 - 5
services/web/frontend/js/features/share-project-modal/utils/captcha.js → services/web/frontend/js/features/share-project-modal/utils/captcha.ts

@@ -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 - 0
services/web/types/window.ts

@@ -28,5 +28,6 @@ declare global {
 
     propensity?: (propensityId?: string) => void
     olLoadGA?: () => void
+    grecaptcha?: any
   }
 }