Chat window user interface using listview in EJ2 JavaScript Listview control
8 Aug 20237 minutes to read
ListView can be customized as chat window. To achieve that, use the ListView template property and Avatar control.
* The Listview template property is used to showcase the ListView as chat window.
* Avatar control is used to design the image of contact person.
Refer the below template code snippet for Template of chat window.
let template =
'<div class="settings">' +
'${if(chat!=="receiver")}' +
'<div id="content">' +
'<div class="name">${text}</div>' +
'<div id="info">${contact}</div></div>' +
'${if(avatar!=="")}' +
'<div id="image"><span class="e-avatar img1 e-avatar-circle">${avatar}</span></div>' +
"${else}" +
'<div id="image"><span class="${pic} img1 e-avatar e-avatar-circle"> </span></div>' +
"${/if}" +
"${else}" +
'${if(avatar!=="")}' +
'<div id="image2"><span class="e-avatar img2 e-avatar-circle">${avatar}</span></div>' +
"${else}" +
'<div id="image2"><span class="${pic} img2 e-avatar e-avatar-circle"> </span></div>' +
"${/if}" +
'<div id="content1">' +
'<div class="name1">${text}</div>' +
'<div id="info1">${contact}</div>' +
"</div>" +
"${/if}" +
"</div>";
Chat order in template
In ListView template, we have rendered the list items based on receiver and sender information from dataSource of listview.
Adding messages to chat window
* Use textbox to get message from user.
* Add the textbox message to ListView dataSource using [addItem](../../api/list-view/#additem) method.
document.getElementById("btn").addEventListener("click", e => {
var value = document.getElementById("name").value;
document
.getElementById("List")
.ej2_instances[0].addItem([
{
text: "Amenda",
contact: value,
id: "2",
avatar: "A",
pic: "",
chat: "receiver"
}
]);
});
var template =
'<div class="settings">' +
'${if(chat!=="receiver")}' +
'<div id="content">' +
'<div class="name">${text}</div>' +
'<div id="info">${contact}</div></div>' +
'${if(avatar!=="")}' +
'<div id="image"><span class="e-avatar img1 e-avatar-circle">${avatar}</span></div>' +
"${else}" +
'<div id="image"><span class="${pic} img1 e-avatar e-avatar-circle"> </span></div>' +
"${/if}" +
'${else}'+
'${if(avatar!=="")}' +
'<div id="image2"><span class="e-avatar img2 e-avatar-circle">${avatar}</span></div>' +
"${else}" +
'<div id="image2"><span class="${pic} img2 e-avatar e-avatar-circle"> </span></div>' +
"${/if}" +
'<div id="content1">' +
'<div class="name1">${text}</div>' +
'<div id="info1">${contact}</div>' +
"</div>"+
'${/if}'+
"</div>";
//Define an array of JSON data
var dataSource = [
{
text: "Jenifer",
contact: "Hi",
id: "1",
avatar: "",
pic: "pic01", chat: "sender"
},
{ text: "Amenda", contact: "Hello", id: "2", avatar: "A", pic: "", chat: "receiver" },
{
text: "Jenifer",
contact: "What Knid of application going to launch",
id: "4",
avatar: "",
pic: "pic02",chat: "sender"
},
{
text: "Amenda ",
contact: "A knid of Emergency broadcast App",
id: "5",
avatar: "A",
pic: "", chat: "receiver"
},
{
text: "Jacob",
contact: "Can you please elaborate",
id: "6",
avatar: "",
pic: "pic04",chat: "sender"
},
];
var listObj = new ej.lists.ListView({
//Set defined data to dataSource property.
//Set the defined data to the dataSource property
dataSource: dataSource,
//Map the appropriate columns to the fields property
fields: { text: "text" },
//Set the width of the ListView
width: "350px",
//Enable the header of the ListView
showHeader: true,
//Set the header title
headerTitle: "Chat",
//Set the customized template
template: template,
});
listObj.appendTo('#List');
var button = new ej.buttons.Button();
// Render initialized button.
button.appendTo('#btn');
document.getElementById('btn').addEventListener('click', (e) => {
var value = document.getElementById('name').value;
document.getElementById('List').ej2_instances[0].addItem([{ text: "Amenda", contact: value, id: "2", avatar: "A", pic: "", chat: "receiver" }]);
document.getElementById('name').value = "";
});
<!DOCTYPE html><html lang="en"><head>
<title>Essential JS 2 for ListView </title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Essential JS 2 for ListView UI Control">
<meta name="author" content="Syncfusion">
<link href="index.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-base/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-lists/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-buttons/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-layouts/styles/material.css" rel="stylesheet">
<link href="https://cdn.syncfusion.com/ej2/23.1.36/ej2-inputs/styles/material.css" rel="stylesheet">
<script src="https://cdn.syncfusion.com/ej2/23.1.36/dist/ej2.min.js" type="text/javascript"></script>
<script src="https://cdn.syncfusion.com/ej2/syncfusion-helper.js" type ="text/javascript"></script>
</head>
<body>
<div id="container">
<div id="List" tabindex="1"></div>
<div style="width: 350px;margin: 0 auto;"><input id="name" style="width: 275px" class="e-input" type="text" placeholder="Type your message">
<button id="btn" style="float:right">Send</button></div>
</div>
<script>
var ele = document.getElementById('container');
if(ele) {
ele.style.visibility = "visible";
}
</script>
<script src="index.js" type="text/javascript"></script>
</body></html>