Skip to content

Commit ee13387

Browse files
authored
Merge pull request #28 from Jim-Hodapp-Coaching/add_agreements_to_coaching_session
Add agreements component and use it on the coaching sessions page
2 parents 3f9c6f6 + b6aa2fe commit ee13387

9 files changed

Lines changed: 795 additions & 26 deletions

File tree

src/app/coaching-sessions/[id]/page.tsx

Lines changed: 72 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,14 @@ import {
4848
import { Note, noteToString } from "@/types/note";
4949
import { useAuthStore } from "@/lib/providers/auth-store-provider";
5050
import { Id } from "@/types/general";
51+
import { AgreementsList } from "@/components/ui/coaching-sessions/agreements-list";
52+
import { Agreement, agreementToString } from "@/types/agreement";
53+
import {
54+
createAgreement,
55+
deleteAgreement,
56+
updateAgreement,
57+
} from "@/lib/api/agreements";
58+
import { siteConfig } from "@/site.config";
5159

5260
// export const metadata: Metadata = {
5361
// title: "Coaching Session",
@@ -91,6 +99,40 @@ export default function CoachingSessionsPage() {
9199
fetchNote();
92100
}, [coachingSessionId, noteId]);
93101

102+
const handleAgreementAdded = (body: string): Promise<Agreement> => {
103+
// Calls the backend endpoint that creates and stores a full Agreement entity
104+
return createAgreement(coachingSessionId, userId, body)
105+
.then((agreement) => {
106+
return agreement;
107+
})
108+
.catch((err) => {
109+
console.error("Failed to create new Agreement: " + err);
110+
throw err;
111+
});
112+
};
113+
114+
const handleAgreementEdited = (id: Id, body: string): Promise<Agreement> => {
115+
return updateAgreement(id, coachingSessionId, userId, body)
116+
.then((agreement) => {
117+
return agreement;
118+
})
119+
.catch((err) => {
120+
console.error("Failed to update Agreement (id: " + id + "): " + err);
121+
throw err;
122+
});
123+
};
124+
125+
const handleAgreementDeleted = (id: Id): Promise<Agreement> => {
126+
return deleteAgreement(id)
127+
.then((agreement) => {
128+
return agreement;
129+
})
130+
.catch((err) => {
131+
console.error("Failed to update Agreement (id: " + id + "): " + err);
132+
throw err;
133+
});
134+
};
135+
94136
const handleInputChange = (value: string) => {
95137
setNote(value);
96138

@@ -188,28 +230,41 @@ export default function CoachingSessionsPage() {
188230
</div>
189231
<CollapsibleContent className="px-4">
190232
<div className="flex-col space-y-4 sm:flex">
191-
<Tabs defaultValue="agreements" className="flex-1">
192-
<TabsList className="grid w-full grid-cols-3">
193-
<TabsTrigger value="agreements">Agreements</TabsTrigger>
194-
<TabsTrigger value="actions">Actions</TabsTrigger>
195-
<TabsTrigger value="program">Program</TabsTrigger>
196-
</TabsList>
197-
<TabsContent value="agreements">
198-
<div className="bg-gray-500 text-white p-4">Agreements</div>
199-
</TabsContent>
200-
<TabsContent value="actions">
201-
<div className="bg-red-500 text-white p-4">Actions</div>
202-
</TabsContent>
203-
<TabsContent value="program">
204-
<div className="bg-blue-500 text-white p-4">Program</div>
205-
</TabsContent>
206-
</Tabs>
233+
<div className="grid flex-1 items-start gap-4 sm:py-0 md:gap-8">
234+
<Tabs defaultValue="agreements">
235+
<div className="flex items-center">
236+
<TabsList className="grid grid-cols-3">
237+
<TabsTrigger value="agreements">Agreements</TabsTrigger>
238+
<TabsTrigger value="actions">Actions</TabsTrigger>
239+
<TabsTrigger value="program">Program</TabsTrigger>
240+
</TabsList>
241+
</div>
242+
<TabsContent value="agreements">
243+
<div className="w-full">
244+
<AgreementsList
245+
coachingSessionId={coachingSessionId}
246+
userId={userId}
247+
locale={siteConfig.locale}
248+
onAgreementAdded={handleAgreementAdded}
249+
onAgreementEdited={handleAgreementEdited}
250+
onAgreementDeleted={handleAgreementDeleted}
251+
></AgreementsList>
252+
</div>
253+
</TabsContent>
254+
<TabsContent value="actions">
255+
{/* <div className="bg-red-500 text-white">Actions</div> */}
256+
</TabsContent>
257+
<TabsContent value="program">
258+
{/* <div className="bg-blue-500 text-white">Program</div> */}
259+
</TabsContent>
260+
</Tabs>
261+
</div>
207262
</div>
208263
</CollapsibleContent>
209264
</Collapsible>
210265
</div>
211266

212-
<div className="row-span-1 h-full py-6 px-4">
267+
<div className="row-span-1 h-full py-4 px-4">
213268
<div className="grid h-full items-stretch gap-6 md:grid-cols-[1fr_200px]">
214269
<div className="flex-col space-y-4 sm:flex md:order-1">
215270
<Tabs defaultValue="notes" className="flex-1">

src/app/login/page.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Link from "next/link";
55
import { cn } from "@/lib/utils";
66
import { buttonVariants } from "@/components/ui/button";
77
import { UserAuthForm } from "@/components/user-auth-form";
8+
import { siteConfig } from "@/site.config";
89

910
export const metadata: Metadata = {
1011
title: "Authentication",
@@ -55,13 +56,11 @@ export default function AuthenticationPage() {
5556
>
5657
<path d="M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3" />
5758
</svg>
58-
Refactor Coaching & Mentoring
59+
{siteConfig.name}
5960
</div>
6061
<div className="relative z-20 mt-auto">
6162
<blockquote className="space-y-2">
62-
<p className="text-lg">
63-
A coaching and mentorship platform for engineering leaders and software engineers.
64-
</p>
63+
<p className="text-lg">{siteConfig.description}</p>
6564
</blockquote>
6665
</div>
6766
</div>

0 commit comments

Comments
 (0)