import { gql } from '@apollo/client';
import { Avatar } from '@app/client/components/ui/avatar';
import { userFragment } from '@app/client/fragments';
import { toFormattedDate } from '@app/client/helpers';
import { useIdentity } from '@app/client/hooks/identity';
import { useToastMutation } from '@app/client/hooks/useToastMutation';
import { useUserOneQuery } from '@app/client/hooks/useUserOneQuery';
import {
Box,
Button,
Card,
Heading,
HStack,
Icon,
SkeletonCircle,
SkeletonText,
Stack,
Text,
Textarea
} from '@chakra-ui/react';
import { UserProfileUpdateMutation } from '@generated/types';
import { createFileRoute } from '@tanstack/react-router';
import { useState } from 'react';
export const Route = createFileRoute('/profile/$username')({
component: RouteComponent
});
function RouteComponent() {
const { username } = Route.useParams();
const { data } = useUserOneQuery({
input: {
username
}
});
if (data == null) return ;
return (
);
}
function UserOverview({
user
}: {
readonly user: {
readonly id: string;
readonly username: string;
readonly description?: string | null;
readonly createdAt: string;
};
}) {
const identity = useIdentity();
const { update: userUpdate } = useToastMutation({
mutation: userUpdateMutation,
successMsg: 'Profile updated successfully!'
});
const [isEditMode, setIsEditMode] = useState(false);
const [description, setDescription] = useState(user.description ?? '');
return (
{user.username}
joined:
{toFormattedDate({ value: user.createdAt })}
{identity != null && isEditMode && (
)}
{!isEditMode && identity?.data.id === user.id && (
)}
{isEditMode ? (
) : (
{user.description ?? 'No user description =('}
)}
);
}
function UserOverviewSkeleton() {
return (
);
}
const userUpdateMutation = gql`
mutation UserProfileUpdate($input: UserUpdateInput!) {
userUpdate(input: $input) {
...User
}
}
${userFragment}
`;