/** * Platforms Manager - Alpine.js Component * * Handles platform listing and management for multi-platform CMS. */ const platformsLog = window.LogConfig.createLogger('PLATFORMS'); function platformsManager() { return { // Inherit base layout functionality from init-alpine.js ...data(), // Page identification currentPage: "platforms", // State platforms: [], loading: true, error: null, // Lifecycle async init() { platformsLog.info('=== PLATFORMS PAGE INITIALIZING ==='); // Duplicate initialization guard if (window._adminPlatformsInitialized) { platformsLog.warn('Platforms page already initialized, skipping...'); return; } window._adminPlatformsInitialized = true; try { await this.loadPlatforms(); platformsLog.info('=== PLATFORMS PAGE INITIALIZATION COMPLETE ==='); } catch (error) { window.LogConfig.logError(error, 'Platforms Init'); this.error = 'Failed to initialize page'; } }, // API Methods async loadPlatforms() { this.loading = true; this.error = null; try { const response = await apiClient.get("/admin/platforms"); this.platforms = response.platforms || []; platformsLog.info(`Loaded ${this.platforms.length} platforms`); } catch (err) { platformsLog.error("Error loading platforms:", err); this.error = err.message || "Failed to load platforms"; } finally { this.loading = false; } }, // Helper Methods getPlatformIcon(code) { const icons = { oms: "clipboard-list", loyalty: "star", sitebuilder: "template", default: "globe-alt", }; return icons[code] || icons.default; }, formatDate(dateString) { if (!dateString) return "—"; const date = new Date(dateString); return date.toLocaleDateString("fr-LU", { year: "numeric", month: "short", day: "numeric", }); }, }; }