fix(tasks): allow collaborative editor sharing in task lists
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m1s

This commit is contained in:
sandrodach committed 2026-10-27 17:35:47 +01:00
1 parent 2ecf71cc42
commit e7eb94be45
2 files changed
+24 -2

No files matched your search

+23 -2
View File
@@ -24,6 +24,7 @@ export interface UnifiedShareModalProps {
teams: Team[]; teams: Team[];
collaborators: User[]; collaborators: User[];
allowRoleSelection?: boolean; // Default true (editor vs viewer) 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<void>; onAddShare: (targetType: 'team' | 'user', targetId: string, permission: 'editor' | 'viewer') => Promise<void>;
onRemoveShare: (shareId: string) => Promise<void>; onRemoveShare: (shareId: string) => Promise<void>;
} }
@@ -40,14 +41,16 @@ export const UnifiedShareModal: React.FC<UnifiedShareModalProps> = ({
teams, teams,
collaborators, collaborators,
allowRoleSelection = true, allowRoleSelection = true,
fixedPermission,
onAddShare, onAddShare,
onRemoveShare, onRemoveShare,
}) => { }) => {
const effectiveFixedPerm = fixedPermission || 'viewer';
const [shareType, setShareType] = useState<'team' | 'user'>('team'); const [shareType, setShareType] = useState<'team' | 'user'>('team');
const [selectedTeamId, setSelectedTeamId] = useState(''); const [selectedTeamId, setSelectedTeamId] = useState('');
const [selectedUser, setSelectedUser] = useState<User | null>(null); const [selectedUser, setSelectedUser] = useState<User | null>(null);
const [selectedPermission, setSelectedPermission] = useState<'editor' | 'viewer'>( const [selectedPermission, setSelectedPermission] = useState<'editor' | 'viewer'>(
allowRoleSelection ? 'editor' : 'viewer' allowRoleSelection ? 'editor' : effectiveFixedPerm
); );
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [error, setError] = useState<string | null>(null); const [error, setError] = useState<string | null>(null);
@@ -65,7 +68,7 @@ export const UnifiedShareModal: React.FC<UnifiedShareModalProps> = ({
setLoading(true); setLoading(true);
try { try {
const permToUse = allowRoleSelection ? selectedPermission : 'viewer'; const permToUse = allowRoleSelection ? selectedPermission : effectiveFixedPerm;
await onAddShare(shareType, targetId, permToUse); await onAddShare(shareType, targetId, permToUse);
setSelectedTeamId(''); setSelectedTeamId('');
setSelectedUser(null); setSelectedUser(null);
@@ -211,8 +214,17 @@ export const UnifiedShareModal: React.FC<UnifiedShareModalProps> = ({
</select> </select>
) : ( ) : (
<span className="inline-flex items-center gap-1 text-[11px] text-muted px-2 py-1 bg-panel rounded border border-border shrink-0 self-center"> <span className="inline-flex items-center gap-1 text-[11px] text-muted px-2 py-1 bg-panel rounded border border-border shrink-0 self-center">
{effectiveFixedPerm === 'editor' ? (
<>
<Check className="w-3 h-3 text-accent" />
Bearbeiten
</>
) : (
<>
<Lock className="w-3 h-3 text-faint" /> <Lock className="w-3 h-3 text-faint" />
Nur Lesen Nur Lesen
</>
)}
</span> </span>
)} )}
</div> </div>
@@ -240,8 +252,17 @@ export const UnifiedShareModal: React.FC<UnifiedShareModalProps> = ({
</select> </select>
) : ( ) : (
<span className="inline-flex items-center gap-1 text-[11px] text-muted px-2 py-1 bg-panel rounded border border-border shrink-0 self-center"> <span className="inline-flex items-center gap-1 text-[11px] text-muted px-2 py-1 bg-panel rounded border border-border shrink-0 self-center">
{effectiveFixedPerm === 'editor' ? (
<>
<Check className="w-3 h-3 text-accent" />
Bearbeiten
</>
) : (
<>
<Lock className="w-3 h-3 text-faint" /> <Lock className="w-3 h-3 text-faint" />
Nur Lesen Nur Lesen
</>
)}
</span> </span>
)} )}
</div> </div>
@@ -1978,6 +1978,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
teams={safeTeams} teams={safeTeams}
collaborators={safeCollaborators} collaborators={safeCollaborators}
allowRoleSelection={false} allowRoleSelection={false}
fixedPermission="editor"
onAddShare={async (targetType, targetId) => { onAddShare={async (targetType, targetId) => {
await api.addTaskListShare(sharingTaskList.id, { await api.addTaskListShare(sharingTaskList.id, {
targetType, targetType,