{"version":3,"file":"familyPreRegistration.obs.js","sources":["../../src/Crm/FamilyPreRegistration/utils.partial.ts","../../src/Crm/FamilyPreRegistration/preRegistrationChild.partial.obs","../../../Rock.JavaScript.Obsidian/node_modules/style-inject/dist/style-inject.es.js","../../src/Crm/FamilyPreRegistration/preRegistrationChildren.partial.obs","../../src/Crm/familyPreRegistration.obs"],"sourcesContent":["// <copyright>\r\n// Copyright by the Spark Development Network\r\n//\r\n// Licensed under the Rock Community License (the \"License\");\r\n// you may not use this file except in compliance with the License.\r\n// You may obtain a copy of the License at\r\n//\r\n// http://www.rockrms.com/license\r\n//\r\n// Unless required by applicable law or agreed to in writing, software\r\n// distributed under the License is distributed on an \"AS IS\" BASIS,\r\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n// See the License for the specific language governing permissions and\r\n// limitations under the License.\r\n// </copyright>\r\n//\r\n\r\nimport { ChildRequestBag, PersonRequestBag, PropertiesOfType } from \"./types.partial\";\r\nimport { CommunicationPreference, CommunicationPreferenceDescription } from \"@Obsidian/Enums/Blocks/Crm/FamilyPreRegistration/communicationPreference\";\r\nimport { Gender } from \"@Obsidian/Enums/Crm/gender\";\r\nimport { asBooleanOrNull } from \"@Obsidian/Utility/booleanUtils\";\r\nimport { getDay, getMonth, getYear } from \"@Obsidian/Utility/dateKey\";\r\nimport { emptyGuid } from \"@Obsidian/Utility/guid\";\r\nimport { toNumberOrNull } from \"@Obsidian/Utility/numberUtils\";\r\nimport { ValidationResult, ValidationRuleFunction } from \"@Obsidian/ValidationRules\";\r\nimport { FamilyPreRegistrationPersonBag } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationPersonBag\";\r\nimport { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\nimport { Ref, WritableComputedRef, computed, reactive, toRefs } from \"vue\";\r\n\r\n/**\r\n * Helper that converts a person bag to a person request bag that can be used to pre-register the person.\r\n */\r\nexport function convertPersonToPersonRequest(person: FamilyPreRegistrationPersonBag | null | undefined): PersonRequestBag {\r\n const defaults = createPersonRequest();\r\n\r\n return {\r\n // Copy values from person bag.\r\n ...person,\r\n\r\n // Overwrite required fields.\r\n guid: person?.guid || emptyGuid,\r\n attributeValues: person?.attributeValues || defaults.attributeValues,\r\n communicationPreference: person?.communicationPreference ?? defaults.communicationPreference,\r\n email: person?.email || defaults.email,\r\n firstName: person?.firstName || defaults.firstName,\r\n gender: person?.gender || defaults.gender,\r\n isFirstNameReadOnly: person?.isFirstNameReadOnly || defaults.isFirstNameReadOnly,\r\n isLastNameReadOnly: person?.isLastNameReadOnly || defaults.isLastNameReadOnly,\r\n lastName: person?.lastName || defaults.lastName,\r\n mobilePhone: person?.mobilePhone || defaults.mobilePhone,\r\n mobilePhoneCountryCode: person?.mobilePhoneCountryCode || defaults.mobilePhoneCountryCode,\r\n isMessagingEnabled: person?.isMessagingEnabled || defaults.isMessagingEnabled,\r\n };\r\n}\r\n\r\n/**\r\n * Helper that converts a person bag to a child request bag that can be used to pre-register the child.\r\n */\r\nexport function convertPersonToChildRequest(person: FamilyPreRegistrationPersonBag | null | undefined): ChildRequestBag {\r\n const request = convertPersonToPersonRequest(person);\r\n const defaults = createChildRequest();\r\n\r\n return {\r\n // Copy values from person bag.\r\n ...request,\r\n familyRoleGuid: request.familyRoleGuid || defaults.familyRoleGuid\r\n };\r\n}\r\n\r\n/**\r\n * Helper that returns a new PersonRequestBag instance that can be used to pre-register the person.\r\n */\r\nexport function createPersonRequest(): PersonRequestBag {\r\n return {\r\n guid: emptyGuid,\r\n attributeValues: {},\r\n communicationPreference: CommunicationPreference.None,\r\n email: \"\",\r\n firstName: \"\",\r\n gender: Gender.Unknown,\r\n isFirstNameReadOnly: false,\r\n isLastNameReadOnly: false,\r\n lastName: \"\",\r\n mobilePhone: \"\",\r\n mobilePhoneCountryCode: \"\",\r\n isMessagingEnabled: false,\r\n };\r\n}\r\n\r\n/**\r\n * Helper that converts a PersonRequestBag into a person view model that can be used to edit the person.\r\n */\r\nexport function createPersonViewModel(person: Ref<PersonRequestBag>): PersonRequestBag & {\r\n communicationPreferenceStringValue: string,\r\n ethnicityListItemBag: ListItemBag,\r\n genderStringValue: string,\r\n gradeListItemBag: ListItemBag,\r\n maritalStatusListItemBag: ListItemBag,\r\n profileImageListItemBag: ListItemBag,\r\n raceListItemBag: ListItemBag,\r\n suffixListItemBag: ListItemBag,\r\n} {\r\n return reactive({\r\n ...toRefs(person.value),\r\n communicationPreferenceStringValue: computed<string>({\r\n get() {\r\n return person.value.communicationPreference?.toString();\r\n },\r\n set(newValue: string) {\r\n person.value.communicationPreference = CommunicationPreference[CommunicationPreferenceDescription[Number(newValue)]];\r\n }\r\n }),\r\n ethnicityListItemBag: createListItemBagWrapper(person, \"ethnicityDefinedValueGuid\"),\r\n genderStringValue: computed<string>({\r\n get() {\r\n return person.value.gender.toString();\r\n },\r\n set(newValue: string) {\r\n person.value.gender = Number(newValue) as Gender;\r\n }\r\n }),\r\n gradeListItemBag: createListItemBagWrapper(person, \"gradeDefinedValueGuid\"),\r\n maritalStatusListItemBag: createListItemBagWrapper(person, \"maritalStatusDefinedValueGuid\"),\r\n profileImageListItemBag: createListItemBagWrapper(person, \"profilePhotoGuid\"),\r\n raceListItemBag: createListItemBagWrapper(person, \"raceDefinedValueGuid\"),\r\n suffixListItemBag: createListItemBagWrapper(person, \"suffixDefinedValueGuid\"),\r\n });\r\n}\r\n\r\n/**\r\n * Helper that returns a new ChildRequestBag instance that can be used to pre-register the child.\r\n */\r\nexport function createChildRequest(): ChildRequestBag {\r\n return {\r\n guid: emptyGuid,\r\n attributeValues: {},\r\n communicationPreference: CommunicationPreference.None,\r\n email: \"\",\r\n familyRoleGuid: emptyGuid,\r\n firstName: \"\",\r\n gender: Gender.Unknown,\r\n isFirstNameReadOnly: false,\r\n isLastNameReadOnly: false,\r\n lastName: \"\",\r\n mobilePhone: \"\",\r\n mobilePhoneCountryCode: \"\",\r\n isMessagingEnabled: false,\r\n };\r\n}\r\n\r\n/**\r\n * Helper that returns a WritableComputedRef<ListItemBag> for a property of a ref.\r\n */\r\nexport function createListItemBagWrapper<\r\n TObj extends Record<string, unknown>,\r\n TKey extends keyof PropertiesOfType<TObj, string | undefined | null>>(r: Ref<TObj>, p: TKey): WritableComputedRef<ListItemBag> {\r\n return computed<ListItemBag>({\r\n get() {\r\n const value = r.value;\r\n\r\n return {\r\n value: value && value[p] && typeof value[p][\"toString\"] === \"function\" ? (value[p] as string).toString() : undefined\r\n };\r\n },\r\n set(newValue: ListItemBag) {\r\n try {\r\n const value = r.value;\r\n if (value) {\r\n Object.assign(value, { [p]: newValue?.value });\r\n }\r\n }\r\n catch (e) {\r\n // The component which owns the ref was likely unmounted, so ignore the error.\r\n }\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Gets a function that will return a bootstrap column class, given the desired number of non-bootstrap columns in the parent container.\r\n *\r\n * @see {@link useGetBootstrapColumns} for more info.\r\n * @param columnsInContainer The number of columns in the container.\r\n * @returns The bootstrap column class.\r\n */\r\nexport function useGetBootstrapColumnClass(columnsInContainer: number): (columns: number) => string {\r\n const getColumn = useGetBootstrapColumns(columnsInContainer);\r\n\r\n return (columns: number): string => {\r\n return `col-sm-${getColumn(columns)}`;\r\n };\r\n}\r\n\r\n/**\r\n * Gets a function that will return the number of bootstrap columns, given the desired number of non-bootstrap of columns in the parent container.\r\n *\r\n * This logic is from the legacy Family Pre-Registration block.\r\n *\r\n * @example\r\n * const getBootstrapColumnsForTwoColumnForm = useGetBootstrapColumns(2);\r\n * getBootstrapColumnsForTwoColumnForm(1) // 1\r\n * getBootstrapColumnsForTwoColumnForm(2) // 2\r\n * getBootstrapColumnsForTwoColumnForm(3) // 6 - This is doubled\r\n * getBootstrapColumnsForTwoColumnForm(4) // 4\r\n * getBootstrapColumnsForTwoColumnForm(5) // 5\r\n * getBootstrapColumnsForTwoColumnForm(6) // 6\r\n * getBootstrapColumnsForTwoColumnForm(7) // 7\r\n * getBootstrapColumnsForTwoColumnForm(8) // 8\r\n * getBootstrapColumnsForTwoColumnForm(9) // 9\r\n * getBootstrapColumnsForTwoColumnForm(10) // 10\r\n * getBootstrapColumnsForTwoColumnForm(11) // 11\r\n * getBootstrapColumnsForTwoColumnForm(12) // 12\r\n *\r\n * @example\r\n * const getBootstrapColumnsForFourColumnForm = useGetBootstrapColumns(4);\r\n * getBootstrapColumnsForFourColumnForm(1) // 1\r\n * getBootstrapColumnsForFourColumnForm(2) // 2\r\n * getBootstrapColumnsForFourColumnForm(3) // 3\r\n * getBootstrapColumnsForFourColumnForm(4) // 4\r\n * getBootstrapColumnsForFourColumnForm(5) // 5\r\n * getBootstrapColumnsForFourColumnForm(6) // 6\r\n * getBootstrapColumnsForFourColumnForm(7) // 7\r\n * getBootstrapColumnsForFourColumnForm(8) // 8\r\n * getBootstrapColumnsForFourColumnForm(9) // 9\r\n * getBootstrapColumnsForFourColumnForm(10) // 10\r\n * getBootstrapColumnsForFourColumnForm(11) // 11\r\n * getBootstrapColumnsForFourColumnForm(12) // 12\r\n *\r\n * @param columnsInContainer The number of columns in the container.\r\n * @returns The bootstrap columns.\r\n */\r\nfunction useGetBootstrapColumns(columnsInContainer: number): (columns: number) => number {\r\n return (columns: number): number => {\r\n if ((columns != 3 && columns != 6) || columnsInContainer === 4) {\r\n return columns;\r\n }\r\n\r\n if (columns === 6) {\r\n return columns;\r\n }\r\n\r\n return columns * 2;\r\n };\r\n}\r\n\r\n/**\r\n * Returns the ordinal string representation of an integer.\r\n *\r\n * Not reliable for numbers in the quadrillions and greater.\r\n *\r\n * @example\r\n * getNumberAsOrdinalString(1) // first\r\n * getNumberAsOrdinalString(2) // second\r\n * getNumberAsOrdinalString(123456) // one hundred twenty-three thousand four hundred fifty-sixth\r\n * @param numb The number for which to get the ordinal string representation.\r\n * @returns \"first\", \"second\", ..., \"one thousandth\", ..., (up to the max number allowed for JS).\r\n */\r\nexport function getNumberAsOrdinalString(numb: number): string {\r\n const ordinalStrings = {\r\n 1: \"first\",\r\n 2: \"second\",\r\n 3: \"third\",\r\n 4: \"fourth\",\r\n 5: \"fifth\",\r\n 6: \"sixth\",\r\n 7: \"seventh\",\r\n 8: \"eighth\",\r\n 9: \"ninth\",\r\n 10: \"tenth\",\r\n 11: \"eleventh\",\r\n 12: \"twelfth\",\r\n 13: \"thirteenth\",\r\n 14: \"fourteenth\",\r\n 15: \"fifteenth\",\r\n 16: \"sixteenth\",\r\n 17: \"seventeenth\",\r\n 18: \"eighteenth\",\r\n 19: \"nineteenth\",\r\n 20: \"twentieth\",\r\n 30: \"thirtieth\",\r\n 40: \"fortieth\",\r\n 50: \"fiftieth\",\r\n 60: \"sixtieth\",\r\n 70: \"seventieth\",\r\n 80: \"eightieth\",\r\n 90: \"ninetieth\",\r\n 100: \"one hundredth\",\r\n 1000: \"one thousandth\",\r\n 1000000: \"one millionth\",\r\n 1000000000: \"one trillionth\",\r\n 1000000000000: \"one quadrillionth\"\r\n };\r\n const numberStrings = {\r\n 1: \"one\",\r\n 2: \"two\",\r\n 3: \"three\",\r\n 4: \"four\",\r\n 5: \"five\",\r\n 6: \"six\",\r\n 7: \"seven\",\r\n 8: \"eight\",\r\n 9: \"nine\",\r\n 10: \"ten\",\r\n 11: \"eleven\",\r\n 12: \"twelve\",\r\n 13: \"thirteen\",\r\n 14: \"fourteen\",\r\n 15: \"fifteen\",\r\n 16: \"sixteen\",\r\n 17: \"seventeen\",\r\n 18: \"eighteen\",\r\n 19: \"nineteen\",\r\n 20: \"twenty\",\r\n 30: \"thirty\",\r\n 40: \"forty\",\r\n 50: \"fifty\",\r\n 60: \"sixty\",\r\n 70: \"seventy\",\r\n 80: \"eighty\",\r\n 90: \"ninety\",\r\n 100: \"one hundred\",\r\n 1000: \"one thousand\",\r\n 1000000: \"one million\",\r\n 1000000000: \"one billion\",\r\n 1000000000000: \"one trillion\",\r\n 1000000000000000: \"one quadrillion\"\r\n };\r\n\r\n // Store constants for these since it is hard to distinguish between them at larger numbers.\r\n const oneHundred = 100;\r\n const oneThousand = 1000;\r\n const oneMillion = 1000000;\r\n const oneBillion = 1000000000;\r\n const oneTrillion = 1000000000000;\r\n const oneQuadrillion = 1000000000000000;\r\n\r\n if (ordinalStrings[numb]) {\r\n return ordinalStrings[numb];\r\n }\r\n\r\n function getQuadrillionth(numb: number): string {\r\n const trillionth = getTrillionth(numb);\r\n if (numb >= oneQuadrillion) {\r\n const quadrillions = getHundredsString(Number(numb.toString().slice(-18, -15)));\r\n if (trillionth) {\r\n return `${quadrillions} quadrillion ${trillionth}`;\r\n }\r\n else {\r\n return `${quadrillions} quadrillionth`;\r\n }\r\n }\r\n return trillionth;\r\n }\r\n\r\n function getTrillionth(numb: number): string {\r\n numb = Number(numb.toString().slice(-15));\r\n const billionth = getBillionth(numb);\r\n if (numb >= oneTrillion) {\r\n const trillions = getHundredsString(Number(numb.toString().slice(-15, -12)));\r\n if (billionth) {\r\n return `${trillions} trillion ${billionth}`;\r\n }\r\n else {\r\n return `${trillions} trillionth`;\r\n }\r\n }\r\n return billionth;\r\n }\r\n\r\n function getBillionth(numb: number): string {\r\n numb = Number(numb.toString().slice(-12));\r\n const millionth = getMillionth(numb);\r\n if (numb >= oneBillion) {\r\n const billions = getHundredsString(Number(numb.toString().slice(-12, -9)));\r\n if (millionth) {\r\n return `${billions} billion ${millionth}`;\r\n }\r\n else {\r\n return `${billions} billionth`;\r\n }\r\n }\r\n return millionth;\r\n }\r\n\r\n function getMillionth(numb: number): string {\r\n numb = Number(numb.toString().slice(-9));\r\n const thousandths = getThousandths(numb);\r\n if (numb >= oneMillion) {\r\n const millions = getHundredsString(Number(numb.toString().slice(-9, -6)));\r\n if (thousandths) {\r\n return `${millions} million ${thousandths}`;\r\n }\r\n else {\r\n return `${millions} millionth`;\r\n }\r\n }\r\n return thousandths;\r\n }\r\n\r\n function getThousandths(numb: number): string {\r\n numb = Number(numb.toString().slice(-6));\r\n const hundredths = getHundredths(numb);\r\n if (numb >= oneThousand) {\r\n const thousands = getHundredsString(Number(numb.toString().slice(-6, -3)));\r\n if (hundredths) {\r\n return `${thousands} thousand ${hundredths}`;\r\n }\r\n else {\r\n return `${thousands} thousandths`;\r\n }\r\n }\r\n return hundredths;\r\n }\r\n\r\n function getHundredths(numb: number): string {\r\n numb = Number(numb.toString().slice(-3));\r\n\r\n if (ordinalStrings[numb]) {\r\n return ordinalStrings[numb];\r\n }\r\n\r\n const tenths = getTenths(numb);\r\n if (numb >= oneHundred) {\r\n const hundreds = Number(numb.toString().slice(-3, -2));\r\n if (tenths) {\r\n return `${numberStrings[hundreds]} hundred ${tenths}`;\r\n }\r\n else {\r\n return `${numberStrings[hundreds]} hundredth`;\r\n }\r\n }\r\n return tenths;\r\n }\r\n\r\n function getHundredsString(numb: number): string {\r\n numb = Number(numb.toString().slice(-3));\r\n\r\n if (numberStrings[numb]) {\r\n return numberStrings[numb];\r\n }\r\n\r\n const tens = getTensString(numb);\r\n\r\n if (numb >= oneHundred) {\r\n const hundreds = Number(numb.toString().slice(-3, -2));\r\n if (tens) {\r\n return `${numberStrings[hundreds]} hundred ${tens}`;\r\n }\r\n else {\r\n return `${numberStrings[hundreds]} hundred`;\r\n }\r\n }\r\n return tens;\r\n }\r\n\r\n function getTensString(numb: number): string {\r\n numb = Number(numb.toString().slice(-2));\r\n\r\n if (numberStrings[numb]) {\r\n return numberStrings[numb];\r\n }\r\n\r\n const ones = getOnesString(numb);\r\n\r\n if (numb >= 20) {\r\n const tens = Number(numb.toString().slice(-2, -1));\r\n\r\n if (ones) {\r\n return `${numberStrings[tens * 10]}-${ones}`;\r\n }\r\n else {\r\n return numberStrings[tens * 10];\r\n }\r\n }\r\n return ones;\r\n }\r\n\r\n function getTenths(numb: number): string {\r\n numb = Number(numb.toString().slice(-2));\r\n\r\n if (ordinalStrings[numb]) {\r\n return ordinalStrings[numb];\r\n }\r\n\r\n const oneths = getOneths(numb);\r\n\r\n if (numb >= 20) {\r\n const tens = Number(numb.toString().slice(-2, -1));\r\n\r\n if (oneths) {\r\n return `${numberStrings[tens * 10]}-${oneths}`;\r\n }\r\n else {\r\n return ordinalStrings[tens * 10];\r\n }\r\n }\r\n return oneths;\r\n }\r\n\r\n function getOneths(numb: number): string {\r\n numb = Number(numb.toString().slice(-1));\r\n\r\n return ordinalStrings[numb];\r\n }\r\n\r\n function getOnesString(numb: number): string {\r\n numb = Number(numb.toString().slice(-1));\r\n\r\n return numberStrings[numb];\r\n }\r\n\r\n return getQuadrillionth(numb);\r\n}\r\n\r\n/**\r\n * Validates that a value is entered.\r\n *\r\n * This was copied from the \"required\" validation rule.\r\n */\r\nexport function required(value: unknown, params?: unknown[]): ValidationResult {\r\n // This needs to be changed. JSON is not safe in rules because of the\r\n // comma and pipe characters.\r\n const options = params && params.length >= 1 && typeof params[0] === \"string\" ? JSON.parse(params[0]) : {};\r\n\r\n if (typeof value === \"string\") {\r\n const allowEmptyString = !!(options.allowEmptyString);\r\n\r\n if (!allowEmptyString && !(value?.trim())) {\r\n return \"is required\";\r\n }\r\n\r\n return true;\r\n }\r\n\r\n if (typeof value === \"number\" && value === 0) {\r\n return \"is required\";\r\n }\r\n\r\n if (Array.isArray(value) && value.length === 0) {\r\n return \"is required\";\r\n }\r\n\r\n // Special case for booleans, required rule is ignored. Otherwise things\r\n // like checkbox and toggle would always require a True value.\r\n if (typeof value === \"boolean\") {\r\n return true;\r\n }\r\n\r\n if (!value) {\r\n return \"is required\";\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Validates whether a birthday with an optional year is valid.\r\n */\r\nexport function monthAndDayRequiredRule(value: unknown, _params?: unknown): ValidationResult {\r\n if (typeof value !== \"string\") {\r\n return true;\r\n }\r\n\r\n if (!getMonth(value)) {\r\n return \"must have a month\";\r\n }\r\n\r\n if (!getDay(value)) {\r\n return \"must have a day\";\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Validates whether a birthday with an optional year is valid.\r\n *\r\n * This was copied from the \"datekey\" validation rule.\r\n */\r\nexport function monthAndDayAndYearRequiredRule(value: unknown, _params?: unknown): ValidationResult {\r\n if (typeof value !== \"string\") {\r\n return true;\r\n }\r\n\r\n if (!getYear(value)) {\r\n return \"must have a year\";\r\n }\r\n\r\n if (!getMonth(value)) {\r\n return \"must have a month\";\r\n }\r\n\r\n if (!getDay(value)) {\r\n return \"must have a day\";\r\n }\r\n\r\n return true;\r\n}\r\n\r\n/**\r\n * Convert the string to a number\r\n * @param val\r\n */\r\nfunction convertToNumber(value: unknown): number {\r\n if (typeof value === \"number\") {\r\n return value;\r\n }\r\n\r\n if (typeof value === \"string\") {\r\n return toNumberOrNull(value) || 0;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Is the value numeric?\r\n * '0.9' => true\r\n * 0.9 => true\r\n * '9a' => false\r\n * @param value\r\n */\r\nfunction isNumeric(value: unknown): boolean {\r\n if (typeof value === \"number\") {\r\n return true;\r\n }\r\n\r\n if (typeof value === \"string\") {\r\n return toNumberOrNull(value) !== null;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n/**\r\n * Validates that a value does not equal another value.\r\n */\r\nexport function createNotEqualRule(compare: unknown): ValidationRuleFunction {\r\n return (value: unknown, params?: unknown[]): ValidationResult => {\r\n if (isNumeric(value) && isNumeric(compare)) {\r\n if (convertToNumber(value) !== convertToNumber(compare)) {\r\n return true;\r\n }\r\n }\r\n else if (typeof value === \"boolean\") {\r\n if (value !== asBooleanOrNull(compare)) {\r\n return true;\r\n }\r\n }\r\n else if (value !== compare) {\r\n return true;\r\n }\r\n\r\n return `must not equal ${compare}`;\r\n };\r\n}\r\n\r\n/**\r\n * Returns a wrapper around a validation function which appends a suffix to validation error messages.\r\n */\r\nexport function createRuleWithSuffix(rule: ValidationRuleFunction, suffix: string): ValidationRuleFunction {\r\n return (value: unknown, params?: unknown[]): ValidationResult => {\r\n const result = rule(value, params);\r\n\r\n if (typeof result === \"string\" && result && suffix) {\r\n return `${result} ${suffix}`;\r\n }\r\n\r\n return result;\r\n };\r\n}\r\n\r\n/**\r\n * Returns a wrapper around a validation function which replaces a validation error message.\r\n */\r\nexport function createRuleWithReplacement(rule: ValidationRuleFunction, replacement: string): ValidationRuleFunction {\r\n return (value: unknown, params?: unknown[]): ValidationResult => {\r\n const result = rule(value, params);\r\n\r\n if (typeof result === \"string\" && result && replacement) {\r\n return replacement;\r\n }\r\n\r\n return result;\r\n };\r\n}","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n <RockButton\r\n btnSize=\"xs\"\r\n btnType=\"danger\"\r\n class=\"pull-right\"\r\n :disabled=\"disabled\"\r\n :isSquare=\"true\"\r\n @click=\"$emit('remove', child)\">\r\n <i class=\"fa fa-times\"></i>\r\n </RockButton>\r\n\r\n <h4 class=\"child-caption\">\r\n {{ caption }}\r\n </h4>\r\n\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <DropDownList\r\n v-model=\"child.familyRoleGuid\"\r\n :disabled=\"disabled\"\r\n :items=\"config.childRelationshipTypes ?? undefined\"\r\n label=\"Relationship to Adult\"\r\n :rules=\"requiredRules\"\r\n :showBlankItem=\"false\" />\r\n </div>\r\n <div class=\"col-sm-6\"></div><!-- filler/blocker column -->\r\n </div>\r\n\r\n <div class=\"row clearfix\">\r\n <div class=\"col-sm-6\">\r\n <StaticFormControl\r\n v-if=\"child.isFirstNameReadOnly\"\r\n label=\"First Name\"\r\n :modelValue=\"child.firstName\" />\r\n <TextBox v-else\r\n v-model=\"child.firstName\"\r\n :disabled=\"disabled\"\r\n label=\"First Name\"\r\n :rules=\"requiredRules\" />\r\n </div>\r\n\r\n <div class=\"col-sm-6\">\r\n <StaticFormControl\r\n v-if=\"child.isLastNameReadOnly\"\r\n label=\"Last Name\"\r\n :modelValue=\"child.lastName\" />\r\n <TextBox v-else\r\n v-model=\"child.lastName\"\r\n :disabled=\"disabled\"\r\n label=\"Last Name\"\r\n :rules=\"requiredRules\" />\r\n </div>\r\n </div>\r\n <div class=\"row clearfix\">\r\n <div v-if=\"config.childGenderField?.isShown\" class=\"col-sm-6\">\r\n <GenderDropDownList\r\n v-model=\"child.genderStringValue\"\r\n :disabled=\"disabled\"\r\n label=\"Gender\"\r\n :rules=\"config.childGenderField.isRequired ? requiredGenderRules : ''\" />\r\n </div>\r\n\r\n <div v-if=\"config.childSuffixField?.isShown\" class=\"col-sm-6\">\r\n <DefinedValuePicker\r\n v-model=\"child.suffixListItemBag\"\r\n :definedTypeGuid=\"DefinedType.PersonSuffix\"\r\n :disabled=\"disabled\"\r\n label=\"Suffix\"\r\n lazyMode=\"lazy\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"row clearfix\">\r\n <div v-if=\"config.childBirthDateField?.isShown\" class=\"col-sm-6\">\r\n <BirthdayPicker\r\n v-model=\"child.birthDate\"\r\n :disabled=\"disabled\"\r\n label=\"Birth Date\"\r\n :rules=\"config.childBirthDateField.isRequired ? requiredBirthdayRules : ''\" />\r\n </div>\r\n\r\n <div v-if=\"config.childGradeField?.isShown\" class=\"col-sm-6\">\r\n <GradePicker\r\n v-model=\"child.gradeListItemBag\"\r\n :disabled=\"disabled\"\r\n label=\"Grade\"\r\n lazyMode=\"lazy\"\r\n :useGuidAsValue=\"true\"\r\n :rules=\"config.childGradeField.isRequired ? requiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"row clearfix\">\r\n <div v-if=\"config.childMobilePhoneField?.isShown\" class=\"col-sm-6\">\r\n <PhoneNumberBox\r\n v-model=\"child.mobilePhone\"\r\n v-model:countryCode=\"child.mobilePhoneCountryCode\"\r\n :disabled=\"disabled\"\r\n label=\"Mobile Phone\"\r\n :rules=\"config.childMobilePhoneField.isRequired ? requiredRules : ''\" />\r\n </div>\r\n <div v-if=\"config.displaySmsOptIn?.isShowChildren\" class=\"col-sm-6\">\r\n <CheckBox\r\n v-model=\"child.isMessagingEnabled\"\r\n label=\"\"\r\n :disabled=\"disabled\"\r\n :text=\"config.displaySmsOptIn?.smsOptInDisplayText ?? ''\"/>\r\n </div>\r\n </div>\r\n <div class=\"row clearfix\">\r\n <div v-if=\"config.childEmailField?.isShown\" class=\"col-sm-6\">\r\n <EmailBox\r\n v-model=\"child.email\"\r\n :disabled=\"disabled\"\r\n label=\"Email\"\r\n :rules=\"config.childEmailField.isRequired ? requiredRules : ''\" />\r\n </div>\r\n\r\n <div v-if=\"config.childCommunicationPreferenceField?.isShown\" class=\"col-sm-6\">\r\n <RadioButtonList\r\n v-model=\"child.communicationPreferenceStringValue\"\r\n :disabled=\"disabled\"\r\n :horizontal=\"true\"\r\n :items=\"[\r\n { text: 'Email', value: CommunicationPreference.Email.toString() },\r\n { text: 'SMS', value: CommunicationPreference.SMS.toString() }\r\n ]\"\r\n label=\"Communication Preference\"\r\n :rules=\"config.childCommunicationPreferenceField.isRequired ? requiredRules : ''\" />\r\n </div>\r\n </div>\r\n <div class=\"row clearfix\">\r\n <div v-if=\"config.childRaceField?.isShown\" class=\"col-sm-6\">\r\n <RacePicker\r\n v-model=\"child.raceListItemBag\"\r\n :disabled=\"disabled\"\r\n :rules=\"config.childRaceField.isRequired ? requiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n\r\n <div v-if=\"config.childEthnicityField?.isShown\" class=\"col-sm-6\">\r\n <EthnicityPicker\r\n v-model=\"child.ethnicityListItemBag\"\r\n :disabled=\"disabled\"\r\n :rules=\"config.childEthnicityField.isRequired ? requiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n <div v-if=\"config.childProfilePhotoField?.isShown\" class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <ImageEditor\r\n v-model=\"child.profileImageListItemBag\"\r\n :binaryFileTypeGuid=\"BinaryFiletype.PersonImage\"\r\n :disabled=\"disabled\"\r\n label=\"Profile Photo\"\r\n :rules=\"config.childProfilePhotoField.isRequired ? requiredRules : ''\" />\r\n </div>\r\n <div class=\"col-sm-6\"></div><!-- filler/blocker column -->\r\n </div>\r\n\r\n <div class=\"row\">\r\n <AttributeValuesContainer\r\n v-if=\"config.childAttributes != null\"\r\n v-model=\"child.attributeValues\"\r\n :attributes=\"config.childAttributes\"\r\n columnBreakpoint=\"sm\"\r\n :displayWithinExistingRow=\"true\"\r\n isEditMode\r\n :numberOfColumns=\"2\"\r\n :showCategoryLabel=\"true\" />\r\n </div>\r\n</template>\r\n\r\n<style scoped>\r\n.child-caption {\r\n text-transform: capitalize;\r\n}\r\n</style>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, PropType, ref, watch } from \"vue\";\r\n import { ChildRequestBag } from \"./types.partial\";\r\n import { createNotEqualRule, createPersonViewModel, createRuleWithReplacement, createRuleWithSuffix, getNumberAsOrdinalString, monthAndDayAndYearRequiredRule, required } from \"./utils.partial\";\r\n import AttributeValuesContainer from \"@Obsidian/Controls/attributeValuesContainer.obs\";\r\n import BirthdayPicker from \"@Obsidian/Controls/birthdayPicker.obs\";\r\n import CheckBox from \"@Obsidian/Controls/checkBox.obs\";\r\n import DefinedValuePicker from \"@Obsidian/Controls/definedValuePicker.obs\";\r\n import DropDownList from \"@Obsidian/Controls/dropDownList.obs\";\r\n import EmailBox from \"@Obsidian/Controls/emailBox.obs\";\r\n import EthnicityPicker from \"@Obsidian/Controls/ethnicityPicker.obs\";\r\n import GenderDropDownList from \"@Obsidian/Controls/genderDropDownList.obs\";\r\n import GradePicker from \"@Obsidian/Controls/gradePicker.obs\";\r\n import ImageEditor from \"@Obsidian/Controls/imageEditor.obs\";\r\n import PhoneNumberBox from \"@Obsidian/Controls/phoneNumberBox.obs\";\r\n import RacePicker from \"@Obsidian/Controls/racePicker.obs\";\r\n import RadioButtonList from \"@Obsidian/Controls/radioButtonList.obs\";\r\n import RockButton from \"@Obsidian/Controls/rockButton.obs\";\r\n import StaticFormControl from \"@Obsidian/Controls/staticFormControl.obs\";\r\n import TextBox from \"@Obsidian/Controls/textBox.obs\";\r\n import { CommunicationPreference } from \"@Obsidian/Enums/Blocks/Crm/FamilyPreRegistration/communicationPreference\";\r\n import { Gender } from \"@Obsidian/Enums/Crm/gender\";\r\n import { BinaryFiletype } from \"@Obsidian/SystemGuids/binaryFiletype\";\r\n import { DefinedType } from \"@Obsidian/SystemGuids/definedType\";\r\n import { useConfigurationValues } from \"@Obsidian/Utility/block\";\r\n import { toTitleCase } from \"@Obsidian/Utility/stringUtils\";\r\n import { ValidationRule } from \"@Obsidian/ValidationRules\";\r\n import { FamilyPreRegistrationInitializationBox } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationInitializationBox\";\r\n\r\n const config = useConfigurationValues<FamilyPreRegistrationInitializationBox>();\r\n\r\n const props = defineProps({\r\n childNumber: {\r\n type: Number as PropType<number>,\r\n required: true\r\n },\r\n\r\n child: {\r\n type: Object as PropType<ChildRequestBag>,\r\n required: true\r\n },\r\n\r\n disabled: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n }\r\n });\r\n\r\n defineEmits<{\r\n (e: \"remove\", value: ChildRequestBag): void\r\n }>();\r\n\r\n //#region Values\r\n\r\n const childRequest = ref<ChildRequestBag>(props.child);\r\n const child = createPersonViewModel(childRequest);\r\n\r\n //#endregion\r\n\r\n //#region Computed Values\r\n\r\n const caption = computed<string>(() => {\r\n return toTitleCase(`${getNumberAsOrdinalString(props.childNumber)} Child`);\r\n });\r\n\r\n /*\r\n Validation rules are executed in order but only return the first error message.\r\n Even though the first rule is a required rule,\r\n we need to add the special \"required\" rule to get the required indicator to display.\r\n */\r\n\r\n const requiredRules = computed<ValidationRule[]>(() => [\r\n createRuleWithSuffix(required, `for ${caption.value}`),\r\n \"required\"\r\n ]);\r\n\r\n const requiredGenderRules = computed<ValidationRule[]>(() => [\r\n createRuleWithSuffix(required, `for ${caption.value}`),\r\n createRuleWithReplacement(createNotEqualRule(Gender.Unknown), `is required for ${caption.value}`),\r\n \"required\"\r\n ]);\r\n\r\n const requiredBirthdayRules = computed<ValidationRule[]>(() => [\r\n createRuleWithSuffix(monthAndDayAndYearRequiredRule, `for ${caption.value}`),\r\n \"required\"\r\n ]);\r\n\r\n //#endregion\r\n\r\n //#region Watchers\r\n\r\n watch(() => props.child, () => {\r\n childRequest.value = props.child;\r\n });\r\n\r\n //#endregion\r\n</script>","function styleInject(css, ref) {\n if ( ref === void 0 ) ref = {};\n var insertAt = ref.insertAt;\n\n if (!css || typeof document === 'undefined') { return; }\n\n var head = document.head || document.getElementsByTagName('head')[0];\n var style = document.createElement('style');\n style.type = 'text/css';\n\n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild);\n } else {\n head.appendChild(style);\n }\n } else {\n head.appendChild(style);\n }\n\n if (style.styleSheet) {\n style.styleSheet.cssText = css;\n } else {\n style.appendChild(document.createTextNode(css));\n }\n}\n\nexport default styleInject;\n","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n <template v-for=\"(child, index) in modelValue\" :key=\"child.guid\">\r\n <PreRegistrationChild\r\n :childNumber=\"index + 1\"\r\n :child=\"child\"\r\n :disabled=\"disabled\"\r\n @remove=\"$emit('removeChild', child)\" />\r\n <hr>\r\n </template>\r\n <NotificationBox v-if=\"addChildErrors.length\" alertType=\"danger\" title=\"Add Child\">\r\n <ul>\r\n <li v-for=\"error in addChildErrors\">{{ error }}</li>\r\n </ul>\r\n </NotificationBox>\r\n <RockButton\r\n btnSize=\"xs\"\r\n btnType=\"default\"\r\n class=\"add pull-right\"\r\n :disabled=\"disabled\"\r\n @click=\"onAddChildClicked\">\r\n <i class=\"fa fa-user\"></i>\r\n <span> Add Child</span>\r\n </RockButton>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { PropType, ref } from \"vue\";\r\n import PreRegistrationChild from \"./preRegistrationChild.partial.obs\";\r\n import { ChildRequestBag } from \"./types.partial\";\r\n import { convertPersonToChildRequest } from \"./utils.partial\";\r\n import NotificationBox from \"@Obsidian/Controls/notificationBox.obs\";\r\n import RockButton from \"@Obsidian/Controls/rockButton.obs\";\r\n import { useInvokeBlockAction } from \"@Obsidian/Utility/block\";\r\n import { FamilyPreRegistrationPersonBag } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationPersonBag\";\r\n\r\n const invokeBlockAction = useInvokeBlockAction();\r\n\r\n const props = defineProps({\r\n modelValue: {\r\n type: Object as PropType<ChildRequestBag[]>,\r\n required: true,\r\n },\r\n\r\n lastName: {\r\n type: String as PropType<string>,\r\n required: true\r\n },\r\n\r\n disabled: {\r\n type: Boolean as PropType<boolean>,\r\n default: false\r\n }\r\n });\r\n\r\n const emit = defineEmits<{\r\n (e: \"addChild\", child: ChildRequestBag): void,\r\n (e: \"removeChild\", child: ChildRequestBag): void,\r\n }>();\r\n\r\n //#region Values\r\n\r\n const addChildErrors = ref<string[]>([]);\r\n\r\n //#endregion\r\n\r\n //#region Event Handlers\r\n\r\n /**\r\n * Event handler for a child being added.\r\n */\r\n async function onAddChildClicked(): Promise<void> {\r\n addChildErrors.value = [];\r\n\r\n const result = await invokeBlockAction<FamilyPreRegistrationPersonBag>(\"GetNewChild\");\r\n\r\n if (result?.isSuccess && result.data) {\r\n const child = convertPersonToChildRequest(result.data);\r\n child.lastName = props.lastName;\r\n\r\n emit(\"addChild\", child);\r\n }\r\n else {\r\n addChildErrors.value = [result?.errorMessage || \"An unexpected error occurred while adding a child. Please try again.\"];\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n</script>","<!-- Copyright by the Spark Development Network; Licensed under the Rock Community License -->\r\n<template>\r\n <div>\r\n <div v-if=\"errors.length\" ref=\"errorNotificationBox\">\r\n <NotificationBox alertType=\"validation\" :heading=\"errorTitle ?? undefined\">\r\n <ul>\r\n <li v-for=\"error in errors\">{{ error }}</li>\r\n </ul>\r\n </NotificationBox>\r\n </div>\r\n <span ref=\"formErrorsScrollTarget\"></span>\r\n <RockForm @submit=\"onFormSubmitted\"\r\n @visibleValidationChanged=\"onVisibleValidationChanged\">\r\n <Panel type=\"block\" title=\"Family Pre-Registration\">\r\n <template #default>\r\n <Panel\r\n v-if=\"config.campusField?.isShown || config.visitDateField?.isShown\"\r\n :title=\"config.visitInfoTitle || 'Visit Information'\"\r\n v-show=\"isCampusPickerVisible || config.visitDateField?.isShown\">\r\n <div class=\"row\">\r\n <CampusPicker\r\n v-if=\"config.campusField?.isShown\"\r\n v-model=\"campusListItemBag\"\r\n :campusStatusFilter=\"config.campusStatusesFilter || []\"\r\n :campusTypeFilter=\"config.campusTypesFilter || []\"\r\n :disabled=\"isSaving || isNavigating\"\r\n formGroupClasses=\"col-md-4\"\r\n label=\"Campus\"\r\n :rules=\"config.campusField.isRequired ? ['required'] : []\"\r\n :showBlankItem=\"true\"\r\n @isVisible=\"isCampusPickerVisible = $event\" />\r\n <div v-if=\"config.visitDateField?.isDateShown\" class=\"col-md-5\">\r\n <DatePicker\r\n v-model=\"plannedVisitDate\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :disallowPastDateSelection=\"true\"\r\n label=\"Planned Visit Date\"\r\n :rules=\"config.visitDateField.isRequired ? 'required' : ''\" />\r\n </div>\r\n <div v-if=\"config.visitDateField?.isDateAndTimeShown\" class=\"col-md-7\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <DropDownList\r\n v-model=\"plannedVisitDate\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :items=\"scheduleDateItems\"\r\n label=\"Planned Visit Date\"\r\n :rules=\"config.visitDateField.isRequired ? 'required' : ''\"\r\n :showBlankItem=\"config.visitDateField.isOptional\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <DropDownList\r\n v-model=\"scheduleGuidOrEmptyString\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :items=\"scheduleTimeItems\"\r\n label=\"Planned Visit Time\"\r\n :rules=\"config.visitDateField.isRequired ? 'required' : ''\"\r\n :showBlankItem=\"config.visitDateField.isOptional\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </Panel>\r\n\r\n <Panel title=\"Adult Information\">\r\n <template #default>\r\n <h4 class=\"heading-individual\">First Adult</h4>\r\n\r\n <div class=\"row\">\r\n <TextBox\r\n v-model=\"fullName\"\r\n autocomplete=\"new-password\"\r\n class=\"rock-fullname\"\r\n :disabled=\"isSaving || isNavigating\"\r\n placeholder=\"Please enter name (Required)\" />\r\n\r\n <div class=\"col-sm-6\">\r\n <StaticFormControl\r\n v-if=\"adult1.isFirstNameReadOnly\"\r\n label=\"First Name\"\r\n :modelValue=\"adult1.firstName\" />\r\n <TextBox v-else\r\n v-model=\"adult1.firstName\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"First Name\"\r\n :rules=\"adult1RequiredRules\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <StaticFormControl\r\n v-if=\"adult1.isLastNameReadOnly\"\r\n label=\"Last Name\"\r\n :modelValue=\"adult1.lastName\" />\r\n <TextBox v-else\r\n v-model=\"adult1.lastName\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Last Name\"\r\n :rules=\"adult1RequiredRules\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <GenderDropDownList\r\n v-if=\"config.adultGenderField?.isShown\"\r\n v-model=\"adult1.genderStringValue\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Gender\"\r\n :rules=\"config.adultGenderField.isRequired ? adult1RequiredGenderRules : ''\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <DefinedValuePicker\r\n v-if=\"config.adultSuffixField?.isShown\"\r\n v-model=\"adult1.suffixListItemBag\"\r\n :definedTypeGuid=\"DefinedType.PersonSuffix\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Suffix\"\r\n lazyMode=\"lazy\"\r\n :rules=\"config.adultSuffixField.isRequired ? adult1RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <BirthdayPicker\r\n v-if=\"config.adultBirthdayField?.isShown\"\r\n v-model=\"adult1.birthDate\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Birth Date\"\r\n :rules=\"config.adultBirthdayField.isRequired ? [createRuleWithSuffix(monthAndDayAndYearRequiredRule, 'for First Adult'), 'required'] :\r\n config.adultBirthdayField.isMonthAndDayRequired ? createRuleWithSuffix(monthAndDayRequiredRule, 'for First Adult') : ''\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <DefinedValuePicker\r\n v-if=\"config.adultMaritalStatusField?.isShown\"\r\n v-model=\"adult1.maritalStatusListItemBag\"\r\n :definedTypeGuid=\"DefinedType.PersonMaritalStatus\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Marital Status\"\r\n lazyMode=\"lazy\"\r\n :rules=\"config.adultMaritalStatusField.isRequired ? adult1RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <PhoneNumberBox\r\n v-if=\"config.adultMobilePhoneField?.isShown\"\r\n v-model=\"adult1.mobilePhone\"\r\n v-model:countryCode=\"adult1.mobilePhoneCountryCode\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Mobile Phone\"\r\n :rules=\"config.adultMobilePhoneField.isRequired ? adult1RequiredRules : ''\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <CheckBox\r\n v-if=\"config.displaySmsOptIn?.isShowFirstAdult\"\r\n v-model=\"adult1.isMessagingEnabled\"\r\n label=\"\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :text=\"config.displaySmsOptIn?.smsOptInDisplayText ?? ''\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <EmailBox\r\n v-if=\"config.adultEmailField?.isShown\"\r\n v-model=\"adult1.email\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Email\"\r\n :rules=\"config.adultEmailField.isRequired ? adult1RequiredRules : []\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <RadioButtonList\r\n v-if=\"config.adultCommunicationPreferenceField?.isShown\"\r\n v-model=\"adult1.communicationPreferenceStringValue\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :horizontal=\"true\"\r\n :items=\"[\r\n { text: 'Email', value: CommunicationPreference.Email.toString() },\r\n { text: 'SMS', value: CommunicationPreference.SMS.toString() }\r\n ]\"\r\n label=\"Communication Preference\"\r\n :rules=\"config.adultCommunicationPreferenceField.isRequired ? adult1RequiredRules : ''\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <RacePicker\r\n v-if=\"config.adultRaceField?.isShown\"\r\n v-model=\"adult1.raceListItemBag\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :rules=\"config.adultRaceField.isRequired ? adult1RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <EthnicityPicker\r\n v-if=\"config.adultEthnicityField?.isShown\"\r\n v-model=\"adult1.ethnicityListItemBag\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :rules=\"config.adultEthnicityField.isRequired ? adult1RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div v-if=\"config.adultProfilePhotoField?.isShown\" class=\"col-sm-6\">\r\n <ImageEditor\r\n v-model=\"adult1.profileImageListItemBag\"\r\n :binaryFileTypeGuid=\"BinaryFiletype.PersonImage\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Profile Photo\"\r\n :rules=\"config.adultProfilePhotoField.isRequired ? adult1RequiredRules : ''\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <AttributeValuesContainer\r\n v-if=\"adult1.attributes != null\"\r\n v-model=\"adult1.attributeValues\"\r\n :attributes=\"adult1.attributes\"\r\n columnBreakpoint=\"sm\"\r\n :displayWithinExistingRow=\"true\"\r\n isEditMode\r\n :numberOfColumns=\"2\"\r\n :showCategoryLabel=\"true\" />\r\n </div>\r\n\r\n <div class=\"row mt-3\">\r\n <div class=\"col-md-12\">\r\n <div v-if=\"config.createAccountField?.isShown\">\r\n <div class=\"well card-createaccount\">\r\n <h4 class=\"heading-createaccount\">{{ config.createAccountTitle }}</h4>\r\n <p>{{ config.createAccountDescription }}</p>\r\n <div class=\"row\">\r\n <div class=\"col-md-6\">\r\n <TextBox\r\n v-model=\"createAccount.username\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Username\"\r\n :rules=\"config.createAccountField.isRequired ? 'required' : ''\"\r\n @blur=\"checkUsernameAvailability\" />\r\n <dl>\r\n <dt></dt>\r\n <dd>\r\n <NotificationBox\r\n v-if=\"isUsernameAvailable\"\r\n alertType=\"success\">The selected username is available.</NotificationBox>\r\n <NotificationBox\r\n v-else-if=\"isUsernameAvailable === false\"\r\n alertType=\"warning\">The username you selected is already in use.</NotificationBox>\r\n </dd>\r\n </dl>\r\n </div>\r\n <div class=\"col-md-6\">\r\n <TextBox\r\n v-model=\"createAccount.password\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Password\"\r\n :rules=\"config.createAccountField.isRequired ? 'required' : ''\"\r\n type=\"password\" />\r\n\r\n <TextBox\r\n v-model=\"confirmPassword\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Confirm Password\"\r\n type=\"password\"\r\n :rules=\"`${config.createAccountField.isRequired ? 'required|' : ''}${confirmPasswordRules}`\" />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <h4 class=\"heading-individual\">Second Adult</h4>\r\n\r\n <div class=\"adult-2-fields\">\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <StaticFormControl\r\n v-if=\"adult2.isFirstNameReadOnly\"\r\n label=\"First Name\"\r\n :modelValue=\"adult2.firstName\" />\r\n <TextBox v-else\r\n v-model=\"adult2.firstName\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"First Name\"\r\n :rules=\"isAdult2Entered ? adult2RequiredRules : ''\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <StaticFormControl\r\n v-if=\"adult2.isLastNameReadOnly\"\r\n label=\"Last Name\"\r\n :modelValue=\"adult2.lastName\" />\r\n <TextBox v-else\r\n v-model=\"adult2.lastName\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Last Name\"\r\n :rules=\"isAdult2Entered ? adult2RequiredRules : ''\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div v-if=\"config.adultGenderField?.isShown\" class=\"col-sm-6\">\r\n <GenderDropDownList\r\n v-model=\"adult2.genderStringValue\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Gender\"\r\n :rules=\"isAdult2Entered && config.adultGenderField.isRequired ? adult2RequiredGenderRules : ''\" />\r\n </div>\r\n <div v-if=\"config.adultSuffixField?.isShown\" class=\"col-sm-6\">\r\n <DefinedValuePicker\r\n v-model=\"adult2.suffixListItemBag\"\r\n :definedTypeGuid=\"DefinedType.PersonSuffix\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Suffix\"\r\n lazyMode=\"lazy\"\r\n :rules=\"isAdult2Entered && config.adultSuffixField.isRequired ? adult2RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div v-if=\"config.adultBirthdayField?.isShown\" class=\"col-sm-6\">\r\n <BirthdayPicker\r\n v-model=\"adult2.birthDate\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Birth Date\"\r\n :rules=\"isAdult2Entered && config.adultBirthdayField.isRequired ? [createRuleWithSuffix(monthAndDayAndYearRequiredRule, 'for Second Adult'), 'required'] :\r\n isAdult2Entered && config.adultBirthdayField.isMonthAndDayRequired ? createRuleWithSuffix(monthAndDayRequiredRule, 'for Second Adult') : ''\" />\r\n </div>\r\n <div v-if=\"config.adultMaritalStatusField?.isShown\" class=\"col-sm-6\">\r\n <DefinedValuePicker\r\n v-model=\"adult2.maritalStatusListItemBag\"\r\n :definedTypeGuid=\"DefinedType.PersonMaritalStatus\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Marital Status\"\r\n lazyMode=\"lazy\"\r\n :rules=\"isAdult2Entered && config.adultMaritalStatusField.isRequired ? adult2RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <PhoneNumberBox\r\n v-if=\"config.adultMobilePhoneField?.isShown\"\r\n v-model=\"adult2.mobilePhone\"\r\n v-model:countryCode=\"adult2.mobilePhoneCountryCode\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Mobile Phone\"\r\n :rules=\"isAdult2Entered && config.adultMobilePhoneField.isRequired ? adult2RequiredRules : ''\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <CheckBox\r\n v-if=\"config.displaySmsOptIn?.isShowAllAdults\"\r\n v-model=\"adult2.isMessagingEnabled\"\r\n label=\"\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :text=\"config.displaySmsOptIn?.smsOptInDisplayText ?? ''\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div v-if=\"config.adultEmailField?.isShown\" class=\"col-sm-6\">\r\n <EmailBox\r\n v-model=\"adult2.email\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Email\"\r\n :rules=\"isAdult2Entered && config.adultEmailField.isRequired ? adult2RequiredRules : ''\" />\r\n </div>\r\n <div v-if=\"config.adultCommunicationPreferenceField?.isShown\" class=\"col-sm-6\">\r\n <RadioButtonList\r\n v-model=\"adult2.communicationPreferenceStringValue\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :horizontal=\"true\"\r\n :items=\"[\r\n { text: 'Email', value: CommunicationPreference.Email.toString() },\r\n { text: 'SMS', value: CommunicationPreference.SMS.toString() }\r\n ]\"\r\n label=\"Communication Preference\"\r\n :rules=\"isAdult2Entered && config.adultCommunicationPreferenceField.isRequired ? adult2RequiredRules : ''\" />\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <RacePicker\r\n v-if=\"config.adultRaceField?.isShown\"\r\n v-model=\"adult2.raceListItemBag\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :rules=\"isAdult2Entered && config.adultRaceField.isRequired ? adult2RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <EthnicityPicker\r\n v-if=\"config.adultEthnicityField?.isShown\"\r\n v-model=\"adult2.ethnicityListItemBag\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :rules=\"isAdult2Entered && config.adultEthnicityField.isRequired ? adult2RequiredRules : ''\"\r\n :showBlankItem=\"true\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <div v-if=\"config.adultProfilePhotoField?.isShown\" class=\"col-sm-6\">\r\n <ImageEditor\r\n v-model=\"adult2.profileImageListItemBag\"\r\n :binaryFileTypeGuid=\"BinaryFiletype.PersonImage\"\r\n :disabled=\"isSaving || isNavigating\"\r\n label=\"Profile Photo\"\r\n :rules=\"isAdult2Entered && config.adultProfilePhotoField.isRequired ? adult2RequiredRules : ''\" />\r\n </div>\r\n </div>\r\n\r\n <div class=\"row\">\r\n <AttributeValuesContainer\r\n v-if=\"adult2.attributes != null\"\r\n v-model=\"adult2.attributeValues\"\r\n :attributes=\"adult2.attributes\"\r\n columnBreakpoint=\"sm\"\r\n :displayWithinExistingRow=\"true\"\r\n :isEditMode=\"isAdult2Entered\"\r\n :numberOfColumns=\"2\"\r\n :showCategoryLabel=\"true\" />\r\n </div>\r\n </div>\r\n\r\n <hr />\r\n\r\n <div class=\"row\">\r\n <div class=\"col-sm-6\">\r\n <AddressControl\r\n v-if=\"config.addressField?.isShown\"\r\n v-model=\"address\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :disableFrontEndValidation=\"!config.addressField.isRequired\"\r\n label=\"Address\"\r\n :rules=\"config.addressField.isRequired ? 'required' : ''\"\r\n :useCountryAbbreviation=\"false\" />\r\n </div>\r\n <div class=\"col-sm-6\">\r\n <AttributeValuesContainer\r\n v-if=\"config.familyAttributes\"\r\n v-model=\"familyAttributeValues\"\r\n :attributes=\"config.familyAttributes\"\r\n columnBreakpoint=\"sm\"\r\n isEditMode\r\n :numberOfColumns=\"2\"\r\n :showCategoryLabel=\"false\" />\r\n </div>\r\n </div>\r\n </template>\r\n </Panel>\r\n\r\n <Panel type=\"default\" title=\"Children\">\r\n <PreRegistrationChildren\r\n v-model=\"children\"\r\n :disabled=\"isSaving || isNavigating\"\r\n :lastName=\"adult1.lastName\"\r\n @addChild=\"onAddChild\"\r\n @removeChild=\"onRemoveChild\" />\r\n </Panel>\r\n </template>\r\n\r\n <template #footerActions>\r\n <RockButton\r\n btnType=\"primary\"\r\n :disabled=\"isSaving || isNavigating\"\r\n type=\"submit\"\r\n @click=\"shouldScrollToFormErrors = true\">Save</RockButton>\r\n <RockButton\r\n btnType=\"link\"\r\n :disabled=\"isSaving || isNavigating\"\r\n @click=\"onClearClicked\">Clear</RockButton>\r\n </template>\r\n </Panel>\r\n </RockForm>\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\n import { computed, nextTick, ref } from \"vue\";\r\n import PreRegistrationChildren from \"./FamilyPreRegistration/preRegistrationChildren.partial.obs\";\r\n import { ChildRequestBag, CreateAccountRequest, PersonRequestBag } from \"./FamilyPreRegistration/types.partial\";\r\n import { convertPersonToChildRequest, convertPersonToPersonRequest, createNotEqualRule, createPersonViewModel, createRuleWithReplacement, createRuleWithSuffix, monthAndDayAndYearRequiredRule, monthAndDayRequiredRule, required, } from \"./FamilyPreRegistration/utils.partial\";\r\n import AddressControl from \"@Obsidian/Controls/addressControl.obs\";\r\n import AttributeValuesContainer from \"@Obsidian/Controls/attributeValuesContainer.obs\";\r\n import BirthdayPicker from \"@Obsidian/Controls/birthdayPicker.obs\";\r\n import CampusPicker from \"@Obsidian/Controls/campusPicker.obs\";\r\n import CheckBox from \"@Obsidian/Controls/checkBox.obs\";\r\n import DatePicker from \"@Obsidian/Controls/datePicker.obs\";\r\n import DefinedValuePicker from \"@Obsidian/Controls/definedValuePicker.obs\";\r\n import DropDownList from \"@Obsidian/Controls/dropDownList.obs\";\r\n import EmailBox from \"@Obsidian/Controls/emailBox.obs\";\r\n import EthnicityPicker from \"@Obsidian/Controls/ethnicityPicker.obs\";\r\n import GenderDropDownList from \"@Obsidian/Controls/genderDropDownList.obs\";\r\n import ImageEditor from \"@Obsidian/Controls/imageEditor.obs\";\r\n import NotificationBox from \"@Obsidian/Controls/notificationBox.obs\";\r\n import Panel from \"@Obsidian/Controls/panel.obs\";\r\n import PhoneNumberBox from \"@Obsidian/Controls/phoneNumberBox.obs\";\r\n import RacePicker from \"@Obsidian/Controls/racePicker.obs\";\r\n import RadioButtonList from \"@Obsidian/Controls/radioButtonList.obs\";\r\n import RockButton from \"@Obsidian/Controls/rockButton.obs\";\r\n import RockForm from \"@Obsidian/Controls/rockForm.obs\";\r\n import StaticFormControl from \"@Obsidian/Controls/staticFormControl.obs\";\r\n import TextBox from \"@Obsidian/Controls/textBox.obs\";\r\n import { CommunicationPreference } from \"@Obsidian/Enums/Blocks/Crm/FamilyPreRegistration/communicationPreference\";\r\n import { Gender } from \"@Obsidian/Enums/Crm/gender\";\r\n import { BinaryFiletype } from \"@Obsidian/SystemGuids/binaryFiletype\";\r\n import { DefinedType } from \"@Obsidian/SystemGuids/definedType\";\r\n import { onConfigurationValuesChanged, useConfigurationValues, useInvokeBlockAction, useReloadBlock } from \"@Obsidian/Utility/block\";\r\n import { FormError } from \"@Obsidian/Utility/form\";\r\n import { useHttp } from \"@Obsidian/Utility/http\";\r\n import { ValidationRule } from \"@Obsidian/ValidationRules\";\r\n import { FamilyPreRegistrationGetScheduleDatesRequestBag } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationGetScheduleDatesRequestBag\";\r\n import { FamilyPreRegistrationGetScheduleDatesResponseBag } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationGetScheduleDatesResponseBag\";\r\n import { FamilyPreRegistrationInitializationBox } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationInitializationBox\";\r\n import { FamilyPreRegistrationSaveRequestBag } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationSaveRequestBag\";\r\n import { FamilyPreRegistrationSaveResponseBag } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationSaveResponseBag\";\r\n import { FamilyPreRegistrationScheduleDateBag } from \"@Obsidian/ViewModels/Blocks/Crm/FamilyPreRegistration/familyPreRegistrationScheduleDateBag\";\r\n import { AddressControlBag } from \"@Obsidian/ViewModels/Controls/addressControlBag\";\r\n import { ListItemBag } from \"@Obsidian/ViewModels/Utility/listItemBag\";\r\n import { toGuidOrNull } from \"@Obsidian/Utility/guid\";\r\n\r\n const config = useConfigurationValues<FamilyPreRegistrationInitializationBox>();\r\n const invokeBlockAction = useInvokeBlockAction();\r\n const http = useHttp();\r\n\r\n //#region Values\r\n\r\n const errorNotificationBox = ref<Element | undefined>();\r\n const formErrorsScrollTarget = ref<Element | undefined>();\r\n const shouldScrollToFormErrors = ref<boolean>(false);\r\n const isSaving = ref<boolean>(false);\r\n const isNavigating = ref<boolean>(false);\r\n const errorTitle = ref<string | null | undefined>();\r\n const errors = ref<string[]>(config.errorMessage ? [config.errorMessage] : []);\r\n const isCampusPickerVisible = ref(false);\r\n const internalCampusListItemBag = ref<ListItemBag | null | undefined>(config.campusGuid ? { value: config.campusGuid } : undefined);\r\n const plannedVisitDate = ref<string>(\"\");\r\n const scheduleGuidOrEmptyString = ref<string>(\"\");\r\n const scheduleDateItems = ref<FamilyPreRegistrationScheduleDateBag[]>([]);\r\n const isUsernameAvailable = ref<boolean | null | undefined>();\r\n const confirmPassword = ref<string>(\"\");\r\n const address = ref<AddressControlBag | undefined>(config.address ?? undefined);\r\n const fullName = ref<string>(\"\");\r\n const familyAttributeValues = ref<Record<string, string>>(config.familyAttributeValues || {});\r\n const createAccount = ref<CreateAccountRequest>({\r\n username: \"\",\r\n password: \"\"\r\n });\r\n\r\n // Create the request bags that will be used to pre-register the adults and children.\r\n const adult1Request = ref<PersonRequestBag>(convertPersonToPersonRequest(config.adult1));\r\n const adult2Request = ref<PersonRequestBag>(convertPersonToPersonRequest(config.adult2));\r\n const children = ref<ChildRequestBag[]>(config.children?.map(person => convertPersonToChildRequest(person)) ?? []);\r\n\r\n // Create the view model bags that will be bound to components\r\n // and used to modify the pre-register request bags.\r\n // In other words, changes to adult1 and adult2 will affect adult1Request and adult2Request, respectively.\r\n const adult1 = createPersonViewModel(adult1Request);\r\n const adult2 = createPersonViewModel(adult2Request);\r\n\r\n //#endregion\r\n\r\n //#region Computed Values\r\n\r\n const isAdult1Entered = computed<boolean>(() => !!adult1.firstName.trim());\r\n const isAdult2Entered = computed<boolean>(() => !!adult2.firstName.trim());\r\n\r\n // Validation rules are executed in order and stop on the first failure.\r\n // Even though the first rule is a required rule,\r\n // we need to add the special \"required\" rule to get the required indicator to display.\r\n const adult1RequiredRules = computed<ValidationRule[]>(() => [\r\n createRuleWithSuffix(required, `for First Adult`),\r\n \"required\"\r\n ]);\r\n\r\n const adult1RequiredGenderRules = computed<ValidationRule[]>(() => [\r\n createRuleWithSuffix(required, `for First Adult`),\r\n createRuleWithReplacement(createNotEqualRule(Gender.Unknown), \"is required for First Adult\"),\r\n \"required\"\r\n ]);\r\n\r\n const adult2RequiredRules = computed<ValidationRule[]>(() => [\r\n createRuleWithSuffix(required, `for Second Adult`),\r\n \"required\"\r\n ]);\r\n\r\n const adult2RequiredGenderRules = computed<ValidationRule[]>(() => [\r\n createRuleWithSuffix(required, `for Second Adult`),\r\n createRuleWithReplacement(createNotEqualRule(Gender.Unknown), \"is required for Second Adult\"),\r\n \"required\"\r\n ]);\r\n\r\n const campusListItemBag = computed<ListItemBag | null | undefined>({\r\n get(): ListItemBag | null | undefined {\r\n return internalCampusListItemBag.value;\r\n },\r\n set(newValue: ListItemBag | null | undefined) {\r\n // Update the ddlScheduleDate and ddlScheduleTime when the campus is changed.\r\n internalCampusListItemBag.value = newValue;\r\n updateScheduleDateControl();\r\n }\r\n });\r\n\r\n const confirmPasswordRules = computed<string>(() => {\r\n return `equalsfield:and Password do not match,${createAccount.value.password}`;\r\n });\r\n\r\n const scheduleTimeItems = computed<ListItemBag[]>(() => {\r\n const scheduleDateItem = scheduleDateItems.value.find(s => s.value === plannedVisitDate.value);\r\n\r\n return scheduleDateItem?.scheduleTimes ?? [];\r\n });\r\n\r\n //#endregion\r\n\r\n //#region Event Handlers\r\n\r\n /**\r\n * Event handler for a child being added.\r\n */\r\n async function onAddChild(child: ChildRequestBag): Promise<void> {\r\n children.value.push(child);\r\n }\r\n\r\n /**\r\n * Event handler for the clear button being clicked.\r\n */\r\n function onClearClicked(): void {\r\n isNavigating.value = true;\r\n location.reload();\r\n }\r\n\r\n /**\r\n * Event handler for the form being submitted.\r\n */\r\n async function onFormSubmitted(): Promise<void> {\r\n try {\r\n isSaving.value = true;\r\n\r\n const bag: FamilyPreRegistrationSaveRequestBag = {\r\n address: address.value,\r\n adult1: isAdult1Entered.value ? adult1Request.value : undefined,\r\n adult2: isAdult2Entered.value ? adult2Request.value : undefined,\r\n campusGuid: toGuidOrNull(internalCampusListItemBag.value?.value),\r\n children: children.value,\r\n createAccount: createAccount.value,\r\n familyAttributeValues: familyAttributeValues.value,\r\n familyGuid: toGuidOrNull(config.familyGuid),\r\n fullName: fullName.value,\r\n plannedVisitDate: plannedVisitDate.value,\r\n scheduleGuid: toGuidOrNull(scheduleGuidOrEmptyString.value)\r\n };\r\n\r\n clearErrors();\r\n\r\n const result = await invokeBlockAction<FamilyPreRegistrationSaveResponseBag>(\"Save\", { bag });\r\n\r\n if (result.isSuccess && result?.data) {\r\n if (result.data.errors?.length) {\r\n setErrors(\"Please correct the following:\", ...result.data.errors);\r\n }\r\n\r\n if (result.data.redirectUrl) {\r\n navigate(result.data.redirectUrl);\r\n }\r\n }\r\n else {\r\n setErrors(\"Error\", result.errorMessage || \"An error has occurred while processing your request. Your organization's administrators have been notified of this problem.\");\r\n }\r\n }\r\n finally {\r\n isSaving.value = false;\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for a child being removed.\r\n */\r\n function onRemoveChild(child: ChildRequestBag): void {\r\n const index = children.value.indexOf(child);\r\n if (index !== -1) {\r\n children.value.splice(index, 1);\r\n }\r\n }\r\n\r\n /**\r\n * Event handler for the visible form validation being changed.\r\n */\r\n function onVisibleValidationChanged(errors: FormError[]): void {\r\n // If there are any errors, then scroll them into view, if we should.\r\n if (errors?.length && shouldScrollToFormErrors.value) {\r\n scrollIntoView(() => formErrorsScrollTarget.value);\r\n\r\n // Reset the \"should scroll\" state until we should scroll again.\r\n shouldScrollToFormErrors.value = false;\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n //#region Functions\r\n\r\n /**\r\n * Checks availability of the username.\r\n */\r\n async function checkUsernameAvailability(): Promise<void> {\r\n const username = createAccount.value.username;\r\n if (!username) {\r\n isUsernameAvailable.value = null;\r\n }\r\n else {\r\n const response = await http.get<boolean>(\"/api/userlogins/available\", { username });\r\n isUsernameAvailable.value = !!response.data;\r\n }\r\n }\r\n\r\n /**\r\n * Clears errors.\r\n */\r\n function clearErrors(): void {\r\n errorTitle.value = undefined;\r\n errors.value = [];\r\n }\r\n\r\n /**\r\n * Navigates to a url.\r\n */\r\n function navigate(url: string): void {\r\n isNavigating.value = true;\r\n location.href = url;\r\n }\r\n\r\n /**\r\n * Scrolls an element into view.\r\n */\r\n function scrollIntoView(elementGetter: () => (Element | undefined)): void {\r\n if (!elementGetter) {\r\n // Nothing to scroll to.\r\n return;\r\n }\r\n\r\n // Need to wait until next tick to get the element as it may not exist yet.\r\n nextTick(() => {\r\n const element = elementGetter();\r\n if (element && typeof element[\"scrollIntoView\"] === \"function\") {\r\n element.scrollIntoView();\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Sets errors and scrolls them into view.\r\n */\r\n function setErrors(title: string | null, ...errorMessages: string[]): void {\r\n errorTitle.value = title;\r\n errors.value = errorMessages;\r\n\r\n scrollIntoView(() => errorNotificationBox.value);\r\n }\r\n\r\n /**\r\n * Updates the schedule date and time controls if they are shown.\r\n */\r\n async function updateScheduleDateControl(): Promise<void> {\r\n scheduleDateItems.value = [];\r\n\r\n if (!config.visitDateField?.isDateAndTimeShown || (config.campusField?.isShown && !campusListItemBag.value)) {\r\n return;\r\n }\r\n\r\n const bag: FamilyPreRegistrationGetScheduleDatesRequestBag = {\r\n campusGuid: toGuidOrNull(campusListItemBag.value?.value)\r\n };\r\n\r\n clearErrors();\r\n const result = await invokeBlockAction<FamilyPreRegistrationGetScheduleDatesResponseBag>(\"GetScheduleDates\", { bag });\r\n\r\n if (result?.data) {\r\n if (result.data.errorText) {\r\n setErrors(result.data.errorTitle || null, result.data.errorText);\r\n }\r\n\r\n config.visitDateField = result.data.visitDateField;\r\n scheduleDateItems.value = result.data.scheduleDates ?? [];\r\n }\r\n else if (result?.errorMessage) {\r\n setErrors(null, result.errorMessage);\r\n }\r\n }\r\n\r\n //#endregion\r\n\r\n onConfigurationValuesChanged(useReloadBlock());\r\n\r\n if (config.visitDateField?.isDateAndTimeShown) {\r\n nextTick(() => updateScheduleDateControl());\r\n }\r\n</script>"],"names":["convertPersonToPersonRequest","person","_person$communication","defaults","createPersonRequest","_objectSpread","guid","emptyGuid","attributeValues","communicationPreference","email","firstName","gender","isFirstNameReadOnly","isLastNameReadOnly","lastName","mobilePhone","mobilePhoneCountryCode","isMessagingEnabled","convertPersonToChildRequest","request","createChildRequest","familyRoleGuid","CommunicationPreference","None","Gender","Unknown","createPersonViewModel","reactive","toRefs","value","communicationPreferenceStringValue","computed","get","_person$value$communi","toString","set","newValue","CommunicationPreferenceDescription","Number","ethnicityListItemBag","createListItemBagWrapper","genderStringValue","gradeListItemBag","maritalStatusListItemBag","profileImageListItemBag","raceListItemBag","suffixListItemBag","r","p","undefined","Object","assign","e","getNumberAsOrdinalString","numb","ordinalStrings","numberStrings","oneHundred","oneThousand","oneMillion","oneBillion","oneTrillion","oneQuadrillion","getQuadrillionth","trillionth","getTrillionth","quadrillions","getHundredsString","slice","concat","billionth","getBillionth","trillions","millionth","getMillionth","billions","thousandths","getThousandths","millions","hundredths","getHundredths","thousands","tenths","getTenths","hundreds","tens","getTensString","ones","getOnesString","oneths","getOneths","required","params","options","length","JSON","parse","allowEmptyString","trim","Array","isArray","monthAndDayRequiredRule","_params","getMonth","getDay","monthAndDayAndYearRequiredRule","getYear","convertToNumber","toNumberOrNull","isNumeric","createNotEqualRule","compare","asBooleanOrNull","createRuleWithSuffix","rule","suffix","result","createRuleWithReplacement","replacement","config","useConfigurationValues","childRequest","ref","props","child","caption","toTitleCase","childNumber","requiredRules","requiredGenderRules","requiredBirthdayRules","watch","styleInject","css","insertAt","document","head","getElementsByTagName","style","createElement","type","firstChild","insertBefore","appendChild","styleSheet","cssText","createTextNode","invokeBlockAction","useInvokeBlockAction","addChildErrors","onAddChildClicked","_onAddChildClicked","apply","arguments","_asyncToGenerator","isSuccess","data","emit","errorMessage","http","useHttp","errorNotificationBox","formErrorsScrollTarget","shouldScrollToFormErrors","isSaving","isNavigating","errorTitle","errors","isCampusPickerVisible","internalCampusListItemBag","campusGuid","plannedVisitDate","scheduleGuidOrEmptyString","scheduleDateItems","isUsernameAvailable","confirmPassword","address","_config$address","fullName","familyAttributeValues","createAccount","username","password","adult1Request","adult1","adult2Request","adult2","children","_config$children$map","_config$children","map","isAdult1Entered","isAdult2Entered","adult1RequiredRules","adult1RequiredGenderRules","adult2RequiredRules","adult2RequiredGenderRules","campusListItemBag","updateScheduleDateControl","confirmPasswordRules","scheduleTimeItems","_scheduleDateItem$sch","scheduleDateItem","find","s","scheduleTimes","onAddChild","_x","_onAddChild","push","onClearClicked","location","reload","onFormSubmitted","_onFormSubmitted","_internalCampusListIt","bag","toGuidOrNull","familyGuid","scheduleGuid","clearErrors","_result$data$errors","setErrors","redirectUrl","navigate","onRemoveChild","index","indexOf","splice","onVisibleValidationChanged","scrollIntoView","checkUsernameAvailability","_checkUsernameAvailability","response","url","href","elementGetter","nextTick","element","title","_len","errorMessages","_key","_updateScheduleDateControl","_config$visitDateFiel2","_config$campusField","_campusListItemBag$va","visitDateField","isDateAndTimeShown","campusField","isShown","_result$data$schedule","errorText","scheduleDates","onConfigurationValuesChanged","useReloadBlock","_config$visitDateFiel"],"mappings":"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"}