From e7eb94be4506fad092ae5e30f0c40b3e4f308a06 Mon Sep 17 00:00:00 2001 From: Sandro Date: Tue, 27 Oct 2026 17:35:47 +0100 Subject: [PATCH] fix(tasks): allow collaborative editor sharing in task lists --- frontend/src/components/UnifiedShareModal.tsx | 33 +++++++++++++++---- frontend/src/features/triage/TasksView.tsx | 1 + 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/frontend/src/components/UnifiedShareModal.tsx b/frontend/src/components/UnifiedShareModal.tsx index 009f00e..cef88c8 100644 --- a/frontend/src/components/UnifiedShareModal.tsx +++ b/frontend/src/components/UnifiedShareModal.tsx @@ -24,6 +24,7 @@ export interface UnifiedShareModalProps { teams: Team[]; collaborators: User[]; allowRoleSelection?: boolean; // Default true (editor vs viewer) + fixedPermission?: 'editor' | 'viewer'; // When allowRoleSelection is false, force fixedPermission (default 'viewer' for documents, 'editor' for tasks/lists) onAddShare: (targetType: 'team' | 'user', targetId: string, permission: 'editor' | 'viewer') => Promise; onRemoveShare: (shareId: string) => Promise; } @@ -40,14 +41,16 @@ export const UnifiedShareModal: React.FC = ({ teams, collaborators, allowRoleSelection = true, + fixedPermission, onAddShare, onRemoveShare, }) => { + const effectiveFixedPerm = fixedPermission || 'viewer'; const [shareType, setShareType] = useState<'team' | 'user'>('team'); const [selectedTeamId, setSelectedTeamId] = useState(''); const [selectedUser, setSelectedUser] = useState(null); const [selectedPermission, setSelectedPermission] = useState<'editor' | 'viewer'>( - allowRoleSelection ? 'editor' : 'viewer' + allowRoleSelection ? 'editor' : effectiveFixedPerm ); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); @@ -65,7 +68,7 @@ export const UnifiedShareModal: React.FC = ({ setLoading(true); try { - const permToUse = allowRoleSelection ? selectedPermission : 'viewer'; + const permToUse = allowRoleSelection ? selectedPermission : effectiveFixedPerm; await onAddShare(shareType, targetId, permToUse); setSelectedTeamId(''); setSelectedUser(null); @@ -211,8 +214,17 @@ export const UnifiedShareModal: React.FC = ({ ) : ( - - Nur Lesen + {effectiveFixedPerm === 'editor' ? ( + <> + + Bearbeiten + + ) : ( + <> + + Nur Lesen + + )} )} @@ -240,8 +252,17 @@ export const UnifiedShareModal: React.FC = ({ ) : ( - - Nur Lesen + {effectiveFixedPerm === 'editor' ? ( + <> + + Bearbeiten + + ) : ( + <> + + Nur Lesen + + )} )} diff --git a/frontend/src/features/triage/TasksView.tsx b/frontend/src/features/triage/TasksView.tsx index 3c057e4..99473f9 100644 --- a/frontend/src/features/triage/TasksView.tsx +++ b/frontend/src/features/triage/TasksView.tsx @@ -1978,6 +1978,7 @@ export const TasksView: React.FC = ({ teams={safeTeams} collaborators={safeCollaborators} allowRoleSelection={false} + fixedPermission="editor" onAddShare={async (targetType, targetId) => { await api.addTaskListShare(sharingTaskList.id, { targetType,