import { useMemo } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import { Link } from 'react-router'; import { useSession } from '@documenso/lib/client-only/providers/session'; import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app'; import { ORGANISATION_MEMBER_ROLE_MAP } from '@documenso/lib/constants/organisations-translations'; import { formatAvatarUrl } from '@documenso/lib/utils/avatars'; import { canExecuteOrganisationAction, isPersonalLayout } from '@documenso/lib/utils/organisations'; import { trpc } from '@documenso/trpc/react'; import { AvatarWithText } from '@documenso/ui/primitives/avatar'; import { Button } from '@documenso/ui/primitives/button'; import type { DataTableColumnDef } from '@documenso/ui/primitives/data-table'; import { DataTable } from '@documenso/ui/primitives/data-table'; import { Skeleton } from '@documenso/ui/primitives/skeleton'; import { TableCell } from '@documenso/ui/primitives/table'; import { OrganisationLeaveDialog } from '../dialogs/organisation-leave-dialog'; export const UserOrganisationsTable = () => { const { _, i18n } = useLingui(); const { user, organisations } = useSession(); const { data, isLoading, isLoadingError } = trpc.organisation.getMany.useQuery(undefined, { initialData: organisations.map((org) => ({ ...org, currentMemberId: '', // Unsed dummy data. })), }); const isPersonalLayoutMode = isPersonalLayout(data); const results = { data: data || [], perPage: 10, currentPage: 1, totalPages: 1, }; const columns = useMemo(() => { return [ { header: _(msg`Organisation`), accessorKey: 'name', cell: ({ row }) => ( {isPersonalLayoutMode ? _(msg`Personal`) : row.original.name} } secondaryText={ isPersonalLayoutMode ? _(msg`Your personal organisation`) : `${NEXT_PUBLIC_WEBAPP_URL()}/o/${row.original.url}` } /> ), }, { header: _(msg`Role`), accessorKey: 'role', cell: ({ row }) => row.original.ownerUserId === user.id ? _(msg`Owner`) : _(ORGANISATION_MEMBER_ROLE_MAP[row.original.currentOrganisationRole]), }, { header: _(msg`Created At`), accessorKey: 'createdAt', cell: ({ row }) => i18n.date(row.original.createdAt), }, { id: 'actions', cell: ({ row }) => (
{canExecuteOrganisationAction( 'MANAGE_ORGANISATION', row.original.currentOrganisationRole, ) && ( )} e.preventDefault()} > Leave } />
), }, ] satisfies DataTableColumnDef<(typeof results)['data'][number]>[]; }, [isPersonalLayoutMode]); return (
{!isPersonalLayoutMode && (
)} ), }} />
); };