{"version":3,"file":"js/264-9a26344db519f7735991.js","mappings":"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","sources":["webpack://app/./app/javascript/tableRowValidator.js"],"sourcesContent":["export const rowValidationFunctions = Object.freeze(\n    {\n        educations: validateEducationRow,\n        educations_ca_context: validateEducationRowCaContext,\n        educations_ca_context_edg: validateEducationRowCaContextEDG,\n        emails: validateEmailRow,\n        languages: validateLanguageRow,\n        license_certificates: validateLicenseOrCertificationRow,\n        military_experiences: validateMilitaryExperienceRow,\n        websites: validatePersonalOrSocialWebsiteRow,\n        telephones: validatePhoneRow,\n        employments: validateEmploymentRow\n    }\n);\n\nexport const tableValidationFunctions = Object.freeze(\n    {\n        educations: validateEducationTable,\n        educations_ca_context: validateEducationTableCaContext,\n        educations_ca_context_edg: validateEducationTableCaContextEDG,\n        emails: validateEmailTable,\n        languages: validateLanguageTable,\n        license_certificates: validateLicenseOrCertificationTable,\n        military_experiences: validateMilitaryExperienceTable,\n        websites: validatePersonalOrSocialWebsiteTable,\n        telephones: validatePhoneTable,\n        employments: validateEmploymentTable\n    }\n);\n\nfunction validateEmailRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        contact_info_value: true,\n        hasAllRequiredValues: null,\n        hasProperlyFormattedValue: null\n    };\n    validateRequired(columns, validationsMap);\n    if (validationsMap.hasAllRequiredValues) {\n        validateEmailFormat(columns, validationsMap);\n    }\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateEmailTable (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableIsUsingProperlyFormattedValues = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateEmailRow(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableIsUsingProperlyFormattedValues.push(validatedRow.hasProperlyFormattedValue);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableIsUsingProperlyFormattedValues.includes(false)) {\n        messages.errors.push(invalidEmailFormat);\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validatePhoneRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        phone_type: true,\n        country_code: true,\n        phone_number: true,\n        hasAllRequiredValues: null,\n        hasProperlyFormattedValue: null\n    };\n    validateRequired(columns, validationsMap);\n    if (validationsMap.hasAllRequiredValues) { validatePhoneFormat(columns, validationsMap); }\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validatePhoneTable (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableHasProperlyFormattedPhones = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validatePhoneRow(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableHasProperlyFormattedPhones.push(validatedRow.hasProperlyFormattedValue);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableHasProperlyFormattedPhones.includes(false)) {\n        messages.errors.push(invalidPhoneMessage);\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validateEmploymentRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        employer: true,\n        job_title: true,\n        employment_type: true,\n        start_date: true,\n        end_date: true,\n        is_current: true,\n        hasAllRequiredValues: null\n    };\n\n    validateRequired(columns, validationsMap);\n    validateLatin(columns, validationsMap);\n    validateDates(columns, validationsMap);\n    const isCurrentEmployment = columns.filter(column => column.property === 'is_current')[0].value;\n    if (isCurrentEmployment && validationsMap.hasProperlyFormattedEndDate) {\n        const endDate = columns.filter(column => column.property === 'end_date')[0];\n        if (endDate.value) {\n            const endDateComparisonObject = getFormattedInputAndCurrentDates(endDate.value);\n            const valid = endDateComparisonObject.inputDate >= endDateComparisonObject.currentDate;\n            endDate.valid = valid;\n            validationsMap.is_current = valid;\n            validationsMap.end_date = valid;\n        }\n    }\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateEmploymentTable (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableHasAllLatinValues = [];\n    const tableHasProperlyFormattedDates = [];\n    const tableHasNoConflictingDates = [];\n    const tableHasNoCurrentEmploymentWithEndDatesInThePast = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateEmploymentRow(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableHasAllLatinValues.push(validatedRow.hasAllLatinValues);\n        tableHasProperlyFormattedDates.push(validatedRow.hasProperlyFormattedStartDate);\n        tableHasProperlyFormattedDates.push(validatedRow.hasProperlyFormattedEndDate);\n        tableHasNoConflictingDates.push(validatedRow.hasNoConflictingDates);\n        if (!validatedRow.is_current) {\n            tableHasNoCurrentEmploymentWithEndDatesInThePast.push(false);\n        }\n        row.valid = validatedRow.valid;\n        validations.push(validatedRow.valid);\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableHasAllLatinValues.includes(false)) {\n        messages.errors.push(englishOnlyMessage);\n    }\n    if (tableHasProperlyFormattedDates.includes(false)) {\n        messages.errors.push(invalidDateFormat);\n    } else {\n        if (tableHasNoConflictingDates.includes(false)) {\n            messages.errors.push(invalidEmploymentEndDateBeforeStartDate);\n        } else {\n            if (tableHasNoCurrentEmploymentWithEndDatesInThePast.includes(false)) {\n                messages.errors.push(invalidEmploymentEndDateMessage);\n            }\n        }\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validateEducationRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        country_code: true,\n        school_name: true,\n        major: true,\n        education_status: true,\n        degree_type: true,\n        start_date: true,\n        end_date: true,\n        gpa: true,\n        highest_possible_value: true,\n        hasAllRequiredValues: null,\n        hasAllLatinValues: null,\n        hasProperlyFormattedDates: null,\n        hasNoConflictingDates: null\n    };\n\n    let requiredColumnsWithMissingValues = columns.filter(column => column.is_required && !column.value);\n    const educationStatus = columns.filter(column => column.property === 'education_status')[0];\n    const endDate = columns.filter(column => column.property === 'end_date')[0];\n    if (!requiredColumnsWithMissingValues.includes(educationStatus) && educationStatus.value.toString() === didNotGraduateNoLongerEnrolledStatus) {\n        if (requiredColumnsWithMissingValues.includes(endDate)) {\n            requiredColumnsWithMissingValues = requiredColumnsWithMissingValues.filter(item => item !== endDate);\n        }\n    }\n    requiredColumnsWithMissingValues.forEach((column) => { validationsMap[column.property] = false; column.valid = false; });\n    validationsMap.hasAllRequiredValues = requiredColumnsWithMissingValues.length === 0;\n    validateLatin(columns, validationsMap);\n    validateDatesForEducationRow(columns, validationsMap);\n    const gpa = columns.filter(column => column.property === 'gpa')[0];\n    const highestPossibleGpa = columns.filter(column => column.property === 'highest_possible_value')[0];\n    let hasNumericGpa;\n    let hasNumericHighestPossibleGpa;\n    if (gpa.value) {\n        hasNumericGpa = testPattern('digit', gpa.value);\n        gpa.valid = hasNumericGpa;\n        validationsMap.hasNumericGpa = hasNumericGpa;\n    } else {\n        if (!gpa.is_required) {\n            gpa.valid = true;\n            validationsMap.hasNumericGpa = true;\n        }\n    }\n    if (highestPossibleGpa.value) {\n        hasNumericHighestPossibleGpa = testPattern('digit', highestPossibleGpa.value);\n        highestPossibleGpa.valid = hasNumericHighestPossibleGpa;\n        validationsMap.hasNumericHighestPossibleGpa = hasNumericHighestPossibleGpa;\n    } else {\n        if (!highestPossibleGpa.is_required) {\n            highestPossibleGpa.valid = true;\n            validationsMap.hasNumericHighestPossibleGpa = true;\n        }\n    }\n    if (hasNumericGpa && hasNumericHighestPossibleGpa) {\n        const parsedGpaValue = gpa.value.includes('.') ? parseFloat(gpa.value) : parseInt(gpa.value);\n        const parsedHighestPossibleGpa = highestPossibleGpa.value.includes('.') ? parseFloat(highestPossibleGpa.value) : parseInt(highestPossibleGpa.value);\n        const isValidRatio = parsedGpaValue <= parsedHighestPossibleGpa;\n        highestPossibleGpa.valid = isValidRatio;\n        validationsMap.hasValidGPARatio = isValidRatio;\n    }\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateEducationRowCaContext (columns) {\n    const validations = [];\n    const validationsMap = {\n        country_code: true,\n        school_name: true,\n        major: true,\n        education_status: true,\n        degree_type: true,\n        gpa: true,\n        highest_possible_value: true,\n        hasAllRequiredValues: null,\n        hasAllLatinValues: null\n    };\n\n    let requiredColumnsWithMissingValues = columns.filter(column => column.is_required && !column.value);\n    requiredColumnsWithMissingValues.forEach((column) => { validationsMap[column.property] = false; column.valid = false; });\n    validationsMap.hasAllRequiredValues = requiredColumnsWithMissingValues.length === 0;\n    validateLatin(columns, validationsMap);\n    const gpa = columns.filter(column => column.property === 'gpa')[0];\n    const highestPossibleGpa = columns.filter(column => column.property === 'highest_possible_value')[0];\n    let hasNumericGpa;\n    let hasNumericHighestPossibleGpa;\n    if (gpa.value) {\n        hasNumericGpa = testPattern('digit', gpa.value);\n        gpa.valid = hasNumericGpa;\n        validationsMap.hasNumericGpa = hasNumericGpa;\n    } else {\n        if (!gpa.is_required) {\n            gpa.valid = true;\n            validationsMap.hasNumericGpa = true;\n        }\n    }\n    if (highestPossibleGpa.value) {\n        hasNumericHighestPossibleGpa = testPattern('digit', highestPossibleGpa.value);\n        highestPossibleGpa.valid = hasNumericHighestPossibleGpa;\n        validationsMap.hasNumericHighestPossibleGpa = hasNumericHighestPossibleGpa;\n    } else {\n        if (!highestPossibleGpa.is_required) {\n            highestPossibleGpa.valid = true;\n            validationsMap.hasNumericHighestPossibleGpa = true;\n        }\n    }\n    if (hasNumericGpa && hasNumericHighestPossibleGpa) {\n        const parsedGpaValue = gpa.value.includes('.') ? parseFloat(gpa.value) : parseInt(gpa.value);\n        const parsedHighestPossibleGpa = highestPossibleGpa.value.includes('.') ? parseFloat(highestPossibleGpa.value) : parseInt(highestPossibleGpa.value);\n        const isValidRatio = parsedGpaValue <= parsedHighestPossibleGpa;\n        highestPossibleGpa.valid = isValidRatio;\n        validationsMap.hasValidGPARatio = isValidRatio;\n    }\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateEducationRowCaContextEDG (columns) {\n    const validations = [];\n    const validationsMap = {\n        country_code: true,\n        school_name: true,\n        major: true,\n        education_status: true,\n        degree_type: true,\n        end_date: true,\n        gpa: true,\n        highest_possible_value: true,\n        hasAllRequiredValues: null,\n        hasAllLatinValues: null,\n        hasProperlyFormattedDates: null\n    };\n\n    let requiredColumnsWithMissingValues = columns.filter(column => column.is_required && !column.value);\n    requiredColumnsWithMissingValues.forEach((column) => { validationsMap[column.property] = false; column.valid = false; });\n    validationsMap.hasAllRequiredValues = requiredColumnsWithMissingValues.length === 0;\n    validateLatin(columns, validationsMap);\n    const educationStatus = columns.filter(column => column.property === 'education_status')[0];\n    const endDate = columns.filter(column => column.property === 'end_date')[0];\n    if (!requiredColumnsWithMissingValues.includes(educationStatus) && educationStatus.value.toString() === didNotGraduateCurrentlyEnrolledStatus) {\n        if (requiredColumnsWithMissingValues.includes(endDate)) {\n            requiredColumnsWithMissingValues = requiredColumnsWithMissingValues.filter(item => item !== endDate);\n        } else {\n            validateEndDateForCaContextEDG(educationStatus, endDate, validationsMap);\n        }\n    }\n    requiredColumnsWithMissingValues.forEach((column) => { validationsMap[column.property] = false; column.valid = false; });\n    const gpa = columns.filter(column => column.property === 'gpa')[0];\n    const highestPossibleGpa = columns.filter(column => column.property === 'highest_possible_value')[0];\n    let hasNumericGpa;\n    let hasNumericHighestPossibleGpa;\n    if (gpa.value) {\n        hasNumericGpa = testPattern('digit', gpa.value);\n        gpa.valid = hasNumericGpa;\n        validationsMap.hasNumericGpa = hasNumericGpa;\n    } else {\n        if (!gpa.is_required) {\n            gpa.valid = true;\n            validationsMap.hasNumericGpa = true;\n        }\n    }\n    if (highestPossibleGpa.value) {\n        hasNumericHighestPossibleGpa = testPattern('digit', highestPossibleGpa.value);\n        highestPossibleGpa.valid = hasNumericHighestPossibleGpa;\n        validationsMap.hasNumericHighestPossibleGpa = hasNumericHighestPossibleGpa;\n    } else {\n        if (!highestPossibleGpa.is_required) {\n            highestPossibleGpa.valid = true;\n            validationsMap.hasNumericHighestPossibleGpa = true;\n        }\n    }\n    if (hasNumericGpa && hasNumericHighestPossibleGpa) {\n        const parsedGpaValue = gpa.value.includes('.') ? parseFloat(gpa.value) : parseInt(gpa.value);\n        const parsedHighestPossibleGpa = highestPossibleGpa.value.includes('.') ? parseFloat(highestPossibleGpa.value) : parseInt(highestPossibleGpa.value);\n        const isValidRatio = parsedGpaValue <= parsedHighestPossibleGpa;\n        highestPossibleGpa.valid = isValidRatio;\n        validationsMap.hasValidGPARatio = isValidRatio;\n    }\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction checkEducationEndDateAgainstGraduatedStatus (endDate, validationMap) {\n    const endDateComparisonObject = getFormattedInputAndCurrentDates(endDate.value);\n    const isEndDateCurrentOrInThePast = endDateComparisonObject.inputDate <= endDateComparisonObject.currentDate;\n    if (!isEndDateCurrentOrInThePast) {\n        endDate.valid = false;\n        validationMap.hasGraduatedEndDateInThePast = false;\n        validationMap.end_date = false;\n    }\n}\n\nfunction checkEducationEndDateAgainstDidNotGraduateCurrentlyEnrolledStatus (endDate, validationMap) {\n    const endDateComparisonObject = getFormattedInputAndCurrentDates(endDate.value);\n    const isEndDateCurrentOrInThePast = endDateComparisonObject.inputDate >= endDateComparisonObject.currentDate;\n    if (!isEndDateCurrentOrInThePast) {\n        endDate.valid = false;\n        validationMap.hasNotGraduatedCurrentlyEnrolledEndDateCurrentOrInTheFuture = false;\n        validationMap.end_date = false;\n    }\n}\n\nfunction validateEducationTable (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableHasAllLatinValues = [];\n    const tableHasProperlyFormattedDates = [];\n    const tableHasGraduatedStatusWithValidStartDates = [];\n    const tableHasGraduatedStatusWithValidEndDates = [];\n    const tableHasNotGraduatedStatusWithValidEndDates = [];\n    const tableHasNoConflictingDates = [];\n    const tableHasNumericGpa = [];\n    const tableHasNumericHighestPossibleGpa = [];\n    const tableHasValidGPARanges = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateEducationRow(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableHasAllLatinValues.push(validatedRow.hasAllLatinValues);\n        tableHasProperlyFormattedDates.push(validatedRow.hasProperlyFormattedStartDate);\n        tableHasProperlyFormattedDates.push(validatedRow.hasProperlyFormattedEndDate);\n        tableHasNoConflictingDates.push(validatedRow.hasNoConflictingDates);\n        if (validatedRow.hasGraduatedEndDateInThePast != null) {\n            tableHasGraduatedStatusWithValidEndDates.push(validatedRow.hasGraduatedEndDateInThePast);\n        }\n        if (validatedRow.hasNotGraduatedCurrentlyEnrolledEndDateCurrentOrInTheFuture != null) {\n            tableHasNotGraduatedStatusWithValidEndDates.push(validatedRow.hasNotGraduatedCurrentlyEnrolledEndDateCurrentOrInTheFuture);\n        }\n        tableHasNumericGpa.push(validatedRow.hasNumericGpa);\n        tableHasNumericHighestPossibleGpa.push(validatedRow.hasNumericHighestPossibleGpa);\n        tableHasValidGPARanges.push(validatedRow.hasValidGPARatio);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableHasAllLatinValues.includes(false)) {\n        messages.errors.push(englishOnlyMessage);\n    }\n    if (tableHasProperlyFormattedDates.includes(false)) {\n        messages.errors.push(invalidDateFormat);\n    }\n    if (tableHasNoConflictingDates.includes(false)) {\n        messages.errors.push(invalidEducationEndDateBeforeStartDate);\n    }\n    if (tableHasNumericGpa.includes(false)) {\n        messages.errors.push(invalidGPAMessage);\n    }\n    if (tableHasNumericHighestPossibleGpa.includes(false)) {\n        messages.errors.push(invalidGPAMaximumMessage);\n    }\n    if (tableHasValidGPARanges.includes(false)) {\n        messages.errors.push(invalidGPARange);\n    }\n    if (tableHasGraduatedStatusWithValidStartDates.includes(false)) {\n        messages.errors.push(invalidGraduatedStartDateInTheFuture);\n    }\n    if (tableHasGraduatedStatusWithValidEndDates.includes(false)) {\n        messages.errors.push(invalidGraduatedEndDateInTheFuture);\n    }\n    if (tableHasNotGraduatedStatusWithValidEndDates.includes(false)) {\n        messages.errors.push(invalidCurrentlyEnrolledNotGraduatedEndDateInThePast);\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validateEducationTableCaContext (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableHasAllLatinValues = [];\n    const tableHasNumericGpa = [];\n    const tableHasNumericHighestPossibleGpa = [];\n    const tableHasValidGPARanges = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateEducationRowCaContext(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableHasAllLatinValues.push(validatedRow.hasAllLatinValues);\n        tableHasNumericGpa.push(validatedRow.hasNumericGpa);\n        tableHasNumericHighestPossibleGpa.push(validatedRow.hasNumericHighestPossibleGpa);\n        tableHasValidGPARanges.push(validatedRow.hasValidGPARatio);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableHasAllLatinValues.includes(false)) {\n        messages.errors.push(englishOnlyMessage);\n    }\n    if (tableHasNumericGpa.includes(false)) {\n        messages.errors.push(invalidGPAMessage);\n    }\n    if (tableHasNumericHighestPossibleGpa.includes(false)) {\n        messages.errors.push(invalidGPAMaximumMessage);\n    }\n    if (tableHasValidGPARanges.includes(false)) {\n        messages.errors.push(invalidGPARange);\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validateEducationTableCaContextEDG (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableHasAllLatinValues = [];\n    const tableHasProperlyFormattedDates = [];\n    const tableHasNotGraduatedStatusWithValidEndDates = [];\n    const tableHasNumericGpa = [];\n    const tableHasNumericHighestPossibleGpa = [];\n    const tableHasValidGPARanges = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateEducationRowCaContextEDG(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableHasAllLatinValues.push(validatedRow.hasAllLatinValues);\n        tableHasProperlyFormattedDates.push(validatedRow.hasProperlyFormattedEndDate);\n        if (validatedRow.hasNotGraduatedCurrentlyEnrolledEndDateCurrentOrInTheFuture != null) {\n            tableHasNotGraduatedStatusWithValidEndDates.push(validatedRow.hasNotGraduatedCurrentlyEnrolledEndDateCurrentOrInTheFuture);\n        }\n        tableHasNumericGpa.push(validatedRow.hasNumericGpa);\n        tableHasNumericHighestPossibleGpa.push(validatedRow.hasNumericHighestPossibleGpa);\n        tableHasValidGPARanges.push(validatedRow.hasValidGPARatio);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableHasAllLatinValues.includes(false)) {\n        messages.errors.push(englishOnlyMessage);\n    }\n    if (tableHasProperlyFormattedDates.includes(false)) {\n        messages.errors.push(invalidDateFormat);\n    }\n    if (tableHasNumericGpa.includes(false)) {\n        messages.errors.push(invalidGPAMessage);\n    }\n    if (tableHasNumericHighestPossibleGpa.includes(false)) {\n        messages.errors.push(invalidGPAMaximumMessage);\n    }\n    if (tableHasValidGPARanges.includes(false)) {\n        messages.errors.push(invalidGPARange);\n    }\n    if (tableHasNotGraduatedStatusWithValidEndDates.includes(false)) {\n        messages.errors.push(invalidCurrentlyEnrolledNotGraduatedEndDateInThePast);\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validateLanguageRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        language_code: true,\n        fluency_id: true,\n        hasAllRequiredValues: null\n    };\n    validateRequired(columns, validationsMap);\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateLanguageTable (rows) {\n    return validateRequiredTable(rows);\n}\n\nfunction validateLicenseOrCertificationRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        license_certificate: true,\n        hasAllRequiredValues: null,\n        hasAllLatinValues: null\n    };\n    validateRequired(columns, validationsMap);\n    validateLatin(columns, validationsMap);\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateLicenseOrCertificationTable (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableHasAllLatinValues = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateLicenseOrCertificationRow(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableHasAllLatinValues.push(validatedRow.hasAllLatinValues);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableHasAllLatinValues.includes(false)) {\n        messages.errors.push(englishOnlyMessage);\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validatePersonalOrSocialWebsiteRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        contact_info_value: true,\n        hasAllRequiredValues: null,\n        hasAllLatinValues: null\n    };\n    validateRequired(columns, validationsMap);\n    validateLatin(columns, validationsMap);\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validatePersonalOrSocialWebsiteTable (rows) {\n    return validateLicenseOrCertificationTable(rows);\n}\n\nfunction validateMilitaryExperienceRow (columns) {\n    const validations = [];\n    const validationsMap = {\n        branch: true,\n        start_date: true,\n        end_date: true,\n        hasAllRequiredValues: null,\n        hasAllLatinValues: null,\n        hasProperlyFormattedDates: null,\n        hasNoConflictingDates: null\n    };\n\n    validateRequired(columns, validationsMap);\n    validateLatin(columns, validationsMap);\n    validateDates(columns, validationsMap);\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateMilitaryExperienceTable (rows) {\n    return validateRequiredLatinAndDatesTable(rows);\n}\n\nfunction validateRequiredRow (columns) {\n    const validationsMap = {\n        hasAllRequiredValues: null\n    };\n    const validations = [];\n    validateRequired(columns, validationsMap);\n    for (const property in validationsMap) { validations.push(validationsMap[property]); }\n    validationsMap.valid = !validations.includes(false);\n    return validationsMap;\n}\n\nfunction validateRequiredTable (rows) {\n    const tableHasAllRequiredValues = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateRequiredRow(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validateRequiredLatinAndDatesTable (rows) {\n    const tableHasAllRequiredValues = [];\n    const tableHasAllLatinValues = [];\n    const tableHasProperlyFormattedDates = [];\n    const tableHasNoConflictingDates = [];\n    const validations = [];\n    let counter = 0;\n    rows.forEach((row) => {\n        const validatedRow = validateMilitaryExperienceRow(row.columns);\n        tableHasAllRequiredValues.push(validatedRow.hasAllRequiredValues);\n        tableHasAllLatinValues.push(validatedRow.hasAllLatinValues);\n        tableHasProperlyFormattedDates.push(validatedRow.hasProperlyFormattedStartDate);\n        tableHasProperlyFormattedDates.push(validatedRow.hasProperlyFormattedEndDate);\n        tableHasNoConflictingDates.push(validatedRow.hasNoConflictingDates);\n        validations.push(validatedRow.valid);\n        row.valid = validatedRow.valid;\n        if (!validatedRow.valid) {\n            counter++;\n        }\n    });\n    const messages = { header: null, errors: [] };\n    messages.header = counter > 1 ? highlightedRows : highlightedRow;\n    if (tableHasAllRequiredValues.includes(false)) {\n        messages.errors.push(missingRequired);\n    }\n    if (tableHasAllLatinValues.includes(false)) {\n        messages.errors.push(englishOnlyMessage);\n    }\n    if (tableHasProperlyFormattedDates.includes(false)) {\n        messages.errors.push(invalidDateFormat);\n    } else {\n        if (tableHasNoConflictingDates.includes(false)) {\n            messages.errors.push(invalidMilitaryEndDateBeforeStartDate);\n        }\n    }\n    const validationObject = { valid: !validations.includes(false), messages: messages };\n    return validationObject;\n}\n\nfunction validateRequired (columns, validationsMap) {\n    const requiredValidations = [];\n    columns.forEach((column) => {\n        if (column.is_required) {\n            const isValid = column.value !== '' && column.value !== null;\n            validationsMap[column.property] = isValid;\n            column.valid = isValid;\n            requiredValidations.push(isValid);\n        } else {\n            validationsMap[column.property] = true;\n            column.valid = true;\n        }\n    });\n    validationsMap.hasAllRequiredValues = !requiredValidations.includes(false);\n}\n\nfunction validateLatin (columns, validationsMap) {\n    const latinOnlyValidations = [];\n    columns.forEach((column) => {\n        if (column.latin_only && column.value) {\n            const isValid = !testPattern('non-latin', column.value);\n            validationsMap[column.property] = isValid;\n            column.valid = isValid;\n            latinOnlyValidations.push(isValid);\n        }\n    });\n    validationsMap.hasAllLatinValues = !latinOnlyValidations.includes(false);\n}\n\nfunction validateDateFormat (property, columns) {\n    const date = columns.filter(column => column.property === property)[0];\n    const value = getDateValues(date.value);\n    return testPattern('date', value);\n}\n\nfunction validateStartDateFormat (columns, validationMap) {\n    const valid = validateDateFormat('start_date', columns);\n    columns.filter(column => column.property === 'start_date')[0].valid = valid;\n    validationMap.start_date = valid;\n    validationMap.hasProperlyFormattedStartDate = valid;\n}\n\nfunction validateEndDateFormat (columns, validationMap) {\n    const valid = validateDateFormat('end_date', columns);\n    columns.filter(column => column.property === 'end_date')[0].valid = valid;\n    validationMap.end_date = valid;\n    validationMap.hasProperlyFormattedEndDate = valid;\n}\n\nfunction validateDatesForEducationRow (columns, validationsMap) {\n    const startDate = columns.filter(column => column.property === 'start_date')[0];\n    const endDate = columns.filter(column => column.property === 'end_date')[0];\n    const educationStatus = columns.filter(column => column.property === 'education_status')[0];\n    if (validationsMap.start_date) { validateStartDateFormat(columns, validationsMap); }\n    if (educationStatus.value) {\n        if (educationStatus.value.toString() === graduatedStatus) {\n            if (validationsMap.end_date && endDate.value) {\n                validateEndDateFormat(columns, validationsMap);\n                if (validationsMap.hasProperlyFormattedStartDate && validationsMap.hasProperlyFormattedEndDate) {\n                    const datesDoNotClash = checkDates(startDate.value, endDate.value);\n                    endDate.valid = datesDoNotClash;\n                    validationsMap.hasNoConflictingDates = datesDoNotClash;\n                    validationsMap.end_date = datesDoNotClash;\n                    if (datesDoNotClash) {\n                        checkEducationEndDateAgainstGraduatedStatus(endDate, validationsMap);\n                    }\n                }\n            }\n        }\n        if (educationStatus.value.toString() === didNotGraduateCurrentlyEnrolledStatus) {\n            if (validationsMap.end_date && endDate.value) {\n                validateEndDateFormat(columns, validationsMap);\n                if (validationsMap.hasProperlyFormattedStartDate && validationsMap.hasProperlyFormattedEndDate) {\n                    const datesDoNotClash = checkDates(startDate.value, endDate.value);\n                    endDate.valid = datesDoNotClash;\n                    validationsMap.hasNoConflictingDates = datesDoNotClash;\n                    validationsMap.end_date = datesDoNotClash;\n                    if (datesDoNotClash) {\n                        checkEducationEndDateAgainstDidNotGraduateCurrentlyEnrolledStatus(endDate, validationsMap);\n                    }\n                }\n            }\n        }\n        if (educationStatus.value.toString() === didNotGraduateNoLongerEnrolledStatus) {\n            if (startDate.value && endDate.value) {\n                validateEndDateFormat(columns, validationsMap);\n                if (validationsMap.hasProperlyFormattedStartDate && validationsMap.hasProperlyFormattedEndDate) {\n                    const datesDoNotClash = checkDates(startDate.value, endDate.value);\n                    endDate.valid = datesDoNotClash;\n                    validationsMap.hasNoConflictingDates = datesDoNotClash;\n                    validationsMap.end_date = datesDoNotClash;\n                }\n            }\n            if (startDate.value && !endDate.value) {\n                endDate.valid = true;\n                validationsMap.hasNoConflictingDates = true;\n                validationsMap.end_date = true;\n            }\n        }\n    } else {\n        validateDates(columns, validationsMap);\n    }\n}\n\nfunction validateDates (columns, validationsMap) {\n    const startDate = columns.filter(column => column.property === 'start_date')[0];\n    const endDate = columns.filter(column => column.property === 'end_date')[0];\n    if (startDate.value) { validateStartDateFormat(columns, validationsMap); }\n    if (endDate.value) { validateEndDateFormat(columns, validationsMap); }\n    if (validationsMap.hasProperlyFormattedStartDate && validationsMap.hasProperlyFormattedEndDate) {\n        const datesDoNotClash = checkDates(startDate.value, endDate.value);\n        endDate.valid = datesDoNotClash;\n        validationsMap.end_date = datesDoNotClash;\n        validationsMap.hasNoConflictingDates = datesDoNotClash;\n    }\n    if (validationsMap.hasProperlyFormattedStartDate && !validationsMap.hasProperlyFormattedEndDate) {\n        validationsMap.hasNoConflictingDates = true;\n    }\n}\n\nfunction validateEndDateForCaContextEDG (educationStatus, endDate, validationsMap) {\n    if (endDate.value) { validateEndDateFormat([endDate], validationsMap); }\n    if (validationsMap.hasProperlyFormattedEndDate) {\n        if (educationStatus.value === graduatedStatus) {\n            checkEducationEndDateAgainstGraduatedStatus(endDate, validationsMap);\n        }\n        if (validationsMap.hasProperlyFormattedEndDate && educationStatus.value === didNotGraduateCurrentlyEnrolledStatus) {\n            checkEducationEndDateAgainstDidNotGraduateCurrentlyEnrolledStatus(endDate, validationsMap);\n        }\n        if (validationsMap.hasProperlyFormattedEndDate && educationStatus.value === didNotGraduateNoLongerEnrolledStatus) {\n            validationsMap.end_date = true;\n        }\n    }\n}\n\nfunction validateTextFormat (columns, validationsMap, property, patternName) {\n    const item = columns.filter((column) => column.property === property)[0];\n    const hasValidFormat = testPattern(patternName, item.value);\n    item.valid = hasValidFormat;\n    validationsMap[property] = hasValidFormat;\n    validationsMap.hasProperlyFormattedValue = hasValidFormat;\n}\n\nfunction validateEmailFormat (columns, validationsMap) {\n    validateTextFormat(columns, validationsMap, 'contact_info_value', 'email');\n}\n\nfunction validatePhoneFormat (columns, validationsMap) {\n    validateTextFormat(columns, validationsMap, 'phone_number', 'phone');\n}\n\nfunction checkDates (startDate, endDate) {\n    startDate = getDateValues(startDate);\n    endDate = getDateValues(endDate);\n    const sDate = startDate.split('/');\n    const eDate = endDate.split('/');\n    const derivedStartDate = new Date(sDate[1], sDate[0] - 1);\n    const derivedEndDate = new Date(eDate[1], eDate[0] - 1);\n    return derivedStartDate <= derivedEndDate;\n}\n\nfunction getDateValues (date) {\n    const regexJpKrFormat = new RegExp(/\\d{4}\\/\\d{2}/);\n    const regexDeFormat = new RegExp(/\\d{2}\\.\\d{4}/);\n    if (regexJpKrFormat.test(date)) {\n        const values = date.split('/');\n        const month = values[1];\n        const year = values[0];\n        date = month + '/' + year;\n    }\n    if (regexDeFormat.test(date)) {\n        date = date.replace('.', '/');\n    }\n    return date;\n}\n\nfunction getFormattedInputAndCurrentDates (date) {\n    const datesForComparison = new Object();\n    const dates = getDateValues(date).split('/');\n    const formattedUserInputDate = new Date(dates[1], dates[0] - 1);\n    const currentDate = new Date();\n    currentDate.setDate(1);\n    currentDate.setHours(0, 0, 0, 0);\n    datesForComparison.currentDate = currentDate;\n    datesForComparison.inputDate = formattedUserInputDate;\n    return datesForComparison;\n}\n"],"names":["Object","freeze","educations","validateEducationRow","educations_ca_context","validateEducationRowCaContext","educations_ca_context_edg","validateEducationRowCaContextEDG","emails","validateEmailRow","languages","columns","validations","validationsMap","language_code","fluency_id","hasAllRequiredValues","validateRequired","property","push","valid","includes","license_certificates","validateLicenseOrCertificationRow","military_experiences","validateMilitaryExperienceRow","websites","contact_info_value","hasAllLatinValues","validateLatin","telephones","validatePhoneRow","employments","validateEmploymentRow","tableValidationFunctions","rows","tableHasAllRequiredValues","tableHasAllLatinValues","tableHasProperlyFormattedDates","tableHasGraduatedStatusWithValidEndDates","tableHasNotGraduatedStatusWithValidEndDates","tableHasNoConflictingDates","tableHasNumericGpa","tableHasNumericHighestPossibleGpa","tableHasValidGPARanges","counter","forEach","row","validatedRow","hasProperlyFormattedStartDate","hasProperlyFormattedEndDate","hasNoConflictingDates","hasGraduatedEndDateInThePast","hasNotGraduatedCurrentlyEnrolledEndDateCurrentOrInTheFuture","hasNumericGpa","hasNumericHighestPossibleGpa","hasValidGPARatio","messages","header","errors","highlightedRows","highlightedRow","missingRequired","englishOnlyMessage","invalidDateFormat","invalidEducationEndDateBeforeStartDate","invalidGPAMessage","invalidGPAMaximumMessage","invalidGPARange","invalidGraduatedStartDateInTheFuture","invalidGraduatedEndDateInTheFuture","invalidCurrentlyEnrolledNotGraduatedEndDateInThePast","tableIsUsingProperlyFormattedValues","hasProperlyFormattedValue","invalidEmailFormat","validateRequiredRow","validateRequiredTable","validateLicenseOrCertificationTable","invalidMilitaryEndDateBeforeStartDate","validateRequiredLatinAndDatesTable","tableHasProperlyFormattedPhones","invalidPhoneMessage","tableHasNoCurrentEmploymentWithEndDatesInThePast","is_current","invalidEmploymentEndDateBeforeStartDate","invalidEmploymentEndDateMessage","validateTextFormat","validateEmailFormat","phone_type","country_code","phone_number","validatePhoneFormat","employer","job_title","employment_type","start_date","end_date","validateDates","filter","column","value","endDate","endDateComparisonObject","getFormattedInputAndCurrentDates","inputDate","currentDate","school_name","major","education_status","degree_type","gpa","highest_possible_value","hasProperlyFormattedDates","requiredColumnsWithMissingValues","is_required","educationStatus","toString","didNotGraduateNoLongerEnrolledStatus","item","length","startDate","validateStartDateFormat","graduatedStatus","validateEndDateFormat","datesDoNotClash","checkDates","checkEducationEndDateAgainstGraduatedStatus","didNotGraduateCurrentlyEnrolledStatus","checkEducationEndDateAgainstDidNotGraduateCurrentlyEnrolledStatus","validateDatesForEducationRow","highestPossibleGpa","testPattern","isValidRatio","parseFloat","parseInt","validateEndDateForCaContextEDG","validationMap","license_certificate","branch","requiredValidations","isValid","latinOnlyValidations","latin_only","validateDateFormat","getDateValues","patternName","hasValidFormat","sDate","split","eDate","Date","date","regexJpKrFormat","RegExp","regexDeFormat","test","values","replace","datesForComparison","dates","formattedUserInputDate","setDate","setHours"],"sourceRoot":""}