From 9415011b5fd192f1bafeaa9b6eacbb7921382a00 Mon Sep 17 00:00:00 2001 From: David Gay Date: Wed, 19 May 2021 22:53:38 -0400 Subject: Chat --- app/javascript/controllers/chat_controller.js | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 app/javascript/controllers/chat_controller.js (limited to 'app/javascript/controllers') diff --git a/app/javascript/controllers/chat_controller.js b/app/javascript/controllers/chat_controller.js new file mode 100644 index 0000000..d9cf1cb --- /dev/null +++ b/app/javascript/controllers/chat_controller.js @@ -0,0 +1,42 @@ +import { Controller } from "stimulus"; + +export default class extends Controller { + static targets = [ "message", "output" ]; + + connect() { + this.load(); + } + + send() { + let vm = this; + // TODO: Temporary hack. Should just run this after default event. + setTimeout(function() { + vm.messageTarget.value = ""; + vm.smoothScrollToBottom(); + }, 100); + } + + load() { + this.scrollToBottom(); + if (this.outputTarget.innerHTML.trim() === "") { + fetch("/chat_messages") + .then(response => response.text()) + .then(html => { + this.outputTarget.innerHTML = html; + this.scrollToBottom(); + }); + } + } + + scrollToBottom() { + this.outputTarget.scrollTop = this.outputTarget.scrollHeight; + } + + smoothScrollToBottom() { + this.outputTarget.scrollTo({ + top: this.outputTarget.scrollHeight, + left: 0, + behavior: 'smooth' + }); + } +} -- cgit v1.2.3