import fetch from 'isomorphic-fetch';
import moment from 'moment';
import React from 'react';
import RaisedButton from 'material-ui/RaisedButton';
import Dialog from 'material-ui/Dialog';
import Member from './Member';
import Purpose from './Purpose';
import SignedInList from './SignedInList';
const renderMemberStatus = member => {
if (member.banned) {
return
Banned
;
} else if (member.suspended) {
return Suspended
;
}
return null;
}
export default class SignIn extends React.Component {
constructor(props) {
super(props);
this.state = {
members: [],
signOn: { purpose: 'FIX', member: undefined },
error: '',
signedIn: [],
searchText: '',
modal: {
open: false,
member: null
}
};
this.handleUpdate = this.handleUpdate.bind(this);
this.handleClose = this.handleClose.bind(this);
this.signIn = this.signIn.bind(this);
this.chooseMember = this.chooseMember.bind(this);
this.handlePurposeChoice = this.handlePurposeChoice.bind(this);
}
componentDidMount() {
fetch('/members/signin/')
.then(response => response.json())
.then((visits) => {
this.setState({ signedIn: visits.map(visit => ({
id: visit.member.id,
banned: visit.member.banned,
suspended: visit.member.suspended,
purpose: visit.purpose,
first_name: visit.member.first_name,
last_name: visit.member.last_name,
text: `${visit.member.first_name} ${visit.member.last_name}`,
value: `${visit.member.first_name} ${visit.member.last_name} <${visit.member.email}>`,
at: moment(visit.created_at),
})) });
});
}
onUpdateSearchText(searchText) {
this.setState({ searchText });
}
chooseMember(chosenRequest, index) {
const member = chosenRequest;
const purpose = this.state.signOn.purpose;
this.setState({ ...this.state, signOn: { member, purpose } });
}
signIn() {
const purpose = this.state.signOn.purpose;
const member = this.state.signOn.member;
if (!this.state.signedIn.find(signedInMember => signedInMember.id === member.id)) {
fetch('/members/signin/', {
method: 'post',
body: `id=${member.id}&purpose=${purpose}`,
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
} })
.then((response) => {
if (response.status === 201) {
return response.json();
}
})
.then((parsedData) => {
this.setState({
...this.state,
signedIn: [...this.state.signedIn,
{ ...parsedData.results, purpose, at: moment(parsedData.results.created_at) }],
signOn: { purpose: 'FIX', member: undefined },
searchText: '',
members: [],
});
return parsedData.results;
}).then(parsedData => {
const {created_at, membership, ...rest} = parsedData
const parsedMembership = membership ? {
renewed_at: membership ? moment(membership.renewed_at) : undefined,
expires_at: membership ? moment(membership.expires_at) : undefined,
payment: membership ? membership.payment : undefined,
} : null;
this.setState(state => ({
...state,
modal: {
...state.modal,
open: true,
member: {
...rest,
created_at: moment(created_at),
membership: parsedMembership,
}
}
}))
});
} else {
this.setState({ ...this.state, error: 'Member already signed in.' });
}
}
handlePurposeChoice(event, index, value) {
this.setState({ ...this.state, signOn: { ...this.state.signOn, purpose: value } });
}
handleUpdate(text) {
const self = this;
self.setState({ searchText: text });
fetch(`/members/search/${text}/`)
.then((response) => {
if (response.status === 200) {
return response.json();
}
throw new Error('Bad response from server');
})
.then((data) => {
if (data.results.length > 0) {
self.setState({
...this.state,
error: '',
members: data.results.map(result => ({
text: `${result.name}`,
value: `${result.name} <${result.email}>`,
id: result.id })),
});
} else {
self.setState({ ...this.state, error: 'Member not found.' });
}
});
}
handleClose() {
this.setState(state => ({
...state,
modal: {
open: false,
member: null,
}
}))
}
render() {
const { member } = this.state.modal;
return (
Sign-in
{moment().format('MMM DD, YYYY')}
{this.state.modal.member &&
]}
>
{renderMemberStatus(member)}
{ member.notes &&
}
Membership Details
{!member.membership
?
No membership 😿
:
- Renewed
- {member.membership.renewed_at.format('MMMM Do, YYYY')} ({member.membership.renewed_at.fromNow()})
- {member.membership.expires_at.isAfter()
? 'Expires'
: 'Expired'}
- {member.membership.expires_at.format('MMMM Do, YYYY')} ({member.membership.expires_at.fromNow()})
}
}
);
}
}