* Setup Pusher gem * Create ChatChannel and Message model * Create ChatChannelController * Add back fix-db-schema-conflicts gem * Add pusher-js package * Add validations on Message & ChatChannel models * Update Route * Create MessageController * Update ChatChannelController * Create Chat app WIP * Extract messenger render to Message Component * Implement live chat WIP * Implement live chat WIP (2) * Add style and scrollToBottom feature for chat * Create getUserDataAndCsrfToken function * Add feature toggle to the new live chat * Clean up ChatChannelsController & create spec * Update ChatChannel spec * Update Message spec * Create MessagesController spec & refactor * Clean up Chat app * Fix lint * Add character limit to Message
32 lines
1 KiB
JavaScript
32 lines
1 KiB
JavaScript
export function getUserDataAndCsrfToken() {
|
|
const promise = new Promise((resolve, reject) => {
|
|
let i = 0;
|
|
const waitingOnUserData = setInterval(() => {
|
|
let userData = null;
|
|
const dataUserAttribute = document.body.getAttribute('data-user');
|
|
const meta = document.querySelector("meta[name='csrf-token']");
|
|
if (dataUserAttribute &&
|
|
dataUserAttribute !== 'undefined' &&
|
|
dataUserAttribute !== undefined &&
|
|
meta &&
|
|
meta.content !== 'undefined' &&
|
|
meta.content !== undefined) {
|
|
userData = JSON.parse(dataUserAttribute);
|
|
}
|
|
i += 1;
|
|
if (userData) {
|
|
clearInterval(waitingOnUserData);
|
|
resolve(userData);
|
|
} else if (i === 3000) {
|
|
clearInterval(waitingOnUserData);
|
|
reject(new Error("Couldn't find user data on page."));
|
|
}
|
|
}, 5);
|
|
});
|
|
return promise;
|
|
}
|
|
|
|
export function scrollToBottom() {
|
|
const element = document.getElementById('messagelist');
|
|
element.scrollTop = element.scrollHeight;
|
|
}
|