- New
* The colors of the products displayed in photos may vary from one screen to another depending on their calibration.
'; } else { htmlSelect = '
'; if (!nolabel) { htmlSelect += ' '; } htmlSelect += '
'; } retour.push(htmlSelect); }); return retour; } function generateAllSelect(baseElement, path) { let retour = new Array(); Object.entries(baseElement).forEach(function (item) { retour[item[0]] = generateSelect(item[1][0], item[1][2], item[0], path); }); return retour; } function addSelectsToHtml(id, selects, path) { let html = ''; Object.entries(selects).forEach(function (item) { let isNoAttributes = ''; if (!attributes.includes(item[0])) { isNoAttributes = 'noAttributes'; } let nolabel = false; if (item[1].length == 1) { nolabel = true; } html += '
'; if (!nolabel) { html += '' + item[0] + ''; } item[1].forEach(function (it, i) { html += it; }); html += '
'; }); $('#' + id).html(html); } /*function loadSelectBase() { let htmlSelect = '
'; htmlSelect += '
'; $('#selectConfig').append(htmlSelect); }*/ function loadConfigRoue(index) { let backwheel = dataConfig[index].config.back_wheel; let frontwheel = dataConfig[index].config.front_wheel; let isbackwheel = true; let isfrontwheel = true; $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); if (JSON.stringify(backwheel) === '{}') { isbackwheel = false; } if (JSON.stringify(frontwheel) === '{}') { isfrontwheel = false; } if (isbackwheel && isfrontwheel) { $("#roueConfig input[type=radio][name=roueConfig][value='P'] + label").click(); } else { if (isbackwheel) { $("#roueConfig input[type=radio][name=roueConfig][value='B'] + label").click(); $("#roueConfig input[type=radio][name=roueConfig][value='P']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='F']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='P'] + label").hide(); $("#roueConfig input[type=radio][name=roueConfig][value='F'] + label").hide(); } if (isfrontwheel) { $("#roueConfig input[type=radio][name=roueConfig][value='F'] + label").click(); $("#roueConfig input[type=radio][name=roueConfig][value='P']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='B']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='P'] + label").hide(); $("#roueConfig input[type=radio][name=roueConfig][value='B'] + label").hide(); } } } function loadSelectBase() { let htmlSelect = '
'; //htmlSelect += '
'; $('#selectConfig').html(htmlSelect); } ; function selectVariante(o) { miniConfigLoader('Start'); console.log(o.value); let id_product = $('#product-details').data("product").id; let quantity = $('#quantity_wanted').val(); config = buildConfig(); $('.product_date_available').addClass('toRefresh'); if (config['complete'] === true) { sendCustomization(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } else { sendCustomizationIncomplete(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } } function buildConfig() { jsonConfig = {}; configComplete = true; let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); let selector = '[data-groupminiconfig]'; if (configRoue == 'P') { selector = '.configArriere [data-groupminiconfig], .configAvant [data-groupminiconfig]'; } if (configRoue == 'F') { selector = '.configAvant [data-groupminiconfig]'; } if (configRoue == 'B') { selector = '.configArriere [data-groupminiconfig]'; } $(selector).each(function (index, item) { //console.log(item); path = $(item).data('groupminiconfig'); itemvalues = $(item).find(".miniConfig-value"); re = /\[(.*?)\]/g; groupattr = re.exec(path); groupattr = groupattr[1].replace(/^"(.+(?="$))"$/, '$1'); dataReverse = eval(path); idprddataconfig = 0; if (attributes.includes(groupattr)) { groupvalue = []; $(itemvalues).each(function (index2, item2) { cle = $(item2).data('attrminiconfig'); valeur = ''; if ($(item2).is("select")) { valeur = $(item2).val(); } if ($(item2).is("span")) { valeur = $(item2).text(); } groupvalue[cle] = valeur; }); key = JSON.stringify(Object.assign({}, groupvalue)); console.log(key); idprddataconfig = dataReverse[1][key]; } else { valeur = ''; if ($(itemvalues).is("select")) { valeur = $(itemvalues).val(); } if ($(itemvalues).is("span")) { valeur = $(itemvalues).text(); } idprddataconfig = dataReverse[1][valeur]; } re2 = /\.(.*?)\[/g; attrType = re2.exec(path); attrType = attrType[1]; if (idprddataconfig === undefined && attrType === 'base') { /*jsonConfig = undefined; return false;*/ $(item).css("background-color", "#e7f4d0"); configComplete = false; } else { $(item).css("background-color", "#f3f7fa"); } selectprd = {}; selectprd.type = groupattr; if (idprddataconfig !== undefined) { //let indexConfig = $('#selectConfig select').val(); let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); refpath = "dataConfig[" + indexConfig + "].config." + path + ".products['" + idprddataconfig + "'].reference"; selectprd.ref = eval(refpath); if (qtyMulti.includes(groupattr)) { frontOrBack = path.split('.'); frontOrBack = frontOrBack[0]; //pathNbRayon = "dataConfig[" + indexConfig + "].config." + frontOrBack + ".nb_rayons"; pathNbRayonReel = "dataConfig[" + indexConfig + "].config." + frontOrBack + ".nb_rayons_reel"; nbRayon = eval(pathNbRayonReel); selectprd.qty = parseInt(nbRayon); } else { selectprd.qty = 1; } basePath = path.split('['); basePath = basePath[0]; basePath = basePath.split('.'); if (jsonConfig[basePath[0]] === undefined) { jsonConfig[basePath[0]] = {}; } if (jsonConfig[basePath[0]][basePath[1]] === undefined) { jsonConfig[basePath[0]][basePath[1]] = []; } jsonConfig[basePath[0]][basePath[1]].push(selectprd); } }); retourConfig = {}; retourConfig['complete'] = configComplete; retourConfig['config'] = JSON.stringify(jsonConfig); retourConfig['type'] = configRoue; return retourConfig; } function initConfig(index) { console.log("init config"); //miniConfigLoader('Start'); $('#wBtnAddToCart').prop('disabled', true); //$('#product-information .product-add-to-cart-inner').hide(); $('#product-information .product-add-to-cart-msg').show(); /*let dataProduct = $('#product-details').data('product'); $('#wProductPrice').html(dataProduct.price); $('#wProductWeight').html(baseWeight);*/ let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); $('.configArriere').hide(); $('.configAvant').hide(); if (configRoue == "P" || configRoue == "B") { basearriere = getBaseData(dataConfig[index].config.back_wheel.base); back_wheel = {}; back_wheel.base = basearriere; console.log(basearriere); selectarriere = generateAllSelect(basearriere, "back_wheel.base"); addSelectsToHtml('roueArriere', selectarriere, "back_wheel.base"); optionsarriere = getBaseData(dataConfig[index].config.back_wheel.options); back_wheel.options = optionsarriere; selectoptionsarriere = generateAllSelect(optionsarriere, "back_wheel.options"); addSelectsToHtml('optionsArriere', selectoptionsarriere, "back_wheel.options"); $('.configArriere').show(); if (Array.isArray(optionsarriere) && Object.keys(optionsarriere).length > 0) { $('.optionsArriere .product-maintitle').show(); } else { $('.optionsArriere .product-maintitle').hide(); } } if (configRoue == "P" || configRoue == "F") { baseavant = getBaseData(dataConfig[index].config.front_wheel.base); front_wheel = {}; front_wheel.base = baseavant; selectavant = generateAllSelect(baseavant, 'front_wheel.base'); addSelectsToHtml('roueAvant', selectavant, 'front_wheel.base'); optionsavant = getBaseData(dataConfig[index].config.front_wheel.options); front_wheel.options = optionsavant; selectoptionsavant = generateAllSelect(optionsavant, "front_wheel.options"); addSelectsToHtml('optionsAvant', selectoptionsavant, "front_wheel.options"); $('.configAvant').show(); console.log(optionsavant); if (Array.isArray(optionsavant) && Object.keys(optionsavant).length > 0) { $('.optionsAvant .product-maintitle').show(); } else { $('.optionsAvant .product-maintitle').hide(); } } let id_product = $('#product-details').data("product").id; let quantity = $('#quantity_wanted').val(); config = buildConfig(); if (config['complete'] === true) { sendCustomization(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } else { sendCustomizationIncomplete(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } availableDateLoader('Start'); //let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); getAvailableDate(config['config'],quantity); //synchronisation verticale des blocs du configurateur $("#avant .form-group").each(function () { let elmt = $(this).data('elemtminiconfig'); //console.log('[data-elemtminiconfig="' + elmt + '"]'); let topAvant = $('#avant [data-elemtminiconfig="' + elmt + '"]').position().top; if ($('#arriere [data-elemtminiconfig="' + elmt + '"]').length > 0) { let topArriere = $('#arriere [data-elemtminiconfig="' + elmt + '"]').position().top; let diffTop = topAvant - topArriere; if (diffTop > 0) { let newmargintoparriere = parseInt($('#arriere [data-elemtminiconfig="' + elmt + '"]').css('margin-top')) + diffTop; $('#arriere [data-elemtminiconfig="' + elmt + '"]').css('margin-top', newmargintoparriere + 'px'); } if (diffTop < 0) { let newmargintopavant = parseInt($('#avant [data-elemtminiconfig="' + elmt + '"]').css('margin-top')) - diffTop; $('#avant [data-elemtminiconfig="' + elmt + '"]').css('margin-top', newmargintopavant + 'px'); } } }); } function sendCustomization(idproduct, field, config, type, quantity) { //let indexConfig = $('#selectConfig select').val(); let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); console.log('sendCustomization'); console.log(JSON.parse(config)); $.ajax({ type: 'POST', url: "https://www.jpracingbike1.com/en/module/wattminiconfig/ajax", cache: false, async: true, data: { action: 'SendCustomization', ajax: true, idproduct: idproduct, field: field, config: config, type: type, indexConfig: indexConfig, quantity: quantity }, success: function (result) { result = JSON.parse(result); if (result.result == 'ok') { console.log(result); $('#product_customization_id').val(result.id_customizedData); $('#wProductPrice').html(result.price); $('#wProductWeight').html(result.weight); let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); if (configRoue === 'P') { $('#wProductTolerance').html('30'); } else { $('#wProductTolerance').html('15'); } $('#wMiniConfigPrdsInfos').html(result.prdsInfos); $('#wBtnAddToCart').prop('disabled', false); //$('#product-information .product-add-to-cart-inner').show(); $('#product-information .product-add-to-cart-msg').hide(); } else { $('#wBtnAddToCart').prop('disabled', true); //$('#product-information .product-add-to-cart-inner').hide(); $('#product-information .product-add-to-cart-msg').show(); } miniConfigLoader('Stop'); } }); } function sendCustomizationIncomplete(idproduct, field, config, type, quantity) { //let indexConfig = $('#selectConfig select').val(); let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); //$('#product-information .product-add-to-cart-inner').hide(); $('#product-information .product-add-to-cart-msg').show(); console.log('sendCustomizationIncomplete'); console.log(JSON.parse(config)); //miniConfigLoader('Start'); $.ajax({ type: 'POST', url: "https://www.jpracingbike1.com/en/module/wattminiconfig/ajax", cache: false, async: true, data: { action: 'SendCustomization', ajax: true, idproduct: idproduct, field: field, config: config, type: type, indexConfig: indexConfig, quantity: quantity }, success: function (result) { result = JSON.parse(result); if (result.result == 'ok') { console.log(result); $('#product_customization_id').val(result.id_customizedData); $('#wProductPrice').html(result.price); $('#wProductWeight').html(result.weight); let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); if (configRoue === 'P') { $('#wProductTolerance').html('30'); } else { $('#wProductTolerance').html('15'); } $('#wMiniConfigPrdsInfos').html(result.prdsInfos); $('#wBtnAddToCart').prop('disabled', true); } else { $('#wBtnAddToCart').prop('disabled', true); } miniConfigLoader('Stop'); } }); } function refreshAvailableDate() { availableDateLoader('Start'); let quantity = $('#quantity_wanted').val(); config = buildConfig(); getAvailableDate(config['config'],quantity); return false; } function getAvailableDate(config,qty) { $.ajax({ type: 'POST', url: "https://www.jpracingbike1.com/en/module/wattminiconfig/ajax", cache: false, async: true, data: { action: 'GetAvailableDate', ajax: true, config: config, quantity: qty }, success: function (result) { if (result == '--/--/----') { $('.product_date_available span').html(result); } else { $('.product_date_available span').html(result); $('.product_date_available').removeClass('toRefresh'); } availableDateLoader('Stop'); } }); } function miniConfigUpdQuantity() { console.log('miniConfigUpdQuantity'); let id_product = $('#product-details').data("product").id; let quantity = $('#quantity_wanted').val(); miniConfigLoader('Start'); config = buildConfig(); $('.product_date_available').addClass('toRefresh'); if (config['complete'] === true) { sendCustomization(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } else { sendCustomizationIncomplete(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } } function miniConfigLoader(run) { if (run == 'Start') { //console.log('start'); $('.loaderDiv').show(); } if (run == 'Stop') { //console.log('stop'); $('.loaderDiv').hide(); } } function availableDateLoader(run) { if (run == 'Start') { //console.log('start'); $('.dateLoaderDiv').show(); } if (run == 'Stop') { //console.log('stop'); $('.dateLoaderDiv').hide(); } }
I want to configure :
With :
Front wheel
Back wheel
Front option
Back option
Product customization
Don't forget to save your customization to be able to add to cart
dealer locator
Sapim Spokes
Sapim is THE brand of spokes, made in Belgium since 1918.Several models of spokes are available, within the limits of compatibility with the practice and the chosen rim:
- Sapim CX-Ray: flat spoke, very light, durable, aero and very dynamic (309g / 64 pcs / 292mm)
- Sapim CX-Sprint: Flat spoke identical to the CX-Ray but thicker for even more rigidity (373g / 64pcs / 292mm)
- Sapim D-Light: round spoke, light and durable, with a 1.65mm diameter central part, good value for money (344g / 64 pcs / 292mm)
- Sapim Race: round, sturdy and rigid spoke with a 1.8mm diameter central part (408g / 64 pcs / 292mm)
Nipples
Aluminium nipples with locking thread, available in 16 colours: black, red, silver, metal grey, blue, aqua blue, gold, light gold, dark green, mint syrup green, lime green, lilac, pink, fuchsia pink, orange and oil slick.
Accessories
The wheels are delivered assembled with valves and rim tape fitted, four spare spokes and nipples and an assembly certificate.
Brand SON
Supplier info
Confi/RR481DISC-SON28
Fast delivery and careful
International delivery
Delivery by Chronopost
Secure payment