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 : 8.99 },
get compare() { return this.selected ? this.selected.compare : null },
get stock() { return this.selected ? this.selected.stock : 78 },
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
Training Gloves
Weight Lifting Hooks
Training Gloves
Including VAT
Only left — order soon
✓
Size:
Standard
Material:
Nylon/Steel
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
Steel weight-lifting hooks with padded wrist straps — grip support for the heaviest pulls.
SKU
PRD-B097F6
Weight
0.5 kg
Barcode
4738870214659
Colour
Black, Black Red
Size
Standard
Material
Nylon/Steel
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