5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/active_admin/chat/extensions/application.rb', line 5
def register_chat(name, options = {}, &block)
setup_page_configs(name, options[:namespace])
register_page name, options do
content do
render 'active_admin/chat/chat'
end
controller do
layout 'active_admin', only: :show
helper_method :messages, :active_conversation, :conversations
def show
respond_to do |format|
format.html { render 'active_admin/chat/show' }
format.json do
render json: ActiveAdmin::Chat::MessagePresenter.all(messages)
end
end
end
def create
conversation =
ActiveAdmin::Chat.conversation_klass
.find_or_create_by!(
"#{user_relation_name_id}": params[:"#{user_relation_name_id}"]
)
redirect_to action: 'show', id: conversation
end
def active_conversation
@active_conversation ||= ActiveAdmin::Chat.conversation_klass.find_by(
id: params[:id]
)
end
def conversations
@conversations ||= ActiveAdmin::Chat.conversation_klass
.includes(ActiveAdmin::Chat.user_relation_name)
end
def messages
return [] unless active_conversation
page_messages = active_conversation.public_send(
ActiveAdmin::Chat.message_relation_name.pluralize
).includes(:sender).order(created_at: :desc)
if params[:created_at].present?
page_messages = page_messages.where('created_at < ?',
DateTime.parse(params[:created_at]))
end
page_messages.limit(ActiveAdmin::Chat.messages_per_page).reverse
end
private
def user_relation_name_id
"#{ActiveAdmin::Chat.user_relation_name}_id"
end
end
instance_eval(&block)
end
end
|