class ShopifyChat extends HTMLElement {
constructor() {
super();
this.visible = false;
this.messages = [];
}
connectedCallback() {
this.render();
this.setupEventListeners();
this.loadMessages();
}
render() {
this.innerHTML = `
`;
}
setupEventListeners() {
const toggle = this.querySelector('.shopify-chat-toggle');
const widget = this.querySelector('.shopify-chat-widget');
const input = this.querySelector('.shopify-chat-input input');
const button = this.querySelector('.shopify-chat-input button');
toggle.addEventListener('click', () => {
this.visible = !this.visible;
widget.style.display = this.visible ? 'flex' : 'none';
});
const sendMessage = () => {
const message = input.value.trim();
if (message) {
this.addMessage(message, 'customer');
input.value = '';
this.simulateReply();
}
};
button.addEventListener('click', sendMessage);
input.addEventListener('keypress', (e) => {
if (e.key === 'Enter') sendMessage();
});
}
addMessage(text, sender) {
const messagesContainer = this.querySelector('.shopify-chat-messages');
const messageDiv = document.createElement('div');
messageDiv.className = `shopify-chat-message ${sender}`;
messageDiv.textContent = text;
messagesContainer.appendChild(messageDiv);
messagesContainer.scrollTop = messagesContainer.scrollHeight;
// Save to localStorage
this.messages.push({ text, sender, timestamp: new Date().toISOString() });
localStorage.setItem('shopifyChatMessages', JSON.stringify(this.messages));
}
loadMessages() {
const savedMessages = localStorage.getItem('shopifyChatMessages');
if (savedMessages) {
this.messages = JSON.parse(savedMessages);
this.messages.forEach(msg => {
this.addMessage(msg.text, msg.sender);
});
}
}
simulateReply() {
const replies = [
"Thanks for your message!",
"How can I help you today?",
"Our team will get back to you soon.",
"Is there anything specific you need help with?",
"We're here to help!",
"Thanks for reaching out!",
"Let me check that for you...",
"Great question! Let me find the answer."
];
setTimeout(() => {
const randomReply = replies[Math.floor(Math.random() * replies.length)];
this.addMessage(randomReply, 'admin');
}, 1000 + Math.random() * 2000);
}
}
customElements.define('shopify-chat', ShopifyChat);