jQuery(document).ready(function ($) {
console.log("Loaded Custom JS");
$(function () {
let filesArray = [];
function updateInputField(input, files) {
input.value = "";
const dataTransfer = new DataTransfer();
files.forEach((file) => dataTransfer.items.add(file));
input.files = dataTransfer.files;
}
function displayImages(input, placeToInsertImagePreview) {
const gallery = $(placeToInsertImagePreview);
gallery.empty();
filesArray.forEach((file, index) => {
const reader = new FileReader();
const currentIndex = index;
reader.onload = function (event) {
console.log("index=" + currentIndex);
const wrapper = $("<div>")
.addClass("image-wrapper")
.attr("data-flag", currentIndex);
$("<img>")
.attr("src", event.target.result)
.attr("height", "100px")
.attr("width", "100px")
.appendTo(wrapper);
$("<button>")
.addClass("btn-close")
.text("X")
.on("click", function () {
filesArray.splice(currentIndex, 1);
$(".featured_image_key").val("");
updateInputField(input, filesArray);
displayImages(input, placeToInsertImagePreview);
})
.appendTo(wrapper);
wrapper.appendTo(gallery);
};
reader.readAsDataURL(file);
});
}
$("#gallery-photo-add").on("change", function () {
filesArray = Array.from(this.files);
console.log(filesArray);
if (filesArray.length > 5) {
Swal.fire({
text: "Please Select only 5 images",
title: "Error",
icon: "error",
});
filesArray = [];
this.value = "";
return;
}
displayImages(this, "#gallery");
});
});
$(document).on("click", ".image-wrapper", function () {
$(".image-wrapper").removeClass("addBorder");
$(this).addClass("addBorder");
var flag = $(this).data("flag");
$(".featured_image_key").val("").val(flag);
});
$("#formData").on("submit", function (e) {
e.preventDefault();
console.log("Submitted");
var formData = new FormData(this);
formData.append("action", "create_wc_product");
$.ajax({
url: ajaxObject.ajaxUrl,
type: "POST",
data: formData,
processData: false,
contentType: false,
success: function (response) {
if (response.success) {
$(".alert")
.removeClass("alert-danger")
.addClass("alert-success")
.html("")
.html(response.data.message)
.show();
$("#formData")[0].reset();
$(".gallery").empty();
setTimeout(function () {
window.location.href = "http://localhost/product/shop/";
}, 5000);
} else {
$(".alert")
.removeClass("alert-success")
.addClass("alert-danger")
.html("")
.html(response.data.message);
}
$("html, body").animate({ scrollTop: 0 }, "fast");
},
error: function (xhr, error, status) {
alert("Ajax Error:" + error);
$("#loader").hide();
},
});
});
$("#loader").hide();
$(function () {
var loaderTimeout;
var MIN_LOADER_TIME = 2000;
$(document).ajaxStart(function () {
if (loaderTimeout) {
clearTimeout(loaderTimeout);
}
$("#loader").show();
loaderTimeout = setTimeout(function () {
$("#loader").hide();
}, MIN_LOADER_TIME);
});
$(document).ajaxStop(function () {
$("#loader").hide();
});
$(document).ajaxError(function () {
$("#loader").hide();
});
});
});
.gallery {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.image-wrapper {
position: relative;
display: inline-block;
}
.btn-close {
position: absolute;
top: 0;
right: 0;
background: red;
color: white;
border: none;
cursor: pointer;
}
img {
height: 100px;
width: 100px;
}
.addBorder {
border: 2px solid rgb(14, 177, 227);
}
#loader {
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
z-index: 9999;
background: url("//upload.wikimedia.org/wikipedia/commons/thumb/e/e5/Phi_fenomeni.gif/50px-Phi_fenomeni.gif")
50% 50% no-repeat rgb(249, 249, 249);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<div id="loader-container">
<div id="loader">
</div>
</div>
<div class="container w-100">
<div class="row">
<div class="col d-flex justify-content-center align-items-center">
<div class="card shadow-lg w-50 bg-light">
<div class="card-header ">
<h4 class="text-center">Add Product Images</h4>
</div>
<div class="card-body">
<div class="alert my-2"></div>
<form id="formData">
<input type="hidden" class="featured_image_key" name="featured_image_key">
<div class="form-group m-3">
<label for="productImages">Product Images</label>
<input type="file" name="productImages[]" id="gallery-photo-add" class="form-control" placeholder="Select Product Images" multiple>
</div>
<div id="gallery"></div>
<div class=" d-flex justify-content-center align-items-center">
<button type="submit" class="btn btn-outline-primary">Add Product</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>