diff options
author | srichman333 <sarah_n_richman@brown.edu> | 2023-06-26 10:38:14 -0400 |
---|---|---|
committer | srichman333 <sarah_n_richman@brown.edu> | 2023-06-26 10:38:14 -0400 |
commit | c258f2ec493ebb84c6f8b20a723ed8df001e3927 (patch) | |
tree | 29cb66cae39ddbd21bb44d99fd9205cb41839e0e /src/client/util/SharingManager.tsx | |
parent | a807da6b6fed067888f817e2273b29b8b6219e52 (diff) |
layout acl updates - SharingManager works
Diffstat (limited to 'src/client/util/SharingManager.tsx')
-rw-r--r-- | src/client/util/SharingManager.tsx | 60 |
1 files changed, 52 insertions, 8 deletions
diff --git a/src/client/util/SharingManager.tsx b/src/client/util/SharingManager.tsx index a95874fd7..59a88b404 100644 --- a/src/client/util/SharingManager.tsx +++ b/src/client/util/SharingManager.tsx @@ -6,11 +6,11 @@ import { observer } from 'mobx-react'; import * as React from 'react'; import Select from 'react-select'; import * as RequestPromise from 'request-promise'; -import { Doc, DocListCast, DocListCastAsync, HierarchyMapping, ReverseHierarchyMap } from '../../fields/Doc'; +import { Doc, DocCastAsync, DocListCast, DocListCastAsync, HierarchyMapping, ReverseHierarchyMap } from '../../fields/Doc'; import { AclAdmin, AclPrivate, AclUnset, DocAcl, DocData } from '../../fields/DocSymbols'; import { Id } from '../../fields/FieldSymbols'; import { List } from '../../fields/List'; -import { NumCast, StrCast } from '../../fields/Types'; +import { DocCast, NumCast, StrCast } from '../../fields/Types'; import { distributeAcls, GetEffectiveAcl, normalizeEmail, SharingPermissions, TraceMobx } from '../../fields/util'; import { Utils } from '../../Utils'; import { DocServer } from '../DocServer'; @@ -24,6 +24,7 @@ import { GroupManager, UserOptions } from './GroupManager'; import { GroupMemberView } from './GroupMemberView'; import { SelectionManager } from './SelectionManager'; import './SharingManager.scss'; +import { Docs } from '../documents/Documents'; export interface User { email: string; @@ -199,7 +200,7 @@ export class SharingManager extends React.Component<{}> { setInternalGroupSharing = (group: Doc | { title: string }, permission: string, targetDoc?: Doc) => { const target = targetDoc || this.targetDoc!; const key = normalizeEmail(StrCast(group.title)); - const acl = `acl-${key}`; + let acl = `acl-${key}`; const isDashboard = DocListCast(Doc.MyDashboards.data).indexOf(target) !== -1; // setting the same acl for a docs within the doc being shared if they haven't been set yet @@ -213,6 +214,9 @@ export class SharingManager extends React.Component<{}> { const docs = SelectionManager.Views().length < 2 ? [target] : SelectionManager.Views().map(docView => docView.props.Document); + if (acl == 'acl-Public' && this.layoutDocAcls){ + acl = 'acl-Public-layout'; + } // ! ensures it returns true if document has been shared successfully, false otherwise return !docs .map(doc => (this.layoutDocAcls ? doc : doc[DocData])) @@ -511,7 +515,7 @@ export class SharingManager extends React.Component<{}> { docs = newDocs.filter(doc => GetEffectiveAcl(doc) === AclAdmin); } - const targetDoc = this.layoutDocAcls ? docs[0] : docs[0]?.[DocData]; + const targetDoc: Doc = this.layoutDocAcls ? docs[0] : docs[0]?.[DocData]; // tslint:disable-next-line: no-unnecessary-callback-wrapper const effectiveAcls = docs.map(doc => GetEffectiveAcl(doc)); @@ -527,7 +531,24 @@ export class SharingManager extends React.Component<{}> { .map(({ user, linkDatabase, sharingDoc, userColor }) => { const userKey = `acl-${normalizeEmail(user.email)}`; const uniform = docs.map(doc => (this.layoutDocAcls ? doc : doc[DocData])).every(doc => doc?.[DocAcl]?.[userKey] === docs[0]?.[DocAcl]?.[userKey]); - const permissions = uniform ? StrCast(targetDoc?.[userKey]) : '-multiple-'; + // const permissions = uniform ? StrCast(targetDoc?.[userKey]) : '-multiple-'; + let permissions = this.layoutDocAcls ? (targetDoc[DocAcl][userKey] ? HierarchyMapping.get(targetDoc[DocAcl][userKey])?.name : StrCast(Doc.GetProto(targetDoc)[userKey])) : StrCast(targetDoc[userKey]); + if (this.layoutDocAcls){ + if (targetDoc[DocAcl][userKey]){ + permissions = HierarchyMapping.get(targetDoc[DocAcl][userKey])?.name; + } + else{ + if (targetDoc['embedContainer']){ + permissions = StrCast(Doc.GetProto(DocCast(targetDoc['embedContainer']))[userKey]); + } + else{ + permissions = uniform ? StrCast(Doc.GetProto(targetDoc)?.[userKey]) : '-multiple-'; + } + } + } + else{ + permissions = uniform ? StrCast(targetDoc?.[userKey]) : '-multiple-'; + } return !permissions ? null : ( <div key={userKey} className={'container'}> @@ -579,12 +600,35 @@ export class SharingManager extends React.Component<{}> { const groupListMap: (Doc | { title: string })[] = groups.filter(({ title }) => (docs.length > 1 ? commonKeys.includes(`acl-${normalizeEmail(StrCast(title))}`) : true)); groupListMap.unshift({ title: 'Public' }); //, { title: "ALL" }); const groupListContents = groupListMap.map(group => { - const groupKey = `acl-${StrCast(group.title)}`; + let groupKey = `acl-${StrCast(group.title)}`; const uniform = docs .map(doc => (this.layoutDocAcls ? doc : doc[DocData])) .every(doc => (this.layoutDocAcls ? doc?.[DocAcl]?.[groupKey] === docs[0]?.[DocAcl]?.[groupKey] : doc?.[DocData]?.[DocAcl]?.[groupKey] === docs[0]?.[DocData]?.[DocAcl]?.[groupKey])); - const permissions = uniform ? StrCast(targetDoc?.[`acl-${StrCast(group.title)}`]) : '-multiple-'; - + // const permissions = uniform ? StrCast(targetDoc?.[`acl-${StrCast(group.title)}`]) : '-multiple-'; + let permissions = this.layoutDocAcls ? (targetDoc[DocAcl][groupKey] ? HierarchyMapping.get(targetDoc[DocAcl][groupKey])?.name : StrCast(Doc.GetProto(targetDoc)[groupKey])) : StrCast(targetDoc[groupKey]); + if (this.layoutDocAcls){ + if (groupKey == 'acl-Public'){ + groupKey = 'acl-Public-layout' + } + if (targetDoc[DocAcl][groupKey]){ + permissions = HierarchyMapping.get(targetDoc[DocAcl][groupKey])?.name; + } + else{ + if (groupKey == 'acl-Public-layout'){ + groupKey = 'acl-Public' + } + if (targetDoc['embedContainer']){ + permissions = StrCast(Doc.GetProto(DocCast(targetDoc['embedContainer']))[groupKey]); + } + else{ + permissions = uniform ? StrCast(Doc.GetProto(targetDoc)?.[groupKey]) : '-multiple-'; + } + } + } + else{ + permissions = uniform ? StrCast(targetDoc?.[groupKey]) : '-multiple-'; + } + return !permissions ? null : ( <div key={groupKey} className={'container'}> <div className={'padding'}>{StrCast(group.title)}</div> |