Skip to content

Instantly share code, notes, and snippets.

View jamigibbs's full-sized avatar

Jami Gibbs jamigibbs

View GitHub Profile
@jamigibbs
jamigibbs / websocketChat.js
Last active March 31, 2020 15:46
Enter and leave chat
handleEnterChat() {
setUserChatActive()
.then((res) => {
this.isChatActive = res.Chat_Active__c;
this._socket.emit('userEnteredChat');
return refreshApex(this.wiredChatUsers);
})
.catch(error => {
// eslint-disable-next-line no-console
console.error('handleEnterChat error', error);
@jamigibbs
jamigibbs / websocketChat.js
Last active March 31, 2020 02:34
Socket.io import
import { LightningElement, api, wire } from 'lwc';
import { loadScript } from 'lightning/platformResourceLoader';
import SOCKET_IO_JS from '@salesforce/resourceUrl/socketiojs';
import USER_ID from '@salesforce/user/Id';
// Your Heroku server link as a custom label and looks something like this:
// wss://my-heroku-app.herokuapp.com/
import WEBSOCKET_SERVER_URL from '@salesforce/label/c.websocket_server_url';
import getTodayMessages from '@salesforce/apex/ChatController.getTodayMessages';
@jamigibbs
jamigibbs / websocketChat.js
Created March 30, 2020 22:05
refresh chat users
this._socket.on('refreshChatUsers', () => {
return refreshApex(this.wiredChatUsers);
});
@jamigibbs
jamigibbs / server.js
Created March 30, 2020 21:55
Refresh chat users
socket.on('userEnteredChat', () => {
io.emit('refreshChatUsers');
});
socket.on('userLeftChat', () => {
io.emit('refreshChatUsers');
});
@jamigibbs
jamigibbs / message-submitted.js
Last active March 30, 2020 20:57
Message Submitted
import { getRecord } from 'lightning/uiRecordApi';
import MESSAGE_OBJECT from '@salesforce/schema/Chat_Message__c';
import CONTENT_FIELD from '@salesforce/schema/Chat_Message__c.Content__c';
import USER_FIELD from '@salesforce/schema/Chat_Message__c.User__c';
// ....
const messageInput = this.template.querySelector('.message-input');
messageInput.addEventListener('keydown', (event) => {
@jamigibbs
jamigibbs / websocketChat.js
Created March 30, 2020 20:54
chat updated socket event
this._socket.on('chatupdated', () => {
return refreshApex(this.wiredMessages);
});
@jamigibbs
jamigibbs / server.js
Last active March 30, 2020 20:53
Server socket on input
socket.on('transmit', () => {
io.emit('chatupdated');
});
this._socket.on('output', (data) => {
if (data) {
const fields = {};
fields[CONTENT_FIELD.fieldApiName] = data.message;
fields[USER_FIELD.fieldApiName] = this.userId;
const message = { apiName: MESSAGE_OBJECT.objectApiName, fields };
createRecord(message)
.then(() => {
this._socket.emit('transmit');
@jamigibbs
jamigibbs / message-form.html
Created March 30, 2020 20:17
Message Form
<form class="send-message-form">
<input type="text" class="message-input">
<button type="submit">Send</button>
</form>
@jamigibbs
jamigibbs / ChatController.cls
Created March 30, 2020 19:48
Chat Controller
public with sharing class ChatController {
@AuraEnabled(cacheable=true)
public static List<Chat_Message__c> getTodayMessages() {
List<Chat_Message__c> messageList;
try {
messageList = [
SELECT Id, Content__c, CreatedDate, User__r.Name, User__r.MediumPhotoUrl
FROM Chat_Message__c