mirror of
https://github.com/ilyakooo0/urbit.git
synced 2024-12-15 10:02:47 +03:00
create group functionality
This commit is contained in:
parent
56a1c3400a
commit
761ea7cc9c
@ -1,6 +1,8 @@
|
|||||||
import React, { Component } from 'react'
|
import React, { Component } from 'react'
|
||||||
|
|
||||||
import { Route, Link } from 'react-router-dom';
|
import { Route, Link } from 'react-router-dom';
|
||||||
|
import { deSig } from '/lib/util';
|
||||||
|
import urbitOb from 'urbit-ob';
|
||||||
|
|
||||||
export class NewScreen extends Component {
|
export class NewScreen extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@ -9,8 +11,10 @@ export class NewScreen extends Component {
|
|||||||
this.state = {
|
this.state = {
|
||||||
groupName: '',
|
groupName: '',
|
||||||
invites: '',
|
invites: '',
|
||||||
color: ''
|
color: '',
|
||||||
}
|
groupNameError: false,
|
||||||
|
inviteError: false
|
||||||
|
};
|
||||||
|
|
||||||
this.groupNameChange = this.groupNameChange.bind(this);
|
this.groupNameChange = this.groupNameChange.bind(this);
|
||||||
this.invChange = this.invChange.bind(this);
|
this.invChange = this.invChange.bind(this);
|
||||||
@ -35,13 +39,87 @@ export class NewScreen extends Component {
|
|||||||
// });
|
// });
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
onClickCreate() {
|
||||||
|
const { props, state } = this;
|
||||||
|
if (!state.groupName) {
|
||||||
|
this.setState({
|
||||||
|
groupNameError: true,
|
||||||
|
inviteError: false
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let group = `/~${window.ship}` + `/${state.groupName}`;
|
||||||
|
|
||||||
|
let aud = [];
|
||||||
|
let isValid = true;
|
||||||
|
|
||||||
|
if (state.invites.length > 2) {
|
||||||
|
aud = state.invites.split(',')
|
||||||
|
.map((mem) => `~${deSig(mem.trim())}`);
|
||||||
|
|
||||||
|
aud.forEach((mem) => {
|
||||||
|
if (!urbitOb.isValidPatp(mem)) {
|
||||||
|
isValid = false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isValid) {
|
||||||
|
this.setState({
|
||||||
|
inviteError: true,
|
||||||
|
groupNameError: false
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (this.textarea) {
|
||||||
|
this.textarea.value = '';
|
||||||
|
}
|
||||||
|
this.setState({
|
||||||
|
error: false,
|
||||||
|
success: true,
|
||||||
|
invites: ''
|
||||||
|
}, () => {
|
||||||
|
props.setSpinner(true);
|
||||||
|
props.api.contactCreate(group);
|
||||||
|
//TODO add YOU to the group, but without invites
|
||||||
|
aud.forEach((ship) => {
|
||||||
|
if (ship !== `~${window.ship}`) {
|
||||||
|
props.api.invite.invite(group, ship);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
|
||||||
|
let groupNameErrElem = (<span />);
|
||||||
|
if (this.state.groupNameError) {
|
||||||
|
groupNameErrElem = (
|
||||||
|
<span className="f9 inter red2 ml3 mt1 db">
|
||||||
|
Group must have a valid name.
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
let invErrElem = (<span />);
|
||||||
|
if (this.state.inviteError) {
|
||||||
|
invErrElem = (
|
||||||
|
<span className="f9 inter red2 ml3 mb5 db">
|
||||||
|
Invites must be validly formatted ship names.
|
||||||
|
</span>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="h-100 w-100 flex flex-column overflow-y-scroll">
|
<div className="h-100 w-100 flex flex-column overflow-y-scroll">
|
||||||
<div className="w-100 w-50-l w-50-xl mb4">
|
<div className="w-100 dn-m dn-l dn-xl inter pt1 pb6 pl3 pt3 f8">
|
||||||
|
<Link to="/~contacts/">{"⟵ All Groups"}</Link>
|
||||||
|
</div>
|
||||||
|
<div className="w-100 w-50-l w-50-xl mb4 pr6 pr0-l pr0-xl">
|
||||||
<h2 className="f8 pl3 pt4">Create New Group</h2>
|
<h2 className="f8 pl3 pt4">Create New Group</h2>
|
||||||
<h2 className="f8 pl3 pt6">Group Name</h2>
|
<h2 className="f8 pl3 pt6">Group Name</h2>
|
||||||
<p className="f9 pl3 gray2 lh-copy">Alphanumeric characters only</p>
|
<p className="f9 pl3 gray2 lh-copy">Alphanumeric characters and hyphens only</p>
|
||||||
<textarea
|
<textarea
|
||||||
className="f7 ba b--gray3 w-100 pa3 ml3 mt2"
|
className="f7 ba b--gray3 w-100 pa3 ml3 mt2"
|
||||||
rows={1}
|
rows={1}
|
||||||
@ -51,7 +129,8 @@ export class NewScreen extends Component {
|
|||||||
height: 48,
|
height: 48,
|
||||||
paddingTop: 14
|
paddingTop: 14
|
||||||
}}
|
}}
|
||||||
/>
|
onChange={this.groupNameChange}/>
|
||||||
|
{groupNameErrElem}
|
||||||
{/* <h2 className="f8 pl3 pt6">Group Avatar</h2>
|
{/* <h2 className="f8 pl3 pt6">Group Avatar</h2>
|
||||||
<p className="f9 pl3 gray2 lh-copy">
|
<p className="f9 pl3 gray2 lh-copy">
|
||||||
Select a color to represent your group
|
Select a color to represent your group
|
||||||
@ -68,31 +147,34 @@ export class NewScreen extends Component {
|
|||||||
/> */}
|
/> */}
|
||||||
<h2 className="f8 pl3 pt6">Add Group Members</h2>
|
<h2 className="f8 pl3 pt6">Add Group Members</h2>
|
||||||
<p className="f9 pl3 gray2 lh-copy">
|
<p className="f9 pl3 gray2 lh-copy">
|
||||||
Search for ships to invite to your group
|
Invite ships to your group
|
||||||
</p>
|
</p>
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<textarea
|
<textarea
|
||||||
className="f8 ba b--gray3 w-100 pa3 pl7 ml3 mt2 mb7"
|
className="f8 ba b--gray3 w-100 pa3 pl3 ml3 mt2 mb2"
|
||||||
rows={1}
|
rows={1}
|
||||||
placeholder="Search for ships..."
|
placeholder="~zod, ~dopzod, ~ravmel-ropdyl"
|
||||||
style={{
|
style={{
|
||||||
resize: "none",
|
resize: "none",
|
||||||
height: 48,
|
height: 48,
|
||||||
paddingTop: 15
|
paddingTop: 15
|
||||||
}}
|
}}
|
||||||
/>
|
onChange={this.invChange}/>
|
||||||
<span className="f5 gray3 absolute"
|
{invErrElem}
|
||||||
|
{/* <span className="f5 gray3 absolute"
|
||||||
style={{transform: "rotate(-45deg)",
|
style={{transform: "rotate(-45deg)",
|
||||||
left: 21,
|
left: 21,
|
||||||
top: 18}}>
|
top: 18}}>
|
||||||
⚲
|
⚲
|
||||||
</span>
|
</span> */}
|
||||||
</div>
|
</div>
|
||||||
<button className="ml3 f8 ba pa2 b--green2 green2">
|
<button
|
||||||
|
onClick={this.onClickCreate.bind(this)}
|
||||||
|
className="ml3 f8 ba pa2 b--green2 green2 pointer">
|
||||||
Start Group
|
Start Group
|
||||||
</button>
|
</button>
|
||||||
<Link to="/~contacts">
|
<Link to="/~contacts">
|
||||||
<button className="f8 ml3 ba pa2 b--black">Cancel</button>
|
<button className="f8 ml3 ba pa2 b--black pointer">Cancel</button>
|
||||||
</Link>
|
</Link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
Reference in New Issue
Block a user