Skip to content

Commit

Permalink
Merge pull request #255 from SizeMeCom/add-size-selector-mfn
Browse files Browse the repository at this point in the history
Add new size selector swatches-list-mfn
  • Loading branch information
nomasi authored Dec 5, 2023
2 parents 5df43be + bff752f commit 5cfb691
Showing 1 changed file with 67 additions and 0 deletions.
67 changes: 67 additions & 0 deletions src/api/SizeSelector.js
Original file line number Diff line number Diff line change
Expand Up @@ -566,6 +566,69 @@ class SwatchesListButtonCGKit extends AbstractSelect {
};
}

class SwatchesListMFN extends AbstractSelect {
constructor(element) {
super(element, { event: "click", useCapture: true });

this.allowEmptySizeSelection = false;
this.getSize = (e) => {
const selected = e.target.closest("li");
return selected?.querySelector("a").dataset.id ?? "";
};

this.clearSelection = () => {
const selected = element.querySelector("li.active");
if (selected && selected.classList) {
selected.classList.remove("active");
}
};

const options = element.querySelectorAll("li");
const mkSelectFn = (option) => () => option.click();
for (let i = 0; i < options.length; i++) {
const option = options.item(i);
const sizeValue = option.querySelector("a").dataset.id;
const textSpan = option.querySelector("a").innerText;
if (textSpan) {
this.selectors[sizeValue] = mkSelectFn(option);
this.sizeMapper.push([sizeValue, textSpan.trim()]);
}
}

this.getSelectedSize = () => {
const selected = element.querySelector("li.active");
if (selected) {
return selected.querySelector("a").dataset.id;
} else {
return "";
}
};
}

clone = () => {
if (this.el) {
const clone = this.el.cloneNode(true);
const clearSelected = () => {
clone.querySelector("li.active").classList.remove("active");
};

const links = clone.querySelectorAll("li");
const mkEventListener = (link) => (e) => {
clearSelected();
link.classList.add("active");
this.setSelected(e.currentTarget.querySelector("a").dataset.id);
};
for (let i = 0; i < links.length; i++) {
const link = links.item(i);
link.addEventListener("click", mkEventListener(link), true);
}
return clone;
} else {
return document.createElement("div");
}
};
}

const initSizeSelector = (selectSizeFn) => {
selectSize = (size) => {
selectSizeFn(size);
Expand Down Expand Up @@ -609,6 +672,10 @@ const initSizeSelector = (selectSizeFn) => {
selector = getInstance(SwatchesListButtonCGKit);
break;

case "swatches-list-mfn":
selector = getInstance(SwatchesListMFN);
break;

default:
selector = getInstance(DefaultSelect);
}
Expand Down

0 comments on commit 5cfb691

Please sign in to comment.