File size: 7,593 Bytes
1e59802
 
 
 
 
 
46505d1
8271f95
46505d1
73c463e
46505d1
 
 
 
 
b44aa74
e73abd1
8271f95
 
73c463e
e73abd1
 
8271f95
e73abd1
 
 
73c463e
 
 
e73abd1
 
 
 
 
73c463e
 
 
 
 
 
 
 
e73abd1
73c463e
 
 
e73abd1
73c463e
 
e73abd1
 
46505d1
e73abd1
1e59802
 
 
 
46505d1
1e59802
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e73abd1
 
1e59802
 
 
e73abd1
 
73c463e
 
 
 
e73abd1
73c463e
e73abd1
73c463e
 
e73abd1
73c463e
e73abd1
73c463e
e73abd1
 
 
1e59802
 
 
e73abd1
1e59802
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8271f95
 
e73abd1
 
1e59802
 
 
73c463e
1e59802
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73c463e
 
 
e73abd1
 
1e59802
e73abd1
 
1e59802
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73c463e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
/**
 * Client-Side JavaScript for the International Umbrella Endowment
 *
 * This version includes the fix to auto-populate the Deal ID into the lookup field upon successful submission.
 * Final Version: Monday, June 16, 2025
 */
document.addEventListener('DOMContentLoaded', () => {
    
    // --- CONFIGURATION ---
    const workerUrl = 'https://form-handler-worker.aiagents.workers.dev/';

    // --- ELEMENT SELECTIONS ---
    const submissionForm = document.getElementById('vessel-exchange-form');
    const lookupForm = document.getElementById('deal-lookup-form');
    const adminForm = document.getElementById('admin-action-form');
    
    const showSubmissionButton = document.getElementById('show-submission-button');
    const submissionModal = document.getElementById('submission-modal');
    const dealModal = document.getElementById('deal-modal');
    
    const lookupContainer = document.getElementById('lookup-container');
    const lookupInput = document.getElementById('lookup-deal-id');
    
    const submissionStatus = document.getElementById('status-message');
    const adminStatus = document.getElementById('admin-status-message');

    // --- EVENT LISTENERS ---
    
    if (showSubmissionButton) {
        showSubmissionButton.addEventListener('click', () => {
            submissionModal.classList.remove('hidden');
        });
    }

    [submissionModal, dealModal].forEach(modal => {
        if (modal) {
            modal.querySelector('.modal-close').addEventListener('click', () => closeModal(modal));
            modal.addEventListener('click', (event) => {
                if (event.target === modal) closeModal(modal);
            });
        }
    });

    if (submissionForm) submissionForm.addEventListener('submit', handleFormSubmit);
    if (lookupForm) lookupForm.addEventListener('submit', handleLookupSubmit);
    
    if (adminForm) {
        document.getElementById('admin-approve-button').addEventListener('click', () => handleAdminClick('approve'));
        document.getElementById('admin-decline-button').addEventListener('click', () => handleAdminClick('decline'));
    }

    // --- HANDLER FUNCTIONS ---

    /**
     * Handles the main form submission to create a new deal.
     * THIS FUNCTION CONTAINS THE FIX.
     */
    async function handleFormSubmit(event) {
        event.preventDefault();
        const submitButton = document.getElementById('submit-button');
        
        showStatus(submissionStatus, 'Submitting...');
        submitButton.disabled = true;
        
        try {
            const formData = new FormData(submissionForm);
            const response = await fetch(workerUrl, { method: 'POST', body: formData });
            const result = await response.json();

            if (!response.ok) {
                // Use the error message from the worker if available
                throw new Error(result.message || result.error || 'An unknown error occurred.');
            }
            
            const dealId = result.deal_id;
            
            // --- THIS IS THE CORRECTED LOGIC ---
            // 1. Update the success message.
            showSuccess(submissionStatus, `Success! Deal ID copied below.`);

            // 2. Automatically populate the lookup field on the main page.
            if(lookupInput) {
                lookupInput.value = dealId;
            }
            
            // 3. Highlight the lookup container to draw attention to it.
            if(lookupContainer) {
                lookupContainer.classList.add('highlight');
                setTimeout(() => {
                    lookupContainer.classList.remove('highlight');
                }, 2000); // Remove highlight after 2 seconds
            }

            submissionForm.reset();
            
            // 4. Close the modal after a delay so the user can see the message.
            setTimeout(() => closeModal(submissionModal), 2500);

        } catch (error) {
            showError(submissionStatus, error.message);
        } finally {
            submitButton.disabled = false;
        }
    }

    /**
     * Handles the lookup form submission to check a deal's status.
     */
    async function handleLookupSubmit(event) {
        event.preventDefault();
        if (!lookupInput.value) {
            alert('Please enter a Deal ID.');
            return;
        }
        try {
            const response = await fetch(`${workerUrl}?deal_id=${lookupInput.value}`);
            const result = await response.json();
            if (!response.ok) throw new Error(result.error || 'Deal not found.');
            
            openDealInfoModal(result);

        } catch (error) {
            alert(error.message);
        }
    }

    /**
     * Handles clicks on the admin approve/decline buttons.
     */
    async function handleAdminClick(action) {
        const dealId = document.getElementById('admin-deal-id').value;
        if (!dealId) {
            showError(adminStatus, 'Please enter a Deal ID.');
            return;
        }
        showStatus(adminStatus, 'Processing...');
        
        const formData = new FormData();
        formData.append('action', action);
        formData.append('deal_id', dealId);

        try {
            const response = await fetch(workerUrl, { method: 'POST', body: formData });
            const result = await response.json();
            if (!response.ok) throw new Error(result.message || result.error || 'Action failed.');
            showSuccess(adminStatus, result.message);
        } catch (error) {
            showError(adminStatus, error.message);
        }
    }

    // --- UI HELPER FUNCTIONS ---

    /**
     * Populates and opens the deal information modal.
     */
    function openDealInfoModal(dealData) {
        const modalBody = document.getElementById('modal-body');
        // Clear previous results
        modalBody.innerHTML = '';

        // Create and append deal details
        const details = {
            "Deal ID": dealData.deal_id,
            "Status": `<span class="badge ${dealData.status || 'active'}">${dealData.status}</span>`,
            "Owner": dealData.owner_name,
            "Contact Email": dealData.contact_email,
            "Contact Phone": dealData.contact_phone,
            "Vessel Year Built": dealData.year_built,
            "Gross Tonnage": dealData.gross_tonnage,
            "Tokens Requested": dealData.token_amount,
            "Description": `<p class="description-text">${dealData.vessel_description || 'N/A'}</p>`
        };

        for (const [key, value] of Object.entries(details)) {
            if (value) { // Only show fields that have data
                const p = document.createElement('p');
                p.innerHTML = `<strong>${key}:</strong> ${value}`;
                modalBody.appendChild(p);
            }
        }
        
        dealModal.classList.remove('hidden');
    }

    function closeModal(modalElement) {
        if(modalElement) modalElement.classList.add('hidden');
    }
    
    function showStatus(element, message) {
        element.className = 'status';
        element.innerHTML = message;
        element.style.display = 'block';
    }

    function showSuccess(element, message) {
        element.className = 'status success';
        element.innerHTML = `<strong>${message}</strong>`;
        element.style.display = 'block';
    }

    function showError(element, message) {
        element.className = 'status error';
        element.innerHTML = `<strong>Error:</strong> ${message}`;
        element.style.display = 'block';
    }
});