new
parent
034f07dc10
commit
f300b70523
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,26 @@
|
||||
# Generated by Django 4.2.5 on 2024-08-01 16:49
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('osichat', '0016_chatmessageseen_seen_date'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='chatroom',
|
||||
name='date_terminated',
|
||||
field=models.DateTimeField(blank=True, null=True),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='chatroom',
|
||||
name='terminated_by',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='terminated_chatrooms', to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
]
|
Binary file not shown.
@ -0,0 +1,134 @@
|
||||
{%load static%}
|
||||
|
||||
<p id="chatRoomId" class="hidden">{{chat_room.id}}</p>
|
||||
|
||||
<div class="w-full h-full md:h-[450px] lg:h-[550px] bg-white rounded-b-none md:rounded-b-md flex flex-col justify-end">
|
||||
<div class="overflow-y-auto flex flex-col gap-5 px-5 pt-3" id="conversation">
|
||||
<!-- ROBOT -->
|
||||
<div class="w-full flex items-end gap-2">
|
||||
<div>
|
||||
<div
|
||||
class="w-[25px] h-[25px] rounded-full shadow-md text-white flex justify-center items-center bg-osiblue">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="w-4" color="#000000" fill="none">
|
||||
<path d="M4 15.5C2.89543 15.5 2 14.6046 2 13.5C2 12.3954 2.89543 11.5 4 11.5" stroke="white"
|
||||
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<path d="M20 15.5C21.1046 15.5 22 14.6046 22 13.5C22 12.3954 21.1046 11.5 20 11.5"
|
||||
stroke="white" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<path d="M7 7L7 4" stroke="white" stroke-width="1.5" stroke-linejoin="round" />
|
||||
<path d="M17 7L17 4" stroke="white" stroke-width="1.5" stroke-linejoin="round" />
|
||||
<circle cx="7" cy="3" r="1" stroke="white" stroke-width="1.5" stroke-linejoin="round" />
|
||||
<circle cx="17" cy="3" r="1" stroke="white" stroke-width="1.5" stroke-linejoin="round" />
|
||||
<path
|
||||
d="M13.5 7H10.5C7.67157 7 6.25736 7 5.37868 7.90898C4.5 8.81796 4.5 10.2809 4.5 13.2069C4.5 16.1329 4.5 17.5958 5.37868 18.5048C6.25736 19.4138 7.67157 19.4138 10.5 19.4138H11.5253C12.3169 19.4138 12.5962 19.5773 13.1417 20.1713C13.745 20.8283 14.6791 21.705 15.5242 21.9091C16.7254 22.1994 16.8599 21.7979 16.5919 20.6531C16.5156 20.327 16.3252 19.8056 16.526 19.5018C16.6385 19.3316 16.8259 19.2898 17.2008 19.2061C17.7922 19.074 18.2798 18.8581 18.6213 18.5048C19.5 17.5958 19.5 16.1329 19.5 13.2069C19.5 10.2809 19.5 8.81796 18.6213 7.90898C17.7426 7 16.3284 7 13.5 7Z"
|
||||
stroke="white" stroke-width="1.5" stroke-linejoin="round" />
|
||||
<path d="M9.5 15C10.0701 15.6072 10.9777 16 12 16C13.0223 16 13.9299 15.6072 14.5 15"
|
||||
stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" />
|
||||
<path d="M9.00896 11H9" stroke="#20336b" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round" />
|
||||
<path d="M15.009 11H15" stroke="#20336b" stroke-width="2" stroke-linecap="round"
|
||||
stroke-linejoin="round" />
|
||||
</svg>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="max-w-[80%] bg-gray-50 px-4 py-3 rounded-r-3xl rounded-tl-3xl text-secondosiblue text-sm leading-7 bg-opacity-50 shadow-md border border-gray-100">
|
||||
<p>{% if chat_room.chatroomguest.name %}Hello {{chat_room.chatroomguest.name}},{% else %}Hello,{% endif %} thank you for contacting us. Please bear with us while we
|
||||
connect you with the next available agent as soon as possible.</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- USER MESSAGES -->
|
||||
<div id="messages" class="w-full flex flex-col gap-5 pb-1">
|
||||
|
||||
{% for message in chat_room_messages %}
|
||||
<!-- STAFF MESSAGE -->
|
||||
{% if message.member %}
|
||||
<div class="w-full flex items-end justify-start gap-2">
|
||||
<div>
|
||||
<div
|
||||
class="w-[25px] h-[25px] rounded-full shadow-md text-white flex justify-center items-center bg-osiblue uppercase text-xs">
|
||||
{% if message.member.staffprofile.image %}
|
||||
<img class="w-full h-full rounded-full"
|
||||
src="http://192.168.1.111:8000{{message.member.staffprofile.image.url}}">
|
||||
{% else %}
|
||||
<p>{{message.member.first_name.0}}{{message.member.last_name.0}}</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% if not message.chatmessageattachment %}
|
||||
<div
|
||||
class="max-w-[80%] bg-gray-50 px-4 py-3 rounded-r-3xl rounded-tl-3xl text-secondosiblue text-sm leading-6 bg-opacity-50 shadow-md border border-gray-100">
|
||||
<p style="white-space: pre-line; overflow-wrap: anywhere;">{{message.content}}</p>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if message.chatmessageattachment.is_image %}
|
||||
<div
|
||||
class="max-w-[80%] bg-gray-50 p-4 rounded-r-3xl rounded-tl-3xl text-secondosiblue text-sm leading-6 bg-opacity-50 shadow-md border border-gray-100">
|
||||
<img src="http://192.168.1.106:8000/{{message.chatmessageattachment.attachment}}" class="rounded-md">
|
||||
</div>
|
||||
{% else %}
|
||||
<div
|
||||
class="max-w-[80%] bg-gray-50 p-4 rounded-r-3xl rounded-tl-3xl text-secondosiblue text-sm leading-6 bg-opacity-50 shadow-md border border-gray-100">
|
||||
<div class="w-full flex items-center gap-1">
|
||||
<div>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="w-5 text-secondosiblue notFilledSvg">
|
||||
<path d="M8 7L16 7" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M8 11L12 11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M13 21.5V21C13 18.1716 13 16.7574 13.8787 15.8787C14.7574 15 16.1716 15 19 15H19.5M20 13.3431V10C20 6.22876 20 4.34315 18.8284 3.17157C17.6569 2 15.7712 2 12 2C8.22877 2 6.34315 2 5.17157 3.17157C4 4.34314 4 6.22876 4 10L4 14.5442C4 17.7892 4 19.4117 4.88607 20.5107C5.06508 20.7327 5.26731 20.9349 5.48933 21.1139C6.58831 22 8.21082 22 11.4558 22C12.1614 22 12.5141 22 12.8372 21.886C12.9044 21.8623 12.9702 21.835 13.0345 21.8043C13.3436 21.6564 13.593 21.407 14.0919 20.9081L18.8284 16.1716C19.4065 15.5935 19.6955 15.3045 19.8478 14.9369C20 14.5694 20 14.1606 20 13.3431Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<span class="text-xs">{{message.chatmessageattachment.file_name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
<!-- GUEST MESSAGE -->
|
||||
{% else %}
|
||||
{% if not message.chatmessageattachment %}
|
||||
<div class="w-full flex justify-end">
|
||||
<div
|
||||
class="max-w-[80%] px-4 py-3 rounded-l-3xl rounded-tr-3xl text-white shadow-md text-sm leading-6 bg-opacity-70 bg-osiblue">
|
||||
<p style="white-space: pre-line; overflow-wrap: anywhere;">{{message.content}}</p>
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
{% if message.chatmessageattachment.is_image %}
|
||||
<div class="w-full flex justify-end">
|
||||
<div class="max-w-[80%] p-4 rounded-l-3xl rounded-tr-3xl text-white shadow-md text-sm leading-6 bg-opacity-70 bg-osiblue">
|
||||
<img src="http://192.168.1.111:8000/{{message.chatmessageattachment.attachment}}" class="rounded-md">
|
||||
</div>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="w-full flex justify-end">
|
||||
<div class="max-w-[80%] p-4 rounded-l-3xl rounded-tr-3xl text-white shadow-md text-sm leading-6 bg-opacity-70 bg-osiblue">
|
||||
<div class="w-full flex items-center gap-1">
|
||||
<div>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="w-5 text-white notFilledSvg">
|
||||
<path d="M8 7L16 7" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M8 11L12 11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
<path d="M13 21.5V21C13 18.1716 13 16.7574 13.8787 15.8787C14.7574 15 16.1716 15 19 15H19.5M20 13.3431V10C20 6.22876 20 4.34315 18.8284 3.17157C17.6569 2 15.7712 2 12 2C8.22877 2 6.34315 2 5.17157 3.17157C4 4.34314 4 6.22876 4 10L4 14.5442C4 17.7892 4 19.4117 4.88607 20.5107C5.06508 20.7327 5.26731 20.9349 5.48933 21.1139C6.58831 22 8.21082 22 11.4558 22C12.1614 22 12.5141 22 12.8372 21.886C12.9044 21.8623 12.9702 21.835 13.0345 21.8043C13.3436 21.6564 13.593 21.407 14.0919 20.9081L18.8284 16.1716C19.4065 15.5935 19.6955 15.3045 19.8478 14.9369C20 14.5694 20 14.1606 20 13.3431Z" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"></path>
|
||||
</svg>
|
||||
</div>
|
||||
<div class="flex flex-col">
|
||||
<span class="text-xs">{{message.chatmessageattachment.file_name}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
<audio id="notification-sound" src="http://192.168.1.111:8000/static/notifications/osichat-notification.mp3" preload="auto"></audio>
|
||||
|
||||
<div id="typing" class="hidden"></div>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
Binary file not shown.
After Width: | Height: | Size: 99 KiB |
Binary file not shown.
After Width: | Height: | Size: 41 KiB |
Binary file not shown.
After Width: | Height: | Size: 45 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.1 MiB |
@ -0,0 +1,29 @@
|
||||
(function() {
|
||||
const endChat = document.getElementById('endChat');
|
||||
const endChatConfirmationContainer = document.getElementById("endChatConfirmationContainer");
|
||||
const closeConfirmationMessage = document.getElementById('closeConfirmationMessage');
|
||||
const endChatConfirmed = document.getElementById('endChatComfirmed');
|
||||
|
||||
|
||||
endChat.addEventListener("click", function() {
|
||||
if (endChatConfirmationContainer) {
|
||||
endChatConfirmationContainer.classList.remove("hidden");
|
||||
}
|
||||
});
|
||||
|
||||
closeConfirmationMessage.addEventListener("click", function() {
|
||||
if (closeConfirmationMessage) {
|
||||
endChatConfirmationContainer.classList.add("hidden");
|
||||
}
|
||||
});
|
||||
|
||||
endChatConfirmed.addEventListener("click", function() {
|
||||
const eventMessage = {
|
||||
event_type: 'end_chat',
|
||||
};
|
||||
|
||||
osichatSocket.send(JSON.stringify(eventMessage));
|
||||
|
||||
});
|
||||
|
||||
})();
|
Loading…
Reference in New Issue