From b2404d0cdca42fdd84392a4550d8caa7191646ec Mon Sep 17 00:00:00 2001
From: Matilde Park
Date: Thu, 20 Feb 2020 18:27:09 -0500
Subject: [PATCH] chat: add groupResults prop, fix peer set
---
.../src/js/components/lib/invite-search.js | 170 ++++++++++--------
pkg/interface/chat/src/js/components/new.js | 1 +
2 files changed, 99 insertions(+), 72 deletions(-)
diff --git a/pkg/interface/chat/src/js/components/lib/invite-search.js b/pkg/interface/chat/src/js/components/lib/invite-search.js
index d3aac8ee1b..a1f152b675 100644
--- a/pkg/interface/chat/src/js/components/lib/invite-search.js
+++ b/pkg/interface/chat/src/js/components/lib/invite-search.js
@@ -1,8 +1,7 @@
-import React, { Component } from 'react';
+import React, { Component } from "react";
import urbitOb from "urbit-ob";
import { Sigil } from "../lib/icons/sigil";
-
export class InviteSearch extends Component {
constructor(props) {
super(props);
@@ -15,7 +14,7 @@ export class InviteSearch extends Component {
ships: []
},
inviteError: false
- }
+ };
this.search = this.search.bind(this);
}
@@ -34,10 +33,13 @@ export class InviteSearch extends Component {
groups = groups.filter(e => !e.startsWith("/~/"));
let peers = [],
- peerSet = new Set();
+ peerSet = new Set();
Object.keys(this.props.groups).map(group => {
if (this.props.groups[group].size > 0) {
- peerSet.add(...this.props.groups[group]);
+ let groupEntries = this.props.groups[group].values();
+ for (let member of groupEntries) {
+ peerSet.add(member);
+ }
}
});
peers = Array.from(peerSet);
@@ -48,23 +50,28 @@ export class InviteSearch extends Component {
search(event) {
let searchTerm = event.target.value.toLowerCase().replace("~", "");
- this.setState({searchValue: event.target.value});
+ this.setState({ searchValue: event.target.value });
if (searchTerm.length < 2) {
- this.setState({searchResults: { groups: [], ships: [] }})
+ this.setState({ searchResults: { groups: [], ships: [] } });
}
if (searchTerm.length > 2) {
if (this.state.inviteError === true) {
- this.setState({inviteError: false});
+ this.setState({ inviteError: false });
+ }
+
+ let groupMatches = [];
+ if (this.props.groupResults) {
+ groupMatches = this.state.groups.filter(e => {
+ return e.includes(searchTerm);
+ });
}
- let groupMatches = this.state.groups.filter(e => {
- return e.includes(searchTerm);
- });
let shipMatches = this.state.peers.filter(e => {
return e.includes(searchTerm) && !this.props.invites.ships.includes(e);
});
+
this.setState({
searchResults: { groups: groupMatches, ships: shipMatches }
});
@@ -74,34 +81,30 @@ export class InviteSearch extends Component {
isValid = false;
}
- if ((shipMatches.length === 0) && (isValid)) {
+ if (shipMatches.length === 0 && isValid) {
shipMatches.push(searchTerm);
this.setState({
searchResults: { groups: groupMatches, ships: shipMatches }
- })
+ });
}
}
}
deleteGroup() {
let { ships } = this.props.invites;
- this.setState(
- {
- searchValue: "",
- searchResults: { groups: [], ships: [] }
- }
- );
+ this.setState({
+ searchValue: "",
+ searchResults: { groups: [], ships: [] }
+ });
this.props.setInvite({ groups: [], ships: ships });
}
deleteShip(ship) {
let { groups, ships } = this.props.invites;
- this.setState(
- {
- searchValue: "",
- searchResults: { groups: [], ships: [] }
- }
- );
+ this.setState({
+ searchValue: "",
+ searchResults: { groups: [], ships: [] }
+ });
ships = ships.filter(e => {
return e !== ship;
});
@@ -109,23 +112,19 @@ export class InviteSearch extends Component {
}
addGroup(group) {
- this.setState(
- {
- searchValue: "",
- searchResults: { groups: [], ships: [] }
- }
- );
+ this.setState({
+ searchValue: "",
+ searchResults: { groups: [], ships: [] }
+ });
this.props.setInvite({ groups: [group], ships: [] });
}
addShip(ship) {
let { groups, ships } = this.props.invites;
- this.setState(
- {
- searchValue: "",
- searchResults: { groups: [], ships: [] }
- }
- );
+ this.setState({
+ searchValue: "",
+ searchResults: { groups: [], ships: [] }
+ });
ships.push(ship);
if (groups.length > 0) {
return false;
@@ -134,7 +133,10 @@ export class InviteSearch extends Component {
}
submitShipToAdd(ship) {
- let searchTerm = ship.toLowerCase().replace("~", "").trim();
+ let searchTerm = ship
+ .toLowerCase()
+ .replace("~", "")
+ .trim();
let isValid = true;
if (!urbitOb.isValidPatp("~" + searchTerm)) {
isValid = false;
@@ -156,8 +158,8 @@ export class InviteSearch extends Component {
}
}
- let participants =
- let searchResults =
+ let participants = ;
+ let searchResults = ;
let invErrElem = ;
if (state.inviteError) {
@@ -168,14 +170,23 @@ export class InviteSearch extends Component {
);
}
- if ((state.searchResults.groups.length > 0)
- || (state.searchResults.ships.length > 0)) {
+ if (
+ state.searchResults.groups.length > 0 ||
+ state.searchResults.ships.length > 0
+ ) {
+ let groupHeader =
+ state.searchResults.groups.length > 0 ? (
+ Groups
+ ) : (
+ ""
+ );
- let groupHeader = (state.searchResults.groups.length > 0)
- ? Groups
: "";
-
- let shipHeader = (state.searchResults.ships.length > 0)
- ? Ships
: "";
+ let shipHeader =
+ state.searchResults.ships.length > 0 ? (
+ Ships
+ ) : (
+ ""
+ );
let groupResults = state.searchResults.groups.map(group => {
return (
@@ -183,12 +194,13 @@ export class InviteSearch extends Component {
key={group}
className={
"list mono white-d f8 pv2 ph3 pointer" +
- " hover-bg-gray4 hover-black-d"}
+ " hover-bg-gray4 hover-black-d"
+ }
onClick={e => this.addGroup(group)}>
{group}
);
- })
+ });
let shipResults = state.searchResults.ships.map(ship => {
return (
@@ -208,16 +220,20 @@ export class InviteSearch extends Component {
{"~" + ship}
);
- })
+ });
- searchResults =
-
- {groupHeader}
- {groupResults}
- {shipHeader}
- {shipResults}
-
+ searchResults = (
+
+ {groupHeader}
+ {groupResults}
+ {shipHeader}
+ {shipResults}
+
+ );
}
let groupInvites = props.invites.groups || [];
@@ -230,9 +246,11 @@ export class InviteSearch extends Component {
key={group}
className={
"f9 mono black pa2 bg-gray5 bg-gray1-d" +
- " ba b--gray4 b--gray2-d white-d dib mr2 mt2 c-default"}>
+ " ba b--gray4 b--gray2-d white-d dib mr2 mt2 c-default"
+ }>
{group}
- this.deleteGroup(group)}>
x
@@ -243,12 +261,17 @@ export class InviteSearch extends Component {
let ships = shipInvites.map(ship => {
return (
+ key={ship}
+ className={
+ "f9 mono black pa2 bg-gray5 bg-gray1-d" +
+ " ba b--gray4 b--gray2-d white-d dib mr2 mt2 c-default"
+ }>
{"~" + ship}
- this.deleteShip(ship)}>x
+ this.deleteShip(ship)}>
+ x
+
);
});
@@ -258,7 +281,7 @@ export class InviteSearch extends Component {
className={
"f9 gray2 bb bl br b--gray3 b--gray2-d bg-gray0-d " +
"white-d pa3 db w-100 inter"
- }>
+ }>
Participants
{groups} {ships}
@@ -281,8 +304,10 @@ export class InviteSearch extends Component {
ref={e => {
this.textarea = e;
}}
- className={"f7 ba b--gray3 b--gray2-d bg-gray0-d white-d pa3 w-100"
- + " db focus-b--black focus-b--white-d mono placeholder-inter"}
+ className={
+ "f7 ba b--gray3 b--gray2-d bg-gray0-d white-d pa3 w-100" +
+ " db focus-b--black focus-b--white-d mono placeholder-inter"
+ }
placeholder="Search for ships or existing groups"
disabled={searchDisabled}
rows={1}
@@ -293,9 +318,10 @@ export class InviteSearch extends Component {
}}
onKeyPress={e => {
if (e.key === "Enter" || e.key === ",") {
- e.preventDefault();
- this.submitShipToAdd(this.state.searchValue);
- }}}
+ e.preventDefault();
+ this.submitShipToAdd(this.state.searchValue);
+ }
+ }}
onChange={this.search}
value={state.searchValue}
/>
@@ -307,4 +333,4 @@ export class InviteSearch extends Component {
}
}
-export default InviteSearch;
\ No newline at end of file
+export default InviteSearch;
diff --git a/pkg/interface/chat/src/js/components/new.js b/pkg/interface/chat/src/js/components/new.js
index 6ab0dd7745..bb00fb42a0 100644
--- a/pkg/interface/chat/src/js/components/new.js
+++ b/pkg/interface/chat/src/js/components/new.js
@@ -246,6 +246,7 @@ export class NewScreen extends Component {