Add Socials component to avoid code duplication

This commit is contained in:
elpekenin
2022-10-16 09:26:35 +02:00
parent 2acea86371
commit 7ef631fe35
3 changed files with 35 additions and 39 deletions
+2 -16
View File
@@ -3,6 +3,7 @@ import socialIcons from "@assets/socialIcons";
import { SOCIALS } from "src/config"; import { SOCIALS } from "src/config";
import Hr from "./Hr.astro"; import Hr from "./Hr.astro";
import LinkButton from "./LinkButton.astro"; import LinkButton from "./LinkButton.astro";
import Socials from "./Socials.astro";
const currentYear = new Date().getFullYear(); const currentYear = new Date().getFullYear();
@@ -16,19 +17,7 @@ const { noMarginTop = false } = Astro.props;
<footer class={`${noMarginTop ? "" : "mt-auto"}`}> <footer class={`${noMarginTop ? "" : "mt-auto"}`}>
<Hr noPadding /> <Hr noPadding />
<div class="footer-wrapper"> <div class="footer-wrapper">
<div class="social-icons"> <Socials />
{
SOCIALS.filter((social) => social.active).map((social) => (
<LinkButton
href={social.href}
className="link-button"
title={social.name}
>
<Fragment set:html={socialIcons[social.name]} />
</LinkButton>
))
}
</div>
<div class="copyright-wrapper"> <div class="copyright-wrapper">
<span>Copyright &#169; {currentYear}</span> <span>Copyright &#169; {currentYear}</span>
<span class="separator">&nbsp;|&nbsp;</span> <span class="separator">&nbsp;|&nbsp;</span>
@@ -56,7 +45,4 @@ const { noMarginTop = false } = Astro.props;
.separator { .separator {
@apply hidden sm:inline; @apply hidden sm:inline;
} }
.social-icons {
@apply flex flex-wrap justify-center gap-1;
}
</style> </style>
+30
View File
@@ -0,0 +1,30 @@
---
import { SOCIALS } from "src/config";
import LinkButton from "./LinkButton.astro";
import socialIcons from "@assets/socialIcons";
---
<div class="social-icons">
{
SOCIALS.filter((social) => social.active).map((social) => (
<LinkButton
href={social.href}
className="link-button"
title={social.name}
>
<Fragment set:html={socialIcons[social.name]} />
</LinkButton>
))
}
</div>
<style>
.social-icons {
@apply flex flex-wrap justify-center gap-1;
@apply mt-1 sm:mt-0 sm:ml-2 sm:space-x-1;
}
.link-button {
@apply p-2 sm:p-1 hover:rotate-6;
}
</style>
+3 -23
View File
@@ -1,5 +1,4 @@
--- ---
import { SOCIALS } from "src/config";
import Layout from "@layouts/Layout.astro"; import Layout from "@layouts/Layout.astro";
import Header from "@components/Header.astro"; import Header from "@components/Header.astro";
import Footer from "@components/Footer.astro"; import Footer from "@components/Footer.astro";
@@ -7,9 +6,9 @@ import LinkButton from "@components/LinkButton.astro";
import Hr from "@components/Hr.astro"; import Hr from "@components/Hr.astro";
import Card from "@components/Card"; import Card from "@components/Card";
import getSortedPosts from "@utils/getSortedPosts"; import getSortedPosts from "@utils/getSortedPosts";
import socialIcons from "@assets/socialIcons";
import slugify from "@utils/slugify"; import slugify from "@utils/slugify";
import type { Frontmatter } from "src/types"; import type { Frontmatter } from "src/types";
import Socials from "@components/Socials.astro";
const posts = await Astro.glob<Frontmatter>("../contents/*.md"); const posts = await Astro.glob<Frontmatter>("../contents/*.md");
@@ -49,19 +48,7 @@ const sortedPosts = getSortedPosts(posts);
</p> </p>
<div class="social-wrapper"> <div class="social-wrapper">
<div class="whitespace-nowrap">Social Links:</div> <div class="whitespace-nowrap">Social Links:</div>
<div class="social-icons"> <Socials />
{
SOCIALS.filter((social) => social.active).map((social) => (
<LinkButton
href={social.href}
className="link-button"
title={social.name}
>
<Fragment set:html={socialIcons[social.name]} />
</LinkButton>
))
}
</div>
</div> </div>
</section> </section>
@@ -119,7 +106,7 @@ const sortedPosts = getSortedPosts(posts);
<Footer /> <Footer />
</Layout> </Layout>
<style> <style is:global>
/* ===== Hero Section ===== */ /* ===== Hero Section ===== */
#hero { #hero {
@apply pt-8; @apply pt-8;
@@ -139,12 +126,6 @@ const sortedPosts = getSortedPosts(posts);
.social-wrapper { .social-wrapper {
@apply flex flex-col sm:flex-row sm:items-center mt-4 mb-6; @apply flex flex-col sm:flex-row sm:items-center mt-4 mb-6;
} }
.social-icons {
@apply mt-1 sm:mt-0 sm:ml-2 sm:space-x-1;
}
.link-button {
@apply p-2 sm:p-1 hover:rotate-6;
}
/* ===== Featured & Recent Posts Sections ===== */ /* ===== Featured & Recent Posts Sections ===== */
#featured, #featured,
@@ -155,7 +136,6 @@ const sortedPosts = getSortedPosts(posts);
#recent-posts h2 { #recent-posts h2 {
@apply font-semibold text-2xl tracking-wide; @apply font-semibold text-2xl tracking-wide;
} }
.all-posts-btn-wrapper { .all-posts-btn-wrapper {
@apply text-center my-8; @apply text-center my-8;
} }