diff options
Diffstat (limited to 'src/client/util')
| -rw-r--r-- | src/client/util/GroupManager.tsx | 2 | ||||
| -rw-r--r-- | src/client/util/SharingManager.tsx | 26 | 
2 files changed, 15 insertions, 13 deletions
| diff --git a/src/client/util/GroupManager.tsx b/src/client/util/GroupManager.tsx index 6458de0ed..a9059ff3d 100644 --- a/src/client/util/GroupManager.tsx +++ b/src/client/util/GroupManager.tsx @@ -1,5 +1,5 @@  import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; -import { action, computed, observable, runInAction } from "mobx"; +import { action, autorun, computed, Lambda, observable, reaction, runInAction } from "mobx";  import { observer } from "mobx-react";  import * as React from "react";  import Select from 'react-select'; diff --git a/src/client/util/SharingManager.tsx b/src/client/util/SharingManager.tsx index 062852e36..53a6b2587 100644 --- a/src/client/util/SharingManager.tsx +++ b/src/client/util/SharingManager.tsx @@ -78,7 +78,16 @@ export class SharingManager extends React.Component<{}> {      @observable private showGroupOptions: boolean = false; // // whether to show groups as options when sharing (in the react-select component)      private populating: boolean = false; // whether the list of users is populating or not      @observable private layoutDocAcls: boolean = false; // whether the layout doc or data doc's acls are to be used -    @observable private myDocAcls: boolean = false; +    @observable private myDocAcls: boolean = false; // whether the My Docs checkbox is selected or not + +    // maps acl symbols to SharingPermissions +    private AclMap = new Map<symbol, string>([ +        [AclPrivate, SharingPermissions.None], +        [AclReadonly, SharingPermissions.View], +        [AclAddonly, SharingPermissions.Add], +        [AclEdit, SharingPermissions.Edit], +        [AclAdmin, SharingPermissions.Admin] +    ]);      // private get linkVisible() {      //     return this.sharingDoc ? this.sharingDoc[PublicKey] !== SharingPermissions.None : false; @@ -397,20 +406,12 @@ export class SharingManager extends React.Component<{}> {      }      distributeOverCollection = (targetDoc?: Doc) => { -        const AclMap = new Map<symbol, string>([ -            [AclPrivate, SharingPermissions.None], -            [AclReadonly, SharingPermissions.View], -            [AclAddonly, SharingPermissions.Add], -            [AclEdit, SharingPermissions.Edit], -            [AclAdmin, SharingPermissions.Admin] -        ]); -          const target = targetDoc || this.targetDoc!;          const docs = SelectionManager.SelectedDocuments().length < 2 ? [target] : SelectionManager.SelectedDocuments().map(docView => docView.props.Document);          docs.forEach(doc => {              for (const [key, value] of Object.entries(doc[AclSym])) { -                distributeAcls(key, AclMap.get(value)! as SharingPermissions, target); +                distributeAcls(key, this.AclMap.get(value)! as SharingPermissions, target);              }          });      } @@ -471,7 +472,8 @@ export class SharingManager extends React.Component<{}> {          const targetDoc = docs[0];          // tslint:disable-next-line: no-unnecessary-callback-wrapper -        const admin = this.myDocAcls ? Boolean(docs.length) : docs.map(doc => GetEffectiveAcl(doc)).every(acl => acl === AclAdmin); // if the user has admin access to all selected docs +        const effectiveAcls = docs.map(doc => GetEffectiveAcl(doc)); +        const admin = this.myDocAcls ? Boolean(docs.length) : effectiveAcls.every(acl => acl === AclAdmin);          // users in common between all docs          const commonKeys = intersection(...docs.map(doc => this.layoutDocAcls ? doc?.[AclSym] && Object.keys(doc[AclSym]) : doc?.[DataSym]?.[AclSym] && Object.keys(doc[DataSym][AclSym]))); @@ -535,7 +537,7 @@ export class SharingManager extends React.Component<{}> {                          <span className={"padding"}>Me</span>                          <div className="edit-actions">                              <div className={"permissions-dropdown"}> -                                {targetDoc?.[`acl-${Doc.CurrentUserEmailNormalized}`]} +                                {effectiveAcls.every(acl => acl === effectiveAcls[0]) ? this.AclMap.get(effectiveAcls[0])! : "-multiple-"}                              </div>                          </div>                      </div> | 
