All files / public/js CreateMember.mjs

3.12% Statements 1/32
0% Branches 0/12
0% Functions 0/4
3.22% Lines 1/31

Press n or j to go to the next uncovered block, b, p or k for the previous block.

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          12x                                                                                                                                        
// For modules ( .mjs ), we need to export the function
 
import { ElementCollection } from "./ElementCollection.mjs";
import {Endpoints} from "./Endpoints.mjs";
 
window.createMember = createMember;
 
export function createMember() {
    let response = "";
 
    let nameElement = ElementCollection.getMemberCreateModalNameField();
    let adminNumberElement = ElementCollection.getMemberCreateModalAdminNumberField();
    let gymProgramsElement = ElementCollection.getMemberCreateModalGymProgramsField();
    let modalMessageElement = ElementCollection.getMemberCreateModalMessage();
 
    // Assumes comma-separated list
    let gymPrograms = gymProgramsElement.value.split(",").map(item => item.trim());
 
    if (gymPrograms.length === 1 && gymPrograms[0] === "")
    {
        gymPrograms = [];
    }
 
    // Collecting data from the form
    const jsonData = {
        name: nameElement.value.trim(),
        adminNumber: adminNumberElement.value.trim(),
        gymPrograms: gymPrograms
    };
 
    // Basic validation
    if (!jsonData.name || !jsonData.adminNumber) {
        modalMessageElement.innerHTML = 'All fields are required!';
        modalMessageElement.setAttribute("class", "text-danger");
        return;
    }
 
    // Sending POST request to backend API
    const request = new XMLHttpRequest();
    request.open("POST", Endpoints.MEMBER_CREATE_ENDPOINT, true);
    request.setRequestHeader('Content-Type', 'application/json');
 
    request.onload = function ()
    {
        let success = request.status === 200;
 
        response = JSON.parse(request.responseText);
 
        // Check for successful creation
        // TODO: Change backend to return 201 status code
        if (success){
            modalMessageElement.innerHTML = `Added Member: ${jsonData.name}!`;
            modalMessageElement.setAttribute("class", "text-success");
 
            // Reset form fields
            nameElement.value = adminNumberElement.value = gymProgramsElement.value = '';
 
            // Refresh page to show new member
            // TODO: Implement function for re-fetching members
            window.location.reload();
        } else {
            modalMessageElement.innerHTML = response.message || 'Unable to add member!';
            modalMessageElement.setAttribute("class", "text-danger");
        }
    };
 
    request.onerror = function () {
        modalMessageElement.innerHTML = 'An error occurred!';
        modalMessageElement.setAttribute("class", "text-danger");
    };
 
    // Sending JSON data to the backend
    request.send(JSON.stringify(jsonData));
}