generated from dwd/boilarplate-astro-tailwind
fix-seo done for all pages
parent
b528567844
commit
7153397800
4
env.txt
4
env.txt
|
@ -1,2 +1,2 @@
|
||||||
PUBLIC_API_KEY=1234567890abcdef
|
PUBLIC_BUZZ_ONE_BASE_URL=https://beanstalkedu.in/api/one/v1/
|
||||||
PUBLIC_SECRET_KEY=my-secret-key
|
PUBLIC_BUZZ_BASE_URL=https://beanstalkedu.in/api/
|
|
@ -9864,8 +9864,6 @@
|
||||||
},
|
},
|
||||||
"node_modules/npm/node_modules/cross-spawn/node_modules/which": {
|
"node_modules/npm/node_modules/cross-spawn/node_modules/which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
||||||
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
|
||||||
"inBundle": true,
|
"inBundle": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/guide-to-preschool-assessment-tools</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/summer-camp-activities-for-preschool</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/first-day-preschool-activities-ideas</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/lesson-plan-for-preschool-a-complete-guide</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/benefits-of-preschool-learning-games-for-early-education</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/preschool-online-learning-games-kits-apps-worksheets</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/seamless-scalability-akadmy-empowering-early-education</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/ai-tools-for-teachers</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/what-should-be-included-in-a-preschool-report-card</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/ideas-of-worksheets-for-preschool</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/power-of-early-learning-why-preschool-education-is-important</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/how-do-classroom-management-tools-help-educators</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/anecdotal-record-a-guide-for-early-childhood-educators</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/blogs/preschool-activity-plans-that-make-learning-fun</loc>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/learning-solutions-for-preschools</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/preschool-management-solutions</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/pricing/akadmy-platform-pricing</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/pricing/akadmy-product-pricing</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/interakto-coding-worksheets</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/term-and-conditions</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/contact-us</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/purchase/cart</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/about-us</loc>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
|
@ -0,0 +1,197 @@
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/home_banner.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Home_TB.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Home_Interakto.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Home_Toddler.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/home_platform.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/home_platform2.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/interakto-coding-section3-3.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Next-Gen-Tech.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Home_parent.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Home_educator.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Home_learner.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/contact.svg</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/akademy_Logo.png</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/prime.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/specific.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/augmented.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/worksheet_4.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/worksheet_1.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/worksheet_2.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/worksheet_3.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/ReportCard.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Resources_CurriculumFocus.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Co_Curriculum.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/contact.svg</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto_Understanding_world.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/interakto_literacy.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto_math.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto_Celebrations.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto_Thinking.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto_coding.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Problem_Solving.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto_Perseverance.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/earth.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Fruits.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/shaps.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Letter_B.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/InteraktoCodingWithoutBG.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/InteraktoRobotics.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Family.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/babies_child.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/food.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/home.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/outside.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/animal.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Friends.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Class.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/AI-Attendance.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Buzzboard.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/observation.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Games.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/family-comunications.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Academic-Report.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/family-comunications.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Magic-Workshetets.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Academic-Report.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/home_platform.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto_Coding_img.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Data-driven_Decision-making.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/developmental_Insights.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/connecting_with_Parents.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/ai_powered.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Captivating_Worksheets.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Interakto.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/TeenyBeans.webp</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/assets/Toddlers.webp</loc>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/digital-preschool-curriculum/</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/interactive-learning-resources-for-preschool</loc>
|
||||||
|
</url>
|
||||||
|
<url>
|
||||||
|
<loc>https://akadmyapp.com/mother-toddler-program</loc>
|
||||||
|
</url>
|
||||||
|
</urlset>
|
|
@ -0,0 +1,4 @@
|
||||||
|
User-agent: *
|
||||||
|
Allow: /
|
||||||
|
Disallow: /_DIZ_ADMIN/
|
||||||
|
Sitemap: https://akadmyapp.com/sitemap.xml
|
|
@ -0,0 +1,14 @@
|
||||||
|
<sitemapindex xmlns="http://www.google.com/schemas/sitemap/0.84">
|
||||||
|
<sitemap>
|
||||||
|
<loc>https://akadmyapp.com/products-sitemap.xml</loc>
|
||||||
|
</sitemap>
|
||||||
|
<sitemap>
|
||||||
|
<loc>https://akadmyapp.com/general-sitemap.xml</loc>
|
||||||
|
</sitemap>
|
||||||
|
<sitemap>
|
||||||
|
<loc>https://akadmyapp.com/images-sitemap.xml</loc>
|
||||||
|
</sitemap>
|
||||||
|
<sitemap>
|
||||||
|
<loc>https://akadmyapp.com/blogs-sitemap.xml</loc>
|
||||||
|
</sitemap>
|
||||||
|
</sitemapindex>
|
|
@ -30,9 +30,16 @@ const Blog = (props) => {
|
||||||
// }, [slug]);
|
// }, [slug]);
|
||||||
|
|
||||||
// blog
|
// blog
|
||||||
const newSchema = props.blog && props.blog.schema && props.blog?.schema.replaceAll("\n", "");
|
const newSchema =
|
||||||
const newSchema2 = props.blog && props.blog.schema2 && props.blog?.schema2.replaceAll("\n", "");
|
props.blog && props.blog.schema && props.blog?.schema.replaceAll("\n", "");
|
||||||
const newSchema3 = props.blog && props.blog.schema3 && props.blog?.schema3.replaceAll("\n", "");
|
const newSchema2 =
|
||||||
|
props.blog &&
|
||||||
|
props.blog.schema2 &&
|
||||||
|
props.blog?.schema2.replaceAll("\n", "");
|
||||||
|
const newSchema3 =
|
||||||
|
props.blog &&
|
||||||
|
props.blog.schema3 &&
|
||||||
|
props.blog?.schema3.replaceAll("\n", "");
|
||||||
|
|
||||||
// console.log("blogUrl", `https://akadmyapp.com${pathname}`);
|
// console.log("blogUrl", `https://akadmyapp.com${pathname}`);
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
import { TOKEN_NAME } from "../utils/constants";
|
import { TOKEN_NAME } from "../utils/constants";
|
||||||
|
|
||||||
export const API_BASE_BUZZONE = import.meta.env.VITE_BUZZ_ONE_BASE_URL;
|
export const API_BASE_BUZZONE = import.meta.env.PUBLIC_BUZZ_ONE_BASE_URL;
|
||||||
export const API_BASE_BUZZ = import.meta.env.VITE_BUZZ_BASE_URL;
|
export const API_BASE_BUZZ = import.meta.env.PUBLIC_BUZZ_BASE_URL;
|
||||||
|
|
||||||
export const AUTH_TOKEN = () => localStorage.getItem(TOKEN_NAME);
|
export const AUTH_TOKEN = () => localStorage.getItem(TOKEN_NAME);
|
||||||
export const SCHOOL_ID = () => localStorage.getItem("SCHOOL_ID");
|
export const SCHOOL_ID = () => localStorage.getItem("SCHOOL_ID");
|
||||||
|
|
||||||
console.log('TestENV', import.meta.env.PUBLIC_API_KEY);
|
console.log("TestENV", import.meta.env.PUBLIC_BUZZ_ONE_BASE_URL);
|
||||||
console.log('TestENV', import.meta.env.PUBLIC_SECRET_KEY);
|
console.log("TestENV", import.meta.env.PUBLIC_BUZZ_BASE_URL);
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import React, { useMemo, useState } from "react";
|
import React, { useEffect, useMemo, useState } from "react";
|
||||||
|
|
||||||
import ArrowForwardOutlinedIcon from "@mui/icons-material/ArrowForwardOutlined";
|
import ArrowForwardOutlinedIcon from "@mui/icons-material/ArrowForwardOutlined";
|
||||||
import ClearIcon from "@mui/icons-material/Clear";
|
import ClearIcon from "@mui/icons-material/Clear";
|
||||||
|
@ -11,240 +11,259 @@ import ProductCard from "../components/ProductCard/ProductCard";
|
||||||
|
|
||||||
import { useDispatch, useSelector } from "react-redux";
|
import { useDispatch, useSelector } from "react-redux";
|
||||||
import { toast } from "react-toastify";
|
import { toast } from "react-toastify";
|
||||||
import { removeItemFromCart, updatePurchase, validateCoupon } from "../../redux/purchaseSlice";
|
import {
|
||||||
|
getPurchaseDetails,
|
||||||
|
removeItemFromCart,
|
||||||
|
updatePurchase,
|
||||||
|
validateCoupon,
|
||||||
|
} from "../../redux/purchaseSlice";
|
||||||
import { getFormattedCurrency } from "../../utils";
|
import { getFormattedCurrency } from "../../utils";
|
||||||
import style from "./Cart.module.css";
|
import style from "./Cart.module.css";
|
||||||
|
|
||||||
function CartPage() {
|
function CartPage() {
|
||||||
const dispatch = useDispatch();
|
const dispatch = useDispatch();
|
||||||
// const navigate = useNavigate();
|
// const navigate = useNavigate();
|
||||||
|
|
||||||
const { purchaseDetails } = useSelector(({ purchase }) => {
|
const { purchaseDetails } = useSelector(({ purchase }) => {
|
||||||
return {
|
return {
|
||||||
purchaseDetails: purchase.purchaseDetails,
|
purchaseDetails: purchase.purchaseDetails,
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
const removeFromCart = (cartItemId) => {
|
console.log("purchaseDetails", purchaseDetails);
|
||||||
if (window.confirm("Do you really want to remove this Item?")) {
|
|
||||||
dispatch(removeItemFromCart({ cartItemId }));
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
const changeLicenseCount = (cartItemId, licenseCount) => {
|
const removeFromCart = (cartItemId) => {
|
||||||
let cartItem = purchaseDetails.cartItems.find(
|
if (window.confirm("Do you really want to remove this Item?")) {
|
||||||
({ _id }) => _id === cartItemId
|
dispatch(removeItemFromCart({ cartItemId }));
|
||||||
);
|
}
|
||||||
cartItem = JSON.parse(JSON.stringify(cartItem));
|
};
|
||||||
if (!cartItem.additionalLicenses || cartItem.additionalLicenses.length <= 0)
|
|
||||||
return;
|
|
||||||
cartItem.additionalLicenses[0].count = licenseCount;
|
|
||||||
|
|
||||||
dispatch(
|
const changeLicenseCount = (cartItemId, licenseCount) => {
|
||||||
updatePurchase({
|
let cartItem = purchaseDetails.cartItems.find(
|
||||||
cartItem,
|
({ _id }) => _id === cartItemId
|
||||||
})
|
);
|
||||||
);
|
cartItem = JSON.parse(JSON.stringify(cartItem));
|
||||||
};
|
if (!cartItem.additionalLicenses || cartItem.additionalLicenses.length <= 0)
|
||||||
|
return;
|
||||||
|
cartItem.additionalLicenses[0].count = licenseCount;
|
||||||
|
|
||||||
const changeBuyOnlyLicenseFlag = (cartItemId, value) => {
|
dispatch(
|
||||||
let cartItem = purchaseDetails.cartItems.find(
|
updatePurchase({
|
||||||
({ _id }) => _id === cartItemId
|
cartItem,
|
||||||
);
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const payload = {
|
const changeBuyOnlyLicenseFlag = (cartItemId, value) => {
|
||||||
_id: cartItem._id,
|
let cartItem = purchaseDetails.cartItems.find(
|
||||||
planId: cartItem.planId,
|
({ _id }) => _id === cartItemId
|
||||||
buyingOnlyLicenses: value,
|
);
|
||||||
};
|
|
||||||
|
|
||||||
dispatch(
|
const payload = {
|
||||||
updatePurchase({
|
_id: cartItem._id,
|
||||||
cartItem: payload,
|
planId: cartItem.planId,
|
||||||
})
|
buyingOnlyLicenses: value,
|
||||||
);
|
};
|
||||||
};
|
|
||||||
|
|
||||||
const changeTerm = (cartItemId, newIdx) => {
|
dispatch(
|
||||||
let cartItem = purchaseDetails.cartItems.find(
|
updatePurchase({
|
||||||
({ _id }) => _id === cartItemId
|
cartItem: payload,
|
||||||
);
|
})
|
||||||
cartItem = JSON.parse(JSON.stringify(cartItem));
|
);
|
||||||
|
};
|
||||||
|
|
||||||
cartItem.planVariantIdx = newIdx;
|
const changeTerm = (cartItemId, newIdx) => {
|
||||||
|
let cartItem = purchaseDetails.cartItems.find(
|
||||||
|
({ _id }) => _id === cartItemId
|
||||||
|
);
|
||||||
|
cartItem = JSON.parse(JSON.stringify(cartItem));
|
||||||
|
|
||||||
dispatch(
|
cartItem.planVariantIdx = newIdx;
|
||||||
updatePurchase({
|
|
||||||
cartItem,
|
|
||||||
})
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const redirectToCheckout = () => {
|
dispatch(
|
||||||
// navigate("/purchase/user_details");
|
updatePurchase({
|
||||||
window.location.href = "/purchase/user_details";
|
cartItem,
|
||||||
};
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
const [couponCode, setCouponCode] = useState("");
|
const redirectToCheckout = () => {
|
||||||
|
// navigate("/purchase/user_details");
|
||||||
|
window.location.href = "/purchase/user_details";
|
||||||
|
};
|
||||||
|
|
||||||
const applyDiscount = () => {
|
const [couponCode, setCouponCode] = useState("");
|
||||||
dispatch(validateCoupon({ couponCode }))
|
|
||||||
.unwrap()
|
|
||||||
.then((res) => {
|
|
||||||
const { getOffer } = res;
|
|
||||||
let discount = { code: couponCode };
|
|
||||||
if (getOffer.type === "PERCENTAGE") discount.percentage = getOffer.amount;
|
|
||||||
else if (getOffer.type === "FLAT") discount.amount = getOffer.amount;
|
|
||||||
|
|
||||||
dispatch(
|
const applyDiscount = () => {
|
||||||
updatePurchase({
|
dispatch(validateCoupon({ couponCode }))
|
||||||
discount,
|
.unwrap()
|
||||||
})
|
.then((res) => {
|
||||||
);
|
const { getOffer } = res;
|
||||||
setCouponCode("");
|
let discount = { code: couponCode };
|
||||||
})
|
if (getOffer.type === "PERCENTAGE")
|
||||||
.catch((err) => {
|
discount.percentage = getOffer.amount;
|
||||||
toast.error(err.message);
|
else if (getOffer.type === "FLAT") discount.amount = getOffer.amount;
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
const removeDiscount = () => {
|
dispatch(
|
||||||
dispatch(
|
updatePurchase({
|
||||||
updatePurchase({
|
discount,
|
||||||
discount: null,
|
})
|
||||||
})
|
);
|
||||||
);
|
setCouponCode("");
|
||||||
};
|
})
|
||||||
|
.catch((err) => {
|
||||||
|
toast.error(err.message);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
const isCartEmpty = useMemo(() => {
|
const removeDiscount = () => {
|
||||||
return purchaseDetails && purchaseDetails.currency ? false : true;
|
dispatch(
|
||||||
}, [purchaseDetails]);
|
updatePurchase({
|
||||||
|
discount: null,
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
return (
|
const isCartEmpty = useMemo(() => {
|
||||||
<div className={style.main_container}>
|
return purchaseDetails && purchaseDetails.currency ? false : true;
|
||||||
<ContentWrapper>
|
}, [purchaseDetails]);
|
||||||
<Header theme="DARK2" />
|
|
||||||
<div className={style.section1}>
|
|
||||||
{" "}
|
|
||||||
<p>
|
|
||||||
{!isCartEmpty
|
|
||||||
? `Your cart total is ${getFormattedCurrency(
|
|
||||||
purchaseDetails.currency,
|
|
||||||
purchaseDetails.totalCost
|
|
||||||
)}`
|
|
||||||
: "Your cart is Empty"}
|
|
||||||
</p>
|
|
||||||
<Button
|
|
||||||
variant="contained"
|
|
||||||
onClick={redirectToCheckout}
|
|
||||||
disabled={isCartEmpty}
|
|
||||||
>
|
|
||||||
Check Out{" "}
|
|
||||||
<ArrowForwardOutlinedIcon sx={{ marginLeft: "0.5rem", fontSize: 20 }} />
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={style.section2}>
|
useEffect(() => {
|
||||||
{purchaseDetails &&
|
dispatch(getPurchaseDetails());
|
||||||
purchaseDetails.cartItems &&
|
}, []);
|
||||||
purchaseDetails.cartItems.map((data) => (
|
|
||||||
<ProductCard
|
|
||||||
currency={purchaseDetails.currency}
|
|
||||||
data={data}
|
|
||||||
removeFromCart={removeFromCart}
|
|
||||||
changeBuyOnlyLicenseFlag={changeBuyOnlyLicenseFlag}
|
|
||||||
changeLicenseCount={changeLicenseCount}
|
|
||||||
changeTerm={changeTerm}
|
|
||||||
/>
|
|
||||||
))}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className={style.section3}>
|
return (
|
||||||
<div>
|
<div className={style.main_container}>
|
||||||
<p>Sub-total</p>
|
<ContentWrapper>
|
||||||
<p className={style.price}>
|
<Header theme="DARK2" />
|
||||||
{purchaseDetails
|
<div className={style.section1}>
|
||||||
? getFormattedCurrency(
|
{" "}
|
||||||
purchaseDetails.currency,
|
<p>
|
||||||
purchaseDetails.subTotalCost
|
{!isCartEmpty
|
||||||
)
|
? `Your cart total is ${getFormattedCurrency(
|
||||||
: "Nil"}
|
purchaseDetails.currency,
|
||||||
</p>
|
purchaseDetails.totalCost
|
||||||
</div>
|
)}`
|
||||||
<div>
|
: "Your cart is Empty"}
|
||||||
<p>Other taxes</p>
|
</p>
|
||||||
<p className={style.price}>
|
<Button
|
||||||
{purchaseDetails
|
variant="contained"
|
||||||
? getFormattedCurrency(
|
onClick={redirectToCheckout}
|
||||||
purchaseDetails.currency,
|
disabled={isCartEmpty}
|
||||||
purchaseDetails.otherTaxesCost
|
>
|
||||||
)
|
Check Out{" "}
|
||||||
: "Nil"}
|
<ArrowForwardOutlinedIcon
|
||||||
</p>
|
sx={{ marginLeft: "0.5rem", fontSize: 20 }}
|
||||||
</div>
|
/>
|
||||||
<div className={style.coupon_row}>
|
</Button>
|
||||||
<p>Have a discount code?</p>
|
</div>
|
||||||
{purchaseDetails && purchaseDetails.discount ? (
|
|
||||||
<>
|
|
||||||
<div className={style.coupon_code}>
|
|
||||||
<span>{purchaseDetails.discount.code} </span>{" "}
|
|
||||||
<ClearIcon style={{ cursor: "pointer" }} onClick={removeDiscount} />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<p className={style.price}>
|
<div className={style.section2}>
|
||||||
{getFormattedCurrency(
|
{purchaseDetails &&
|
||||||
purchaseDetails.currency,
|
purchaseDetails.cartItems &&
|
||||||
-purchaseDetails.discount.amount
|
purchaseDetails.cartItems.map((data) => (
|
||||||
)}
|
<ProductCard
|
||||||
</p>
|
currency={purchaseDetails.currency}
|
||||||
</>
|
data={data}
|
||||||
) : (
|
removeFromCart={removeFromCart}
|
||||||
<div className={style.coupon}>
|
changeBuyOnlyLicenseFlag={changeBuyOnlyLicenseFlag}
|
||||||
<TextField
|
changeLicenseCount={changeLicenseCount}
|
||||||
fullWidth
|
changeTerm={changeTerm}
|
||||||
id="discount_code"
|
/>
|
||||||
placeholder="Discount Code"
|
))}
|
||||||
value={couponCode}
|
</div>
|
||||||
onChange={(e) => {
|
|
||||||
setCouponCode(e.target.value);
|
|
||||||
}}
|
|
||||||
/>
|
|
||||||
<Button
|
|
||||||
fullWidth
|
|
||||||
variant="outlined"
|
|
||||||
disabled={!couponCode}
|
|
||||||
onClick={applyDiscount}
|
|
||||||
>
|
|
||||||
Apply
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
)}
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
<div className={style.section3}>
|
||||||
<p>Total</p>
|
<div>
|
||||||
<p className={style.price}>
|
<p>Sub-total</p>
|
||||||
{purchaseDetails
|
<p className={style.price}>
|
||||||
? getFormattedCurrency(
|
{purchaseDetails
|
||||||
purchaseDetails.currency,
|
? getFormattedCurrency(
|
||||||
purchaseDetails.totalCost
|
purchaseDetails.currency,
|
||||||
)
|
purchaseDetails.subTotalCost
|
||||||
: "Nil"}
|
)
|
||||||
</p>
|
: "Nil"}
|
||||||
</div>
|
</p>
|
||||||
<Button
|
</div>
|
||||||
variant="contained"
|
<div>
|
||||||
onClick={redirectToCheckout}
|
<p>Other taxes</p>
|
||||||
disabled={isCartEmpty}
|
<p className={style.price}>
|
||||||
className={style.checkout}
|
{purchaseDetails
|
||||||
>
|
? getFormattedCurrency(
|
||||||
Check Out{" "}
|
purchaseDetails.currency,
|
||||||
<ArrowForwardOutlinedIcon sx={{ marginLeft: "0.5rem", fontSize: 20 }} />
|
purchaseDetails.otherTaxesCost
|
||||||
</Button>
|
)
|
||||||
</div>
|
: "Nil"}
|
||||||
</ContentWrapper>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
);
|
<div className={style.coupon_row}>
|
||||||
|
<p>Have a discount code?</p>
|
||||||
|
{purchaseDetails && purchaseDetails.discount ? (
|
||||||
|
<>
|
||||||
|
<div className={style.coupon_code}>
|
||||||
|
<span>{purchaseDetails.discount.code} </span>{" "}
|
||||||
|
<ClearIcon
|
||||||
|
style={{ cursor: "pointer" }}
|
||||||
|
onClick={removeDiscount}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p className={style.price}>
|
||||||
|
{getFormattedCurrency(
|
||||||
|
purchaseDetails.currency,
|
||||||
|
-purchaseDetails.discount.amount
|
||||||
|
)}
|
||||||
|
</p>
|
||||||
|
</>
|
||||||
|
) : (
|
||||||
|
<div className={style.coupon}>
|
||||||
|
<TextField
|
||||||
|
fullWidth
|
||||||
|
id="discount_code"
|
||||||
|
placeholder="Discount Code"
|
||||||
|
value={couponCode}
|
||||||
|
onChange={(e) => {
|
||||||
|
setCouponCode(e.target.value);
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
<Button
|
||||||
|
fullWidth
|
||||||
|
variant="outlined"
|
||||||
|
disabled={!couponCode}
|
||||||
|
onClick={applyDiscount}
|
||||||
|
>
|
||||||
|
Apply
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<p>Total</p>
|
||||||
|
<p className={style.price}>
|
||||||
|
{purchaseDetails
|
||||||
|
? getFormattedCurrency(
|
||||||
|
purchaseDetails.currency,
|
||||||
|
purchaseDetails.totalCost
|
||||||
|
)
|
||||||
|
: "Nil"}
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
<Button
|
||||||
|
variant="contained"
|
||||||
|
onClick={redirectToCheckout}
|
||||||
|
disabled={isCartEmpty}
|
||||||
|
className={style.checkout}
|
||||||
|
>
|
||||||
|
Check Out{" "}
|
||||||
|
<ArrowForwardOutlinedIcon
|
||||||
|
sx={{ marginLeft: "0.5rem", fontSize: 20 }}
|
||||||
|
/>
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</ContentWrapper>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
export default CartPage;
|
export default CartPage;
|
||||||
|
|
|
@ -3,283 +3,284 @@ import { isAxiosError } from "axios";
|
||||||
import { axiosBuzz, axiosBuzzOne } from "../utils/axios";
|
import { axiosBuzz, axiosBuzzOne } from "../utils/axios";
|
||||||
|
|
||||||
export const getAkademyPlans = createAsyncThunk(
|
export const getAkademyPlans = createAsyncThunk(
|
||||||
`COMMON/akademy/plans`,
|
`COMMON/akademy/plans`,
|
||||||
async (payload) => {
|
async (payload) => {
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "/akademy/subscriptions/plans",
|
url: "/akademy/subscriptions/plans",
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const getAkademyClasses = createAsyncThunk(
|
export const getAkademyClasses = createAsyncThunk(
|
||||||
`COMMON/akademy/classes`,
|
`COMMON/akademy/classes`,
|
||||||
async (payload) => {
|
async (payload) => {
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "/akademy/bcc/school/classes",
|
url: "/akademy/bcc/school/classes",
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const createPurchase = createAsyncThunk(
|
export const createPurchase = createAsyncThunk(
|
||||||
`PURCHASE:POST/akademy/purchase`,
|
`PURCHASE:POST/akademy/purchase`,
|
||||||
async (payload) => {
|
async (payload) => {
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "/akademy/subscriptions/purchase",
|
url: "/akademy/subscriptions/purchase",
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const updatePurchase = createAsyncThunk(
|
export const updatePurchase = createAsyncThunk(
|
||||||
`PURCHASE:PUT/akademy/purchase`,
|
`PURCHASE:PUT/akademy/purchase`,
|
||||||
async (payload, { getState, dispatch }) => {
|
async (payload, { getState, dispatch }) => {
|
||||||
const { purchase } = getState();
|
const { purchase } = getState();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "PUT",
|
method: "PUT",
|
||||||
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
|
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
|
||||||
data: payload,
|
data: payload,
|
||||||
});
|
});
|
||||||
dispatch(getPurchaseDetails());
|
dispatch(getPurchaseDetails());
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const removeItemFromCart = createAsyncThunk(
|
export const removeItemFromCart = createAsyncThunk(
|
||||||
`PURCHASE:DELETE/akademy/purchase`,
|
`PURCHASE:DELETE/akademy/purchase`,
|
||||||
async (payload, { getState, dispatch }) => {
|
async (payload, { getState, dispatch }) => {
|
||||||
const { cartItemId } = payload;
|
const { cartItemId } = payload;
|
||||||
const { purchase } = getState();
|
const { purchase } = getState();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "DELETE",
|
method: "DELETE",
|
||||||
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/${cartItemId}`,
|
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/${cartItemId}`,
|
||||||
data: payload,
|
data: payload,
|
||||||
});
|
});
|
||||||
dispatch(getPurchaseDetails());
|
dispatch(getPurchaseDetails());
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const getPurchaseDetails = createAsyncThunk(
|
export const getPurchaseDetails = createAsyncThunk(
|
||||||
`PURCHASE:GET/akademy/purchase`,
|
`PURCHASE:GET/akademy/purchase`,
|
||||||
async (payload, { getState }) => {
|
async (payload, { getState }) => {
|
||||||
const { purchase } = getState();
|
const { purchase } = getState();
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
|
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart`,
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const initiatePayment = createAsyncThunk(
|
export const initiatePayment = createAsyncThunk(
|
||||||
`PURCHASE:POST/akademy/purchase/initiatePayment`,
|
`PURCHASE:POST/akademy/purchase/initiatePayment`,
|
||||||
async (payload, { getState }) => {
|
async (payload, { getState }) => {
|
||||||
const { purchase } = getState();
|
const { purchase } = getState();
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/checkout`,
|
url: `/akademy/subscriptions/purchase/${purchase.purchaseId}/cart/checkout`,
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const verifyPayment = createAsyncThunk(
|
export const verifyPayment = createAsyncThunk(
|
||||||
`PURCHASE:POST/akademy/purchase/verifyPayment`,
|
`PURCHASE:POST/akademy/purchase/verifyPayment`,
|
||||||
async (payload) => {
|
async (payload) => {
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzz({
|
const response = await axiosBuzz({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "/payments/verify",
|
url: "/payments/verify",
|
||||||
data: {
|
data: {
|
||||||
txnId: payload.txnId,
|
txnId: payload.txnId,
|
||||||
provider: "airpay",
|
provider: "airpay",
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const validateCoupon = createAsyncThunk(
|
export const validateCoupon = createAsyncThunk(
|
||||||
`COUPON:POST/validate`,
|
`COUPON:POST/validate`,
|
||||||
async (payload) => {
|
async (payload) => {
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "POST",
|
method: "POST",
|
||||||
url: "/offer/validate-coupon",
|
url: "/offer/validate-coupon",
|
||||||
data: {
|
data: {
|
||||||
code: payload.couponCode,
|
code: payload.couponCode,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
if (isAxiosError(err))
|
if (isAxiosError(err))
|
||||||
throw new Error(err.response.data.message || "Something went wrong");
|
throw new Error(err.response.data.message || "Something went wrong");
|
||||||
throw err;
|
throw err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const getAllTeenybeansLanguages = createAsyncThunk(
|
export const getAllTeenybeansLanguages = createAsyncThunk(
|
||||||
`PURCHASE:getAllTeenybeansLanguages`,
|
`PURCHASE:getAllTeenybeansLanguages`,
|
||||||
async (paylaod, { rejectWithValue }) => {
|
async (paylaod, { rejectWithValue }) => {
|
||||||
try {
|
try {
|
||||||
const response = await axiosBuzzOne({
|
const response = await axiosBuzzOne({
|
||||||
method: "GET",
|
method: "GET",
|
||||||
url: "/akademy/bcc/user/languages",
|
url: "/akademy/bcc/user/languages",
|
||||||
});
|
});
|
||||||
return response.data;
|
return response.data;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return rejectWithValue(error.response.data);
|
return rejectWithValue(error.response.data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
export const purchaseSlice = createSlice({
|
export const purchaseSlice = createSlice({
|
||||||
name: "purchase",
|
name: "purchase",
|
||||||
initialState: {
|
initialState: {
|
||||||
currency: localStorage.getItem("currency") || "INR",
|
currency: localStorage.getItem("currency") || "INR",
|
||||||
planDetails: {},
|
planDetails: {},
|
||||||
planPriceDetails: {
|
planPriceDetails: {
|
||||||
RETAIL_PARENT: {},
|
RETAIL_PARENT: {},
|
||||||
TUTION_EDUCATOR: {},
|
TUTION_EDUCATOR: {},
|
||||||
ENTERPRISE_SCHOOL: {},
|
ENTERPRISE_SCHOOL: {},
|
||||||
},
|
},
|
||||||
classes: [],
|
classes: [],
|
||||||
purchaseId: localStorage.getItem("PURCHASE_ID"),
|
purchaseId: localStorage.getItem("PURCHASE_ID"),
|
||||||
purchaseDetails: {},
|
purchaseDetails: {},
|
||||||
userDetails:
|
userDetails:
|
||||||
(localStorage.getItem("USER_DETAILS") &&
|
(localStorage.getItem("USER_DETAILS") &&
|
||||||
JSON.parse(localStorage.getItem("USER_DETAILS"))) ||
|
JSON.parse(localStorage.getItem("USER_DETAILS"))) ||
|
||||||
{},
|
{},
|
||||||
statusByName: {},
|
statusByName: {},
|
||||||
teenybeansLanguages: [],
|
teenybeansLanguages: [],
|
||||||
},
|
},
|
||||||
reducers: {
|
reducers: {
|
||||||
clearPurchaseCart: (state, action) => {
|
clearPurchaseCart: (state, action) => {
|
||||||
state.purchaseId = undefined;
|
state.purchaseId = undefined;
|
||||||
localStorage.removeItem("PURCHASE_ID");
|
localStorage.removeItem("PURCHASE_ID");
|
||||||
state.purchaseDetails = {};
|
state.purchaseDetails = {};
|
||||||
state.userDetails = {};
|
state.userDetails = {};
|
||||||
localStorage.removeItem("USER_DETAILS");
|
localStorage.removeItem("USER_DETAILS");
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
localStorage.removeItem("IS_USER_VERIFIED");
|
localStorage.removeItem("IS_USER_VERIFIED");
|
||||||
localStorage.removeItem("IS_EMAIL_OTP_SENT");
|
localStorage.removeItem("IS_EMAIL_OTP_SENT");
|
||||||
},
|
},
|
||||||
|
|
||||||
saveUserDetails: (state, action) => {
|
saveUserDetails: (state, action) => {
|
||||||
state.userDetails = action.payload;
|
state.userDetails = action.payload;
|
||||||
localStorage.setItem("USER_DETAILS", JSON.stringify(action.payload));
|
localStorage.setItem("USER_DETAILS", JSON.stringify(action.payload));
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
extraReducers: (builder) => {
|
extraReducers: (builder) => {
|
||||||
builder.addCase(getAkademyPlans.pending, (state, action) => {
|
builder.addCase(getAkademyPlans.pending, (state, action) => {
|
||||||
state.statusByName["plans"] = "pending";
|
state.statusByName["plans"] = "pending";
|
||||||
});
|
});
|
||||||
builder.addCase(getAkademyPlans.fulfilled, (state, action) => {
|
builder.addCase(getAkademyPlans.fulfilled, (state, action) => {
|
||||||
state.statusByName["plans"] = "fulfilled";
|
state.statusByName["plans"] = "fulfilled";
|
||||||
|
|
||||||
action.payload.data.map((plan) => {
|
action.payload.data.map((plan) => {
|
||||||
const { _id, products, productCategory } = plan;
|
const { _id, products, productCategory } = plan;
|
||||||
state.planDetails[_id] = plan;
|
state.planDetails[_id] = plan;
|
||||||
if (products && Array.isArray(products) && products.length == 1) {
|
if (products && Array.isArray(products) && products.length == 1) {
|
||||||
state.planPriceDetails[productCategory][products[0]] = plan;
|
state.planPriceDetails[productCategory][products[0]] = plan;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
builder.addCase(getAkademyPlans.rejected, (state, action) => {
|
builder.addCase(getAkademyPlans.rejected, (state, action) => {
|
||||||
state.statusByName["plans"] = "rejected";
|
state.statusByName["plans"] = "rejected";
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.addCase(getAkademyClasses.pending, (state, action) => {
|
builder.addCase(getAkademyClasses.pending, (state, action) => {
|
||||||
state.statusByName["classes"] = "pending";
|
state.statusByName["classes"] = "pending";
|
||||||
});
|
});
|
||||||
builder.addCase(getAkademyClasses.fulfilled, (state, action) => {
|
builder.addCase(getAkademyClasses.fulfilled, (state, action) => {
|
||||||
state.statusByName["classes"] = "fulfilled";
|
state.statusByName["classes"] = "fulfilled";
|
||||||
state.classes = ["IK3", "IK2", "IK1", "PG"]?.map((item) =>
|
state.classes = ["IK3", "IK2", "IK1", "PG"]?.map((item) =>
|
||||||
action.payload.data?.find((el) => el.name === item)
|
action.payload.data?.find((el) => el.name === item)
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
builder.addCase(getAkademyClasses.rejected, (state, action) => {
|
builder.addCase(getAkademyClasses.rejected, (state, action) => {
|
||||||
state.statusByName["classes"] = "rejected";
|
state.statusByName["classes"] = "rejected";
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.addCase(createPurchase.fulfilled, (state, action) => {
|
builder.addCase(createPurchase.fulfilled, (state, action) => {
|
||||||
const purchaseId = action.payload.data._id;
|
const purchaseId = action.payload.data._id;
|
||||||
state.purchaseId = purchaseId;
|
state.purchaseId = purchaseId;
|
||||||
localStorage.setItem("PURCHASE_ID", purchaseId);
|
localStorage.setItem("PURCHASE_ID", purchaseId);
|
||||||
});
|
});
|
||||||
|
|
||||||
builder.addCase(getPurchaseDetails.fulfilled, (state, action) => {
|
builder.addCase(getPurchaseDetails.fulfilled, (state, action) => {
|
||||||
state.purchaseDetails = action.payload.data.data[0];
|
state.purchaseDetails = action.payload.data.data[0];
|
||||||
});
|
console.log("lookData", action.payload);
|
||||||
builder.addCase(getAllTeenybeansLanguages.fulfilled, (state, action) => {
|
});
|
||||||
state.teenybeansLanguages = action.payload.data;
|
builder.addCase(getAllTeenybeansLanguages.fulfilled, (state, action) => {
|
||||||
});
|
state.teenybeansLanguages = action.payload.data;
|
||||||
},
|
});
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Action creators are generated for each case reducer function
|
// Action creators are generated for each case reducer function
|
||||||
|
|
|
@ -6,14 +6,26 @@ export interface Props {
|
||||||
ogImage: string;
|
ogImage: string;
|
||||||
ogUrl: string;
|
ogUrl: string;
|
||||||
canonicalUrl: string;
|
canonicalUrl: string;
|
||||||
|
newSchema1:string;
|
||||||
|
newSchema2:string;
|
||||||
|
newSchema3:string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const { title, description, keywords, ogImage, ogUrl, canonicalUrl } = Astro.props;
|
const { title, description, keywords, ogImage, ogUrl, canonicalUrl, newSchema1, newSchema2, newSchema3 } = Astro.props;
|
||||||
---
|
---
|
||||||
|
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
<head>
|
<head>
|
||||||
|
<!-- Google tag (gtag.js) -->
|
||||||
|
<script async src="https://www.googletagmanager.com/gtag/js?id=G-M4948JYT6C"></script>
|
||||||
|
<script>
|
||||||
|
window.dataLayer = window.dataLayer || [];
|
||||||
|
function gtag(){dataLayer.push(arguments);}
|
||||||
|
gtag('js', new Date());
|
||||||
|
|
||||||
|
gtag('config', 'G-M4948JYT6C');
|
||||||
|
</script>
|
||||||
<meta charset="UTF-8" />
|
<meta charset="UTF-8" />
|
||||||
<meta name="viewport" content="width=device-width" />
|
<meta name="viewport" content="width=device-width" />
|
||||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||||
|
@ -30,6 +42,29 @@ const { title, description, keywords, ogImage, ogUrl, canonicalUrl } = Astro.pro
|
||||||
<meta property="og:image" content={ogImage}>
|
<meta property="og:image" content={ogImage}>
|
||||||
<meta property="og:url" content={ogUrl}>
|
<meta property="og:url" content={ogUrl}>
|
||||||
<meta property="og:type" content="website">
|
<meta property="og:type" content="website">
|
||||||
|
{newSchema1 && (
|
||||||
|
<script
|
||||||
|
type="application/ld+json"
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: newSchema1,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
{newSchema2 && (
|
||||||
|
<script
|
||||||
|
type="application/ld+json"
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: newSchema2,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}{newSchema3 && (
|
||||||
|
<script
|
||||||
|
type="application/ld+json"
|
||||||
|
dangerouslySetInnerHTML={{
|
||||||
|
__html: newSchema3,
|
||||||
|
}}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<slot />
|
<slot />
|
||||||
|
|
|
@ -36,6 +36,6 @@ export async function getStaticPaths() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
---
|
---
|
||||||
<Layout title={blogData?.title ?? 'Blog | Akademy'}>
|
<Layout title={blogData?.title ?? 'Blog | Akademy'} description={blogData?.meta_description} canonicalUrl={`https://akadmyapp.com/blogs/${id}`} ogImage={`https://management.beanstalkedu.com/assets/${blogData?.og_img}`} ogUrl={'https://akadmyapp.com'} newSchema1={blogData?.schema1?.replaceAll("\n", "")} newSchema2={blogData?.schema2?.replaceAll("\n", "")} newSchema3={blogData?.schema3?.replaceAll("\n", "")}>
|
||||||
<SingleBlog client:only="react" blog={blogData} />
|
<SingleBlog client:only="react" blog={blogData} />
|
||||||
</Layout>
|
</Layout>
|
|
@ -15,6 +15,6 @@ try {
|
||||||
blogs = [];
|
blogs = [];
|
||||||
}
|
}
|
||||||
---
|
---
|
||||||
<Layout title="Akademy Landing - Blogs">
|
<Layout title="aKadmy Blogs | Insights, Tips, and Trends for Early Childhood" description={'Stay updated with the latest trends, insights, and tips on early childhood education. Explore aKadmy’s blog for valuable resources and expert advice.'} canonicalUrl={'https://akadmyapp.com/blogs'}>
|
||||||
<AllBlogs client:only="react" />
|
<AllBlogs client:only="react" />
|
||||||
</Layout>
|
</Layout>
|
48
yarn.lock
48
yarn.lock
|
@ -991,15 +991,15 @@
|
||||||
resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz"
|
resolved "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz"
|
||||||
integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==
|
integrity sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==
|
||||||
|
|
||||||
"@esbuild/linux-x64@0.21.5":
|
"@esbuild/win32-x64@0.21.5":
|
||||||
version "0.21.5"
|
version "0.21.5"
|
||||||
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz"
|
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz"
|
||||||
integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
|
integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
|
||||||
|
|
||||||
"@esbuild/linux-x64@0.25.5":
|
"@esbuild/win32-x64@0.25.5":
|
||||||
version "0.25.5"
|
version "0.25.5"
|
||||||
resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz"
|
resolved "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz"
|
||||||
integrity sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==
|
integrity sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==
|
||||||
|
|
||||||
"@eslint-community/eslint-utils@^4.2.0":
|
"@eslint-community/eslint-utils@^4.2.0":
|
||||||
version "4.7.0"
|
version "4.7.0"
|
||||||
|
@ -1052,29 +1052,10 @@
|
||||||
resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz"
|
resolved "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz"
|
||||||
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
|
integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==
|
||||||
|
|
||||||
"@img/sharp-libvips-linux-x64@1.0.4":
|
"@img/sharp-win32-x64@0.33.5":
|
||||||
version "1.0.4"
|
|
||||||
resolved "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz"
|
|
||||||
integrity sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==
|
|
||||||
|
|
||||||
"@img/sharp-libvips-linuxmusl-x64@1.0.4":
|
|
||||||
version "1.0.4"
|
|
||||||
resolved "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz"
|
|
||||||
integrity sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==
|
|
||||||
|
|
||||||
"@img/sharp-linux-x64@0.33.5":
|
|
||||||
version "0.33.5"
|
version "0.33.5"
|
||||||
resolved "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz"
|
resolved "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz"
|
||||||
integrity sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==
|
integrity sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==
|
||||||
optionalDependencies:
|
|
||||||
"@img/sharp-libvips-linux-x64" "1.0.4"
|
|
||||||
|
|
||||||
"@img/sharp-linuxmusl-x64@0.33.5":
|
|
||||||
version "0.33.5"
|
|
||||||
resolved "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz"
|
|
||||||
integrity sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==
|
|
||||||
optionalDependencies:
|
|
||||||
"@img/sharp-libvips-linuxmusl-x64" "1.0.4"
|
|
||||||
|
|
||||||
"@isaacs/cliui@^8.0.2":
|
"@isaacs/cliui@^8.0.2":
|
||||||
version "8.0.2"
|
version "8.0.2"
|
||||||
|
@ -1526,15 +1507,10 @@
|
||||||
estree-walker "^2.0.2"
|
estree-walker "^2.0.2"
|
||||||
picomatch "^4.0.2"
|
picomatch "^4.0.2"
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-gnu@4.42.0":
|
"@rollup/rollup-win32-x64-msvc@4.42.0":
|
||||||
version "4.42.0"
|
version "4.42.0"
|
||||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.42.0.tgz"
|
resolved "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.42.0.tgz"
|
||||||
integrity sha512-Gfm6cV6mj3hCUY8TqWa63DB8Mx3NADoFwiJrMpoZ1uESbK8FQV3LXkhfry+8bOniq9pqY1OdsjFWNsSbfjPugw==
|
integrity sha512-LpHiJRwkaVz/LqjHjK8LCi8osq7elmpwujwbXKNW88bM8eeGxavJIKKjkjpMHAh/2xfnrt1ZSnhTv41WYUHYmA==
|
||||||
|
|
||||||
"@rollup/rollup-linux-x64-musl@4.42.0":
|
|
||||||
version "4.42.0"
|
|
||||||
resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.42.0.tgz"
|
|
||||||
integrity sha512-g86PF8YZ9GRqkdi0VoGlcDUb4rYtQKyTD1IVtxxN4Hpe7YqLBShA7oHMKU6oKTCi3uxwW4VkIGnOaH/El8de3w==
|
|
||||||
|
|
||||||
"@shikijs/core@3.6.0":
|
"@shikijs/core@3.6.0":
|
||||||
version "3.6.0"
|
version "3.6.0"
|
||||||
|
|
Loading…
Reference in New Issue