-
{change.name}
-
- {change.changes.map((changeItem, i) => (
- -
- {changeItem.type}: {changeItem.description}
-
- ))}
-
+ if (CHANGES.length === 0) {
+ return (
+
+
+
No changelog entries yet.
- ))}
+
+ );
+ }
+
+ return (
+
+ {/* Header */}
+
+
+ {/* Timeline */}
+
+ {CHANGES.map((release: Change) => (
+
+ {/* Timeline dot โ ring matches page background in both themes */}
+
+
+ {/* Version header */}
+
+
{release.name}
+
+
+ {/* Changes card */}
+
+
+ {release.changes.map((changeItem: ChangeItem, i: number) => {
+ const style = typeStyles[changeItem.type];
+ return (
+ -
+
+ {style.label}
+
+
+ {changeItem.description}
+
+
+ );
+ })}
+
+
+
+ ))}
+
);
}
diff --git a/frontend/src/api/api-websockets.ts b/frontend/src/api/api-websockets.ts
index 82eb502..2f6c278 100644
--- a/frontend/src/api/api-websockets.ts
+++ b/frontend/src/api/api-websockets.ts
@@ -55,7 +55,7 @@ export function useWebSocket({
(event: GCWebSocketEvent) => {
webSocket.send(JSON.stringify(event));
},
- [webSocket]
+ [webSocket],
);
useEffect(() => {
diff --git a/frontend/src/collage/Collage.tsx b/frontend/src/collage/Collage.tsx
deleted file mode 100644
index 836337c..0000000
--- a/frontend/src/collage/Collage.tsx
+++ /dev/null
@@ -1,113 +0,0 @@
-import { FC, useEffect, useRef, useState } from 'react';
-import { getThumbnailUrl, useParties } from '../api/api';
-import { sortSubmissions } from '../party/view/util';
-
-const Collage: FC = () => {
- const { data: parties, isLoading, fetchNextPage, hasNextPage } = useParties();
- const element = useRef
(null);
- const [imageHeight, setImageHeight] = useState(72);
- const [gap, setGap] = useState(0);
- const [padding, setPadding] = useState(0);
-
- const [nImages, setNImages] = useState(25);
-
- const submissions = sortSubmissions(
- (parties?.pages || []).flatMap((page) => page.data.flatMap((party) => party.submissions)).slice(0, nImages)
- );
-
- useEffect(() => {
- if (hasNextPage && nImages > (submissions.length || 100000)) {
- fetchNextPage();
- }
- }, [nImages, parties?.pages.length, hasNextPage, submissions]);
-
- if (isLoading || !parties) {
- return <>>;
- }
-
- const nPages = !element.current
- ? 1
- : Math.ceil(
- element.current.scrollHeight /
- element.current.scrollWidth /
- (element.current.offsetHeight / element.current.offsetWidth)
- );
-
- return (
- <>
-
-
- {submissions.map((submission) => (
-
})
- ))}
-
- >
- );
-};
-
-export default Collage;
diff --git a/frontend/src/components/EmojiBar.tsx b/frontend/src/components/EmojiBar.tsx
index e688c54..97cafef 100644
--- a/frontend/src/components/EmojiBar.tsx
+++ b/frontend/src/components/EmojiBar.tsx
@@ -1,23 +1,28 @@
const EMOJIS = [
+ '๐',
+ '๐',
+ '๐',
+ '๐ง',
+ '๐ฉ',
+ '๐ฆ',
+ '๐ต',
+ '๐ช',
+ '๐',
+ '๐ง ',
+ '๐ธ',
+ '๐',
+ '๐ฆฉ',
+ 'โต',
+ '๐ฎ',
+ '๐ผ',
+ '๐',
+ '๐ฆด',
+ '๐',
'๐ฅณ',
'๐',
'๐ฆ',
'๐ป',
'๐',
- '๐ก',
- '๐ธ',
- '๐',
- '๐คฆโโ๏ธ',
- '๐ฆ',
- '๐',
- '๐ฉโ๐จ',
- '๐ท',
- '๐คก',
- '๐ค',
- '๐',
- '๐ฑ',
- '๐คนโโ๏ธ',
- '๐ฆฆ',
];
function EmojiBar({ count }: { count: number }) {
diff --git a/frontend/src/home/Home.tsx b/frontend/src/home/Home.tsx
index 9bb9316..aebd690 100644
--- a/frontend/src/home/Home.tsx
+++ b/frontend/src/home/Home.tsx
@@ -20,12 +20,7 @@ export function Home() {
return (
- {highlightedParty && (
-
-
Next up:
-
-
- )}
+ {highlightedParty &&
}
{!highlightedParty && (
-
-
+
+
+
+ ,
);
diff --git a/frontend/src/navigation/Navigation.tsx b/frontend/src/navigation/Navigation.tsx
index 8fde972..7161d6b 100644
--- a/frontend/src/navigation/Navigation.tsx
+++ b/frontend/src/navigation/Navigation.tsx
@@ -6,8 +6,6 @@ import { ThemeButton } from '../components/ThemeButton';
import { useSession } from '../user/session';
import { VERSION } from '../version';
-const enableBetaFeatures = false;
-
function Navigation() {
const [session, setSession] = useSession();
const signOutAndRemoveSession = async () => {
@@ -29,23 +27,6 @@ function Navigation() {
{VERSION}
-
- {session && enableBetaFeatures && (
- <>
-
- Collage (beta)
-
-
- Statistics
-
- >
- )}
@@ -57,10 +57,7 @@ function PartyForm({ onSubmit, submitBtnText = 'Save', initialData = {} }: Party
Category
-
@@ -103,7 +100,7 @@ function PartyForm({ onSubmit, submitBtnText = 'Save', initialData = {} }: Party