message.js

/**
 * @class Message
 * @property {string} uuid Message ID
 * @property {int} type Type identifier for message. Possible values are: {@link Message#TYPE_TEXT}
 * @property {string} content text message content
 * @property {string} thumb_300_url image message thumb file url
 * @property {string} thumb_100_url image message thumb file url
 * @property {string} original_url image message original file url
 * @property {string} file_url file message link to file
 * @property {int} sender_flag indicates if message was sent by visitor. {@link Message#SENDER_VISITOR}
 * @property {string} sender_id message sender ID. Refer to manager or visitor, depends on `sender_flag`
 * @property {Date} sent_at message sent at date time.
 */
class Message {
	constructor(){
		this.uuid = null;
		this.type = null;
		this.content = null;
		this.thumb_300_url = null;
		this.thumb_100_url = null;
		this.file_url = null;
		this.sender_flag = null;
		this.sender_id = null;
		this.sent_at = null;
	}
}

/**
 * Message type for text messages.
 * @type {number}
 */
Message.TYPE_TEXT = 0;
Message.TYPE_IMG = 4;
Message.TYPE_FILE = 5;

Message.SENDER_VISITOR = 0;
Message.SENDER_MANAGER = 1;

/**
 * Static constructor for building text messages
 *
 * @param text
 * @return {Message}
 */
Message.buildText = (text) => {
	let message = new Message();
	message.type = Message.TYPE_TEXT;
	message.content = text;
	return message;
};

Message.buildImg = (imgUrl) => {
	let message = new Message();
	message.type = Message.TYPE_IMG;
	message.content = '';
	message.thumb_300_url = imgUrl.thumb300Url;
	message.thumb_100_url = imgUrl.thumb100Url;
	message.original_url = imgUrl.fileUrl;
	return message;
};

Message.buildFile = (fileUrl) => {
	let message = new Message();
	message.type = Message.TYPE_FILE;
	message.content = '';
	message.file_url = fileUrl.fileUrl
	return message;
};

/**
 * Static builder from API data object
 */
Message.buildFromInfo = (data) => {
	let message = new Message();
	message.uuid = data.uuid;
	message.type = data.type;
	switch(data.type) {
		case Message.TYPE_TEXT:
			message.type = data.type;
			message.content = data.content;
			break;
		case Message.TYPE_IMG:
			message.type = data.type;
			message.thumb_100_url = data.thumb_100_url;
			message.thumb_300_url = data.thumb_300_url;
			message.original_url = data.original_url;
			break;
		case Message.TYPE_FILE:
			message.type = data.type;
			message.file_url = data.file_url;
			break;
		default:
			message.type = Message.TYPE_TEXT;
			message.content = "(Message has unknown type)";
	}
	message.sender_flag = data.sender_flag;
	message.sender_id = data.sender_id;
	message.sent_at = new Date(data.sent_at * 1000);
	return message;
} 


export default Message;