|
1 | 1 | --- |
2 | | -import type { SeeAlsoLinkGroup } from '@src/utils/general'; |
| 2 | +import type { SeeAlsoLinkGroup } from "@src/utils/general"; |
| 3 | +import { Badge } from "@astrojs/starlight/components"; |
3 | 4 |
|
4 | 5 | export interface Props { |
5 | 6 | seeAlsoLinks: SeeAlsoLinkGroup[]; |
6 | 7 | currentId: string; |
7 | 8 | } |
8 | 9 |
|
9 | 10 | const { seeAlsoLinks, currentId } = Astro.props; |
| 11 | +
|
| 12 | +const badgeConfig: { |
| 13 | + [key: string]: { |
| 14 | + text: string; |
| 15 | + variant: "note" | "danger" | "success" | "caution" | "tip" | "default"; |
| 16 | + }; |
| 17 | +} = { |
| 18 | + new: { text: "New", variant: "success" }, |
| 19 | + updated: { text: "Updated", variant: "caution" }, |
| 20 | +}; |
10 | 21 | --- |
11 | 22 |
|
12 | | -{seeAlsoLinks.length > 0 && ( |
13 | | - <div class="see-also-section" data-pagefind-ignore> |
14 | | - <h4>See Also</h4> |
15 | | - {seeAlsoLinks.map((group) => ( |
16 | | - <div class="see-also-group"> |
17 | | - <h5>{group.title}</h5> |
18 | | - <ul> |
19 | | - {group.links.map((link) => ( |
20 | | - <li> |
21 | | - {link.name === currentId ? ( |
22 | | - <strong>{link.name.replace(/_/g, ' ')}</strong> |
23 | | - ) : ( |
24 | | - <a target={link.newTab ? '_blank' : '_self'} |
25 | | - rel={link.newTab ? 'noopener noreferrer' : undefined} |
26 | | - href={link.link}>{link.name.replace(/_/g, ' ')}</a> |
27 | | - )} |
28 | | - </li> |
29 | | - ))} |
30 | | - </ul> |
31 | | - </div> |
32 | | - ))} |
33 | | - </div> |
34 | | -)} |
| 23 | +{ |
| 24 | + seeAlsoLinks.length > 0 && ( |
| 25 | + <div class="see-also-section" data-pagefind-ignore> |
| 26 | + <h4>See Also</h4> |
| 27 | + {seeAlsoLinks.map((group) => ( |
| 28 | + <div class="see-also-group"> |
| 29 | + <h5>{group.title}</h5> |
| 30 | + <ul> |
| 31 | + {group.links.map((link) => ( |
| 32 | + <li> |
| 33 | + {link.name === currentId ? ( |
| 34 | + <strong>{link.name.replace(/_/g, " ")}</strong> |
| 35 | + ) : ( |
| 36 | + <a |
| 37 | + target={link.newTab ? "_blank" : "_self"} |
| 38 | + rel={link.newTab ? "noopener noreferrer" : undefined} |
| 39 | + href={link.link} |
| 40 | + > |
| 41 | + {link.name.replace(/_/g, " ")} |
| 42 | + </a> |
| 43 | + )} |
| 44 | + |
| 45 | + {link.badge && |
| 46 | + (() => { |
| 47 | + const config = badgeConfig[link.badge] ?? { |
| 48 | + text: link.badge, |
| 49 | + variant: "default", |
| 50 | + }; |
| 51 | + |
| 52 | + return ( |
| 53 | + <Badge |
| 54 | + text={config.text} |
| 55 | + variant={config.variant} |
| 56 | + size="medium" |
| 57 | + style="font-weight: bold;" |
| 58 | + /> |
| 59 | + ); |
| 60 | + })()} |
| 61 | + </li> |
| 62 | + ))} |
| 63 | + </ul> |
| 64 | + </div> |
| 65 | + ))} |
| 66 | + </div> |
| 67 | + ) |
| 68 | +} |
0 commit comments