Skip to content

Commit 6c00341

Browse files
authored
Merge pull request #24 from thedevdavid/feature/available-for-work
Feature/available for work
2 parents 7b4b9d5 + 67dee63 commit 6c00341

File tree

5 files changed

+76
-11
lines changed

5 files changed

+76
-11
lines changed

CHANGELOG.md

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1212
- Copy button component
1313
- Scroll-aware table of contets
1414
- Minimal hero variant
15+
- Work availability status
1516

1617
### Changed
1718

components/navigation.tsx

+26-11
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { CommandDialogComponent } from "@/components/command-dialog";
1010
import { MobileNav } from "@/components/mobile-nav";
1111
import { ModeToggle } from "@/components/mode-toggle";
1212
import { Navbar } from "@/components/navbar";
13+
import { WorkAvailabilityBadge } from "@/components/work-availability-badge";
1314

1415
export function Navigation() {
1516
const [prevScrollPos, setPrevScrollPos] = useState(0);
@@ -37,20 +38,34 @@ export function Navigation() {
3738
<>
3839
<header
3940
className={cn(
40-
"fixed -bottom-32 z-20 mx-auto mb-4 h-12 w-full px-4 animate-out delay-500 sm:static sm:z-auto sm:mb-0 sm:mt-4 sm:h-16 sm:max-w-6xl sm:transition-none sm:delay-0 lg:px-0",
41+
"fixed -bottom-32 z-20 mx-auto mb-4 w-full px-4 animate-out delay-500 sm:static sm:z-auto sm:mb-0 sm:mt-4 sm:h-16 sm:max-w-6xl sm:transition-none sm:delay-0 lg:px-0",
4142
visible && "bottom-0 left-0 animate-in"
4243
)}
4344
>
44-
<div className="flex items-center rounded-full border border-primary/40 bg-white/30 bg-clip-padding px-4 py-2 shadow-md backdrop-blur-sm sm:container dark:border-white dark:bg-black/30 dark:text-white sm:justify-between sm:rounded-lg">
45-
<Link href="/" aria-label="Go to Home" className="order-1">
46-
<Image
47-
className="aspect-square h-auto w-10 rounded-full border border-black hover:opacity-60"
48-
width={40}
49-
height={40}
50-
src="/avatar.png"
51-
alt={defaultAuthor.name}
52-
/>
53-
</Link>
45+
{defaultAuthor.availableForWork && (
46+
<div className="mx-auto mb-2 text-center sm:hidden">
47+
<Link href="/now" aria-label="Go to Now page">
48+
<WorkAvailabilityBadge />
49+
</Link>
50+
</div>
51+
)}
52+
<div className="flex items-center rounded-full border-b border-primary/40 bg-white/30 bg-clip-padding px-4 py-2 shadow-md backdrop-blur-sm sm:container dark:bg-black/30 dark:text-white sm:justify-between sm:rounded-lg">
53+
<div className="order-1 flex flex-row items-center justify-start">
54+
<Link href="/" aria-label="Go to Home">
55+
<Image
56+
className="aspect-square h-auto w-10 rounded-full border border-black hover:opacity-60"
57+
width={40}
58+
height={40}
59+
src="/avatar.png"
60+
alt={defaultAuthor.name}
61+
/>
62+
</Link>
63+
{defaultAuthor.availableForWork && (
64+
<Link href="/now" aria-label="Go to Now page" className="ml-2 hidden sm:block">
65+
<WorkAvailabilityBadge />
66+
</Link>
67+
)}
68+
</div>
5469
<div className="order-3 sm:order-2 sm:ml-auto">
5570
<nav className="ml-auto hidden space-x-6 text-sm font-medium sm:block sm:w-full">
5671
<Navbar />

components/ui/badge.tsx

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import * as React from "react"
2+
import { cva, type VariantProps } from "class-variance-authority"
3+
4+
import { cn } from "@/lib/utils"
5+
6+
const badgeVariants = cva(
7+
"inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
8+
{
9+
variants: {
10+
variant: {
11+
default:
12+
"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",
13+
secondary:
14+
"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
15+
destructive:
16+
"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",
17+
outline: "text-foreground",
18+
},
19+
},
20+
defaultVariants: {
21+
variant: "default",
22+
},
23+
}
24+
)
25+
26+
export interface BadgeProps
27+
extends React.HTMLAttributes<HTMLDivElement>,
28+
VariantProps<typeof badgeVariants> {}
29+
30+
function Badge({ className, variant, ...props }: BadgeProps) {
31+
return (
32+
<div className={cn(badgeVariants({ variant }), className)} {...props} />
33+
)
34+
}
35+
36+
export { Badge, badgeVariants }
+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Badge } from "@/components/ui/badge";
2+
3+
export function WorkAvailabilityBadge() {
4+
return (
5+
<Badge
6+
variant="outline"
7+
className="border-accent-foreground bg-background text-primary transition-colors duration-150 hover:bg-accent-foreground hover:text-white"
8+
>
9+
🟢 I&apos;m available for work
10+
</Badge>
11+
);
12+
}

lib/metadata.ts

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ export const defaultAuthor = {
1515
website: "https://nextjs.org",
1616
jobTitle: "Frontend Engineer & UI Designer",
1717
company: "Unicorns & Co.",
18+
availableForWork: true,
1819
};
1920

2021
const defaultTitle = `${defaultAuthor.name}'s Blog`;

0 commit comments

Comments
 (0)