diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..244a368 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +# dependencies +node_modules/ + +# build output +.next/ +next-env.d.ts \ No newline at end of file diff --git a/app/blog/Announcement.tsx b/app/blog/Announcement.tsx new file mode 100644 index 0000000..5d1766f --- /dev/null +++ b/app/blog/Announcement.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +interface AnnouncementProps { + className?: string; + children?: React.ReactNode; +} + +const Announcement: React.FC = ({ className, children }) => { + return
{children}
; +}; + +export default Announcement; \ No newline at end of file diff --git a/app/blog/Media.tsx b/app/blog/Media.tsx new file mode 100644 index 0000000..77b1fce --- /dev/null +++ b/app/blog/Media.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +interface MediaProps { + className?: string; + children?: React.ReactNode; +} + +const Media: React.FC = ({ className, children }) => { + return
{children}
; +}; + +export default Media; \ No newline at end of file diff --git a/app/blog/Updates.tsx b/app/blog/Updates.tsx new file mode 100644 index 0000000..835f293 --- /dev/null +++ b/app/blog/Updates.tsx @@ -0,0 +1,12 @@ +import React from 'react'; + +interface UpdatesProps { + className?: string; + children?: React.ReactNode; +} + +const Updates: React.FC = ({ className, children }) => { + return
{children}
; +}; + +export default Updates; \ No newline at end of file diff --git a/app/blog/page.tsx b/app/blog/page.tsx new file mode 100644 index 0000000..52943cf --- /dev/null +++ b/app/blog/page.tsx @@ -0,0 +1,103 @@ +"use client"; +import { useState } from "react"; +import Updates from './Updates'; +import Announcement from './Announcement'; +import Media from './Media'; + +const updateContents = [ + "Update 1", + "Update 2", + "Update 3", + "Update 4", + "Update 5", +]; + +export default function BlogPage() { + const [index, setIndex] = useState(0); + const total = updateContents.length; + + const prev = () => + setIndex((i) => (i === 0 ? total - 1 : i - 1)); + + const next = () => + setIndex((i) => (i === total - 1 ? 0 : i + 1)); + + const get = (offset : number) => + updateContents[(index + offset + total) % total]; + + return ( +
+
+ image + +
+

ANNOUNCEMENTS

+
+ + + + +
+
+ +
+

UPDATES

+
+ + {/* Previous slide */} + + {get(-1)} + + + {/* Left arrow */} + + + {/* Active slide */} + + {get(0)} + + + {/* Right arrow */} + + + {/* Next slide */} + + {get(1)} + +
+
+ +
+

MEDIA

+
+ + + + +
+
+
+
+ + ); +} \ No newline at end of file