fernando-bold's picture
"use client"
070478f verified
class CustomTemplateCard extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
const name = this.getAttribute('name') || '';
const status = this.getAttribute('status') || '';
const category = this.getAttribute('category') || '';
const language = this.getAttribute('language') || '';
this.shadowRoot.innerHTML = `
<style>
.card {
transition: all 0.2s ease;
cursor: pointer;
}
.card:hover {
transform: translateY(-2px);
box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}
.badge-approved {
background-color: #10B981;
color: white;
}
.badge-pending {
background-color: #F59E0B;
color: white;
}
.badge-rejected {
background-color: #EF4444;
color: white;
}
.badge-transactional {
background-color: #8B5CF6;
color: white;
}
.badge-marketing {
background-color: #F97316;
color: white;
}
.badge-seasonal {
background-color: #3B82F6;
color: white;
}
</style>
<div class="card bg-white p-4 rounded-lg border border-gray-200">
<div class="flex justify-between items-start">
<div>
<h3 class="font-medium text-gray-800">${name.replace(/_/g, ' ')}</h3>
<div class="flex items-center mt-2 space-x-2">
<span class="text-xs px-2 py-1 rounded-full ${this.getCategoryClass(category)}">
${this.getCategoryName(category)}
</span>
<span class="text-xs text-gray-500">${language}</span>
</div>
</div>
<span class="text-xs px-2 py-1 rounded-full ${this.getStatusClass(status)}">
${this.getStatusName(status)}
</span>
</div>
</div>
`;
}
getStatusClass(status) {
switch(status) {
case 'approved': return 'badge-approved';
case 'pending': return 'badge-pending';
case 'rejected': return 'badge-rejected';
default: return 'bg-gray-100 text-gray-800';
}
}
getStatusName(status) {
switch(status) {
case 'approved': return 'Approved';
case 'pending': return 'Pending';
case 'rejected': return 'Rejected';
default: return status;
}
}
getCategoryClass(category) {
switch(category) {
case 'transactional': return 'badge-transactional';
case 'marketing': return 'badge-marketing';
case 'seasonal': return 'badge-seasonal';
default: return 'bg-gray-100 text-gray-800';
}
}
getCategoryName(category) {
switch(category) {
case 'transactional': return 'Transactional';
case 'marketing': return 'Marketing';
case 'seasonal': return 'Seasonal';
default: return category;
}
}
}
customElements.define('custom-template-card', CustomTemplateCard);