pull/1154/head
abron 2025-08-26 16:24:26 +03:30
parent 3082fece4f
commit 573f158f26
1 changed files with 21 additions and 59 deletions

View File

@ -49,7 +49,6 @@ interface Server {
inviteCode: string; inviteCode: string;
disabled: boolean; disabled: boolean;
new: boolean; new: boolean;
showcolor: string;
sortorder: number; sortorder: number;
} }
@ -68,33 +67,9 @@ const NewServerWrapper = styled.div`
} }
`; `;
// Dynamic color wrapper component
const ColorWrapper = styled.div<{ color: string }>`
color: ${props => props.color};
display: contents;
a {
color: ${props => props.color};
}
`;
const CACHE_KEY = "server_list_cache"; const CACHE_KEY = "server_list_cache";
const CACHE_DURATION = 1 * 60 * 1000; // 1 minutes in milliseconds const CACHE_DURATION = 1 * 60 * 1000; // 1 minutes in milliseconds
// Fallback data in case Google Sheets is unavailable
const FALLBACK_SERVERS: Server[] = [
{
id: "01F7ZSBSFHQ8TA81725KQCSDDP",
name: "PlaceHolder",
description: "Community",
inviteCode: "development",
disabled: false,
new: false,
sortorder: 2
}
];
// Safe localStorage wrapper // Safe localStorage wrapper
const safeStorage = { const safeStorage = {
getItem: (key: string): string | null => { getItem: (key: string): string | null => {
@ -123,8 +98,8 @@ const Home: React.FC = () => {
const fetchAndCacheData = async () => { const fetchAndCacheData = async () => {
try { try {
const csvUrl = const csvUrl =
//"https://docs.google.com/spreadsheets/d/e/2PACX-1vRY41D-NgTE6bC3kTN3dRpisI-DoeHG8Eg7n31xb1CdydWjOLaphqYckkTiaG9oIQSWP92h3NE-7cpF/pub?gid=0&single=true&output=csv"; "https://docs.google.com/spreadsheets/d/1kNF50scEUJVJ9KD-0_ibX43vJiOzdHrmgauLoSoBy34/export?format=csv&gid=0";
"https://docs.google.com/spreadsheets/d/1kNF50scEUJVJ9KD-0_ibX43vJiOzdHrmgauLoSoBy34/edit?single=true&output=csv&gid=0#gid=0";
// Add cache-busting parameter to prevent browser caching // Add cache-busting parameter to prevent browser caching
const urlWithCacheBust = `${csvUrl}&_cb=${Date.now()}`; const urlWithCacheBust = `${csvUrl}&_cb=${Date.now()}`;
@ -156,19 +131,15 @@ const Home: React.FC = () => {
}, },
error: (err) => { error: (err) => {
console.error("Error fetching CSV:", err); console.error("Error fetching CSV:", err);
console.warn("Using fallback server data due to Google Sheets error"); setError(
"Failed to load server data. Please try again later.",
// Use fallback data instead of showing error );
setServers(FALLBACK_SERVERS);
setLoading(false); setLoading(false);
}, },
}); });
} catch (err) { } catch (err) {
console.error("Unexpected error:", err); console.error("Unexpected error:", err);
console.warn("Using fallback server data due to unexpected error"); setError("An unexpected error occurred. Please try again later.");
// Use fallback data instead of showing error
setServers(FALLBACK_SERVERS);
setLoading(false); setLoading(false);
} }
}; };
@ -194,14 +165,7 @@ const Home: React.FC = () => {
// Continue to fetch fresh data if cache read fails // Continue to fetch fresh data if cache read fails
} }
try { await fetchAndCacheData();
await fetchAndCacheData();
} catch (err) {
console.error("Failed to fetch data even after cache miss:", err);
console.warn("Using fallback server data as last resort");
setServers(FALLBACK_SERVERS);
setLoading(false);
}
}; };
getCachedOrFetchData(); getCachedOrFetchData();
@ -213,18 +177,18 @@ const Home: React.FC = () => {
? `/server/${server.id}` ? `/server/${server.id}`
: `/invite/${server.inviteCode}`; : `/invite/${server.inviteCode}`;
const iconComponent = server.disabled ? (
<Lock size={32} />
) : isServerJoined ? (
<MessageDots size={32} />
) : (
<MessageAdd size={32} />
);
const buttonContent = ( const buttonContent = (
<CategoryButton <CategoryButton
action={server.disabled ? undefined : "chevron"} action={server.disabled ? undefined : "chevron"}
icon={iconComponent as any} icon={
server.disabled ? (
<Lock size={32} />
) : isServerJoined ? (
<MessageDots size={32} />
) : (
<MessageAdd size={32} />
)
}
description={server.description}> description={server.description}>
{server.name} {server.name}
</CategoryButton> </CategoryButton>
@ -236,13 +200,11 @@ const Home: React.FC = () => {
<Link to={linkTo}>{buttonContent}</Link> <Link to={linkTo}>{buttonContent}</Link>
); );
if (server.showcolor && server.showcolor.trim()) { return server.new ? (
content = <ColorWrapper color={server.showcolor}>{content}</ColorWrapper>; <NewServerWrapper>{content}</NewServerWrapper>
} else if (server.new) { ) : (
content = <NewServerWrapper>{content}</NewServerWrapper>; content
} );
return content;
}; };
if (loading) { if (loading) {