Skip to content

Commit 9ef8714

Browse files
authored
5 add tags option to snippets (#7)
* chore: added intelliJ project files to gitignore * feat: added tags and tag handling added tags to fontmatter metadata and displaying in a list on BlogCart while checking if prop has values. * refactor: logic only used in BlogCard simplified interface, refactored to models file for better reusability. * refactor: treat tags as string[] * feat: added tags to snippet page adjusted CSS, cleanup * refactor: tags is mandatory, so added tags to all snippets * refactor: moved tags to own component and display below date
1 parent 1630710 commit 9ef8714

File tree

9 files changed

+73
-38
lines changed

9 files changed

+73
-38
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,4 @@ yarn.lock
2525
# other folders
2626
.vercel
2727
.netlify
28+
.idea

src/components/BlogCard.astro

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,35 @@
11
---
2+
import TagsLine from "./TagsLine.astro";
3+
24
export interface Props {
35
title: string;
46
description: string;
57
pubDate: string;
68
url: string | undefined;
79
contributedBy: string;
10+
tags: string[];
811
}
9-
let { title, description, pubDate, url, contributedBy } = Astro.props;
12+
let { title, description, pubDate, url, contributedBy, tags } = Astro.props;
1013
const shortDate = new Date(pubDate).toLocaleDateString("en", {
1114
dateStyle: "short",
1215
});
1316
url = url + "/";
1417
---
1518

16-
<li class="flex flex-col gap-2 sm:grid-cols-4 leading-relaxed rounded-2xl border-zinc-700 dark:text-zinc-400">
17-
<a class="col-span-3 flex flex-col gap-2 sm:gap-4 p-5 my-2 hover:dark:bg-zinc-800 hover:bg-zinc-200 rounded-lg transition-colors shadow-md" href={url}>
19+
<li
20+
class="flex flex-col gap-2 sm:grid-cols-4 leading-relaxed rounded-2xl border-zinc-700 dark:text-zinc-400"
21+
>
22+
<a
23+
class="col-span-3 flex flex-col gap-2 sm:gap-4 p-5 my-2 hover:dark:bg-zinc-800 hover:bg-zinc-200 rounded-lg transition-colors shadow-md"
24+
href={url}
25+
>
1826
<time class="shrink-0 text-base sm:hidden">{shortDate}</time>
19-
<span class="flex items-center justify-between mb-1"><h2 class="text-xl text-black dark:text-white">{title}</h2><time class="shrink-0 text-base hidden sm:block">{shortDate}</time></span>
27+
<span class="flex items-center justify-between mb-1">
28+
<h2 class="text-xl text-black dark:text-white">{title}</h2>
29+
<time class="shrink-0 text-base hidden sm:block">{shortDate}</time>
30+
</span>
31+
<TagsLine tags={tags} />
2032
<!-- You want a description? Just uncomment the code down below -->
2133
<!-- <p class="text-base text-black dark:text-zinc-300">{description}</p> -->
2234
</a>
23-
</li>
35+
</li>

src/components/TagsLine.astro

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
---
2+
const { tags } = Astro.props;
3+
---
4+
5+
<div class="flex text-sm gap-2">
6+
{
7+
tags.map((tag) => (
8+
<span class="bg-slate-800 px-2 py-1 rounded text-white dark:bg-slate-400 ">
9+
{tag}
10+
</span>
11+
))
12+
}
13+
</div>

src/layouts/BlogLayout.astro

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import "@fontsource/inter/variable.css";
33
import "@fontsource/fira-code";
44
import Header from "@components/Header.astro";
5+
import TagsLine from "@components/TagsLine.astro";
56
67
let { pubDate } = Astro.props.content;
78
const { frontmatter } = Astro.props;
@@ -97,6 +98,9 @@ const canonicalURL = new URL(Astro.url).href;
9798
{frontmatter.contributedBy}
9899
</span>
99100
</nav>
101+
<div class="mys-2">
102+
<TagsLine tags={frontmatter.tags} />
103+
</div>
100104
</header>
101105
<article>
102106
<slot />

src/pages/index.astro

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@
22
import Layout from "@layouts/Layout.astro";
33
import BlogCard from "@components/BlogCard.astro";
44
import { Icon } from "astro-icon";
5-
interface Frontmatter {
6-
title: string;
7-
pubDate: string;
8-
description: string;
9-
contributedBy: string;
10-
}
5+
import { Frontmatter } from "./models";
116
127
const metadata = {
138
title: "Angular Snippets",
@@ -25,7 +20,7 @@ blogs = blogs.sort(
2520
<Layout {...metadata}>
2621
<section class="flex flex-col sm:flex-row justify-evenly items-center py-14">
2722
<div class="w-32 m-5 md:m-10 my-10">
28-
<Icon class="h-8 md:h-12" name="simple-icons:angular" />
23+
<Icon class="h-8 md:h-12" name="simple-icons:angular" />
2924
</div>
3025
<header class="max-w-xl sm:order-first">
3126
<h1
@@ -61,6 +56,7 @@ blogs = blogs.sort(
6156
pubDate={post.frontmatter.pubDate}
6257
url={post.url}
6358
contributedBy={post.frontmatter.contributedBy}
59+
tags={post.frontmatter.tags}
6460
/>
6561
))
6662
}

src/pages/models.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
export interface Frontmatter {
2+
title: string;
3+
pubDate: string;
4+
description: string;
5+
contributedBy: string;
6+
tags?: string[];
7+
}

src/pages/snippets.astro

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,7 @@
11
---
22
import Layout from "@layouts/Layout.astro";
33
import BlogCard from "@components/BlogCard.astro";
4-
5-
interface Frontmatter {
6-
title: string;
7-
pubDate: string;
8-
description: string;
9-
contributedBy: string;
10-
}
4+
import { Frontmatter } from "./models";
115
126
let blogs = await Astro.glob<Frontmatter>("./snippets/*.mdx");
137
blogs = blogs.sort(
@@ -28,15 +22,18 @@ blogs = blogs.sort(
2822
<section>
2923
<ul class="flex flex-col justify-center mb-8">
3024
{
31-
blogs.map((post) => (
32-
<BlogCard
33-
title={post.frontmatter.title}
34-
description={post.frontmatter.description}
35-
pubDate={post.frontmatter.pubDate}
36-
url={post.url}
37-
contributedBy={post.frontmatter.contributedBy}
38-
/>
39-
))
25+
blogs.map((post) => {
26+
return (
27+
<BlogCard
28+
title={post.frontmatter.title}
29+
description={post.frontmatter.description}
30+
pubDate={post.frontmatter.pubDate}
31+
url={post.url}
32+
contributedBy={post.frontmatter.contributedBy}
33+
tags={post.frontmatter.tags}
34+
/>
35+
);
36+
})
4037
}
4138
</ul>
4239
</section>

src/pages/snippets/source-map.mdx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
---
22
title: Make source maps available for reporting tools
33
description: "Make source maps available for reporting tools"
4+
tags: [json, sourceMaps]
45
pubDate: Feb 20, 2022
56
contributedBy: "@SantoshYadavDev"
67
---
7-
import BlogImage from "@components/BlogImage.astro"
8-
import SourceMap from "@images/source-map.jpg"
98

10-
Do you want to upload source-map to an reporting tool like
9+
import BlogImage from "@components/BlogImage.astro";
10+
import SourceMap from "@images/source-map.jpg";
11+
12+
Do you want to upload source-map to an reporting tool like
1113
@datadoghq
1214
, but want to make sure no one can debug the code due to sourceMap
1315

14-
1516
---
17+
1618
Set below property in build options, the source-map will not be mapped to the bundle, but you will get a source map.
1719

1820
```json
@@ -21,5 +23,4 @@ Set below property in build options, the source-map will not be mapped to the bu
2123
}
2224
```
2325

24-
2526
<BlogImage src={SourceMap} alt="hidden source map for production" />

src/pages/snippets/v15-standalone.mdx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
title: Angular 15 Standalone Components
33
description: "Easy example of Angular 15 standalone components in existing projects"
4+
tags: ["angular15", "standalone components"] # comma separated list which gets trimmed
45
pubDate: Feb 22, 2022
56
contributedBy: "@olierxleben"
67
---
@@ -9,22 +10,25 @@ Here is a quick example of how to use a standalone component in an existing NgMo
910
Let`s start with the component itself.
1011

1112
```typescript
12-
import {Component} from '@angular/core';
13+
import { Component } from "@angular/core";
1314

1415
@Component({
15-
selector: 'fancy-button',
16+
selector: "fancy-button",
1617
standalone: true, // magic lies here
1718

1819
template: `
19-
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
20+
<button
21+
class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
22+
>
2023
<ng-content></ng-content>
2124
</button>
2225
`,
2326
})
24-
export class ButtonComponent {
25-
}
27+
export class ButtonComponent {}
2628
```
29+
2730
---
31+
2832
And for the integration in an NgModule, you can just do the following:
2933

3034
```typescript

0 commit comments

Comments
 (0)