Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/components/Plan.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
filterMeetingsByDateRange,
} from "../services/calendarService";
import { MeetingInsights } from "./MeetingInsights";
import { WeeklyPriorities } from "./WeeklyPriorities";

export function Plan() {
const { meetings: storedMeetings, targetHours } = useSettingsStore();
Expand Down Expand Up @@ -146,6 +147,7 @@ export function Plan() {

return (
<div className="space-y-6">
<WeeklyPriorities />
<MeetingInsights meetings={meetings} />
<StatsPanel stats={stats} />

Expand Down
86 changes: 86 additions & 0 deletions src/components/WeeklyPriorities.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import { useState, useEffect } from "react";
import { Card, CardHeader, CardTitle, CardContent } from "./ui/card";
import { Button } from "./ui/button";
import { Textarea } from "./ui/textarea";
import { useSettingsStore } from "../stores/settingsStore";

export function WeeklyPriorities() {
const { weeklyPriorities, setWeeklyPriorities } = useSettingsStore();
const [editMode, setEditMode] = useState(false);
const [localPriorities, setLocalPriorities] = useState(
weeklyPriorities || ""
);

useEffect(() => {
setLocalPriorities(weeklyPriorities || "");
}, [weeklyPriorities]);

const handleSave = async () => {
await setWeeklyPriorities(localPriorities);
setEditMode(false);
};

const handleCancel = () => {
setLocalPriorities(weeklyPriorities || "");
setEditMode(false);
};

return (
<Card className="mb-6">
<CardHeader className="flex flex-row items-center justify-between pb-2">
<CardTitle className="text-lg font-medium">
This Week's Priorities
</CardTitle>
{!editMode ? (
<Button
variant="ghost"
size="sm"
onClick={() => setEditMode(true)}
className="h-8 px-2 lg:px-3"
>
Edit
</Button>
) : (
<div className="flex gap-2">
<Button
variant="outline"
size="sm"
onClick={handleCancel}
className="h-8 px-2 lg:px-3"
>
Cancel
</Button>
<Button
variant="default"
size="sm"
onClick={handleSave}
className="h-8 px-2 lg:px-3"
>
Save
</Button>
</div>
)}
</CardHeader>
<CardContent>
{editMode ? (
<Textarea
value={localPriorities}
onChange={(e) => setLocalPriorities(e.target.value)}
className="min-h-[100px] resize-y"
placeholder="Enter your weekly priorities here..."
/>
) : (
<div className="whitespace-pre-wrap">
{weeklyPriorities ? (
weeklyPriorities
) : (
<span className="text-gray-400">
No priorities set for this week. Click Edit to add some.
</span>
)}
</div>
)}
</CardContent>
</Card>
);
}
13 changes: 13 additions & 0 deletions src/services/ampEmailService.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ export class AmpEmailService {
recipientEmail: string
): Promise<string> {
const dateRanges = getDateRanges();
const weeklyPriorities =
(await db.getSetting<string>("weeklyPriorities")) || "";

// Pre-fetch calendar links for all meetings
const calendarLinks = new Map<string, string>();
Expand Down Expand Up @@ -93,6 +95,17 @@ export class AmpEmailService {
return `
<html>
<body>
${
weeklyPriorities
? `
<div style="margin-bottom: 20px; border: 1px solid #eee; padding: 15px; border-radius: 8px; background-color: #f9f9f9;">
<h2>Weekly Priorities</h2>
<div style="white-space: pre-wrap;">${weeklyPriorities}</div>
</div>
`
: ""
}

${
upcomingMeetingsWithChanges.filter((m) => m.hasChanges).length > 0
? `
Expand Down
13 changes: 13 additions & 0 deletions src/stores/settingsStore.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ interface SettingsState extends MeetingSettings {
initializeStore: () => Promise<void>;
meetingRatings: Record<string, MeetingRating>;
updateMeetings: (meetings: Meeting[]) => Promise<void>;
weeklyPriorities: string;
setWeeklyPriorities: (priorities: string) => Promise<void>;
}

export const useSettingsStore = create<SettingsState>()(
Expand All @@ -61,6 +63,7 @@ export const useSettingsStore = create<SettingsState>()(
meetings: [],
isLoading: true,
meetingRatings: {},
weeklyPriorities: "",

setMeetingIcon: async (meetingId, icon) => {
await db.setMeetingIcon(meetingId, icon);
Expand Down Expand Up @@ -151,6 +154,11 @@ export const useSettingsStore = create<SettingsState>()(
set({ meetings });
},

setWeeklyPriorities: async (priorities: string) => {
await db.setSetting("weeklyPriorities", priorities);
set({ weeklyPriorities: priorities });
},

clearAllData: async () => {
await db.clearAll();
set({
Expand All @@ -162,6 +170,7 @@ export const useSettingsStore = create<SettingsState>()(
meetingStatus: {},
meetingRatings: {},
targetHours: 40,
weeklyPriorities: "",
});
},

Expand All @@ -176,6 +185,7 @@ export const useSettingsStore = create<SettingsState>()(
meetingComments,
meetingStatus,
meetingRatings,
weeklyPriorities,
] = await Promise.all([
db.getAllMeetings(),
db.getSetting<number>("targetHours"),
Expand All @@ -185,6 +195,7 @@ export const useSettingsStore = create<SettingsState>()(
db.getAllMeetingComments(),
db.getAllMeetingStatus(),
db.getAllMeetingRatings(),
db.getSetting<string>("weeklyPriorities"),
]);

// Sort meetings by rank when loading
Expand All @@ -201,6 +212,7 @@ export const useSettingsStore = create<SettingsState>()(
meetingComments,
meetingStatus,
meetingRatings,
weeklyPriorities: weeklyPriorities ?? "",
isLoading: false,
});
} catch (error) {
Expand Down Expand Up @@ -243,6 +255,7 @@ export const useSettingsStore = create<SettingsState>()(
partialize: (state) => ({
targetHours: state.targetHours,
isLoading: state.isLoading,
weeklyPriorities: state.weeklyPriorities,
}),
version: 2,
migrate: (persistedState: unknown, version) => {
Expand Down