{"version":3,"file":"static/chunks/pages/course-filter-one-open-dd87daddb7356dbb.js","mappings":"sFACA,CAAAA,OAAAC,QAAA,CAAAD,OAAAC,QAAA,MAAAC,IAAA,EACA,0BACA,WACA,OAAeC,EAAQ,MACvB,EACA,wECuCAC,CAAAA,EAAAC,CAAA,CA3CmB,OAAC,CAAEC,WAAAA,CAAU,CAAEC,WAAAA,CAAU,CAAEC,YAAAA,CAAW,CAAE,CAAAC,EACnDC,EAAQ,IAAIC,MAAML,GAAYM,IAAI,GAAG,CAACC,GAAG,CAAC,GAASC,EAAM,GAEzDC,EAAsB,KAC1BP,EAAYD,EAAa,EAC3B,EAEMS,EAAkB,KACtBR,EAAYD,EAAa,EAC3B,EAEA,MACE,GAAAU,EAAAC,GAAA,EAACC,MAAAA,UACC,GAAAF,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,qBACb,GAAAJ,EAAAK,IAAA,EAACC,KAAAA,CAAGF,UAAU,2BACZ,GAAAJ,EAAAC,GAAA,EAACM,KAAAA,CAAGH,UAAWd,IAAAA,EAAmB,WAAa,YAC7C,GAAAU,EAAAC,GAAA,EAACO,IAAIA,CACHC,KAAK,IACLC,aAAW,WACXC,QAAS,IAAMb,aAEf,GAAAE,EAAAC,GAAA,EAACW,IAAAA,CAAER,UAAU,6BAGhBX,EAAMG,GAAG,CAAC,GACT,GAAAI,EAAAC,GAAA,EAACM,KAAAA,CAAaH,UAAWd,IAAeO,EAAM,SAAW,YACvD,GAAAG,EAAAC,GAAA,EAACO,IAAIA,CAACC,KAAK,IAAIE,QAAS,IAAMpB,EAAYM,YACvCA,KAFIA,IAOX,GAAAG,EAAAC,GAAA,EAACM,KAAAA,CAAGH,UAAWd,IAAeD,EAAa,WAAa,YACtD,GAAAW,EAAAC,GAAA,EAACO,IAAIA,CAACC,KAAK,IAAIC,aAAW,OAAOC,QAAS,IAAMZ,aAC9C,GAAAC,EAAAC,GAAA,EAACW,IAAAA,CAAER,UAAU,oCAO3B,8EC5BAjB,CAAAA,EAAA,QAbiB,OAAC,CAAE0B,MAAAA,CAAK,CAAE,CAAArB,EACzB,MACE,GAAAQ,EAAAC,GAAA,EAAAD,EAAAc,QAAA,WACE,GAAAd,EAAAK,IAAA,EAACU,IAAIA,WACH,GAAAf,EAAAC,GAAA,EAACY,QAAAA,UAAOA,IACR,GAAAb,EAAAC,GAAA,EAACe,OAAAA,CAAKC,KAAK,cAAcC,QAAQ,qBACjC,GAAAlB,EAAAC,GAAA,EAACe,OAAAA,CAAKC,KAAK,WAAWC,QAAQ,wCAC9B,GAAAlB,EAAAC,GAAA,EAACkB,OAAAA,CAAKC,IAAI,OAAOX,KAAK,qBAI9B,uOCsFA,IAAMY,EAAa,OAAC,CAAEC,OAAAA,CAAM,CAAEC,MAAAA,CAAK,CAAEC,IAAAA,CAAG,CAAE,CAAAhC,EAClC,CAAEiC,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,CAACxC,EAAY2C,EAAc,CAAGH,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAEvCI,EAAa,CAACH,EAAO,GAAK,EAE1BI,EAAoBP,EAAQQ,KAAK,CAACF,EAAYA,EAAa,GAmBjE,MATAG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACRR,EAAUN,GACVU,EAAcK,KAAKC,IAAI,CAAChB,EAAOiB,MAAM,CAAG,GAC1C,EAAG,CAACP,EAAeJ,EAAWM,EAAkB,EAG9CM,QAAQC,GAAG,CAAC,WAAaC,KAAKC,SAAS,CAAChB,IAIxC,GAAA3B,EAAAK,IAAA,EAAAL,EAAAc,QAAA,YACE,GAAAd,EAAAC,GAAA,EAACE,MAAAA,CACCC,UAAW,0BACRwC,MAAA,CADkC,EAA+B,GAArB,6BAG9CtB,EAAOa,KAAK,CAACZ,EAAOC,GAAK5B,GAAG,CAAC,CAACiD,EAAMC,SA4EbD,EAAiCA,EAINA,EACpBA,QAhF7B,GAAA7C,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,yBACb,GAAAJ,EAAAK,IAAA,EAACF,MAAAA,CACCC,UAAW,mCACRwC,MAAA,CAD2C,EAA0B,GAAhB,yBAGxD,GAAA5C,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,wBACb,GAAAJ,EAAAK,IAAA,EAACG,IAAIA,CAACC,KAAM,mBAA2BmC,MAAA,CAARC,EAAKE,EAAE,YACpC,GAAA/C,EAAAC,GAAA,EAAC+C,MAAAA,CAAIC,IAAKC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAKM,aAAa,EACnCN,EAAKM,aAAa,CAClB,2HACFC,IAAI,aAAaC,MAAO,IAAKC,OAAQ,IAAKC,MAAO,CAAEF,MAAO,IAAKC,OAAQ,GAAI,IAC7E,GAAAtD,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,iCACb,GAAAJ,EAAAK,IAAA,EAACmD,OAAAA,WAAK,IAAEX,EAAKY,IAAI,CAAC,OAClB,GAAAzD,EAAAC,GAAA,EAACuD,OAAAA,UAAK,gBAIZ,GAAAxD,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,0BACb,GAAAJ,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,yBACb,GAAAJ,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,uBACb,GAAAJ,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,kBACZ,oCAAa,CAACR,GAAG,CAAC,CAAC8D,EAAGZ,KACrB,IAAMa,EAAcb,EAAQ,EAC5B,MACE,GAAA9C,EAAAC,GAAA,EAACW,IAAAA,CAECR,UACEuD,GAAetB,KAAKuB,KAAK,CAACf,MAAAA,EAAAA,KAAAA,EAAAA,EAAMgB,aAAa,EACzC,cACAF,IAAgBtB,KAAKC,IAAI,CAACO,MAAAA,EAAAA,KAAAA,EAAAA,EAAMgB,aAAa,GAAMC,OAAOC,SAAS,CAAClB,MAAAA,EAAAA,KAAAA,EAAAA,EAAMgB,aAAa,EAErF,cADA,wBALHf,EAUX,KAEF,GAAA9C,EAAAK,IAAA,EAACmD,OAAAA,CAAKpD,UAAU,yBAAe,IAC3ByC,EAAKmB,YAAY,CAAC,kBAGxB,GAAAhE,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,4BACb,GAAAJ,EAAAC,GAAA,EAACO,IAAIA,CAACJ,UAAU,gBAAgBS,MAAM,WAAWJ,KAAK,aACpD,GAAAT,EAAAC,GAAA,EAACW,IAAAA,CAAER,UAAU,4BAKnB,GAAAJ,EAAAC,GAAA,EAACgE,KAAAA,CAAG7D,UAAU,0BACZ,GAAAJ,EAAAC,GAAA,EAACO,IAAIA,CAACC,KAAM,mBAA2BmC,MAAA,CAARC,EAAKE,EAAE,WACnCF,EAAKhC,KAAK,KAIf,GAAAb,EAAAK,IAAA,EAACC,KAAAA,CAAGF,UAAU,qBACZ,GAAAJ,EAAAK,IAAA,EAACE,KAAAA,WACC,GAAAP,EAAAC,GAAA,EAACW,IAAAA,CAAER,UAAU,iBACZyC,EAAKqB,eAAe,CAAC,cAExB,GAAAlE,EAAAK,IAAA,EAACE,KAAAA,WACC,GAAAP,EAAAC,GAAA,EAACW,IAAAA,CAAER,UAAU,kBACZyC,EAAKqB,eAAe,CAAC,kBAI1B,GAAAlE,EAAAC,GAAA,EAACkE,IAAAA,CAAE/D,UAAU,gBAAgBmD,MAAO,CAClCa,QAAS,cACTC,gBAAiB,EACjBC,gBAAiB,WACjBC,SAAU,SACVC,aAAc,UAChB,WAAI3B,EAAK4B,WAAW,GACpB,GAAAzE,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,mCACb,GAAAJ,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,sBACb,GAAAJ,EAAAC,GAAA,EAACO,IAAIA,CAACC,KAAK,aACT,GAAAT,EAAAC,GAAA,EAAC+C,MAAAA,CAAIC,IAAKJ,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAM6B,UAAU,GAAhB7B,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAkB8B,QAAQ,CAAEvB,IAAKP,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAM6B,UAAU,GAAhB7B,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAkB+B,QAAQ,CAAEvB,MAAO,IAAKC,OAAQ,UAG/F,GAAAtD,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,4BAAkB,MAC5B,GAAAJ,EAAAC,GAAA,EAACO,IAAIA,CAACC,KAAM,YAAoBmC,MAAA,CAARC,EAAKE,EAAE,WAAKF,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAM6B,UAAU,GAAhB7B,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAkB+B,QAAQ,GAAS,IAAI,MAC3E,GAAA5E,EAAAC,GAAA,EAACO,IAAIA,CAACC,KAAK,aAAKoC,MAAAA,EAAAA,KAAAA,EAAAA,OAAAA,CAAAA,EAAAA,EAAMgC,QAAQ,GAAdhC,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAgB5B,IAAI,SAG3C,GAAAjB,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,4BACb,GAAAJ,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,sBACb,GAAAJ,EAAAK,IAAA,EAACmD,OAAAA,CAAKpD,UAAU,0BAAgB,IAAEyC,EAAKiC,KAAK,IAC5C,GAAA9E,EAAAK,IAAA,EAACmD,OAAAA,CAAKpD,UAAU,sBAAY,IAAEyC,EAAKkC,eAAe,OAEpD,GAAA/E,EAAAK,IAAA,EAACG,IAAIA,CACHJ,UAAU,eACVK,KAAM,mBAA2BmC,MAAA,CAARC,EAAKE,EAAE,YACjC,aACW,GAAA/C,EAAAC,GAAA,EAACW,IAAAA,CAAER,UAAU,qCA5FG0C,OAqGvCxB,EAAOiB,MAAM,CAAG,EACf,GAAAvC,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,eACb,GAAAJ,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,4BACb,GAAAJ,EAAAC,GAAA,EAAC+E,EAAAA,CAAUA,CAAAA,CACT3F,WAAYA,EACZC,WAAYwC,EACZvC,YAnIQ,IAClBwC,EAAQlC,GACRd,OAAOkG,QAAQ,CAAC,CACdC,IAAK,EACLC,SAAU,QACZ,EACF,QAkIM,KAIR,CAYAhG,CAAAA,EAAA,QApPiC,KAC/B,GAAM,CAAC2C,EAAMC,EAAQ,CAAGF,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAC3B,CAACxC,EAAY2C,EAAc,CAAGH,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAEvC,CAACF,EAASyD,EAAW,CAAGvD,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,EAAE,EAEnCwD,EAAe,UAEnB,GAAI,CACF,IAAMC,EAAW,MAAM,IAAIC,EAAAA,CAAcA,CAAC,YAAYC,0BAA0B,CAF3D,CAAEC,WAAY,GAAIC,OAAQ,EAAGC,MAAO,EAAG,GAK5DnD,QAAQC,GAAG,CAAC,mBAAoB6C,GAC5BA,GAAYA,EAASM,OAAO,EAC9BR,EAAWE,EAASM,OAAO,EAC3BpD,QAAQC,GAAG,CAAC,eAAgB6C,EAASM,OAAO,GAE5CpD,QAAQqD,KAAK,CAAC,iCAAkCP,EAEpD,CAAE,MAAOO,EAAO,CACdrD,QAAQqD,KAAK,CAAC,uCAAwCA,EACxD,CACF,EAEM5D,EAAa,CAACH,EAAO,GAAK,EAE1BI,EAAoBP,EAAQQ,KAAK,CAACF,EAAYA,EAAa,GAejE,MALAG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACRiD,IACArD,EAAcK,KAAKC,IAAI,CAACX,EAAQY,MAAM,CAAG,GAC3C,EAAG,CAACP,EAAeoD,EAAW,EAG5B,GAAApF,EAAAK,IAAA,EAAAL,EAAAc,QAAA,YACE,GAAAd,EAAAC,GAAA,EAAC6F,EAAAA,OAAQA,CAAAA,CAACjF,MAAM,0EAEhB,GAAAb,EAAAC,GAAA,EAAC8F,EAAAA,EAAQA,CAAAA,CAACC,MAAOC,EAAAA,CAAKA,UACpB,GAAAjG,EAAAK,IAAA,EAAC6F,EAAAA,EAAOA,CAAAA,WACN,GAAAlG,EAAAC,GAAA,EAACkG,EAAAA,CAAcA,CAAAA,CAACC,aAAa,aAAaC,WAAY,KACtD,GAAArG,EAAAC,GAAA,EAACqG,EAAAA,CAAUA,CAAAA,CAAAA,GACX,GAAAtG,EAAAC,GAAA,EAACsG,EAAAA,CAAIA,CAAAA,CAAAA,GAEL,GAAAvG,EAAAC,GAAA,EAACuG,EAAAA,CAAYA,CAAAA,CAAC3B,SAAUlD,IACxB,GAAA3B,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,6DACb,GAAAJ,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,iBACb,GAAAJ,EAAAK,IAAA,EAACF,MAAAA,CAAIC,UAAU,sBACb,GAAAJ,EAAAC,GAAA,EAACoB,EAAAA,CAAWC,OAAQY,IAEnBP,EAAQY,MAAM,CAAG,EAChB,GAAAvC,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,eACb,GAAAJ,EAAAC,GAAA,EAACE,MAAAA,CAAIC,UAAU,4BACb,GAAAJ,EAAAC,GAAA,EAAC+E,EAAAA,CAAUA,CAAAA,CACT3F,WAAYA,EACZC,WAAYwC,EACZvC,YAnCF,IAClBwC,EAAQlC,GACRd,OAAOkG,QAAQ,CAAC,CACdC,IAAK,EACLC,SAAU,QACZ,EACF,QAkCgB,UAMR,GAAAnF,EAAAC,GAAA,EAACwG,EAAAA,CAASA,CAAAA,CAAAA,GACV,GAAAzG,EAAAC,GAAA,EAACyG,EAAAA,CAASA,CAAAA,CAACC,QAAQ,2BAK7B,uHEzBO,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,SAASjE,EAAWkE,CAAQ,EACjC,MAAO,CAbHA,CAAAA,KAAYC,GAaAD,GAbaA,MAabA,GAbiCA,QAajCA,CAb6C,CAc/D","sources":["webpack://_N_E/?9ceb","webpack://_N_E/./components/Common/Pagination.js","webpack://_N_E/./pages/Head.js","webpack://_N_E/./pages/course-filter-one-open/index.js","webpack://_N_E/./constants/Constants.js","webpack://_N_E/./utils/Utils.js","webpack://_N_E/"],"sourcesContent":["\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/course-filter-one-open\",\n function () {\n return require(\"private-next-pages/course-filter-one-open/index.js\");\n }\n ]);\n if(module.hot) {\n module.hot.dispose(function () {\n window.__NEXT_P.push([\"/course-filter-one-open\"])\n });\n }\n ","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, useState } from \"react\";\n\nimport PageHead from \"../Head\";\nimport { Provider } from \"react-redux\";\nimport Context, { useAppContext } from \"@/context/Context\";\nimport Store from \"@/redux/store\";\nimport HeaderStyleTen from \"@/components/Header/HeaderStyle-Ten\";\nimport MobileMenu from \"@/components/Header/MobileMenu\";\nimport Cart from \"@/components/Header/Offcanvas/Cart\";\nimport Separator from \"@/components/Common/Separator\";\nimport FooterOne from \"@/components/Footer/Footer-One\";\nimport CategoryHead from \"@/components/Category/CategoryHead\";\nimport Pagination from \"@/components/Common/Pagination\";\nimport { BaseApiService } from \"@/utils/BaseApiService\";\nimport { isNotEmpty } from \"@/utils/Utils\";\nimport Link from \"next/link\";\n\nconst CourseFilerOneOpenLayout = () => {\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(0);\n\n const [courses, setCourses] = useState([]);\n\n const fetchCourses = async () => {\n let searchParameters = { searchTerm: \"\", offset: 0, limit: 10 };\n try {\n const response = await new BaseApiService(\"/courses\").getRequestWithJsonResponse(\n searchParameters\n );\n console.log(\"Course Response:\", response);\n if (response && response.records) {\n setCourses(response.records);\n console.log(\"Courses set:\", response.records); // Log the state update\n } else {\n console.error(\"Unexpected response structure:\", response);\n }\n } catch (error) {\n console.error(\"fetchCourses:fetchDataFromServer>>>>\", error);\n }\n };\n\n const startIndex = (page - 1) * 6;\n\n const getSelectedCourse = courses.slice(startIndex, startIndex + 6);\n\n const handleClick = (num) => {\n setPage(num);\n window.scrollTo({\n top: 0,\n behavior: \"smooth\",\n });\n };\n\n useEffect(() => {\n fetchCourses();\n setTotalPages(Math.ceil(courses.length / 6));\n }, [setTotalPages, setCourses]);\n\n return (\n <>\n \n\n \n \n \n \n \n\n \n
\n
\n
\n \n\n {courses.length > 6 ? (\n
\n
\n \n
\n
\n ) : (\n \"\"\n )}\n
\n
\n
\n\n \n \n
\n
\n \n );\n};\n\nconst CourseCard = ({ course, start, end }) => {\n const { toggle } = useAppContext();\n const [courses, setCourse] = useState([]);\n const [page, setPage] = useState(1);\n const [totalPages, setTotalPages] = useState(0);\n\n const startIndex = (page - 1) * 6;\n\n const getSelectedCourse = courses.slice(startIndex, startIndex + 6);\n\n const handleClick = (num) => {\n setPage(num);\n window.scrollTo({\n top: 0,\n behavior: \"smooth\",\n });\n };\n\n useEffect(() => {\n setCourse(course);\n setTotalPages(Math.ceil(course.length / 6));\n }, [setTotalPages, setCourse, getSelectedCourse]);\n\n {\n console.log(\"Courses \" + JSON.stringify(courses));\n }\n\n return (\n <>\n \n {course.slice(start, end).map((data, index) => (\n
\n \n
\n \n \"Card\n
\n -{data.cost}%\n Off\n
\n \n
\n
\n
\n
\n
\n {[...Array(5)].map((_, index) => {\n const ratingValue = index + 1;\n return (\n \n );\n })}\n
\n \n ({data.ratingsCount} Reviews)\n \n
\n
\n \n \n \n
\n
\n\n

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

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

{data.description}

\n
\n
\n \n {data?.instructor?.fullName}\n \n
\n
\n By {data?.instructor?.fullName}{\" \"}\n In {data?.category?.name}\n
\n
\n
\n
\n ${data.price}\n ${data.discountedPrice}\n
\n \n Learn More\n \n
\n
\n
\n \n ))}\n \n\n {course.length > 6 ? (\n
\n
\n \n
\n
\n ) : (\n \"\"\n )}\n \n );\n};\n\nconst styles = {\n truncateText: {\n display: '-webkit-box',\n WebkitLineClamp: 3,\n WebkitBoxOrient: 'vertical',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n }\n};\n\nexport default CourseFilerOneOpenLayout;","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":["window","__NEXT_P","push","__webpack_require__","__webpack_exports__","Z","totalPages","pageNumber","handleClick","param","pages","Array","keys","map","num","handlePreviousClick","handleNextClick","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","jsx","nav","div","className","jsxs","ul","li","Link","href","aria-label","onClick","i","title","Fragment","Head","meta","name","content","link","rel","CourseCard","course","start","end","toggle","useAppContext","courses","setCourse","useState","page","setPage","setTotalPages","startIndex","getSelectedCourse","slice","useEffect","Math","ceil","length","console","log","JSON","stringify","concat","data","index","id","img","src","isNotEmpty","coverImageUrl","alt","width","height","style","span","cost","_","ratingValue","floor","averageRating","Number","isInteger","ratingsCount","h4","numberOfLessons","p","display","WebkitLineClamp","WebkitBoxOrient","overflow","textOverflow","description","instructor","imageUrl","fullName","category","price","discountedPrice","Pagination","scrollTo","top","behavior","setCourses","fetchCourses","response","BaseApiService","getRequestWithJsonResponse","searchTerm","offset","limit","records","error","PageHead","Provider","store","Store","Context","HeaderStyleTen","headerSticky","headerType","MobileMenu","Cart","CategoryHead","Separator","FooterOne","bgColor","toReadableDate","date_value","date_only","DateTime","fromISO","toLocaleString","DATE_MED_WITH_WEEKDAY","DATETIME_MED_WITH_WEEKDAY","anyValue","undefined"],"sourceRoot":""}