{ "version": 3, "sources": [ "../../../../../Foundation/JavascriptCommon/code/scripts/common/formUtils.js", "ProductSelection/productSelection.js" ], "names": [], "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", "file": "ProductSelection.js", "sourcesContent": [ "define('common/formUtils',[\r\n],\r\n function () {\r\n\r\n // Clears and deactivates all invalid feedback text on form fields\r\n function clearInvalidFeedback(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" .is-invalid\").removeClass(\"is-invalid\");\r\n $(formId + \" .invalid-feedback\").empty();\r\n }\r\n\r\n // Fills in and activates invalid feedback text on form fields\r\n function displayInvalidFeedback(invalidFields, formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n if (invalidFields) {\r\n invalidFields.forEach(function (fieldMessage) {\r\n var field = $(formId + \" [name='\" + fieldMessage.FieldName + \"']\");\r\n field.addClass(\"is-invalid\");\r\n field.siblings(\".invalid-feedback\").append(fieldMessage.MessageText);\r\n });\r\n }\r\n }\r\n\r\n // Collects the data from all form fields and returns them as object,\r\n // using \"name\" attribute values from form fields as object property names.\r\n function collectFormData(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n // the serializeArray() jQuery method doesn't take the values from disabled fields, so first I'll\r\n // temporarily enable all disabled fields, and then disable them again\r\n var disabledFields = $(formId).find(\":input:disabled\").prop(\"disabled\", false);\r\n var serializedData = $(formId).serializeArray();\r\n disabledFields.prop(\"disabled\", true);\r\n var formData = {};\r\n serializedData.forEach(function (data) {\r\n formData[data.name] = data.value;\r\n });\r\n // serializeArray does not return anything for unchecked checkboxes, so we'll add them now with value false\r\n $(formId + \" input[type='checkbox']:not(:checked)\").each(function (index, element) {\r\n formData[element.name] = false;\r\n });\r\n // serializeArray returns \"on\" for checked checkboxes, so we'll set them to true now\r\n $(formId + \" input[type='checkbox']:checked\").each(function (index, element) {\r\n formData[element.name] = true;\r\n });\r\n return formData;\r\n }\r\n\r\n // Goes through all input elements on the form and fills them with data from the\r\n // given object, matching \"name\" attribute of the input element with object property name.\r\n function populateFormWithData(formId, data) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").each(function (index, element) { \r\n if (element.type === \"radio\" ||\r\n element.type === \"checkbox\")\r\n {\r\n if (data[element.name] !== undefined)\r\n $(element).prop(\"checked\", $(element).val().toString() === data[element.name].toString());\r\n }\r\n else if (element.type === \"text\" ||\r\n element.type === \"email\" ||\r\n element.type === \"tel\" ||\r\n element.type === \"password\" ||\r\n element.type === \"textarea\" ||\r\n element.type === \"select-one\")\r\n {\r\n if (data[element.name] !== undefined)\r\n $(element).val(data[element.name]);\r\n else\r\n $(element).val(null);\r\n }\r\n });\r\n }\r\n\r\n function disableFields(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").prop(\"disabled\", true);\r\n }\r\n\r\n function enableFields(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").prop(\"disabled\", false);\r\n }\r\n\r\n function initializeFloatingLabels(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" .floating-label-container\").each(function (index, element) {\r\n var inputElement = $(element).find(\":input\")[0];\r\n if (inputElement.value) $(element).addClass(\"active\");\r\n else $(element).removeClass(\"active\");\r\n });\r\n }\r\n\r\n function setFocus(selector, delay) {\r\n // sometimes focus has to be set with a delay, so that some other processes have time to finish before that (e.g. initializing floating labels)\r\n if (delay) setTimeout(() => { $(selector).focus(); }, delay);\r\n else $(selector).focus();\r\n }\r\n\r\n //adds the form token to the object for use with [ValidateAntiforgeryToken] attribute\r\n function useToken(data) { \r\n var token = $('input[name=\"__RequestVerificationToken\"]').val();\r\n data.__RequestVerificationToken = token;\r\n }\r\n\r\n return {\r\n clearInvalidFeedback: clearInvalidFeedback,\r\n displayInvalidFeedback: displayInvalidFeedback,\r\n collectFormData: collectFormData,\r\n populateFormWithData: populateFormWithData,\r\n disableFields: disableFields,\r\n enableFields: enableFields,\r\n initializeFloatingLabels: initializeFloatingLabels,\r\n setFocus: setFocus,\r\n useToken: useToken\r\n };\r\n });\r\n\n", "require([\r\n \"common/formUtils\"\r\n],\r\nfunction (formUtils) {\r\n\r\n const MODAL_SELECTOR = \"#product-selection\";\r\n\r\n let whatsLoaded = \"\";\r\n let productsCount = 0;\r\n\r\n function displayProductSelection(whichProducts) {\r\n if (whatsLoaded === whichProducts && productsCount == 1) {\r\n navigateToFirstProduct();\r\n return;\r\n }\r\n if (whatsLoaded !== whichProducts) {\r\n fetchProductsAsync(whichProducts);\r\n }\r\n $(MODAL_SELECTOR).modal(\"show\"); // display modal\r\n }\r\n\r\n function fetchProductsAsync(whichProducts) {\r\n $(MODAL_SELECTOR + \" .spinner-wrapper\").removeClass(\"d-none\"); // show spinner\r\n let postData = { SystemItemId: $(MODAL_SELECTOR).data(\"systemItemId\"), WhichProducts: whichProducts };\r\n formUtils.useToken(postData);\r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/customapi/Product/ProductSelectionData\",\r\n dataType: \"text\",\r\n data: postData,\r\n success: function (data) {\r\n // fill the product tiles into DOM\r\n $(MODAL_SELECTOR + \" .product-selection-products\").html(data);\r\n whatsLoaded = whichProducts;\r\n // analyse how many we have\r\n productsCount = $(MODAL_SELECTOR + \" .product-tile\").length;\r\n if (productsCount > 1) {\r\n // display the products\r\n $(MODAL_SELECTOR + \" .spinner-wrapper\").addClass(\"d-none\"); // hide spinner\r\n $(MODAL_SELECTOR + \" .product-selection-title\").removeClass(\"d-none\");\r\n $(MODAL_SELECTOR + \" .product-selection-text\").removeClass(\"d-none\");\r\n $(MODAL_SELECTOR + \" .product-selection-products\").removeClass(\"d-none\");\r\n } else if (productsCount === 1) {\r\n navigateToFirstProduct();\r\n } else if (productsCount === 0) {\r\n $(MODAL_SELECTOR + \" .spinner-wrapper\").addClass(\"d-none\"); // hide spinner\r\n $(MODAL_SELECTOR + \" .product-selection-products\").text(\"There are no products defined. Please try again later or call customer service for help.\");\r\n }\r\n },\r\n error: function (jq, status, errorThrown) {\r\n $(MODAL_SELECTOR + \" .spinner-wrapper\").addClass(\"d-none\"); // hide spinner\r\n $(MODAL_SELECTOR + \" .product-selection-products\").removeClass(\"d-none\").text(\"We're very sorry, but there were problems with fetching the products. Please try again later or call customer service for help.\");\r\n console.log(\"ERROR in fetching products. Status=\" + status + \" \" + jq.status + \" Message=\" + errorThrown + \" \" + jq.responseText);\r\n },\r\n complete: function () {\r\n }\r\n });\r\n }\r\n\r\n function hideProductSelection() {\r\n $(MODAL_SELECTOR).modal(\"hide\");\r\n }\r\n\r\n function navigateToFirstProduct() {\r\n window.location = $(MODAL_SELECTOR + \" .product-tile a\").attr(\"href\");\r\n }\r\n\r\n window.DisplayProductSelection = displayProductSelection;\r\n window.HideProductSelection = hideProductSelection; \r\n});\r\n\ndefine(\"ProductSelection/productSelection\", function(){});\n\n" ] }