Add prebuilt chat overlay example
This commit is contained in:
parent
4554aa396a
commit
8e9b6337e8
|
|
@ -0,0 +1,17 @@
|
||||||
|
# Chat overlay
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## What does this demo do?
|
||||||
|
|
||||||
|
- Adds full-screen [Daily Prebuilt](https://www.daily.co/prebuilt) to a page
|
||||||
|
- Using [`app-message`](https://docs.daily.co/reference#app-message) and [`sendAppMessage()`](https://docs.daily.co/reference#%EF%B8%8F-sendappmessage), send and receive chat messages (with or without `enable_chat` set to `true` in the room)
|
||||||
|
- Allow users to send and receive chat messages while viewing other participants' videos
|
||||||
|
|
||||||
|
### Getting started
|
||||||
|
|
||||||
|
- Clone this repository and navigate to this folder (`git clone git@github.com:daily-demos/examples.git && cd prebuilt-ui/chat-overlay`)
|
||||||
|
- Set `ROOM_URL` on the first line of `main.js` to a Daily room you have created. Sign up and create a room from the [Daily dashboard](https://dashboard.daily.co/signup), if you haven't already!
|
||||||
|
- Run a server from this repo's directory. You can use something like `python -m SimpleHTTPServer` run on the command line in the repo's directory or use VSCode's Live Server extension. See [How do you set up a local testing server?](https://developer.mozilla.org/en-US/docs/Learn/Common_questions/set_up_a_local_testing_server) for more info.
|
||||||
|
- Register for a Daily.co account and create a Room [in the dashboard](https://dashboard.daily.co/rooms), and use that room URL on this page. You can join that room directly using other browser tabs or another device.
|
||||||
|
- Visit the server in your browser! You can use multiple tabs for testing out the chat experience.
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 77 KiB |
|
|
@ -0,0 +1,20 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>fullscreen embedded prebuilt with chat overlay</title>
|
||||||
|
<link rel="stylesheet" href="main.css">
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body onload="setup()">
|
||||||
|
<aside id="chatBox" class="hidden">
|
||||||
|
<div id="chatBoxTexts"></div>
|
||||||
|
<input id="chatBoxInput" type="text">
|
||||||
|
<button id="chatBoxButton">➡️</button>
|
||||||
|
</aside>
|
||||||
|
</body>
|
||||||
|
<script crossorigin src="https://unpkg.com/@daily-co/daily-js"></script>
|
||||||
|
<script src="main.js"></script>
|
||||||
|
</html>
|
||||||
|
|
@ -0,0 +1,61 @@
|
||||||
|
#chatBox {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 1000;
|
||||||
|
padding-left: 1.75em;
|
||||||
|
margin-bottom: 7.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 701px) {
|
||||||
|
#chatBox {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 801px) {
|
||||||
|
#chatBox {
|
||||||
|
margin-bottom: 4em;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#chatBox > input {
|
||||||
|
border: 1px solid #c8d1dc;
|
||||||
|
border-radius: 5px;
|
||||||
|
width: 74vw;
|
||||||
|
max-width: 22em;
|
||||||
|
background-color: rgba(255, 255, 255)
|
||||||
|
}
|
||||||
|
|
||||||
|
#chatBoxButton {
|
||||||
|
border: 1px solid #c8d1dc;
|
||||||
|
border-radius: 4px;
|
||||||
|
background-color: rgba(255, 255, 255);
|
||||||
|
}
|
||||||
|
|
||||||
|
#chatBoxTexts > p {
|
||||||
|
background-color: #121a2478;
|
||||||
|
display: table;
|
||||||
|
padding: 0.1em;
|
||||||
|
margin: 0;
|
||||||
|
color: white;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 1.25em;
|
||||||
|
border-radius: 0.5em;
|
||||||
|
word-wrap: break-word;
|
||||||
|
animation: fadeIn .5s cubic-bezier(.95,.05,.8,.04) forwards, fadeOut 15s cubic-bezier(.95,.05,.8,.04) forwards;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
visibility: hidden;
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from { opacity: 0; }
|
||||||
|
to { opacity: 1; }
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes fadeOut {
|
||||||
|
from { opacity: 1; }
|
||||||
|
to { opacity: 0; }
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
const ROOM_URL = "https://acb.daily.co/no-chat"
|
||||||
|
|
||||||
|
async function setup() {
|
||||||
|
callFrame = DailyIframe.createFrame({
|
||||||
|
url: ROOM_URL,
|
||||||
|
showLeaveButton: true,
|
||||||
|
iframeStyle: {
|
||||||
|
position: 'fixed',
|
||||||
|
border: 0,
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: '100%',
|
||||||
|
height: '100%',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
await callFrame.join();
|
||||||
|
document.getElementById("chatBox").classList.remove('hidden');
|
||||||
|
addChatBox()
|
||||||
|
}
|
||||||
|
|
||||||
|
function addChatMsg(event) {
|
||||||
|
const chatMsg = document.createElement("p");
|
||||||
|
chatMsg.innerText = (`${callFrame.participants()[event.fromId].user_name }: ${ event.data.message}`)
|
||||||
|
document.getElementById("chatBoxTexts").appendChild(chatMsg)
|
||||||
|
}
|
||||||
|
|
||||||
|
function addChatBox() {
|
||||||
|
callFrame.on("app-message", (event) => addChatMsg(event))
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById("chatBox").addEventListener("keyup", (event) => {
|
||||||
|
if (event.key === 'Enter') {
|
||||||
|
event.preventDefault();
|
||||||
|
document.getElementById("chatBoxButton").click();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
document.getElementById("chatBoxButton").addEventListener("click", () => {
|
||||||
|
let inputVal = document.getElementById("chatBoxInput").value;
|
||||||
|
callFrame.sendAppMessage({ message: inputVal }, '*');
|
||||||
|
const chatMsg = document.createElement("p");
|
||||||
|
chatMsg.innerText = (`${callFrame.participants().local.user_name }: ${ inputVal }`);
|
||||||
|
document.getElementById("chatBoxTexts").appendChild(chatMsg);
|
||||||
|
document.getElementById("chatBoxInput").value = "";
|
||||||
|
})
|
||||||
Loading…
Reference in New Issue