"use client"; import { useMutation, useQueryClient } from "@tanstack/react-query"; import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import { router } from "expo-router"; import { View } from "react-native"; import { Trans, useTranslation } from "@turbostarter/i18n"; import { Button } from "@turbostarter/ui-mobile/button"; import { Icons } from "@turbostarter/ui-mobile/icons"; import { Spin } from "@turbostarter/ui-mobile/spin"; import { Text } from "@turbostarter/ui-mobile/text"; import { pathsConfig } from "~/config/paths"; import { authClient } from "~/lib/auth"; import { AuthLayout } from "~/modules/auth/layout/base"; import { AuthHeader } from "~/modules/auth/layout/header"; import { Link } from "~/modules/common/styled"; import { organization } from "~/modules/organization/lib/api"; import { user } from "~/modules/user/lib/api"; import { InvitationSummaryCard } from "./invitation-summary-card"; import type { Invitation as InvitationType } from "@turbostarter/auth"; dayjs.extend(relativeTime); interface InvitationProps { readonly invitation: InvitationType & { inviterEmail: string; }; readonly organization: { slug: string | null; name: string; logo: string | null; }; } export const Invitation = (props: InvitationProps) => { const { t } = useTranslation(["common", "organization"]); const activeOrganization = authClient.useActiveOrganization(); const activeMember = authClient.useActiveMember(); const queryClient = useQueryClient(); const setActive = useMutation({ ...organization.mutations.setActive, onSuccess: async () => { await activeOrganization.refetch(); await activeMember.refetch(); }, }); const acceptInvitation = useMutation({ ...organization.mutations.invitations.accept, onSuccess: async () => { await queryClient.invalidateQueries(user.queries.invitations.getAll); await setActive.mutateAsync({ organizationId: props.invitation.organizationId, }); router.replace(pathsConfig.index); }, }); const rejectInvitation = useMutation({ ...organization.mutations.invitations.reject, onSuccess: async () => { await queryClient.invalidateQueries(user.queries.invitations.getAll); router.replace(pathsConfig.index); }, }); return ( }} /> } /> {t("invitations.invitation.skip")} ); };