fix(tasks): allow collaborative editor sharing in task lists
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m1s
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 1m1s
This commit is contained in:
1 parent
2ecf71cc42
commit
e7eb94be45
2 files changed
+24
-2
No files matched your search
@@ -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,
|
||||||
|
|||||||
Reference in new issue
Block a user