laravel-jstools
Version:
JS tools for building front-side of Laravel applications
211 lines (210 loc) • 7.5 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Modal = void 0;
const laravel_jstools_di_1 = require("laravel-jstools-di");
const ModalUsageEnum_1 = require("./ModalUsageEnum");
const JSToolsAbstractMap_1 = require("../../app/JSToolsAbstractMap");
const ContextTypeEnum_1 = require("../../types/ContextTypeEnum");
class Modal extends laravel_jstools_di_1.Service {
constructor(modalId, modalUsage, modalData, showNoty) {
super();
this.serviceDependsList = [
JSToolsAbstractMap_1.JSToolsAbstractMap.AxiosServiceContract,
JSToolsAbstractMap_1.JSToolsAbstractMap.NotyServiceContract,
];
this.extraSpinners = null;
this.preloadCallback = null;
this.modalId = modalId;
this.modalData = modalData;
this.modalUsage = modalUsage;
this.showNoty = showNoty;
this.form = null;
}
hasPreload() {
return !!this.modalData.preloadData;
}
reset() {
this.modalOverlayHide();
this.modalSubmitSpinnerHide();
this.modalExtraSpinnerHide();
this.modalClearAlerts();
this.modalButtonsEnable();
switch (this.modalUsage) {
case ModalUsageEnum_1.ModalUsageEnum.info:
this.modalSubmitHide();
break;
case ModalUsageEnum_1.ModalUsageEnum.confirm:
this.modalSubmitShow();
break;
case ModalUsageEnum_1.ModalUsageEnum.form:
this.modalSubmitShow();
break;
}
}
getModalData() {
return this.modalData;
}
getForm() {
return this.form;
}
showOverlay() {
this.modalOverlayShow();
}
hideOverlay() {
this.modalOverlayHide();
}
showSubmitSpinner() {
this.modalSubmitSpinnerShow();
}
hideSubmitSpinner() {
this.modalSubmitSpinnerHide();
}
showLoadingSpinner() {
this.modalLoadingSpinnerShow();
}
hideLoadingSpinner() {
this.modalLoadingSpinnerHide();
}
showExtraSpinners() {
this.modalExtraSpinnerShow();
}
hideExtraSpinners() {
this.modalExtraSpinnerHide();
}
enableButtons() {
this.modalButtonsEnable();
}
disableButtons() {
this.modalButtonsDisable();
}
setPreloadCallback(callback) {
this.preloadCallback = callback;
}
show() {
var _a;
this.prepareElements();
this.reset();
this.modalShow();
if (this.hasPreload()) {
if (typeof this.modalData.preloadData !== 'undefined') {
this.send(this.modalData.preloadData, false, {
start: () => {
this.modalSubmitSpinnerShow();
this.modalExtraSpinnerShow();
this.modalButtonsDisable();
this.modalOverlayShow();
this.modalClearAlerts();
},
finish: () => {
this.modalSubmitSpinnerHide();
this.modalExtraSpinnerHide();
this.modalButtonsEnable();
this.modalOverlayHide();
},
success: (data) => {
var _a;
(_a = this.form) === null || _a === void 0 ? void 0 : _a.setInitData(data);
if (this.preloadCallback) {
this.preloadCallback(data);
}
},
});
}
}
else if (typeof this.modalData.initDataCallback !== 'undefined') {
(_a = this.form) === null || _a === void 0 ? void 0 : _a.setInitData(this.modalData.initDataCallback());
}
}
setExtraSpinners(spinnerList) {
this.extraSpinners = spinnerList;
}
send(data, showNoty, callbackList) {
const axiosService = this.getService(JSToolsAbstractMap_1.JSToolsAbstractMap.AxiosServiceContract);
const send = axiosService.send(Object.assign(data, {
headers: {
'X-Requested-With': 'XMLHttpRequest',
},
}), callbackList, showNoty);
send.then((res) => {
if (res.result && !res.data.status) {
this.modalShowAlerts(res.data.errors, ContextTypeEnum_1.ContextTypeEnum.danger);
return;
}
if (!res.result && typeof res.data.status === 'undefined') {
this.modalShowAlerts([res.data], ContextTypeEnum_1.ContextTypeEnum.warning);
}
});
}
hide() {
this.modalHide();
}
onHiddenCallback() {
var _a;
(_a = this.form) === null || _a === void 0 ? void 0 : _a.clear();
}
submit() {
var _a;
switch (this.modalUsage) {
case ModalUsageEnum_1.ModalUsageEnum.info:
break;
case ModalUsageEnum_1.ModalUsageEnum.confirm:
if (typeof this.modalData.submitData !== 'undefined') {
this.send(this.modalData.submitData, this.showNoty, {
start: () => {
this.modalSubmitSpinnerShow();
this.modalExtraSpinnerShow();
this.modalButtonsDisable();
this.modalOverlayShow();
this.modalClearAlerts();
},
finish: () => {
this.modalSubmitSpinnerHide();
this.modalExtraSpinnerHide();
this.modalButtonsEnable();
this.modalOverlayHide();
},
success: (data) => {
this.modalHide();
this.callSubmitCallback();
},
});
return;
}
this.modalHide();
this.callSubmitCallback();
break;
case ModalUsageEnum_1.ModalUsageEnum.form:
(_a = this.form) === null || _a === void 0 ? void 0 : _a.submit();
break;
}
}
callSubmitCallback() {
if (typeof this.modalData.submitCallback !== 'undefined') {
this.modalData.submitCallback();
}
}
setForm(form) {
if (form !== null) {
form.attachToModal(this);
}
this.form = form;
}
prepareElements() {
if (this.modalData.title) {
this.modalSetTitle(this.modalData.title);
}
if (this.modalData.submitText) {
this.modalSetSubmitText(this.modalData.submitText);
}
if (this.modalData.cancelText) {
this.modalSetCancelText(this.modalData.cancelText);
}
if (this.modalData.bodyCaption) {
this.modalSetBodyCaption(this.modalData.bodyCaption);
}
if (this.modalData.bodyText) {
this.modalSetBodyText(this.modalData.bodyText);
}
}
}
exports.Modal = Modal;