import { useCallback, useState } from 'react'
import { useLocation, useNavigate, useParams } from 'react-router-dom'
import {
Button,
IconButton,
Menu,
MenuButton,
MenuItem,
MenuList,
Portal,
Table,
Tbody,
Td,
Th,
Thead,
Tr,
useToast,
} from '@chakra-ui/react'
import cx from 'classnames'
import { Helmet } from 'react-helmet-async'
import InvitationAPI, { SortBy, SortOrder } from '@/client/api/invitation'
import OrganizationAPI from '@/client/api/organization'
import { geEditorPermission } from '@/client/api/permission'
import { swrConfig } from '@/client/options'
import OrganizationInviteMembers from '@/components/organization/organization-invite-members'
import OrganizationStatus from '@/components/organization/organization-status'
import prettyDate from '@/helpers/pretty-date'
import { outgoingInvitationPaginationStorage } from '@/infra/pagination'
import {
IconMoreVert,
IconSend,
IconDelete,
IconPersonAdd,
SectionSpinner,
PagePagination,
usePagePagination,
} from '@/lib'
const OrganizationInvitationsPage = () => {
const navigate = useNavigate()
const location = useLocation()
const { id } = useParams()
const toast = useToast()
const { data: org, error: orgError } = OrganizationAPI.useGetById(
id,
swrConfig(),
)
const { page, size, steps, setPage, setSize } = usePagePagination({
navigate,
location,
storage: outgoingInvitationPaginationStorage(),
})
const {
data: list,
error: invitationsError,
mutate,
} = InvitationAPI.useGetOutgoing(
{
organizationId: id,
page,
size,
sortBy: SortBy.DateCreated,
sortOrder: SortOrder.Desc,
},
swrConfig(),
)
const [isInviteMembersModalOpen, setIsInviteMembersModalOpen] =
useState(false)
const handleResend = useCallback(
async (invitationId: string) => {
await InvitationAPI.resend(invitationId)
toast({
title: 'Invitation resent',
status: 'success',
isClosable: true,
})
},
[toast],
)
const handleDelete = useCallback(
async (invitationId: string) => {
await InvitationAPI.delete(invitationId)
mutate()
},
[mutate],
)
if (invitationsError || orgError) {
return null
}
if (!list || !org) {
return
| Status | Date | ||
|---|---|---|---|
| {i.email} |
|
{prettyDate(i.createTime)} |