From 45026eee4c93bbbe6141dd23a664abe6e9ff3ca2 Mon Sep 17 00:00:00 2001 From: nolawz Date: Tue, 3 Mar 2026 04:04:23 +0530 Subject: Added events section and components required for that --- src/pages/events/[...id].astro | 168 +++++++++++++++++++++++++++++++++++++++ src/pages/events/[...page].astro | 60 ++++++++++++++ src/pages/index.astro | 90 +++++++++------------ src/pages/types/[...id].astro | 53 ++++++++++++ src/pages/types/index.astro | 35 ++++++++ 5 files changed, 354 insertions(+), 52 deletions(-) create mode 100644 src/pages/events/[...id].astro create mode 100644 src/pages/events/[...page].astro create mode 100644 src/pages/types/[...id].astro create mode 100644 src/pages/types/index.astro (limited to 'src/pages') diff --git a/src/pages/events/[...id].astro b/src/pages/events/[...id].astro new file mode 100644 index 0000000..44d8ec4 --- /dev/null +++ b/src/pages/events/[...id].astro @@ -0,0 +1,168 @@ +--- +import Breadcrumbs from '@/components/Breadcrumbs.astro' +import EventNavigation from '@/components/EventNavigation.astro' +import TOCHeader from '@/components/TOCHeader.astro' +import TOCSidebar from '@/components/TOCSidebar.astro' +import { badgeVariants } from '@/components/ui/badge' +import { Button } from '@/components/ui/button' +import Layout from '@/layouts/Layout.astro' +import { + getAdjacentEvents, + getAllEvents, + getTOCSections, +} from '@/lib/data-utils' +import { formatDate, iconMappings } from '@/lib/utils' +import { Icon } from 'astro-icon/components' +import { Image } from 'astro:assets' +import { render } from 'astro:content' + +export async function getStaticPaths() { + const events = await getAllEvents() + return events.map((event) => ({ + params: { id: event.id }, + props: event, + })) +} + +const event = Astro.props +const currentPostId = Astro.params.id +const navigation = await getAdjacentEvents(currentPostId) +const { Content, headings } = await render(event) + +const tocSections = await getTOCSections(currentPostId) +--- + + + { + headings?.length > 0 && + !(headings.length === 1 && headings[0].text === event.data.title) && ( + + ) + } + +
+
+ +
+ + { + event.data.image && ( + {event.data.title} + ) + } + +
+
+

+ {event.data.title} +

+ +
+
+ {formatDate(event.data.date)} +
+
+
+ { + event.data.type && ( + + + {event.data.type} + + ) + } +
+
+
+ + { + tocSections.length > 0 && ( + + ) + } + +
+ +
+ + +
+ + + + +
+ + diff --git a/src/pages/events/[...page].astro b/src/pages/events/[...page].astro new file mode 100644 index 0000000..2625ab0 --- /dev/null +++ b/src/pages/events/[...page].astro @@ -0,0 +1,60 @@ +--- +import Breadcrumbs from '@/components/Breadcrumbs.astro' +import EventCard from '@/components/EventCard.astro' +import PageHead from '@/components/PageHead.astro' +import PaginationComponent from '@/components/ui/pagination' +import { SITE } from '@/consts' +import Layout from '@/layouts/Layout.astro' +import { getAllEvents, groupEventsByYear } from '@/lib/data-utils' +import type { PaginateFunction } from 'astro' + +export async function getStaticPaths({ + paginate, +}: { + paginate: PaginateFunction +}) { + const allEvents = await getAllEvents() + return paginate(allEvents, { pageSize: SITE.eventsPerPage }) +} + +const { page } = Astro.props + +const eventsByYear = groupEventsByYear(page.data) +const years = Object.keys(eventsByYear).sort( + (a, b) => parseInt(b) - parseInt(a), +) +--- + + + + + +
+ { + years.map((year) => ( +
+
{year}
+
    + {eventsByYear[year].map((event) => ( +
  • + +
  • + ))} +
+
+ )) + } +
+ + +
diff --git a/src/pages/index.astro b/src/pages/index.astro index 019283d..9549a7c 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,13 +1,15 @@ --- import BlogCard from '@/components/BlogCard.astro' +import EventCard from '@/components/EventCard.astro' import Link from '@/components/Link.astro' import PageHead from '@/components/PageHead.astro' import { buttonVariants } from '@/components/ui/button' import { SITE } from '@/consts' import Layout from '@/layouts/Layout.astro' -import { getRecentPosts } from '@/lib/data-utils' +import { getRecentPosts, getRecentEvents } from '@/lib/data-utils' const blog = await getRecentPosts(SITE.featuredPostCount) +const events = await getRecentEvents(SITE.featuredEventsCount) --- @@ -16,69 +18,53 @@ const blog = await getRecentPosts(SITE.featuredPostCount)

er·u·dite

- /ˈer(y)əˌdīt/ • adjective + /ˈer(y)əˌdīt/ • adjective

-
-

- astro-erudite is an opinionated, unstyled static blogging template built - with Astro, Tailwind, and shadcn/ui. Extraordinarily loosely based on the Astro Micro theme. -

-

- To use this template, check out the GitHub repository. To learn more about why this template exists, read this blog - post: The State of Static Blogs in 2024. -

+ +
+

Latest events

+
    + { + events.map((event) => ( +
  • + +
  • + )) + } +
+
+ + See all posts → +

Latest posts

    { - blog.map((post) => ( -
  • - -
  • - )) + blog.map((post) => ( +
  • + +
  • + )) }
- See all posts → + href="/blog" + class={buttonVariants({ variant: 'ghost' }) + ' group'} + > + See all posts →
diff --git a/src/pages/types/[...id].astro b/src/pages/types/[...id].astro new file mode 100644 index 0000000..26640a9 --- /dev/null +++ b/src/pages/types/[...id].astro @@ -0,0 +1,53 @@ +--- +import Breadcrumbs from '@/components/Breadcrumbs.astro' +import PageHead from '@/components/PageHead.astro' +import Layout from '@/layouts/Layout.astro' +import { getAllTypes, getEventsByType } from '@/lib/data-utils' +import { capitalizeFirstLetter, iconMappings } from '@/lib/utils' +import EventCard from '../../components/EventCard.astro' + +export async function getStaticPaths() { + const typeMap = await getAllTypes() + const uniqueTags = Array.from(typeMap.keys()) + + return Promise.all( + uniqueTags.map(async (type) => { + const events = await getEventsByType(type) + return { + params: { id: type }, + props: { + type, + events, + }, + } + }), + ) +} + +const { type, events } = Astro.props +--- + + + + + +
    + { + events.map((event) => ( +
  • + +
  • + )) + } +
+
diff --git a/src/pages/types/index.astro b/src/pages/types/index.astro new file mode 100644 index 0000000..c269c22 --- /dev/null +++ b/src/pages/types/index.astro @@ -0,0 +1,35 @@ +--- +import Breadcrumbs from '@/components/Breadcrumbs.astro' +import Link from '@/components/Link.astro' +import PageHead from '@/components/PageHead.astro' +import { badgeVariants } from '@/components/ui/badge' +import Layout from '@/layouts/Layout.astro' +import { getAllTypes } from '@/lib/data-utils' +import { iconMappings } from '@/lib/utils' +import { Icon } from 'astro-icon/components' + +const types = await getAllTypes() +--- + + + + + +
+
+ {console.log([...types.entries()].map((a) => console.log(a)))} + { + [...types.entries()].map(([type, count]) => ( + + + {type} + ({count}) + + )) + } +
+
+
-- cgit v1.2.3