aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--site/src/components/NewsFeed.tsx20
-rw-r--r--site/src/pages/Homepage.tsx35
-rw-r--r--site/src/utils.ts10
3 files changed, 17 insertions, 48 deletions
diff --git a/site/src/components/NewsFeed.tsx b/site/src/components/NewsFeed.tsx
index 99099be..311fe75 100644
--- a/site/src/components/NewsFeed.tsx
+++ b/site/src/components/NewsFeed.tsx
@@ -1,3 +1,4 @@
+import { getGameTitle } from "../utils.ts";
export interface NewsData {
date: string;
@@ -31,7 +32,7 @@ export const NewsFeed: React.FC<NewsFeedProps> = ({ newsItems }) => {
return (
<div
- key={news.identifier + "-" + news.timestamp}
+ key={news.identifier + "-" + news.timestamp + "-" + news.content}
className="bg-gray-900 border border-gray-800 rounded-lg shadow-lg overflow-hidden"
>
{/* Header (Game Icon + Info) */}
@@ -44,7 +45,7 @@ export const NewsFeed: React.FC<NewsFeedProps> = ({ newsItems }) => {
<div className="flex flex-col leading-tight">
<span className="text-sm font-semibold text-gray-200">
- {getGameName(news.identifier)}
+ {getGameTitle(news.identifier)}
</span>
<span className="text-xs text-gray-400">
{formattedDate}
@@ -122,18 +123,3 @@ export const NewsFeed: React.FC<NewsFeedProps> = ({ newsItems }) => {
</div>
);
};
-function getGameName(identifier: string): string | null {
- if(identifier.startsWith("SOUND_VOLTEX")){
- return "SOUND VOLTEX";
- }
- else if(identifier.startsWith("IIDX")){
- return "beatmania IIDX";
- }
- else if(identifier.startsWith("CHUNITHM_JP")){
- return "CHUNITHM (JAPAN)";
- }
- else if(identifier.startsWith("MAIMAIDX_JP")){
- return "maimai DX (JAPAN)"
- }
- return null;
-}
diff --git a/site/src/pages/Homepage.tsx b/site/src/pages/Homepage.tsx
index 6f53096..0e17a43 100644
--- a/site/src/pages/Homepage.tsx
+++ b/site/src/pages/Homepage.tsx
@@ -1,6 +1,7 @@
import { useEffect, useState } from "react";
import { NewsData, NewsFeed } from "../components/NewsFeed";
import { useParams } from "react-router-dom";
+import { getGameTitle } from "../utils.ts";
import TitleBar from "../components/TitleBar";
interface ArcadeNewsAPIData {
@@ -16,23 +17,7 @@ export default function Home() {
useEffect(() => {
const fetchNews = async () => {
setLoading(true);
- let jsonFile = "news.json";
- if (gameId) {
- switch(gameId) {
- case "sdvx":
- jsonFile = "sdvx_news.json";
- break;
- case "iidx":
- jsonFile = "iidx_news.json";
- break;
- case "chunithm_jp":
- jsonFile = "chunithm_jp_news.json";
- break;
- default:
- jsonFile = "news.json";
- }
- }
-
+ const jsonFile = gameId ? `${gameId}_news.json` : "news.json";
try {
const response = await fetch("https://arcade-news.pinapelz.com/"+`${jsonFile}`);
if (!response.ok) {
@@ -60,18 +45,6 @@ export default function Home() {
);
}
- // Game-specific title mapping
- const getGameTitle = () => {
- if (!gameId) return null;
-
- switch(gameId) {
- case "sdvx": return "SOUND VOLTEX";
- case "iidx": return "beatmania IIDX";
- case "chunithm_jp": return "CHUNITHM (JAPAN)";
- default: return gameId.toUpperCase();
- }
- };
-
return (
<>
<TitleBar />
@@ -79,7 +52,7 @@ export default function Home() {
<div className="max-w-[600px] mx-auto px-4">
{gameId && (
<h1 className="text-2xl font-bold text-center text-white mb-6">
- {getGameTitle()} News
+ {getGameTitle(gameId)} News
</h1>
)}
<NewsFeed newsItems={newsFeedData.news_posts} />
@@ -87,4 +60,4 @@ export default function Home() {
</div>
</>
);
-} \ No newline at end of file
+}
diff --git a/site/src/utils.ts b/site/src/utils.ts
new file mode 100644
index 0000000..e523f5c
--- /dev/null
+++ b/site/src/utils.ts
@@ -0,0 +1,10 @@
+export const getGameTitle = (gameId: string) => {
+ if (!gameId) return null;
+
+ if (gameId.startsWith("sdvx")) return "SOUND VOLTEX";
+ if (gameId.startsWith("iidx")) return "beatmania IIDX";
+ if (gameId.startsWith("chunithm_jp")) return "CHUNITHM (JAPAN)";
+ if (gameId.startsWith("maimaidx_jp")) return "maimai DX (JAPAN)";
+
+ return gameId.toUpperCase();
+};
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage