import React from 'react'; import { api, ShareWith, ShareType, RoomShare, Room, Permission } from '../Common/Api'; import './ShareWith.scss'; import ShareSelection from '../Common/ShareSelection'; type Props = { room: Room; permission: Permission.User | Permission.Moderator; shares: RoomShare[] | undefined; setShares: (shares: RoomShare[]) => void; } const ShareWith: React.FC = ({ room, permission, shares: allShares, setShares }) => { const isOwner = room.userId === OC.currentUser; const shares = (allShares && permission === Permission.Moderator) ? allShares.filter(share => share.permission !== Permission.User) : allShares; const sharedUserIds = shares ? shares.filter(share => share.shareType === ShareType.User).map(share => share.shareWith) : []; const sharedGroupIds = shares ? shares.filter(share => share.shareType === ShareType.Group).map(share => share.shareWith) : []; const sharedCircleIds = shares ? shares.filter(share => share.shareType === ShareType.Circle).map(share => share.shareWith) : []; async function addRoomShare(shareWith: string, shareType: number, displayName: string, permission: Permission) { const roomShare = await api.createRoomShare(room.id, shareType, shareWith, permission); roomShare.shareWithDisplayName = displayName; const newShares = allShares ? [...allShares] : []; const index = newShares.findIndex(share => share.id === roomShare.id); if (index > -1) { newShares[index] = roomShare; } else { newShares.push(roomShare); } setShares(newShares); } async function deleteRoomShare(id: number) { console.log('deleteRoomShare', id); await api.deleteRoomShare(id); setShares((allShares ? [...allShares] : []).filter(share => share.id !== id)); } async function toggleAdminShare(share: RoomShare) { const newPermission = share.permission === Permission.Admin ? Permission.Moderator : Permission.Admin; return addRoomShare(share.shareWith, share.shareType, share.shareWithDisplayName || share.shareWith, newPermission); } function getAvatarUrl(userId: string) { return OC.generateUrl('/avatar/' + encodeURIComponent(userId) + '/' + 32, { user: userId, size: 32, requesttoken: OC.requestToken, }); } function renderShares(shares: RoomShare[]) { const currentUser = OC.getCurrentUser(); const ownShare = { id: -1, roomId: room.id, shareType: ShareType.User, shareWith: currentUser.uid, shareWithDisplayName: currentUser.displayName, permission: Permission.Admin, }; return ( ); } const loading = <> {t('bbb', 'Loading')}; return ( <> {shares ? renderShares(shares) : loading} {isOwner ? addRoomShare(shareOption.value.shareWith, shareOption.value.shareType, shareOption.label, permission)} excluded={{userIds: sharedUserIds, groupIds: sharedGroupIds, circleIds: sharedCircleIds}} shareType={[ShareType.User, ShareType.Group, ShareType.Circle]}/> : {t('bbb', 'You are not allowed to share this room further, because this room is shared with you.')} } ); }; export default ShareWith;