let sliderData;
const sliderContainer = document.querySelector(".lp-01-teacher-mask");
const teacherUrl =
"https://services.shvasa.com/api/counselling/consultant/teacher";
// To get all teachers data
const fetchDetails = async function (url) {
try {
const response = await fetch(url, {
method: "GET",
});
const data = await response.json();
sliderData = data.body;
console.log(data);
return data;
} catch (error) {
console.error("There is some error while fetching slider data", error);
throw error;
}
};
// To create a single filter array
const constructArray = function () {
const dataWithCertification = sliderData.filter(
(data) => data?.certification.length > 0
);
const dataWithoutCertification = sliderData.filter(
(data) => data?.certification.length === 0
);
return dataWithCertification.concat(dataWithoutCertification);
};
// Function returns filtered array
const generateSingleArray = async function () {
await fetchDetails(teacherUrl);
const mergedArray = constructArray();
return mergedArray;
};
// Initialize Webflow slider after adding slides
const initializeWebflowSlider = function () {
Webflow.require("slider").redraw();
};
const forEachArray = async function (array) {
array.forEach((data, i, arr) => {
if (data?.name === "Jiraiya Sensei") return;
const expertise = data.style[0].toLowerCase();
const expertiseArr = expertise.split("_");
//console.log(expertiseArr);
const expertiseStr = expertiseArr
.map((word) => {
//const firstLetter = word.at(0);
//const firstLetterCap = firstLetter.toUpperCase();
const updatedWord = word.replace(word.at(0), word.at(0).toUpperCase());
return updatedWord;
})
.join(" ");
console.log("%c output", "color:red; font-weight:bold ", expertiseStr);
const html = `<div class="lp-01-teacher-slide w-slide" aria-label="${
i + 1
} of ${arr.length}" role="group"
style="transform: translateX(0px); opacity: 1; transition: transform 500ms ease 0s;">
<div class="lp-01-teacher-slider-components-wrapper">
<div class="lp-teacher-slider-image-wrapper"><img
src=${data?.imageURL?.thumbNailImages}
loading="lazy" alt="" class="lp-teacher-slider-image"></div>
<div class="lp-teachers-text-wrapper">
<div class="lp-01-teacher-name-designation-wrapper">
<div class="lp-01-teacher-name-wrapper">
<div class="text-1">${data?.name}</div>
<div class="lp-01-para-1">${
data?.certification[0] || ""
}</div>
</div>
</div>
<div class="lp-01-teacher-rating-2">
<div class="students-coached">8 Years of experience</div><img
src="https://assets-global.website-files.com/60e7f6b5ecd3ae8e0c125cd7/6596dd631273477ad5595a25_%E2%AD%90.webp"
loading="lazy" alt="" class="lp-01-teacher-rating-star">
<div>${data.avgRating} stars</div>
</div>
<div class="lp-01-teacher-slide-speciality-text-wrappper">
<div class="students-coached">8 Years of experience</div>
<div>${expertiseStr}</div>
</div>
<div class="lp-01-teacher-slide-bottom-text-wrappper">
<div class="students-coached">8 Years of experience</div>
<div>${data.yearsOfExp} Years of experience</div>
</div>
</div>
</div>
</div>`;
sliderContainer.insertAdjacentHTML("afterbegin", html);
});
};
const generateSlides = async () => {
try {
// Clear the container before inserting new content
sliderContainer.innerHTML = "";
const mergedArray = await generateSingleArray();
await forEachArray(mergedArray);
// Set a timeout to ensure that the slides are added before initializing the slider
setTimeout(initializeWebflowSlider, 1000);
} catch (error) {
console.error("Error in getting result:", error);
}
};
generateSlides();
// Target element you want to observe
const targetElement = document.getElementById('teacher-slides');
// Options for the Intersection Observer
const options = {
root: null, // Use the viewport as the root
rootMargin: '0px', // No margin
threshold: 0.5, // Trigger when 50% of the element is visible
};
// Callback function to be executed when the intersection changes
const callback = (entries, observer) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// Your code to be triggered when the section is about to be in view
console.log('Section is about to be in view');
window.dispatchEvent(new Event("resize"));
// Remove the observer if you only want to trigger it once
//observer.unobserve(entry.target);
}
});
};
// Create an Intersection Observer with the callback and options
const observer = new IntersectionObserver(callback, options);
// Start observing the target element
observer.observe(targetElement);