Estimasi Biaya Perbaikan

Dapatkan estimasi biaya perbaikan dengan cepat sebelum permintaan perbaikan.

Select your product and issue

Or choose from the following dropdown:

Please choose category

Please choose series

Please choose model

Select the issue(s) you’re experiencing with your product (up to 2)

Please choose at least 1 issue

You can only select up to 2 options

*Can't find your product or issue? Contact us for support.

Your estimated cost of repair:

Galaxy A34 (128GB) | SM-A346

Issues: Black dot on screen & Camera issues

Learn the difference between Screen Repair and Screen Replacement.

Option 1: Screen Repair
Option 2: Screen Replacement
    ${this.options .map( (option) => `
  • ${option.text}
  • ` ) .join("")}
`; this.select2Container = container.querySelector(".select2-container"); this.select2Selection = this.select2Container.querySelector(".select2-selection"); this.select2Dropdown = this.select2Container.querySelector(".select2-dropdown"); this.select2ResultsOptions = this.select2Container.querySelectorAll( ".select2-results__option" ); this.select2Rendered = this.select2Container.querySelector( ".select2-selection__rendered" ); this.select2Selection.addEventListener("click", (e) => { e.stopPropagation(); this.toggleDropdown(); }); this.select2ResultsOptions.forEach((option) => { option.addEventListener("click", (e) => { const selectedValue = e.target.getAttribute("data-value"); this.setValue(selectedValue); }); }); document.addEventListener("click", (e) => { if (!this.select2Container.contains(e.target)) { this.select2Dropdown.classList.remove("show"); this.select2Selection.classList.remove("rotate-arrow"); } }); } toggleDropdown() { document.querySelectorAll(".select2-dropdown").forEach((dropdown) => { if (dropdown !== this.select2Dropdown) { dropdown.classList.remove("show"); } }); this.select2Dropdown.classList.toggle("show"); this.select2Selection.classList.toggle("rotate-arrow"); } setValue(value) { const option = Array.from(this.select2ResultsOptions).find( (option) => option.getAttribute("data-value") === value ); if (option) { this.selectedValue = value; this.selectedText = option.textContent; this.select2Rendered.textContent = this.selectedText; this.select2ResultsOptions.forEach((option) => { option.classList.remove("select2-results__option--selected"); }); option.classList.add("select2-results__option--selected"); this.select2Dropdown.classList.remove("show"); this.select2Selection.classList.remove("rotate-arrow"); if (this.onChangeCallback) { this.onChangeCallback(value); } } } setValueWithoutCallBack(value) { const option = Array.from(this.select2ResultsOptions).find( (option) => option.getAttribute("data-value") === value ); if (option) { this.selectedValue = value; this.selectedText = option.textContent; this.select2Rendered.textContent = this.selectedText; this.select2ResultsOptions.forEach((option) => { option.classList.remove("select2-results__option--selected"); }); option.classList.add("select2-results__option--selected"); this.select2Dropdown.classList.remove("show"); this.select2Selection.classList.remove("rotate-arrow"); } } getValue() { return this.selectedValue ?? ""; } getSelectedText() { return this.selectedText ?? ""; } clearOptions() { this.options = []; this.selectedValue = null; this.selectedText = null; this.select2Rendered.textContent = this.placeholder; this.updateOptions(); } replaceOptions(newOptions) { this.options = newOptions; this.selectedValue = null; this.selectedText = null; this.select2Rendered.textContent = this.placeholder; this.updateOptions(); } resetValue() { this.selectedValue = null; this.selectedText = null; this.select2Rendered.textContent = this.placeholder; this.select2ResultsOptions.forEach((option) => { option.classList.remove("select2-results__option--selected"); }); if (this.onChangeCallback) { this.onChangeCallback(null); } } updateOptions() { const optionsContainer = this.select2Container.querySelector(".select2-results"); optionsContainer.innerHTML = this.options .map( (option) => `
  • ${option.text}
  • ` ) .join(""); this.select2ResultsOptions = this.select2Container.querySelectorAll( ".select2-results__option" ); this.select2ResultsOptions.forEach((option) => { option.addEventListener("click", (e) => { const selectedValue = e.target.getAttribute("data-value"); this.setValue(selectedValue); }); }); } } // Example usage: // const dropdown1 = new Select2Component('dropdown1', [ // { value: 'option1', text: 'Option 1' }, // { value: 'option2', text: 'Option 2' }, // { value: 'option3', text: 'Option 3' } // ]); //Configuration const CategoriesDisplay = [ /*{ id: 1, name: 'Smartphones' },{ id: 2, name: 'TVs' }*/ ]; // Search UI const resultsBox = $(".result-box"); const inputBox = $("#input-box"); const resetIcon = $("#reset-icon"); let productIdSeleted = 0; //Handle change dropdown const onCategoryChange = async (value) => { if (value === null) return; dropdownProductChange(); checkDisableReset(); setInputValue(""); const data = await fetch( `${API_URL}/api/series?subcategoryId=${value}` ); const series = await data.json(); seriesDropdown.replaceOptions( series.map((e) => { return { value: e.id, text: e.name, }; }) ); modelCodeDropdown.clearOptions(); showSymptom([]); isSymptomDisable(true); checkHideDropdownErrors(); }; const displayCTAButton = ()=>{ const ctaDom = document.querySelector(".estimated-cost-cta") if(isDisplayCTAButton){ ctaDom.style.display = 'block'; }else{ ctaDom.style.display = 'none'; } } const onSeriesChange = async (value) => { dropdownProductChange(); checkDisableReset(); setInputValue(""); const data = await fetch(`${API_URL}/api/products?serieId=${value}`); const models = await data.json(); modelCodeDropdown.replaceOptions( models.map((e) => { return { value: e.id, text: e.name + " | " + e.modelCode, }; }) ); showSymptom([]); isSymptomDisable(true); checkHideDropdownErrors(); }; const onModelChange = async (value) => { dropdownProductChange(); inputSearchChange(); checkDisableReset(); const data = await fetch(`${API_URL}/api/symptoms?productId=${value}`); const symptoms = await data.json(); const selectBox = document.querySelector("#model-code"); const searchInputDom = modelCodeDropdown.getSelectedText(); setInputValue(searchInputDom); if ( searchInputDom.length !== 0 && searchInputDom.split("|").length === 2 ) { showSymptom(symptoms); document.querySelector(".symptom-title").classList.remove("disable"); //set attribute for button const estimateButton = document.querySelector("#get-estimate"); //replaced value model const modelCode = searchInputDom.split("|")[1]; estimateButton.setAttribute( "data-omni", `sg:support sparepartestimator:${modelCode.trim()}_getestimate` ); estimateButton.setAttribute( "ga-la", `sparepartestimator:${modelCode.trim()}_getestimate` ); isSymptomDisable(false); checkHideDropdownErrors(); } }; //Initial all dropdow const categoryDropdown = new Select2Component( "sub-category", [], onCategoryChange, globalContentJson?.category?.content ); const seriesDropdown = new Select2Component( "series", [], onSeriesChange, globalContentJson?.series?.content ); const modelCodeDropdown = new Select2Component( "model-code", [], onModelChange, globalContentJson?.model?.content ); const updateDropdownTitle = (contentJson) =>{ categoryDropdown.updatePlaceholder(contentJson?.category.content); seriesDropdown.updatePlaceholder(contentJson?.series.content); modelCodeDropdown.updatePlaceholder(contentJson?.model.content); } // changing color of categories: $("#sub-category") .on("mouseenter", "option", function () { $(this).addClass("hover-option"); }) .on("mouseleave", "option", function () { $(this).removeClass("hover-option"); }); //Action validation when click button get estimate const inputSearchValidation = () => { const inputValue = $("#input-box").val(); const subCategory = $("#sub-category").val(); if (inputValue.length === 0 && subCategory.length === 0) { $("#input-product-info").show(); return false; } else { $("#input-product-info").hide(); return true; } }; const clearDropdownOption = () => { categoryDropdown.resetValue(); seriesDropdown.clearOptions(); modelCodeDropdown.clearOptions(); }; const changeSearchValue = async (product) => { categoryDropdown.setValueWithoutCallBack(product.subCategoriesId); await setValueForSeries(product.seriesId, product.subCategoriesId); await setModelCode(product.seriesId, product.productId); }; const setValueForSeries = async (seriesId, subCategoriesId) => { const data = await fetch( `${API_URL}/api/series?subcategoryId=${subCategoriesId}` ); const series = await data.json(); seriesDropdown.replaceOptions( series.map((e) => { return { value: e.id, text: e.name, }; }) ); seriesDropdown.setValueWithoutCallBack(seriesId); // showSeries(series); // document.querySelector("#series").value = seriesId; }; const setModelCode = async (seriesId, productId) => { const data = await fetch(`${API_URL}/api/products?serieId=${seriesId}`); const models = await data.json(); modelCodeDropdown.replaceOptions( models.map((e) => { return { value: e.id, text: e.name + " | " + e.modelCode, }; }) ); modelCodeDropdown.setValueWithoutCallBack(productId); // showModel(model); // document.querySelector("#model-code").value = productId; }; const dropdownInfoValidation = () => { const inputValue = $("#input-box").val(); const subCategory = categoryDropdown.getValue() ?? ""; const series = seriesDropdown.getValue() ?? ""; const modelCode = modelCodeDropdown.getValue() ?? ""; let validInput = true; if (inputValue.length === 0) { if (subCategory.length === 0) { $("#required-subcategory").show(); validInput = false; } else { $("#required-subcategory").hide(); } if (series.length === 0) { $("#required-series").show(); validInput = false; } else { $("#required-series").hide(); } if (modelCode.length === 0) { $("#required-model-code").show(); validInput = false; } else { $("#required-model-code").hide(); } return validInput; } $("#required-subcategory").hide(); $("#required-series").hide(); $("#required-model-code").hide(); return true; }; const checkHideDropdownErrors = () => { const subCategory = categoryDropdown.getValue() ?? ""; const series = seriesDropdown.getValue() ?? ""; const modelCode = modelCodeDropdown.getValue() ?? ""; if (subCategory.length !== 0) { $("#required-subcategory").hide(); } if (modelCode.length != 0) { $("#input-product-info").hide(); $("#required-model-code").hide(); } if (series.length != 0) { $("#required-series").hide(); } }; const validationSymptom = () => { let modelCode = modelCodeDropdown.getValue() ?? ""; const symtomSelected = getSymtomValue(); if (symtomSelected.length === 0 || modelCode.length === 0) { $("#symptom-at-least-one").show(); return false; } else { $("#symptom-at-least-one").hide(); return true; } }; //Action hide error message when change input value const inputSearchChange = () => { const inputValue = $("#input-box").val(); //const subCategory = $('#sub-category').val(); const modelCode = modelCodeDropdown.getValue() ?? ""; if (inputValue.length > 0 || modelCode.length > 0) { $("#input-product-info").hide(); $("#required-subcategory").hide(); $("#required-series").hide(); $("#required-model-code").hide(); } }; const dropdownProductChange = () => { const inputValue = $("#input-box").val(); const subCategory = $("#sub-category").val(); const series = $("#series").val(); const modelCode = $("#model-code").val(); if (inputValue.length === 0) { if (subCategory.length > 0) { $("#required-subcategory").hide(); } if (series.length > 0) { $("#required-series").hide(); } if (modelCode.length > 0) { $("#required-model-code").hide(); } } else { $("#required-subcategory").hide(); $("#required-series").hide(); $("#required-model-code").hide(); } }; const dropdownSymptomChange = () => { const symtomSelected = getSymtomValue(); if (symtomSelected.length > 0) { $("#symptom-at-least-one").hide(); } }; resultsBox.focusout(function () { checkValidation(); }); const getSymtomValue = () => { var self = $(".multiSelect"); var field = self.find(".multiSelect_field"); var selectedOptions = field.find("option:selected"); const values = []; for (const element of selectedOptions) { values.push(element.value); } return values; }; const getSymtomName = () => { var symptomSelecteds = document.querySelectorAll(".multiSelect_choice"); var estimateName = []; symptomSelecteds.forEach((e, index) => { estimateName.push(e.textContent); }); return estimateName; }; const filterByKeyword = (products, keyword) => { keyword = keyword.replaceAll(" inch", '"'); keyword = keyword.replaceAll("inch", '"'); const words = keyword.split(" "); const values = products.filter((product) => { const rs = words.every((word) => { const workCheck = word.includes("inch") === true ? '"' : word; if (workCheck.length === 0) { return false; } return ( product?.name?.toLowerCase().includes(workCheck.toLowerCase()) || product?.serieName ?.toLowerCase() .includes(workCheck.toLowerCase()) || product?.modelCode ?.toLowerCase() .includes(workCheck.toLowerCase()) ); }); return rs; }); return values; }; filterByCategory = (products, categoriesId) => { return products.filter((product) => categoriesId.includes(product?.subcategoriesId) ); }; const searchByKeyword = (keyword) => { let filterResult = filterByKeyword(products, keyword); if (CategoriesDisplay.length > 0) { const categoriesId = CategoriesDisplay.map((e) => e.id); filterResult = filterByCategory(filterResult, categoriesId); } return filterResult; }; const checkValidation = () => { let isValid = true; isValid = inputSearchValidation() && isValid; isValid = dropdownInfoValidation() && isValid; isValid = validationSymptom() && isValid; $("#only-two-symptom").hide(); return isValid; }; let timeoutId; inputBox.on("keyup", async (e) => { const keyTyping = $("#input-box").val(); if ( keyTyping.length >= 1 || keyTyping === "Backspace" || keyTyping == "Control" ) { let result = []; let input = inputBox.val(); inputSearchChange(); checkDisableReset(); isSymptomDisable(true); clearDropdownOption(); clearSymptom(); if (input.length >= 2) { clearTimeout(timeoutId); timeoutId = setTimeout(async () => { const response = searchByKeyword(input.trim()); if (response.length === 0 && input.length >= 10) { const newInput = input.substring(0, 7); const newResponse = searchByKeyword(newInput.trim()); display(newResponse); } else { display(response); } }, 500); resetIcon.show(); } else { resetIcon.hide(); } if (!result.length) { resultsBox.html(""); } } else { const boxResult = document.querySelectorAll(".result-box li"); let indexFocus = -1; boxResult.forEach((e, index) => { if (e.classList.contains("focus")) { indexFocus = index; } }); switch (keyTyping) { case "ArrowUp": indexFocus = indexFocus === -1 ? 0 : indexFocus; boxResult[indexFocus].classList.remove("focus"); if (indexFocus === 0) { indexFocus = boxResult.length - 1; } else { indexFocus = indexFocus - 1; } boxResult[indexFocus].scrollIntoView(); boxResult[indexFocus].classList.add("focus"); break; case "ArrowDown": indexFocus = indexFocus === -1 ? 0 : indexFocus; boxResult[indexFocus].classList.remove("focus"); if (indexFocus === boxResult.length - 1) { indexFocus = 0; } else { indexFocus = indexFocus + 1; } boxResult[indexFocus].scrollIntoView(); boxResult[indexFocus].classList.add("focus"); break; case "Enter": if (indexFocus === -1) { indexFocus = 0; } const { textContent } = boxResult[indexFocus]; inputBox.val(textContent); productSelected(boxResult[indexFocus]); resultsBox.html(""); resetIcon.show(); break; default: break; } } }); resetIcon.on("click", function () { inputBox.val(""); resetIcon.hide(); resultsBox.html(""); inputBox.focus(""); clearSymptom(); clearDropdownOption(); }); const setInputValue = (input) => { if (input.length === 0) { inputBox.val(""); resetIcon.hide(); } else { inputBox.val(input); resetIcon.show(); } }; const clearSymptom = () => { const selectBox = document.querySelector(".multiSelect_field"); //Clear option selectBox.innerHTML = ""; //SetUpMultiSelect setUpMultiSelect(); isSymptomDisable(true); }; function display(result) { if (result.length === 0 && inputBox.val().length !== 0) { const html = `
    • No result
    `; resultsBox.html(html); return; } const content = result .sort((obj1, obj2) => obj1.name.localeCompare(obj2.name)) .map((list, index) => { return `
  • ${list.name} | ${list.modelCode}
  • `; }); resultsBox.html( "
      " + content.join("") + "
    " ); resultsBox.find("li").on("click", function () { selectInput($(this), this); }); } function selectInput(list, dom) { inputBox.val(list.text()); productSelected(dom); resultsBox.html(""); resetIcon.show(); } const productSelected = async (product) => { productIdSeleted = product.dataset.value; const subCategoriesId = product.dataset.categoryid; const seriesId = product.dataset.seriesid; const estimateButton = document.querySelector("#get-estimate"); //replaced value model const modelCode = product.textContent.split("|")[1]; estimateButton.setAttribute( "data-omni", `sg:support sparepartestimator:${modelCode.trim()}_getestimate` ); estimateButton.setAttribute( "ga-la", `sparepartestimator:${modelCode.trim()}_getestimate` ); if (productIdSeleted) { isSymptomDisable(false); document.querySelector(".symptom-title").classList.remove("disable"); } else { isSymptomDisable(true); document.querySelector(".symptom-title").classList.add("disable"); } const data = await fetch( `${API_URL}/api/symptoms?productId=${productIdSeleted}` ); const symptoms = await data.json(); showSymptom(symptoms); changeSearchValue({ productId: productIdSeleted, subCategoriesId, seriesId, }); }; // Jorn code - multi dropdown //$('#Symptom').select2(); const getDistinField = (data, fieldName) => { const allItems = data.map((e) => { return e[fieldName]; }); const displayItem = [...new Set(allItems)]; return displayItem; }; let dataJson = []; const parternTrim = /\s+/g; const main = async () => { const data = await fetch(`${API_URL}/api/subcategories`); const subcategories = await data.json(); let categories = subcategories; if (CategoriesDisplay.length > 0) { const categoriesName = CategoriesDisplay.map( (category) => category.name ); categories = subcategories.filter((e) => { return categoriesName.includes(e.name); }); } categoryDropdown.replaceOptions( categories.map((e) => { return { value: e.id, text: e.name, }; }) ); }; //Handle show const showSymptom = (data) => { let html = ``; data.forEach((Symptom) => { html += ``; }); document.querySelector(".multiSelect_field").innerHTML = html; setUpMultiSelect(); }; //Event document change document .querySelector("#sub-category") .addEventListener("change", async (event) => { dropdownProductChange(); checkDisableReset(); setInputValue(""); const data = await fetch( `${API_URL}/api/series?subcategoryId=${event.target.value}` ); const series = await data.json(); isSymptomDisable(true); }); const onSubSelected = () => { const subSelected = ""; const data = dataJson.filter((e) => { return e.Subcategory == subSelected; }); return data; }; const removeAllWhiteSpace=(str)=>{ return str.replace(/\s+/g,''); } const checkArrayAreEqual = (arr1,arr2)=>{ if(arr1.length!==arr2.length){ return false; } return arr1.every((item)=>arr2.includes(item)); } document .querySelector("#get-estimate") .addEventListener("click", async (e) => { const isValid = checkValidation(); if (isValid) { const modelCode = modelCodeDropdown.getValue() ?? ""; const productId = modelCode.length > 0 ? modelCode : productIdSeleted; const data = await fetch(API_URL + "/api/estimate", { method: "POST", headers: { "Content-Type": "application/json-patch+json", }, body: JSON.stringify({ productId, symptomIds: getSymtomValue(), }), }); let estimate = await data.json(); const seriesSelectedNames = seriesDropdown.getSelectedText(); const symptomSelectedNames = getSymtomName(); // Check if series name is Galaxy Z and lenght of product issues = 2 and symptomSelectedNames // is 'External Display Issues (Broken / Colour Inaccurate)' // and 'Internal Display Issues (Broken / Colour Inaccurate)' then return estimate data with type replacement const seriesNameCheck = "Galaxy Z"; const issuesCheck = [ "External Display Issues (Broken / Colour Inaccurate)", "Internal Display Issues (Broken / Colour Inaccurate)" ]; const repairType = "Replacement"; if (removeAllWhiteSpace(seriesSelectedNames).toLocaleLowerCase() === removeAllWhiteSpace(seriesNameCheck).toLocaleLowerCase()) { const issuesSelectedLowerCase = symptomSelectedNames.map((e)=> removeAllWhiteSpace(e).toLocaleLowerCase()); const issuseCheckLowerCase = issuesCheck.map((e)=>removeAllWhiteSpace(e).toLocaleLowerCase()); if ( checkArrayAreEqual(issuesSelectedLowerCase,issuseCheckLowerCase) ) { // e.repairType is string like:'Screen Replacement' estimate = estimate.filter((e) => { return e.repairType.toLocaleLowerCase().includes(repairType.toLocaleLowerCase()); }); } } //process sort item by pricing here const newEstimateData = isSortPrice? estimate.map((part)=>{ const repairParts = part?.repairParts.sort((item1,item2)=>{ if(item1.maxPrice==item2.maxPrice) return 0; if(item1.maxPrice-item2.maxPrice>0){ return -1; } return 1; }); return { ...part, repairParts } }):estimate; displayEstimate(newEstimateData); var showMe = $("#showEstimate").offset().top; $("html, body").animate({ scrollTop: showMe }, 1000); //Dispatch Event const faqEvent = new CustomEvent("FAQEvent", { detail: { symptom: getSymtomName().join(";"), modelCode: modelCodeDropdown .getSelectedText() .split("|")[1] .trim(), }, }); document.dispatchEvent(faqEvent); } }); // }) // Toggle hidden down and up icons const SetUpToggleIcon = () => { $(".toggle-icon").click(function () { var icon = $(this); var target = $(this).data("target"); var toggleDiv = $('.toggle-option[data-target="' + target + '"]'); if (icon.find("use").attr("href") === "#open-down-bold") { icon.find("use").attr("href", "#close-up-bold"); toggleDiv.removeClass("hidden"); } else { icon.find("use").attr("href", "#open-down-bold"); toggleDiv.addClass("hidden"); } }); }; const showEstimateText = () => { const estimateNameDom = document.querySelector("#estimate-name"); const productNameDom = document.querySelector("#est-product-name"); const estimateName = getSymtomName(); const textBox = $("#input-box").val().trim(); const selectBox = document.querySelector("#model-code"); productNameDom.textContent = textBox.length > 0 ? textBox : selectBox.options[selectBox.selectedIndex].text; if (estimateName.length === 2) { estimateNameDom.textContent = estimateName[0] + " & " + estimateName[1]; } else { estimateNameDom.textContent = estimateName[0]; } }; const checkDisableReset = () => { const buttonDisable = document.querySelector( ".reset-block .secondary-button" ); if ( $("#input-box").val().length > 0 || categoryDropdown.getValue().length > 0 || modelCodeDropdown.getValue().length > 0 || getSymtomValue().length > 0 ) { buttonDisable.disabled = false; } else { buttonDisable.disabled = true; } }; const clearOptions = (id) => { const options = document.querySelectorAll("#" + id + " option"); options.forEach((e, index) => { if (index !== 0) { e.remove(); } }); }; document .querySelector(".reset-block .secondary-button") .addEventListener("click", (e) => { categoryDropdown.resetValue(); seriesDropdown.clearOptions(); modelCodeDropdown.clearOptions(); document .querySelector(".sp-search-box-row") .classList.remove("disable"); inputBox.val(""); resetIcon.hide(); resultsBox.html(""); inputBox.focus(""); setUpMultiSelect(); isSymptomDisable(true); $(".estimated-cost-wrapper-result").hide(); document.querySelector( ".reset-block .secondary-button" ).disabled = true; }); const formatCurrency = (number) => { number = Math.ceil(number); return number.toFixed(number % 1 === 0 ? 0 : 2); }; const formatPercentage = (decimal)=>{ const percentage = (value*100).toFixed(1); const wholeNumber = Math.floor(percentage); const decimalPart = (percentage-wholeNumber).toFixed(1).slice(2); if(parseFloat(decimalPart)===0){ return `${wholeNumber}%` } return `${wholeNumber}.${decimalPart}%`; } const preciseMultiply = (value,multiplier) =>{ return Math.floor(value*multiplier*100)/100; } const formatPricing = (minValue,maxValue,symbol,isFront)=>{ minValue = formatCurrency(minValue); maxValue = formatCurrency(maxValue); if(minValue===maxValue){ if(isFront){ return symbol + minValue; } return minValue + symbol; } if(isFront){ return symbol + minValue +" - "+ symbol + maxValue; } return minValue + " - " + maxValue +symbol; } const showEstimateRepair = ( dataInput, type, isHiddenBlock = false, optionText = "" ) => { const id = type === 0 ? "repair":"replacement"; const domHtml = document.querySelector(`#${id} .option-col-content`); const classColor = type === 0 ? "blue" : "black"; if (isHiddenBlock) { $(".estimated-cost-wrapper").addClass("one-cardonly"); $(`#replacement`).hide(); } document.querySelector(`#${id} .option-col-header`).textContent = optionText + dataInput.repairType; //make labour to bottom of pricing const dataSortedWithSpecialKey = dataInput.repairParts. sort((item1,item2)=>{ const listMap = labourKey.map(e=>e.toLowerCase()); const itemKey1 = item1.name.toLowerCase(); const itemKey2 = item2.name.toLowerCase(); const foundKey1 = listMap.filter(key=>itemKey1.includes(key)); const foundKey2 = listMap.filter(key=>itemKey2.includes(key)); if(foundKey1.length>0&&foundKey2.length===0){ return 1; }else if(foundKey1.length===0&&foundKey2.length>0){ return -1; } return 0; }); dataInput.repairParts = dataSortedWithSpecialKey .map((e,index) => { return { ...e, group: e.group !== undefined&&e.group!=="" ? e.group : "non-group-"+index, }; }); //group data by group name const newData = Object.groupBy( dataInput.repairParts, ({ group }) => group ); const dataKeys = Object.keys(newData); const subCategoryContent = categoryDropdown.getSelectedText(); const optionDisplayArrow = { class: subCategoryContent !== "TV" ? "hidden" : "", id: subCategoryContent !== "TV" ? "#open-down-bold" : "#close-up-bold", }; let content = ``; const keyTop = "Likely needed"; const likeLyIndex = dataKeys.indexOf(keyTop); if (likeLyIndex !== -1) { dataKeys.splice(likeLyIndex, 1); dataKeys.unshift(keyTop); } const isFront = SYMBOL_POSITION.FRONT === globalContentJson.locale.currency.position; const symbol = globalContentJson.locale.currency.symbol; dataKeys.forEach((key) => { let data = newData[key]; let totalMin = 0; let totalMax = 0; if (!key.includes("non-group")) { let subSymtom = ""; data.forEach((e) => { totalMin += e.minPrice; totalMax += e.maxPrice; const itemPriceMinMax = formatPricing( e.minPrice,e.maxPrice,symbol,isFront); subSymtom += `
    ${ e.name }
    ${itemPriceMinMax}
    `; }); const dataTarget = (key + optionText).replace(" ", "-").trim(); const itemPriceMinMax = formatPricing(totalMin,totalMax,symbol,isFront); content += `
    ${key}
    ${itemPriceMinMax}
    ${subSymtom}
    `; } else { data.forEach((e, index) => { const itemPriceMinMax = formatPricing( e.minPrice,e.maxPrice,symbol,isFront); content += `
    ${e.name}
    ${itemPriceMinMax}
    `; }); } }); let totalMinMax = formatPricing(dataInput.totalMin,dataInput.totalMax,symbol,isFront); let subMinMax = formatPricing(dataInput.subtotalMin,dataInput.subtotalMax,symbol,isFront); let gstMinMax = formatPricing(dataInput.gstMin,dataInput.gstMax, symbol, isFront); if (dataInput.gst === 0) { content += `
    ${globalContentJson.locale.result['total-cost']}
    ${totalMinMax}
    `; } else { content += `
    ${globalContentJson.locale.result['total-cost']}
    ${subMinMax}
    ${globalContentJson.locale["gst-tax"]} (${ preciseMultiply(dataInput.gst,100) }%)
    ${gstMinMax}
    ${globalContentJson.locale.result['total-cost']}
    ${totalMinMax}
    `; } domHtml.innerHTML = content; }; const displayEstimate = (data) => { //0-> Repair, 1-> Replacement, 2 both if (data.length > 0) { showEstimateText(); $(".estimated-cost-subheader").hide(); if (data.length == 1) { showEstimateRepair(data[0], 0, true); } else if (data.length == 2) { //By default data[1]=> Repair, data[0] replacement showEstimateRepair(data[0], 0, false, globalContentJson.locale.optiontext.option1); showEstimateRepair(data[1], 1, false, globalContentJson.locale.optiontext.option2); // const id = type === 0?'repair':'replacement' if ( data[0].repairType === "Screen Replacement" || data[0].repairType === "Screen Repair" ) { $(".estimated-cost-subheader").show(); } $("#repair").show(); $("#replacement").show(); $(".estimated-cost-wrapper").removeClass("one-cardonly"); } SetUpToggleIcon(); displayCTAButton(); $(".estimated-cost-wrapper-result").show(); } }; // multi select const setUpMultiSelect = () => { $(".multiSelect").each(function (e) { var self = $(this); var field = self.find(".multiSelect_field"); var fieldOption = field.find("option"); var placeholder = field.attr("data-placeholder"); const disableClass = document .querySelector(".multiSelect_dropdown") ?.classList?.contains("disable") === true ? "disable" : ""; document.querySelector(".multiSelect_dropdown")?.remove(); document.querySelector(".multiSelect_placeholder")?.remove(); const multiSelect_option = document.querySelectorAll( ".multiSelect_option" ); multiSelect_option.forEach((e) => { e?.remove(); }); field.nextAll().remove(); field.hide().after( `
    ` + placeholder + `
      ` ); fieldOption.each(function (e) { const customClass = e === 0 ? "disable" : ""; $(".multiSelect_list").append( `
    • ` + $(this).text() + `
    • ` ); }); //Add event for arrow function document .querySelector(".multiSelect .multiSelect_arrow") ?.addEventListener("click", (e) => { e.stopPropagation(); e.preventDefault(); dropdown.toggleClass("-open"); list .toggleClass("-open") .scrollTop(0) .css("top", dropdown.height() + 15); }); var dropdown = self.find(".multiSelect_dropdown"); var list = self.find(".multiSelect_list"); var option = self.find(".multiSelect_option"); var optionText = self.find(".multiSelect_text"); dropdown.attr("data-multiple", "true"); list.css("top", dropdown.height() + 20); function updateSelectedItems() { selectedBox.empty(); field.find("option:selected").each(function () { var text = $(this).text(); selectedBox.append( `
      ${text}
      ` ); }); selectedBox .parent() .toggle(field.find("option:selected").length > 0); } option.click(function (e) { var self = $(this); var selectedOptions = field.find("option:selected").length; if (e.target.classList[0] === "multiSelect_option") { //If Item selected is Symptom then ignore return; } checkDisableReset(); if (self.hasClass("selected-highlight")) return; if (selectedOptions < 2 || self.hasClass("-selected")) { //e.stopPropagation(); self.addClass("selected-highlight"); field .find("option:contains(" + self.children().text() + ")") .prop("selected", true); dropdown .append(function (e) { return $( `` + self.children().text() + '
      ' ).click(function (e) { var self = $(this); //e.stopPropagation(); self.remove(); list .find(".multiSelect_option:contains(" + self.text() + ")") .removeClass("selected-highlight"); list .css("top", dropdown.height() + 15) .find(".multiSelect_noselections") .remove(); field .find("option:contains(" + self.text() + ")") .prop("selected", false); if (dropdown.children(":visible").length === 0) { dropdown.removeClass("-hasValue"); } //Logic hide pricing $(".estimated-cost-wrapper-result").hide(); }); }) .addClass("-hasValue"); list.css("top", dropdown.height() + 15); if (!option.not(".-selected").length) { list.append( '
      No Selections
      ' ); } } else { $("#only-two-symptom").show(); } dropdownSymptomChange(); }); $(document).on("click", ".multiSelect_deselect", function (e) { var text = $(this).parent().text(); field.find("option:contains(" + text + ")").prop("selected", false); list .find(".multiSelect_option:contains(" + text + ")") .removeClass("-selected"); updateSelectedItems(); }); dropdown.click(function (e) { e.stopPropagation(); e.preventDefault(); dropdown.toggleClass("-open"); list .toggleClass("-open") .scrollTop(0) .css("top", dropdown.height() + 15); }); $(document).on("click touch", function (e) { if (dropdown.hasClass("-open")) { dropdown.toggleClass("-open"); list.removeClass("-open"); } }); }); }; /*End JS */ const isSymptomDisable = (isDisable) => { const dropdown = document.querySelector(".multiSelect_dropdown"); const dropdownPlacehorder = document.querySelector( ".multiSelect_placeholder" ); const titleofMultiSelect = document.querySelector(".symptom-title"); if (isDisable) { dropdown.classList.add("disable"); dropdownPlacehorder.classList.add("disable"); titleofMultiSelect.classList.add("disable"); } else { dropdown.classList.remove("disable"); dropdownPlacehorder.classList.remove("disable"); titleofMultiSelect.classList.remove("disable"); } }; const isDropdownInfoDisable = (isDisable) => { const subCategory = document.querySelector("#sub-category"); const series = document.querySelector("#series"); const modelCode = document.querySelector("#model-code"); const titleofMultiSelect = document.querySelector(".symptom-title"); if (isDisable) { subCategory.classList.add("disable"); series.classList.add("disable"); modelCode.classList.add("disable"); titleofMultiSelect.classList.add("disable"); } else { subCategory.classList.remove("disable"); series.classList.remove("disable"); modelCode.classList.remove("disable"); titleofMultiSelect.classList.remove("disable"); } }; const isDisableInput = (isDisable) => { const input = document.querySelector(".sp-search-box-row"); if (isDisable) { input.classList.add("disable"); } else { input.classList.remove("disable"); } }; const updateTextContent = (jsonContent) => { document.querySelector("#select_your_product_and_issue").textContent = jsonContent.select_your_product_and_issue document.querySelector("#input-box").placeholder = jsonContent.input_search_product.content; document.querySelector("#input-product-info").textContent = jsonContent.input_search_product.msg_error; document.querySelector("#or_select_dropdown").textContent = jsonContent.or_select_dropdown; document.querySelector("#required-subcategory").textContent = jsonContent.category.msg_erorr; document.querySelector("#required-series").textContent = jsonContent.series.msg_erorr; document.querySelector("#required-model-code").textContent = jsonContent.model.msg_erorr; //symptom-title document.querySelector("#symptom-title").textContent = jsonContent["symptom-title"]; document.querySelector("#symptom-at-least-one").textContent = jsonContent.symptom["symptom-at-least-one"]; document.querySelector("#only-two-symptom").textContent = jsonContent.symptom["only-two-symptom"]; document.querySelector("#symptom-selected").textContent = jsonContent.symptom["symptom-selected"]; document.querySelector("#not-found-issues").textContent = jsonContent["support-msg"]["not-found-issues"]; if(jsonContent["support-msg"]["support-url"]===undefined||jsonContent["support-msg"]["support-url"]===null||jsonContent["support-msg"]["support-url"].length===0){ document.querySelector("#contact-for-us-block").innerHTML = jsonContent["support-msg"]["contact-for-us"]; }else{ document.querySelector("#contact-for-us").textContent = jsonContent["support-msg"]["contact-for-us"]; document.querySelector("#contact-for-us").href = jsonContent["support-msg"]["support-url"]; } document.querySelector("#get-estimate").textContent = jsonContent["get-estimate"]; document.querySelector("#reset").textContent = jsonContent["reset"]; document.querySelector("#showEstimate").textContent = jsonContent.result["title-repair"]; //Special case if have more 2 urls like NZ if(jsonContent.result["url-learn-difference"]===null||jsonContent.result["url-learn-difference"]===undefined||jsonContent.result["url-learn-difference"]?.length===0){ document.querySelector("#learn-difference-between-block").innerHTML =`${ jsonContent.result["repair-learn-title"]}` }else{ document.querySelector("#learn-difference-between").textContent = jsonContent.result["repair-learn-title"]; document.querySelector("#learn-difference-between").href = jsonContent.result["url-learn-difference"]; } document.querySelector("#showEstimate").textContent = jsonContent['title-show-estimate']; document.querySelector("#symtom-multi-selector").setAttribute("data-placeholder",jsonContent.symptom.name) }; const TIME_CACHED = 15; // unit minues const APP_CONFIG_KEY = "APP_CONFIG_KEY"; const countryUrl = { vn:'https://vnrepaircostestimatorstg.blob.core.windows.net/upload/vn-repair-cost-estimator-11664/@country-code.json', th:'https://threpaircostestimatorstg.blob.core.windows.net/upload/th-repair-cost-estimator-11660/@country-code.json', au:'https://phrepaircostestimatorstg.blob.core.windows.net/upload/ph-repair-cost-estimator-11663/@country-code.json', my:'https://myrepaircostestimatorstg.blob.core.windows.net/upload/@country-code.json', nz:'https://phrepaircostestimatorstg.blob.core.windows.net/upload/ph-repair-cost-estimator-11663/@country-code.json', ph:'https://phrepaircostestimatorstg.blob.core.windows.net/upload/ph-repair-cost-estimator-11663/@country-code.json', sg:'https://phrepaircostestimatorstg.blob.core.windows.net/upload/ph-repair-cost-estimator-11663/@country-code.json', id:'https://idrepaircostestimatorstg.blob.core.windows.net/upload/@country-code.json' } //Run when everything ready const appStart = async (country) => { const commonConfig = configByCountry[country] labourKey = commonConfig?.labour??labourKey; isSortPrice =commonConfig?.isSortPrice; isDisplayCTAButton = commonConfig?.isDisplayCTAButton; let ENDPOINT_GET_CONFIGURATION = `/seao/locale/${country}.json`; //Check if not in local if(!window.location.href.includes('127.0.0.1')){ ENDPOINT_GET_CONFIGURATION = countryUrl[country].replace('@country-code',country).trim(); //update here } isLoading(true); const countryKey= APP_CONFIG_KEY+"_"+country.toUpperCase(); let jsonContent = localStorage.getItem(countryKey); const now = new Date(); const lastUpdated = new Date(JSON.parse(jsonContent)?.lastUpdate); const validTime =Math.floor(Math.abs(now-lastUpdated)/(1000*60)) < TIME_CACHED; const checkConfigValid = jsonContent!==null&&validTime; if(!checkConfigValid) { try { const jsonRes = await fetch(ENDPOINT_GET_CONFIGURATION); jsonContent = await jsonRes.json(); jsonContent.lastUpdate = now.getTime(); localStorage.setItem(countryKey,JSON.stringify(jsonContent)); } catch (ex) { alert(ex.message); } }else{ jsonContent = (JSON.parse(jsonContent)); } API_URL = jsonContent.configuration.backendStgUrl;//Testing on local if (window.document.location.origin.indexOf('p6-qa.samsung.com') > 0) { API_URL = jsonContent.configuration.backendStgUrl;//for stg } else if (window.document.location.origin.indexOf('www.samsung.com') > 0) { API_URL = jsonContent.configuration.backendProdUrl;//for prod } globalContentJson = jsonContent; defer(async () => { $(document).ready(async () => { const data = await fetch(API_URL + `/api/all`); products = await data.json(); }); }); updateDropdownTitle(jsonContent.locale); updateTextContent(jsonContent.locale); main(); setUpMultiSelect(); isSymptomDisable(true); isLoading(false) }; const urlObj = new URL(window.location.href); var paths = urlObj.pathname.split("/"); let country = DEFAULT_COUNTRY; if(paths.length> 2){ country = paths[1]; } appStart(country); /*End JS */ });

      Biaya perbaikan (yang mencakup suku cadang dan harga terkaitnya) yang ditampilkan di atas belum termasuk PPN maupun Jasa Perbaikan, hanya estimasi biaya perbaikan* Aktual biaya perbaikan akan diinfokan oleh pusat servis resmi Samsung setelah pengecekan.

      Upgrade now
      Enjoy the latest products and features for less!

      `; }); if (htmlContent.length > 0) { document.querySelector("#faq-wrapper").style.display = "block"; } else { document.querySelector("#faq-wrapper").style.display = "none"; } document.querySelector(".faq-spacer").textContent = "FAQs"; dom.innerHTML = htmlContent; }); });