@@ -48,6 +48,14 @@ import {
4848import { Note , noteToString } from "@/types/note" ;
4949import { useAuthStore } from "@/lib/providers/auth-store-provider" ;
5050import { 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" >
0 commit comments