236 lines
8.8 KiB
JavaScript
236 lines
8.8 KiB
JavaScript
|
|
import BusinessObjects from "../lib/business_objects.js";
|
|
import Events from "../lib/events.js";
|
|
import LocalStorage from "../lib/local_storage.js";
|
|
import API from "../api.js";
|
|
import DOM from "../dom.js";
|
|
|
|
import OverlayConfirm from "../components/common/temporary/overlay_confirm.js";
|
|
import OverlayError from "../components/common/temporary/overlay_error.js";
|
|
|
|
export default class BasePage {
|
|
constructor(router) {
|
|
if (!router) {
|
|
throw new Error("Router is required");
|
|
}
|
|
else {
|
|
console.log("initialising with router: ", router);
|
|
}
|
|
this.router = router;
|
|
this.title = titlePageCurrent;
|
|
// this.hash = hashPageCurrent;
|
|
if (this.constructor === BasePage) {
|
|
throw new Error("Cannot instantiate abstract class");
|
|
}
|
|
|
|
if (!this.constructor.hash) {
|
|
throw new Error(`Class ${this.constructor.name} must have a static hash attribute.`);
|
|
}
|
|
}
|
|
|
|
initialize() {
|
|
throw new Error("Method 'initialize()' must be implemented.");
|
|
}
|
|
|
|
sharedInitialize() {
|
|
this.logInitialisation();
|
|
this.hookupCommonElements();
|
|
}
|
|
|
|
logInitialisation() {
|
|
console.log('Initializing ' + this.title + ' page');
|
|
}
|
|
|
|
hookupCommonElements() {
|
|
// hookupVideos();
|
|
this.hookupNavigation();
|
|
this.hookupImagesLogo();
|
|
this.hookupOverlays();
|
|
}
|
|
|
|
hookupNavigation() {
|
|
/* Can be removed: */
|
|
let overlayHamburger = document.querySelector(idOverlayHamburger);
|
|
let hamburgerOptions = overlayHamburger.querySelectorAll('div.' + flagRow);
|
|
let countOptions = hamburgerOptions.length;
|
|
// console.log('count nav options: ', countOptions);
|
|
// overlayHamburger.css('height', (countOptions * 27) + 'px');
|
|
/* end of can be removed */
|
|
|
|
this.hookupEventHandler("click", idButtonHamburger, (event, element) => {
|
|
let overlayHamburger = document.querySelector(idOverlayHamburger);
|
|
if (overlayHamburger.classList.contains(flagCollapsed)) {
|
|
overlayHamburger.classList.remove(flagCollapsed);
|
|
overlayHamburger.classList.add(flagExpanded);
|
|
} else {
|
|
overlayHamburger.classList.remove(flagExpanded);
|
|
overlayHamburger.classList.add(flagCollapsed);
|
|
}
|
|
// overlayHamburger.classList.add(flagInitialised);
|
|
});
|
|
|
|
this.hookupButtonsNavHome();
|
|
this.hookupButtonsNavServices();
|
|
this.hookupButtonsNavContact();
|
|
this.hookupButtonsNavUserAccount();
|
|
this.hookupButtonsNavUserLogout();
|
|
this.hookupButtonsNavUserLogin();
|
|
this.hookupButtonsNavStoreHome();
|
|
this.hookupButtonsNavStoreManufacturingPurchaseOrders();
|
|
this.hookupButtonsNavStoreProductPermutations();
|
|
this.hookupButtonsNavStoreStockItems();
|
|
this.hookupButtonsNavStoreSuppliers();
|
|
this.hookupButtonsNavStoreSupplierPurchaseOrders();
|
|
this.hookupButtonsNavAdminHome();
|
|
}
|
|
hookupEventHandler(eventType, selector, callback) {
|
|
Events.initialiseEventHandler(selector, flagInitialised, (element) => {
|
|
element.addEventListener(eventType, (event) => {
|
|
event.stopPropagation();
|
|
callback(event, element);
|
|
});
|
|
});
|
|
}
|
|
hookupButtonsNavHome() {
|
|
this.hookupButtonsNav('.' + flagNavHome, hashPageHome);
|
|
}
|
|
hookupButtonsNav(buttonSelector, hashPageNav) {
|
|
this.hookupEventHandler("click", buttonSelector, (event, button) => {
|
|
this.router.navigateToHash(hashPageNav);
|
|
});
|
|
}
|
|
hookupButtonsNavServices() {
|
|
this.hookupButtonsNav('.' + flagNavServices, hashPageServices);
|
|
}
|
|
hookupButtonsNavContact() {
|
|
this.hookupButtonsNav('.' + flagNavContact, hashPageContact);
|
|
}
|
|
hookupButtonsNavUserAccount() {
|
|
this.hookupButtonsNav('.' + flagNavUserAccount, hashPageUserAccount);
|
|
}
|
|
hookupButtonsNavUserLogout() {
|
|
this.hookupButtonsNav('.' + flagNavUserLogout, hashPageUserLogout);
|
|
}
|
|
hookupButtonsNavUserLogin() {
|
|
this.hookupEventHandler("click", '.' + flagNavUserLogin, (event, navigator) => {
|
|
event.stopPropagation();
|
|
// this.router.navigateToHash(hashPageUserLogin);
|
|
/*
|
|
let dataRequest = {};
|
|
dataRequest[flagCallback] = hashPageCurrent;
|
|
console.log('sending data to user login controller: ');
|
|
console.log(dataRequest);
|
|
*/
|
|
// let page = this;
|
|
API.loginUser()
|
|
.then((response) => {
|
|
if (response.Success) {
|
|
this.router.navigateToUrl(response[flagCallback], null, false); // window.app.
|
|
} else {
|
|
DOM.alertError("Error", response.Message);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
hookupButtonsNavStoreHome() {
|
|
this.hookupButtonsNav('.' + flagNavStoreHome, hashPageStoreHome);
|
|
}
|
|
hookupButtonsNavStoreManufacturingPurchaseOrders() {
|
|
this.hookupButtonsNav('.' + flagNavStoreManufacturingPurchaseOrders, hashPageStoreManufacturingPurchaseOrders);
|
|
}
|
|
hookupButtonsNavStoreProductCategories() {
|
|
this.hookupButtonsNav('.' + flagNavStoreProductCategories, hashPageStoreProductCategories);
|
|
}
|
|
hookupButtonsNavStoreProducts() {
|
|
this.hookupButtonsNav('.' + flagNavStoreProducts, hashPageStoreProducts);
|
|
}
|
|
hookupButtonsNavStoreProductPermutations() {
|
|
this.hookupButtonsNav('.' + flagNavStoreProductPermutations, hashPageStoreProductPermutations);
|
|
}
|
|
hookupButtonsNavStoreProductPrices() {
|
|
this.hookupButtonsNav('.' + flagNavStoreProductPrices, hashPageStoreProductPrices);
|
|
}
|
|
hookupButtonsNavStoreProductVariations() {
|
|
this.hookupButtonsNav('.' + flagNavStoreProductVariations, hashPageStoreProductVariations);
|
|
}
|
|
hookupButtonsNavStoreStockItems() {
|
|
this.hookupButtonsNav('.' + flagNavStoreStockItems, hashPageStoreStockItems);
|
|
}
|
|
hookupButtonsNavAdminHome() {
|
|
this.hookupButtonsNav('.' + flagNavAdminHome, hashPageAdminHome);
|
|
}
|
|
hookupButtonsNavStoreSuppliers() {
|
|
this.hookupButtonsNav('.' + flagNavStoreSuppliers, hashPageStoreSuppliers);
|
|
}
|
|
hookupButtonsNavStoreSupplierPurchaseOrders() {
|
|
this.hookupButtonsNav('.' + flagNavStoreSupplierPurchaseOrders, hashPageStoreSupplierPurchaseOrders);
|
|
}
|
|
|
|
hookupImagesLogo() {
|
|
this.hookupButtonsNav("img." + flagImageLogo, hashPageHome);
|
|
}
|
|
|
|
hookupOverlays() {
|
|
this.hookupOverlayFromId(idOverlayConfirm);
|
|
this.hookupOverlayFromId(idOverlayError);
|
|
}
|
|
|
|
hookupOverlayFromId(idOverlay) {
|
|
Events.initialiseEventHandler(idOverlay, flagInitialised, (overlay) => {
|
|
overlay.querySelector('button.' + flagCancel).addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
overlay.css('display', 'none');
|
|
});
|
|
});
|
|
}
|
|
|
|
|
|
hookupButtonSave() {
|
|
Events.initialiseEventHandler('form.' + flagFilter + ' button.' + flagSave, flagInitialised, (button) => {
|
|
button.addEventListener("click", (event) => {
|
|
event.stopPropagation();
|
|
console.log('saving page: ', this.title);
|
|
OverlayConfirm.show();
|
|
});
|
|
// button.classList.add(flagCollapsed);
|
|
});
|
|
}
|
|
|
|
hookupVideos() {
|
|
Events.initialiseEventHandler('video', flagInitialised, (video) => {
|
|
video.addEventListener("mouseover", videoPlay(video));
|
|
video.addEventListener("mouseout", videoPause(video));
|
|
});
|
|
}
|
|
|
|
leave() {
|
|
console.log('Leaving ' + this.title + ' page');
|
|
if (this.constructor === BasePage) {
|
|
throw new Error("Must implement leave() method.");
|
|
}
|
|
}
|
|
setLocalStoragePage(dataPage) {
|
|
LocalStorage.setLocalStorage(this.hash, dataPage);
|
|
}
|
|
getLocalStoragePage() {
|
|
return LocalStorage.getLocalStorage(this.hash);
|
|
}
|
|
|
|
toggleShowButtonsSaveCancel(show) { // , buttonSave = null, buttonCancel = null
|
|
let buttonSave = document.querySelector('form.' + flagFilter + ' button.' + flagSave);
|
|
let buttonCancel = document.querySelector('form.' + flagFilter + ' button.' + flagCancel);
|
|
if (show) {
|
|
buttonCancel.classList.remove(flagCollapsed);
|
|
buttonSave.classList.remove(flagCollapsed);
|
|
} else {
|
|
buttonCancel.classList.add(flagCollapsed);
|
|
buttonSave.classList.add(flagCollapsed);
|
|
}
|
|
}
|
|
|
|
static isDirtyFilter(filter) {
|
|
let isDirty = DOM.updateAndCheckIsElementDirty(filter);
|
|
if (isDirty) document.querySelectorAll(idTableMain + ' tbody tr').remove();
|
|
return isDirty;
|
|
}
|
|
} |