@extends('layouts/contentLayoutMaster')
@section('title', __('locale.menu.Chat Box'))
@section('page-style')
<!-- Page css files -->
<link rel="stylesheet" href="{{ asset(mix('css/base/pages/app-chat.css')) }}">
<link rel="stylesheet" href="{{ asset(mix('css/base/pages/app-chat-list.css')) }}">
<link rel="stylesheet" href="{{ asset(mix('vendors/css/extensions/sweetalert2.min.css')) }}">
@endsection
@section('content-sidebar')
@include('customer.ChatBox._sidebar')
@endsection
@section('content')
<div class="body-content-overlay"></div>
<!-- Main chat area -->
<section class="chat-app-window">
<!-- To load Conversation -->
<div class="start-chat-area">
<div class="mb-1 start-chat-icon">
<i data-feather="message-square"></i>
</div>
<h4 class="sidebar-toggle start-chat-text d-block d-md-none">
{{ __('locale.labels.new_conversion') }}
</h4>
<h4 class="sidebar-toggle start-chat-text d-none d-md-block">
<a href="{{ route('customer.chatbox.new') }}" class="text-dark">{{ __('locale.labels.new_conversion') }}</a>
</h4>
</div>
<!--/ To load Conversation -->
<!-- Active Chat -->
<div class="active-chat d-none">
<!-- Chat Header -->
<div class="chat-navbar">
<header class="chat-header">
<div class="d-flex align-items-center">
<div class="sidebar-toggle d-block d-lg-none me-1">
<i data-feather="menu" class="font-medium-5"></i>
</div>
<div class="avatar avatar-border user-profile-toggle m-0 me-1"></div>
</div>
<div class="d-flex align-items-center">
<span class="add-to-blacklist" data-bs-toggle="tooltip" data-bs-placement="top" title="{{ __('locale.labels.block') }}"> <i data-feather="shield" class="cursor-pointer font-medium-2 mx-1 text-primary"></i> </span>
<span class="remove-btn" data-bs-toggle="tooltip" data-bs-placement="top" title="{{ __('locale.buttons.delete') }}"><i data-feather="trash" class="cursor-pointer font-medium-2 text-danger"></i></span>
</div>
</header>
</div>
<!--/ Chat Header -->
<!-- User Chat messages -->
<div class="user-chats">
<div class="chats">
<div class="chat">
<div class="chat_history"></div>
</div>
</div>
</div>
<!-- User Chat messages -->
<!-- Submit Chat form -->
<form class="chat-app-form" action="javascript:void(0);" onsubmit="enter_chat();">
<div class="input-group input-group-merge me-1 form-send-message">
<input type="text" class="form-control message" placeholder="{{ __('locale.campaigns.type_your_message') }}"/>
</div>
<button type="button" class="btn btn-primary send" onclick="enter_chat();">
<i data-feather="send" class="d-lg-none"></i>
<span class="d-none d-lg-block">{{ __('locale.buttons.send') }}</span>
</button>
</form>
<!--/ Submit Chat form -->
</div>
<!--/ Active Chat -->
</section>
<!--/ Main chat area -->
@endsection
@section('page-script')
<!-- Page js files -->
<script src="{{ asset(mix('js/scripts/pages/chat.js')) }}"></script>
<script src="{{ asset(mix('vendors/js/extensions/sweetalert2.all.min.js')) }}"></script>
@if(config('broadcasting.connections.pusher.app_id'))
<script src="{{ asset(mix('js/scripts/echo.js')) }}"></script>
@endif
<script>
// autoscroll to bottom of Chat area
let chatContainer = $(".user-chats"),
details,
chatHistory = $(".chat_history");
$(".chat-users-list li").on("click", function () {
chatHistory.empty();
chatContainer.animate({scrollTop: chatContainer[0].scrollHeight}, 0)
let chat_id = $(this).data('id');
$.ajax({
url: "{{ url('/chat-box')}}" + '/' + chat_id + '/messages',
type: "POST",
data: {
_token: "{{csrf_token()}}"
},
success: function (response) {
details = '<input type="hidden" value="' + chat_id + '" name="chat_id" class="chat_id">';
let cwData = JSON.parse(response.data);
$.each(cwData, function (i, sms) {
let media_url = '';
if (sms.media_url !== null) {
media_url = '<p><img src="' + sms.media_url + '"/></p>';
}
let message = '';
if (sms.message !== null) {
message = '<p>' + sms.message + '</p>';
}
if (sms.send_by === 'to') {
details += '<div class="chat chat-left">' +
'<div class="chat-avatar">' +
'<span class="avatar box-shadow-1 cursor-pointer">' +
'<img src="{{asset('images/profile/profile.jpg')}}" alt="avatar" height="36" width="36"/>' +
'</span>' +
'</div>' +
'<div class="chat-body">' +
'<div class="chat-content">' +
media_url +
message +
'</div>' +
'</div>' +
'</div>';
} else {
details += '<div class="chat">' +
'<div class="chat-avatar">' +
'<span class="avatar box-shadow-1 cursor-pointer">' +
'<img src="{{ route('user.avatar', Auth::user()->uid) }}" alt="avatar" height="36" width="36"/>' +
'</span>' +
'</div>' +
'<div class="chat-body">' +
'<div class="chat-content">' +
message +
'</div>' +
'</div>' +
'</div>';
}
});
chatHistory.append(details);
chatContainer.animate({scrollTop: chatContainer[0].scrollHeight}, 400)
}
});
});
// Add message to chat
function enter_chat(source) {
let message = $(".message"),
chatBoxId = $(".chat_id").val(),
messageValue = message.val();
$.ajax({
url: "{{ url('/chat-box')}}" + '/' + chatBoxId + '/reply',
type: "POST",
data: {
message: messageValue,
_token: "{{csrf_token()}}"
},
success: function (response) {
if (response.status === 'success') {
toastr['success'](response.message, 'Success!!', {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
let html = '<div class="chat">' +
'<div class="chat-avatar">' +
'<span class="avatar box-shadow-1 cursor-pointer">' +
'<img src="{{ asset('images/profile/profile.jpg') }}" alt="avatar" height="36" width="36"/>' +
'</span>' +
'</div>' +
'<div class="chat-body">' +
'<div class="chat-content">' +
'<p>' + messageValue + '</p>' +
'</div>' +
'</div>' +
'</div>';
chatHistory.append(html);
message.val("");
$(".user-chats").scrollTop($(".user-chats > .chats").height());
} else {
toastr['warning'](response.message, "{{ __('locale.labels.attention') }}", {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
}
},
error: function (reject) {
if (reject.status === 422) {
let errors = reject.responseJSON.errors;
$.each(errors, function (key, value) {
toastr['warning'](value[0], "{{__('locale.labels.attention')}}", {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
});
} else {
toastr['warning'](reject.responseJSON.message, "{{__('locale.labels.attention')}}", {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
}
}
});
}
$(".remove-btn").on('click', function (event) {
event.preventDefault();
let sms_id = $(".chat_id").val();
Swal.fire({
title: "{{ __('locale.labels.are_you_sure') }}",
text: "{{ __('locale.labels.able_to_revert') }}",
icon: 'warning',
showCancelButton: true,
confirmButtonText: "{{ __('locale.labels.delete_it') }}",
customClass: {
confirmButton: 'btn btn-primary',
cancelButton: 'btn btn-outline-danger ms-1'
},
buttonsStyling: false,
}).then(function (result) {
if (result.value) {
$.ajax({
url: "{{ url('/chat-box')}}" + '/' + sms_id + '/delete',
type: "POST",
data: {
_token: "{{csrf_token()}}"
},
success: function (response) {
if (response.status === 'success') {
toastr['success'](response.message, '{{__('locale.labels.success')}}!!', {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
setTimeout(function () {
window.location.reload(); // then reload the page.(3)
}, 3000);
} else {
toastr['warning'](response.message, '{{ __('locale.labels.warning') }}!', {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
}
},
error: function (reject) {
if (reject.status === 422) {
let errors = reject.responseJSON.errors;
$.each(errors, function (key, value) {
toastr['warning'](value[0], "{{__('locale.labels.attention')}}", {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
});
} else {
toastr['warning'](reject.responseJSON.message, "{{__('locale.labels.attention')}}", {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
}
}
});
}
})
})
$(".add-to-blacklist").on('click', function (event) {
event.preventDefault();
let sms_id = $(".chat_id").val();
Swal.fire({
title: "{{ __('locale.labels.are_you_sure') }}",
text: "{{ __('locale.labels.remove_blacklist') }}",
icon: 'warning',
showCancelButton: true,
confirmButtonText: "{{ __('locale.labels.block') }}",
customClass: {
confirmButton: 'btn btn-primary',
cancelButton: 'btn btn-outline-danger ms-1'
},
buttonsStyling: false,
}).then(function (result) {
if (result.value) {
$.ajax({
url: "{{ url('/chat-box')}}" + '/' + sms_id + '/block',
type: "POST",
data: {
_token: "{{csrf_token()}}"
},
success: function (response) {
if (response.status === 'success') {
toastr['success'](response.message, '{{__('locale.labels.success')}}!!', {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
setTimeout(function () {
window.location.reload(); // then reload the page.(3)
}, 3000);
} else {
toastr['warning'](response.message, '{{ __('locale.labels.warning') }}!', {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
}
},
error: function (reject) {
if (reject.status === 422) {
let errors = reject.responseJSON.errors;
$.each(errors, function (key, value) {
toastr['warning'](value[0], "{{__('locale.labels.attention')}}", {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
});
} else {
toastr['warning'](reject.responseJSON.message, "{{__('locale.labels.attention')}}", {
closeButton: true,
positionClass: 'toast-top-right',
progressBar: true,
newestOnTop: true,
rtl: isRtl
});
}
}
});
}
})
})
@if(config('broadcasting.connections.pusher.app_id'))
window.Echo = new Echo({
broadcaster: 'pusher',
key: "{{ config('broadcasting.connections.pusher.key') }}",
cluster: "{{ config('broadcasting.connections.pusher.options.cluster') }}",
encrypted: true,
authEndpoint: '{{config('app.url')}}/broadcasting/auth'
});
Pusher.logToConsole = true;
Echo.private('chat').listen('MessageReceived', (e) => {
chatHistory.empty();
chatContainer.animate({scrollTop: chatContainer[0].scrollHeight}, 0)
let chat_id = e.data.uid;
$.ajax({
url: "{{ url('/chat-box')}}" + '/' + chat_id + '/notification',
type: "POST",
data: {
_token: "{{csrf_token()}}"
},
success: function (response) {
details = '<input type="hidden" value="' + chat_id + '" name="chat_id" class="chat_id">';
$(".media-list li").each(function () {
let uid = $(this).data('id');
if (chat_id === uid) {
let value = "li[data-id=" + uid + "]";
let notification = $(this).find('.counter');
notification.removeAttr('hidden');
$(value + " .notification_count").html(e.data.notification);
}
});
let cwData = JSON.parse(response.data);
$.each(cwData, function (i, sms) {
let media_url = '';
if (sms.media_url !== null) {
media_url = '<p><img src="' + sms.media_url + '"/></p>';
}
let message = '';
if (sms.message !== null) {
message = '<p>' + sms.message + '</p>';
}
if (sms.send_by === 'to') {
details += '<div class="chat chat-left">' +
'<div class="chat-avatar">' +
'<a class="avatar m-0" data-toggle="tooltip" href="#" data-placement="left" title="" data-original-title="">' +
'<img src="{{asset('images/profile/profile.jpg')}}" alt="avatar" height="40" width="40"/>' +
'</a>' +
'</div>' +
'<div class="chat-body">' +
'<div class="chat-content">' +
media_url +
message +
'</div>' +
'</div>' +
'</div>';
} else {
details += '<div class="chat">' +
'<div class="chat-avatar">' +
'<a class="avatar m-0" data-toggle="tooltip" href="#" data-placement="right" title="" data-original-title="">' +
'<img src="{{ route('user.avatar', Auth::user()->uid) }}" alt="avatar" height="40" width="40"/>' +
'</a>' +
'</div>' +
'<div class="chat-body">' +
'<div class="chat-content">' +
message +
'</div>' +
'</div>' +
'</div>';
}
});
chatHistory.append(details);
chatContainer.animate({scrollTop: chatContainer[0].scrollHeight}, 400)
}
});
})
@endif
</script>
@endsection