Orbea Vibe 2021 Electric Bike - Small
4},{"alt":null,"id":34094320910562,"position":2,"preview_image":{"aspect_ratio":1.227,"height":1242,"width":1524,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.02.png?v=1718997712"},"aspect_ratio":1.227,"height":1242,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.02.png?v=1718997712","width":1524},{"alt":null,"id":34094311604450,"position":3,"preview_image":{"aspect_ratio":1.498,"height":4004,"width":5999,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/EdgeHTdetail.jpg?v=1718997862"},"aspect_ratio":1.498,"height":4004,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/EdgeHTdetail.jpg?v=1718997862","width":5999},{"alt":null,"id":34094324351202,"position":4,"preview_image":{"aspect_ratio":1.227,"height":1242,"width":1524,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.17.png?v=1718997714"},"aspect_ratio":1.227,"height":1242,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.32_9d81277b-124e-4fdc-8a0f-fbfb40a9343d_600x.png?v=1691610357)">>
Life Systems Pocket First Aid Kit - HIRE
£0.00
>
) or email ( >
[email protected]
Grips ) where on of the team will be more than happy to help.
Benno Ergo Profile, Lock-On
ProjektRide Bike Shop Edinburgh Hire Kryptolok Standard U-Lock & 4 foot Kryptoflex cable
£0.00
Saddle
I'm looking to buy this product, when will it arrive and how much does postage cost?
Benno Endurance with Rear Handle
If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.
<
Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.<
Seatpost£We also have a physical store, if you are local please pop in -
From
Rear Derailleur
div class="featured-image__bg bg-pos-center-center" style="background-image: url('//projektride.co.uk/cdn/shop/files/2571D9FF-E9AE-4004-9A55-C7FD4DD999D6_2048x.jpg?v=1640941114');">-Shimano Deore
div class="product__media-hover-img product__media" style="background-image: url(//projektride.co.uk/cdn/shop/files/IMG_9055_600x.heic?v=1749645628)">ProjektRide Bike Shop Edinburgh
>
82 Newington Road, EH91QN, Edinburgh.Email
BombtrackPedals
One Piece Aluminumbrooks
Brooks
RimsBrother Cycles
Aluminum, Double Wall with Eyelet
Burgtec
Cane CreekContinental
continental
Location
Coros
82 Newington Road
CubeEdinburgh
EH9 1QNDiamant
dynaplug
Email
Early Rider
[email protected]
Enigma
s_insert_selector_type":"afterend","preorder_original_price_selector":"","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":false,"inline_form_selector":null,"inline_form_selector_type":"afterend","storefront_form_prefill_customer":true,"market_setup_type":"single_market","shopify_app_id":5940125,"cache":true,"cached_at":"2025-11-11T14:27:02.333Z","multi_language_enabled":false,"translation_locale":"en"};window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42167799447778,43590980075746,43916521013474,43934694998242,43934695031010,43934695620834,43935975440610,43935975473378,43935989399778,43935989432546,43935990284514,43935994118370,43935995625698,43935995855074,43936000835810,43936003195106,43936003227874,43936008012002,43936008044770,43936022757602,43936022790370,43936022823138,43936022855906,43936056115426,43936061030626,43936064930018,43936070631650,43936078037218,43936078069986,43936Enve
52962,43981345685730,43981357580514,43981357613282,43981362462946,43981362495714,43981362528482,43981369016546,43981369049314,43981374914786,43981374947554,43981374980322,43981392904418,43981695844578,43981695877346,43981695910114,43981695942882,43981986070754,43981987905762,43981987938530,44052906967266,44052907327714,44052907360482,44052907393250,44052907426018,44052907458786,44052907491554,44052909097186,44052909129954,44140302827746,44140302893282,44140317016290,44155590508770,44155590541538,44155594211554,44155594244322,44155594277090,44155594309858,44155594342626,44155594375394,44155594440930,44155594473698,44155594506466,44195991847138,44195991945442,44329993437410,44329993470178,44329993502946,44329993535714,44329993568482,44957136584930,44957136781538,44957136945378,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746,45353010921698,45353010954466,45353010987234,45353018261730,45353018294498,45353018327266,55569712382335,55569712447871,5556971248063
antShippingTexts = {"variant_shipping_texts":{},"updated_at":"2025-12-14T12:19:01Z","shopify_market_id":382140642,"market_locations_enabled":false};
window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_market_382140642";window._RestockRocketConfig.sellingPlans = [{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[55569933140351,55569712382335,55569712415103,55569712480639,55569933173119,55570017616255,55569933074815,55570017550719,55569712447871,55569933107583,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated delivery date.","preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_descript
Eovolt":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"
g"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":8726320021730,"title":"Restrap Saddle Bag (14 Litres)","handle":"restrap-saddle-bag-14-litres","description":"\u003cp\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cspan\u003ePart of the #carryeverything range, our rackless saddle bag connects securely to your seatpost for bike packing, touring or commuting. With no mounts or screws, the bag attaches in seconds to any bike. The holster fits up to a 14 litre dry bag and is secured with a patented magnetic buckle that’s easy to adjust, even whilst wearing gloves.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eThe bag is hardcase for easy loading and is fastened
Ergon_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":46015911788770,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Restrap Saddle Bag (14 Litres)","public_title":null,"options":["Default Title"],"price":11999,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/RS_SB1_LRG_BLK_SaddleBag_14Litres_Black.jpg?v=1727778344"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/RS_SB1_LRG_BLK_SaddleBag_14Litres_Black.jpg?v=1727778344","options":["Title"],"media":[{"alt":null,"id":34745982255330,"position":1,"preview_image":{"aspect_ratio":1.0,"height":820,"width":820,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/RS_SB1_LRG_BLK_SaddleBag_14Litres_Black.jpg?v=1727778344"},"aspect_ra
d with the classic Restrap label, made from vegan-friendly PU.\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eWeight - 630g\u003c\/span\u003e\u003cbr\u003e\u003cspan\u003eCapacity - 14 Litres\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003eRRP - £119.99 \/ 143.99€ \/ $179.99\u003c\/span\u003e\u003cbr\u003e\u003cbr\u003e\u003cspan\u003e(14 Litre version with dry bag included)\u003c\/span\u003e\u003c\/p\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {46015911788770 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {46015911788770 : parseInt("100"),};
window._RestockRocketConfig.variantsPreorderCount = {46015911788770 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {46015911788770 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {46015911788770 : parseInt(""),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {46015911788770 : null,};
window._RestockRocketConf
ESIo'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't transl
ison
Kinesis
KnogKona
Kranx
Kryptonite
LazerLezyne
Life Systems
Madison
OneUp
creenshot_2024-06-21_at_20.21.13.png?v=1718997714","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.15.png?v=1718997714","\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.18.png?v=1718997715"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.20.49.png?v=1718997711","options":["Size"],"media":[{"alt":null,"id":34094320779490,"position":1,"preview_image":{"aspect_ratio":1.521,"height":1186,"width":1804,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.20.49.png?v=1718997711"},"aspect_ratio":1.521,"height":1186,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.20.49.png?v=1718997711","width":1804},{"alt":null,"id":34094320910562,"position":2,"preview_image":{"aspect_ratio":1.227,"height":1242,"width":1524,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot_2024-06-21_at_20.21.02.png?v=1718997712"},"aspect_ratio":1.227,"height":1242,"media_type":"imag_selector_collection":null,"insert_button_after_selector_index":null,"push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_error":"Permission rejected! Please review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":null,"index_buttons_container":null,"page_bOrange seal
gma Bikes\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003eEDGE stands proudly as a cornerstone of our high-performance gravel bike lineup, handcrafted from Gr9 3AL 2.5 DB titanium to offer unrivalled strength and durability for the ultimate.\u003c\/span\u003e\u003cspan\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cspan\u003e\u003cmeta charset=\"utf-8\"\u003e \u003cbutton class=\"accordion active\"\u003eFRAME SPECIFICATION\u003csvg class=\"icon icon-minus\" aria-hidden=\"true\"\u003e\u003cuse xlink:href=\"#icon-minus\"\u003e\u003c\/use\u003e\u003c\/svg\u003e\u003c\/button\u003e\u003c\/span\u003e\u003c\/p\u003e\n\u003cdiv class=\"panel\"\u003e\n\u003cdiv class=\"bike__tech-spec\"\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cspan\u003eFRAME MATERIAL\u003c\/span\u003e\u003cspan\u003eCustom butted, size specific, grade 9 3Al 2.5V CWSR Ti tube set\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eFRAME FINISH\u003c\/span\u003e\u003cspan\u003eIncluded - hand brushed wit94,43936124174562,43936129941730,43936129974498,43936130007266,43936142393570,43936142426338,43936142459106,43936152060130,43936152092898,43936152125666,43936193118434,43936250429666,43936255803618,43936266682594,43936266715362,43936293978338,43936294011106,43936316424418,43936316457186,43936320880866,43936320913634,43936320946402,43936327041250,43936327074018,43936327106786,43936331661538,43936332349666,43936333103330,43936351224034,43936353714402,43936362889442,43936362922210,43936388153570,43936389333218,43936395526370,43936398508258,43936401522914,43936408568034,43936414400738,43936700727522,43936706101474,43936706134242,43936706167010,43936706199778,43936706232546,43936706265314,43938308587746,43938308653282,43938308718818,43938308751586,43938308784354,43938308817122,43938322612450,43938322645218,43938322677986,43981336051938,43981336084706,43981336117474,43981336150242,43981345587426,43981345620194,43981345652962,43981345685730,43981357580514,43981357613282,43981362462946,43981362495714,43981362528482,4
/li\u003e\n\u003cli\u003e\n\u003cspan\u003eSEAT POST\u003c\/span\u003e\u003cspan\u003e31.6mm or 27.2mm with shim\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eFRONT DERAILLEUR\u003c\/span\u003e\u003cspan\u003e34.9mm band-on\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eHEADSET\u003c\/span\u003e\u003cspan\u003eIntegral ZS44 upper \/ EC44 lower (Chris King Inset 7\/8)\u003c\/span\u003e\n\u003c\/li\u003e\n\u003cli\u003e\n\u003cspan\u003eTYRE SIZE\u003c\/span\u003e\u003cspan\u003eMax. 700c x 47mm w\/o guards\u003c\/span\u003e\n\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c!----\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {45610939089122 : "deny",45610939121890 : "deny",45610939154658 : "deny",45610939187426 : "deny",45610939220194 : "deny",45610939252962 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {45610939089122 : parseInt("11"),45610939121890 : parseInt("111"),45610939154658 : parse316974463,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647,56565020721535,56565020754303,56565020787071],"updated_at":"2025-12-14T12:16:34Z","market_locations_enabled":false,"market_id":13777305826,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2025-12-14T12:19:01Z","shopify_market_id":382140642,"market_locations_enabled":false};
window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"updated_at":"2025-12-14T12:19:01Z","shopify_manfig.variantsShippingText = {45610939089122 : "",45610939121890 : "",45610939154658 : "",45610939187426 : "",45610939220194 : "",45610939252962 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {45610939089122 : null,45610939121890 : null,45610939154658 : null,45610939187426 : null,45610939220194 : null,45610939252962 : null,};
window._RestockRocketConfig.selected_variant_id = 45610939089122;
window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019b1405-52e0-7e89-a6c1-1ac7fea6dd8f/restock-rocket-shopify-410/assets/restockrocket-collection.js'
window._RestockRockg_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":nullanguage enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't translated, applyTranslations will gracefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
// Don't return null - continue using cache even for untranslated locales
}
const updatedAt = new Date(settings.updated_at);
if (isNaN(updatedAt.getTime())) {
console.debug('STOQ - Invalid updated_at date format in settings');
return null;
}
const age = Date.now() - updatedAt.getTime();
if (age ment_text":"I acknowledge and agree to the preorder terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":tru SETTINGS_CACHE_DURATION) {
console.debug('STOQ - settings changed recently, skipping cache');
return null;
}
return settings;
} catch (error) {
console.debug('STOQ - Error checking settings cache:', error);
return null;
}
}
function createRestockRocketContainer() {
const restockRocketContainer = document.createElement('div');
restockRocketContainer.id = 'restock-rocket';
document.body.appendChild(restockRocketContainer);
}
function createRestockRocketScript(scriptUrl) {
const restockRocketScriptElement = document.createElement('script');
restockRocketScriptElement.setAttribute('defer', 'defer');
restockRocketScriptElement.src = scriptUrl;
document.body.appendChild(restockRocketScriptElement);
}
createRestockRocketContainer()
console.debug('STOQ - extension activated')
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings || s.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't translated, applyTranslations will gracefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.has
(!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {}));
delete settings.translations;
return settings;
}
console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`);
const translatedFields = translations[normalizedLocale];
if (translatedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(function(key) {
const value = translatedFields[key];
if (value !== null && value !== undefined && value !== '') {
<
pify.theme.schema_name;
headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version;
headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id;
}
fetch(
`${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`,
{ headers }
)
.then(function(response) {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(function(settings) {
initializeScripts(settings);
})
.catch(function(error) {
// If request failed and we have cached settings (even if expired), use them as fallback
if (cachedSettings) {
console.debug('STOQ - using expired cached settings as fallback');
initializeScripts(cachedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
!settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {}));
delete settings.translations;
return settings;
}
console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`);
const translatedFields = translations[normalizedLocale];
if (translatedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(function(key) {
const value = translatedFields[key