Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
import { showLoading } from '../../staticMethods/showLoading.js'
import { swalClasses } from '../classes.js'
import { asPromise, error, hasToPromiseFn, isPromise } from '../utils.js'
import { getDirectChildByClass } from './domUtils.js'
import * as dom from './index.js'
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
export const handleInputOptionsAndValue = (instance, params) => {
if (params.input === 'select' || params.input === 'radio') {
handleInputOptions(instance, params)
} else if (
['text', 'email', 'number', 'tel', 'textarea'].some((i) => i === params.input) &&
(hasToPromiseFn(params.inputValue) || isPromise(params.inputValue))
) {
showLoading(dom.getConfirmButton())
handleInputValue(instance, params)
}
}
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} innerParams
* @returns {SweetAlertInputValue}
*/
export const getInputValue = (instance, innerParams) => {
const input = instance.getInput()
if (!input) {
return null
}
switch (innerParams.input) {
case 'checkbox':
return getCheckboxValue(input)
case 'radio':
return getRadioValue(input)
case 'file':
return getFileValue(input)
default:
return innerParams.inputAutoTrim ? input.value.trim() : input.value
}
}
/**
* @param {HTMLInputElement} input
* @returns {number}
*/
const getCheckboxValue = (input) => (input.checked ? 1 : 0)
/**
* @param {HTMLInputElement} input
* @returns {string | null}
*/
const getRadioValue = (input) => (input.checked ? input.value : null)
/**
* @param {HTMLInputElement} input
* @returns {FileList | File | null}
*/
const getFileValue = (input) =>
input.files && input.files.length ? (input.getAttribute('multiple') !== null ? input.files : input.files[0]) : null
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
const handleInputOptions = (instance, params) => {
const popup = dom.getPopup()
if (!popup) {
return
}
/**
* @param {Record} inputOptions
*/
const processInputOptions = (inputOptions) => {
if (params.input === 'select') {
populateSelectOptions(popup, formatInputOptions(inputOptions), params)
} else if (params.input === 'radio') {
populateRadioOptions(popup, formatInputOptions(inputOptions), params)
}
}
if (hasToPromiseFn(params.inputOptions) || isPromise(params.inputOptions)) {
showLoading(dom.getConfirmButton())
asPromise(params.inputOptions).then((inputOptions) => {
instance.hideLoading()
processInputOptions(inputOptions)
})
} else if (typeof params.inputOptions === 'object') {
processInputOptions(params.inputOptions)
} else {
error(`Unexpected type of inputOptions! Expected object, Map or Promise, got ${typeof params.inputOptions}`)
}
}
/**
* @param {SweetAlert} instance
* @param {SweetAlertOptions} params
*/
const handleInputValue = (instance, params) => {
const input = instance.getInput()
if (!input) {
return
}
dom.hide(input)
asPromise(params.inputValue)
.then((inputValue) => {
input.value = params.input === 'number' ? `${parseFloat(inputValue) || 0}` : `${inputValue}`
dom.show(input)
input.focus()
instance.hideLoading()
})
.catch((err) => {
error(`Error in inputValue promise: ${err}`)
input.value = ''
dom.show(input)
input.focus()
instance.hideLoading()
})
}
/**
* @param {HTMLElement} popup
* @param {InputOptionFlattened[]} inputOptions
* @param {SweetAlertOptions} params
*/
function populateSelectOptions(popup, inputOptions, params) {
const select = getDirectChildByClass(popup, swalClasses.select)
if (!select) {
return
}
/**
* @param {HTMLElement} parent
* @param {string} optionLabel
* @param {string} optionValue
*/
const renderOption = (parent, optionLabel, optionValue) => {
const option = document.createElement('option')
option.value = optionValue
dom.setInnerHtml(option, optionLabel)
option.selected = isSelected(optionValue, params.inputValue)
parent.appendChild(option)
}
inputOptions.forEach((inputOption) => {
const optionValue = inputOption[0]
const optionLabel = inputOption[1]
//