diff --git a/app/users/[id]/content.tsx b/app/users/[id]/content.tsx
index e9d5696..a862f17 100644
--- a/app/users/[id]/content.tsx
+++ b/app/users/[id]/content.tsx
@@ -4,13 +4,32 @@ import { useEffect } from "react";
import { useQuery } from "@tanstack/react-query";
import { notFound } from "next/navigation";
import { Separator } from "@/components/ui/separator";
-import { getUserByUserId } from "@/lib/profile";
+import { getUserByUserId, UserProfileDetails } from "@/lib/profile";
import { UserProfileHeader } from "@/components/roblox/UserProfileHeader";
+import { Skeleton } from "@/components/ui/skeleton";
+import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert";
+import { ShieldBanIcon } from "lucide-react";
+import Link from "next/link";
+import { useFriendsHome } from "@/hooks/roblox/useFriends";
+import { FriendCarousel } from "@/components/roblox/FriendCarousel";
interface UserProfileContentProps {
userId: string;
}
+function ProfileMoreDetails({ profile }: { profile: UserProfileDetails }) {
+ const theirFriends = useFriendsHome(profile.id.toString());
+
+ return (
+ <>
+ {!theirFriends && }
+ {/*
+ //@ts-expect-error */}
+ Friends} className="overflow-visible -ml-4" friends={theirFriends || []} />
+ >
+ );
+}
+
export default function UserProfileContent({
userId
}: UserProfileContentProps) {
@@ -34,9 +53,34 @@ export default function UserProfileContent({
-
+
{profile.description}
+ {profile.isBanned && (
+ <>
+
+
+
+ This user is banned
+
+ Their Roblox account appears to be terminated
+ from the platform. You can see their inventory
+ and RAP history on{" "}
+
+ Rolimons
+
+
+
+
+ >
+ )}
+ {!profile.isBanned && }
);
}
diff --git a/components/providers/ReactQueryProvider.tsx b/components/providers/ReactQueryProvider.tsx
index 91f4bc3..e54210c 100644
--- a/components/providers/ReactQueryProvider.tsx
+++ b/components/providers/ReactQueryProvider.tsx
@@ -15,12 +15,15 @@ export function ReactQueryProvider({ children }: Props) {
defaultOptions: {
queries: {
staleTime: 1000 * 60 * 5, // 5 minutes
- retry: 1
+ retry: true
}
}
});
+ // will cause bun to SEGFAULT
+
useEffect(() => {
+ if (!window) return;
// Persist to localStorage (safe, runs client-side)
const localStoragePersister = createAsyncStoragePersister({
storage: window.localStorage
diff --git a/components/roblox/FriendCarousel.tsx b/components/roblox/FriendCarousel.tsx
index 644a1e7..732b097 100644
--- a/components/roblox/FriendCarousel.tsx
+++ b/components/roblox/FriendCarousel.tsx
@@ -1,6 +1,6 @@
import { useCurrentAccount } from "@/hooks/roblox/useCurrentAccount";
import { useFriendsPresence } from "@/hooks/roblox/usePresence";
-import React, { useMemo } from "react";
+import React, { ReactNode, useMemo } from "react";
import LazyLoadedImage from "../util/LazyLoadedImage";
import { StupidHoverThing } from "../util/MiscStuff";
import { VerifiedIcon } from "./RobloxIcons";
@@ -15,7 +15,7 @@ export function FriendCarousel({
React.HTMLAttributes,
HTMLDivElement
> & {
- title: string;
+ title: Element | string;
dontSortByActivity?: boolean;
friends:
| {
diff --git a/components/roblox/GameCard.tsx b/components/roblox/GameCard.tsx
index 97aaa54..4246c13 100644
--- a/components/roblox/GameCard.tsx
+++ b/components/roblox/GameCard.tsx
@@ -10,6 +10,7 @@ import {
} from "../ui/context-menu";
import { ContextMenuItem } from "@radix-ui/react-context-menu";
import React from "react";
+import Link from "next/link";
interface GameCardProps {
game: ContentMetadata;
@@ -71,9 +72,9 @@ export const GameCard = React.memo(function GameCard({ game }: GameCardProps) {
-
- Open URL
-
+
+ Open
+
{
diff --git a/components/roblox/RobloxTooltips.tsx b/components/roblox/RobloxTooltips.tsx
index 7717161..7e18937 100644
--- a/components/roblox/RobloxTooltips.tsx
+++ b/components/roblox/RobloxTooltips.tsx
@@ -1,5 +1,6 @@
import { PremiumIconSmall, VerifiedIcon } from "./RobloxIcons";
import { Tooltip, TooltipContent, TooltipTrigger } from "../ui/tooltip";
+import { ShieldBanIcon } from "lucide-react";
export function RobloxPremiumSmall(props: React.SVGProps) {
return (
@@ -28,3 +29,18 @@ export function RobloxVerifiedSmall(
);
}
+
+export function RobloxBannedSmall(
+ props: React.SVGProps & { useDefault?: boolean }
+) {
+ return (
+
+
+
+
+
+