From 944b553e736d645e4ff6aea6122bc4491b675d1d Mon Sep 17 00:00:00 2001 From: aleidk Date: Tue, 19 Mar 2024 20:43:04 -0300 Subject: [PATCH] feat(Components): Add pagination component This component accept a Page type from [astro](https://docs.astro.build/en/guides/routing/#complete-api-reference) --- astro.config.mjs | 3 + src/assets/style/_variables.scss | 3 + src/assets/style/style.scss | 2 +- src/components/Button/Button.astro | 24 ++++-- src/components/Navbar.astro | 28 +++--- src/components/Pagination.astro | 133 +++++++++++++++++++++++++++++ src/pages/index.astro | 30 ++++--- src/pages/projects/[page].astro | 69 +++++++++++++++ src/pages/projects/index.astro | 49 ----------- 9 files changed, 258 insertions(+), 83 deletions(-) create mode 100644 src/components/Pagination.astro create mode 100644 src/pages/projects/[page].astro delete mode 100644 src/pages/projects/index.astro diff --git a/astro.config.mjs b/astro.config.mjs index 932112e..9c13b36 100644 --- a/astro.config.mjs +++ b/astro.config.mjs @@ -8,4 +8,7 @@ export default defineConfig({ prefetch: true, integrations: [react(), astroI18next()], experimental: {}, + redirects: { + '/projects': '/projects/1', + }, }); diff --git a/src/assets/style/_variables.scss b/src/assets/style/_variables.scss index d0281e8..69697ab 100644 --- a/src/assets/style/_variables.scss +++ b/src/assets/style/_variables.scss @@ -50,6 +50,9 @@ $border-radius: 0.5rem; --prj-primary: #{getColor('teal')}; --prj-primary-text: #{getColor('base')}; + --prj-secondary: #{getColor('mauve')}; + --prj-secondary-text: #{getColor('base')}; + --prj-danger: #{getColor('red')}; --prj-danger-text: #{getColor('base')}; diff --git a/src/assets/style/style.scss b/src/assets/style/style.scss index 5cf0154..265234d 100644 --- a/src/assets/style/style.scss +++ b/src/assets/style/style.scss @@ -159,7 +159,7 @@ a { transition: text-shadow 0.2s; --anim-shadow-color: var(--prj-accent-bg); - &:hover { + &:not(.clean):hover { text-shadow: 1px 1px 8px var(--anim-shadow-color); } } diff --git a/src/components/Button/Button.astro b/src/components/Button/Button.astro index de2ec69..51d8e2e 100644 --- a/src/components/Button/Button.astro +++ b/src/components/Button/Button.astro @@ -1,24 +1,36 @@ --- interface Props { className?: string; + href?: string; } -const { className = '' } = Astro.props; +const { className = '', href } = Astro.props; --- - +{ + href !== undefined ? ( + + + + ) : ( + + ) +} diff --git a/src/pages/index.astro b/src/pages/index.astro index c1df8ea..b9e342d 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,17 +1,21 @@ --- -import { getCollection } from "astro:content"; -import { t, changeLanguage } from "i18next"; -import Layout from "../layouts/Layout.astro"; -import Card from "../components/Card.astro"; -import Button from "../components/Button/Button.astro"; -import { Image } from "astro:assets"; -import portrait from "../assets/images/portrait.jpg"; +import { getCollection } from 'astro:content'; +import { t, changeLanguage } from 'i18next'; +import Layout from '../layouts/Layout.astro'; +import Card from '../components/Card.astro'; +import Button from '../components/Button/Button.astro'; +import { Image } from 'astro:assets'; +import portrait from '../assets/images/portrait.jpg'; -changeLanguage("en"); +changeLanguage('en'); -const blog = await getCollection("blog", ({ data }) => import.meta.env.PROD ? data.draft !== true : true); +const blog = await getCollection('blog', ({ data }) => + import.meta.env.PROD ? data.draft !== true : true, +); // TODO: show the pinned ones, not the recents -const portafolio = await getCollection("portafolio", ({ data }) => import.meta.env.PROD ? data.draft !== true : true); +const portafolio = await getCollection('portafolio', ({ data }) => + import.meta.env.PROD ? data.draft !== true : true, +); --- @@ -49,8 +53,8 @@ const portafolio = await getCollection("portafolio", ({ data }) => import.meta.e />

Project N°1

- cillum sint consectetur cupidatat. - Lorem ipsum dolor sit amet, qui minim labore adipisicing minim sint + cillum sint consectetur cupidatat. Lorem ipsum dolor sit amet, qui + minim labore adipisicing minim sint

@@ -94,7 +98,7 @@ const portafolio = await getCollection("portafolio", ({ data }) => import.meta.e
- +
diff --git a/src/pages/projects/[page].astro b/src/pages/projects/[page].astro new file mode 100644 index 0000000..985a412 --- /dev/null +++ b/src/pages/projects/[page].astro @@ -0,0 +1,69 @@ +--- +import type { InferGetStaticPropsType, GetStaticPaths } from 'astro'; +import { changeLanguage } from 'i18next'; +import { getCollection } from 'astro:content'; +import Layout from '@layouts/Layout.astro'; +import Card from '@components/Card.astro'; +import Pagination from '@components/Pagination.astro'; + +changeLanguage('en'); + +export const getStaticPaths = (async ({ paginate }) => { + const rawEntries = await getCollection('portafolio', ({ data }) => { + return import.meta.env.PROD ? data.draft !== true : true; + }); + + const entries = rawEntries.map((item, idx) => ({ + ...item.data, + id: idx + 1, + slug: item.slug, + })); + + return paginate(entries, { pageSize: 6 }); +}) satisfies GetStaticPaths; + +type Props = InferGetStaticPropsType; + +const { page } = Astro.props; +--- + + +

Projects

+ +
+ + +
+
+ + diff --git a/src/pages/projects/index.astro b/src/pages/projects/index.astro deleted file mode 100644 index e5adc7d..0000000 --- a/src/pages/projects/index.astro +++ /dev/null @@ -1,49 +0,0 @@ ---- -import { changeLanguage } from 'i18next'; -import { getCollection } from 'astro:content'; -import Layout from '@layouts/Layout.astro'; -import Card from '@components/Card.astro'; - -changeLanguage('en'); - -const rawEntries = await getCollection('portafolio', ({ data }) => { - return import.meta.env.PROD ? data.draft !== true : true; -}); -const entries = rawEntries.map((item, idx) => ({ - ...item.data, - id: idx + 1, - slug: item.slug, -})); - -console.log(entries.at(0)); ---- - - -

Projects

- -
- { - entries.map((item) => ( -
- - project img -

Project N°1

-

- cillum sint consectetur cupidatat. Lorem ipsum dolor sit amet, qui - minim labore adipisicing minim sint -

- - -
-
- )) - } -
-