v.attrs['Colour'] === wanted && v.stock > 0)
?? this.variants.find(v => v.attrs['Colour'] === wanted)
: null;
start ??= this.variants.find(v => v.stock > 0) ?? this.variants[0];
this.apply(start);
},
apply(variant) {
this.variantId = variant.id;
this.groups.forEach(g => { if (variant.attrs[g.name] !== undefined) this.sel[g.name] = variant.attrs[g.name] });
this.activeImage = 0;
},
choose(group, value) {
this.sel[group] = value;
// Exact: a variant wearing every current selection it carries.
let match = this.variants.find(v =>
this.groups.every(g => !this.sel[g.name] || v.attrs[g.name] === undefined || v.attrs[g.name] === this.sel[g.name])
&& v.attrs[group] === value);
// Loose: best-scoring variant that at least wears the value
// just clicked (sparse colour × size grids are the norm here).
match ??= this.variants
.filter(v => v.attrs[group] === value)
.sort((a, b) => (this.score(b) - this.score(a)) || (b.stock > 0) - (a.stock > 0))[0];
if (match) this.apply(match);
},
score(v) {
return this.groups.reduce((n, g) => n + (v.attrs[g.name] === this.sel[g.name] ? 1 : 0), 0)
+ (v.stock > 0 ? 0.5 : 0);
},
get images() { return this.previewImages },
get price() { return this.selected ? this.selected.price : 13.99 },
get compare() { return this.selected ? this.selected.compare : null },
get stock() { return this.selected ? this.selected.stock : 35 },
get needsVariant() { return this.variants.length > 0 && !this.variantId },
get previewImages() {
if (this.selected && this.selected.images.length) return this.selected.images;
// Colour chosen but size pending: preview that colour's shots.
for (const g of this.groups.filter(g => g.isColour)) {
if (this.sel[g.name]) {
const match = this.variants.find(v => v.attrs[g.name] === this.sel[g.name] && v.images.length);
if (match) return match.images;
// A colour is chosen and NOTHING depicts it — 138 of
// 4AsGlobals' variants have no image of their own. The
// product's own shots are honest here; another
// colour's are not, and on screen the two are
// indistinguishable. Show those, or show none.
return this.productImages;
}
}
if (this.productImages.length) return this.productImages;
// Nothing chosen yet, so no colour is being claimed: open on
// the first variant that has a picture (the fallback the cards
// use server-side).
return this.variants.find(v => v.images.length)?.images ?? [];
},
qty: 1,
busy: false,
lightbox: false,
lightboxIndex: 0,
get allImages() {
const seen = new Set();
return [...this.productImages, ...this.variants.flatMap(v => v.images)]
.filter(img => !seen.has(img.large) && seen.add(img.large));
},
openLightbox() {
if (! this.allImages.length) return;
const current = this.images[this.activeImage]?.large;
const at = this.allImages.findIndex(img => img.large === current);
this.lightboxIndex = at >= 0 ? at : 0;
this.lightbox = true;
},
nextImage() { if (this.allImages.length) this.lightboxIndex = (this.lightboxIndex + 1) % this.allImages.length },
prevImage() { if (this.allImages.length) this.lightboxIndex = (this.lightboxIndex - 1 + this.allImages.length) % this.allImages.length },
pick(id) {
this.variantId = this.variantId === id ? null : id;
this.activeImage = 0;
},
}"
@cart-updated.window="busy = false" @cart-add-failed.window="busy = false">
Home
Accessories & Gym Kit
Protective Gear
MMA Shin Pad Cotton
Protective Gear
Including VAT
Only left — order soon
✓
Material:
Cotton
Dispatched fast from our UK warehouse — same day where possible.
Fast UK dispatch
Secure checkout
Easy returns
SKU
Picked, packed and dispatched from our own UK warehouse.
Description
Details
Delivery & returns
Introducing our MMA Shin Pads: Your essential defense for intense training and sparring sessions. Crafted with high-impact foam padding and durable outer materials, these shin pads offer superior protection against strikes and impacts during MMA training. Their ergonomic design provides a comfortable and secure fit, ensuring full range of motion and flexibility. Whether you’re practicing kicks, checking leg kicks, or grappling, our MMA Shin Pads keep you safe and focused, allowing you to train with confidence. Elevate your performance in the ring with our premium shin pads designed specifically for the demands of MMA.
SKU
PRD-575B9C
Weight
0.5 kg
Barcode
1895863337740
Size
L, S, M
Colour
Red, Black
Material
Cotton
Orders are picked, packed and dispatched from our UK warehouse — same day where possible.
Delivery options and prices are shown at checkout.
Track any order any time at Track my order .
Changed your mind? You can request a return from your account within 30 days of delivery.
Reviews
Write a review
No reviews yet — be the first.
Questions & Answers
Ask a question