initial commit
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
const selectors = {
|
||||
customerAddresses: '[data-customer-addresses]',
|
||||
addressCountrySelect: '[data-address-country-select]',
|
||||
addressContainer: '[data-address]',
|
||||
toggleAddressButton: 'button[aria-expanded]',
|
||||
cancelAddressButton: 'button[type="reset"]',
|
||||
deleteAddressButton: 'button[data-confirm-message]',
|
||||
};
|
||||
|
||||
const attributes = {
|
||||
expanded: 'aria-expanded',
|
||||
confirmMessage: 'data-confirm-message',
|
||||
};
|
||||
|
||||
class CustomerAddresses {
|
||||
constructor() {
|
||||
this.elements = this._getElements();
|
||||
if (Object.keys(this.elements).length === 0) return;
|
||||
this._setupCountries();
|
||||
this._setupEventListeners();
|
||||
}
|
||||
|
||||
_getElements() {
|
||||
const container = document.querySelector(selectors.customerAddresses);
|
||||
return container
|
||||
? {
|
||||
container,
|
||||
addressContainer: container.querySelector(selectors.addressContainer),
|
||||
toggleButtons: document.querySelectorAll(selectors.toggleAddressButton),
|
||||
cancelButtons: container.querySelectorAll(selectors.cancelAddressButton),
|
||||
deleteButtons: container.querySelectorAll(selectors.deleteAddressButton),
|
||||
countrySelects: container.querySelectorAll(selectors.addressCountrySelect),
|
||||
}
|
||||
: {};
|
||||
}
|
||||
|
||||
_setupCountries() {
|
||||
if (Shopify && Shopify.CountryProvinceSelector) {
|
||||
// eslint-disable-next-line no-new
|
||||
new Shopify.CountryProvinceSelector('AddressCountryNew', 'AddressProvinceNew', {
|
||||
hideElement: 'AddressProvinceContainerNew',
|
||||
});
|
||||
this.elements.countrySelects.forEach((select) => {
|
||||
const formId = select.dataset.formId;
|
||||
// eslint-disable-next-line no-new
|
||||
new Shopify.CountryProvinceSelector(`AddressCountry_${formId}`, `AddressProvince_${formId}`, {
|
||||
hideElement: `AddressProvinceContainer_${formId}`,
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
_setupEventListeners() {
|
||||
this.elements.toggleButtons.forEach((element) => {
|
||||
element.addEventListener('click', this._handleAddEditButtonClick);
|
||||
});
|
||||
this.elements.cancelButtons.forEach((element) => {
|
||||
element.addEventListener('click', this._handleCancelButtonClick);
|
||||
});
|
||||
this.elements.deleteButtons.forEach((element) => {
|
||||
element.addEventListener('click', this._handleDeleteButtonClick);
|
||||
});
|
||||
}
|
||||
|
||||
_toggleExpanded(target) {
|
||||
target.setAttribute(attributes.expanded, (target.getAttribute(attributes.expanded) === 'false').toString());
|
||||
}
|
||||
|
||||
_handleAddEditButtonClick = ({ currentTarget }) => {
|
||||
this._toggleExpanded(currentTarget);
|
||||
};
|
||||
|
||||
_handleCancelButtonClick = ({ currentTarget }) => {
|
||||
this._toggleExpanded(currentTarget.closest(selectors.addressContainer).querySelector(`[${attributes.expanded}]`));
|
||||
};
|
||||
|
||||
_handleDeleteButtonClick = ({ currentTarget }) => {
|
||||
// eslint-disable-next-line no-alert
|
||||
if (confirm(currentTarget.getAttribute(attributes.confirmMessage))) {
|
||||
Shopify.postLink(currentTarget.dataset.target, {
|
||||
parameters: { _method: 'delete' },
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user