Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
user is typing feature
jQuery(document).on 'turbolinks:load', ->
u = $("#current_user").val()
window.current_user = JSON.parse(u)
messages = $('#messages')
user_is_typing = $('#user_is_typing')
App.global_chat = App.cable.subscriptions.create {
channel: "ChatRoomsChannel"
chat_room_id: messages.data('chat-room-id')
},
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
if data.typing && current_user.id != data.user.id
user_is_typing.html "#{data.user.email} is typing"
else
user_is_typing.html ""
is_typing: (typing, chat_room_id) ->
@perform 'is_typing', message: {typing: typing}, chat_room_id: chat_room_id
$('textarea').on 'focus', (event) ->
App.global_chat.is_typing true, messages.data('chat-room-id')
return
$('textarea').on 'blur', (event) ->
App.global_chat.is_typing false, messages.data('chat-room-id')
return
class ChatRoomsChannel < ApplicationCable::Channel
def subscribed
stream_from "chat_rooms_#{params['chat_room_id']}_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
def is_typing(data)
ActionCable.server.broadcast "chat_rooms_#{params['chat_room_id']}_channel", typing: data['typing'], user: current_user
end
end
@Crashtor

This comment has been minimized.

Show comment Hide comment
@Crashtor

Crashtor Jul 9, 2017

Really helpful. Thanks!

Crashtor commented Jul 9, 2017

Really helpful. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment