import BaseController from "./base_controller";
import consumer from "../channels/consumer";
export default class extends BaseController {
static targets = ["index"];
connect() {
if (!this.hasIndexTarget) {
console.log("No index target found, skipping subscription")
return
}
this.setupSubscription();
}
setupSubscription() {
const userId = this.element.dataset.userId;
this.channel = consumer.subscriptions.create(
{ channel: "ImportsChannel" },
{
connected: () => {
},
disconnected: () => {
},
received: (data) => {
const row = this.element.querySelector(`tr[data-import-id="${data.import.id}"]`);
if (row) {
const pointsCell = row.querySelector('[data-points-count]');
if (pointsCell) {
pointsCell.textContent = new Intl.NumberFormat().format(data.import.points_count);
}
const statusCell = row.querySelector('[data-status-display]');
if (statusCell && data.import.status) {
statusCell.innerHTML = this.renderStatusBadge(data.import.status);
}
}
}
}
);
}
disconnect() {
if (this.channel) {
this.channel.unsubscribe();
}
}
renderStatusBadge(status) {
const statusLower = status.toLowerCase();
switch(statusLower) {
case 'completed':
return `
✓
Completed
`;
case 'processing':
return `
Processing
`;
case 'failed':
return `
✕
Failed
`;
default:
return `${this.capitalize(status)}`;
}
}
capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
}