From ac079ed8b2f5f769fcb600336183584adf39f5d9 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Fri, 28 Nov 2025 10:44:01 +0100 Subject: [PATCH] feat: implement session deletion functionality with confirmation modal in WorkshopTabs component --- dev.db | Bin 229376 -> 229376 bytes src/actions/session.ts | 21 +++ src/app/sessions/WorkshopTabs.tsx | 237 +++++++++++++++++++----------- 3 files changed, 176 insertions(+), 82 deletions(-) diff --git a/dev.db b/dev.db index dfc148ad621218c80815823c730a00eda180f7f0..13481d7c4aff160b9c8ee471174689f8e1987aff 100644 GIT binary patch delta 263 zcmZo@;A?2$n;^{?Hc`fzF>GVP8h<7}@y&t)oP3^*lFS_TqN48h?(WICnVI=1DTZbS zK#*EgkY8$&X;6}vm6eiMl>)*>21cg3hK9OE79j?fRwl+)#^!pa#s=C3237_JlO63P zUGb{GE7_>T1ayZw$Q_dd|4VMZ9%st9nPVxH{#Uv~4Oe60c|{-c`(6K3*H muKve4{oH;=5mshdW_!lz4`rAnn;*SzfApSl`=j?vauWd7txjVA delta 80 zcmZo@;A?2$n;^{?GEv5vF=S)H8vo6L3d{I-8XJ|EIP68$-R<4oCkOtQ+&@=n+kXeK&-?3)1S*Q2{%7_-~Q-5 { + startTransition(async () => { + const result = isSwot + ? await deleteSwotSession(session.id) + : await deleteMotivatorSession(session.id); + + if (result.success) { + setShowDeleteModal(false); + } else { + console.error('Error deleting session:', result.error); + } + }); + }; + return ( - - - {/* Accent bar */} -
+ <> +
+ + + {/* Accent bar */} +
- {/* Header: Icon + Title + Role badge */} -
- {icon} -

- {session.title} -

- {!session.isOwner && ( - - {session.role === 'EDITOR' ? '✏️' : '👁️'} - - )} -
- - {/* Participant + Owner info */} -

- 👤 {participant} - {!session.isOwner && ( - · par {session.user.name || session.user.email} - )} -

- - {/* Footer: Stats + Avatars + Date */} -
- {/* Stats */} -
- {isSwot ? ( - <> - {(session as SwotSession)._count.items} items - · - {(session as SwotSession)._count.actions} actions - - ) : ( - {(session as MotivatorSession)._count.cards}/10 - )} -
- - {/* Date */} - - {new Date(session.updatedAt).toLocaleDateString('fr-FR', { - day: 'numeric', - month: 'short', - })} - -
- - {/* Shared with */} - {session.isOwner && session.shares.length > 0 && ( -
- Partagé -
- {session.shares.slice(0, 3).map((share) => ( -
+ {icon} +

+ {session.title} +

+ {!session.isOwner && ( + - - {share.user.name?.split(' ')[0] || share.user.email.split('@')[0]} - - {share.role === 'EDITOR' ? '✏️' : '👁️'} -
- ))} - {session.shares.length > 3 && ( - - +{session.shares.length - 3} + {session.role === 'EDITOR' ? '✏️' : '👁️'} )}
-
+ + {/* Participant + Owner info */} +

+ 👤 {participant} + {!session.isOwner && ( + · par {session.user.name || session.user.email} + )} +

+ + {/* Footer: Stats + Avatars + Date */} +
+ {/* Stats */} +
+ {isSwot ? ( + <> + {(session as SwotSession)._count.items} items + · + {(session as SwotSession)._count.actions} actions + + ) : ( + {(session as MotivatorSession)._count.cards}/10 + )} +
+ + {/* Date */} + + {new Date(session.updatedAt).toLocaleDateString('fr-FR', { + day: 'numeric', + month: 'short', + })} + +
+ + {/* Shared with */} + {session.isOwner && session.shares.length > 0 && ( +
+ Partagé +
+ {session.shares.slice(0, 3).map((share) => ( +
+ + {share.user.name?.split(' ')[0] || share.user.email.split('@')[0]} + + {share.role === 'EDITOR' ? '✏️' : '👁️'} +
+ ))} + {session.shares.length > 3 && ( + + +{session.shares.length - 3} + + )} +
+
+ )} + + + + {/* Delete button - only for owner */} + {session.isOwner && ( + )} - - +
+ + {/* Delete confirmation modal */} + setShowDeleteModal(false)} + title="Supprimer l'atelier" + size="sm" + > +
+

+ Êtes-vous sûr de vouloir supprimer l'atelier "{session.title}" ? +

+

+ Cette action est irréversible. Toutes les données seront perdues. +

+ + + + +
+
+ ); }