assets_js_controllers_edit-activity-description-controller.js

import { Controller } from "@hotwired/stimulus";

/**
 * EditActivityDescriptionController
 * 
 * Handles populating the edit activity description modal with data
 * when the edit button is clicked.
 */
class EditActivityDescriptionController extends Controller {
    static targets = ["activityId", "activityName", "defaultDescription", "customDescription"]
    
    connect() {
        // Store bound function reference for proper cleanup
        this.boundHandleModalShow = this.handleModalShow.bind(this);
        
        // Listen for modal show event to populate data
        const modal = document.getElementById('editActivityDescriptionModal');
        if (modal) {
            modal.addEventListener('show.bs.modal', this.boundHandleModalShow);
        }
    }
    
    /**
     * Handle modal show event - populate with data from the clicked button
     */
    handleModalShow(event) {
        // Get the button that triggered the modal
        const button = event.relatedTarget;
        
        if (button) {
            // Extract data from button attributes
            const activityId = button.getAttribute('data-activity-id');
            const activityName = button.getAttribute('data-activity-name');
            const defaultDescription = button.getAttribute('data-default-description');
            const customDescription = button.getAttribute('data-custom-description');
            
            // Populate the modal fields
            if (this.hasActivityIdTarget) {
                this.activityIdTarget.value = activityId;
            }
            
            if (this.hasActivityNameTarget) {
                this.activityNameTarget.textContent = activityName;
            }
            
            if (this.hasDefaultDescriptionTarget) {
                this.defaultDescriptionTarget.textContent = defaultDescription || 'No default description';
            }
            
            if (this.hasCustomDescriptionTarget) {
                this.customDescriptionTarget.value = customDescription || '';
            }
        }
    }
    
    disconnect() {
        const modal = document.getElementById('editActivityDescriptionModal');
        if (modal && this.boundHandleModalShow) {
            modal.removeEventListener('show.bs.modal', this.boundHandleModalShow);
            this.boundHandleModalShow = null;
        }
    }
}

// Add to global controllers registry
if (!window.Controllers) {
    window.Controllers = {};
}
window.Controllers["edit-activity-description"] = EditActivityDescriptionController;