aboutsummaryrefslogtreecommitdiff
path: root/src/client/util/GroupManager.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/client/util/GroupManager.tsx')
-rw-r--r--src/client/util/GroupManager.tsx125
1 files changed, 77 insertions, 48 deletions
diff --git a/src/client/util/GroupManager.tsx b/src/client/util/GroupManager.tsx
index 7c68fc2a0..c8d3be49b 100644
--- a/src/client/util/GroupManager.tsx
+++ b/src/client/util/GroupManager.tsx
@@ -3,11 +3,11 @@ import { observable, action, runInAction, computed } from "mobx";
import { SelectionManager } from "./SelectionManager";
import MainViewModal from "../views/MainViewModal";
import { observer } from "mobx-react";
-import { Doc, DocListCast, Opt } from "../../fields/Doc";
+import { Doc, DocListCast, Opt, DocListCastAsync } from "../../fields/Doc";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import * as fa from '@fortawesome/free-solid-svg-icons';
import { library } from "@fortawesome/fontawesome-svg-core";
-import SharingManager, { User } from "./SharingManager";
+import { User } from "./SharingManager";
import { Utils } from "../../Utils";
import * as RequestPromise from "request-promise";
import Select from 'react-select';
@@ -33,6 +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[] = [];
constructor(props: Readonly<{}>) {
super(props);
@@ -42,6 +43,26 @@ export default class GroupManager extends React.Component<{}> {
// sets up the list of users
componentDidMount() {
this.populateUsers().then(resolved => runInAction(() => this.users = resolved));
+
+ // this.getAllGroups().forEach(group => {
+ // const members: string[] = JSON.parse(StrCast(group.members));
+ // if (members.includes(Doc.CurrentUserEmail)) this.currentUserGroups.push(group);
+ // });
+ 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);
+ });
+ })
+ .finally(() => console.log(this.currentUserGroups));
+
+ // (this.GroupManagerDoc?.data as List<Doc>).forEach(group => {
+ // Promise.resolve(group).then(resolvedGroup => {
+ // const members: string[] = JSON.parse(StrCast(resolvedGroup.members));
+ // if (members.includes(Doc.CurrentUserEmail)) this.currentUserGroups.push(resolvedGroup);
+ // });
+ // });
+
}
/**
@@ -49,8 +70,8 @@ export default class GroupManager extends React.Component<{}> {
*/
populateUsers = async () => {
const userList: User[] = JSON.parse(await RequestPromise.get(Utils.prepend("/getUsers")));
- const currentUserIndex = userList.findIndex(user => user.email === Doc.CurrentUserEmail);
- currentUserIndex !== -1 && userList.splice(currentUserIndex, 1);
+ // const currentUserIndex = userList.findIndex(user => user.email === Doc.CurrentUserEmail);
+ // currentUserIndex !== -1 && userList.splice(currentUserIndex, 1);
return userList.map(user => user.email);
}
@@ -61,6 +82,11 @@ 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.
*/
@@ -89,7 +115,8 @@ export default class GroupManager extends React.Component<{}> {
/**
* @returns a list of all group documents.
*/
- private getAllGroups(): Doc[] {
+ // private ?
+ getAllGroups(): Doc[] {
const groupDoc = this.GroupManagerDoc;
return groupDoc ? DocListCast(groupDoc.data) : [];
}
@@ -98,7 +125,8 @@ export default class GroupManager extends React.Component<{}> {
* @returns a group document based on the group name.
* @param groupName
*/
- private getGroup(groupName: string): Doc | undefined {
+ // private?
+ getGroup(groupName: string): Doc | undefined {
const groupDoc = this.getAllGroups().find(group => group.groupName === groupName);
return groupDoc;
}
@@ -172,8 +200,9 @@ export default class GroupManager extends React.Component<{}> {
deleteGroup(group: Doc): boolean {
if (group) {
if (this.GroupManagerDoc && this.hasEditAccess(group)) {
+ // TODO look at this later
+ // SharingManager.Instance.setInternalGroupSharing(group, "Not Shared");
Doc.RemoveDocFromList(this.GroupManagerDoc, "data", group);
- SharingManager.Instance.setInternalGroupSharing(group, "Not Shared");
if (group === this.currentGroup) {
runInAction(() => this.currentGroup = undefined);
}
@@ -248,48 +277,48 @@ 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>
+ // 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>
- );
+ // {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.
@@ -307,7 +336,7 @@ export default class GroupManager extends React.Component<{}> {
{this.currentGroup ?
<GroupMemberView
group={this.currentGroup}
- onCloseButtonClick={() => this.currentGroup = undefined}
+ onCloseButtonClick={action(() => this.currentGroup = undefined)}
/>
: null}
<div className="group-heading">