mirror of
https://github.com/ClaytonWWilson/CS307-Team24.git
synced 2025-12-16 10:18:48 +00:00
Direct Messages sending DMs
This commit is contained in:
parent
e06cc614cb
commit
331509da7f
@ -10,6 +10,7 @@
|
|||||||
"axios": "^0.19.0",
|
"axios": "^0.19.0",
|
||||||
"clsx": "^1.0.4",
|
"clsx": "^1.0.4",
|
||||||
"create-react-app": "^3.1.2",
|
"create-react-app": "^3.1.2",
|
||||||
|
"dayjs": "^1.8.17",
|
||||||
"install": "^0.13.0",
|
"install": "^0.13.0",
|
||||||
"jwt-decode": "^2.2.0",
|
"jwt-decode": "^2.2.0",
|
||||||
"node-pre-gyp": "^0.13.0",
|
"node-pre-gyp": "^0.13.0",
|
||||||
|
|||||||
@ -23,7 +23,13 @@ import SendIcon from '@material-ui/icons/Send';
|
|||||||
|
|
||||||
// Redux
|
// Redux
|
||||||
import { connect } from 'react-redux';
|
import { connect } from 'react-redux';
|
||||||
import { getDirectMessages, createNewDirectMessage, getNewDirectMessages, reloadDirectMessageChannels } from '../redux/actions/dataActions';
|
import {
|
||||||
|
getDirectMessages,
|
||||||
|
createNewDirectMessage,
|
||||||
|
getNewDirectMessages,
|
||||||
|
reloadDirectMessageChannels,
|
||||||
|
sendDirectMessage
|
||||||
|
} from '../redux/actions/dataActions';
|
||||||
|
|
||||||
const styles = {
|
const styles = {
|
||||||
pageContainer: {
|
pageContainer: {
|
||||||
@ -185,6 +191,8 @@ export class directMessages extends Component {
|
|||||||
anchorEl: null,
|
anchorEl: null,
|
||||||
createDMUsername: '',
|
createDMUsername: '',
|
||||||
usernameValid: false,
|
usernameValid: false,
|
||||||
|
// message: '',
|
||||||
|
drafts: {},
|
||||||
errors: null
|
errors: null
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -205,7 +213,17 @@ export class directMessages extends Component {
|
|||||||
// Updates the state whenever redux is updated
|
// Updates the state whenever redux is updated
|
||||||
componentWillReceiveProps(nextProps) {
|
componentWillReceiveProps(nextProps) {
|
||||||
if (nextProps.directMessages) {
|
if (nextProps.directMessages) {
|
||||||
this.setState({ dmData: nextProps.directMessages});
|
this.setState({ dmData: nextProps.directMessages}, () => {
|
||||||
|
if (this.state.selectedChannel) {
|
||||||
|
this.state.dmData.forEach((channel) => {
|
||||||
|
if (channel.dmId === this.state.selectedChannel.dmId) {
|
||||||
|
this.setState({
|
||||||
|
selectedChannel: channel
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -290,6 +308,26 @@ export class directMessages extends Component {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
handleChangeMessage = (event) => {
|
||||||
|
let drafts = this.state.drafts;
|
||||||
|
drafts[this.state.selectedChannel.dmId] = event.target.value;
|
||||||
|
this.setState({
|
||||||
|
drafts
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
handleClickSend = () => {
|
||||||
|
// console.log(this.state.drafts[this.state.selectedChannel.dmId]);
|
||||||
|
let drafts = this.state.drafts;
|
||||||
|
if (this.state.hasChannelSelected && drafts[this.state.selectedChannel.dmId]) {
|
||||||
|
this.props.sendDirectMessage(this.state.selectedChannel.recipient, drafts[this.state.selectedChannel.dmId]);
|
||||||
|
drafts[this.state.selectedChannel.dmId] = null;
|
||||||
|
this.setState({
|
||||||
|
drafts
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const { classes } = this.props;
|
const { classes } = this.props;
|
||||||
const loadingDirectMessages = this.props.UI.loading2;
|
const loadingDirectMessages = this.props.UI.loading2;
|
||||||
@ -309,7 +347,7 @@ export class directMessages extends Component {
|
|||||||
key={channel.dmId}
|
key={channel.dmId}
|
||||||
data-key={channel.dmId}
|
data-key={channel.dmId}
|
||||||
className={
|
className={
|
||||||
this.state.selectedChannel === channel ? classes.dmCardSelected : classes.dmCardUnselected
|
this.state.selectedChannel && this.state.selectedChannel.dmId === channel.dmId ? classes.dmCardSelected : classes.dmCardUnselected
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<Box className={classes.dmListItemContainer}>
|
<Box className={classes.dmListItemContainer}>
|
||||||
@ -318,7 +356,7 @@ export class directMessages extends Component {
|
|||||||
<Grid item sm>
|
<Grid item sm>
|
||||||
<Typography
|
<Typography
|
||||||
className={
|
className={
|
||||||
this.state.selectedChannel === channel ? (
|
this.state.selectedChannel && this.state.selectedChannel.dmId === channel.dmId ? (
|
||||||
classes.dmItemUsernameSelected
|
classes.dmItemUsernameSelected
|
||||||
) : (
|
) : (
|
||||||
classes.dmItemUsernameUnselected
|
classes.dmItemUsernameUnselected
|
||||||
@ -329,7 +367,7 @@ export class directMessages extends Component {
|
|||||||
</Typography>
|
</Typography>
|
||||||
<Typography
|
<Typography
|
||||||
className={
|
className={
|
||||||
this.state.selectedChannel === channel ? (
|
this.state.selectedChannel && this.state.selectedChannel.dmId === channel.dmId ? (
|
||||||
classes.dmRecentMessageSelected
|
classes.dmRecentMessageSelected
|
||||||
) : (
|
) : (
|
||||||
classes.dmRecentMessageUnselected
|
classes.dmRecentMessageUnselected
|
||||||
@ -342,7 +380,7 @@ export class directMessages extends Component {
|
|||||||
<Grid item sm>
|
<Grid item sm>
|
||||||
<Typography
|
<Typography
|
||||||
className={
|
className={
|
||||||
this.state.selectedChannel === channel ? (
|
this.state.selectedChannel && this.state.selectedChannel.dmId === channel.dmId ? (
|
||||||
classes.dmItemTimeSelected
|
classes.dmItemTimeSelected
|
||||||
) : (
|
) : (
|
||||||
classes.dmItemTimeUnselected
|
classes.dmItemTimeUnselected
|
||||||
@ -506,10 +544,25 @@ export class directMessages extends Component {
|
|||||||
variant="outlined"
|
variant="outlined"
|
||||||
multiline
|
multiline
|
||||||
rows={2}
|
rows={2}
|
||||||
margin="dense"
|
margin="dense"
|
||||||
|
value={this.state.drafts[this.state.selectedChannel.dmId] ? this.state.drafts[this.state.selectedChannel.dmId] : ""}
|
||||||
|
onChange={this.handleChangeMessage}
|
||||||
/>
|
/>
|
||||||
<Fab className={classes.messageButton}>
|
<Fab
|
||||||
|
className={classes.messageButton}
|
||||||
|
onClick={this.handleClickSend}
|
||||||
|
disabled={
|
||||||
|
sendingDirectMessage
|
||||||
|
// !this.state.drafts[this.state.selectedChannel.dmId] ||
|
||||||
|
// this.state.drafts[this.state.selectedChannel.dmId] !== ""
|
||||||
|
}
|
||||||
|
>
|
||||||
<SendIcon style={{ color: '#FFFFFF' }} />
|
<SendIcon style={{ color: '#FFFFFF' }} />
|
||||||
|
{
|
||||||
|
sendingDirectMessage &&
|
||||||
|
<CircularProgress size={30} style={{position: "absolute"}}/>
|
||||||
|
// Won't accept classes style for some reason
|
||||||
|
}
|
||||||
</Fab>
|
</Fab>
|
||||||
</Box>
|
</Box>
|
||||||
</Card>
|
</Card>
|
||||||
@ -530,6 +583,7 @@ directMessages.propTypes = {
|
|||||||
createNewDirectMessage: PropTypes.func.isRequired,
|
createNewDirectMessage: PropTypes.func.isRequired,
|
||||||
getNewDirectMessages: PropTypes.func.isRequired,
|
getNewDirectMessages: PropTypes.func.isRequired,
|
||||||
reloadDirectMessageChannels: PropTypes.func.isRequired,
|
reloadDirectMessageChannels: PropTypes.func.isRequired,
|
||||||
|
sendDirectMessage: PropTypes.func.isRequired,
|
||||||
user: PropTypes.object.isRequired,
|
user: PropTypes.object.isRequired,
|
||||||
UI: PropTypes.object.isRequired
|
UI: PropTypes.object.isRequired
|
||||||
};
|
};
|
||||||
@ -544,7 +598,8 @@ const mapActionsToProps = {
|
|||||||
getDirectMessages,
|
getDirectMessages,
|
||||||
createNewDirectMessage,
|
createNewDirectMessage,
|
||||||
getNewDirectMessages,
|
getNewDirectMessages,
|
||||||
reloadDirectMessageChannels
|
reloadDirectMessageChannels,
|
||||||
|
sendDirectMessage
|
||||||
};
|
};
|
||||||
|
|
||||||
export default connect(mapStateToProps, mapActionsToProps)(withStyles(styles)(directMessages));
|
export default connect(mapStateToProps, mapActionsToProps)(withStyles(styles)(directMessages));
|
||||||
|
|||||||
@ -59,40 +59,69 @@ export const reloadDirectMessageChannels = () => (dispatch) => {
|
|||||||
export const createNewDirectMessage = (username) => (dispatch) => {
|
export const createNewDirectMessage = (username) => (dispatch) => {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
dispatch({type: SET_LOADING_UI_3});
|
dispatch({type: SET_LOADING_UI_3});
|
||||||
const data = {
|
const data = {
|
||||||
user: username
|
user: username
|
||||||
}
|
}
|
||||||
// console.log(username);
|
// console.log(username);
|
||||||
|
|
||||||
axios.post('/dms/new', data)
|
axios.post('/dms/new', data)
|
||||||
.then((res) => {
|
.then((res) => {
|
||||||
console.log(res.data);
|
console.log(res.data);
|
||||||
if (res.data.err) {
|
if (res.data.err) {
|
||||||
|
dispatch({
|
||||||
|
type: SET_ERRORS,
|
||||||
|
payload: {
|
||||||
|
createDirectMessage: res.data.err
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dispatch({type: SET_NOT_LOADING_UI_3});
|
||||||
|
} else {
|
||||||
|
// dispatch(getNewDirectMessages());
|
||||||
|
// dispatch({type: SET_NOT_LOADING_UI_3});
|
||||||
|
}
|
||||||
|
resolve();
|
||||||
|
})
|
||||||
|
.catch((err) => {
|
||||||
dispatch({
|
dispatch({
|
||||||
type: SET_ERRORS,
|
type: SET_ERRORS,
|
||||||
payload: {
|
payload: {
|
||||||
createDirectMessage: res.data.err
|
createDirectMessage: err.response.data.error
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
dispatch({type: SET_NOT_LOADING_UI_3});
|
dispatch({type: SET_NOT_LOADING_UI_3});
|
||||||
} else {
|
console.log(err.response.data);
|
||||||
// dispatch(getNewDirectMessages());
|
reject();
|
||||||
// dispatch({type: SET_NOT_LOADING_UI_3});
|
})
|
||||||
}
|
});
|
||||||
resolve();
|
}
|
||||||
|
|
||||||
|
export const sendDirectMessage = (user, message) => (dispatch) => {
|
||||||
|
dispatch({type: SET_LOADING_UI_4});
|
||||||
|
const data = {
|
||||||
|
message,
|
||||||
|
user
|
||||||
|
};
|
||||||
|
|
||||||
|
axios.post('/dms/send', data)
|
||||||
|
.then((res) => {
|
||||||
|
// console.log(res);
|
||||||
|
return axios.get('/dms')
|
||||||
|
})
|
||||||
|
.then((res) => {
|
||||||
|
dispatch({
|
||||||
|
type: SET_DIRECT_MESSAGES,
|
||||||
|
payload: res.data.data
|
||||||
|
});
|
||||||
|
dispatch({type: SET_NOT_LOADING_UI_4});
|
||||||
|
dispatch({type: CLEAR_ERRORS});
|
||||||
})
|
})
|
||||||
.catch((err) => {
|
.catch((err) => {
|
||||||
|
console.log(err);
|
||||||
dispatch({
|
dispatch({
|
||||||
type: SET_ERRORS,
|
type: SET_ERRORS,
|
||||||
payload: {
|
payload: {
|
||||||
createDirectMessage: err.response.data.error
|
sendDirectMessage: err.response.data
|
||||||
}
|
}
|
||||||
});
|
})
|
||||||
dispatch({type: SET_NOT_LOADING_UI_3});
|
|
||||||
console.log(err.response.data);
|
|
||||||
reject();
|
|
||||||
})
|
})
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user