Sha256: 9a11b29c9f7427dd1ff9b1933ee2308be2165097b1995bbc6bcee941ed43f119

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

module Chat
  module ApplicationHelper
    def render_chat(background = nil, color = nil)
      return unless send Chat.signed_in

      render "chat/chat", background: background, color: color
    end

    def launch_chat_fab(background = "#4CAF50", color = "light")
      attrs = {
        class: "chat__launch", style: "background: #{background}",
        data: { "current-user" => current_user.id }
      }
      button_tag(attrs) do
        material_icon.forum.css_class("md-#{color}").to_s.html_safe
      end
    end

    def chatable_users
      @chatable_users ||= ::User.where.not(id: current_user.id)
    end

    def chatable_user_check_boxes(f)
      f.collection_check_boxes(:user_ids, chatable_users, :id, :name) do |b|
        b.check_box + b.label(class: b.object.chat_status) do
          content_tag(
            :div, b.text,
            class: "chat__status #{b.object.chat_status}"
          )
        end
      end
    end

    def chat_avatar(user)
      if user.send(Chat.user_avatar.to_s + "?")
        image_tag(user.send(Chat.user_avatar), class: "chat__user-avatar")
      else
        MaterialIcon.new.css_class("chat__user-avatar").person
      end
    end

    def chat_list
      @chat_list ||=
        Chat::Conversation.joins(:users)
                          .group("chat_sessions.conversation_id")
                          .select(:id, group_concat)
                          .merge(current_user.conversations)
                          .order(created_at: :desc)
    end

    private

    def group_concat
      if ActiveRecord::Base.connection.adapter_name == "SQLite"
        "GROUP_CONCAT(users.#{::User.first_name} || ' ' || users.#{::User.last_name}, ', ') as names"
      elsif ActiveRecord::Base.connection.adapter_name == "MySQL"
        "GROUP_CONCAT(CONCAT(\"users.#{User.first_name}\",\" \", \"users.#{User.last_name}\") "\
        "SEPARATOR ', ') as names"
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
chat-0.2.0 app/helpers/chat/application_helper.rb