diff --git a/studio/components/to-be-cleaned/ModalsDeprecated/InviteMemberModal.tsx b/studio/components/to-be-cleaned/ModalsDeprecated/InviteMemberModal.tsx
index 7cd7d3329ec..561215fe7be 100644
--- a/studio/components/to-be-cleaned/ModalsDeprecated/InviteMemberModal.tsx
+++ b/studio/components/to-be-cleaned/ModalsDeprecated/InviteMemberModal.tsx
@@ -8,8 +8,7 @@ import { Modal } from '@supabase/ui'
import { API_URL } from 'lib/constants'
import { useOrganizationDetail, useStore } from 'hooks'
import { toJS } from 'mobx'
-
-
+import { Member } from 'types'
/**
* Endpoints (delete when finished)
@@ -28,7 +27,6 @@ import { toJS } from 'mobx'
*
*/
-
/**
* Modal to invite member to Organization
*
@@ -40,16 +38,17 @@ import { toJS } from 'mobx'
const PageContext = createContext(null)
function InviteMemberModal({ organization, members = [], user }: any) {
-
const PageState = useLocalObservable(() => ({
- members: [],
+ members: [],
addMemberLoading: false,
emailAddress: '',
emailIsValid() {
return String(this.emailAddress)
.toLowerCase()
- .match(/^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/);
- }
+ .match(
+ /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/
+ )
+ },
}))
const { ui } = useStore()
const { mutateOrgMembers } = useOrganizationDetail(ui.selectedOrganization?.slug || '')
@@ -74,7 +73,7 @@ function InviteMemberModal({ organization, members = [], user }: any) {
const response = await post(`${API_URL}/organizations/${orgSlug}/members/invite`, {
invited_email: PageState.emailAddress,
- owner_id: toJS(user.id)
+ owner_id: toJS(user.id),
})
if (isNil(response)) {
ui.setNotification({ category: 'error', message: 'Failed to add member' })
@@ -85,14 +84,25 @@ function InviteMemberModal({ organization, members = [], user }: any) {
})
PageState.addMemberLoading = false
} else {
- const newMember = response
+ const newMember: Member = {
+ // [Joshen] Setting a random id for now to fit the Member interface
+ id: 0,
+ invited_at: response.invited_at,
+ is_owner: false,
+ profile: {
+ id: 0,
+ primary_email: response.invited_email,
+ username: response.invited_email[0],
+ },
+ }
mutateOrgMembers([...PageState.members, newMember])
+
ui.setNotification({ category: 'success', message: 'Successfully added new member.' })
toggle()
}
}
- function onEmailInputChange(e) {
+ function onEmailInputChange(e: any) {
PageState.emailAddress = e.target.value
}
@@ -110,7 +120,7 @@ function InviteMemberModal({ organization, members = [], user }: any) {
layout="vertical"
hideFooter
>
-
+
+ />
@@ -142,4 +152,4 @@ function InviteMemberModal({ organization, members = [], user }: any) {
)
}
-export default observer(InviteMemberModal)
\ No newline at end of file
+export default observer(InviteMemberModal)
diff --git a/studio/pages/org/[slug]/settings.tsx b/studio/pages/org/[slug]/settings.tsx
index d9e24eed4a4..59a064cd3f6 100644
--- a/studio/pages/org/[slug]/settings.tsx
+++ b/studio/pages/org/[slug]/settings.tsx
@@ -42,11 +42,11 @@ const PageContext = createContext(null)
// Invite is expired if older than 24hrs
function inviteExpired(timestamp: Date) {
- const inviteDate = new Date(timestamp);
- const now = new Date();
+ const inviteDate = new Date(timestamp)
+ const now = new Date()
var timeBetween = now.valueOf() - inviteDate.valueOf()
- if(timeBetween / 1000 / 60 / 60 < 24) {
- return true;
+ if (timeBetween / 1000 / 60 / 60 < 24) {
+ return true
}
}
@@ -69,11 +69,11 @@ const OrgSettingsLayout = withAuth(
get filteredMembers() {
const temp = this.members.filter((x: any) => {
let profile = x.profile
- if(profile) {
+ if (profile) {
return (
profile.username.includes(this.membersFilterString) ||
profile.primary_email.includes(this.membersFilterString)
- )
+ )
}
if (x.invited_email) {
return x.invited_email.includes(this.membersFilterString)
@@ -237,7 +237,7 @@ const GeneralSettings = observer(() => {
}
return (
-
+
{
onCancel={toggle}
header={
-
Delete organisation
- Are you sure?
+ Delete organisation
+ Are you sure?
}
size="small"
@@ -361,9 +361,9 @@ const OrgDeleteModal = observer(() => {
}}
>
{({ isSubmitting }: { isSubmitting: boolean }) => (
-
+
-
+
This action cannot be undone. This will
permanently delete the {orgName} {' '}
organization and remove all of its projects.
@@ -436,7 +436,7 @@ const TeamSettings = observer(() => {
return (
<>
-
+
{PageState.isOrgOwner ? (
@@ -456,7 +456,7 @@ const TeamSettings = observer(() => {
)}
-
+
>
@@ -502,24 +502,28 @@ const MembersView = observer(() => {
- {x.invited_id ?
- (
)
- : (
- )}
-
+ {x.invited_id ? (
+
+
+
+ ) : (
+
+ )}
- {x.profile?.username && !x.invited_id && (
- <>
- {x.profile?.username}
-
- >
- ) }
- {x.profile ? x.profile.primary_email : ''}
+ {x.profile?.username && !x.invited_id && (
+ <>
+ {x.profile?.username}
+
+ >
+ )}
+
+ {x.profile ? x.profile.primary_email : ''}
+
@@ -527,7 +531,7 @@ const MembersView = observer(() => {
{x.invited_id && (
- {inviteExpired(x.invited_at) ? 'Invited' : 'Expired'}
+ {inviteExpired(x.invited_at) ? 'Invited' : 'Expired'}
)}
@@ -635,7 +639,10 @@ const OwnerDropdown = observer(({ members, member }: any) => {
async function handleResendInvite(id: number) {
setLoading(true)
- const response = await post(`${API_URL}/organizations/${orgSlug}/members/invite?invited_id=${id}`, {})
+ const response = await post(
+ `${API_URL}/organizations/${orgSlug}/members/invite?invited_id=${id}`,
+ {}
+ )
if (response.error) {
ui.setNotification({
@@ -653,7 +660,10 @@ const OwnerDropdown = observer(({ members, member }: any) => {
async function handleRevokeInvitation(id: number) {
setLoading(true)
- const response = await delete_(`${API_URL}/organizations/${orgSlug}/members/invite?invited_id=${id}`, {})
+ const response = await delete_(
+ `${API_URL}/organizations/${orgSlug}/members/invite?invited_id=${id}`,
+ {}
+ )
if (response.error) {
ui.setNotification({
diff --git a/studio/types/base.ts b/studio/types/base.ts
index f89b9da7edf..a99454c52ee 100644
--- a/studio/types/base.ts
+++ b/studio/types/base.ts
@@ -55,6 +55,8 @@ export interface Member {
primary_email: string
username: string
}
+ invited_id?: number
+ invited_at?: string
}
export interface ResponseError {