{"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":""}