Hi,
Another problem has popped up.
I have a chatbox component in which I plan to render all the messages between two users, using a Messages component. I have a publication function for the messages and a corresponding subscription for fetrching the messages. But somehow, the subscription is not registering(verified using Meteor toys). Please help!
Publication.
Meteor.publish(‘allMessagesForConversation’, function (conversationId) {
return Meteor.messages.find({
conversationId: conversationId,
});
});
Messages component:
import React, { Component } from ‘react’;
import ReactDOM, { render } from ‘react-dom’;
import TrackerReact from ‘meteor/ultimatejs:tracker-react’;
import Message from ‘./Message.jsx’;
export default class Messages extends TrackerReact(Component) {
constructor(props) {
super(props);
this.state = {
subscription: {
messages: Meteor.subscribe(‘allMessagesForConversation’, this.props.conversationId),
},
};
this.messages = this.messages.bind(this);
}
messages() {
return Meteor.messages.find({
conversationId: this.props.conversationId,
}).fetch();
}
componentWillUnmount() {
this.state.subscription.messages.stop();
}
render () {
var inlineStyles = {
height: ‘300px’,
overflowY: ‘scroll’,
};
// Loop through the list of chats and create array of Row components
console.log(this.props.conversationId);
var Messages = this.messages().map(function (message) {
return (
<Message key={message._id}
username={message.user().username}
// time={message.timestamp()}
message={message.body} />
);
});
return (
<div style={inlineStyles}>
{Messages}
asd
</div>
);
}
}
ChatBox component.
import React, { Component } from ‘react’;
import { render } from ‘react-dom’;
import ChatHeader from ‘./ChatHeader.jsx’;
import Messages from ‘./Messages.jsx’;
import ChatFooter from ‘./ChatFooter.jsx’;
export default class ChatBox extends Component {
constructor(props) {
super(props);
}
render () {
if (!this.props.conversation) {
return (
Loading
);
}
console.log(this.props.conversation);
return (
<div className="chat-container">
<ChatHeader
name="Manu"
/>
<Messages conversationId={this.props.conversation._id} />
<ChatFooter
sendMessage={this.sendMessage}
conversation={this.props.conversation}
/>
</div>
);
}
}