Skip to content

Commit 476ade6

Browse files
committed
refactor: enhance theme toggle component with dynamic selection and visual feedback
1 parent f9db2d5 commit 476ade6

File tree

2 files changed

+45
-15
lines changed

2 files changed

+45
-15
lines changed

packages/web/app/api/projects/[id]/devlogs/route.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,15 @@ export async function POST(request: NextRequest, { params }: { params: { id: str
119119

120120
await devlogService.save(devlogEntry);
121121

122-
// Transform and return created devlog
123-
const transformedDevlog = ResponseTransformer.transformDevlog(devlogEntry);
122+
// Retrieve the actual saved entry to ensure we have the correct ID
123+
const savedEntry = await devlogService.get(nextId, false); // Don't include notes for performance
124+
125+
if (!savedEntry) {
126+
throw new Error('Failed to retrieve saved devlog entry');
127+
}
128+
129+
// Transform and return the actual saved devlog
130+
const transformedDevlog = ResponseTransformer.transformDevlog(savedEntry);
124131
return createSuccessResponse(transformedDevlog, { status: 201 });
125132
} catch (error) {
126133
console.error('Error creating devlog:', error);

packages/web/app/components/ui/theme-toggle.tsx

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,17 @@ import {
99
DropdownMenuItem,
1010
DropdownMenuTrigger,
1111
} from '@/components/ui/dropdown-menu';
12-
import { Moon, Sun, Monitor } from 'lucide-react';
12+
import { Check, Monitor, Moon, Sun } from 'lucide-react';
1313

1414
export function ThemeToggle() {
1515
const { setTheme, theme } = useTheme();
1616

17+
const themes = [
18+
{ name: 'light', label: 'Light', icon: <Sun className="mr-2 h-4 w-4" /> },
19+
{ name: 'dark', label: 'Dark', icon: <Moon className="mr-2 h-4 w-4" /> },
20+
{ name: 'system', label: 'System', icon: <Monitor className="mr-2 h-4 w-4" /> },
21+
];
22+
1723
return (
1824
<DropdownMenu>
1925
<DropdownMenuTrigger asChild>
@@ -24,18 +30,35 @@ export function ThemeToggle() {
2430
</Button>
2531
</DropdownMenuTrigger>
2632
<DropdownMenuContent align="end">
27-
<DropdownMenuItem onClick={() => setTheme('light')}>
28-
<Sun className="mr-2 h-4 w-4" />
29-
<span>Light</span>
30-
</DropdownMenuItem>
31-
<DropdownMenuItem onClick={() => setTheme('dark')}>
32-
<Moon className="mr-2 h-4 w-4" />
33-
<span>Dark</span>
34-
</DropdownMenuItem>
35-
<DropdownMenuItem onClick={() => setTheme('system')}>
36-
<Monitor className="mr-2 h-4 w-4" />
37-
<span>System</span>
38-
</DropdownMenuItem>
33+
{themes.map(({ name, label, icon }) => (
34+
<DropdownMenuItem
35+
key={name}
36+
className="cursor-pointer justify-between"
37+
onClick={() => setTheme(name)}
38+
>
39+
<div className="flex items-center">
40+
{icon}
41+
<span>{label}</span>
42+
</div>
43+
<div>{theme === name && <Check className="h-4 w-4" />}</div>
44+
</DropdownMenuItem>
45+
))}
46+
{/* Uncomment the following lines if you want to allow users to select themes manually */}
47+
{/*<DropdownMenuItem className="cursor-pointer" onClick={() => setTheme('light')}>*/}
48+
{/* <Sun className="mr-2 h-4 w-4" />*/}
49+
{/* <span>Light</span>*/}
50+
{/* {theme === 'light' && <Check />}*/}
51+
{/*</DropdownMenuItem>*/}
52+
{/*<DropdownMenuItem className="cursor-pointer" onClick={() => setTheme('dark')}>*/}
53+
{/* <Moon className="mr-2 h-4 w-4" />*/}
54+
{/* <span>Dark</span>*/}
55+
{/* {theme === 'dark' && <Check />}*/}
56+
{/*</DropdownMenuItem>*/}
57+
{/*<DropdownMenuItem className="cursor-pointer" onClick={() => setTheme('system')}>*/}
58+
{/* <Monitor className="mr-2 h-4 w-4" />*/}
59+
{/* <span>System</span>*/}
60+
{/* {theme === 'system' && <Check />}*/}
61+
{/*</DropdownMenuItem>*/}
3962
</DropdownMenuContent>
4063
</DropdownMenu>
4164
);

0 commit comments

Comments
 (0)