{"version":3,"file":"static/chunks/626-39bbf45e08a06ff3.js","mappings":"gLA0KAA,CAAAA,EAAAC,CAAA,CAlK8B,OAAC,CAAEC,OAAAA,CAAM,CAAEC,MAAAA,CAAK,CAAEC,IAAAA,CAAG,CAAE,CAAAC,EAC7C,CAAEC,OAAAA,CAAM,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,IACb,CAACC,EAASC,EAAU,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,EAAE,EAClC,CAACC,EAAMC,EAAQ,CAAGF,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAC3B,CAACG,EAAYC,EAAc,CAAGJ,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAEvCK,EAAa,CAACJ,EAAO,GAAK,EAE1BK,EAAoBR,EAAQS,KAAK,CAACF,EAAYA,EAAa,GAmBjE,MATAG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACRT,EAAUP,GACVY,EAAcK,KAAKC,IAAI,CAAClB,EAAOmB,MAAM,CAAG,GAC1C,EAAG,CAACP,EAAeL,EAAWO,EAAkB,EAG9CM,QAAQC,GAAG,CAAC,WAAaC,KAAKC,SAAS,CAACjB,IAIxC,GAAAkB,EAAAC,IAAA,EAAAD,EAAAE,QAAA,YACE,GAAAF,EAAAG,GAAA,EAACC,MAAAA,CACCC,UAAW,0BACRC,MAAA,CADkC,EAA+B,GAArB,6BAG9C9B,EAAOe,KAAK,CAACd,EAAOC,GAAK6B,GAAG,CAAC,CAACC,EAAMC,SA4EbD,EAAiCA,EAINA,EACpBA,QAhF7B,GAAAR,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,yBACb,GAAAL,EAAAC,IAAA,EAACG,MAAAA,CACCC,UAAW,mCACRC,MAAA,CAD2C,EAA0B,GAAhB,yBAGxD,GAAAN,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,wBACb,GAAAL,EAAAC,IAAA,EAACS,IAAIA,CAACC,KAAM,mBAA2BL,MAAA,CAARE,EAAKI,EAAE,YACpC,GAAAZ,EAAAG,GAAA,EAACU,MAAAA,CAAIC,IAAKC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWP,EAAKQ,aAAa,EACnCR,EAAKQ,aAAa,CAClB,2HACFC,IAAI,aAAaC,MAAO,IAAKC,OAAQ,IAAKC,MAAO,CAAEF,MAAO,IAAKC,OAAQ,GAAI,IAC7E,GAAAnB,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,iCACb,GAAAL,EAAAC,IAAA,EAACoB,OAAAA,WAAK,IAAEb,EAAKc,IAAI,CAAC,OAClB,GAAAtB,EAAAG,GAAA,EAACkB,OAAAA,UAAK,gBAIZ,GAAArB,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,0BACb,GAAAL,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,yBACb,GAAAL,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,uBACb,GAAAL,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,kBACZ,oCAAa,CAACE,GAAG,CAAC,CAACgB,EAAGd,KACrB,IAAMe,EAAcf,EAAQ,EAC5B,MACE,GAAAT,EAAAG,GAAA,EAACsB,IAAAA,CAECpB,UACEmB,GAAe/B,KAAKiC,KAAK,CAAClB,MAAAA,EAAAA,KAAAA,EAAAA,EAAMmB,aAAa,EACzC,cACAH,IAAgB/B,KAAKC,IAAI,CAACc,MAAAA,EAAAA,KAAAA,EAAAA,EAAMmB,aAAa,GAAMC,OAAOC,SAAS,CAACrB,MAAAA,EAAAA,KAAAA,EAAAA,EAAMmB,aAAa,EAErF,cADA,wBALHlB,EAUX,KAEF,GAAAT,EAAAC,IAAA,EAACoB,OAAAA,CAAKhB,UAAU,yBAAe,IAC3BG,EAAKsB,YAAY,CAAC,kBAGxB,GAAA9B,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,4BACb,GAAAL,EAAAG,GAAA,EAACO,IAAIA,CAACL,UAAU,gBAAgB0B,MAAM,WAAWpB,KAAK,aACpD,GAAAX,EAAAG,GAAA,EAACsB,IAAAA,CAAEpB,UAAU,4BAKnB,GAAAL,EAAAG,GAAA,EAAC6B,KAAAA,CAAG3B,UAAU,0BACZ,GAAAL,EAAAG,GAAA,EAACO,IAAIA,CAACC,KAAM,mBAA2BL,MAAA,CAARE,EAAKI,EAAE,WACnCJ,EAAKuB,KAAK,KAIf,GAAA/B,EAAAC,IAAA,EAACgC,KAAAA,CAAG5B,UAAU,qBACZ,GAAAL,EAAAC,IAAA,EAACiC,KAAAA,WACC,GAAAlC,EAAAG,GAAA,EAACsB,IAAAA,CAAEpB,UAAU,iBACZG,EAAK2B,eAAe,CAAC,cAExB,GAAAnC,EAAAC,IAAA,EAACiC,KAAAA,WACC,GAAAlC,EAAAG,GAAA,EAACsB,IAAAA,CAAEpB,UAAU,kBACZG,EAAK2B,eAAe,CAAC,kBAI1B,GAAAnC,EAAAG,GAAA,EAACiC,IAAAA,CAAE/B,UAAU,gBAAgBe,MAAO,CAClCiB,QAAS,cACTC,gBAAiB,EACjBC,gBAAiB,WACjBC,SAAU,SACVC,aAAc,UAChB,WAAIjC,EAAKkC,WAAW,GACpB,GAAA1C,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,mCACb,GAAAL,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,sBACb,GAAAL,EAAAG,GAAA,EAACO,IAAIA,CAACC,KAAK,aACT,GAAAX,EAAAG,GAAA,EAACU,MAAAA,CAAIC,IAAKN,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAMmC,UAAU,GAAhBnC,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAkBoC,QAAQ,CAAE3B,IAAKT,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAMmC,UAAU,GAAhBnC,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAkBqC,QAAQ,CAAE3B,MAAO,IAAKC,OAAQ,UAG/F,GAAAnB,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,4BAAkB,MAC5B,GAAAL,EAAAG,GAAA,EAACO,IAAIA,CAACC,KAAM,YAAoBL,MAAA,CAARE,EAAKI,EAAE,WAAKJ,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAMmC,UAAU,GAAhBnC,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAkBqC,QAAQ,GAAS,IAAI,MAC3E,GAAA7C,EAAAG,GAAA,EAACO,IAAIA,CAACC,KAAK,aAAKH,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAMsC,QAAQ,GAAdtC,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAgBuC,IAAI,SAG3C,GAAA/C,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,4BACb,GAAAL,EAAAC,IAAA,EAACG,MAAAA,CAAIC,UAAU,sBACb,GAAAL,EAAAC,IAAA,EAACoB,OAAAA,CAAKhB,UAAU,0BAAgB,IAAEG,EAAKwC,KAAK,IAC5C,GAAAhD,EAAAC,IAAA,EAACoB,OAAAA,CAAKhB,UAAU,sBAAY,IAAEG,EAAKyC,eAAe,OAEpD,GAAAjD,EAAAC,IAAA,EAACS,IAAIA,CACHL,UAAU,eACVM,KAAM,mBAA2BL,MAAA,CAARE,EAAKI,EAAE,YACjC,aACW,GAAAZ,EAAAG,GAAA,EAACsB,IAAAA,CAAEpB,UAAU,qCA5FGI,OAqGvCjC,EAAOmB,MAAM,CAAG,EACf,GAAAK,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,eACb,GAAAL,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,4BACb,GAAAL,EAAAG,GAAA,EAAC+C,EAAAA,CAAUA,CAAAA,CACT/D,WAAYA,EACZgE,WAAYlE,EACZmE,YAnIQ,IAClBlE,EAAQmE,GACRC,OAAOC,QAAQ,CAAC,CACdC,IAAK,EACLC,SAAU,QACZ,EACF,QAkIM,KAIR,2DCjHAnF,CAAAA,EAAAC,CAAA,CA3CmB,OAAC,CAAEY,WAAAA,CAAU,CAAEgE,WAAAA,CAAU,CAAEC,YAAAA,CAAW,CAAE,CAAAzE,EACnD+E,EAAQ,IAAIC,MAAMxE,GAAYyE,IAAI,GAAG,CAACrD,GAAG,CAAC,GAAS8C,EAAM,GAEzDQ,EAAsB,KAC1BT,EAAYD,EAAa,EAC3B,EAEMW,EAAkB,KACtBV,EAAYD,EAAa,EAC3B,EAEA,MACE,GAAAnD,EAAAG,GAAA,EAAC4D,MAAAA,UACC,GAAA/D,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,qBACb,GAAAL,EAAAC,IAAA,EAACgC,KAAAA,CAAG5B,UAAU,2BACZ,GAAAL,EAAAG,GAAA,EAAC+B,KAAAA,CAAG7B,UAAW8C,IAAAA,EAAmB,WAAa,YAC7C,GAAAnD,EAAAG,GAAA,EAACO,IAAIA,CACHC,KAAK,IACLqD,aAAW,WACXC,QAAS,IAAMJ,aAEf,GAAA7D,EAAAG,GAAA,EAACsB,IAAAA,CAAEpB,UAAU,6BAGhBqD,EAAMnD,GAAG,CAAC,GACT,GAAAP,EAAAG,GAAA,EAAC+B,KAAAA,CAAa7B,UAAW8C,IAAeE,EAAM,SAAW,YACvD,GAAArD,EAAAG,GAAA,EAACO,IAAIA,CAACC,KAAK,IAAIsD,QAAS,IAAMb,EAAYC,YACvCA,KAFIA,IAOX,GAAArD,EAAAG,GAAA,EAAC+B,KAAAA,CAAG7B,UAAW8C,IAAehE,EAAa,WAAa,YACtD,GAAAa,EAAAG,GAAA,EAACO,IAAIA,CAACC,KAAK,IAAIqD,aAAW,OAAOC,QAAS,IAAMH,aAC9C,GAAA9D,EAAAG,GAAA,EAACsB,IAAAA,CAAEpB,UAAU,oCAO3B,iEC5BA/B,CAAAA,EAAA,QAbiB,OAAC,CAAEyD,MAAAA,CAAK,CAAE,CAAApD,EACzB,MACE,GAAAqB,EAAAG,GAAA,EAAAH,EAAAE,QAAA,WACE,GAAAF,EAAAC,IAAA,EAACiE,IAAIA,WACH,GAAAlE,EAAAG,GAAA,EAAC4B,QAAAA,UAAOA,IACR,GAAA/B,EAAAG,GAAA,EAACgE,OAAAA,CAAKpB,KAAK,cAAcqB,QAAQ,qBACjC,GAAApE,EAAAG,GAAA,EAACgE,OAAAA,CAAKpB,KAAK,WAAWqB,QAAQ,wCAC9B,GAAApE,EAAAG,GAAA,EAACkE,OAAAA,CAAKC,IAAI,OAAO3D,KAAK,qBAI9B,yDCgDArC,CAAAA,EAAA,QA3DkB,KAChB,IAAMiG,EAAcC,CAAAA,EAAAA,EAAAA,MAAAA,EAAO,MA4C3B,MA1CAhF,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,SACa+E,EA+BrBA,EA/BA,IAAME,EAAAA,OAAeF,CAAAA,EAAAA,EAAYG,OAAO,GAAnBH,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAqBI,aAAa,CAAC,QACxD,GAAI,CAACF,EAAc,OAEnB,IAAMG,EAAaH,EAAaI,cAAc,EAC9CJ,CAAAA,EAAarD,KAAK,CAAC0D,UAAU,CAAG,OAChCL,EAAarD,KAAK,CAAC2D,eAAe,CAAG,GAAiBH,MAAAA,CAAdA,EAAW,KAActE,MAAA,CAAXsE,GACtDH,EAAarD,KAAK,CAAC4D,gBAAgB,CAAGJ,EACtCH,EAAaQ,qBAAqB,GAClCR,EAAarD,KAAK,CAAC0D,UAAU,CAAG,gCAEhC,IAAMI,EAAiB,KACrB,IAAMC,EAAS7B,OAAO8B,WAAW,EAAIC,SAASC,eAAe,CAACC,SAAS,CAIjEC,EAAWZ,EAAaO,EAAUP,EAFtCS,CAAAA,SAASC,eAAe,CAACG,YAAY,CACrCJ,SAASC,eAAe,CAACI,YAAY,CAEvCjB,CAAAA,EAAarD,KAAK,CAAC4D,gBAAgB,CAAGQ,EAEtC,IAAMG,EAAoBpB,EAAYG,OAAO,CACzCiB,IACER,EAAS,GACXQ,EAAkBC,SAAS,CAACC,GAAG,CAAC,yBAEhCF,EAAkBC,SAAS,CAACE,MAAM,CAAC,yBAGzC,EAUA,OARAZ,IACA5B,OAAOyC,gBAAgB,CAAC,SAAUb,GAEf,OAAnBX,CAAAA,EAAAA,EAAYG,OAAO,GAAnBH,KAAAA,IAAAA,GAAAA,EAAqBwB,gBAAgB,CAAC,QAAS,IAC7CC,EAAMC,cAAc,GACpB3C,OAAOC,QAAQ,CAAC,CAAEC,IAAK,EAAGC,SAAU,QAAS,EAC/C,GAEO,KACLH,OAAO4C,mBAAmB,CAAC,SAAUhB,EACvC,CACF,EAAG,EAAE,EAGH,GAAAlF,EAAAG,GAAA,EAACC,MAAAA,CAAIC,UAAU,sBAAsB8F,IAAK5B,WACxC,GAAAvE,EAAAG,GAAA,EAACiG,MAAAA,CACC/F,UAAU,4BACVa,MAAM,OACNC,OAAO,OACPkF,QAAQ,yBAER,GAAArG,EAAAG,GAAA,EAACmG,OAAAA,CAAKC,EAAE,kDAIhB,0GEaO,SAASC,EAAeC,CAAU,MAAEC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,EAAAA,SAAAA,CAAAA,EAAAA,QACzC,MAAID,EACK,IACEA,GAAcC,EAChBC,EAAAA,EAAQA,CAACC,OAAO,CAACH,GAAYI,cAAc,CAACF,EAAAA,EAAQA,CAACG,qBAAqB,EACxEL,GAAc,CAACC,EACjBC,EAAAA,EAAQA,CAACC,OAAO,CAACH,GAAYI,cAAc,CAACF,EAAAA,EAAQA,CAACI,yBAAyB,QAEzF,CA4cO,SAAShG,EAAWiG,CAAQ,EACjC,MAAO,CAbHA,CAAAA,KAAYC,GAaAD,GAbaA,MAabA,GAbiCA,QAajCA,CAb6C,CAc/D","sources":["webpack://_N_E/./components/Category/Filter/CourseFilterOneToggle.js","webpack://_N_E/./components/Common/Pagination.js","webpack://_N_E/./pages/Head.js","webpack://_N_E/./pages/backToTop.js","webpack://_N_E/./constants/Constants.js","webpack://_N_E/./utils/Utils.js","webpack://_N_E/"],"sourcesContent":["import { useEffect, useState } from \"react\";\r\nimport Link from \"next/link\";\r\n\r\nimport { useAppContext } from \"@/context/Context\";\r\n\r\nimport Pagination from \"@/components/Common/Pagination\";\r\nimport { isNotEmpty } from \"@/utils/Utils\";\r\n\r\nconst CourseFilterOneToggle = ({ course, start, end }) => {\r\n const { toggle } = useAppContext();\r\n const [courses, setCourse] = useState([]);\r\n const [page, setPage] = useState(1);\r\n const [totalPages, setTotalPages] = useState(0);\r\n\r\n const startIndex = (page - 1) * 6;\r\n\r\n const getSelectedCourse = courses.slice(startIndex, startIndex + 6);\r\n\r\n const handleClick = (num) => {\r\n setPage(num);\r\n window.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\",\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n setCourse(course);\r\n setTotalPages(Math.ceil(course.length / 6));\r\n }, [setTotalPages, setCourse, getSelectedCourse]);\r\n\r\n {\r\n console.log(\"Courses \" + JSON.stringify(courses));\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {course.slice(start, end).map((data, index) => (\r\n
\r\n \r\n
\r\n \r\n \"Card\r\n
\r\n -{data.cost}%\r\n Off\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {[...Array(5)].map((_, index) => {\r\n const ratingValue = index + 1;\r\n return (\r\n \r\n );\r\n })}\r\n
\r\n \r\n ({data.ratingsCount} Reviews)\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n\r\n

\r\n \r\n {data.title}\r\n \r\n

\r\n\r\n
    \r\n
  • \r\n \r\n {data.numberOfLessons} Lessons\r\n
  • \r\n
  • \r\n \r\n {data.numberOfLessons} Students\r\n
  • \r\n
\r\n\r\n

{data.description}

\r\n
\r\n
\r\n \r\n {data?.instructor?.fullName}\r\n \r\n
\r\n
\r\n By {data?.instructor?.fullName}{\" \"}\r\n In {data?.category?.name}\r\n
\r\n
\r\n
\r\n
\r\n ${data.price}\r\n ${data.discountedPrice}\r\n
\r\n \r\n Learn More\r\n \r\n
\r\n
\r\n
\r\n \r\n ))}\r\n \r\n\r\n {course.length > 6 ? (\r\n
\r\n
\r\n \r\n
\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst styles = {\r\n truncateText: {\r\n display: '-webkit-box',\r\n WebkitLineClamp: 3,\r\n WebkitBoxOrient: 'vertical',\r\n overflow: 'hidden',\r\n textOverflow: 'ellipsis',\r\n }\r\n};\r\n\r\nexport default CourseFilterOneToggle;","import Link from \"next/link\";\n\nconst Pagination = ({ totalPages, pageNumber, handleClick }) => {\n const pages = [...Array(totalPages).keys()].map((num) => num + 1);\n\n const handlePreviousClick = () => {\n handleClick(pageNumber - 1);\n };\n\n const handleNextClick = () => {\n handleClick(pageNumber + 1);\n };\n\n return (\n \n );\n};\n\nexport default Pagination;\n","import Head from \"next/head\";\r\n\r\nconst PageHead = ({ title }) => {\r\n return (\r\n <>\r\n \r\n {title}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default PageHead;\r\n","import React, { useEffect, useRef } from \"react\";\n\nconst BackToTop = () => {\n const progressRef = useRef(null);\n\n useEffect(() => {\n const progressPath = progressRef.current?.querySelector(\"path\");\n if (!progressPath) return;\n\n const pathLength = progressPath.getTotalLength();\n progressPath.style.transition = \"none\";\n progressPath.style.strokeDasharray = `${pathLength} ${pathLength}`;\n progressPath.style.strokeDashoffset = pathLength;\n progressPath.getBoundingClientRect();\n progressPath.style.transition = \"stroke-dashoffset 10ms linear\";\n\n const updateProgress = () => {\n const scroll = window.pageYOffset || document.documentElement.scrollTop;\n const height =\n document.documentElement.scrollHeight -\n document.documentElement.clientHeight;\n const progress = pathLength - (scroll * pathLength) / height;\n progressPath.style.strokeDashoffset = progress;\n\n const rbtProgressParent = progressRef.current;\n if (rbtProgressParent) {\n if (scroll > 50) {\n rbtProgressParent.classList.add(\"rbt-backto-top-active\");\n } else {\n rbtProgressParent.classList.remove(\"rbt-backto-top-active\");\n }\n }\n };\n\n updateProgress();\n window.addEventListener(\"scroll\", updateProgress);\n\n progressRef.current?.addEventListener(\"click\", (event) => {\n event.preventDefault();\n window.scrollTo({ top: 0, behavior: \"smooth\" });\n });\n\n return () => {\n window.removeEventListener(\"scroll\", updateProgress);\n };\n }, []);\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport default BackToTop;\n","export const STORAGE_URL = \"https://storage.bunnycdn.com/materialdesignnative\";\nexport const ACCESS_KEY = \"ba8dd74c-5844-4d83-8523b4a5f50d-a128-4190\";\nexport const MAXIMUM_RECORDS_PER_PAGE = 50;\n\nexport const EmailRegex = \"\";\nexport const SupportedTerritories = \"\";\n\nexport const LOCALITY_TYPES = [\n {\n id: 0,\n name: \"International\",\n },\n {\n id: 1,\n name: \"Local\",\n },\n];\n\nexport const COMPLEXITY_TYPES = [\n {\n id: 0,\n name: \"Starter\",\n },\n {\n id: 1,\n name: \"Intemediate\",\n },\n {\n id: 2,\n name: \"Advanced\",\n },\n];\n\nexport const TASK_VERIFICATION_TYPES = [\n {\n id: 0,\n name: \"Manual\",\n },\n {\n id: 1,\n name: \"Automatic\",\n },\n];","import { DateTime } from \"luxon\";\nimport { EmailRegex, SupportedTerritories } from \"../constants/Constants\";\nimport { UserSessionUtils } from \"./UserSessionUtils\";\n//import { isValidPhoneNumber, parsePhoneNumber } from \"libphonenumber-js\";\nimport { FAILED_TO_LOAD_MESSAGE, INTERNAL_SERVER_ERROR } from \"../constants/ErrorMessages\";\n//import { Badge } from \"react-bootstrap\";\n\n/**\n * This formats a date from the Calendar object into the yyyy-mm-dd format\n * @param {*} date\n * @returns\n */\nexport function formatJSDate(date, showTime = false) {\n if (date == null) return null;\n if (!showTime) {\n var d = new Date(date),\n month = \"\" + (d.getMonth() + 1),\n day = \"\" + d.getDate(),\n year = d.getFullYear();\n\n if (month.length < 2) month = \"0\" + month;\n if (day.length < 2) day = \"0\" + day;\n\n return [year, month, day].join(\"-\");\n } else {\n return new Date(date).toISOString();\n }\n}\n\nexport function formatToStandardDate(date) {\n date = new Date(date);\n\n const day = date.toLocaleString(\"default\", { day: \"2-digit\" });\n const month = date.toLocaleString(\"default\", { month: \"short\" });\n const year = date.toLocaleString(\"default\", { year: \"numeric\" });\n return day + \"/\" + month + \"/\" + year;\n}\n\n/**\n * This converts a number to the en-us locale to put commas in the string\n *\n * @param {Number} amount\n * @returns\n */\nexport function formatAmountWithCommas(amount, currency) {\n if (amount) {\n var formattedAmount = amount.toLocaleString();\n return currency == null ? formattedAmount : currency + \" \" + formattedAmount;\n } else return \"0\";\n}\n\n/**\n * This converts a number to the en-us locale to put commas in the number\n *\n * @param {Number} number\n * @returns {String}\n */\nexport function formatNumberWithCommas(number, defaultNumber = \"-\") {\n if (number) {\n return number.toLocaleString();\n } else {\n return defaultNumber;\n }\n}\n\n/**\n * This converts a string of a date time instance to a date time string using the\n * luxon DateTime library\n *\n * @param {string} date_value\n * @returns {string}\n */\nexport function toReadableDate(date_value, date_only = false) {\n if (date_value == null) {\n return \"-\";\n } else if (date_value && date_only) {\n return DateTime.fromISO(date_value).toLocaleString(DateTime.DATE_MED_WITH_WEEKDAY);\n } else if (date_value && !date_only) {\n return DateTime.fromISO(date_value).toLocaleString(DateTime.DATETIME_MED_WITH_WEEKDAY);\n }\n}\n\nexport function convertEpochToReadableDateTime(epoch_time) {\n return new Date(epoch_time * 1000);\n}\n\n/**\n * This returns the current date time into an ISO string\n */\nexport function getCurrentDateTimeISOFormat() {\n return DateTime.now().toISO();\n}\n\n/**\n * This returns the first date of the current month\n */\nexport function getFirstDateOfMonth() {\n return DateTime.local().startOf(\"month\").toISODate();\n}\n\n/**\n * This returns the current date into an ISO string\n */\nexport function getCurrentDateISOFormat() {\n return DateTime.now().toISODate();\n}\n\nexport function getDateFromString(dateString) {\n return DateTime.fromISO(dateString);\n}\n\n/**\n * This method is used to get a date object from all passed date string.\n *\n * @param dateString\n * @returns\n */\nexport function getDateWithAnyString(dateString) {\n console.log(dateString);\n if (dateString == null) return null;\n console.log(dateString);\n return new Date(dateString);\n}\n\n/**\n * This gets the date before by subtracting the number of days from the current date\n * @param numberOfDays\n * @returns\n */\nexport function getDateBeforeByDays(numberOfDays) {\n const currentDate = new Date();\n return new Date(\n currentDate.getFullYear(),\n currentDate.getMonth(),\n currentDate.getDate() - numberOfDays\n );\n}\n\n/**\n * Check if the dictionary is empty\n * @param obj\n * @returns\n */\nexport function isDictEmpty(obj) {\n return Object.keys(obj).length === 0;\n}\n\nexport function replaceWithUnderscore(value) {\n return value.replace(/\\s+/g, \"_\").toLowerCase();\n}\n\n/**\n * This converts a boolean to a Yes or No string\n *\n * @param {Boolean} field\n * @returns\n */\nexport function formatBooleanFields(field) {\n if (field === null) return \"-\";\n else if (field === true) return \"Yes\";\n else if (field === false) return \"No\";\n}\n\nexport function sanitizeValue(recordValue) {\n return recordValue === null || recordValue === undefined ? \"-\" : recordValue;\n}\n\n/**\n * Generate random Id to be used as a device Id.\n *\n * @param length\n * @returns\n */\nexport function generateId(length) {\n var result = \"\";\n var characters = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\n var charactersLength = characters.length;\n for (var i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * This formats a string to replace string contents with the arguments index e.g.\n * formatString(\"{0} is {1} and {2}\", \"This\", \"Great\", \"Wonderful\") would return\n * \"This is Great and Wonderful\".\n */\nexport function formatString(str, ...replacements) {\n for (let index = 0; index < replacements.length; index++) {\n str = str.replace(`{${index}}`, replacements[index]);\n }\n return str;\n}\n\n/**\n * This splits the supplied string by commas and returns a valid string\n * @param {string} commaSeparatedString\n * @returns {Array} an array of strings\n */\nexport function splitCommaSeparatedString(commaSeparatedString) {\n if (commaSeparatedString !== null) {\n return commaSeparatedString.split(\",\").map((item) => {\n return item.trim();\n });\n }\n return [];\n}\n\n/**\n * This validates a string using the libphonenumber js lib through the supported territories\n *\n * @param {string} phoneNumber\n * @returns\n */\nexport function validatePhoneNumber(phoneNumber) {\n var result = false;\n SupportedTerritories.forEach((territory) => {\n if (isValidPhoneNumber(phoneNumber, territory.countryIsoCode)) {\n result = true;\n }\n });\n return result;\n}\n\n/**\n * This adds a plus character to a phone number string after checking if the first character is a +\n *\n * @param {string} phoneNumber\n */\nexport function addPlusCharacterToPhoneNumber(phoneNumber) {\n if (phoneNumber.charAt(0) !== \"+\") {\n return \"+\" + phoneNumber;\n }\n return phoneNumber;\n}\n\n/**\n * This validates a string using the libphonenumber js lib to make sure it is in an international format\n *\n * @param {string} phoneNumber\n */\nexport function validateInternationalPhoneNumber(phoneNumber) {\n var result = false;\n try {\n var parsedPhoneNumber = parsePhoneNumber(addPlusCharacterToPhoneNumber(phoneNumber));\n if (\n parsedPhoneNumber != null &&\n SupportedTerritories.filter((e) => e.countryIsoCode === parsedPhoneNumber.country).length >\n 0 &&\n parsedPhoneNumber.isValid()\n ) {\n result = true;\n }\n } catch (error) {\n result = false;\n }\n return result;\n}\n\n/**\n * This validates an email string using a regular expression\n *\n * @param {string} email\n * @returns\n */\nexport function validateEmail(email) {\n return email.match(EmailRegex);\n}\n\n/**\n * This returns the value from a key value list of dictionaries\n * @param arr\n * @param key\n * @returns\n */\nexport function getArrayKeyValue(arr, key) {\n let value = null;\n\n for (const element of arr) {\n if (element?.key === key) {\n value = element?.value;\n break;\n }\n }\n\n return value;\n}\n\n/**\n * This checks whether a user has a specific permission\n * @param permission\n * @returns boolean\n */\nexport function userHasPermission(permissionName) {\n let userDetails = UserSessionUtils.getUserDetails();\n if (userDetails?.isASuperAdmin) {\n return true;\n }\n return userDetails?.permissionLists?.some(\n (userPermission) => userPermission.permissionName === permissionName\n );\n}\n\n/**\n * This checks whether a user has a specific permission using the permission Id. This is better since it is an enum\n * value in the back office. Use a combination of permission Id and Module\n * @param permission\n * @returns boolean\n */\nexport function userHasPermissionId(module, permissionId) {\n let userDetails = UserSessionUtils.getUserDetails();\n if (userDetails?.isASuperAdmin) {\n return true;\n }\n return userDetails?.permissionLists?.some(\n (userPermission) =>\n userPermission.module === module && userPermission.permissionId === permissionId\n );\n}\n\n/**\n * This checks whether a user has a list of permissions by cross referencing the module id and permission id.\n * It uses the permission id and module id because they are enum values in the back office with least likely\n * chance to change.\n * @param module\n * @param permissions\n * @returns\n */\nexport function userHasModulePermissions(module, permissions) {\n let userDetails = UserSessionUtils.getUserDetails();\n if (userDetails?.isASuperAdmin) {\n return true;\n }\n return userPermissionsContains(userDetails?.permissionLists, module, permissions);\n}\n\nexport function userPermissionsContains(userPermissionsList, module, permissionsArray) {\n return userPermissionsList?.some(\n (userPermission) =>\n userPermission.module === module && permissionsArray.includes(userPermission.permissionId)\n );\n}\n\nexport function arrayContains(arrayObject, value) {\n return arrayObject?.some((object) => value === object);\n}\n\nexport function getGoogleMapsURL(latitude, longitude) {\n return `https://www.google.com/maps/search/?api=1&query=${latitude},${longitude}`;\n}\n\n/**\n * This gets the default year range for the date picker to display when selecting a date in the past.\n * @returns\n */\nexport function getDefaultYearRange() {\n return `1900:${new Date().getFullYear() + 1}`;\n}\n\n/**\n * This gets the year range for a datepicker when selecting a date in the past and future\n * @param numberOfYearsBefore\n * @param numberOfYearsAfter\n * @returns\n */\nexport function getYearRange(numberOfYearsBefore, numberOfYearsAfter) {\n return `${new Date().getFullYear() - numberOfYearsBefore}:${\n new Date().getFullYear() + numberOfYearsAfter\n }`;\n}\n\n/**\n * This converts a string to all lower cases using the typescript fn of toLowerCase\n * @param stringToConvert\n * @returns\n */\nexport function convertToLowerCase(stringToConvert) {\n try {\n return stringToConvert?.toLowerCase();\n } catch (error) {\n return stringToConvert;\n }\n}\n\n/**\n * This templates returns formated text hyperlinked to the google maps page with the supplied coordinates\n * @param data :{ latitude; longitude }\n * @returns\n */\nexport const googleMapsLinkTemplate = (data) => {\n if (\n data?.latitude !== null &&\n data?.latitude !== undefined &&\n data?.longitude !== null &&\n data?.longitude !== undefined\n ) {\n return (\n {`${data?.latitude}, ${data?.longitude}`}\n );\n }\n};\n\n/**\n * Use this function to replace the default internal server error message with a\n * specific message of the object that failed to load\n * @param error\n * @param objectName\n * @returns\n */\nexport const sanitizeErrorMessage = (error, objectName) => {\n return error.message === INTERNAL_SERVER_ERROR\n ? formatString(FAILED_TO_LOAD_MESSAGE, objectName)\n : error.message;\n};\n\n/**\n * Truncates a string based on the max string size supplied\n * @param str\n * @param maxSize\n * @returns\n */\nexport const truncate = (str, maxSize) => {\n if (str === null || str === undefined) {\n return \"\";\n }\n return str.length > maxSize ? str.substring(0, maxSize) + \"...\" : str;\n};\n\n/**\n * Gives the status string custom styles\n * @param rowData\n * @returns\n */\nexport const statusBodyTemplate = (status) => {\n const bgName = \"secondary\";\n const knownStyle = toStyleClassName(status);\n return (\n \n {status}\n \n );\n};\n\nexport const renderPlainHtml = (content) => {\n return
;\n};\n/**\n * Replace underscore with space and capitalize each word.\n *\n * @param value\n * @returns\n */\nexport const replaceUnderscoreWithSpace = (value) => {\n if (value == null) return null;\n return value\n .toLowerCase()\n .split(\"_\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n};\n\n/**\n * To perform the binary-to-Base64 conversion of a file:\n * @param buffer\n * @returns\n */\nexport function arrayBufferToBase64(buffer) {\n var binary = \"\";\n var bytes = new Uint8Array(buffer);\n var len = bytes.byteLength;\n for (var i = 0; i < len; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\n/**\n * This converts a number string to an integer using parseInt. If the nu\n * @param numberString\n * @returns\n */\nexport function convertStringToNumber(numberString) {\n if (numberString !== null) return parseInt(numberString);\n return numberString;\n}\n/**\n * Removes white spaces from a string\n * @param anyString\n * @returns\n */\nexport function removeWhiteSpaces(anyString) {\n if (isEmpty(anyString)) {\n return null;\n }\n return anyString.replace(/\\s/g, \"\").toLocaleLowerCase();\n}\n\n/**\n * Cleans a string into the css style class name format\n * @param anyString\n * @returns\n */\nexport function toStyleClassName(anyString) {\n if (isEmpty(anyString)) {\n return null;\n }\n return removeWhiteSpaces(anyString)?.toLocaleLowerCase();\n}\n\nexport function genericDateBodyTemplate(displayDate) {\n return

{toReadableDate(displayDate, true)}

;\n}\n\nexport function genericAmountBodyTemplate(displayAmount) {\n return formatAmountWithCommas(displayAmount, null);\n}\n\n/**\n *\n * @param anyValue Returns true if a given object is null or undefined\n * @returns\n */\nexport function isEmpty(anyValue) {\n if (anyValue == undefined || anyValue == null || anyValue == \"null\") {\n return true;\n } else {\n return false;\n }\n}\n\n/**\n *\n * @param {*} anyValue\n * @returns\n */\nexport function isNotEmpty(anyValue) {\n return !isEmpty(anyValue);\n}\n\n/**\n * Converts a JSON object into a form data object\n * @param jsonData\n * @returns FormData object\n */\nexport function jsonToFormData(jsonData) {\n let accountProfileFormData = new FormData();\n for (var itemKey in jsonData) {\n if (jsonData[itemKey] !== undefined && jsonData[itemKey] !== null) {\n accountProfileFormData.append(itemKey, jsonData[itemKey]);\n }\n }\n return accountProfileFormData;\n}\n\nexport function sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n"],"names":["__webpack_exports__","Z","course","start","end","param","toggle","useAppContext","courses","setCourse","useState","page","setPage","totalPages","setTotalPages","startIndex","getSelectedCourse","slice","useEffect","Math","ceil","length","console","log","JSON","stringify","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsxs","Fragment","jsx","div","className","concat","map","data","index","Link","href","id","img","src","isNotEmpty","coverImageUrl","alt","width","height","style","span","cost","_","ratingValue","i","floor","averageRating","Number","isInteger","ratingsCount","title","h4","ul","li","numberOfLessons","p","display","WebkitLineClamp","WebkitBoxOrient","overflow","textOverflow","description","instructor","imageUrl","fullName","category","name","price","discountedPrice","Pagination","pageNumber","handleClick","num","window","scrollTo","top","behavior","pages","Array","keys","handlePreviousClick","handleNextClick","nav","aria-label","onClick","Head","meta","content","link","rel","progressRef","useRef","progressPath","current","querySelector","pathLength","getTotalLength","transition","strokeDasharray","strokeDashoffset","getBoundingClientRect","updateProgress","scroll","pageYOffset","document","documentElement","scrollTop","progress","scrollHeight","clientHeight","rbtProgressParent","classList","add","remove","addEventListener","event","preventDefault","removeEventListener","ref","svg","viewBox","path","d","toReadableDate","date_value","date_only","DateTime","fromISO","toLocaleString","DATE_MED_WITH_WEEKDAY","DATETIME_MED_WITH_WEEKDAY","anyValue","undefined"],"sourceRoot":""}