diff options
Diffstat (limited to 'src/client/util')
-rw-r--r-- | src/client/util/GroupManager.tsx | 60 | ||||
-rw-r--r-- | src/client/util/SharingManager.tsx | 42 |
2 files changed, 28 insertions, 74 deletions
diff --git a/src/client/util/GroupManager.tsx b/src/client/util/GroupManager.tsx index b14dcf55b..83b206f94 100644 --- a/src/client/util/GroupManager.tsx +++ b/src/client/util/GroupManager.tsx @@ -33,7 +33,7 @@ export default class GroupManager extends React.Component<{}> { @observable private selectedUsers: UserOptions[] | null = null; // list of users selected in the "Select users" dropdown. @observable currentGroup: Opt<Doc>; // the currently selected group. private inputRef: React.RefObject<HTMLInputElement> = React.createRef(); // the ref for the input box. - private currentUserGroups: Doc[] = []; + currentUserGroups: string[] = []; constructor(props: Readonly<{}>) { super(props); @@ -51,7 +51,7 @@ export default class GroupManager extends React.Component<{}> { DocListCastAsync(this.GroupManagerDoc?.data).then(groups => { groups?.forEach(group => { const members: string[] = JSON.parse(StrCast(group.members)); - if (members.includes(Doc.CurrentUserEmail)) this.currentUserGroups.push(group); + if (members.includes(Doc.CurrentUserEmail)) this.currentUserGroups.push(StrCast(group.groupName)); }); }) .finally(() => console.log(this.currentUserGroups)); @@ -82,11 +82,6 @@ export default class GroupManager extends React.Component<{}> { return this.users.map(user => ({ label: user, value: user })); } - - get groupMemberships() { - return this.currentUserGroups; - } - /** * Makes the GroupManager visible. */ @@ -151,6 +146,11 @@ export default class GroupManager extends React.Component<{}> { ); } + getGroupMembers(group: string | Doc): string[] { + if (group instanceof Doc) return JSON.parse(StrCast(group.members)) as string[]; + else return JSON.parse(StrCast(this.getGroup(group)!.members)) as string[]; + } + /** * @returns the members of the admin group. */ @@ -280,52 +280,6 @@ export default class GroupManager extends React.Component<{}> { } /** - * A getter that @returns the interface rendered to view an individual group. - */ - // private get editingInterface() { - // const members: string[] = this.currentGroup ? JSON.parse(StrCast(this.currentGroup.members)) : []; - // const options: UserOptions[] = this.currentGroup ? this.options.filter(option => !(JSON.parse(StrCast(this.currentGroup!.members)) as string[]).includes(option.value)) : []; - // return (!this.currentGroup ? null : - // <div className="editing-interface"> - // <div className="editing-header"> - // <b>{this.currentGroup.groupName}</b> - // <div className={"close-button"} onClick={action(() => this.currentGroup = undefined)}> - // <FontAwesomeIcon icon={fa.faWindowClose} size={"lg"} /> - // </div> - - // {this.hasEditAccess(this.currentGroup) ? - // <div className="group-buttons"> - // <div className="add-member-dropdown"> - // <Select - // // isMulti={true} - // isSearchable={true} - // options={options} - // onChange={selectedOption => this.addMemberToGroup(this.currentGroup!, (selectedOption as UserOptions).value)} - // placeholder={"Add members"} - // value={null} - // closeMenuOnSelect={true} - // /> - // </div> - // <button onClick={() => this.deleteGroup(this.currentGroup!)}>Delete group</button> - // </div> : - // null} - // </div> - // <div className="editing-contents"> - // {members.map(member => ( - // <div className="editing-row"> - // <div className="user-email"> - // {member} - // </div> - // {this.hasEditAccess(this.currentGroup!) ? <button onClick={() => this.removeMemberFromGroup(this.currentGroup!, member)}> Remove </button> : null} - // </div> - // ))} - // </div> - // </div> - // ); - - // } - - /** * A getter that @returns the main interface for the GroupManager. */ private get groupInterface() { diff --git a/src/client/util/SharingManager.tsx b/src/client/util/SharingManager.tsx index e74824581..bec6b973b 100644 --- a/src/client/util/SharingManager.tsx +++ b/src/client/util/SharingManager.tsx @@ -43,18 +43,18 @@ export enum SharingPermissions { // [SharingPermissions.Edit, "green"] // ]); -const HierarchyMapping = new Map<string, string>([ - [SharingPermissions.None, "0"], - [SharingPermissions.View, "1"], - [SharingPermissions.Add, "2"], - [SharingPermissions.Edit, "3"], +// export const HierarchyMapping = new Map<string, number>([ +// [SharingPermissions.None, 0], +// [SharingPermissions.View, 1], +// [SharingPermissions.Add, 2], +// [SharingPermissions.Edit, 3] - ["0", SharingPermissions.None], - ["1", SharingPermissions.View], - ["2", SharingPermissions.Add], - ["3", SharingPermissions.Edit] +// // ["0", SharingPermissions.None], +// // ["1", SharingPermissions.View], +// // ["2", SharingPermissions.Add], +// // ["3", SharingPermissions.Edit] -]); +// ]); interface GroupOptions { label: string; @@ -161,14 +161,6 @@ export default class SharingManager extends React.Component<{}> { const ACL = `ACL-${StrCast(group.groupName)}`; target[ACL] = permission; - // const sharingDoc = this.sharingDoc!; - // if (permission === SharingPermissions.None) { - // const metadata = sharingDoc[StrCast(group.groupName)]; - // if (metadata) sharingDoc[StrCast(group.groupName)] = undefined; - // } - // else { - // sharingDoc[StrCast(group.groupName)] = permission; - // } group.docsShared ? Doc.IndexOf(target, DocListCast(group.docsShared)) === -1 && (group.docsShared as List<Doc>).push(target) : group.docsShared = new List<Doc>([target]); @@ -206,7 +198,7 @@ export default class SharingManager extends React.Component<{}> { const users: ValidatedUser[] = this.users.filter(user => members.includes(user.user.email)); users.forEach(user => Doc.RemoveDocFromList(user.notificationDoc, storage, doc)); - }) + }); } } @@ -224,8 +216,16 @@ export default class SharingManager extends React.Component<{}> { target[ACL] = permission; - if (permission !== SharingPermissions.None) Doc.IndexOf(target, DocListCast(notificationDoc[storage])) === -1 && Doc.AddDocToList(notificationDoc, storage, target); - else Doc.IndexOf(target, DocListCast(notificationDoc[storage])) !== -1 && Doc.RemoveDocFromList(notificationDoc, storage, target); + if (permission !== SharingPermissions.None) { + !this.sharedUsers.includes(recipient) && this.sharedUsers.push(recipient); + + Doc.IndexOf(target, DocListCast(notificationDoc[storage])) === -1 && Doc.AddDocToList(notificationDoc, storage, target); + } + else { + const index = this.sharedUsers.findIndex(user => user === recipient); + index !== -1 && this.sharedUsers.splice(index, 1); + Doc.IndexOf(target, DocListCast(notificationDoc[storage])) !== -1 && Doc.RemoveDocFromList(notificationDoc, storage, target); + } } |