feat: enhance session management by implementing edit permissions for team admins and updating session components to reflect new access controls
This commit is contained in:
@@ -47,7 +47,7 @@ export default async function MotivatorSessionPage({ params }: MotivatorSessionP
|
||||
<EditableMotivatorTitle
|
||||
sessionId={session.id}
|
||||
initialTitle={session.title}
|
||||
isOwner={session.isOwner}
|
||||
canEdit={session.canEdit}
|
||||
/>
|
||||
<div className="mt-2">
|
||||
<CollaboratorDisplay collaborator={session.resolvedParticipant} size="lg" showEmail />
|
||||
|
||||
@@ -65,6 +65,8 @@ interface SwotSession {
|
||||
shares: Share[];
|
||||
_count: { items: number; actions: number };
|
||||
workshopType: 'swot';
|
||||
isTeamCollab?: true;
|
||||
canEdit?: boolean;
|
||||
}
|
||||
|
||||
interface MotivatorSession {
|
||||
@@ -79,6 +81,8 @@ interface MotivatorSession {
|
||||
shares: Share[];
|
||||
_count: { cards: number };
|
||||
workshopType: 'motivators';
|
||||
isTeamCollab?: true;
|
||||
canEdit?: boolean;
|
||||
}
|
||||
|
||||
interface YearReviewSession {
|
||||
@@ -94,6 +98,8 @@ interface YearReviewSession {
|
||||
shares: Share[];
|
||||
_count: { items: number };
|
||||
workshopType: 'year-review';
|
||||
isTeamCollab?: true;
|
||||
canEdit?: boolean;
|
||||
}
|
||||
|
||||
interface WeeklyCheckInSession {
|
||||
@@ -109,6 +115,8 @@ interface WeeklyCheckInSession {
|
||||
shares: Share[];
|
||||
_count: { items: number };
|
||||
workshopType: 'weekly-checkin';
|
||||
isTeamCollab?: true;
|
||||
canEdit?: boolean;
|
||||
}
|
||||
|
||||
interface WeatherSession {
|
||||
@@ -122,6 +130,8 @@ interface WeatherSession {
|
||||
shares: Share[];
|
||||
_count: { entries: number };
|
||||
workshopType: 'weather';
|
||||
isTeamCollab?: true;
|
||||
canEdit?: boolean;
|
||||
}
|
||||
|
||||
type AnySession = SwotSession | MotivatorSession | YearReviewSession | WeeklyCheckInSession | WeatherSession;
|
||||
@@ -732,19 +742,16 @@ function SessionCard({ session, isTeamCollab = false }: { session: AnySession; i
|
||||
return (
|
||||
<>
|
||||
<div className="relative group">
|
||||
{isTeamCollab ? (
|
||||
<div
|
||||
className="cursor-default"
|
||||
title="Atelier non partagé avec vous – visible en tant qu'admin d'équipe"
|
||||
>
|
||||
{cardContent}
|
||||
</div>
|
||||
) : (
|
||||
<Link href={href}>{cardContent}</Link>
|
||||
)}
|
||||
<Link
|
||||
href={href}
|
||||
className={isTeamCollab ? 'cursor-pointer' : ''}
|
||||
title={isTeamCollab ? "Atelier de l'équipe – éditable en tant qu'admin" : undefined}
|
||||
>
|
||||
{cardContent}
|
||||
</Link>
|
||||
|
||||
{/* Action buttons - only for owner */}
|
||||
{session.isOwner && (
|
||||
{/* Edit: owner, EDITOR, or team admin | Delete: owner or team admin only (not EDITOR) */}
|
||||
{(session.isOwner || session.role === 'EDITOR' || session.isTeamCollab) && (
|
||||
<div className="absolute top-3 right-3 flex gap-1 opacity-0 group-hover:opacity-100 transition-opacity">
|
||||
<button
|
||||
onClick={(e) => {
|
||||
@@ -764,6 +771,7 @@ function SessionCard({ session, isTeamCollab = false }: { session: AnySession; i
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
{(session.isOwner || session.isTeamCollab) && (
|
||||
<button
|
||||
onClick={(e) => {
|
||||
e.preventDefault();
|
||||
@@ -782,6 +790,7 @@ function SessionCard({ session, isTeamCollab = false }: { session: AnySession; i
|
||||
/>
|
||||
</svg>
|
||||
</button>
|
||||
)}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
|
||||
@@ -48,7 +48,7 @@ export default async function SessionPage({ params }: SessionPageProps) {
|
||||
<EditableSessionTitle
|
||||
sessionId={session.id}
|
||||
initialTitle={session.title}
|
||||
isOwner={session.isOwner}
|
||||
canEdit={session.canEdit}
|
||||
/>
|
||||
<div className="mt-2">
|
||||
<CollaboratorDisplay
|
||||
|
||||
@@ -51,7 +51,7 @@ export default async function WeatherSessionPage({ params }: WeatherSessionPageP
|
||||
<EditableWeatherTitle
|
||||
sessionId={session.id}
|
||||
initialTitle={session.title}
|
||||
isOwner={session.isOwner}
|
||||
canEdit={session.canEdit}
|
||||
/>
|
||||
</div>
|
||||
<div className="flex items-center gap-3">
|
||||
|
||||
@@ -62,7 +62,7 @@ export default async function WeeklyCheckInSessionPage({ params }: WeeklyCheckIn
|
||||
<EditableWeeklyCheckInTitle
|
||||
sessionId={session.id}
|
||||
initialTitle={session.title}
|
||||
isOwner={session.isOwner}
|
||||
canEdit={session.canEdit}
|
||||
/>
|
||||
<div className="mt-2">
|
||||
<CollaboratorDisplay collaborator={session.resolvedParticipant} size="lg" showEmail />
|
||||
|
||||
@@ -47,7 +47,7 @@ export default async function YearReviewSessionPage({ params }: YearReviewSessio
|
||||
<EditableYearReviewTitle
|
||||
sessionId={session.id}
|
||||
initialTitle={session.title}
|
||||
isOwner={session.isOwner}
|
||||
canEdit={session.canEdit}
|
||||
/>
|
||||
<div className="mt-2">
|
||||
<CollaboratorDisplay collaborator={session.resolvedParticipant} size="lg" showEmail />
|
||||
|
||||
Reference in New Issue
Block a user