{"version":3,"sources":["_metronic/partials/widgets/chartsComponents/TwoY_AxisChart.tsx","_metronic/partials/widgets/lists/ListsWidget6.tsx","_metronic/partials/widgets/statistics/StatisticsWidget5.tsx","app/modules/Hotel/HotelService.ts","_metronic/partials/widgets/mixed/MixedWidget1.tsx","_metronic/assets/ts/_utils/_ElementStyleUtil.ts","_metronic/assets/ts/_utils/_DataUtil.ts","_metronic/assets/ts/_utils/_TypesHelpers.ts","_metronic/assets/ts/_utils/_DOMEventHandlerUtil.ts","_metronic/assets/ts/_utils/ElementAnimateUtil.ts","_metronic/assets/ts/_utils/DomHelpers.ts","_metronic/assets/ts/_utils/EventHandlerUtil.ts","_metronic/layout/core/MetronicSplashScreen.tsx","_metronic/i18n/Metronici18n.tsx","_metronic/i18n/i18nProvider.tsx","app/contexts/CustomContextHook/useHotel.js","_metronic/layout/components/aside/AsideMenuItemWithSub.tsx","_metronic/layout/components/aside/AsideMenuItem.tsx","_metronic/layout/components/aside/AsideMenuMain.js","_metronic/assets/ts/components/_CookieComponent.ts","_metronic/assets/ts/components/_DrawerComponent.ts","_metronic/assets/ts/components/_FeedbackComponent.ts","_metronic/assets/ts/components/_ImageInputComponent.ts","_metronic/assets/ts/components/_ScrollComponent.ts","_metronic/assets/ts/components/_ScrollTopComponent.ts","_metronic/assets/ts/components/_StepperComponent.ts","_metronic/assets/ts/components/_StickyComponent.ts","_metronic/assets/ts/components/_ToggleComponent.ts","_metronic/assets/ts/components/_PasswordMeterComponent.ts","_metronic/assets/ts/components/_SwapperComponent.ts","_metronic/assets/ts/components/MenuComponent.ts","_metronic/assets/ts/components/SearchComponent.ts","_metronic/layout/components/aside/AsideMenu.tsx","_metronic/layout/components/aside/AsideDefault.tsx","_metronic/layout/components/Footer.tsx","app/contexts/isAuthorizedContext.tsx","_metronic/partials/layout/header-menus/HeaderNotificationsMenu.js","_metronic/partials/content/fallback-view/FallbackView.tsx","_metronic/partials/content/portal/Portal.tsx","_metronic/layout/components/header/Topbar.tsx","_metronic/layout/components/header/HeaderWrapper.tsx","_metronic/layout/components/ScrollTop.tsx","_metronic/layout/components/Content.tsx","_metronic/layout/MasterInit.tsx","_metronic/layout/components/header/page-title/DefaultTitle.tsx","_metronic/layout/components/toolbar/Toolbar1.tsx","_metronic/layout/components/toolbar/Toolbar.tsx","_metronic/layout/MasterLayout.tsx","app/pages/dashboard/components/AllHotelsListingComponent.js","app/pages/dashboard/AllHotelsWrapper.tsx","_metronic/partials/widgets/statistics/DashboardWidget.tsx","app/pages/dashboard/components/CarouselComponent.js","app/pages/dashboard/components/DashboardComponentSlider.js","app/pages/dashboard/DashboardWrapper.tsx","app/common/auth-verify.js","app/routing/PrivateRoutes.tsx","app/modules/auth/services/AuthCRUD.ts","app/modules/auth/components/ResetPassword.tsx","app/modules/auth/components/ForgotPassword.tsx","app/modules/auth/components/Login.js","app/modules/auth/AuthPage.tsx","app/modules/auth/__mocks__/usersTableMock.ts","app/modules/auth/Logout.tsx","app/modules/errors/components/Error500.tsx","app/modules/errors/components/Error404.tsx","app/modules/errors/ErrorsPage.tsx","app/routing/Routes.js","app/App.tsx","index.tsx","app/contexts/CustomContextHook/useAuth.tsx","app/contexts/HotelContext.tsx","_metronic/layout/core/LayoutSetup.ts","_metronic/helpers/AssetHelpers.ts","_metronic/helpers/RouterHelpers.ts","_metronic/helpers/components/KTSVG.tsx","_metronic/layout/core/DefaultLayoutConfig.ts","_metronic/layout/core/LayoutProvider.tsx","app/modules/Department/DepartmentService.ts","_metronic/assets/gifs/480px-Loader.gif","app/modules/FullPageLoader/index.js","_metronic/layout/core/PageData.tsx"],"names":["TwoY_AxisChart","ChartTitle","XAxislabels","Dataset_1_Array","Dataset_1_Title","Dataset_2_Array","Dataset_2_Title","options","responsive","interaction","mode","intersect","stacked","plugins","title","display","text","scales","y","type","position","font","size","y1","grid","drawOnChartArea","data","labels","datasets","label","borderColor","backgroundColor","yAxisID","tension","style","ChartJS","register","CategoryScale","LinearScale","PointElement","LineElement","Title","Tooltip","Legend","ListsWidget6","className","value1","value2","value3","label2","label1","label3","hotelId","hotelName","setHotelID","setHotelName","latestWeeklyWrapUpReportId","latestDocumentLibraryId","latestEOMLibraryId","latestLinenInventoryReportId","latestPayrollReportId","history","useHistory","setHotel","cursor","onClick","push","toast","info","POSITION","TOP_RIGHT","path","padding","pathname","state","ActiveTab","StatisticsWidget5","color","svgIcon","iconColor","description","Hotel_URL","API_URL","GetAllHotels","accessToken","axios","get","headers","GetHotelsByUser","LoggedInUser","GetDashboardData","GetHotels","GetHotelById","id","PostHotel","model","console","log","post","UpdateHotel","put","DeleteHotel","delete","MixedWidget1","titleLabel","label4","text1","text2","text3","text4","titleValue","value4","show1","condition1","condition2","condition3","condition4","show2","show3","show4","marginTop","paddingMarginClasses","showTitleTab","icon4","icon1","icon2","icon3","ElementStyleUtil","element","property","value","important","setProperty","attributeName","getPropertyValue","attibuteName","removeProperty","DataUtil","instance","key","instanceData","store","set","newMap","Map","has","result","forEach","val","v","k","getObjectPropertyValueByKey","obj","map","Object","entries","hasOwnProperty","getUniqueIdWithPrefix","prefix","Math","floor","random","Date","getTime","toString","stringSnakeToCamel","str","replace","m","toUpperCase","DOMEventHandlerUtil","selector","eventName","callBack","eventId","e","targets","querySelectorAll","target","i","length","call","parentElement","addEventListener","funcFromStore","removeEventListener","calee","currentTarget","ElementAnimateUtil","from","to","duration","update","complete","easings","t","b","c","d","change","start","window","performance","now","requestAnimationFrame","loop","timestamp","time","animationName","animateClasses","split","cssClass","classList","add","one","remove","offset","targetPos","getElementOffset","top","scrollPos","pageYOffset","document","documentElement","scrollTop","body","animate","scrollTo","getCSS","el","styleProp","defaultView","ownerDocument","toLowerCase","getComputedStyle","getCSSVariableValue","variableName","hex","trim","getElementActualCss","prop","cache","css","getAttribute","cssText","offsetWidth","offsetHeight","undefined","setAttribute","parseFloat","attributeValue","getElementIndex","parentNode","children","getElementMatches","p","Element","prototype","f","matches","webkitMatchesSelector","tagName","getClientRects","left","rect","getBoundingClientRect","win","pageXOffset","getElementParents","s","this","item","parents","getHighestZindex","bufferNode","buffer","parseInt","isNaN","getScrollTop","scrollingElement","getViewPort","width","innerWidth","height","innerHeight","insertAfterElement","referenceNode","insertBefore","nextSibling","isVisibleElement","throttle","timer","func","delay","setTimeout","getElementChild","childNodes","child","nodeType","getElementChildren","slide","dir","speed","callback","calcHeight","getElementActualHeight","calcPaddingTop","calcPaddingBottom","paddingTop","paddingBottom","overflow","slideUp","slideDown","getBreakpoint","breakpoint","getAttributeValueByBreakpoint","incomingAttr","jsonStr","join","matched","substring","JSON","parse","toJSON","resultKey","resultBreakpoint","EventHandlerUtil","name","metas","handlerId","meta","getEventMetasByName","setEventMetasByName","handerId","fired","getEventsMetaByHandlerId","setEventMetaByNameAndHandlerId","handler","setFiredByNameAndHandlerId","addEvent","removeEvent","on","MetronicSplashScreenContext","createContext","LayoutSplashScreen","visible","setCount","useContext","useEffect","prev","I18N_CONFIG_KEY","process","REACT_APP_I18N_CONFIG_KEY","initialState","selectedLang","I18nContext","MetronicI18nProvider","lang","ls","localStorage","getItem","er","error","getConfig","Provider","allMessages","de","en","es","fr","ja","zh","I18nProvider","locale","messages","HotelContext","HotelProvider","useState","HotelId","Hotel","AsideMenuItemWithSub","icon","fontIcon","hasBullet","useLocation","isActive","checkIsActive","aside","useLayout","config","clsx","menuIcon","AsideMenuItem","AsideMenuMain","useAuth","UserToken","setUserToken","useHotel2","setHotelId","HotelName","IsAdmin","IsManager","IsCheifEngineer","IsVPO","IsAreaDirector","Roles","role","includes","isActivePayrollReport","isActiveDocumentLibrary","isActiveEOMLibrary","EditedHotelId","Result","removeItem","FormEditingMode","IsEditOperation","ReturnURL","setItem","CookieComponent","cookie","match","RegExp","decodeURIComponent","cookieOptions","expires","toUTCString","updatedCookie","encodeURIComponent","optionKey","optionValue","DrawerStore","instanceId","drawerComponentObj","defaultDrawerOptions","overlay","baseClass","overlayClass","direction","DrawerComponent","_element","overlayElement","toggleElement","instanceUid","shown","lastWidth","closeElement","_handlers","togglers","_getOption","closers","preventDefault","getElementById","_toggle","_hide","_update","String","hasBaseClass","contains","bodyCanvasAttr","attr","optionName","option","trigger","_show","_deleteOverlay","removeAttribute","_createOverlay","createElement","elementZIndex","overlayZindex","append","overlayClassOption","removeChild","_getDirection","_getWidth","toggle","show","hide","isShown","goElement","off","event","assign","drawer","getInstance","hasInstace","elementId","hideAll","getAllInstances","dr","updateAll","handleDismiss","closest","bootstrap","createInstances","initGlobalHandlers","reinitialization","defaultImageInputOptions","defaultImageInputQueires","componentName","instanseQuery","inputQuery","wrapperQuery","cancelQuery","removeQuery","hiddenQuery","ImageInputComponent","_options","_queries","inputElement","wrapperElement","cancelElement","removeElement","hiddenElement","src","queries","uid","_change","files","reader","FileReader","onload","readAsDataURL","_cancel","_remove","querySelector","handlers","ImageInput","elements","createInsance","defaultScrollOptions","saveState","ScrollComponent","getOption","hasAttribute","getHeightType","getAutoHeight","dependencies","wrappers","len","borderTop","borderBottom","setupHeight","getHeight","heightType","setupState","pos","setupScrollHandler","scrollHandler","cookieId","destroyScrollHandler","resetHeight","heghtType","Function","getElement","scroll","resize","createInstance","defaultScrollTopOptions","ScrollTopComponent","_scroll","_go","go","goTop","defaultStepperOptions","startIndex","animation","animationSpeed","animationNextClass","animationPreviousClass","StepperComponent","steps","btnNext","btnPrev","btnSubmit","totatStepsNumber","passedStepIndex","currentStepIndex","_goTo","index","refreshUI","initHandlers","stepDirection","_getStepDirection","getStepContent","content","getLastStepIndex","getTotalStepsNumber","isLastStep","isFirstStep","animateClass","isBetweenStep","goto","goNext","getNextStepIndex","goPrev","getPrevStepIndex","goFirst","goLast","getCurrentStepIndex","getPassedStepIndex","destroy","stepper","defaultStickyOptions","reverse","animationClass","StickyComponent","instanceName","eventTriggerState","lastScrollTop","offsetNum","st","enable","disable","dataStickyAttr","attrValueInStr","attrValue","zindex","widthTarget","targetElement","offsetLeft","sticky","defaultToggleOptions","ToggleComponent","attribute","_isEnabled","_disable","_enable","isEnabled","elementTargetAttr","elementToggleAttr","defaultPasswordMeterOptions","minLength","checkUppercase","checkLowercase","checkDigit","checkChar","scoreHighlightClass","defaultPasswordMeterQueires","visibilityQuery","highlightQuery","PasswordMeterComponent","visibilityElement","highlightElement","score","checkSteps","reset","highlight","check","visitbility","visibleIcon","hiddenIcon","focus","test","count","items","slice","total","checkScore","getCheckScore","getScore","checkLength","checkLowerCase","passwordMeter","SwapperStore","defaultSwapperOptions","defaultSwapperQueires","attrQuery","SwapperComponent","parentSelector","prepend","place","defaultMenuOptions","dropdown","hoverTimeout","accordion","slideSpeed","expand","MenuComponent","triggerElement","_setTriggerElement","_isTriggerElement","_getItemOption","_getItemElement","itemElement","sub","subItem","_getItemParentElement","parentItem","_getItemParentElements","parent","unshift","_getDropdownPopperConfig","placementOption","placement","offsetValue","strategy","modifiers","flipVariations","_getItemChildElement","_getItemChildElements","_getItemSubElement","_getCss","_getItemSubType","_isItemSubShown","_isItemDropdownPermanent","_isItemParentShown","_isItemSubElement","_hasItemSub","_getItemLinkElement","_getItemToggleElement","_showDropdown","hideDropdowns","parentZindex","initDropdownPopper","appendChild","reference","attach","popper","createPopper","_hideDropdown","destroyDropdownPopper","_showAccordion","_hideAccordions","subElement","_hideAccordion","itemsToHide","itemToHide","_reset","removeClass","_destroy","_mouseout","timeout","_mouseover","clearTimeout","_dismiss","itemSubType","_link","_click","click","link","dismiss","mouseover","mouseout","getItemTriggerType","getItemSubType","getItemLinkElement","getItemToggleElement","getItemSubElement","getItemParentElements","isItemSubShown","isItemParentShown","getTriggerElement","isItemDropdownPermanent","hideAccordions","elementMenu","menu","menuData","subMenu","skip","updateDropdowns","forceUpdate","menuInstance","menuItems","menuObj","stopPropagation","defaultSearchOptions","keypress","enter","layout","showOnFocus","defaultSearchQueires","SearchComponent","contentElement","formElement","spinnerElement","clearElement","submitElement","toolbarElement","resultsElement","suggestionElement","emptyElement","processing","menuObject","_getElement","getResponsiveFormMode","blur","charCode","keyCode","search","input","clear","responsiveFormMode","isProcessing","getQuery","getMenu","getFormElement","Search","AsideMenu","asideMenuCSSClasses","scrollRef","useRef","current","ref","AsideDefault","classes","theme","alt","toAbsoluteUrl","minimize","asideMenu","Footer","footerContainer","getFullYear","href","IsAuthorizedContext","HeaderNotificationsMenu","backgroundImage","FirstName","LastName","a","Email","FallbackView","toolbarButtonMarginClass","toolbarButtonHeightClass","toolbarButtonIconSizeClass","Topbar","setShow","HeaderWrapper","attributes","header","headerMenu","headerContainer","ScrollTop","isFirstRun","reInitialization","stickyHeader","updateHeaderSticky","Content","location","contentContainer","MasterInit","DefaultTitle","usePageData","pageTitle","pageDescription","pageBreadcrumbs","breadCrumbs","Array","isSeparator","Toolbar1","toolbarContainer","Toolbar","toolbar","MasterLayout","AllHotelsComponent","Hotels","setHotels","loading","setLoading","token","then","response","catch","err","FullPageLoader","hotel","Card","imageURL","Body","Text","Button","variant","Id","AllHotelsPage","AllHotelsWrapper","useIntl","breadcrumbs","DashboardWidget","onTabClick","CarouselComponent","props","setHotel_id","setHotel_Name","dashboardData","showThumbs","showStatus","useKeyboardArrows","dashboardDataObj","marginRight","marginLeft","hotelname","numberOfEmployees","totalSundriesShopProductsSales","latestSundriesInventoryReportId","payrollReportMPORList","item1","item2","twoMonthsWeeksArray","lastSevenWeeksMPORList","lastSevenWeeksTotalPayrollsList","totalRoomsCleaned","totalRoomsSold","totalLinenInventoriesToBOrdered","DashboardComponentSlider","setDashboardData","loggedInUserId","LoggedInUserId","res","DashboardPage","DashboardWrapper","withRouter","decodedJwt","atob","parseJwt","exp","PrivateRoutes","WidgetsPage","lazy","WeeklyWrapUpPage","UserPage","SundriesShopProductPage","SundriesShopInventoryPage","RolePage","PayrollReportPage","LinenItemPage","LinenInventoryPage","HotelPage","EmployeePage","DepartmentPage","FacilitiesInspectionPage","VendorPage","BreakfastPage","DocumentLibraryPage","EOMLibraryPage","SelfQAPage","fallback","component","exact","LOGIN_URL","REQUEST_PASSWORD_URL","initialValues","email","password","changepassword","resetPasswordSchema","Yup","shape","min","max","required","when","is","oneOf","ResetPassword","Token","URLSearchParams","formik","useFormik","validationSchema","onSubmit","values","setStatus","setSubmitting","success","message","noValidate","handleSubmit","status","placeholder","autoComplete","getFieldProps","touched","errors","disabled","isSubmitting","isValid","forgotPasswordSchema","ForgotPassword","hasErrors","setHasErrors","checkEmailMsg","setCheckEmailMsg","loginSchema","Login","Password","reload","expiresIn","roles","firstName","lastName","Obj","obj2","errorMessage","AuthPage","UsersTableMock","Logout","table","username","auth","refreshToken","pic","fullname","firstname","lastname","occupation","companyName","phone","language","timeZone","website","emailSettings","emailNotification","sendCopyToPersonalEmail","activityRelatesEmail","youHaveNewNotifications","youAreSentADirectMessage","someoneAddsYouAsAsAConnection","uponNewOrder","newMembershipApproval","memberRegistration","updatesFromKeenthemes","newsAboutKeenthemesProductsAndFeatureUpdates","tipsOnGettingMoreOutOfKeen","thingsYouMissedSindeYouLastLoggedIntoKeen","newsAboutStartOnPartnerProductsAndOtherServices","tipsOnStartBusinessProducts","communication","sms","address","addressLine","city","postCode","socialNetworks","linkedIn","facebook","twitter","instagram","Error500","Error404","ErrorsPage","Routes","nodeName","form","indexOf","isAuthorized","expiry","App","basename","configure","Chart","registerables","interceptors","use","originalMessage","defineProperty","stringify","Promise","reject","ReactDOM","render","AuthContext","AuthProvider","token_","expiry_","loggedInUserId_","roles_","firstName_","lastName_","email_","setUser_Token","HotelContextProvider","setHotel_Id","itemName","Name","LAYOUT_CONFIG_KEY","getEmptyCssClasses","headerMobile","asideToggle","sidebar","getEmptyHTMLAttributes","getEmptyCSSVariables","LayoutSetup","cssVariables","main","class","fixed","desktop","tabletAndMobile","tabletAndMobileMode","typeOptions","layouts","bodyStyles","heightAndTabletMobileMode","responsiveBreakpoint","responsiveTarget","minimized","hoverable","darkSkinEnabled","initLayout","initHeader","initPageTitle","initToolbar","initContent","initAside","initFooter","footer","initAsideMenu","fieldsToUpdate","updatedConfig","initCSSClasses","initCSSVariables","initHTMLAttributes","isLoaded","initConfig","setLayout","DefaultLayoutConfig","getLayout","updatePartialConfig","url","getCurrentUrl","KTSVG","svgClassName","primaryColor","loader","scrolltop","megaMenu","toolbar1","toolbar2","toolbar3","toolbar4","toolbar5","LayoutContext","disableSplashScreen","splashScreen","LayoutProvider","setConfig","setClasses","setAttributes","setCSSVariables","_themeConfig","enableSplashScreen","cl","Department_URL","GetDepartments","GetDepartmentById","PostDepartment","UpdateDepartment","DeleteDepartment","Spinner","PageDataContext","setPageTitle","_title","setPageBreadcrumbs","_breadcrumbs","setPageDescription","_description","PageDataProvider","PageTitle"],"mappings":"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","file":"static/js/main.d95b7cb5.chunk.js","sourcesContent":["import React from \"react\";\r\nimport {\r\n Chart as ChartJS,\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend\r\n} from \"chart.js\";\r\nimport { Line } from \"react-chartjs-2\";\r\n\r\nChartJS.register(\r\n CategoryScale,\r\n LinearScale,\r\n PointElement,\r\n LineElement,\r\n Title,\r\n Tooltip,\r\n Legend\r\n);\r\n\r\ninterface PropsType {\r\n ChartTitle: string,\r\n XAxislabels: string[],\r\n Dataset_1_Title: string,\r\n Dataset_2_Title: string,\r\n Dataset_1_Array: string[],\r\n Dataset_2_Array: string[],\r\n\r\n\r\n}\r\n\r\nexport function TwoY_AxisChart({ ChartTitle, XAxislabels, Dataset_1_Array, Dataset_1_Title, Dataset_2_Array, Dataset_2_Title }: PropsType) {\r\n\r\n\r\n\r\n\r\n const options = {\r\n responsive: true,\r\n interaction: {\r\n mode: \"index\" as const,\r\n intersect: true\r\n },\r\n stacked: true,\r\n plugins: {\r\n title: {\r\n display: true,\r\n text: ChartTitle\r\n }\r\n },\r\n scales: {\r\n y: {\r\n type: \"linear\" as const,\r\n display: true,\r\n position: \"left\" as const,\r\n title: {\r\n display: true,\r\n text: Dataset_1_Title,\r\n font: {\r\n size: 14\r\n }\r\n }\r\n\r\n },\r\n y1: {\r\n type: \"linear\" as const,\r\n display: true,\r\n position: \"right\" as const,\r\n title: {\r\n display: true,\r\n text: Dataset_2_Title,\r\n font: {\r\n size: 14\r\n }\r\n },\r\n\r\n grid: {\r\n drawOnChartArea: false,\r\n }\r\n },\r\n }\r\n\r\n\r\n };\r\n\r\n let labels = XAxislabels;\r\n\r\n\r\n\r\n const data = {\r\n labels,\r\n datasets: [\r\n {\r\n label: Dataset_1_Title,\r\n data: Dataset_1_Array,\r\n borderColor: \"rgb(255, 99, 132)\",\r\n backgroundColor: \"rgba(255, 99, 132, 0.5)\",\r\n yAxisID: \"y\",\r\n tension: 0.3\r\n },\r\n {\r\n label: Dataset_2_Title,\r\n data: Dataset_2_Array,\r\n borderColor: \"rgb(53, 162, 235)\",\r\n backgroundColor: \"rgba(53, 162, 235, 0.5)\",\r\n yAxisID: \"y1\",\r\n tension: 0.3\r\n }\r\n ]\r\n };\r\n\r\n return ;\r\n}\r\n\r\n\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport { useHistory } from 'react-router-dom'\r\nimport { toast } from 'react-toastify'\r\n\r\nimport { useHotel2 } from '../../../../app/contexts/HotelContext'\r\nimport { KTSVG } from '../../../helpers'\r\n// import {Dropdown1} from '../../content/dropdown/Dropdown1'\r\n\r\ntype Props = {\r\n className: string,\r\n label1: string,\r\n value1: string,\r\n label2: string,\r\n value2: string,\r\n label3: string,\r\n value3: string,\r\n hotelId: string,\r\n hotelName: string,\r\n latestWeeklyWrapUpReportId: number,\r\n latestDocumentLibraryId: number,\r\n latestEOMLibraryId: number,\r\n latestLinenInventoryReportId: number,\r\n latestPayrollReportId: number,\r\n setHotelID: (id: string) => {}\r\n setHotelName: (name: string) => {}\r\n}\r\n\r\nconst ListsWidget6: React.FC = (\r\n { className, value1, value2, value3, label1, label2, label3, hotelId, hotelName, setHotelID, setHotelName, latestWeeklyWrapUpReportId, latestDocumentLibraryId, latestEOMLibraryId,\r\n latestLinenInventoryReportId, latestPayrollReportId\r\n }\r\n) => {\r\n\r\n const history = useHistory();\r\n\r\n\r\n\r\n\r\n const setHotel = () => {\r\n setHotelID(hotelId)\r\n setHotelName(hotelName)\r\n\r\n }\r\n\r\n\r\n const onLinenInventoryTabClick = () => {\r\n if (latestLinenInventoryReportId != 0) {\r\n setHotel()\r\n\r\n history.push(`/linenInventories/Details/${latestLinenInventoryReportId}`)\r\n\r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n\r\n }\r\n\r\n const onPayrollReportTabClick = () => {\r\n if (latestPayrollReportId != 0) {\r\n setHotel()\r\n\r\n history.push(`/payrollReport/Details/${latestPayrollReportId}`)\r\n\r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n\r\n }\r\n\r\n const onEOMTabClick = () => {\r\n if (latestEOMLibraryId != 0) {\r\n setHotel()\r\n\r\n history.push(`/eomLibrary/details/${latestEOMLibraryId}`)\r\n\r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n\r\n }\r\n\r\n\r\n const onWeeklyWrapUpClick = () => {\r\n if (latestWeeklyWrapUpReportId != 0) {\r\n setHotel()\r\n\r\n history.push(`/weeklyWrapUp/Details/${latestWeeklyWrapUpReportId}`)\r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n\r\n }\r\n\r\n const onBankDepositClick = () => {\r\n if (latestWeeklyWrapUpReportId != 0) {\r\n\r\n\r\n setHotel()\r\n history.push({ pathname: `/weeklyWrapUp/Details/${latestWeeklyWrapUpReportId}`, state: { ActiveTab: \"Deposit\" } })\r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n\r\n\r\n }\r\n\r\n const onDocumentLibraryClick = () => {\r\n if (latestDocumentLibraryId != 0) {\r\n\r\n setHotel()\r\n history.push(`/documentLibrary/details/${latestDocumentLibraryId}`)\r\n\r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n\r\n return (\r\n
\r\n {/* begin::Header */}\r\n {/*
\r\n

Notifications

\r\n
*/}\r\n {/* begin::Menu */}\r\n {/* \r\n \r\n \r\n */}\r\n {/* end::Menu */}\r\n {/*
\r\n
*/}\r\n {/* end::Header */}\r\n {/* begin::Body */}\r\n
\r\n {/* begin::Item */}\r\n
\r\n {/* begin::Icon */}\r\n \r\n \r\n \r\n {/* end::Icon */}\r\n {/* begin::Title */}\r\n
\r\n \r\n {value2}\r\n \r\n {label2}\r\n
\r\n {/* end::Title */}\r\n {/* begin::Lable */}\r\n {/* +28% */}\r\n {/* end::Lable */}\r\n
\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n {/*
*/}\r\n {/* begin::Icon */}\r\n {/* \r\n\r\n \r\n */}\r\n {/* end::Icon */}\r\n {/* begin::Title */}\r\n {/*
\r\n \r\n {value2}\r\n \r\n {label2}\r\n
*/}\r\n {/* end::Title */}\r\n {/* begin::Lable */}\r\n {/* +50% */}\r\n {/* end::Lable */}\r\n {/*
*/}\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n
\r\n {/* begin::Icon */}\r\n \r\n \r\n \r\n {/* end::Icon */}\r\n {/* begin::Title */}\r\n
\r\n \r\n {value3}\r\n \r\n {label3}\r\n
\r\n {/* end::Title */}\r\n {/* begin::Lable */}\r\n {/* -27% */}\r\n {/* end::Lable */}\r\n
\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n
\r\n {/* begin::Icon */}\r\n \r\n \r\n \r\n {/* end::Icon */}\r\n {/* begin::Title */}\r\n
\r\n \r\n {'Latest WeeklyWrapUp'}\r\n \r\n {/* {label4} */}\r\n
\r\n {/* end::Title */}\r\n {/* begin::Lable */}\r\n {/* +8% */}\r\n {/* end::Lable */}\r\n
\r\n {/* end::Item */}\r\n\r\n {/* begin::Item */}\r\n
\r\n {/* begin::Icon */}\r\n \r\n \r\n \r\n {/* end::Icon */}\r\n {/* begin::Title */}\r\n
\r\n \r\n {'Latest Bank Deposit Files'}\r\n \r\n {/* {label4} */}\r\n
\r\n {/* end::Title */}\r\n {/* begin::Lable */}\r\n {/* +8% */}\r\n {/* end::Lable */}\r\n
\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n
\r\n {/* begin::Icon */}\r\n \r\n \r\n \r\n {/* end::Icon */}\r\n {/* begin::Title */}\r\n
\r\n \r\n {'Latest Document Library'}\r\n \r\n {/* {label4} */}\r\n
\r\n {/* end::Title */}\r\n {/* begin::Lable */}\r\n {/* +8% */}\r\n {/* end::Lable */}\r\n
\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n
\r\n {/* begin::Icon */}\r\n \r\n \r\n \r\n {/* end::Icon */}\r\n {/* begin::Title */}\r\n
\r\n \r\n {'Latest EOM'}\r\n \r\n {/* {label4} */}\r\n
\r\n {/* end::Title */}\r\n {/* begin::Lable */}\r\n {/* +8% */}\r\n {/* end::Lable */}\r\n
\r\n {/* end::Item */}\r\n\r\n\r\n
\r\n {/* end::Body */}\r\n
\r\n )\r\n}\r\n\r\nexport { ListsWidget6 }\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport { KTSVG } from '../../../helpers'\r\n\r\ntype Props = {\r\n className: string\r\n color: string\r\n svgIcon: string\r\n iconColor: string\r\n title: string\r\n description: string\r\n}\r\n\r\nconst StatisticsWidget5: React.FC = ({\r\n className,\r\n color,\r\n svgIcon,\r\n iconColor,\r\n title,\r\n description,\r\n}) => {\r\n return (\r\n // \r\n
\r\n {/* begin::Body */}\r\n
\r\n {svgIcon != '' &&\r\n \r\n }\r\n
{title}
\r\n\r\n
{description}
\r\n
\r\n {/* end::Body */}\r\n
\r\n )\r\n}\r\n\r\nexport { StatisticsWidget5 }\r\n","import axios from 'axios'\r\nimport { API_URL } from '../Department/DepartmentService'\r\n\r\n\r\nexport const Hotel_URL = `${API_URL}/api/Hotel`\r\n\r\n\r\n\r\nexport function GetAllHotels(accessToken: string) {\r\n return axios.get(`${Hotel_URL}/AllHotelsNames`, \r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function GetHotelsByUser(LoggedInUser: number, accessToken: string) {\r\n return axios.get(`${Hotel_URL}/GetHotelByUser?userId=${LoggedInUser}`, \r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}\r\n\r\nexport function GetDashboardData(hotelId: any, accessToken: string) {\r\n return axios.get(`${API_URL}/api/Dashboard?hotelId=${hotelId}`, \r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function GetHotels(accessToken: string) {\r\n return axios.get(`${Hotel_URL}`, \r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function GetHotelById(id: number, accessToken: string) {\r\n\r\n return axios.get(`${Hotel_URL}/${id}`,\r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n }\r\n );\r\n}\r\n\r\n\r\nexport function PostHotel(model: FormData, accessToken: string) {\r\n\r\n console.log('fomData values in PostHotel -- ', model);\r\n return axios.post(`${Hotel_URL}`,\r\n model, {\r\n headers: {\r\n 'content-type': 'multipart/form-data',\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n }\r\n );\r\n}\r\n\r\nexport function UpdateHotel(id: number, model: any, accessToken: string) {\r\n model.id = id;\r\n return axios.put(`${Hotel_URL}/${id}`, model, \r\n {\r\n headers: {\r\n 'content-type': 'multipart/form-data',\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}\r\n\r\n\r\nexport function DeleteHotel(id: number, accessToken: string) {\r\n return axios.delete(`${Hotel_URL}/${id}`, \r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport { useHistory } from 'react-router-dom'\r\nimport { toast } from 'react-toastify'\r\nimport { KTSVG } from '../../../helpers'\r\n\r\ntype Props = {\r\n className: string\r\n color: string\r\n title: string\r\n label1: string\r\n label2: string\r\n label3: string\r\n label4: string\r\n titleLabel: string\r\n text1: string\r\n text2: string\r\n text3: string\r\n text4: string\r\n text5: string\r\n value1: string\r\n value2: string\r\n value3: string\r\n value4: string\r\n titleValue: string\r\n condition1: boolean\r\n condition2: boolean\r\n condition3: boolean\r\n condition4: boolean\r\n show1: boolean\r\n show2: boolean\r\n show3: boolean\r\n show4: boolean\r\n marginTop: string\r\n paddingMarginClasses: string\r\n showTitleTab: boolean\r\n icon1: string\r\n icon2: string\r\n icon3: string\r\n icon4: string\r\n hotelId: string,\r\n hotelName: string,\r\n latestPayrollReportId: number,\r\n setHotelID: (id: string) => {}\r\n setHotelName: (name: string) => {}\r\n\r\n\r\n}\r\n\r\nconst MixedWidget1: React.FC = ({ className, color, title\r\n , titleLabel, label1, label2, label3, label4,\r\n text1, text2, text3, text4,\r\n titleValue, value1, value2, value3, value4,\r\n condition1, condition2, condition3, condition4,\r\n show1, show2, show3, show4, marginTop, paddingMarginClasses,\r\n showTitleTab,\r\n icon1, icon2, icon3, icon4,\r\n hotelId, hotelName, setHotelID, setHotelName, latestPayrollReportId\r\n\r\n\r\n}) => {\r\n\r\n\r\n\r\n const history = useHistory();\r\n\r\n\r\n\r\n\r\n const setHotel = () => {\r\n setHotelID(hotelId)\r\n setHotelName(hotelName)\r\n\r\n }\r\n\r\n const onPayrollMPORClick = () => {\r\n if (latestPayrollReportId != 0) {\r\n setHotel()\r\n\r\n history.push(`/payrollReport/Details/${latestPayrollReportId}`)\r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n\r\n\r\n }\r\n\r\n\r\n return (\r\n
\r\n {/* begin::Body */}\r\n
\r\n {/* begin::Header */}\r\n {showTitleTab &&\r\n
\r\n {/* begin::Heading */}\r\n
\r\n

{title}

\r\n\r\n
\r\n {/* end::Heading */}\r\n {/* begin::Balance */}\r\n
\r\n {titleLabel ? titleLabel : '--'}\r\n {titleValue ? titleValue : '--'}\r\n
\r\n {/* end::Balance */}\r\n
\r\n }\r\n {/* end::Header */}\r\n {/* begin::Items */}\r\n \r\n
PayrollReport MPOR
\r\n {/* begin::Item */}\r\n {show1 &&\r\n
\r\n {/* begin::Symbol */}\r\n {/*
\r\n */}\r\n {/* */}\r\n {/* \r\n \r\n
*/}\r\n {/* end::Symbol */}\r\n {/* begin::Description */}\r\n {/* replaced flex-wrap with flex-wrap in 4 places*/}\r\n
\r\n {/* begin::Title */}\r\n
\r\n \r\n {label1 ? label1 : '--'}\r\n \r\n
{label1 ? text1 : '--'}
\r\n
\r\n {/* end::Title */}\r\n {/* begin::Label */}\r\n
\r\n
{value1 ? value1 : '0'}
\r\n {/* */}\r\n
\r\n {/* end::Label */}\r\n
\r\n {/* end::Description */}\r\n
\r\n }\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n {show2 &&\r\n
\r\n {/* begin::Symbol */}\r\n {/*
\r\n */}\r\n {/* */}\r\n {/* \r\n \r\n
*/}\r\n {/* end::Symbol */}\r\n {/* begin::Description */}\r\n
\r\n {/* begin::Title */}\r\n
\r\n \r\n {label2 ? label2 : '--'}\r\n \r\n
{label2 ? text2 : '--'}
\r\n
\r\n {/* end::Title */}\r\n {/* begin::Label */}\r\n
\r\n
{value2 ? value2 : '0'}
\r\n {/* */}\r\n
\r\n {/* end::Label */}\r\n
\r\n {/* end::Description */}\r\n
\r\n }\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n {show3 &&\r\n
\r\n {/* begin::Symbol */}\r\n {/*
\r\n \r\n \r\n \r\n \r\n
*/}\r\n {/* end::Symbol */}\r\n {/* begin::Description */}\r\n
\r\n {/* begin::Title */}\r\n
\r\n \r\n {label3 ? label3 : '--'}\r\n \r\n
{label3 ? text3 : '--'}
\r\n
\r\n {/* end::Title */}\r\n {/* begin::Label */}\r\n
\r\n
{value3 ? value3 : '0'}
\r\n {/* */}\r\n
\r\n {/* end::Label */}\r\n
\r\n {/* end::Description */}\r\n
\r\n }\r\n {/* end::Item */}\r\n {/* begin::Item */}\r\n {show4 &&\r\n\r\n
\r\n {/* begin::Symbol */}\r\n
\r\n \r\n {/* */}\r\n \r\n\r\n \r\n
\r\n {/* end::Symbol */}\r\n {/* begin::Description */}\r\n
\r\n {/* begin::Title */}\r\n
\r\n \r\n {label4}\r\n \r\n
{text4}
\r\n
\r\n {/* end::Title */}\r\n {/* begin::Label */}\r\n
\r\n
{value4}
\r\n \r\n
\r\n {/* end::Label */}\r\n
\r\n {/* end::Description */}\r\n
\r\n }\r\n {/* end::Item */}\r\n
\r\n {/* end::Items */}\r\n
\r\n {/* end::Body */}\r\n \r\n )\r\n}\r\n\r\nexport { MixedWidget1 }\r\n","export class ElementStyleUtil {\r\n public static set(element: HTMLElement, property: string, value?: any, important?: boolean) {\r\n if (important) {\r\n element.style.setProperty(property, value, 'important')\r\n } else {\r\n element.style.setProperty(property, value)\r\n }\r\n }\r\n\r\n public static get(element: HTMLElement, attributeName: string) {\r\n return element.style.getPropertyValue(attributeName)\r\n }\r\n\r\n public static remove(element: HTMLElement, attibuteName: string) {\r\n element.style.removeProperty(attibuteName)\r\n }\r\n}\r\n","export class DataUtil {\r\n static store: Map> = new Map()\r\n\r\n public static set(instance: HTMLElement | undefined, key: string, data: any): void {\r\n if (!instance) {\r\n return\r\n }\r\n\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n const newMap = new Map().set(key, data)\r\n DataUtil.store.set(instance, newMap)\r\n return\r\n }\r\n\r\n instanceData.set(key, data)\r\n }\r\n\r\n public static get(instance: HTMLElement, key: string): any | undefined {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n return\r\n }\r\n\r\n return instanceData.get(key)\r\n }\r\n\r\n public static remove(instance: HTMLElement, key: string): void {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (!instanceData) {\r\n return\r\n }\r\n\r\n instanceData.delete(key)\r\n }\r\n\r\n public static has(instance: HTMLElement, key: string): boolean {\r\n const instanceData = DataUtil.store.get(instance)\r\n if (instanceData) {\r\n return instanceData.has(key)\r\n }\r\n\r\n return false\r\n }\r\n\r\n public static getAllInstancesByKey(key: string) {\r\n const result: any[] = []\r\n DataUtil.store.forEach((val) => {\r\n val.forEach((v, k) => {\r\n if (k === key) {\r\n result.push(v)\r\n }\r\n })\r\n })\r\n return result\r\n }\r\n}\r\n","function getObjectPropertyValueByKey(obj: any, key: string): any | undefined {\r\n const map = new Map(Object.entries(obj))\r\n if (obj.hasOwnProperty(key) && map) {\r\n return map.get(key)\r\n }\r\n}\r\n\r\n/**\r\n * Generates unique ID for give prefix.\r\n * @param {string} prefix Prefix for generated ID\r\n * @returns {boolean}\r\n */\r\nfunction getUniqueIdWithPrefix(prefix: string | undefined): string {\r\n const result = Math.floor(Math.random() * new Date().getTime()).toString()\r\n if (!prefix) {\r\n return result\r\n }\r\n\r\n return `${prefix}${result}`\r\n}\r\n\r\n/* eslint-disable no-useless-escape */\r\nfunction stringSnakeToCamel(str: string): string {\r\n return str.replace(/(\\-\\w)/g, function (m) {\r\n return m[1].toUpperCase()\r\n })\r\n}\r\n\r\nfunction toJSON(value: string | JSON): JSON | undefined {\r\n if (typeof value !== 'string') {\r\n return value\r\n }\r\n\r\n if (!value) {\r\n return undefined\r\n }\r\n\r\n // (\"'\" => \"\\\"\");\r\n const result = value\r\n .toString()\r\n .split('')\r\n .map((el) => (el !== \"'\" ? el : '\"'))\r\n .join('')\r\n var jsonStr = result.replace(/(\\w+:)|(\\w+ :)/g, function (matched) {\r\n return '\"' + matched.substring(0, matched.length - 1) + '\":'\r\n })\r\n try {\r\n return JSON.parse(jsonStr)\r\n } catch {\r\n return undefined\r\n }\r\n}\r\n\r\nexport {getObjectPropertyValueByKey, getUniqueIdWithPrefix, stringSnakeToCamel, toJSON}\r\n","import {getUniqueIdWithPrefix} from './_TypesHelpers'\r\n\r\nexport class DOMEventHandlerUtil {\r\n public static store = new Map()\r\n\r\n public static on(\r\n element: HTMLElement,\r\n selector: string,\r\n eventName: string,\r\n callBack: any\r\n ): string {\r\n const eventId = getUniqueIdWithPrefix('DOMEvent')\r\n DOMEventHandlerUtil.store.set(eventId, (e: Event) => {\r\n const targets = element.querySelectorAll(selector)\r\n let target: HTMLElement | null = e.target as HTMLElement\r\n while (target && target !== element) {\r\n for (let i = 0; i < targets.length; i++) {\r\n if (target === targets[i]) {\r\n callBack.call(target, e)\r\n }\r\n }\r\n\r\n if (target.parentElement) {\r\n target = target.parentElement\r\n } else {\r\n target = null\r\n }\r\n }\r\n })\r\n element.addEventListener(eventName, DOMEventHandlerUtil.store.get(eventId))\r\n return eventId\r\n }\r\n\r\n public static off(element: HTMLElement, eventName: string, eventId: string): void {\r\n const funcFromStore = DOMEventHandlerUtil.store.get(eventId)\r\n if (!funcFromStore) {\r\n return\r\n }\r\n\r\n element.removeEventListener(eventName, funcFromStore)\r\n DOMEventHandlerUtil.store.delete(eventId)\r\n }\r\n\r\n public static one(element: HTMLElement, eventName: string, callBack: Function): void {\r\n element.addEventListener(eventName, function calee(e) {\r\n // remove event\r\n if (e.target && e.target.removeEventListener) {\r\n e.target.removeEventListener(e.type, calee)\r\n }\r\n\r\n if (element && e && e.currentTarget) {\r\n // if (element && element.removeEventListener && e && e.currentTarget) {\r\n e.currentTarget.removeEventListener(e.type, calee)\r\n }\r\n\r\n // call hander\r\n return callBack(e)\r\n })\r\n }\r\n}\r\n","import {DOMEventHandlerUtil} from './_DOMEventHandlerUtil'\r\nimport {ElementStyleUtil} from './_ElementStyleUtil'\r\nimport {getElementOffset} from './DomHelpers'\r\n\r\nexport class ElementAnimateUtil {\r\n public static animate(\r\n from: number,\r\n to: number,\r\n duration: number,\r\n update: Function,\r\n complete?: Function\r\n ) {\r\n /**\r\n * TinyAnimate.easings\r\n * Adapted from jQuery Easing\r\n */\r\n const easings = {\r\n linear: function (t: number, b: number, c: number, d: number) {\r\n return (c * t) / d + b\r\n },\r\n }\r\n\r\n // Create mock done() function if necessary\r\n if (!complete) {\r\n complete = function () {}\r\n }\r\n\r\n // Animation loop\r\n // let canceled = false;\r\n const change = to - from\r\n\r\n function loop(timestamp: number) {\r\n var time = (timestamp || +new Date()) - start\r\n\r\n if (time >= 0) {\r\n update(easings.linear(time, from, change, duration))\r\n }\r\n if (time >= 0 && time >= duration) {\r\n update(to)\r\n if (complete) {\r\n complete()\r\n }\r\n } else {\r\n window.requestAnimationFrame(loop)\r\n }\r\n }\r\n\r\n update(from)\r\n\r\n // Start animation loop\r\n const start =\r\n window.performance && window.performance.now ? window.performance.now() : +new Date()\r\n\r\n window.requestAnimationFrame(loop)\r\n }\r\n\r\n public static animateClass(\r\n element: HTMLElement,\r\n animationName: string,\r\n callBack?: Function\r\n ): void {\r\n const animateClasses = animationName.split(' ')\r\n animateClasses.forEach((cssClass) => element.classList.add(cssClass))\r\n DOMEventHandlerUtil.one(element, 'animationend', function () {\r\n animateClasses.forEach((cssClass) => element.classList.remove(cssClass))\r\n })\r\n\r\n if (callBack) {\r\n DOMEventHandlerUtil.one(element, 'animationend', callBack)\r\n }\r\n }\r\n\r\n public static transitionEnd(element: HTMLElement, callBack: Function) {\r\n DOMEventHandlerUtil.one(element, 'transitionend', callBack)\r\n }\r\n\r\n public static animationEnd(element: HTMLElement, callBack: Function) {\r\n DOMEventHandlerUtil.one(element, 'animationend', callBack)\r\n }\r\n\r\n public static animationDelay(element: HTMLElement, value: string) {\r\n ElementStyleUtil.set(element, 'animation-delay', value)\r\n }\r\n\r\n public static animationDuration(element: HTMLElement, value: string) {\r\n ElementStyleUtil.set(element, 'animation-duration', value)\r\n }\r\n\r\n public static scrollTo(element: HTMLElement | null, offset: number, duration: number = 500) {\r\n let targetPos = element ? getElementOffset(element).top : 0\r\n let scrollPos =\r\n window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0\r\n\r\n if (offset) {\r\n scrollPos += offset\r\n targetPos = targetPos - offset\r\n }\r\n\r\n const from = scrollPos\r\n const to = targetPos\r\n\r\n ElementAnimateUtil.animate(from, to, duration, function (value: number) {\r\n document.documentElement.scrollTop = value\r\n // document.body.parentNode.scrollTop = value;\r\n document.body.scrollTop = value\r\n }) //, easing, done\r\n }\r\n public static scrollTop(offset: number, duration: number) {\r\n ElementAnimateUtil.scrollTo(null, offset, duration)\r\n }\r\n}\r\n","import {OffsetModel} from './models/OffsetModel'\r\nimport {ViewPortModel} from './models/ViewPortModel'\r\nimport {ElementStyleUtil} from './_ElementStyleUtil'\r\nimport {DataUtil} from './_DataUtil'\r\nimport {ElementAnimateUtil} from './ElementAnimateUtil'\r\nimport {getObjectPropertyValueByKey, toJSON} from './_TypesHelpers'\r\n\r\nfunction getCSS(el: HTMLElement, styleProp: string) {\r\n const defaultView = (el.ownerDocument || document).defaultView\r\n\r\n if (!defaultView) {\r\n return ''\r\n }\r\n\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp)\r\n}\r\n\r\nfunction getCSSVariableValue(variableName: string) {\r\n let hex = getComputedStyle(document.documentElement).getPropertyValue(variableName)\r\n if (hex && hex.length > 0) {\r\n hex = hex.trim()\r\n }\r\n\r\n return hex\r\n}\r\n\r\nfunction getElementActualCss(el: HTMLElement, prop: any, cache: boolean) {\r\n let css = ''\r\n\r\n if (!el.getAttribute('kt-hidden-' + prop) || cache === false) {\r\n let value\r\n\r\n // the element is hidden so:\r\n // making the el block so we can meassure its height but still be hidden\r\n css = el.style.cssText\r\n el.style.cssText = 'position: absolute; visibility: hidden; display: block;'\r\n\r\n if (prop === 'width') {\r\n value = el.offsetWidth\r\n } else if (prop === 'height') {\r\n value = el.offsetHeight\r\n }\r\n\r\n el.style.cssText = css\r\n\r\n // store it in cache\r\n if (value !== undefined) {\r\n el.setAttribute('kt-hidden-' + prop, value.toString())\r\n return parseFloat(value.toString())\r\n }\r\n return 0\r\n } else {\r\n // store it in cache\r\n const attributeValue = el.getAttribute('kt-hidden-' + prop)\r\n if (attributeValue || attributeValue === '0') {\r\n return parseFloat(attributeValue)\r\n }\r\n }\r\n}\r\n\r\nfunction getElementActualHeight(el: HTMLElement) {\r\n return getElementActualCss(el, 'height', false)\r\n}\r\n\r\nfunction getElementActualWidth(el: HTMLElement, cache?: boolean) {\r\n return getElementActualCss(el, 'width', false)\r\n}\r\n\r\nfunction getElementIndex(element: HTMLElement) {\r\n if (element.parentNode) {\r\n const c = element.parentNode.children\r\n for (let i = 0; i < c.length; i++) {\r\n if (c[i] === element) return i\r\n }\r\n }\r\n return -1\r\n}\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Element/matches\r\nfunction getElementMatches(element: HTMLElement, selector: string) {\r\n const p = Element.prototype\r\n const f = p.matches || p.webkitMatchesSelector\r\n\r\n if (element && element.tagName) {\r\n return f.call(element, selector)\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nfunction getElementOffset(el: HTMLElement): OffsetModel {\r\n // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\r\n // Support: IE <=11 only\r\n // Running getBoundingClientRect on a\r\n // disconnected node in IE throws an error\r\n if (!el.getClientRects().length) {\r\n return {top: 0, left: 0}\r\n }\r\n\r\n // Get document-relative position by adding viewport scroll to viewport-relative gBCR\r\n const rect = el.getBoundingClientRect()\r\n const win = el.ownerDocument.defaultView\r\n if (win) {\r\n return {\r\n top: rect.top + win.pageYOffset,\r\n left: rect.left + win.pageXOffset,\r\n }\r\n }\r\n\r\n return rect\r\n}\r\n\r\nfunction getElementParents(element: Element, selector: string) {\r\n // Element.matches() polyfill\r\n if (!Element.prototype.matches) {\r\n Element.prototype.matches = function (s) {\r\n const matches = (document || this.ownerDocument).querySelectorAll(s)\r\n let i = matches.length\r\n while (--i >= 0 && matches.item(i) !== this) {}\r\n return i > -1\r\n }\r\n }\r\n\r\n // Set up a parent array\r\n const parents: Array = []\r\n\r\n let el: Element | null = element\r\n\r\n // Push each parent element to the array\r\n for (; el && el !== document.body; el = el.parentElement) {\r\n if (selector) {\r\n if (el.matches(selector)) {\r\n parents.push(el)\r\n }\r\n continue\r\n }\r\n parents.push(el)\r\n }\r\n\r\n // Return our parent array\r\n return parents\r\n}\r\n\r\nfunction getHighestZindex(el: HTMLElement) {\r\n let bufferNode: Node | null = el as Node\r\n let buffer = el\r\n while (bufferNode && bufferNode !== document) {\r\n // Ignore z-index if position is set to a value where z-index is ignored by the browser\r\n // This makes behavior of this function consistent across browsers\r\n // WebKit always returns auto if the element is positioned\r\n const position = buffer.style.getPropertyValue('position')\r\n if (position === 'absolute' || position === 'relative' || position === 'fixed') {\r\n // IE returns 0 when zIndex is not specified\r\n // other browsers return a string\r\n // we ignore the case of nested elements with an explicit value of 0\r\n //
\r\n const value = parseInt(buffer.style.getPropertyValue('z-index'))\r\n if (!isNaN(value) && value !== 0) {\r\n return value\r\n }\r\n }\r\n\r\n bufferNode = bufferNode.parentNode\r\n buffer = bufferNode as HTMLElement\r\n }\r\n return null\r\n}\r\n\r\nfunction getScrollTop(): number {\r\n return (document.scrollingElement || document.documentElement).scrollTop\r\n}\r\n\r\n// https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth\r\nfunction getViewPort(): ViewPortModel {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n}\r\n\r\nfunction insertAfterElement(el: HTMLElement, referenceNode: HTMLElement) {\r\n return referenceNode.parentNode?.insertBefore(el, referenceNode.nextSibling)\r\n}\r\n\r\nfunction isElementHasClasses(element: HTMLElement, classesStr: string): boolean {\r\n const classes = classesStr.split(' ')\r\n for (let i = 0; i < classes.length; i++) {\r\n if (!element.classList.contains(classes[i])) {\r\n return false\r\n }\r\n }\r\n\r\n return true\r\n}\r\n\r\nfunction isVisibleElement(element: HTMLElement): boolean {\r\n return !(element.offsetWidth === 0 && element.offsetHeight === 0)\r\n}\r\n\r\n// Throttle function: Input as function which needs to be throttled and delay is the time interval in milliseconds\r\nfunction throttle(timer: number | undefined, func: Function, delay?: number) {\r\n // If setTimeout is already scheduled, no need to do anything\r\n if (timer) {\r\n return\r\n }\r\n\r\n // Schedule a setTimeout after delay seconds\r\n timer = window.setTimeout(function () {\r\n func()\r\n\r\n // Once setTimeout function execution is finished, timerId = undefined so that in
\r\n // the next scroll event function execution can be scheduled by the setTimeout\r\n timer = undefined\r\n }, delay)\r\n}\r\n\r\nfunction getElementChildren(element: HTMLElement, selector: string): Array | null {\r\n if (!element || !element.childNodes) {\r\n return null\r\n }\r\n\r\n const result: Array = []\r\n for (let i = 0; i < element.childNodes.length; i++) {\r\n const child = element.childNodes[i]\r\n // child.nodeType == 1 => Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference\r\n if (child.nodeType === 1 && getElementMatches(child as HTMLElement, selector)) {\r\n result.push(child as HTMLElement)\r\n }\r\n }\r\n\r\n return result\r\n}\r\n\r\nfunction getElementChild(element: HTMLElement, selector: string): HTMLElement | null {\r\n const children = getElementChildren(element, selector)\r\n return children ? children[0] : null\r\n}\r\n\r\nfunction isMobileDevice(): boolean {\r\n let test = getViewPort().width < +getBreakpoint('lg') ? true : false\r\n\r\n if (test === false) {\r\n // For use within normal web clients\r\n test = navigator.userAgent.match(/iPad/i) != null\r\n }\r\n\r\n return test\r\n}\r\n\r\nfunction slide(el: HTMLElement, dir: string, speed: number, callback: any) {\r\n if (\r\n !el ||\r\n (dir === 'up' && isVisibleElement(el) === false) ||\r\n (dir === 'down' && isVisibleElement(el) === true)\r\n ) {\r\n return\r\n }\r\n\r\n speed = speed ? speed : 600\r\n let calcHeight = getElementActualHeight(el)\r\n let calcPaddingTop: number = 0\r\n let calcPaddingBottom: number = 0\r\n\r\n if (ElementStyleUtil.get(el, 'padding-top') && DataUtil.get(el, 'slide-padding-top') !== true) {\r\n DataUtil.set(el, 'slide-padding-top', ElementStyleUtil.get(el, 'padding-top'))\r\n }\r\n\r\n if (\r\n ElementStyleUtil.get(el, 'padding-bottom') &&\r\n DataUtil.has(el, 'slide-padding-bottom') !== true\r\n ) {\r\n DataUtil.set(el, 'slide-padding-bottom', ElementStyleUtil.get(el, 'padding-bottom'))\r\n }\r\n\r\n if (DataUtil.has(el, 'slide-padding-top')) {\r\n calcPaddingTop = parseInt(DataUtil.get(el, 'slide-padding-top'))\r\n }\r\n\r\n if (DataUtil.has(el, 'slide-padding-bottom')) {\r\n calcPaddingBottom = parseInt(DataUtil.get(el, 'slide-padding-bottom'))\r\n }\r\n\r\n if (dir === 'up') {\r\n // up\r\n el.style.cssText = 'display: block; overflow: hidden;'\r\n\r\n if (calcPaddingTop) {\r\n ElementAnimateUtil.animate(0, calcPaddingTop, speed, function (value: number) {\r\n el.style.paddingTop = calcPaddingTop - value + 'px'\r\n })\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n ElementAnimateUtil.animate(0, calcPaddingBottom, speed, function (value: number) {\r\n el.style.paddingBottom = calcPaddingBottom - value + 'px'\r\n })\r\n }\r\n\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcHeight || 0,\r\n speed,\r\n function (value: number) {\r\n el.style.height = (calcHeight || 0) - value + 'px'\r\n },\r\n function () {\r\n el.style.height = ''\r\n el.style.display = 'none'\r\n\r\n if (typeof callback === 'function') {\r\n callback()\r\n }\r\n }\r\n )\r\n } else if (dir === 'down') {\r\n // down\r\n el.style.cssText = 'display: block; overflow: hidden;'\r\n\r\n if (calcPaddingTop) {\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcPaddingTop,\r\n speed,\r\n function (value: number) {\r\n //\r\n el.style.paddingTop = value + 'px'\r\n },\r\n function () {\r\n el.style.paddingTop = ''\r\n }\r\n )\r\n }\r\n\r\n if (calcPaddingBottom) {\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcPaddingBottom,\r\n speed,\r\n function (value: number) {\r\n el.style.paddingBottom = value + 'px'\r\n },\r\n function () {\r\n el.style.paddingBottom = ''\r\n }\r\n )\r\n }\r\n\r\n ElementAnimateUtil.animate(\r\n 0,\r\n calcHeight || 0,\r\n speed,\r\n function (value: number) {\r\n el.style.height = value + 'px'\r\n },\r\n function () {\r\n el.style.height = ''\r\n el.style.display = ''\r\n el.style.overflow = ''\r\n\r\n if (typeof callback === 'function') {\r\n callback()\r\n }\r\n }\r\n )\r\n }\r\n}\r\n\r\nfunction slideUp(el: HTMLElement, speed: number, callback: any) {\r\n slide(el, 'up', speed, callback)\r\n}\r\n\r\nfunction slideDown(el: HTMLElement, speed: number, callback: any) {\r\n slide(el, 'down', speed, callback)\r\n}\r\n\r\nfunction getBreakpoint(breakpoint: string) {\r\n let value: number | string = getCSSVariableValue('--bs-' + breakpoint)\r\n if (value) {\r\n value = parseInt(value.trim())\r\n }\r\n\r\n return value\r\n}\r\n\r\nfunction getAttributeValueByBreakpoint(incomingAttr: string): string | JSON {\r\n let value = toJSON(incomingAttr)\r\n if (typeof value !== 'object') {\r\n return incomingAttr\r\n }\r\n\r\n const width = getViewPort().width\r\n let resultKey\r\n let resultBreakpoint = -1\r\n let breakpoint\r\n\r\n for (let key in value) {\r\n if (key === 'default') {\r\n breakpoint = 0\r\n } else {\r\n breakpoint = getBreakpoint(key) ? +getBreakpoint(key) : parseInt(key)\r\n }\r\n\r\n if (breakpoint <= width && breakpoint > resultBreakpoint) {\r\n resultKey = key\r\n resultBreakpoint = breakpoint\r\n }\r\n }\r\n\r\n return resultKey ? getObjectPropertyValueByKey(value, resultKey) : value\r\n}\r\n\r\nfunction colorLighten(color: string, amount: number) {\r\n const addLight = (_color: string, _amount: number) => {\r\n const cc = parseInt(_color, 16) + _amount\r\n const cNum = cc > 255 ? 255 : cc\r\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`\r\n return c\r\n }\r\n\r\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color\r\n amount = parseInt(((255 * amount) / 100).toString())\r\n return (color = `#${addLight(color.substring(0, 2), amount)}${addLight(\r\n color.substring(2, 4),\r\n amount\r\n )}${addLight(color.substring(4, 6), amount)}`)\r\n}\r\n\r\nfunction colorDarken(color: string, amount: number) {\r\n const subtractLight = (_color: string, _amount: number) => {\r\n const cc = parseInt(color, 16) - amount\r\n const cNum = cc < 0 ? 0 : cc\r\n const c = cNum.toString(16).length > 1 ? cNum.toString(16) : `0${cNum.toString(16)}`\r\n return c\r\n }\r\n\r\n color = color.indexOf('#') >= 0 ? color.substring(1, color.length) : color\r\n amount = parseInt(((255 * amount) / 100).toString())\r\n\r\n return (color = `#${subtractLight(color.substring(0, 2), amount)}${subtractLight(\r\n color.substring(2, 4),\r\n amount\r\n )}${subtractLight(color.substring(4, 6), amount)}`)\r\n}\r\n\r\nexport {\r\n getBreakpoint,\r\n getCSS,\r\n getCSSVariableValue,\r\n getElementActualCss,\r\n getElementActualHeight,\r\n getElementActualWidth,\r\n getElementIndex,\r\n getElementMatches,\r\n getElementOffset,\r\n getElementParents,\r\n getHighestZindex,\r\n getScrollTop,\r\n getViewPort,\r\n insertAfterElement,\r\n isElementHasClasses,\r\n isVisibleElement,\r\n throttle,\r\n getElementChildren,\r\n getElementChild,\r\n isMobileDevice,\r\n slide,\r\n slideUp,\r\n slideDown,\r\n getAttributeValueByBreakpoint,\r\n colorLighten,\r\n colorDarken,\r\n}\r\n","import {DataUtil} from './_DataUtil'\r\nimport {getUniqueIdWithPrefix} from './_TypesHelpers'\r\n\r\nexport interface EventMeta {\r\n name: string\r\n callback: Function\r\n one: boolean\r\n fired: boolean\r\n}\r\n\r\nexport class EventHandlerUtil {\r\n static store: Map> = new Map()\r\n\r\n private static setEventMetasByName(name: string, metas: Map): void {\r\n EventHandlerUtil.store.set(name, metas)\r\n }\r\n\r\n private static getEventMetasByName(name: string): Map | undefined {\r\n return EventHandlerUtil.store.get(name)\r\n }\r\n\r\n private static setEventMetaByNameAndHandlerId(\r\n name: string,\r\n handlerId: string,\r\n meta: EventMeta\r\n ): void {\r\n let metas = EventHandlerUtil.getEventMetasByName(name)\r\n if (!metas) {\r\n metas = new Map()\r\n }\r\n\r\n metas.set(handlerId, meta)\r\n EventHandlerUtil.setEventMetasByName(name, metas)\r\n }\r\n\r\n private static getEventsMetaByHandlerId(name: string, handlerId: string): EventMeta | undefined {\r\n const metas = EventHandlerUtil.store.get(name)\r\n if (!metas) {\r\n return\r\n }\r\n\r\n return metas.get(handlerId)\r\n }\r\n\r\n private static setFiredByNameAndHandlerId(name: string, handerId: string, fired: boolean): void {\r\n const meta = EventHandlerUtil.getEventsMetaByHandlerId(name, handerId)\r\n if (!meta) {\r\n return\r\n }\r\n\r\n meta.fired = fired\r\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handerId, meta)\r\n }\r\n\r\n private static addEvent(\r\n element: HTMLElement,\r\n name: string,\r\n callback: Function,\r\n one: boolean = false\r\n ) {\r\n const handlerId = getUniqueIdWithPrefix('event')\r\n DataUtil.set(element, name, handlerId)\r\n const meta: EventMeta = {\r\n name: name,\r\n callback: callback,\r\n one: one,\r\n fired: false,\r\n }\r\n\r\n EventHandlerUtil.setEventMetaByNameAndHandlerId(name, handlerId, meta)\r\n }\r\n\r\n private static removeEvent(element: HTMLElement, name: string) {\r\n const handlerId = DataUtil.get(element, name)\r\n if (!handlerId) {\r\n return\r\n }\r\n\r\n const metas = EventHandlerUtil.getEventMetasByName(name)\r\n if (!metas) {\r\n return\r\n }\r\n\r\n metas.delete(handlerId)\r\n EventHandlerUtil.setEventMetasByName(name, metas)\r\n }\r\n\r\n public static trigger(element: HTMLElement, name: string, e?: Event) {\r\n if (DataUtil.has(element, name)) {\r\n const handlerId = DataUtil.get(element, name)\r\n if (!handlerId) {\r\n return undefined\r\n }\r\n\r\n const handler = EventHandlerUtil.getEventsMetaByHandlerId(name, handlerId)\r\n if (handler) {\r\n if (handler.name === name) {\r\n if (handler.one === true) {\r\n if (handler.fired === false) {\r\n EventHandlerUtil.setFiredByNameAndHandlerId(name, handlerId, true)\r\n return handler.callback.call(this, e)\r\n }\r\n } else {\r\n return handler.callback.call(this, e)\r\n }\r\n }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static on = function (element: HTMLElement, name: string, callBack: Function): void {\r\n EventHandlerUtil.addEvent(element, name, callBack, false)\r\n }\r\n\r\n public static one(element: HTMLElement, name: string, callBack: Function): void {\r\n EventHandlerUtil.addEvent(element, name, callBack, true)\r\n }\r\n\r\n public static off(element: HTMLElement, name: string): void {\r\n EventHandlerUtil.removeEvent(element, name)\r\n }\r\n}\r\n","import React, {\r\n FC,\r\n createContext,\r\n useContext,\r\n useState,\r\n useEffect,\r\n SetStateAction,\r\n Dispatch,\r\n} from 'react'\r\n\r\nconst MetronicSplashScreenContext = createContext> | undefined>(\r\n undefined\r\n)\r\n\r\nconst MetronicSplashScreenProvider: FC = ({children}) => {\r\n const [count, setCount] = useState(0)\r\n let visible = count > 0\r\n\r\n useEffect(() => {\r\n const splashScreen = document.getElementById('splash-screen')\r\n\r\n // Show SplashScreen\r\n if (splashScreen && visible) {\r\n splashScreen.classList.remove('hidden')\r\n\r\n return () => {\r\n splashScreen.classList.add('hidden')\r\n }\r\n }\r\n\r\n // Hide SplashScreen\r\n let timeout: number\r\n if (splashScreen && !visible) {\r\n timeout = window.setTimeout(() => {\r\n splashScreen.classList.add('hidden')\r\n }, 3000)\r\n }\r\n\r\n return () => {\r\n clearTimeout(timeout)\r\n }\r\n }, [visible])\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nconst LayoutSplashScreen: FC<{visible?: boolean}> = ({visible = true}) => {\r\n // Everything are ready - remove splashscreen\r\n const setCount = useContext(MetronicSplashScreenContext)\r\n\r\n useEffect(() => {\r\n if (!visible) {\r\n return\r\n }\r\n\r\n if (setCount) {\r\n setCount((prev) => {\r\n return prev + 1\r\n })\r\n }\r\n\r\n return () => {\r\n if (setCount) {\r\n setCount((prev) => {\r\n return prev - 1\r\n })\r\n }\r\n }\r\n }, [setCount, visible])\r\n\r\n return null\r\n}\r\n\r\nexport {MetronicSplashScreenProvider, LayoutSplashScreen}\r\n","import React, {FC, createContext, useContext} from 'react'\r\n\r\nconst I18N_CONFIG_KEY = process.env.REACT_APP_I18N_CONFIG_KEY || 'i18nConfig'\r\n\r\ntype Props = {\r\n selectedLang: 'de' | 'en' | 'es' | 'fr' | 'ja' | 'zh'\r\n}\r\nconst initialState: Props = {\r\n selectedLang: 'en',\r\n}\r\n\r\nfunction getConfig(): Props {\r\n const ls = localStorage.getItem(I18N_CONFIG_KEY)\r\n if (ls) {\r\n try {\r\n return JSON.parse(ls) as Props\r\n } catch (er) {\r\n console.error(er)\r\n }\r\n }\r\n return initialState\r\n}\r\n\r\n// Side effect\r\nexport function setLanguage(lang: string) {\r\n localStorage.setItem(I18N_CONFIG_KEY, JSON.stringify({selectedLang: lang}))\r\n window.location.reload()\r\n}\r\n\r\nconst I18nContext = createContext(initialState)\r\n\r\nconst useLang = () => {\r\n return useContext(I18nContext).selectedLang\r\n}\r\n\r\nconst MetronicI18nProvider: FC = ({children}) => {\r\n const lang = getConfig()\r\n return {children}\r\n}\r\n\r\nexport {MetronicI18nProvider, useLang}\r\n","import {FC} from 'react'\r\nimport {useLang} from './Metronici18n'\r\nimport {IntlProvider} from 'react-intl'\r\nimport '@formatjs/intl-relativetimeformat/polyfill'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/en'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/de'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/es'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/fr'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/ja'\r\nimport '@formatjs/intl-relativetimeformat/locale-data/zh'\r\n\r\nimport deMessages from './messages/de.json'\r\nimport enMessages from './messages/en.json'\r\nimport esMessages from './messages/es.json'\r\nimport frMessages from './messages/fr.json'\r\nimport jaMessages from './messages/ja.json'\r\nimport zhMessages from './messages/zh.json'\r\n\r\nconst allMessages = {\r\n de: deMessages,\r\n en: enMessages,\r\n es: esMessages,\r\n fr: frMessages,\r\n ja: jaMessages,\r\n zh: zhMessages,\r\n}\r\n\r\nconst I18nProvider: FC = ({children}) => {\r\n const locale = useLang()\r\n const messages = allMessages[locale]\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport {I18nProvider}\r\n","import { createContext, useContext, useState } from \"react\";\r\n\r\n\r\nexport const HotelContext = createContext(null);\r\n\r\n\r\nexport const HotelProvider = ({ children }) => {\r\n\r\n\r\n const [Hotel, setHotel] = useState({\r\n\r\n HotelId: 0\r\n })\r\n\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport const useHotel = () => useContext(HotelContext)\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\nimport {useLocation} from 'react-router'\r\nimport {checkIsActive, KTSVG} from '../../../helpers'\r\nimport {useLayout} from '../../core'\r\n\r\ntype Props = {\r\n to: string\r\n title: string\r\n icon?: string\r\n fontIcon?: string\r\n hasBullet?: boolean\r\n}\r\n\r\nconst AsideMenuItemWithSub: React.FC = ({\r\n children,\r\n to,\r\n title,\r\n icon,\r\n fontIcon,\r\n hasBullet,\r\n}) => {\r\n const {pathname} = useLocation()\r\n const isActive = checkIsActive(pathname, to)\r\n const {config} = useLayout()\r\n const {aside} = config\r\n\r\n return (\r\n \r\n \r\n {hasBullet && (\r\n \r\n \r\n \r\n )}\r\n {icon && aside.menuIcon === 'svg' && (\r\n \r\n \r\n \r\n )}\r\n {fontIcon && aside.menuIcon === 'font' && }\r\n {title}\r\n \r\n \r\n
\r\n {children}\r\n
\r\n \r\n )\r\n}\r\n\r\nexport {AsideMenuItemWithSub}\r\n","import React from 'react'\r\nimport clsx from 'clsx'\r\nimport { Link } from 'react-router-dom'\r\nimport { useLocation, useHistory } from 'react-router'\r\nimport { checkIsActive, KTSVG } from '../../../helpers'\r\nimport { useLayout } from '../../core'\r\n\r\ntype Props = {\r\n to: string\r\n title: string\r\n icon?: string\r\n fontIcon?: string\r\n hasBullet?: boolean\r\n}\r\n\r\nconst AsideMenuItem: React.FC = ({\r\n children,\r\n to,\r\n title,\r\n icon,\r\n fontIcon,\r\n hasBullet = false,\r\n}) => {\r\n const { pathname } = useLocation()\r\n const isActive = checkIsActive(pathname, to)\r\n const { config } = useLayout()\r\n const { aside } = config\r\n\r\n const history = useHistory();\r\n\r\n return (\r\n\r\n\r\n\r\n\r\n\r\n
{ history.push(to) }}\r\n className='menu-item menu-link px-5 d-flex p-2' style={{ cursor: 'pointer' }}>\r\n {icon && aside.menuIcon === 'svg' && (\r\n \r\n \r\n \r\n )}\r\n {fontIcon && aside.menuIcon === 'font' && }\r\n\r\n \r\n {title}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport { AsideMenuItem }\r\n","/* eslint-disable react/jsx-no-target-blank */\r\nimport React, { useContext, useEffect } from 'react'\r\n// import {useIntl} from 'react-intl'\r\nimport { checkIsActive, KTSVG } from '../../../helpers'\r\nimport { AsideMenuItemWithSub } from './AsideMenuItemWithSub'\r\nimport { AsideMenuItem } from './AsideMenuItem'\r\n// import { IsAuthorizedContext } from '../../../../app/contexts/isAuthorizedContext';\r\nimport { useAuth } from '../../../../app/contexts/CustomContextHook/useAuth';\r\nimport { useHotel } from '../../../../app/contexts/CustomContextHook/useHotel'\r\nimport { useHotel2 } from '../../../../app/contexts/HotelContext';\r\nimport { useHistory, useLocation } from 'react-router-dom';\r\nimport { useLayout } from '../../core';\r\nimport clsx from 'clsx';\r\n\r\nexport function AsideMenuMain() {\r\n // const intl = useIntl()\r\n\r\n // const isAuthorizedCxt = useContext(IsAuthorizedContext);\r\n\r\n const { UserToken, setUserToken } = useAuth('')\r\n\r\n\r\n const history = useHistory();\r\n // const { Hotel, setHotel } = useHotel()\r\n\r\n const { HotelId, setHotelId, HotelName, setHotelName } = useHotel2();\r\n\r\n let IsAdmin = false;\r\n\r\n let IsManager = false;\r\n\r\n\r\n let IsCheifEngineer = false;\r\n\r\n let IsVPO = false;\r\n\r\n let IsAreaDirector = false;\r\n\r\n if (UserToken.Roles.length !== 0) {\r\n UserToken.Roles.forEach(role => {\r\n if (role.toLowerCase().includes('admin')) {\r\n IsAdmin = true;\r\n } else if (role.toLowerCase().includes('general') && role.toLowerCase().includes('manager')) {\r\n IsManager = true;\r\n\r\n } else if (role.toLowerCase().includes('chief') && role.toLowerCase().includes('engineer')) {\r\n IsCheifEngineer = true;\r\n\r\n } else if (role.toLowerCase().includes('vp') || role.toLowerCase().includes('vpo')) {\r\n IsVPO = true;\r\n }\r\n else if (role.toLowerCase().includes('area') && role.toLowerCase().includes('director')) {\r\n IsAreaDirector = true;\r\n }\r\n });\r\n }\r\n\r\n\r\n\r\n\r\n const logout = () => {\r\n // localStorage.setItem('isAuthorized', 'false');\r\n // isAuthorizedCxt.setIsaAuthorized(false);\r\n\r\n // localStorage.setItem('HotelId', 0);\r\n\r\n // setHotel({ HotelId: 0 });\r\n\r\n setHotelId('0');\r\n setHotelName(\"\");\r\n\r\n\r\n // localStorage.setItem('Token', '');\r\n\r\n // localStorage.setItem('Expiry', '');\r\n\r\n\r\n\r\n // localStorage.setItem('LoggedInUserId', '');\r\n // localStorage.setItem('UserRoles', []);\r\n\r\n // localStorage.setItem('FirstName', '');\r\n // localStorage.setItem('LastName', '');\r\n // localStorage.setItem('Email', '');\r\n\r\n localStorage.setItem(\"SignOut\", true);\r\n\r\n localStorage.removeItem(\"WeeklyWrapUpObj\");\r\n localStorage.removeItem(\"WeeklyWrapUpObjEditedHotelId\");\r\n localStorage.removeItem('ReturnURL');\r\n localStorage.removeItem('FormEditingMode');\r\n localStorage.removeItem('IsEditOperation');\r\n\r\n\r\n localStorage.removeItem('PayrollReportObjEditedHotelId');\r\n localStorage.removeItem('PayrollReportObjFormEditingMode');\r\n localStorage.removeItem('IsPayrollReportObjEditOperation');\r\n localStorage.removeItem('PayrollReportReturnURL');\r\n localStorage.removeItem('PayrollReportObj');\r\n\r\n\r\n setUserToken('', '', '', [], '', '', '');\r\n\r\n\r\n }\r\n\r\n const handleWeeklyWrapUpClick = () => {\r\n\r\n console.log('onClick Triggering --**');\r\n\r\n if (localStorage.getItem(\"WeeklyWrapUpObj\") !== null) {\r\n\r\n let EditedHotelId = localStorage.getItem(\"WeeklyWrapUpObjEditedHotelId\");\r\n\r\n console.log('EditedHotelId == ', EditedHotelId);\r\n\r\n console.log('HotelId == ', HotelId);\r\n\r\n let Result = HotelId == EditedHotelId;\r\n\r\n console.log('HotelId == EditedHotelId ** ', Result);\r\n\r\n if (Result == false) {\r\n\r\n console.log('$$##@@!!!%%^^^&&&(())');\r\n\r\n localStorage.removeItem(\"WeeklyWrapUpObj\");\r\n\r\n localStorage.removeItem(\"WeeklyWrapUpObjEditedHotelId\");\r\n\r\n localStorage.removeItem('ReturnURL');\r\n\r\n localStorage.removeItem('FormEditingMode');\r\n\r\n localStorage.removeItem('IsEditOperation');\r\n\r\n\r\n }\r\n\r\n }\r\n\r\n\r\n let FormEditingMode = localStorage.getItem(\"FormEditingMode\");\r\n\r\n let IsEditOperation = localStorage.getItem('IsEditOperation');\r\n\r\n let ReturnURL = localStorage.getItem('ReturnURL');\r\n\r\n\r\n console.log('FormEditingMode == ', FormEditingMode);\r\n if (FormEditingMode && IsEditOperation && ReturnURL) {\r\n history.push(ReturnURL);\r\n console.log('In if Statement AsideMenuMain FormEditingMode && IsEditOperation && ReturnURL');\r\n\r\n }\r\n else if (FormEditingMode) {\r\n\r\n history.push('/weeklyWrapUp/create');\r\n\r\n console.log('In if Statement AsideMenuMain only FormEditingMode');\r\n\r\n }\r\n\r\n else {\r\n\r\n console.log('In else-if Statement AsideMenuMain');\r\n\r\n history.push('/weeklyWrapUp/All-reports');\r\n }\r\n }\r\n\r\n const handlePayrollReportClick = () => {\r\n\r\n console.log('onClick Triggering --**');\r\n\r\n if (localStorage.getItem(\"PayrollReportObj\") !== null) {\r\n\r\n let EditedHotelId = localStorage.getItem(\"PayrollReportObjEditedHotelId\");\r\n\r\n let Result = HotelId == EditedHotelId;\r\n\r\n console.log('HotelId == EditedHotelId ** ', Result);\r\n\r\n if (Result == false) {\r\n\r\n console.log('$$##@@!!!%%^^^&&&(())');\r\n\r\n localStorage.removeItem('PayrollReportObjEditedHotelId');\r\n localStorage.removeItem('PayrollReportObjFormEditingMode');\r\n localStorage.removeItem('IsPayrollReportObjEditOperation');\r\n localStorage.removeItem('PayrollReportReturnURL');\r\n localStorage.removeItem('PayrollReportObj');\r\n }\r\n }\r\n let FormEditingMode = localStorage.getItem(\"PayrollReportObjFormEditingMode\");\r\n\r\n let IsEditOperation = localStorage.getItem('IsPayrollReportObjEditOperation');\r\n\r\n let ReturnURL = localStorage.getItem('PayrollReportReturnURL');\r\n\r\n if (FormEditingMode && IsEditOperation && ReturnURL) {\r\n history.push(ReturnURL);\r\n }\r\n else if (FormEditingMode) {\r\n history.push('/payrollReport/create');\r\n }\r\n else {\r\n history.push('/payrollReport/AllpayrollReports');\r\n }\r\n }\r\n\r\n\r\n\r\n const handleDocumentLibraryClick = () => {\r\n\r\n console.log('onClick Triggering --**');\r\n\r\n if (localStorage.getItem(\"DocumentLibraryObj\") !== null) {\r\n\r\n let EditedHotelId = localStorage.getItem(\"DocumentLibraryObjEditedHotelId\");\r\n\r\n let Result = HotelId == EditedHotelId;\r\n\r\n console.log('HotelId == EditedHotelId ** ', Result);\r\n\r\n if (Result == false) {\r\n\r\n console.log('$$##@@!!!%%^^^&&&(())');\r\n\r\n localStorage.removeItem('DocumentLibraryObjEditedHotelId');\r\n localStorage.removeItem('DocumentLibraryObjFormEditingMode');\r\n localStorage.removeItem('IsDocumentLibraryObjEditOperation');\r\n localStorage.removeItem('DocumentLibraryReturnURL');\r\n localStorage.removeItem('DocumentLibraryObj');\r\n }\r\n }\r\n let FormEditingMode = localStorage.getItem(\"DocumentLibraryObjFormEditingMode\");\r\n\r\n let IsEditOperation = localStorage.getItem('IsDocumentLibraryObjEditOperation');\r\n\r\n let ReturnURL = localStorage.getItem('DocumentLibraryReturnURL');\r\n\r\n if (FormEditingMode && IsEditOperation && ReturnURL) {\r\n history.push(ReturnURL);\r\n }\r\n else if (FormEditingMode) {\r\n history.push('/documentLibrary/create');\r\n }\r\n else {\r\n history.push('/documentLibrary/All');\r\n }\r\n }\r\n\r\n\r\n\r\n const handleEOMLibraryClick = () => {\r\n\r\n console.log('onClick Triggering --**');\r\n\r\n if (localStorage.getItem(\"EOMLibraryObj\") !== null) {\r\n\r\n let EditedHotelId = localStorage.getItem(\"EOMLibraryObjEditedHotelId\");\r\n\r\n let Result = HotelId == EditedHotelId;\r\n\r\n console.log('HotelId == EditedHotelId ** ', Result);\r\n\r\n if (Result == false) {\r\n\r\n console.log('$$##@@!!!%%^^^&&&(())');\r\n\r\n localStorage.removeItem('EOMLibraryObjEditedHotelId');\r\n localStorage.removeItem('EOMLibraryObjFormEditingMode');\r\n localStorage.removeItem('IsEOMLibraryObjEditOperation');\r\n localStorage.removeItem('EOMLibraryReturnURL');\r\n localStorage.removeItem('EOMLibraryObj');\r\n }\r\n }\r\n let FormEditingMode = localStorage.getItem(\"EOMLibraryObjFormEditingMode\");\r\n\r\n let IsEditOperation = localStorage.getItem('IsEOMLibraryObjEditOperation');\r\n\r\n let ReturnURL = localStorage.getItem('EOMLibraryReturnURL');\r\n\r\n if (FormEditingMode && IsEditOperation && ReturnURL) {\r\n history.push(ReturnURL);\r\n }\r\n else if (FormEditingMode) {\r\n history.push('/eomLibrary/create');\r\n }\r\n else {\r\n history.push('/eomLibrary/All');\r\n }\r\n }\r\n\r\n\r\n\r\n const { pathname } = useLocation()\r\n const isActive = checkIsActive(pathname, '/weeklyWrapUp')\r\n const { config } = useLayout()\r\n const { aside } = config\r\n\r\n\r\n\r\n const isActivePayrollReport = checkIsActive(pathname, '/payrollReport')\r\n const isActiveDocumentLibrary = checkIsActive(pathname, '/documentLibrary')\r\n const isActiveEOMLibrary = checkIsActive(pathname, '/eomLibrary')\r\n\r\n\r\n return (\r\n <>\r\n\r\n\r\n {IsAdmin && HotelId === '0' &&\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\n \r\n\r\n \r\n\r\n \r\n \r\n\r\n\r\n \r\n }\r\n\r\n {!IsAdmin && HotelId === '0' &&\r\n <>\r\n \r\n\r\n {!IsManager &&\r\n \r\n }\r\n \r\n }\r\n\r\n {/* {!IsAdmin &&\r\n <>\r\n \r\n \r\n } */}\r\n\r\n {HotelId !== '0' &&\r\n\r\n\r\n\r\n \r\n\r\n }\r\n\r\n {!IsCheifEngineer && HotelId !== '0' && HotelId !== 0 &&\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\n \r\n \r\n \r\n {'bi-app-indicator' && aside.menuIcon === 'font' &&\r\n }\r\n \r\n Payroll Report\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\n {/* */}\r\n \r\n\r\n \r\n\r\n\r\n
\r\n \r\n \r\n \r\n {'bi-app-indicator' && aside.menuIcon === 'font' &&\r\n }\r\n \r\n EOM Library\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\n \r\n\r\n \r\n\r\n\r\n \r\n\r\n\r\n
\r\n \r\n \r\n \r\n {'bi-app-indicator' && aside.menuIcon === 'font' &&\r\n }\r\n\r\n \r\n\r\n Weekly WrapUp\r\n \r\n
\r\n\r\n\r\n
\r\n \r\n \r\n \r\n {'bi-app-indicator' && aside.menuIcon === 'font' &&\r\n }\r\n \r\n Documents Library\r\n \r\n
\r\n\r\n\r\n\r\n \r\n }\r\n\r\n {(IsCheifEngineer || IsAdmin || IsManager || IsVPO || IsAreaDirector) && HotelId !== '0' && HotelId !== 0 &&\r\n <>\r\n \r\n \r\n }\r\n\r\n\r\n\r\n\r\n < div onClick={logout} className='menu-item px-5 d-flex p-2' style={{ cursor: 'pointer' }}>\r\n {/* */}\r\n \r\n \r\n\r\n Sign Out\r\n \r\n \r\n\r\n\r\n \r\n )\r\n}\r\n","/* eslint-disable no-useless-escape */\r\n// DOCS: https://javascript.info/cookie\r\nexport class CookieComponent {\r\n /**\r\n * Returns the cookie with the given name, or undefined if not found\r\n *\r\n * @param {string} name - cookie name\r\n * @returns string | null\r\n */\r\n public static get(name: string): string | undefined {\r\n let matches = document.cookie.match(\r\n new RegExp('(?:^|; )' + name.replace(/([\\.$?*|{}\\(\\)\\[\\]\\\\\\/\\+^])/g, '\\\\$1') + '=([^;]*)')\r\n )\r\n return matches ? decodeURIComponent(matches[1]) : undefined\r\n }\r\n\r\n /**\r\n * Please note that a cookie value is encoded,\r\n * so getCookie uses a built-in decodeURIComponent function to decode it.\r\n *\r\n * @param {string} name - cookie name\r\n * @param {string | number | boolean} value - cookie value\r\n * @param {any} cookieOptions - cookie options\r\n * @returns void\r\n */\r\n public static set(name: string, value: string | number | boolean, cookieOptions: any): void {\r\n const options = {\r\n path: '/',\r\n // add other defaults here if necessary\r\n ...cookieOptions,\r\n }\r\n\r\n if (options.expires instanceof Date) {\r\n options.expires = options.expires.toUTCString()\r\n }\r\n\r\n let updatedCookie = encodeURIComponent(name) + '=' + encodeURIComponent(value)\r\n\r\n for (let optionKey in options) {\r\n updatedCookie += '; ' + optionKey\r\n let optionValue = options[optionKey]\r\n if (optionValue !== true) {\r\n updatedCookie += '=' + optionValue\r\n }\r\n }\r\n\r\n document.cookie = updatedCookie\r\n }\r\n\r\n /**\r\n * To delete a cookie, we can call it with a negative expiration date\r\n *\r\n * @param {string} name\r\n */\r\n public static delete(name: string): void {\r\n CookieComponent.set(name, '', {\r\n 'max-age': -1,\r\n })\r\n }\r\n}\r\n","import {\r\n EventHandlerUtil,\r\n getUniqueIdWithPrefix,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getAttributeValueByBreakpoint,\r\n throttle,\r\n getCSS,\r\n DOMEventHandlerUtil,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\n\r\nexport class DrawerStore {\r\n static store: Map = new Map()\r\n\r\n public static set(instanceId: string, drawerComponentObj: DrawerComponent): void {\r\n if (DrawerStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n DrawerStore.store.set(instanceId, drawerComponentObj)\r\n }\r\n\r\n public static get(instanceId: string): DrawerComponent | undefined {\r\n if (!DrawerStore.has(instanceId)) {\r\n return\r\n }\r\n return DrawerStore.store.get(instanceId)\r\n }\r\n\r\n public static remove(instanceId: string): void {\r\n if (!DrawerStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n DrawerStore.store.delete(instanceId)\r\n }\r\n\r\n public static has(instanceId: string): boolean {\r\n return DrawerStore.store.has(instanceId)\r\n }\r\n\r\n public static getAllInstances() {\r\n return DrawerStore.store\r\n }\r\n}\r\n\r\nexport interface DrawerOptions {\r\n overlay: boolean\r\n baseClass: string\r\n overlayClass: string\r\n direction: string\r\n}\r\n\r\nconst defaultDrawerOptions: DrawerOptions = {\r\n overlay: true,\r\n baseClass: 'drawer',\r\n overlayClass: 'drawer-overlay',\r\n direction: 'end',\r\n}\r\n\r\nclass DrawerComponent {\r\n element: HTMLElement\r\n overlayElement: HTMLElement | null = null\r\n toggleElement: HTMLElement | null = null\r\n options: DrawerOptions\r\n instanceUid: string\r\n name: string = ''\r\n shown: boolean = false\r\n lastWidth: number = 0\r\n closeElement: HTMLElement | null = null\r\n\r\n constructor(_element: HTMLElement, options: DrawerOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultDrawerOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('drawer')\r\n this.overlayElement = null\r\n this.name = this.element.getAttribute('data-kt-drawer-name') || ''\r\n this.shown = false\r\n this.toggleElement = null\r\n // Event Handlers\r\n this._handlers()\r\n // Update Instance\r\n this._update()\r\n // Bind Instance\r\n DrawerStore.set(this.element.id, this)\r\n }\r\n\r\n private _handlers = () => {\r\n const togglers = this._getOption('toggle') as string\r\n const closers = this._getOption('close') as string\r\n\r\n if (togglers !== null && togglers.length > 0) {\r\n DOMEventHandlerUtil.on(document.body, togglers, 'click', (e: Event) => {\r\n e.preventDefault()\r\n this.toggleElement = document.getElementById(togglers)\r\n this._toggle()\r\n })\r\n }\r\n\r\n if (closers !== null && closers.length > 0) {\r\n DOMEventHandlerUtil.on(document.body, closers, 'click', (e: Event) => {\r\n e.preventDefault()\r\n this.closeElement = document.getElementById(closers)\r\n\r\n this._hide()\r\n })\r\n }\r\n }\r\n\r\n private _update = () => {\r\n const width = String(this._getOption('width'))\r\n const direction = String(this._getOption('direction'))\r\n\r\n // Reset state\r\n const hasBaseClass = this.element.classList.contains(`${this.options.baseClass}-on`)\r\n const bodyCanvasAttr = String(document.body.getAttribute(`data-kt-drawer-${this.name}-`))\r\n\r\n if (hasBaseClass === true && bodyCanvasAttr === 'on') {\r\n this.shown = true\r\n } else {\r\n this.shown = false\r\n }\r\n\r\n // Activate/deactivate\r\n if (this._getOption('activate') === true) {\r\n this.element.classList.add(this.options.baseClass)\r\n this.element.classList.add(`${this.options.baseClass}-${direction}`)\r\n ElementStyleUtil.set(this.element, 'width', width, true)\r\n\r\n this.lastWidth = parseInt(width)\r\n } else {\r\n ElementStyleUtil.set(this.element, 'width', '')\r\n this.element.classList.remove(this.options.baseClass)\r\n this.element.classList.remove(`${this.options.baseClass}-${direction}`)\r\n this._hide()\r\n }\r\n }\r\n\r\n private _getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`data-kt-drawer-${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n return true\r\n } else {\r\n if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n private _toggle = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.toggle') === false) {\r\n return\r\n }\r\n\r\n if (this.shown) {\r\n this._hide()\r\n } else {\r\n this._show()\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.toggled')\r\n }\r\n\r\n private _hide = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.hide') === false) {\r\n return\r\n }\r\n\r\n this.shown = false\r\n this._deleteOverlay()\r\n document.body.removeAttribute(`data-kt-drawer-${this.name}`)\r\n document.body.removeAttribute(`data-kt-drawer`)\r\n this.element.classList.remove(`${this.options.baseClass}-on`)\r\n if (this.toggleElement != null) {\r\n this.toggleElement.classList.remove('active')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.after.hidden')\r\n }\r\n\r\n private _show = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.drawer.show') === false) {\r\n return\r\n }\r\n\r\n this.shown = true\r\n this._createOverlay()\r\n document.body.setAttribute(`data-kt-drawer-${this.name}`, 'on')\r\n document.body.setAttribute('data-kt-drawer', 'on')\r\n this.element.classList.add(`${this.options.baseClass}-on`)\r\n if (this.toggleElement !== null) {\r\n this.toggleElement.classList.add('active')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.drawer.shown')\r\n }\r\n\r\n private _createOverlay = () => {\r\n if (this._getOption('overlay') === true) {\r\n this.overlayElement = document.createElement('DIV')\r\n const elementZIndex = getCSS(this.element, 'z-index')\r\n if (elementZIndex) {\r\n const overlayZindex = parseInt(elementZIndex) - 1\r\n ElementStyleUtil.set(this.overlayElement, 'z-index', overlayZindex) // update\r\n }\r\n document.body.append(this.overlayElement)\r\n const overlayClassOption = this._getOption('overlay-class')\r\n if (overlayClassOption) {\r\n this.overlayElement.classList.add(overlayClassOption.toString())\r\n }\r\n this.overlayElement.addEventListener('click', (e) => {\r\n e.preventDefault()\r\n this._hide()\r\n })\r\n }\r\n }\r\n\r\n private _deleteOverlay = () => {\r\n if (this.overlayElement !== null && this.overlayElement.parentNode) {\r\n this.overlayElement.parentNode.removeChild(this.overlayElement)\r\n }\r\n }\r\n\r\n private _getDirection = () => {\r\n return String(this._getOption('direction')) === 'left' ? 'left' : 'right'\r\n }\r\n\r\n private _getWidth = () => {\r\n let width = this._getOption('width')\r\n if (width && width === 'auto') {\r\n width = getCSS(this.element, 'width')\r\n }\r\n\r\n return width\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public toggle = () => {\r\n this._toggle()\r\n }\r\n\r\n public show = () => {\r\n this._show()\r\n }\r\n\r\n public hide = () => {\r\n this._hide()\r\n }\r\n\r\n public isShown = () => {\r\n return this.shown\r\n }\r\n\r\n public update = () => {\r\n this._update()\r\n }\r\n\r\n public goElement = () => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace = (elementId: string): boolean => {\r\n return DrawerStore.has(elementId)\r\n }\r\n\r\n public static getInstance = (elementId: string) => {\r\n return DrawerStore.get(elementId)\r\n }\r\n\r\n public static hideAll = () => {\r\n const oldInstances = DrawerStore.getAllInstances()\r\n oldInstances.forEach((dr) => {\r\n dr.hide()\r\n })\r\n }\r\n\r\n public static updateAll = () => {\r\n const oldInstances = DrawerStore.getAllInstances()\r\n oldInstances.forEach((dr) => {\r\n dr.update()\r\n })\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string): void {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let drawer = DrawerComponent.getInstance(item.id)\r\n if (!drawer) {\r\n drawer = new DrawerComponent(item, defaultDrawerOptions)\r\n }\r\n drawer.element = item\r\n drawer.hide()\r\n })\r\n }\r\n\r\n // Dismiss instances\r\n public static handleDismiss = () => {\r\n // External drawer toggle handler\r\n DOMEventHandlerUtil.on(document.body, '[data-kt-drawer-dismiss=\"true\"]', 'click', () => {\r\n /* @ts-ignore */\r\n const element = this.closest('[data-kt-drawer=\"true\"]')\r\n if (element) {\r\n const drawer = DrawerComponent.getInstance(element)\r\n if (drawer && drawer.isShown()) {\r\n drawer.hide()\r\n }\r\n }\r\n })\r\n }\r\n\r\n // Global Initialization\r\n public static initGlobalHandlers(): void {\r\n // Window Resize Handling\r\n window.addEventListener('resize', function () {\r\n let timer: number | undefined\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n const elements = document.body.querySelectorAll('[data-kt-drawer=\"true\"]')\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n const instance = DrawerComponent.getInstance(item.id)\r\n if (instance) {\r\n instance.element = item\r\n instance.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n public static bootstrap = () => {\r\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]')\r\n DrawerComponent.initGlobalHandlers()\r\n DrawerComponent.handleDismiss()\r\n }\r\n\r\n public static reinitialization = () => {\r\n DrawerComponent.createInstances('[data-kt-drawer=\"true\"]')\r\n DrawerComponent.hideAll()\r\n DrawerComponent.updateAll()\r\n DrawerComponent.handleDismiss()\r\n }\r\n}\r\n\r\nexport {DrawerComponent, defaultDrawerOptions}\r\n","import {\r\n DataUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n getUniqueIdWithPrefix,\r\n getAttributeValueByBreakpoint,\r\n} from '../_utils/index'\r\n\r\nexport interface FeedbackOptions {\r\n width?: number\r\n placement?: string\r\n content?: string\r\n type?: string\r\n}\r\n\r\nconst defaultFeedbackOptions: FeedbackOptions = {\r\n width: 100,\r\n placement: 'top-center',\r\n content: '',\r\n type: 'popup',\r\n}\r\n\r\nclass FeedbackComponent {\r\n element: HTMLElement\r\n options: FeedbackOptions\r\n instanceUid: string\r\n shown: boolean\r\n\r\n constructor(_element: HTMLElement, options: FeedbackOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultFeedbackOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('feedback')\r\n this.shown = false\r\n\r\n // Event handlers\r\n this._handlers() // will add in the show popup\r\n DataUtil.set(this.element, 'feedback', this)\r\n }\r\n\r\n private _handlers = () => {\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n this._go()\r\n })\r\n }\r\n\r\n private _go = () => {}\r\n\r\n private showPopup = () => {\r\n this.element = document.createElement('DIV')\r\n\r\n this.element.classList.add('feedback feedback-popup')\r\n this.element.innerHTML = this.options.content || ''\r\n\r\n if (this.options.placement === 'top-center') {\r\n this.setPopupTopCenterPosition()\r\n }\r\n\r\n document.body.appendChild(this.element)\r\n this.element.classList.add('feedback-shown')\r\n this.shown = true\r\n }\r\n\r\n private setPopupTopCenterPosition = () => {\r\n const width = getAttributeValueByBreakpoint(this.options.width?.toString() || '0')\r\n const height = ElementStyleUtil.get(this.element, 'height')\r\n this.element.classList.add('feedback-top-center')\r\n ElementStyleUtil.set(this.element, 'width', width)\r\n ElementStyleUtil.set(this.element, 'left', '50%')\r\n ElementStyleUtil.set(this.element, 'top', '-' + height)\r\n }\r\n\r\n private hidePopup = () => {\r\n this.element.remove()\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public show = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.feedback.show') === false) {\r\n return\r\n }\r\n\r\n if (this.options.type === 'popup') {\r\n this.showPopup()\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.feedback.shown')\r\n\r\n return this\r\n }\r\n\r\n public hide = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.feedback.hide') === false) {\r\n return\r\n }\r\n\r\n if (this.options.type === 'popup') {\r\n this.hidePopup()\r\n }\r\n\r\n this.shown = false\r\n EventHandlerUtil.trigger(this.element, 'kt.feedback.hidden')\r\n return this\r\n }\r\n\r\n public isShown = () => {\r\n return this.isShown\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n throw new Error('not implemented')\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n throw new Error('not implemented')\r\n }\r\n\r\n public static getInstance(element: HTMLElement) {\r\n throw new Error('not implemented')\r\n }\r\n\r\n public static bootstrap(attr: string = '[data-Feedback]') {\r\n throw new Error('not implemented')\r\n }\r\n}\r\n\r\nexport {FeedbackComponent, defaultFeedbackOptions}\r\n","import {EventHandlerUtil, DataUtil, getUniqueIdWithPrefix, getCSS} from '../_utils/index'\r\n\r\nexport interface IImageInputOptions {}\r\n\r\nexport interface IImageInputQueries {\r\n componentName: string\r\n instanseQuery: string\r\n inputQuery: string\r\n wrapperQuery: string\r\n cancelQuery: string\r\n removeQuery: string\r\n hiddenQuery: string\r\n}\r\n\r\nconst defaultImageInputOptions = {}\r\n\r\nconst defaultImageInputQueires: IImageInputQueries = {\r\n componentName: 'image-input',\r\n instanseQuery: '[data-kt-image-input]',\r\n inputQuery: 'input[type=\"file\"]',\r\n wrapperQuery: '.image-input-wrapper',\r\n cancelQuery: '[data-kt-image-input-action=\"cancel\"]',\r\n removeQuery: '[data-kt-image-input-action=\"remove\"]',\r\n hiddenQuery: 'input[type=\"hidden\"]',\r\n}\r\n\r\nclass ImageInputComponent {\r\n element: HTMLElement\r\n inputElement: HTMLInputElement | null\r\n wrapperElement: HTMLElement | null\r\n cancelElement: HTMLElement | null\r\n removeElement: HTMLElement | null\r\n hiddenElement: HTMLInputElement | null\r\n src: string = ''\r\n options: IImageInputOptions\r\n queries: IImageInputQueries\r\n uid: string\r\n value: string = ''\r\n\r\n constructor(_element: HTMLElement, _options: IImageInputOptions, _queries: IImageInputQueries) {\r\n // Variables\r\n this.options = Object.assign(defaultImageInputOptions, _options)\r\n this.queries = _queries\r\n this.uid = getUniqueIdWithPrefix(this.queries.componentName)\r\n\r\n // Elements\r\n this.element = _element\r\n this.inputElement = this.element.querySelector(this.queries.inputQuery)\r\n this.wrapperElement = this.element.querySelector(this.queries.wrapperQuery)\r\n this.cancelElement = this.element.querySelector(this.queries.cancelQuery)\r\n this.removeElement = this.element.querySelector(this.queries.removeQuery)\r\n this.hiddenElement = this.element.querySelector(this.queries.hiddenQuery)\r\n if (this.wrapperElement) {\r\n this.src = getCSS(this.wrapperElement, 'backgroundImage')\r\n }\r\n\r\n // Event Handlers\r\n this.handlers()\r\n\r\n DataUtil.set(this.element, this.queries.componentName, this)\r\n }\r\n\r\n private handlers(): void {\r\n this.element.addEventListener('change', this._change)\r\n if (this.cancelElement) {\r\n this.cancelElement.addEventListener('click', this._cancel)\r\n }\r\n\r\n if (this.removeElement) {\r\n this.removeElement.addEventListener('click', this._cancel)\r\n }\r\n }\r\n\r\n // Event Handlers\r\n private _change = (e: Event) => {\r\n e.preventDefault()\r\n\r\n if (this.inputElement !== null && this.inputElement.files && this.inputElement.files[0]) {\r\n // Fire change event\r\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.change', e) === false) {\r\n return\r\n }\r\n\r\n const reader = new FileReader()\r\n\r\n reader.onload = (e: ProgressEvent) => {\r\n if (this.wrapperElement && e.target) {\r\n this.wrapperElement.style.setProperty('background-image', `url('${e.target.result}')`)\r\n }\r\n }\r\n\r\n reader.readAsDataURL(this.inputElement.files[0])\r\n this.element.classList.add('image-input-changed')\r\n this.element.classList.remove('image-input-empty')\r\n\r\n // Fire removed event\r\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.changed', e)\r\n }\r\n }\r\n\r\n private _cancel = (e: Event) => {\r\n e.preventDefault()\r\n\r\n // Fire cancel event\r\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.cancel', e) === false) {\r\n return\r\n }\r\n\r\n this.element.classList.remove('image-input-changed')\r\n this.element.classList.remove('image-input-empty')\r\n this.element.style.setProperty('background-image', this.src)\r\n if (this.inputElement) {\r\n this.inputElement.value = ''\r\n }\r\n\r\n if (this.hiddenElement !== null) {\r\n this.hiddenElement.value = '0'\r\n }\r\n\r\n // Fire canceled event\r\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.canceled', e)\r\n }\r\n\r\n private _remove = (e: Event) => {\r\n e.preventDefault()\r\n\r\n // Fire remove event\r\n if (EventHandlerUtil.trigger(this.element, 'kt.imageinput.remove', e) === false) {\r\n return\r\n }\r\n\r\n this.element.classList.remove('image-input-changed')\r\n this.element.classList.add('image-input-empty')\r\n if (this.wrapperElement) {\r\n this.wrapperElement.style.setProperty('background-image', 'none')\r\n }\r\n\r\n if (this.inputElement) {\r\n this.inputElement.value = ''\r\n }\r\n\r\n if (this.hiddenElement !== null) {\r\n this.hiddenElement.value = '1'\r\n }\r\n\r\n // Fire removed event\r\n EventHandlerUtil.trigger(this.element, 'kt.imageinput.removed', e)\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public getInputElement(): HTMLInputElement | null {\r\n return this.inputElement\r\n }\r\n\r\n public getElement(): HTMLElement {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultImageInputQueires.componentName\r\n ) => {\r\n const ImageInput = DataUtil.get(el, componentName)\r\n if (ImageInput) {\r\n return ImageInput\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultImageInputQueires.instanseQuery,\r\n options: IImageInputOptions = defaultImageInputOptions,\r\n queries: IImageInputQueries = defaultImageInputQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let ImageInput = ImageInputComponent.getInstance(item)\r\n if (!ImageInput) {\r\n ImageInput = new ImageInputComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultImageInputQueires.instanseQuery,\r\n options: IImageInputOptions = defaultImageInputOptions,\r\n queries: IImageInputQueries = defaultImageInputQueires\r\n ): ImageInputComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let ImageInput = ImageInputComponent.getInstance(item)\r\n if (!ImageInput) {\r\n ImageInput = new ImageInputComponent(item, options, queries)\r\n }\r\n return ImageInput\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultImageInputQueires.instanseQuery) => {\r\n ImageInputComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (selector: string = defaultImageInputQueires.instanseQuery) => {\r\n ImageInputComponent.createInstances(selector)\r\n }\r\n}\r\nexport {ImageInputComponent, defaultImageInputOptions, defaultImageInputQueires}\r\n","import {\r\n DataUtil,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getAttributeValueByBreakpoint,\r\n getViewPort,\r\n isVisibleElement,\r\n throttle,\r\n getCSS,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\nimport {CookieComponent} from './_CookieComponent'\r\n\r\nexport interface ScrollOptions {\r\n saveState?: boolean\r\n}\r\n\r\nconst defaultScrollOptions: ScrollOptions = {\r\n saveState: true,\r\n}\r\n\r\nclass ScrollComponent {\r\n element: HTMLElement\r\n options: ScrollOptions\r\n id: string\r\n\r\n constructor(_element: HTMLElement, options: ScrollOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultScrollOptions, options)\r\n this.id = this.element.getAttribute('id') || ''\r\n this.update()\r\n // this.element.setAttribute('data-kt-scrolltop', 'true')\r\n DataUtil.set(this.element, 'scroll', this)\r\n }\r\n\r\n private getOption = (name: string) => {\r\n if (this.element.hasAttribute('data-kt-scroll-' + name) === true) {\r\n const attr = this.element.getAttribute('data-kt-scroll-' + name) || ''\r\n let value: string | JSON | boolean = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n value = true\r\n } else if (value !== null && String(value) === 'false') {\r\n value = false\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n private getHeightType = () => {\r\n if (this.getOption('height')) {\r\n return 'height'\r\n }\r\n if (this.getOption('min-height')) {\r\n return 'min-height'\r\n }\r\n if (this.getOption('max-height')) {\r\n return 'max-height'\r\n }\r\n }\r\n\r\n private getAutoHeight = () => {\r\n let height: number | string = getViewPort().height\r\n const dependencies = this.getOption('dependencies')\r\n const wrappers = this.getOption('wrappers')\r\n const offset = this.getOption('offset')\r\n\r\n // Height dependencies\r\n if (dependencies !== null) {\r\n const elements = document.querySelectorAll(dependencies as string)\r\n if (elements && elements.length > 0) {\r\n for (let i = 0, len = elements.length; i < len; i++) {\r\n const element = elements[i] as HTMLElement\r\n if (isVisibleElement(element) === false) {\r\n continue\r\n }\r\n\r\n height = height - parseInt(getCSS(element, 'height'))\r\n height = height - parseInt(getCSS(element, 'margin-top'))\r\n height = height - parseInt(getCSS(element, 'margin-bottom'))\r\n\r\n const borderTop = getCSS(element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Wrappers\r\n if (wrappers !== null) {\r\n var elements = document.querySelectorAll(wrappers as string)\r\n if (elements && elements.length > 0) {\r\n for (let i = 0, len = elements.length; i < len; i++) {\r\n const element = elements[i] as HTMLElement\r\n\r\n if (!isVisibleElement(element)) {\r\n continue\r\n }\r\n\r\n height = height - parseInt(getCSS(element, 'margin-top'))\r\n height = height - parseInt(getCSS(element, 'margin-bottom'))\r\n height = height - parseInt(getCSS(element, 'padding-top'))\r\n height = height - parseInt(getCSS(element, 'padding-bottom'))\r\n\r\n const borderTop = getCSS(element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Custom offset\r\n if (offset !== null) {\r\n height = height - parseInt(offset as string)\r\n }\r\n\r\n height = height - parseInt(getCSS(this.element, 'margin-top'))\r\n height = height - parseInt(getCSS(this.element, 'margin-bottom'))\r\n\r\n const borderTop = getCSS(this.element, 'border-top')\r\n if (borderTop) {\r\n height = height - parseInt(borderTop)\r\n }\r\n\r\n const borderBottom = getCSS(this.element, 'border-bottom')\r\n if (borderBottom) {\r\n height = height - parseInt(borderBottom)\r\n }\r\n\r\n height = String(height) + 'px'\r\n\r\n return height\r\n }\r\n\r\n private setupHeight = () => {\r\n let height = this.getHeight()\r\n let heightType = this.getHeightType() as string\r\n\r\n // Set height\r\n if (height !== null && height.length > 0) {\r\n ElementStyleUtil.set(this.element, heightType, height)\r\n } else {\r\n ElementStyleUtil.set(this.element, heightType, '')\r\n }\r\n }\r\n\r\n private setupState = () => {\r\n if (this.getOption('save-state') === true && this.id) {\r\n const cookie = CookieComponent.get(this.id + 'st')\r\n if (cookie) {\r\n var pos = parseInt(cookie)\r\n\r\n if (pos > 0) {\r\n this.element.scrollTop = pos\r\n }\r\n }\r\n }\r\n }\r\n\r\n private setupScrollHandler = () => {\r\n if (this.getOption('save-state') === true && this.id) {\r\n this.element.addEventListener('scroll', this.scrollHandler)\r\n } else {\r\n this.element.removeEventListener('scroll', this.scrollHandler)\r\n }\r\n }\r\n\r\n private scrollHandler = () => {\r\n const cookieId = this.id + 'st'\r\n CookieComponent.set(cookieId, this.element.scrollTop, {})\r\n }\r\n\r\n private destroyScrollHandler = () => {\r\n this.element.removeEventListener('scroll', this.scrollHandler)\r\n }\r\n\r\n private resetHeight = () => {\r\n const heghtType = this.getHeightType()\r\n if (heghtType) {\r\n ElementStyleUtil.set(this.element, heghtType, '')\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public update = () => {\r\n // Activate/deactivate\r\n if (\r\n this.getOption('activate') === true ||\r\n !this.element.hasAttribute('data-kt-scroll-activate')\r\n ) {\r\n this.setupHeight()\r\n this.setupScrollHandler()\r\n this.setupState()\r\n } else {\r\n this.resetHeight()\r\n this.destroyScrollHandler()\r\n }\r\n }\r\n\r\n public getHeight = () => {\r\n const heightType = this.getHeightType()\r\n const height = this.getOption(heightType || '')\r\n if (height instanceof Function) {\r\n return height.call(height)\r\n } else if (height !== null && typeof height === 'string' && height.toLowerCase() === 'auto') {\r\n return this.getAutoHeight()\r\n } else {\r\n return height\r\n }\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n return DataUtil.has(element, 'scroll')\r\n }\r\n\r\n public static getInstance(element: HTMLElement) {\r\n if (element !== null && ScrollComponent.hasInstace(element)) {\r\n return DataUtil.get(element, 'scroll')\r\n }\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element: Element) => {\r\n const item = element as HTMLElement\r\n let scroll = ScrollComponent.getInstance(item)\r\n if (!scroll) {\r\n scroll = new ScrollComponent(item, defaultScrollOptions)\r\n }\r\n })\r\n }\r\n\r\n public static destroyAll(attr: string = '[data-kt-scroll=\"true\"]') {}\r\n\r\n public static bootstrap(attr: string = '[data-kt-scroll=\"true\"]') {\r\n ScrollComponent.createInstances(attr)\r\n ScrollComponent.resize()\r\n }\r\n\r\n public static createInstance = (\r\n element: HTMLElement,\r\n options: ScrollOptions = defaultScrollOptions\r\n ): ScrollComponent | undefined => {\r\n let scroll = ScrollComponent.getInstance(element)\r\n if (!scroll) {\r\n scroll = new ScrollComponent(element, options)\r\n }\r\n return scroll\r\n }\r\n\r\n public static reinitialization(attr: string = '[data-kt-scroll=\"true\"]') {\r\n ScrollComponent.createInstances(attr)\r\n }\r\n\r\n public static updateAll() {\r\n const elements = document.body.querySelectorAll('[data-kt-scroll=\"true\"]')\r\n elements.forEach((element: Element) => {\r\n const instance = ScrollComponent.getInstance(element as HTMLElement)\r\n if (instance) {\r\n instance.update()\r\n }\r\n })\r\n }\r\n\r\n public static resize() {\r\n // Window Resize Handling\r\n window.addEventListener('resize', function () {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n ScrollComponent.updateAll()\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n}\r\n\r\nexport {ScrollComponent, defaultScrollOptions}\r\n","import {\r\n getScrollTop,\r\n getAttributeValueByBreakpoint,\r\n throttle,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getUniqueIdWithPrefix,\r\n DataUtil,\r\n ElementAnimateUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface IScrollTopOptions {\r\n offset: number\r\n speed: number\r\n}\r\n\r\nconst defaultScrollTopOptions: IScrollTopOptions = {\r\n offset: 200,\r\n speed: 600,\r\n}\r\n\r\nclass ScrollTopComponent {\r\n element: HTMLElement\r\n options: IScrollTopOptions\r\n instanceUid: string\r\n\r\n constructor(_element: HTMLElement, options: IScrollTopOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultScrollTopOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('scrolltop')\r\n\r\n // Event Handlers\r\n this._handlers()\r\n\r\n // Bind Instance\r\n DataUtil.set(this.element, 'scrolltop', this)\r\n }\r\n\r\n private _handlers = () => {\r\n let timer: number\r\n window.addEventListener('scroll', () => {\r\n throttle(timer, () => {\r\n this._scroll()\r\n })\r\n })\r\n\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n this._go()\r\n })\r\n }\r\n\r\n private _scroll = () => {\r\n const offset = parseInt(this._getOption('offset') as string)\r\n const pos = getScrollTop() // current vertical position\r\n if (pos > offset) {\r\n if (!document.body.hasAttribute('data-kt-scrolltop')) {\r\n document.body.setAttribute('data-kt-scrolltop', 'on')\r\n }\r\n } else {\r\n if (document.body.hasAttribute('data-kt-scrolltop')) {\r\n document.body.removeAttribute('data-kt-scrolltop')\r\n }\r\n }\r\n }\r\n\r\n private _go = () => {\r\n const speed = parseInt(this._getOption('speed') as string)\r\n ElementAnimateUtil.scrollTop(0, speed)\r\n }\r\n\r\n private _getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`data-kt-scrolltop-${name}`)\r\n if (attr) {\r\n const value = getAttributeValueByBreakpoint(attr)\r\n return value !== null && String(value) === 'true'\r\n }\r\n\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n }\r\n\r\n return null\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n\r\n // Plugin API\r\n public go = () => {\r\n return this._go()\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (el: HTMLElement) => {\r\n const scrollTop = DataUtil.get(el, 'scrolltop')\r\n if (scrollTop) {\r\n return scrollTop\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (selector: string) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let scrollTop = ScrollTopComponent.getInstance(item)\r\n if (!scrollTop) {\r\n scrollTop = new ScrollTopComponent(item, defaultScrollTopOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: IScrollTopOptions = defaultScrollTopOptions\r\n ): ScrollTopComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let scrollTop = ScrollTopComponent.getInstance(item)\r\n if (!scrollTop) {\r\n scrollTop = new ScrollTopComponent(item, options)\r\n }\r\n return scrollTop\r\n }\r\n\r\n public static bootstrap = () => {\r\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]')\r\n }\r\n\r\n public static reinitialization = () => {\r\n ScrollTopComponent.createInstances('[data-kt-scrolltop=\"true\"]')\r\n }\r\n\r\n public static goTop = () => {\r\n ElementAnimateUtil.scrollTop(0, defaultScrollTopOptions.speed)\r\n }\r\n}\r\nexport {ScrollTopComponent, defaultScrollTopOptions}\r\n","import {\r\n getElementIndex,\r\n getUniqueIdWithPrefix,\r\n ElementAnimateUtil,\r\n EventHandlerUtil,\r\n DataUtil,\r\n DOMEventHandlerUtil,\r\n ElementStyleUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface IStepperOptions {\r\n startIndex: number\r\n animation: boolean\r\n animationSpeed: string\r\n animationNextClass: string\r\n animationPreviousClass: string\r\n}\r\n\r\nconst defaultStepperOptions: IStepperOptions = {\r\n startIndex: 1,\r\n animation: false,\r\n animationSpeed: '0.3s',\r\n animationNextClass: 'animate__animated animate__slideInRight animate__fast',\r\n animationPreviousClass: 'animate__animated animate__slideInLeft animate__fast',\r\n}\r\n\r\nclass StepperComponent {\r\n element: HTMLElement\r\n options: IStepperOptions\r\n instanceUid: string\r\n steps: NodeListOf\r\n btnNext: HTMLElement | null\r\n btnPrev: HTMLElement | null\r\n btnSubmit: HTMLElement | null\r\n totatStepsNumber: number = 0\r\n passedStepIndex: number = 0\r\n currentStepIndex: number = 1\r\n\r\n constructor(_element: HTMLElement, options: IStepperOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultStepperOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('stepper')\r\n\r\n // Elements\r\n this.steps = this.element.querySelectorAll('[data-kt-stepper-element=\"nav\"]')\r\n this.btnNext = this.element.querySelector('[data-kt-stepper-action=\"next\"]')\r\n this.btnPrev = this.element.querySelector('[data-kt-stepper-action=\"previous\"]')\r\n this.btnSubmit = this.element.querySelector('[data-kt-stepper-action=\"submit\"]')\r\n\r\n // Variables\r\n this.totatStepsNumber = this.steps?.length | 0\r\n this.passedStepIndex = 0\r\n this.currentStepIndex = 1\r\n\r\n // Set Current Step\r\n if (this.options.startIndex > 1) {\r\n this._goTo(this.options.startIndex)\r\n }\r\n\r\n // Event Handlers\r\n this.initHandlers()\r\n\r\n // Bind Instance\r\n DataUtil.set(this.element, 'stepper', this)\r\n }\r\n\r\n private _goTo = (index: number) => {\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.change')\r\n // Skip if this step is already shown\r\n if (index === this.currentStepIndex || index > this.totatStepsNumber || index < 0) {\r\n return\r\n }\r\n\r\n // Validate step number\r\n index = parseInt(index.toString())\r\n // Set current step\r\n this.passedStepIndex = this.currentStepIndex\r\n this.currentStepIndex = index\r\n\r\n // Refresh elements\r\n this.refreshUI()\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.changed')\r\n }\r\n\r\n private initHandlers = () => {\r\n this.btnNext?.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.next', e)\r\n })\r\n\r\n this.btnPrev?.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.stepper.previous', e)\r\n })\r\n\r\n DOMEventHandlerUtil.on(this.element, '[data-kt-stepper-action=\"step\"]', 'click', (e: Event) => {\r\n e.preventDefault()\r\n\r\n if (this.steps && this.steps.length > 0) {\r\n for (let i = 0; i < this.steps.length; i++) {\r\n if ((this.steps[i] as HTMLElement) === this.element) {\r\n let index = i + 1\r\n\r\n const stepDirection = this._getStepDirection(index)\r\n EventHandlerUtil.trigger(this.element, `stepper.${stepDirection}`, e)\r\n return\r\n }\r\n }\r\n }\r\n })\r\n }\r\n\r\n private _getStepDirection = (index: number) => {\r\n return index > this.currentStepIndex ? 'next' : 'previous'\r\n }\r\n\r\n private getStepContent = (index: number) => {\r\n const content = this.element.querySelectorAll('[data-kt-stepper-element=\"content\"]')\r\n if (!content) {\r\n return false\r\n }\r\n\r\n if (content[index - 1]) {\r\n return content[index - 1]\r\n }\r\n\r\n return false\r\n }\r\n\r\n private getLastStepIndex = () => {\r\n return this.totatStepsNumber\r\n }\r\n\r\n private getTotalStepsNumber = () => {\r\n return this.totatStepsNumber\r\n }\r\n\r\n private refreshUI = () => {\r\n let state = ''\r\n\r\n if (this.isLastStep()) {\r\n state = 'last'\r\n } else if (this.isFirstStep()) {\r\n state = 'first'\r\n } else {\r\n state = 'between'\r\n }\r\n\r\n // Set state class\r\n this.element.classList.remove('last')\r\n this.element.classList.remove('first')\r\n this.element.classList.remove('between')\r\n\r\n this.element.classList.add(state)\r\n\r\n // Step Items\r\n const elements = this.element.querySelectorAll(\r\n '[data-kt-stepper-element=\"nav\"], [data-kt-stepper-element=\"content\"], [data-kt-stepper-element=\"info\"]'\r\n )\r\n\r\n if (!elements || elements.length <= 0) {\r\n return\r\n }\r\n\r\n for (var i = 0, len = elements.length; i < len; i++) {\r\n var element = elements[i] as HTMLElement\r\n var index = getElementIndex(element) + 1\r\n\r\n element.classList.remove('current')\r\n element.classList.remove('completed')\r\n element.classList.remove('pending')\r\n\r\n if (index === this.currentStepIndex) {\r\n element.classList.add('current')\r\n\r\n if (\r\n this.options.animation !== false &&\r\n element.getAttribute('data-kt-stepper-element') === 'content'\r\n ) {\r\n ElementStyleUtil.set(element, 'animationDuration', this.options.animationSpeed)\r\n\r\n const animation =\r\n this._getStepDirection(this.passedStepIndex) === 'previous'\r\n ? this.options.animationPreviousClass\r\n : this.options.animationNextClass\r\n ElementAnimateUtil.animateClass(element, animation)\r\n }\r\n } else {\r\n if (index < this.currentStepIndex) {\r\n element.classList.add('completed')\r\n } else {\r\n element.classList.add('pending')\r\n }\r\n }\r\n }\r\n }\r\n\r\n private isLastStep = () => {\r\n return this.currentStepIndex === this.totatStepsNumber\r\n }\r\n\r\n private isFirstStep = () => {\r\n return this.currentStepIndex === 1\r\n }\r\n\r\n private isBetweenStep = () => {\r\n return this.isLastStep() === false && this.isFirstStep() === false\r\n }\r\n\r\n // ///////////////////////\r\n // // ** Public API ** //\r\n // ///////////////////////\r\n\r\n // // Plugin API\r\n public goto = (index: number) => {\r\n return this._goTo(index)\r\n }\r\n\r\n public goNext = () => {\r\n return this.goto(this.getNextStepIndex())\r\n }\r\n\r\n public goPrev = () => {\r\n return this.goto(this.getPrevStepIndex())\r\n }\r\n\r\n public goFirst = () => {\r\n return this.goto(1)\r\n }\r\n\r\n public goLast = () => {\r\n return this.goto(this.getLastStepIndex())\r\n }\r\n\r\n public getCurrentStepIndex = () => {\r\n return this.currentStepIndex\r\n }\r\n\r\n public getNextStepIndex = () => {\r\n if (this.totatStepsNumber >= this.currentStepIndex + 1) {\r\n return this.currentStepIndex + 1\r\n } else {\r\n return this.totatStepsNumber\r\n }\r\n }\r\n\r\n public getPassedStepIndex = () => {\r\n return this.passedStepIndex\r\n }\r\n\r\n public getPrevStepIndex = () => {\r\n if (this.currentStepIndex - 1 > 1) {\r\n return this.currentStepIndex - 1\r\n } else {\r\n return 1\r\n }\r\n }\r\n\r\n public getElement = (index: number) => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public destroy = () => {\r\n console.log('destroy stepper')\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement): boolean {\r\n return DataUtil.has(element, 'stepper')\r\n }\r\n\r\n public static getInstance(element: HTMLElement): StepperComponent | null {\r\n if (element !== null && StepperComponent.hasInstace(element)) {\r\n return DataUtil.get(element, 'stepper')\r\n }\r\n return null\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string): void {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let stepper = StepperComponent.getInstance(item)\r\n if (!stepper) {\r\n stepper = new StepperComponent(item, defaultStepperOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n element: HTMLElement,\r\n options: IStepperOptions = defaultStepperOptions\r\n ): StepperComponent | null => {\r\n if (!element) {\r\n return null\r\n }\r\n let stepper = StepperComponent.getInstance(element)\r\n if (!stepper) {\r\n stepper = new StepperComponent(element, options)\r\n }\r\n return stepper\r\n }\r\n\r\n public static bootstrap(attr: string = '[data-kt-stepper]') {\r\n StepperComponent.createInstances(attr)\r\n }\r\n}\r\n\r\nexport {StepperComponent, defaultStepperOptions}\r\n","import {\r\n getElementOffset,\r\n getScrollTop,\r\n getAttributeValueByBreakpoint,\r\n getUniqueIdWithPrefix,\r\n getObjectPropertyValueByKey,\r\n stringSnakeToCamel,\r\n getCSS,\r\n DataUtil,\r\n ElementAnimateUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n} from '../_utils/index'\r\n\r\nexport interface StickyOptions {\r\n offset: number\r\n reverse: boolean\r\n animation: boolean\r\n animationSpeed: string\r\n animationClass: string\r\n}\r\n\r\nconst defaultStickyOptions: StickyOptions = {\r\n offset: 200,\r\n reverse: false,\r\n animation: true,\r\n animationSpeed: '0.3s',\r\n animationClass: 'animation-slide-in-down',\r\n}\r\n\r\nclass StickyComponent {\r\n element: HTMLElement\r\n options: StickyOptions\r\n instanceUid: string\r\n instanceName: string | null = ''\r\n attributeName: string\r\n eventTriggerState: boolean\r\n lastScrollTop: number\r\n\r\n constructor(_element: HTMLElement, options: StickyOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultStickyOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('sticky')\r\n this.instanceName = this.element.getAttribute('data-kt-sticky-name')\r\n this.attributeName = 'data-kt-sticky-' + this.instanceName\r\n this.eventTriggerState = true\r\n this.lastScrollTop = 0\r\n\r\n // Event Handlers\r\n window.addEventListener('scroll', this.scroll)\r\n\r\n // Initial Launch\r\n this.scroll()\r\n\r\n DataUtil.set(this.element, 'sticky', this)\r\n }\r\n\r\n private scroll = () => {\r\n let offset = this.getOption('offset')\r\n let reverse = this.getOption('reverse')\r\n\r\n // Exit if false\r\n if (offset === false) {\r\n return\r\n }\r\n\r\n let offsetNum = 0\r\n if (typeof offset === 'string') {\r\n offsetNum = parseInt(offset)\r\n }\r\n\r\n const st = getScrollTop()\r\n\r\n // Reverse scroll mode\r\n if (reverse === true) {\r\n // Release on reverse scroll mode\r\n if (st > offsetNum && this.lastScrollTop < st) {\r\n if (document.body.hasAttribute(this.attributeName) === false) {\r\n this.enable()\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n\r\n if (this.eventTriggerState === true) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n\r\n this.eventTriggerState = false\r\n }\r\n } else {\r\n // Back scroll mode\r\n if (document.body.hasAttribute(this.attributeName)) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n }\r\n\r\n if (this.eventTriggerState === false) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n\r\n this.eventTriggerState = true\r\n }\r\n }\r\n\r\n this.lastScrollTop = st\r\n return\r\n }\r\n\r\n // Classic scroll mode\r\n if (st > offsetNum) {\r\n if (document.body.hasAttribute(this.attributeName) === false) {\r\n this.enable()\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n\r\n if (this.eventTriggerState === true) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.on')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n this.eventTriggerState = false\r\n }\r\n } else {\r\n // back scroll mode\r\n if (document.body.hasAttribute(this.attributeName) === true) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n }\r\n\r\n if (this.eventTriggerState === false) {\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.off')\r\n EventHandlerUtil.trigger(this.element, 'kt.sticky.change')\r\n this.eventTriggerState = true\r\n }\r\n }\r\n }\r\n\r\n private getOption = (name: string) => {\r\n const dataStickyAttr = 'data-kt-sticky-' + name\r\n if (this.element.hasAttribute(dataStickyAttr) === true) {\r\n const attrValueInStr = this.element.getAttribute(dataStickyAttr)\r\n const attrValue = getAttributeValueByBreakpoint(attrValueInStr || '')\r\n if (attrValue !== null && String(attrValue) === 'true') {\r\n return true\r\n } else if (attrValue !== null && String(attrValue) === 'false') {\r\n return false\r\n }\r\n\r\n return attrValue\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n }\r\n }\r\n }\r\n\r\n private disable = () => {\r\n ElementStyleUtil.remove(this.element, 'top')\r\n ElementStyleUtil.remove(this.element, 'width')\r\n ElementStyleUtil.remove(this.element, 'left')\r\n ElementStyleUtil.remove(this.element, 'right')\r\n ElementStyleUtil.remove(this.element, 'z-index')\r\n ElementStyleUtil.remove(this.element, 'position')\r\n }\r\n\r\n private enable = (update: boolean = false) => {\r\n const top = this.getOption('top')\r\n const left = this.getOption('left')\r\n // const right = this.getOption(\"right\");\r\n let width = this.getOption('width')\r\n const zindex = this.getOption('zindex')\r\n\r\n if (update !== true && this.getOption('animation') === true) {\r\n ElementStyleUtil.set(this.element, 'animationDuration', this.getOption('animationSpeed'))\r\n ElementAnimateUtil.animateClass(this.element, 'animation ' + this.getOption('animationClass'))\r\n }\r\n\r\n if (zindex !== null) {\r\n ElementStyleUtil.set(this.element, 'z-index', zindex)\r\n ElementStyleUtil.set(this.element, 'position', 'fixed')\r\n }\r\n\r\n if (top !== null) {\r\n ElementStyleUtil.set(this.element, 'top', top)\r\n }\r\n\r\n if (width !== null && width !== undefined) {\r\n const widthTarget = getObjectPropertyValueByKey(width, 'target')\r\n if (widthTarget) {\r\n const targetElement = document.querySelector(widthTarget)\r\n if (targetElement) {\r\n width = getCSS(targetElement, 'width')\r\n }\r\n }\r\n ElementStyleUtil.set(this.element, 'width', width)\r\n }\r\n\r\n if (left !== null) {\r\n if (String(left).toLowerCase() === 'auto') {\r\n var offsetLeft = getElementOffset(this.element).left\r\n\r\n if (offsetLeft > 0) {\r\n ElementStyleUtil.set(this.element, 'left', String(offsetLeft) + 'px')\r\n }\r\n }\r\n }\r\n }\r\n\r\n public update = () => {\r\n if (document.body.hasAttribute(this.attributeName) === true) {\r\n this.disable()\r\n document.body.removeAttribute(this.attributeName)\r\n this.enable(true)\r\n document.body.setAttribute(this.attributeName, 'on')\r\n }\r\n }\r\n\r\n // Event API\r\n public on = (name: string, callBack: Function) => {\r\n return EventHandlerUtil.on(this.element, name, callBack)\r\n }\r\n\r\n public one = (name: string, callback: Function) => {\r\n return EventHandlerUtil.one(this.element, name, callback)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string) => {\r\n return EventHandlerUtil.trigger(this.element, name)\r\n }\r\n\r\n // Static methods\r\n public static hasInstace(element: HTMLElement) {\r\n return DataUtil.has(element, 'sticky')\r\n }\r\n\r\n public static getInstance(element: HTMLElement) {\r\n if (element !== null && StickyComponent.hasInstace(element)) {\r\n return DataUtil.get(element, 'sticky')\r\n }\r\n }\r\n\r\n // Create Instances\r\n public static createInstances(selector: string) {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((element) => {\r\n const item = element as HTMLElement\r\n let sticky = StickyComponent.getInstance(item)\r\n if (!sticky) {\r\n sticky = new StickyComponent(item, defaultStickyOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: StickyOptions = defaultStickyOptions\r\n ): StickyComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let sticky = StickyComponent.getInstance(item)\r\n if (!sticky) {\r\n sticky = new StickyComponent(item, options)\r\n }\r\n return sticky\r\n }\r\n\r\n public static bootstrap(attr: string = '[data-kt-sticky=\"true\"]') {\r\n StickyComponent.createInstances(attr)\r\n }\r\n\r\n public static reInitialization(attr: string = '[data-kt-sticky=\"true\"]') {\r\n StickyComponent.createInstances(attr)\r\n }\r\n}\r\n\r\nexport {StickyComponent, defaultStickyOptions}\r\n","import {DataUtil, getUniqueIdWithPrefix, EventHandlerUtil} from '../_utils/index'\r\n// Helpers\r\nimport {CookieComponent} from './_CookieComponent'\r\n\r\nexport interface ToggleOptions {\r\n saveState: boolean\r\n targetState?: string\r\n toggleState?: string\r\n targetToggleMode?: string\r\n}\r\n\r\nconst defaultToggleOptions: ToggleOptions = {\r\n saveState: false,\r\n}\r\n\r\nclass ToggleComponent {\r\n element: HTMLElement\r\n instanceUid: string\r\n options: ToggleOptions\r\n state: string = ''\r\n target: HTMLElement | null = null\r\n attribute: string = ''\r\n\r\n constructor(_element: HTMLElement, options: ToggleOptions) {\r\n this.options = Object.assign(defaultToggleOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('toggle')\r\n this.element = _element\r\n\r\n const elementTargetAttr = this.element.getAttribute('data-kt-toggle-target')\r\n if (elementTargetAttr) {\r\n this.target = document.querySelector(elementTargetAttr)\r\n }\r\n const elementToggleAttr = this.element.getAttribute('data-kt-toggle-state')\r\n this.state = elementToggleAttr || ''\r\n this.attribute = 'data-kt-' + this.element.getAttribute('data-kt-toggle-name')\r\n\r\n // Event Handlers\r\n this._handlers()\r\n\r\n // Update Instance\r\n // Bind Instance\r\n DataUtil.set(this.element, 'toggle', this)\r\n }\r\n\r\n private _handlers = () => {\r\n this.element.addEventListener('click', (e: Event) => {\r\n e.preventDefault()\r\n this._toggle()\r\n })\r\n }\r\n\r\n // Event handlers\r\n private _toggle = () => {\r\n // Trigger \"after.toggle\" event\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.change')\r\n\r\n if (this._isEnabled()) {\r\n this._disable()\r\n } else {\r\n this._enable()\r\n }\r\n\r\n // Trigger \"before.toggle\" event\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.changed')\r\n return this\r\n }\r\n\r\n private _enable = () => {\r\n if (this._isEnabled()) {\r\n return\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enable')\r\n this.target?.setAttribute(this.attribute, 'on')\r\n if (this.state.length > 0) {\r\n this.element.classList.add(this.state)\r\n }\r\n\r\n if (this.options.saveState) {\r\n CookieComponent.set(this.attribute, 'on', {})\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.enabled')\r\n return this\r\n }\r\n\r\n private _disable = () => {\r\n if (!this._isEnabled()) {\r\n return false\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disable')\r\n this.target?.removeAttribute(this.attribute)\r\n\r\n if (this.state.length > 0) {\r\n this.element.classList.remove(this.state)\r\n }\r\n\r\n if (this.options.saveState) {\r\n CookieComponent.delete(this.attribute)\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.toggle.disabled')\r\n return this\r\n }\r\n\r\n private _isEnabled = () => {\r\n if (!this.target) {\r\n return false\r\n }\r\n\r\n return String(this.target.getAttribute(this.attribute)).toLowerCase() === 'on'\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n\r\n // Plugin API\r\n // Plugin API\r\n public toggle = () => {\r\n return this._toggle()\r\n }\r\n\r\n public enable = () => {\r\n return this._enable()\r\n }\r\n\r\n public disable = () => {\r\n return this._disable()\r\n }\r\n\r\n public isEnabled = () => {\r\n return this._isEnabled()\r\n }\r\n\r\n public goElement = () => {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event?: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (el: HTMLElement) => {\r\n const toggleElement = DataUtil.get(el, 'toggle')\r\n if (toggleElement) {\r\n return toggleElement\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (selector: string) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let toggleElement = ToggleComponent.getInstance(item)\r\n if (!toggleElement) {\r\n toggleElement = new ToggleComponent(item, defaultToggleOptions)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: ToggleOptions = defaultToggleOptions\r\n ): ToggleComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let toggle = ToggleComponent.getInstance(item)\r\n if (!toggle) {\r\n toggle = new ToggleComponent(item, options)\r\n }\r\n return toggle\r\n }\r\n\r\n public static reinitialization = () => {\r\n ToggleComponent.createInstances('[data-kt-toggle]')\r\n }\r\n\r\n public static bootstrap = () => {\r\n ToggleComponent.createInstances('[data-kt-toggle]')\r\n }\r\n}\r\n\r\nexport {ToggleComponent, defaultToggleOptions}\r\n","/* eslint-disable array-callback-return */\r\n/* eslint-disable no-useless-escape */\r\nimport {DataUtil} from '../_utils/index'\r\n\r\nexport interface IPasswordMeterOptions {\r\n minLength: number\r\n checkUppercase: boolean\r\n checkLowercase: boolean\r\n checkDigit: boolean\r\n checkChar: boolean\r\n scoreHighlightClass: string\r\n}\r\n\r\nexport interface IPasswordMeterQueries {\r\n componentName: string\r\n instanseQuery: string\r\n inputQuery: string\r\n visibilityQuery: string\r\n highlightQuery: string\r\n}\r\n\r\nconst defaultPasswordMeterOptions = {\r\n minLength: 8,\r\n checkUppercase: true,\r\n checkLowercase: true,\r\n checkDigit: true,\r\n checkChar: true,\r\n scoreHighlightClass: 'active',\r\n}\r\n\r\nconst defaultPasswordMeterQueires: IPasswordMeterQueries = {\r\n componentName: 'password-meter',\r\n instanseQuery: '[data-kt-password-meter]',\r\n inputQuery: 'input[type]',\r\n visibilityQuery: '[data-kt-password-meter-control=\"visibility\"]',\r\n highlightQuery: '[data-kt-password-meter-control=\"highlight\"]',\r\n}\r\n\r\nclass PasswordMeterComponent {\r\n element: HTMLElement\r\n inputElement: HTMLInputElement | null\r\n visibilityElement: HTMLElement | null\r\n highlightElement: HTMLElement | null\r\n options: IPasswordMeterOptions\r\n queries: IPasswordMeterQueries\r\n score: number\r\n checkSteps: number\r\n\r\n constructor(\r\n _element: HTMLElement,\r\n _options: IPasswordMeterOptions,\r\n _queries: IPasswordMeterQueries\r\n ) {\r\n this.element = _element\r\n this.options = Object.assign(defaultPasswordMeterOptions, _options)\r\n this.queries = _queries\r\n this.score = 0\r\n this.checkSteps = 5\r\n\r\n // Elements\r\n this.inputElement = this.element.querySelector(this.queries.inputQuery)\r\n this.visibilityElement = this.element.querySelector(this.queries.visibilityQuery)\r\n this.highlightElement = this.element.querySelector(this.queries.highlightQuery)\r\n\r\n // Event Handlers\r\n this.handlers()\r\n\r\n DataUtil.set(this.element, this.queries.componentName, this)\r\n }\r\n\r\n private handlers(): void {\r\n if (this.inputElement) {\r\n this.inputElement.addEventListener('input', () => {\r\n this.check()\r\n })\r\n }\r\n\r\n if (this.visibilityElement) {\r\n this.visibilityElement.addEventListener('click', () => {\r\n this.visitbility()\r\n })\r\n }\r\n }\r\n\r\n private visitbility() {\r\n if (this.visibilityElement && this.inputElement) {\r\n const visibleIcon = this.visibilityElement.querySelector(\r\n 'i:not(.d-none), .svg-icon:not(.d-none)'\r\n )\r\n\r\n const hiddenIcon = this.visibilityElement.querySelector('i.d-none, .svg-icon.d-none')\r\n\r\n const typeAttr = this.inputElement.getAttribute('type') || ''\r\n\r\n if (typeAttr === 'password') {\r\n this.inputElement.setAttribute('type', 'text')\r\n } else {\r\n this.inputElement.setAttribute('type', 'password')\r\n }\r\n\r\n visibleIcon?.classList.add('d-none')\r\n hiddenIcon?.classList.remove('d-none')\r\n\r\n this.inputElement.focus()\r\n }\r\n }\r\n\r\n private checkScore(): number {\r\n return 0\r\n }\r\n\r\n private checkLength(): boolean {\r\n if (this.inputElement) {\r\n return this.inputElement.value.length >= this.options.minLength // 20 score\r\n }\r\n\r\n return false\r\n }\r\n\r\n private checkLowerCase(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[a-z]/.test(val) // 20 score\r\n }\r\n\r\n private checkUppercase(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[A-Z]/.test(val) // 20 score\r\n }\r\n\r\n private checkDigit(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[0-9]/.test(val) // 20 score\r\n }\r\n\r\n private checkChar(): boolean {\r\n const val = this.inputElement ? this.inputElement.value : ''\r\n return /[~`!#$%\\^&*+=\\-\\[\\]\\\\';,/{}|\\\\\":<>\\?]/g.test(val) // 20 score\r\n }\r\n\r\n private getCheckScore(): number {\r\n let count = 1\r\n if (this.options.checkUppercase) {\r\n count++\r\n }\r\n\r\n if (this.options.checkLowercase) {\r\n count++\r\n }\r\n\r\n if (this.options.checkDigit) {\r\n count++\r\n }\r\n\r\n if (this.options.checkChar) {\r\n count++\r\n }\r\n\r\n this.checkSteps = count\r\n return 100 / this.checkSteps\r\n }\r\n\r\n private highlight() {\r\n const items = this.highlightElement\r\n ? [].slice.call(this.highlightElement.querySelectorAll('div'))\r\n : []\r\n const total = items.length\r\n let index = 0\r\n const checkScore = this.getCheckScore()\r\n const score = this.getScore()\r\n\r\n items.map((item: HTMLElement) => {\r\n index++\r\n if (checkScore * index * (this.checkSteps / total) <= score) {\r\n item.classList.add('active')\r\n } else {\r\n item.classList.remove('active')\r\n }\r\n })\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public reset = () => {\r\n this.score = 0\r\n this.highlight()\r\n }\r\n\r\n public getScore() {\r\n return this.score\r\n }\r\n\r\n public check() {\r\n let score = 0\r\n const checkScore = this.checkScore()\r\n if (this.checkLength()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkUppercase && this.checkLowerCase()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkLowercase && this.checkUppercase()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkDigit && this.checkDigit()) {\r\n score = score + checkScore\r\n }\r\n\r\n if (this.options.checkChar && this.checkChar()) {\r\n score = score + checkScore\r\n }\r\n\r\n this.score = score\r\n this.highlight()\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultPasswordMeterQueires.componentName\r\n ) => {\r\n const passwordMeter = DataUtil.get(el, componentName)\r\n if (passwordMeter) {\r\n return passwordMeter\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultPasswordMeterQueires.instanseQuery,\r\n options: IPasswordMeterOptions = defaultPasswordMeterOptions,\r\n queries: IPasswordMeterQueries = defaultPasswordMeterQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let passwordMeter = PasswordMeterComponent.getInstance(item)\r\n if (!passwordMeter) {\r\n passwordMeter = new PasswordMeterComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultPasswordMeterQueires.instanseQuery,\r\n options: IPasswordMeterOptions = defaultPasswordMeterOptions,\r\n queries: IPasswordMeterQueries = defaultPasswordMeterQueires\r\n ): PasswordMeterComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let passwordMeter = PasswordMeterComponent.getInstance(item)\r\n if (!passwordMeter) {\r\n passwordMeter = new PasswordMeterComponent(item, options, queries)\r\n }\r\n return passwordMeter\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultPasswordMeterQueires.instanseQuery) => {\r\n PasswordMeterComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (\r\n selector: string = defaultPasswordMeterQueires.instanseQuery\r\n ) => {\r\n PasswordMeterComponent.createInstances(selector)\r\n }\r\n}\r\nexport {PasswordMeterComponent, defaultPasswordMeterOptions, defaultPasswordMeterQueires}\r\n","import {\r\n getAttributeValueByBreakpoint,\r\n stringSnakeToCamel,\r\n getObjectPropertyValueByKey,\r\n EventHandlerUtil,\r\n throttle,\r\n} from '../_utils/index'\r\n\r\nexport class SwapperStore {\r\n static store: Map = new Map()\r\n\r\n public static set(instanceId: string, drawerComponentObj: SwapperComponent): void {\r\n if (SwapperStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n SwapperStore.store.set(instanceId, drawerComponentObj)\r\n }\r\n\r\n public static get(instanceId: string): SwapperComponent | undefined {\r\n if (!SwapperStore.has(instanceId)) {\r\n return\r\n }\r\n return SwapperStore.store.get(instanceId)\r\n }\r\n\r\n public static remove(instanceId: string): void {\r\n if (!SwapperStore.has(instanceId)) {\r\n return\r\n }\r\n\r\n SwapperStore.store.delete(instanceId)\r\n }\r\n\r\n public static has(instanceId: string): boolean {\r\n return SwapperStore.store.has(instanceId)\r\n }\r\n\r\n public static getAllInstances() {\r\n return SwapperStore.store\r\n }\r\n}\r\n\r\nexport interface ISwapperOptions {\r\n mode: string\r\n}\r\n\r\nexport interface ISwapperQueries {\r\n componentName: string\r\n instanseQuery: string\r\n attrQuery: string\r\n}\r\n\r\nconst defaultSwapperOptions: ISwapperOptions = {\r\n mode: 'append',\r\n}\r\n\r\nconst defaultSwapperQueires: ISwapperQueries = {\r\n componentName: 'swapper',\r\n instanseQuery: '[data-kt-swapper=\"true\"]',\r\n attrQuery: 'data-kt-swapper-',\r\n}\r\n\r\nclass SwapperComponent {\r\n element: HTMLElement\r\n options: ISwapperOptions\r\n queries: ISwapperQueries\r\n\r\n constructor(_element: HTMLElement, _options: ISwapperOptions, _queries: ISwapperQueries) {\r\n this.element = _element\r\n this.options = Object.assign(defaultSwapperOptions, _options)\r\n this.queries = _queries\r\n\r\n // Initial update\r\n this.update()\r\n\r\n SwapperStore.set(this.element.id, this)\r\n }\r\n\r\n private getOption(name: string) {\r\n const attr = this.element.getAttribute(`${this.queries.attrQuery}${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n if (attr != null && String(value) === 'true') {\r\n return true\r\n } else if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public update = () => {\r\n const parentSelector = this.getOption('parent')?.toString()\r\n const mode = this.getOption('mode')\r\n const parentElement = parentSelector ? document.querySelector(parentSelector) : null\r\n\r\n if (parentElement && this.element.parentNode !== parentElement) {\r\n if (mode === 'prepend') {\r\n parentElement.prepend(this.element)\r\n } else if (mode === 'append') {\r\n parentElement.append(this.element)\r\n }\r\n }\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n public trigger = (name: string, event: Event) => {\r\n return EventHandlerUtil.trigger(this.element, name, event)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultSwapperQueires.componentName\r\n ): SwapperComponent | null => {\r\n const place = SwapperStore.get(el.id)\r\n if (place) {\r\n return place as SwapperComponent\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultSwapperQueires.instanseQuery,\r\n options: ISwapperOptions = defaultSwapperOptions,\r\n queries: ISwapperQueries = defaultSwapperQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let place = SwapperComponent.getInstance(item)\r\n if (!place) {\r\n place = new SwapperComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultSwapperQueires.instanseQuery,\r\n options: ISwapperOptions = defaultSwapperOptions,\r\n queries: ISwapperQueries = defaultSwapperQueires\r\n ): SwapperComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let place = SwapperComponent.getInstance(item)\r\n if (!place) {\r\n place = new SwapperComponent(item, options, queries)\r\n }\r\n return place\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultSwapperQueires.instanseQuery) => {\r\n SwapperComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (selector: string = defaultSwapperQueires.instanseQuery) => {\r\n SwapperComponent.createInstances(selector)\r\n }\r\n}\r\n\r\n// Window resize handler\r\nwindow.addEventListener('resize', function () {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Offcanvas instances on window resize\r\n const elements = document.querySelectorAll(defaultSwapperQueires.instanseQuery)\r\n elements.forEach((el) => {\r\n const place = SwapperComponent.getInstance(el as HTMLElement)\r\n if (place) {\r\n place.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n})\r\n\r\nexport {SwapperComponent, defaultSwapperOptions, defaultSwapperQueires}\r\n","import {createPopper, VirtualElement} from '@popperjs/core'\r\nimport {\r\n getElementChild,\r\n getElementParents,\r\n getAttributeValueByBreakpoint,\r\n getUniqueIdWithPrefix,\r\n DataUtil,\r\n ElementStyleUtil,\r\n EventHandlerUtil,\r\n insertAfterElement,\r\n slideUp,\r\n slideDown,\r\n DOMEventHandlerUtil,\r\n throttle,\r\n getHighestZindex,\r\n} from '../_utils/index'\r\n\r\nexport interface MenuOptions {\r\n dropdown: {\r\n hoverTimeout: number\r\n zindex: number\r\n }\r\n accordion: {\r\n slideSpeed: number\r\n expand: boolean\r\n }\r\n}\r\n\r\nconst defaultMenuOptions: MenuOptions = {\r\n dropdown: {\r\n hoverTimeout: 200,\r\n zindex: 105,\r\n },\r\n accordion: {\r\n slideSpeed: 250,\r\n expand: false,\r\n },\r\n}\r\n\r\ntype PopperPlacement =\r\n | 'right'\r\n | 'auto'\r\n | 'auto-start'\r\n | 'auto-end'\r\n | 'top'\r\n | 'bottom'\r\n | 'left'\r\n | 'top-start'\r\n | 'top-end'\r\n | 'bottom-start'\r\n | 'bottom-end'\r\n | 'right-start'\r\n | 'right-end'\r\n | 'left-start'\r\n | 'left-end'\r\n | undefined\r\n\r\nclass MenuComponent {\r\n element: HTMLElement\r\n options: MenuOptions\r\n instanceUid: string\r\n triggerElement: HTMLElement | null = null\r\n\r\n constructor(_element: HTMLElement, options: MenuOptions) {\r\n this.element = _element\r\n this.options = Object.assign(defaultMenuOptions, options)\r\n this.instanceUid = getUniqueIdWithPrefix('menu')\r\n // this.element.setAttribute('data-kt-menu', 'true')\r\n this._setTriggerElement()\r\n this._update()\r\n DataUtil.set(this.element, 'menu', this)\r\n return this\r\n }\r\n\r\n // Set external trigger element\r\n private _setTriggerElement = () => {\r\n const target = document.querySelector(\r\n `[data-kt-menu-target=\"#${this.element.getAttribute('id')}\"`\r\n )\r\n\r\n if (target) {\r\n this.triggerElement = target as HTMLElement\r\n } else if (this.element.closest('[data-kt-menu-trigger]')) {\r\n this.triggerElement = this.element.closest('[data-kt-menu-trigger]') as HTMLElement\r\n } else if (\r\n this.element.parentNode &&\r\n getElementChild(this.element.parentNode as HTMLElement, '[data-kt-menu-trigger]')\r\n ) {\r\n const child = getElementChild(\r\n this.element.parentNode as HTMLElement,\r\n '[data-kt-menu-trigger]'\r\n )\r\n if (child) {\r\n this.triggerElement = child\r\n }\r\n }\r\n\r\n if (this.triggerElement) {\r\n DataUtil.set(this.triggerElement, 'menu', this)\r\n }\r\n }\r\n\r\n // Test if menu has external trigger element\r\n private _isTriggerElement = (item: HTMLElement) => {\r\n return this.triggerElement === item\r\n }\r\n\r\n // Get item option(through html attributes)\r\n private _getItemOption = (item: HTMLElement, name: string) => {\r\n let value: string | JSON | null | boolean = null\r\n if (item && item.hasAttribute('data-kt-menu-' + name)) {\r\n const attr = item.getAttribute('data-kt-menu-' + name) || ''\r\n value = getAttributeValueByBreakpoint(attr)\r\n if (value !== null && String(value) === 'true') {\r\n value = true\r\n } else if (value !== null && String(value) === 'false') {\r\n value = false\r\n }\r\n }\r\n return value\r\n }\r\n\r\n // Get item element\r\n private _getItemElement = (_element: HTMLElement) => {\r\n // Element is the external trigger element\r\n if (this._isTriggerElement(_element)) {\r\n return _element\r\n }\r\n\r\n // Element has item toggler attribute\r\n if (_element.hasAttribute('data-kt-menu-trigger')) {\r\n return _element\r\n }\r\n\r\n // Element has item DOM reference in it's data storage\r\n const itemElement = DataUtil.get(_element, 'item')\r\n if (itemElement) {\r\n return itemElement\r\n }\r\n\r\n // Item is parent of element\r\n const item = _element.closest('.menu-item[data-kt-menu-trigger]')\r\n if (item) {\r\n return item\r\n }\r\n\r\n // Element's parent has item DOM reference in it's data storage\r\n const sub = _element.closest('.menu-sub')\r\n if (sub) {\r\n const subItem = DataUtil.get(sub as HTMLElement, 'item')\r\n if (subItem) {\r\n return subItem\r\n }\r\n }\r\n }\r\n\r\n // Get item parent element\r\n private _getItemParentElement = (item: HTMLElement) => {\r\n const sub = item.closest('.menu-sub')\r\n if (!sub) {\r\n return null\r\n }\r\n\r\n const subItem = DataUtil.get(sub as HTMLElement, 'item')\r\n if (subItem) {\r\n return subItem\r\n }\r\n\r\n const parentItem = sub.closest('.menu-item[data-kt-menu-trigger]')\r\n if (sub && parentItem) {\r\n return parentItem\r\n }\r\n\r\n return null\r\n }\r\n\r\n // Get item parent elements\r\n private _getItemParentElements = (item: HTMLElement) => {\r\n const parents: Array = []\r\n let parent: Element\r\n let i = 0\r\n let buffer: HTMLElement = item\r\n\r\n do {\r\n parent = this._getItemParentElement(buffer)\r\n if (parent) {\r\n parents.push(parent)\r\n buffer = parent as HTMLElement\r\n }\r\n\r\n i++\r\n } while (parent !== null && i < 20)\r\n\r\n if (this.triggerElement) {\r\n parents.unshift(this.triggerElement)\r\n }\r\n\r\n return parents\r\n }\r\n\r\n // Prepare popper config for dropdown(see: https://popper.js.org/docs/v2/)\r\n private _getDropdownPopperConfig = (item: HTMLElement) => {\r\n // Placement\r\n const placementOption = this._getItemOption(item, 'placement')\r\n let placement: PopperPlacement = 'right'\r\n if (placementOption) {\r\n placement = placementOption as PopperPlacement\r\n }\r\n\r\n // Flip\r\n // const flipValue = this._getItemOption(item, 'flip')\r\n // const flip = flipValue ? flipValue.toString().split(',') : []\r\n\r\n // Offset\r\n const offsetValue = this._getItemOption(item, 'offset')\r\n const offset = offsetValue ? offsetValue.toString().split(',') : []\r\n\r\n // Strategy\r\n const strategy: 'absolute' | 'fixed' | undefined =\r\n this._getItemOption(item, 'overflow') === true ? 'absolute' : 'fixed'\r\n\r\n return {\r\n placement: placement,\r\n strategy: strategy,\r\n modifiers: [\r\n {\r\n name: 'offset',\r\n options: {\r\n offset: offset,\r\n },\r\n },\r\n {\r\n name: 'preventOverflow',\r\n },\r\n {\r\n name: 'flip',\r\n options: {\r\n // altBoundary: true,\r\n // fallbackPlacements: flip,\r\n flipVariations: false,\r\n },\r\n },\r\n ],\r\n }\r\n }\r\n\r\n // Get item child element\r\n private _getItemChildElement = (item: HTMLElement) => {\r\n let selector = item\r\n\r\n const subItem = DataUtil.get(item, 'sub')\r\n if (subItem) {\r\n selector = subItem\r\n }\r\n\r\n if (selector) {\r\n //element = selector.querySelector('.show.menu-item[data-kt-menu-trigger]');\r\n const element = selector.querySelector('.menu-item[data-kt-menu-trigger]')\r\n if (element) {\r\n return element\r\n }\r\n }\r\n return null\r\n }\r\n\r\n // Get item child elements\r\n private _getItemChildElements = (item: HTMLElement) => {\r\n const children: Array = []\r\n let child: Element | null\r\n let i = 0\r\n let buffer = item\r\n do {\r\n child = this._getItemChildElement(buffer)\r\n if (child) {\r\n children.push(child)\r\n buffer = child as HTMLElement\r\n }\r\n\r\n i++\r\n } while (child !== null && i < 20)\r\n\r\n return children\r\n }\r\n\r\n // Get item sub element\r\n private _getItemSubElement = (item: HTMLElement) => {\r\n if (!item) {\r\n return null\r\n }\r\n\r\n if (this._isTriggerElement(item)) {\r\n return this.element\r\n }\r\n\r\n if (item.classList.contains('menu-sub')) {\r\n return item\r\n } else if (DataUtil.has(item, 'sub')) {\r\n return DataUtil.get(item, 'sub')\r\n } else {\r\n return getElementChild(item, '.menu-sub')\r\n }\r\n }\r\n\r\n private _getCss = (el: HTMLElement, styleProp: string) => {\r\n const defaultView = (el.ownerDocument || document).defaultView\r\n if (!defaultView) {\r\n return ''\r\n }\r\n\r\n // sanitize property name to css notation\r\n // (hyphen separated words eg. font-Size)\r\n styleProp = styleProp.replace(/([A-Z])/g, '-$1').toLowerCase()\r\n\r\n return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp)\r\n }\r\n\r\n // Get item sub type\r\n private _getItemSubType = (element: HTMLElement) => {\r\n const sub = this._getItemSubElement(element)\r\n if (sub && parseInt(this._getCss(sub, 'z-index')) > 0) {\r\n return 'dropdown'\r\n } else {\r\n return 'accordion'\r\n }\r\n }\r\n\r\n // Test if item's sub is shown\r\n private _isItemSubShown = (item: HTMLElement) => {\r\n let sub = this._getItemSubElement(item)\r\n if (sub) {\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n return sub.classList.contains('show') && sub.hasAttribute('data-popper-placement')\r\n } else {\r\n return item.classList.contains('show')\r\n }\r\n }\r\n\r\n return false\r\n }\r\n\r\n // Test if item dropdown is permanent\r\n private _isItemDropdownPermanent = (item: HTMLElement) => {\r\n return this._getItemOption(item, 'permanent') === true\r\n }\r\n\r\n // Test if item's parent is shown\r\n private _isItemParentShown = (item: HTMLElement) => {\r\n return getElementParents(item, '.menu-item.show').length > 0\r\n }\r\n\r\n // Test of it is item sub element\r\n private _isItemSubElement = (item: HTMLElement) => {\r\n return item.classList.contains('menu-sub')\r\n }\r\n\r\n // Test if item has sub\r\n private _hasItemSub = (item: HTMLElement) => {\r\n return item.classList.contains('menu-item') && item.hasAttribute('data-kt-menu-trigger')\r\n }\r\n\r\n // Get link element\r\n private _getItemLinkElement = (item: HTMLElement) => {\r\n return getElementChild(item, '.menu-link')\r\n }\r\n\r\n // Get toggle element\r\n private _getItemToggleElement = (item: HTMLElement) => {\r\n if (this.triggerElement) {\r\n return this.triggerElement\r\n }\r\n\r\n return this._getItemLinkElement(item)\r\n }\r\n\r\n // Show item dropdown\r\n private _showDropdown = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.show') === false) {\r\n return\r\n }\r\n\r\n // Hide all currently shown dropdowns except current one\r\n MenuComponent.hideDropdowns(item)\r\n\r\n // const toggle = this._isTriggerElement(item) ? item : this._getItemLinkElement(item);\r\n const sub = this._getItemSubElement(item)\r\n const width = this._getItemOption(item, 'width')\r\n const height = this._getItemOption(item, 'height')\r\n\r\n let zindex = this.options.dropdown.zindex\r\n const parentZindex = getHighestZindex(item) // update\r\n // Apply a new z-index if dropdown's toggle element or it's parent has greater z-index // update\r\n if (parentZindex !== null && parentZindex >= zindex) {\r\n zindex = parentZindex + 1\r\n }\r\n\r\n if (zindex) {\r\n ElementStyleUtil.set(sub, 'z-index', zindex)\r\n }\r\n\r\n if (width) {\r\n ElementStyleUtil.set(sub, 'width', width)\r\n }\r\n\r\n if (height) {\r\n ElementStyleUtil.set(sub, 'height', height)\r\n }\r\n\r\n this.initDropdownPopper(item, sub)\r\n\r\n item.classList.add('show')\r\n item.classList.add('menu-dropdown')\r\n sub.classList.add('show')\r\n\r\n // Append the sub the the root of the menu\r\n if (this._getItemOption(item, 'overflow') === true) {\r\n document.body.appendChild(sub)\r\n DataUtil.set(item, 'sub', sub)\r\n DataUtil.set(sub, 'item', item)\r\n DataUtil.set(sub, 'menu', this)\r\n } else {\r\n DataUtil.set(sub, 'item', item)\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.shown')\r\n }\r\n\r\n // Init dropdown popper(new)\r\n private initDropdownPopper = (item: HTMLElement, sub: HTMLElement) => {\r\n // Setup popper instance\r\n let reference\r\n const attach = this._getItemOption(item, 'attach') as string\r\n\r\n if (attach) {\r\n if (attach === 'parent') {\r\n reference = item.parentNode\r\n } else {\r\n reference = document.querySelector(attach)\r\n }\r\n } else {\r\n reference = item\r\n }\r\n\r\n if (reference) {\r\n const popper = createPopper(\r\n reference as Element | VirtualElement,\r\n sub,\r\n this._getDropdownPopperConfig(item)\r\n )\r\n DataUtil.set(item, 'popper', popper)\r\n }\r\n }\r\n\r\n // Hide item dropdown\r\n private _hideDropdown = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hide') === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n ElementStyleUtil.set(sub, 'z-index', '')\r\n ElementStyleUtil.set(sub, 'width', '')\r\n ElementStyleUtil.set(sub, 'height', '')\r\n item.classList.remove('show')\r\n item.classList.remove('menu-dropdown')\r\n sub.classList.remove('show')\r\n\r\n // Append the sub back to it's parent\r\n if (this._getItemOption(item, 'overflow') === true) {\r\n if (item.classList.contains('menu-item')) {\r\n item.appendChild(sub)\r\n } else {\r\n insertAfterElement(this.element, item)\r\n }\r\n\r\n DataUtil.remove(item, 'sub')\r\n DataUtil.remove(sub, 'item')\r\n DataUtil.remove(sub, 'menu')\r\n }\r\n\r\n if (DataUtil.has(item, 'popper') === true) {\r\n DataUtil.get(item, 'popper').destroy()\r\n DataUtil.remove(item, 'popper')\r\n }\r\n\r\n // Destroy popper(new)\r\n this.destroyDropdownPopper(item)\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')\r\n }\r\n\r\n // Destroy dropdown popper(new)\r\n private destroyDropdownPopper = (item: HTMLElement) => {\r\n if (DataUtil.has(item, 'popper') === true) {\r\n DataUtil.get(item, 'popper').destroy()\r\n DataUtil.remove(item, 'popper')\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.dropdown.hidden')\r\n }\r\n\r\n private _showAccordion = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.show') === false) {\r\n return\r\n }\r\n\r\n if (this.options.accordion.expand === false) {\r\n this._hideAccordions(item)\r\n }\r\n\r\n if (DataUtil.has(item, 'popper') === true) {\r\n this._hideDropdown(item)\r\n }\r\n\r\n item.classList.add('hover') // updateWW\r\n item.classList.add('showing')\r\n\r\n const subElement = this._getItemSubElement(item)\r\n if (subElement) {\r\n const sub = subElement as HTMLElement\r\n slideDown(sub, this.options.accordion.slideSpeed, () => {\r\n item.classList.remove('showing')\r\n item.classList.add('show')\r\n sub.classList.add('show')\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.shown')\r\n })\r\n }\r\n }\r\n\r\n private _hideAccordion = (item: HTMLElement) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hide') === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n item.classList.add('hiding')\r\n\r\n if (sub) {\r\n slideUp(sub, this.options.accordion.slideSpeed, () => {\r\n item.classList.remove('hiding')\r\n item.classList.remove('show')\r\n sub.classList.remove('show')\r\n item.classList.remove('hover') // update\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.accordion.hidden')\r\n })\r\n }\r\n }\r\n\r\n // Hide all shown accordions of item\r\n private _hideAccordions = (item: HTMLElement) => {\r\n const itemsToHide = this.element.querySelectorAll('.show[data-kt-menu-trigger]')\r\n if (itemsToHide && itemsToHide.length > 0) {\r\n for (var i = 0, len = itemsToHide.length; i < len; i++) {\r\n const itemToHide = itemsToHide[i] as HTMLElement\r\n\r\n if (\r\n this._getItemSubType(itemToHide) === 'accordion' &&\r\n itemToHide !== item &&\r\n item.contains(itemToHide) === false &&\r\n itemToHide.contains(item) === false\r\n ) {\r\n this._hideAccordion(itemToHide)\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Event Handlers\r\n // Reset item state classes if item sub type changed\r\n private _reset = (item: HTMLElement) => {\r\n if (this._hasItemSub(item) === false) {\r\n return\r\n }\r\n\r\n const sub = this._getItemSubElement(item)\r\n\r\n // Reset sub state if sub type is changed during the window resize\r\n if (DataUtil.has(item, 'type') && DataUtil.get(item, 'type') !== this._getItemSubType(item)) {\r\n // updated\r\n item.classList.remove('hover')\r\n item.classList.remove('show')\r\n item.classList.remove('show')\r\n if (sub && sub.removeClass) {\r\n sub.removeClass(sub, 'show')\r\n }\r\n } // updated\r\n }\r\n\r\n // TODO: not done\r\n private _destroy = () => {}\r\n\r\n // Update all item state classes if item sub type changed\r\n private _update = () => {\r\n const items = this.element.querySelectorAll('.menu-item[data-kt-menu-trigger]')\r\n items.forEach((el) => this._reset(el as HTMLElement))\r\n }\r\n\r\n // Hide item sub\r\n private _hide = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === false) {\r\n return\r\n }\r\n\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n this._hideDropdown(item)\r\n } else if (this._getItemSubType(item) === 'accordion') {\r\n this._hideAccordion(item)\r\n }\r\n }\r\n\r\n // Show item sub\r\n private _show = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === true) {\r\n return\r\n }\r\n\r\n if (this._getItemSubType(item) === 'dropdown') {\r\n this._showDropdown(item) // // show current dropdown\r\n } else if (this._getItemSubType(item) === 'accordion') {\r\n this._showAccordion(item)\r\n }\r\n\r\n // Remember last submenu type\r\n\r\n DataUtil.set(item, 'type', this._getItemSubType(item)) // updated\r\n }\r\n\r\n // Toggle item sub\r\n private _toggle = (item: HTMLElement) => {\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._isItemSubShown(item) === true) {\r\n this._hide(item)\r\n } else {\r\n this._show(item)\r\n }\r\n }\r\n\r\n // Mouseout handle\r\n private _mouseout = (element: HTMLElement, e: MouseEvent) => {\r\n const item = this._getItemElement(element)\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'trigger') !== 'hover') {\r\n return\r\n }\r\n\r\n const timeout = setTimeout(() => {\r\n if (DataUtil.get(item, 'hover') === '1') {\r\n this._hide(item)\r\n }\r\n }, this.options.dropdown.hoverTimeout)\r\n\r\n DataUtil.set(item, 'hover', '1')\r\n DataUtil.set(item, 'timeout', timeout)\r\n }\r\n\r\n // Mouseover handle\r\n private _mouseover = (element: HTMLElement, e: MouseEvent) => {\r\n const item = this._getItemElement(element)\r\n if (!item) {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'trigger') !== 'hover') {\r\n return\r\n }\r\n\r\n if (DataUtil.get(item, 'hover') === '1') {\r\n clearTimeout(DataUtil.get(item, 'timeout'))\r\n DataUtil.remove(item, 'hover')\r\n DataUtil.remove(item, 'timeout')\r\n }\r\n\r\n this._show(item)\r\n }\r\n\r\n // Dismiss handler\r\n private _dismiss = (element: HTMLElement, e: Event) => {\r\n const item = this._getItemElement(element)\r\n const items = this._getItemChildElements(item)\r\n //if ( item !== null && _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\r\n const itemSubType = this._getItemSubType(item)\r\n if (item !== null && itemSubType === 'dropdown') {\r\n this._hide(item) // hide items dropdown\r\n\r\n // Hide all child elements as well\r\n if (items.length > 0) {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n //if ( _getItemOption(item, 'trigger') === 'click' && _getItemSubType(item) === 'dropdown' ) {\r\n if (items[i] !== null && this._getItemSubType(items[i] as HTMLElement) === 'dropdown') {\r\n this._hide(items[i] as HTMLElement)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Link handler\r\n private _link = (element: HTMLElement, e: Event) => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.menu.link.click') === false) {\r\n return\r\n }\r\n\r\n // Dismiss all shown dropdowns\r\n MenuComponent.hideDropdowns(undefined)\r\n EventHandlerUtil.trigger(this.element, 'kt.menu.link.clicked')\r\n }\r\n\r\n private _click = (element: HTMLElement, e: Event) => {\r\n e.preventDefault()\r\n const item = this._getItemElement(element)\r\n if (this._getItemOption(item, 'trigger') !== 'click') {\r\n return\r\n }\r\n\r\n if (this._getItemOption(item, 'toggle') === false) {\r\n this._show(item)\r\n } else {\r\n this._toggle(item)\r\n }\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n public click = (element: HTMLElement, e: Event) => {\r\n return this._click(element, e)\r\n }\r\n\r\n public link = (element: HTMLElement, e: Event) => {\r\n return this._link(element, e)\r\n }\r\n\r\n public dismiss = (element: HTMLElement, e: Event) => {\r\n return this._dismiss(element, e)\r\n }\r\n\r\n public mouseover = (element: HTMLElement, e: Event) => {\r\n return this._mouseover(element, e as MouseEvent)\r\n }\r\n\r\n public mouseout = (element: HTMLElement, e: Event) => {\r\n return this._mouseout(element, e as MouseEvent)\r\n }\r\n\r\n // General Methods\r\n public getItemTriggerType = (item: HTMLElement) => {\r\n return this._getItemOption(item, 'trigger')\r\n }\r\n\r\n public getItemSubType = (element: HTMLElement) => {\r\n return this._getItemSubType(element)\r\n }\r\n\r\n public show = (item: HTMLElement) => {\r\n return this._show(item)\r\n }\r\n\r\n public hide = (item: HTMLElement) => {\r\n return this._hide(item)\r\n }\r\n\r\n public reset = (item: HTMLElement) => {\r\n return this._reset(item)\r\n }\r\n\r\n public update = () => {\r\n return this._update()\r\n }\r\n\r\n public getElement = () => {\r\n return this.element\r\n }\r\n\r\n public getItemLinkElement = (item: HTMLElement) => {\r\n return this._getItemLinkElement(item)\r\n }\r\n\r\n public getItemToggleElement = (item: HTMLElement) => {\r\n return this._getItemToggleElement(item)\r\n }\r\n\r\n public getItemSubElement = (item: HTMLElement) => {\r\n return this._getItemSubElement(item)\r\n }\r\n\r\n public getItemParentElements = (item: HTMLElement) => {\r\n return this._getItemParentElements(item)\r\n }\r\n\r\n public isItemSubShown = (item: HTMLElement) => {\r\n return this._isItemSubShown(item)\r\n }\r\n\r\n public isItemParentShown = (item: HTMLElement) => {\r\n return this._isItemParentShown(item)\r\n }\r\n\r\n public getTriggerElement = () => {\r\n return this.triggerElement\r\n }\r\n\r\n public isItemDropdownPermanent = (item: HTMLElement) => {\r\n return this._isItemDropdownPermanent(item)\r\n }\r\n\r\n // Accordion Mode Methods\r\n public hideAccordions = (item: HTMLElement) => {\r\n return this._hideAccordions(item)\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: any) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: any) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n // public static methods\r\n // Get KTMenu instance by element\r\n public static getInstance = (element: HTMLElement) => {\r\n // Element has menu DOM reference in it's DATA storage\r\n const elementMenu = DataUtil.get(element, 'menu')\r\n if (elementMenu) {\r\n return elementMenu\r\n }\r\n\r\n // Element has .menu parent\r\n const menu = element.closest('.menu')\r\n if (menu) {\r\n const menuData = DataUtil.get(menu as HTMLElement, 'menu')\r\n if (menuData) {\r\n return menuData\r\n }\r\n }\r\n\r\n // Element has a parent with DOM reference to .menu in it's DATA storage\r\n if (element.classList.contains('menu-link')) {\r\n const sub = element.closest('.menu-sub')\r\n if (sub) {\r\n const subMenu = DataUtil.get(sub as HTMLElement, 'menu')\r\n if (subMenu) {\r\n return subMenu\r\n }\r\n }\r\n }\r\n\r\n return null\r\n }\r\n\r\n // Hide all dropdowns and skip one if provided\r\n public static hideDropdowns = (skip: HTMLElement | undefined) => {\r\n const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n\r\n if (items && items.length > 0) {\r\n for (let i = 0, len = items.length; i < len; i++) {\r\n const item = items[i]\r\n const menu = MenuComponent.getInstance(item as HTMLElement)\r\n\r\n if (menu && menu.getItemSubType(item) === 'dropdown') {\r\n if (skip) {\r\n if (\r\n menu.getItemSubElement(item).contains(skip) === false &&\r\n item.contains(skip) === false &&\r\n item !== skip\r\n ) {\r\n menu.hide(item)\r\n }\r\n } else {\r\n menu.hide(item)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n public static updateDropdowns = () => {\r\n const items = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n if (items && items.length > 0) {\r\n for (var i = 0, len = items.length; i < len; i++) {\r\n var item = items[i]\r\n\r\n if (DataUtil.has(item as HTMLElement, 'popper')) {\r\n DataUtil.get(item as HTMLElement, 'popper').forceUpdate()\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Global handlers\r\n public static createInstances = (selector: string) => {\r\n // Initialize menus\r\n document.querySelectorAll(selector).forEach((el) => {\r\n const menuItem = el as HTMLElement\r\n let menuInstance = MenuComponent.getInstance(menuItem)\r\n if (!menuInstance) {\r\n menuInstance = new MenuComponent(el as HTMLElement, defaultMenuOptions)\r\n }\r\n })\r\n }\r\n\r\n public static initGlobalHandlers = () => {\r\n // Dropdown handler\r\n document.addEventListener('click', (e) => {\r\n const menuItems = document.querySelectorAll('.show.menu-dropdown[data-kt-menu-trigger]')\r\n if (menuItems && menuItems.length > 0) {\r\n for (let i = 0; i < menuItems.length; i++) {\r\n const item = menuItems[i] as HTMLElement\r\n const menuObj = MenuComponent.getInstance(item) as MenuComponent\r\n if (menuObj && menuObj.getItemSubType(item) === 'dropdown') {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n const menu = menuObj.getElement()\r\n const sub = menuObj.getItemSubElement(item) as HTMLElement\r\n if (item === e.target || item.contains(e.target as HTMLElement)) {\r\n continue\r\n }\r\n\r\n if (sub && (sub === e.target || sub.contains(e.target as HTMLElement))) {\r\n continue\r\n }\r\n menuObj.hide(item)\r\n }\r\n }\r\n }\r\n })\r\n\r\n // Sub toggle handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '.menu-item[data-kt-menu-trigger] > .menu-link, [data-kt-menu-trigger]:not(.menu-item):not([data-kt-menu-trigger=\"auto\"])',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu) {\r\n return menu.click(this, e)\r\n }\r\n }\r\n )\r\n\r\n // // Link handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '.menu-item:not([data-kt-menu-trigger]) > .menu-link',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n e.stopPropagation()\r\n const menu = MenuComponent.getInstance(this)\r\n if (menu && menu.link) {\r\n return menu.link(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Dismiss handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-dismiss=\"true\"]',\r\n 'click',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu) {\r\n return menu.dismiss(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Mouseover handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-trigger], .menu-sub',\r\n 'mouseover',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu && menu.getItemSubType(this) === 'dropdown') {\r\n return menu.mouseover(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Mouseout handler\r\n DOMEventHandlerUtil.on(\r\n document.body,\r\n '[data-kt-menu-trigger], .menu-sub',\r\n 'mouseout',\r\n function (this: HTMLElement, e: Event) {\r\n const menu = MenuComponent.getInstance(this) as MenuComponent\r\n if (menu && menu.getItemSubType(this) === 'dropdown') {\r\n return menu.mouseout(this, e)\r\n }\r\n }\r\n )\r\n\r\n // Resize handler\r\n window.addEventListener('resize', () => {\r\n let timer\r\n throttle(\r\n timer,\r\n () => {\r\n // Locate and update Drawer instances on window resize\r\n const elements = document.querySelectorAll('[data-kt-menu=\"true\"]')\r\n elements.forEach((el) => {\r\n const menu = MenuComponent.getInstance(el as HTMLElement)\r\n if (menu) {\r\n menu.update()\r\n }\r\n })\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n public static bootstrap = () => {\r\n MenuComponent.initGlobalHandlers()\r\n MenuComponent.createInstances('[data-kt-menu=\"true\"]')\r\n }\r\n\r\n public static reinitialization = () => {\r\n MenuComponent.createInstances('[data-kt-menu=\"true\"]')\r\n }\r\n\r\n public static createInsance = (\r\n selector: string,\r\n options: MenuOptions = defaultMenuOptions\r\n ): MenuComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let menu = MenuComponent.getInstance(item)\r\n if (!menu) {\r\n menu = new MenuComponent(item, options)\r\n }\r\n return menu\r\n }\r\n}\r\n\r\nexport {MenuComponent, defaultMenuOptions}\r\n","import {\r\n EventHandlerUtil,\r\n DataUtil,\r\n getBreakpoint,\r\n getAttributeValueByBreakpoint,\r\n stringSnakeToCamel,\r\n getObjectPropertyValueByKey,\r\n getViewPort,\r\n isVisibleElement,\r\n throttle,\r\n} from '../_utils/index'\r\n\r\nimport {MenuComponent, defaultMenuOptions} from './MenuComponent'\r\n\r\nexport interface ISearchOptions {\r\n minLength: number // Miniam text lenght to query search\r\n keypress: boolean // Enable search on keypress\r\n enter: boolean // Enable search on enter key press\r\n layout: 'menu' | 'inline' // Use 'menu' or 'inline' layout options to display search results\r\n responsive?: number // Pass integer value or bootstrap compatible breakpoint key(sm,md,lg,xl,xxl) to enable reponsive form mode for device width below the breakpoint value\r\n showOnFocus: boolean // Always show menu on input focus\r\n}\r\n\r\nexport interface ISearchQueries {\r\n componentName: string\r\n instanseQuery: string\r\n attrQuery: string\r\n}\r\n\r\nconst defaultSearchOptions: ISearchOptions = {\r\n minLength: 2, // Miniam text lenght to query search\r\n keypress: true, // Enable search on keypress\r\n enter: true, // Enable search on enter key press\r\n layout: 'menu', // Use 'menu' or 'inline' layout options to display search results\r\n showOnFocus: true, // Always show menu on input focus\r\n}\r\n\r\nconst defaultSearchQueires: ISearchQueries = {\r\n componentName: 'search',\r\n instanseQuery: '[data-kt-search]',\r\n attrQuery: 'data-kt-search-',\r\n}\r\n\r\nclass SearchComponent {\r\n element: HTMLElement\r\n contentElement: HTMLElement\r\n formElement: HTMLFormElement\r\n inputElement: HTMLInputElement\r\n spinnerElement: HTMLElement\r\n clearElement: HTMLElement\r\n toggleElement: HTMLElement\r\n submitElement: HTMLElement\r\n toolbarElement: HTMLElement\r\n resultsElement: HTMLElement\r\n suggestionElement: HTMLElement\r\n emptyElement: HTMLElement\r\n layout: any\r\n\r\n options: ISearchOptions\r\n queries: ISearchQueries\r\n\r\n processing: boolean = false\r\n menuObject: MenuComponent | undefined\r\n\r\n constructor(_element: HTMLElement, _options: ISearchOptions, _queries: ISearchQueries) {\r\n // Variables\r\n this.options = Object.assign(defaultSearchOptions, _options)\r\n this.queries = _queries\r\n\r\n // Elements\r\n this.element = _element\r\n this.contentElement = this._getElement('content') as HTMLElement\r\n this.formElement = this._getElement('form') as HTMLFormElement\r\n this.inputElement = this._getElement('input') as HTMLInputElement\r\n this.spinnerElement = this._getElement('spinner') as HTMLElement\r\n this.clearElement = this._getElement('clear') as HTMLElement\r\n this.toggleElement = this._getElement('toggle') as HTMLElement\r\n this.submitElement = this._getElement('submit') as HTMLElement\r\n this.toolbarElement = this._getElement('toolbar') as HTMLElement\r\n\r\n this.resultsElement = this._getElement('results') as HTMLElement\r\n this.suggestionElement = this._getElement('suggestion') as HTMLElement\r\n this.emptyElement = this._getElement('empty') as HTMLElement\r\n\r\n // Layout\r\n this.layout = this.getOption('layout')\r\n if (this.layout === 'menu') {\r\n this.menuObject = new MenuComponent(this.contentElement, defaultMenuOptions)\r\n }\r\n\r\n // Update\r\n this.update()\r\n\r\n // Event Handlers\r\n this.handlers()\r\n\r\n DataUtil.set(this.element, this.queries.componentName, this)\r\n }\r\n\r\n private _getElement = (name: string) => {\r\n return this.element.querySelector('[data-kt-search-element=\"' + name + '\"]')\r\n }\r\n\r\n // Get option\r\n private getOption = (name: string) => {\r\n const attr = this.element.getAttribute(`${this.queries.attrQuery}${name}`)\r\n if (attr) {\r\n let value = getAttributeValueByBreakpoint(attr)\r\n\r\n if (value !== null && String(value) === 'true') {\r\n return true\r\n } else if (value !== null && String(value) === 'false') {\r\n return false\r\n }\r\n\r\n return value\r\n } else {\r\n const optionName = stringSnakeToCamel(name)\r\n\r\n const option = getObjectPropertyValueByKey(this.options, optionName)\r\n if (option) {\r\n return getAttributeValueByBreakpoint(option)\r\n } else {\r\n return null\r\n }\r\n }\r\n }\r\n\r\n // Check if responsive form mode is enabled\r\n private getResponsiveFormMode = () => {\r\n const responsive = this.getOption('responsive') as string\r\n const width = getViewPort().width\r\n\r\n if (!responsive) {\r\n return null\r\n }\r\n\r\n const breakpoint = getBreakpoint(responsive)\r\n let breakPointNum = -1\r\n if (!breakpoint) {\r\n breakPointNum = parseInt(responsive)\r\n } else {\r\n breakPointNum = +breakpoint\r\n }\r\n\r\n if (width < breakPointNum) {\r\n return 'on'\r\n } else {\r\n return 'off'\r\n }\r\n }\r\n\r\n // Focus\r\n private focus = () => {\r\n this.element.classList.add('focus')\r\n\r\n if (\r\n this.getOption('show-on-focus') === true ||\r\n this.inputElement.value.length >= this.options.minLength\r\n ) {\r\n this.show()\r\n }\r\n }\r\n\r\n // Blur\r\n private blur = () => {\r\n this.element.classList.remove('focus')\r\n }\r\n\r\n // Enter\r\n private enter = (e: KeyboardEvent) => {\r\n const key = e.charCode || e.keyCode || 0\r\n\r\n if (key === 13) {\r\n e.preventDefault()\r\n\r\n this.search()\r\n }\r\n }\r\n\r\n // Input\r\n private input = () => {\r\n if (this.getOption('min-length')) {\r\n const minLength = parseInt(this.getOption('min-length') as string)\r\n\r\n if (this.inputElement.value.length >= minLength) {\r\n this.search()\r\n } else if (this.inputElement.value.length === 0) {\r\n this.clear()\r\n }\r\n }\r\n }\r\n\r\n private handlers(): void {\r\n // Focus\r\n this.inputElement.addEventListener('focus', this.focus)\r\n\r\n // Blur\r\n this.inputElement.addEventListener('blur', this.blur)\r\n\r\n // Keypress\r\n if (this.getOption('keypress') === true) {\r\n this.inputElement.addEventListener('input', this.input)\r\n }\r\n\r\n // Submit\r\n if (this.submitElement) {\r\n this.submitElement.addEventListener('click', this.search)\r\n }\r\n\r\n // Enter\r\n if (this.getOption('enter') === true) {\r\n this.inputElement.addEventListener('keypress', this.enter)\r\n }\r\n\r\n // Clear\r\n if (this.clearElement) {\r\n this.clearElement.addEventListener('click', this.clear)\r\n }\r\n\r\n // Menu\r\n if (this.menuObject) {\r\n // Toggle menu\r\n if (this.toggleElement) {\r\n this.toggleElement.addEventListener('click', this.show)\r\n\r\n this.menuObject.on('kt.menu.dropdown.show', function () {\r\n // @ts-ignore\r\n if (isVisibleElement(this.toggleElement)) {\r\n // @ts-ignore\r\n this.toggleElement.classList.add('active')\r\n // @ts-ignore\r\n this.toggleElement.classList.add('show')\r\n }\r\n })\r\n\r\n this.menuObject.on('kt.menu.dropdown.hide', function () {\r\n // @ts-ignore\r\n if (isVisibleElement(this.toggleElement)) {\r\n // @ts-ignore\r\n this.toggleElement.classList.remove('active')\r\n // @ts-ignore\r\n this.toggleElement.classList.remove('show')\r\n }\r\n })\r\n }\r\n\r\n this.menuObject.on('kt.menu.dropdown.shown', function () {\r\n // @ts-ignore\r\n this.inputElement.focus()\r\n })\r\n }\r\n\r\n // Window resize handling\r\n window.addEventListener('resize', () => {\r\n let timer\r\n\r\n throttle(\r\n timer,\r\n () => {\r\n this.update()\r\n },\r\n 200\r\n )\r\n })\r\n }\r\n\r\n ///////////////////////\r\n // ** Public API ** //\r\n ///////////////////////\r\n // Update\r\n public update = () => {\r\n // Handle responsive form\r\n if (this.layout === 'menu') {\r\n let responsiveFormMode = this.getResponsiveFormMode()\r\n\r\n if (responsiveFormMode === 'on' && this.contentElement.contains(this.formElement) === false) {\r\n this.contentElement.prepend(this.formElement)\r\n this.formElement.classList.remove('d-none')\r\n } else if (\r\n responsiveFormMode === 'off' &&\r\n this.contentElement.contains(this.formElement) === true\r\n ) {\r\n this.element.prepend(this.formElement)\r\n this.formElement.classList.add('d-none')\r\n }\r\n }\r\n }\r\n\r\n // Show menu\r\n public show = () => {\r\n if (this.menuObject) {\r\n this.update()\r\n\r\n this.menuObject.show(this.element)\r\n }\r\n }\r\n\r\n // Hide menu\r\n public hide = () => {\r\n if (this.menuObject) {\r\n this.update()\r\n\r\n this.menuObject.hide(this.element)\r\n }\r\n }\r\n\r\n // Search\r\n public search = () => {\r\n if (this.processing === false) {\r\n // Show search spinner\r\n if (this.spinnerElement) {\r\n this.spinnerElement.classList.remove('d-none')\r\n }\r\n\r\n // Hide search clear button\r\n if (this.clearElement) {\r\n this.clearElement.classList.add('d-none')\r\n }\r\n\r\n // Hide search toolbar\r\n if (this.toolbarElement) {\r\n this.toolbarElement.classList.add('d-none')\r\n }\r\n\r\n // Focus input\r\n this.inputElement.focus()\r\n\r\n this.processing = true\r\n EventHandlerUtil.trigger(this.element, 'kt.search.process')\r\n }\r\n }\r\n\r\n // Complete\r\n public complete = () => {\r\n if (this.spinnerElement) {\r\n this.spinnerElement.classList.add('d-none')\r\n }\r\n\r\n // Show search toolbar\r\n if (this.clearElement) {\r\n this.clearElement.classList.remove('d-none')\r\n }\r\n\r\n if (this.inputElement.value.length === 0) {\r\n this.clear()\r\n }\r\n\r\n // Focus input\r\n this.inputElement.focus()\r\n\r\n this.show()\r\n\r\n this.processing = false\r\n }\r\n\r\n // Clear\r\n public clear = () => {\r\n if (EventHandlerUtil.trigger(this.element, 'kt.search.clear') === false) {\r\n return\r\n }\r\n\r\n // Clear and focus input\r\n this.inputElement.value = ''\r\n this.inputElement.focus()\r\n\r\n // Hide clear icon\r\n if (this.clearElement) {\r\n this.clearElement.classList.add('d-none')\r\n }\r\n\r\n // Show search toolbar\r\n if (this.toolbarElement) {\r\n this.toolbarElement.classList.remove('d-none')\r\n }\r\n\r\n // Hide menu\r\n if (this.getOption('show-on-focus') === false) {\r\n this.hide()\r\n }\r\n\r\n EventHandlerUtil.trigger(this.element, 'kt.search.cleared')\r\n }\r\n\r\n public isProcessing = () => {\r\n return this.processing\r\n }\r\n\r\n public getQuery = () => {\r\n return this.inputElement.value\r\n }\r\n\r\n public getMenu = () => {\r\n return this.menuObject\r\n }\r\n\r\n public getFormElement = () => {\r\n return this.formElement\r\n }\r\n\r\n public getInputElement(): HTMLInputElement {\r\n return this.inputElement\r\n }\r\n\r\n public getContentElement(): HTMLElement {\r\n return this.contentElement\r\n }\r\n\r\n public getElement(): HTMLElement {\r\n return this.element\r\n }\r\n\r\n // Event API\r\n public on = (name: string, handler: Function) => {\r\n return EventHandlerUtil.on(this.element, name, handler)\r\n }\r\n\r\n public one = (name: string, handler: Function) => {\r\n return EventHandlerUtil.one(this.element, name, handler)\r\n }\r\n\r\n public off = (name: string) => {\r\n return EventHandlerUtil.off(this.element, name)\r\n }\r\n\r\n // Static methods\r\n public static getInstance = (\r\n el: HTMLElement,\r\n componentName: string = defaultSearchQueires.componentName\r\n ) => {\r\n const Search = DataUtil.get(el, componentName)\r\n if (Search) {\r\n return Search\r\n }\r\n\r\n return null\r\n }\r\n\r\n public static createInstances = (\r\n selector: string = defaultSearchQueires.instanseQuery,\r\n options: ISearchOptions = defaultSearchOptions,\r\n queries: ISearchQueries = defaultSearchQueires\r\n ) => {\r\n const elements = document.body.querySelectorAll(selector)\r\n elements.forEach((el) => {\r\n const item = el as HTMLElement\r\n let Search = SearchComponent.getInstance(item)\r\n if (!Search) {\r\n Search = new SearchComponent(item, options, queries)\r\n }\r\n })\r\n }\r\n\r\n public static createInsance = (\r\n selector: string = defaultSearchQueires.instanseQuery,\r\n options: ISearchOptions = defaultSearchOptions,\r\n queries: ISearchQueries = defaultSearchQueires\r\n ): SearchComponent | undefined => {\r\n const element = document.body.querySelector(selector)\r\n if (!element) {\r\n return\r\n }\r\n const item = element as HTMLElement\r\n let Search = SearchComponent.getInstance(item)\r\n if (!Search) {\r\n Search = new SearchComponent(item, options, queries)\r\n }\r\n return Search\r\n }\r\n\r\n public static bootstrap = (selector: string = defaultSearchQueires.instanseQuery) => {\r\n SearchComponent.createInstances(selector)\r\n }\r\n\r\n public static reinitialization = (selector: string = defaultSearchQueires.instanseQuery) => {\r\n SearchComponent.createInstances(selector)\r\n }\r\n}\r\nexport {SearchComponent, defaultSearchOptions, defaultSearchQueires}\r\n","import React, {useRef, useEffect} from 'react'\r\nimport {useLocation} from 'react-router'\r\nimport clsx from 'clsx'\r\nimport {AsideMenuMain} from './AsideMenuMain'\r\nimport {\r\n DrawerComponent,\r\n MenuComponent,\r\n ScrollComponent,\r\n ToggleComponent,\r\n} from '../../../assets/ts/components'\r\n\r\ntype Props = {\r\n asideMenuCSSClasses: string[]\r\n}\r\n\r\nconst AsideMenu: React.FC = ({asideMenuCSSClasses}) => {\r\n const scrollRef = useRef(null)\r\n const {pathname} = useLocation()\r\n\r\n useEffect(() => {\r\n setTimeout(() => {\r\n MenuComponent.reinitialization()\r\n DrawerComponent.reinitialization()\r\n ToggleComponent.reinitialization()\r\n ScrollComponent.reinitialization()\r\n if (scrollRef.current) {\r\n scrollRef.current.scrollTop = 0\r\n }\r\n }, 50)\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, [pathname])\r\n\r\n\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport {AsideMenu}\r\n","/* eslint-disable react/jsx-no-target-blank */\r\n/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, {FC} from 'react'\r\nimport {Link} from 'react-router-dom'\r\nimport clsx from 'clsx'\r\nimport {useLayout} from '../../core'\r\nimport {KTSVG, toAbsoluteUrl} from '../../../helpers'\r\nimport {AsideMenu} from './AsideMenu'\r\n\r\nconst AsideDefault: FC = () => {\r\n const {config, classes} = useLayout()\r\n const {aside} = config\r\n\r\n return (\r\n \r\n {/* begin::Brand */}\r\n \r\n )}\r\n {/* end::Aside toggler */}\r\n \r\n {/* end::Brand */}\r\n\r\n {/* begin::Aside menu */}\r\n
\r\n \r\n
\r\n {/* end::Aside menu */}\r\n\r\n {/* begin::Footer */}\r\n {/* */}\r\n {/* end::Footer */}\r\n \r\n )\r\n}\r\n\r\nexport {AsideDefault}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport {FC} from 'react'\r\nimport {useLayout} from '../core'\r\n\r\nconst Footer: FC = () => {\r\n const {classes} = useLayout()\r\n return (\r\n \r\n {/* end::Container */}\r\n \r\n )\r\n}\r\n\r\nexport {Footer}\r\n","import React, { createContext, useState } from \"react\"\r\n\r\nexport type AuthUser = {\r\n name : string\r\n email : string\r\n}\r\n\r\ntype UserContextProviderProps = {\r\n children : React.ReactNode\r\n}\r\n\r\n// type UserContextType = {\r\n// user : AuthUser | null\r\n// setUser : React.Dispatch>\r\n// }\r\n\r\ntype isAuthorizedContextType = {\r\n isaAuthorized : boolean \r\n setIsaAuthorized : React.Dispatch>\r\n}\r\n\r\n\r\n// export const UserContext = createContext({} as UserContextType)\r\nexport const IsAuthorizedContext = createContext({} as isAuthorizedContextType)\r\n// export const UserContext = createContext(null)\r\n\r\nexport const IsAuthorizedContextProvider = \r\n({children} : UserContextProviderProps) => {\r\n \r\n // const [user, setUser] = useState(null) // this technique is called as Union type\r\nconsole.log('---IsAuthorizedContext ApI initialization----');\r\n\r\n let item = localStorage.getItem('isAuthorized');\r\n let boolval = false;\r\n if(item === 'true'){\r\n boolval = true;\r\n }\r\n\r\n\r\n\r\n const [isaAuthorized, setIsaAuthorized ] = useState(boolval);\r\n \r\n return (\r\n \r\n {children} \r\n \r\n )\r\n \r\n\r\n}\r\n\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport clsx from 'clsx'\r\nimport { FC, useContext } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { useAuth } from '../../../../app/contexts/CustomContextHook/useAuth'\r\n// import { useHotel } from '../../../../app/contexts/CustomContextHook/useHotel'\r\nimport { useHotel2 } from '../../../../app/contexts/HotelContext'\r\n\r\nimport { IsAuthorizedContext } from '../../../../app/contexts/isAuthorizedContext'\r\nimport { KTSVG, toAbsoluteUrl, defaultAlerts, defaultLogs } from '../../../helpers'\r\n\r\nconst HeaderNotificationsMenu = () => {\r\n\r\n // const isAuthorizedCxt = useContext(IsAuthorizedContext);\r\n const { UserToken, setUserToken } = useAuth('')\r\n // const { Hotel, setHotel } = useHotel()\r\n\r\n const { HotelId, setHotelId, HotelName, setHotelName } = useHotel2()\r\n\r\n const logout = () => {\r\n\r\n // console.log('UserToken---', UserToken);\r\n\r\n\r\n \r\n\r\n // localStorage.setItem('Token', '');\r\n // localStorage.setItem('Expiry', '');\r\n // localStorage.setItem('LoggedInUserId', '');\r\n // localStorage.setItem('UserRoles', []);\r\n // localStorage.setItem('FirstName', '');\r\n // localStorage.setItem('LastName', '');\r\n // localStorage.setItem('Email', '');\r\n\r\n setHotelId('0');\r\n setHotelName(\"\");\r\n\r\n localStorage.setItem(\"SignOut\", true);\r\n\r\n \r\n localStorage.removeItem(\"WeeklyWrapUpObj\");\r\n localStorage.removeItem(\"WeeklyWrapUpObjEditedHotelId\");\r\n localStorage.removeItem('ReturnURL');\r\n localStorage.removeItem('FormEditingMode');\r\n localStorage.removeItem('IsEditOperation');\r\n\r\n\r\n localStorage.removeItem('PayrollReportObjEditedHotelId');\r\n localStorage.removeItem('PayrollReportObjFormEditingMode');\r\n localStorage.removeItem('IsPayrollReportObjEditOperation');\r\n localStorage.removeItem('PayrollReportReturnURL');\r\n localStorage.removeItem('PayrollReportObj');\r\n\r\n\r\n setUserToken('', '', '', [], '', '', '');\r\n\r\n }\r\n\r\n\r\n return (\r\n \r\n \r\n
{UserToken.FirstName} {UserToken.LastName} ({UserToken.Roles.map(a => {return( {a.replace('\"',\"\").replace('\"',\"\").replace(\"[\",\"\").replace(\"]\",\"\")},) })})
\r\n
\r\n
{UserToken.Email}
\r\n
\r\n {/*

\r\n Account Settings */}\r\n {/* 24 reports */}\r\n {/*

*/}\r\n\r\n {/*
    \r\n
  • \r\n \r\n Alerts\r\n \r\n
  • \r\n\r\n
  • \r\n \r\n Updates\r\n \r\n
  • \r\n\r\n
  • \r\n \r\n Logs\r\n \r\n
  • \r\n
*/}\r\n \r\n\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n {/*

Get Pro Access

*/}\r\n\r\n {/*
\r\n Outlines keep you honest. They stoping you from amazing poorly about drive\r\n
*/}\r\n\r\n
\r\n \r\n Logout\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\n}\r\n\r\nexport { HeaderNotificationsMenu }\r\n","import {toAbsoluteUrl} from '../../../helpers'\r\n\r\nexport function FallbackView() {\r\n return (\r\n
\r\n Start logo\r\n Loading ...\r\n
\r\n )\r\n}\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, {useState, useEffect} from 'react'\r\nimport {createPortal} from 'react-dom'\r\n\r\n/**\r\n * React portal based on https://stackoverflow.com/a/59154364\r\n * @param children Child elements\r\n * @param className CSS classname\r\n * @param el HTML element to create. default: div\r\n */\r\nconst Portal: React.FC<{className?: string}> = ({children, className = ''}) => {\r\n const [container] = useState(document.createElement('div'))\r\n\r\n if (className) container.classList.add(className)\r\n\r\n useEffect(() => {\r\n document.body.appendChild(container)\r\n return () => {\r\n document.body.removeChild(container)\r\n }\r\n }, [])\r\n\r\n return createPortal(children, container)\r\n}\r\n\r\nexport {Portal}\r\n","// //---------------------------\r\nimport clsx from 'clsx'\r\nimport React, { FC, useState } from 'react'\r\nimport { Button, Modal } from 'react-bootstrap-v5'\r\nimport { KTSVG, toAbsoluteUrl } from '../../../helpers'\r\n// import {HeaderNotificationsMenu, HeaderUserMenu, QuickLinks} from '../../../partials'\r\nimport { HeaderNotificationsMenu, HeaderUserMenu } from '../../../partials'\r\n\r\nimport { useLayout } from '../../core'\r\n\r\nconst toolbarButtonMarginClass = 'ms-1 ms-lg-3',\r\n toolbarButtonHeightClass = 'w-30px h-30px w-md-40px h-md-40px',\r\n toolbarUserAvatarHeightClass = 'symbol-30px symbol-md-40px',\r\n toolbarButtonIconSizeClass = 'svg-icon-1'\r\n\r\nconst Topbar: FC = () => {\r\n const { config } = useLayout()\r\n\r\n const [show, setShow] = useState(false);\r\n\r\n const handleClose = () => { setShow(false) };\r\n const handleShow = () => { if (show) { setShow(false) } else setShow(true) };\r\n\r\n return (\r\n
\r\n {/* Search */}\r\n {/*
\r\n \r\n
*/}\r\n {/* Activities */}\r\n {/*
*/}\r\n {/* begin::Drawer toggle */}\r\n {/* \r\n \r\n
*/}\r\n {/* end::Drawer toggle */}\r\n {/*
*/}\r\n {/* Quick links */}\r\n {/*
*/}\r\n {/* begin::Menu wrapper */}\r\n {/* \r\n \r\n
\r\n */}\r\n {/* end::Menu wrapper */}\r\n {/* */}\r\n\r\n {/* CHAT */}\r\n {/*
*/}\r\n {/* begin::Menu wrapper */}\r\n {/* \r\n \r\n\r\n \r\n
*/}\r\n {/* end::Menu wrapper */}\r\n {/* */}\r\n {/* NOTIFICATIONS */}\r\n
\r\n {/* begin::Menu- wrapper */}\r\n \r\n \r\n
\r\n {/* */}\r\n {/* end::Menu wrapper */}\r\n \r\n\r\n {/* NOTIFICATIONS */}\r\n
\r\n {/* begin::Menu- wrapper */}\r\n \r\n {/* \r\n {/* /> */}\r\n
\r\n \r\n {/* end::Menu wrapper */}\r\n \r\n\r\n {/* begin::User */}\r\n\r\n\r\n {/* */}\r\n {/*
\r\n
111
\r\n
222
\r\n
333
\r\n
444
\r\n
555
\r\n
666
\r\n
*/}\r\n\r\n\r\n {/* \r\n \r\n {/* Modal heading */}\r\n {/* */}\r\n {/* Woohoo, you're reading this text in a modal! */}\r\n {/*\r\n \r\n \r\n \r\n \r\n */}\r\n {/* */}\r\n {/* begin::Toggle */}\r\n {/* \r\n UserImage\r\n */}\r\n {/* */}\r\n {/* */}\r\n\r\n {/* end::Toggle */}\r\n {/* */}\r\n {/* end::User */}\r\n\r\n {/* begin::Aside Toggler */}\r\n {/* {config.header.left === 'menu' && (\r\n
\r\n \r\n \r\n
\r\n \r\n )} */}\r\n \r\n )\r\n}\r\n\r\nexport { Topbar }\r\n","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport clsx from 'clsx'\r\nimport React, {useEffect, useState} from 'react'\r\nimport {Link, useLocation} from 'react-router-dom'\r\nimport { useHotel2 } from '../../../../app/contexts/HotelContext'\r\nimport {MenuComponent} from '../../../assets/ts/components'\r\nimport {KTSVG, toAbsoluteUrl} from '../../../helpers'\r\nimport {useLayout} from '../../core'\r\nimport {Header} from './Header'\r\nimport {DefaultTitle} from './page-title/DefaultTitle'\r\nimport {Topbar} from './Topbar'\r\n\r\nexport function HeaderWrapper() {\r\n const {pathname} = useLocation()\r\n const {config, classes, attributes} = useLayout()\r\n const {header, aside} = config\r\n\r\n useEffect(() => {\r\n MenuComponent.reinitialization()\r\n }, [pathname])\r\n\r\n\r\n // var Hotel = localStorage.getItem(\"HotelName\");\r\n const {HotelName, setHotelName} = useHotel2();\r\n\r\n // useEffect(() => {\r\n\r\n \r\n // }, [])\r\n \r\n\r\n return (\r\n \r\n \r\n {/* begin::Aside mobile toggle */}\r\n {aside.display && (\r\n
\r\n \r\n \r\n
\r\n \r\n )}\r\n {/* end::Aside mobile toggle */}\r\n {/* begin::Logo */}\r\n \r\n {/* {!aside.display && (\r\n
\r\n \r\n Logo\r\n \r\n
\r\n )} */}\r\n\r\n\r\n {/* end::Logo */}\r\n\r\n {aside.display && (\r\n
\r\n \r\n Logo\r\n \r\n {/* public\\media\\logos\\XUC logo2.PNG */}\r\n

{HotelName} {HotelName ? '_' : ''} IHG Reporting Portal

\r\n
\r\n\r\n )}\r\n\r\n {/* begin::Wrapper */}\r\n
\r\n {/* begin::Navbar */}\r\n {/* {header.left === 'menu' && (\r\n
\r\n
\r\n
\r\n )}\r\n\r\n {header.left === 'page-title' && (\r\n
\r\n \r\n
\r\n )}\r\n*/}\r\n
\r\n \r\n
\r\n
\r\n {/* end::Wrapper */}\r\n \r\n \r\n )\r\n}\r\n","import React, {useEffect, useRef} from 'react'\r\nimport {useLocation} from 'react-router-dom'\r\nimport {\r\n // ScrollComponent,\r\n ScrollTopComponent,\r\n MenuComponent,\r\n DrawerComponent,\r\n ToggleComponent,\r\n StickyComponent,\r\n} from '../../assets/ts/components'\r\nimport {KTSVG} from '../../helpers'\r\n\r\nexport function ScrollTop() {\r\n const {pathname} = useLocation()\r\n const isFirstRun = useRef(true)\r\n\r\n const pluginsReinitialization = () => {\r\n setTimeout(() => {\r\n // ScrollTopComponent.reinitialization()\r\n MenuComponent.reinitialization()\r\n StickyComponent.reInitialization()\r\n setTimeout(() => {\r\n ToggleComponent.reinitialization()\r\n DrawerComponent.reinitialization()\r\n // ScrollComponent.reinitialization()\r\n }, 70)\r\n }, 140)\r\n }\r\n\r\n const scrollTop = () => {\r\n ScrollTopComponent.goTop()\r\n }\r\n\r\n const updateHeaderSticky = () => {\r\n const stickyHeader = document.body.querySelectorAll(`[data-kt-sticky-name=\"header\"]`)\r\n if (stickyHeader && stickyHeader.length > 0) {\r\n const sticky = StickyComponent.getInstance(stickyHeader[0] as HTMLElement)\r\n if (sticky) {\r\n sticky.update()\r\n }\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false\r\n } else {\r\n pluginsReinitialization()\r\n }\r\n\r\n updateHeaderSticky()\r\n setTimeout(() => {\r\n scrollTop()\r\n }, 0)\r\n }, [pathname])\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n","import React, {useEffect} from 'react'\r\nimport {useLocation} from 'react-router'\r\nimport clsx from 'clsx'\r\nimport {useLayout} from '../core'\r\nimport {DrawerComponent} from '../../assets/ts/components'\r\n\r\nconst Content: React.FC = ({children}) => {\r\n const {classes} = useLayout()\r\n const location = useLocation()\r\n useEffect(() => {\r\n DrawerComponent.hideAll()\r\n }, [location])\r\n\r\n return (\r\n
\r\n {children}\r\n
\r\n )\r\n}\r\n\r\nexport {Content}\r\n","import {useEffect, useRef} from 'react'\r\nimport {\r\n MenuComponent,\r\n DrawerComponent,\r\n ScrollComponent,\r\n ScrollTopComponent,\r\n StickyComponent,\r\n ToggleComponent,\r\n SwapperComponent,\r\n} from '../assets/ts/components'\r\n\r\nimport {useLayout} from './core'\r\n\r\nexport function MasterInit() {\r\n const {config} = useLayout()\r\n const isFirstRun = useRef(true)\r\n const pluginsInitialization = () => {\r\n isFirstRun.current = false\r\n setTimeout(() => {\r\n ToggleComponent.bootstrap()\r\n ScrollTopComponent.bootstrap()\r\n DrawerComponent.bootstrap()\r\n StickyComponent.bootstrap()\r\n MenuComponent.bootstrap()\r\n ScrollComponent.bootstrap()\r\n SwapperComponent.bootstrap()\r\n }, 500)\r\n }\r\n\r\n useEffect(() => {\r\n if (isFirstRun.current) {\r\n isFirstRun.current = false\r\n pluginsInitialization()\r\n }\r\n }, [config])\r\n\r\n return <>\r\n}\r\n","import clsx from 'clsx'\r\nimport React, {FC} from 'react'\r\nimport {Link} from 'react-router-dom'\r\nimport {useLayout} from '../../../core/LayoutProvider'\r\nimport {usePageData} from '../../../core/PageData'\r\n\r\nconst DefaultTitle: FC = () => {\r\n const {pageTitle, pageDescription, pageBreadcrumbs} = usePageData()\r\n const {config, classes} = useLayout()\r\n return (\r\n \r\n {/* begin::Title */}\r\n {pageTitle && (\r\n

\r\n {pageTitle}\r\n {pageDescription && config.pageTitle && config.pageTitle.description && (\r\n <>\r\n \r\n {pageDescription}\r\n \r\n )}\r\n

\r\n )}\r\n {/* end::Title */}\r\n\r\n {pageBreadcrumbs &&\r\n pageBreadcrumbs.length > 0 &&\r\n config.pageTitle &&\r\n config.pageTitle.breadCrumbs && (\r\n <>\r\n {config.pageTitle.direction === 'row' && (\r\n \r\n )}\r\n
    \r\n {Array.from(pageBreadcrumbs).map((item, index) => (\r\n \r\n {!item.isSeparator ? (\r\n \r\n {item.title}\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n ))}\r\n
  • {pageTitle}
  • \r\n
\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport {DefaultTitle}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport clsx from 'clsx'\r\nimport React, {FC} from 'react'\r\nimport {KTSVG} from '../../../helpers'\r\nimport {useLayout} from '../../core'\r\nimport {DefaultTitle} from '../header/page-title/DefaultTitle'\r\n\r\nconst Toolbar1: FC = () => {\r\n const {classes} = useLayout()\r\n\r\n return (\r\n
\r\n {/* begin::Container */}\r\n \r\n \r\n\r\n {/* begin::Actions */}\r\n {/*
*/}\r\n {/* begin::Wrapper */}\r\n {/*
*/}\r\n {/* begin::Menu */}\r\n {/* \r\n \r\n Filter\r\n */}\r\n\r\n {/* end::Menu */}\r\n {/*
*/}\r\n {/* end::Wrapper */}\r\n\r\n {/* begin::Button */}\r\n\r\n {/* \r\n Create\r\n */}\r\n {/* end::Button */}\r\n {/*
*/}\r\n {/* end::Actions */}\r\n
\r\n {/* end::Container */}\r\n \r\n )\r\n}\r\n\r\nexport {Toolbar1}\r\n","import React from 'react'\r\nimport {useLayout} from '../../core/LayoutProvider'\r\nimport {Toolbar1} from './Toolbar1'\r\n\r\nconst Toolbar = () => {\r\n const {config} = useLayout()\r\n\r\n switch (config.toolbar.layout) {\r\n case 'toolbar1':\r\n return \r\n\r\n default:\r\n return \r\n }\r\n}\r\n\r\nexport {Toolbar}\r\n","import React from 'react'\r\nimport {AsideDefault} from './components/aside/AsideDefault'\r\nimport {Footer} from './components/Footer'\r\nimport {HeaderWrapper} from './components/header/HeaderWrapper'\r\nimport {ScrollTop} from './components/ScrollTop'\r\nimport {Content} from './components/Content'\r\nimport {MasterInit} from './MasterInit'\r\nimport {PageDataProvider} from './core'\r\nimport {\r\n // DrawerMessenger,\r\n // ExploreMain,\r\n // ActivityDrawer,\r\n // Main,\r\n // InviteUsers,\r\n // UpgradePlan,\r\n} from '../partials'\r\nimport { Toolbar } from './components/toolbar/Toolbar'\r\n\r\nconst MasterLayout: React.FC = ({children}) => {\r\n return (\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n\r\n
\r\n \r\n
\r\n {children}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/* begin:: Drawers */}\r\n {/* */}\r\n {/* */}\r\n {/* */}\r\n {/* end:: Drawers */}\r\n\r\n {/* begin:: Modals */}\r\n {/*
*/}\r\n {/* */}\r\n {/* */}\r\n {/* end:: Modals */}\r\n\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport {MasterLayout}\r\n","import axios from 'axios';\r\nimport React, { useEffect, useState } from 'react'\r\nimport { Button, Card, Spinner } from 'react-bootstrap-v5'\r\nimport { useAuth } from '../../../contexts/CustomContextHook/useAuth';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { useHotel2 } from '../../../contexts/HotelContext';\r\n\r\nimport { GetHotelsByUser } from '../../../modules/Hotel/HotelService'\r\n\r\nimport FullPageLoader from '../../../modules/FullPageLoader'\r\nimport { KTSVG } from '../../../../_metronic/helpers';\r\n\r\n\r\nconst AllHotelsComponent = () => {\r\n\r\n const [Hotels, setHotels] = useState([])\r\n\r\n const [loading, setLoading] = useState(false)\r\n\r\n const { UserToken, setUserToken } = useAuth()\r\n\r\n\r\n\r\n const history = useHistory()\r\n // /hotels/hotelDashboard\r\n\r\n const { HotelId, setHotelId, HotelName, setHotelName } = useHotel2()\r\n \r\n\r\n var LoggedInUser = localStorage.getItem('LoggedInUserId');\r\n\r\n useEffect(() => {\r\n\r\n setHotelId('0');\r\n setHotelName(\"\");\r\n\r\n setLoading(true);\r\n GetHotelsByUser(LoggedInUser, UserToken.token)\r\n .then(response => {\r\n console.log('response.data---', response.data);\r\n setLoading(false);\r\n setHotels(response.data);\r\n }).catch(err => { setLoading(false); });\r\n\r\n }, [])\r\n\r\n\r\n\r\n\r\n const HandleHotelClick = (Id, name) => {\r\n\r\n \r\n setHotelId(Id);\r\n setHotelName(name);\r\n\r\n \r\n history.push('/hotels/hotelDashboard');\r\n\r\n\r\n }\r\n\r\n return (\r\n
\r\n\r\n {loading &&\r\n \r\n }\r\n
\r\n\r\n {Hotels.map(\r\n (hotel\r\n // : HotelModel, index, array\r\n ) => (\r\n \r\n \r\n\r\n \r\n \r\n {hotel.name}\r\n \r\n \r\n {/* Some quick example text to build on the card title and make up the bulk of\r\n the card's content. */}\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\n\r\n
\r\n )\r\n}\r\n\r\nexport default AllHotelsComponent\r\n","import React, { FC, useEffect, useState } from 'react'\r\nimport { useIntl } from 'react-intl'\r\nimport { PageTitle } from '../../../_metronic/layout/core'\r\nimport AllHotelsComponent from './components/AllHotelsListingComponent'\r\n\r\n\r\nconst AllHotelsPage = () => {\r\n\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n\r\n\r\n <>\r\n {/*

All Hotels

*/}\r\n\r\n \r\n\r\n \r\n\r\n\r\n\r\n )\r\n}\r\n\r\n\r\nconst AllHotelsWrapper: FC = () => {\r\n const intl = useIntl()\r\n return (\r\n <>\r\n \r\n {/* {intl.formatMessage({ id: 'MENU.AllHotels' })} */}\r\n\r\n AllHotels\r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport { AllHotelsWrapper }\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport { KTSVG } from '../../../helpers'\r\n\r\ntype Props = {\r\n className: string\r\n color: string\r\n svgIcon: string\r\n iconColor: string\r\n title: string\r\n description: string\r\n onTabClick: () => {}\r\n}\r\n\r\nconst DashboardWidget: React.FC = ({\r\n className,\r\n color,\r\n svgIcon,\r\n iconColor,\r\n title,\r\n description,\r\n onTabClick\r\n}) => {\r\n return (\r\n // \r\n
\r\n {/* begin::Body */}\r\n
\r\n {svgIcon != '' &&\r\n \r\n }\r\n
{title}
\r\n\r\n
{description}
\r\n
\r\n {/* end::Body */}\r\n
\r\n )\r\n}\r\n\r\nexport { DashboardWidget }\r\n","import React from 'react'\r\nimport { StatisticsWidget5 } from '../../../../_metronic/partials/widgets/statistics/StatisticsWidget5'\r\nimport { TwoY_AxisChart } from '../../../../_metronic/partials/widgets/chartsComponents/TwoY_AxisChart'\r\nimport { ListsWidget6 } from '../../../../_metronic/partials/widgets/lists/ListsWidget6'\r\n\r\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\"; // requires a loader\r\nimport { Carousel } from 'react-responsive-carousel';\r\nimport { MixedWidget1 } from '../../../../_metronic/partials/widgets/mixed/MixedWidget1';\r\nimport { useHotel2 } from '../../../contexts/HotelContext';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { toast } from 'react-toastify'\r\nimport { DashboardWidget } from '../../../../_metronic/partials/widgets/statistics/DashboardWidget';\r\n\r\n\r\nconst CarouselComponent = (props) => {\r\n\r\n const { HotelId, setHotelId, HotelName, setHotelName } = useHotel2();\r\n\r\n const history = useHistory();\r\n\r\n const setHotel_id = (id) => {\r\n setHotelId(id);\r\n\r\n }\r\n\r\n const setHotel_Name = (name) => {\r\n setHotelName(name);\r\n }\r\n\r\n\r\n const onHotelNameTabClick = (hotelId, hotelname) => {\r\n\r\n setHotelId(hotelId);\r\n setHotelName(hotelname);\r\n\r\n\r\n history.push(`/hotels/hotelDashboard`)\r\n\r\n\r\n }\r\n\r\n const onEmployeeCountTabClick = (hotelId, hotelname) => {\r\n\r\n setHotelId(hotelId);\r\n setHotelName(hotelname);\r\n\r\n\r\n history.push(`/employees/AllEmployees`)\r\n\r\n\r\n }\r\n\r\n\r\n const onSundriesShopProductTabClick = (hotelId, hotelname, latestSundriesInventoryReportId) => {\r\n\r\n\r\n\r\n if (latestSundriesInventoryReportId != 0) {\r\n setHotelId(hotelId);\r\n setHotelName(hotelname);\r\n \r\n \r\n history.push(`/sundriesShopInventories/Details/${latestSundriesInventoryReportId}`)\r\n \r\n } else {\r\n toast.info('No report Found', { position: toast.POSITION.TOP_RIGHT });\r\n }\r\n \r\n\r\n }\r\n\r\n\r\n\r\n console.log('dashboardData in Carousel comp', props.dashboardData);\r\n return (\r\n \r\n\r\n {props.dashboardData?.map((dashboardDataObj, index) => (\r\n\r\n
\r\n
\r\n\r\n {/*
*/}\r\n
onHotelNameTabClick(dashboardDataObj.hotelId, dashboardDataObj.hotelName)}\r\n >\r\n onHotelNameTabClick(dashboardDataObj.hotelId, dashboardDataObj.hotelName)}\r\n />\r\n\r\n
\r\n\r\n
onEmployeeCountTabClick(dashboardDataObj.hotelId, dashboardDataObj.hotelName)}\r\n >\r\n onEmployeeCountTabClick(dashboardDataObj.hotelId, dashboardDataObj.hotelName)}\r\n\r\n />\r\n
\r\n {/*
*/}\r\n\r\n {/*
*/}\r\n\r\n
onSundriesShopProductTabClick(dashboardDataObj.hotelId, dashboardDataObj.hotelName,dashboardDataObj.latestSundriesInventoryReportId)}\r\n >\r\n onSundriesShopProductTabClick(dashboardDataObj.hotelId, dashboardDataObj.hotelName,dashboardDataObj.latestSundriesInventoryReportId)}\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\n
\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\n\r\n
\r\n\r\n
\r\n\r\n ))}\r\n\r\n
\r\n\r\n )\r\n}\r\n\r\nexport default CarouselComponent","import React, { useEffect, useState } from 'react'\r\nimport { StatisticsWidget5 } from '../../../../_metronic/partials/widgets/statistics/StatisticsWidget5'\r\nimport { TwoY_AxisChart } from '../../../../_metronic/partials/widgets/chartsComponents/TwoY_AxisChart'\r\nimport { ListsWidget6 } from '../../../../_metronic/partials/widgets/lists/ListsWidget6'\r\n// import { Carousel } from 'react-bootstrap-v5'\r\nimport { useAuth } from '../../../contexts/CustomContextHook/useAuth'\r\nimport axios from 'axios'\r\nimport { API_URL } from '../../../modules/Department/DepartmentService'\r\nimport FullPageLoader from '../../../modules/FullPageLoader'\r\n\r\nimport \"react-responsive-carousel/lib/styles/carousel.min.css\"; // requires a loader\r\nimport { Carousel } from 'react-responsive-carousel';\r\nimport CarouselComponent from './CarouselComponent'\r\nimport { useHotel2 } from '../../../contexts/HotelContext'\r\n\r\nconst DashboardComponentSlider = () => {\r\n\r\n\r\n let initialValues = [{\r\n numberOfEmployees: 0,\r\n hotelName: '',\r\n totalSundriesShopProductsSales: 0,\r\n expiredSundriesShopProducts: 0,\r\n totalRoomsCleaned: 0,\r\n totalRoomsSold: 0,\r\n totalLinenInventoriesToBOrdered: 0,\r\n twoMonthsWeeksArray: [''],\r\n lastSevenWeeksTotalPayrollsList: [],\r\n lastSevenWeeksMPORList: []\r\n }]\r\n\r\n\r\n\r\n const [dashboardData, setDashboardData] = useState([]);\r\n\r\n\r\n\r\n\r\n const { UserToken, setUserToken } = useAuth();\r\n\r\n var loggedInUserId = UserToken.LoggedInUserId;\r\n\r\n // console.log('loggedInUserId ((***))== ', loggedInUserId);\r\n\r\n const [loading, setLoading] = useState(false)\r\n\r\n const { HotelId, setHotelId, HotelName, setHotelName } = useHotel2();\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n setHotelId(\"0\");\r\n setHotelName(\"\");\r\n\r\n\r\n }, [])\r\n\r\n\r\n useEffect(() => {\r\n\r\n (async () => {\r\n\r\n\r\n if (!dashboardData.length) {\r\n\r\n setLoading(true);\r\n await axios.get(`${API_URL}/api/Dashboard/DashboardDataByUserId?userId=${loggedInUserId}`,\r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + UserToken.token\r\n }\r\n })\r\n .then(res => {\r\n setLoading(false);\r\n\r\n console.log('Response of DashboardDAta by userId == ', res.data);\r\n setDashboardData(res.data);\r\n\r\n })\r\n .catch(err => {\r\n setLoading(false);\r\n })\r\n }\r\n })()\r\n\r\n\r\n // return (() => {\r\n // setLoading(false);\r\n // setDashboardData([]);\r\n // })\r\n\r\n\r\n }, [dashboardData])\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n <>\r\n\r\n {loading &&\r\n \r\n }\r\n {/* {dashboardData &&\r\n \r\n\r\n\r\n\r\n {dashboardData.map((dashboardDataObj, index) => (\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\n \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\n
\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\n\r\n
\r\n ))}\r\n\r\n
\r\n } */}\r\n\r\n {dashboardData ?\r\n \r\n : ''}\r\n\r\n\r\n \r\n )\r\n}\r\n\r\nexport default DashboardComponentSlider\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport axios from 'axios'\r\nimport React, { FC, useEffect, useState } from 'react'\r\nimport { Button, Card } from 'react-bootstrap-v5'\r\nimport { useIntl } from 'react-intl'\r\nimport { AsideMenuItem } from '../../../_metronic/layout/components/aside/AsideMenuItem'\r\nimport { AsideMenuMain } from '../../../_metronic/layout/components/aside/AsideMenuMain'\r\nimport { MenuItem } from '../../../_metronic/layout/components/header/MenuItem'\r\nimport { PageTitle } from '../../../_metronic/layout/core'\r\nimport {\r\n MixedWidget2,\r\n MixedWidget8,\r\n MixedWidget10,\r\n MixedWidget11,\r\n // ListsWidget2,\r\n // ListsWidget3,\r\n // ListsWidget4,\r\n // ListsWidget5,\r\n // ListsWidget6,\r\n // TablesWidget5,\r\n // TablesWidget10,\r\n\r\n} from '../../../_metronic/partials/widgets'\r\nimport { TwoY_AxisChart } from '../../../_metronic/partials/widgets/chartsComponents/TwoY_AxisChart'\r\nimport DashboardComponent from './components/AllHotelsListingComponent'\r\nimport DashboardComponentSlider from './components/DashboardComponentSlider'\r\n\r\n\r\nconst DashboardPage = () => {\r\n\r\n\r\n\r\n\r\n\r\n\r\n return (\r\n\r\n\r\n <>\r\n {/*

All Hotels

*/}\r\n\r\n \r\n\r\n \r\n\r\n\r\n\r\n )\r\n}\r\n\r\n\r\nconst DashboardWrapper: FC = () => {\r\n const intl = useIntl()\r\n return (\r\n <>\r\n \r\n {/* {intl.formatMessage({ id: 'MENU.DASHBOARD' })} */}\r\n\r\n Dashboard\r\n\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport { DashboardWrapper }\r\n","import { useAuth } from \"../contexts/CustomContextHook/useAuth\";\r\nimport React from 'react'\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { toast } from \"react-toastify\";\r\nimport { useHotel2 } from \"../contexts/HotelContext\";\r\n\r\nconst parseJwt = (token) => {\r\n try {\r\n return JSON.parse(atob(token.split('.')[1]));\r\n } catch (error) {\r\n return null;\r\n }\r\n}\r\n\r\n\r\n\r\nconst AuthVerify = ({ history }) => {\r\n\r\n\r\n // const { Hotel, setHotel } = useHotel()\r\n\r\n const { HotelId, setHotelId, HotelName, setHotelName } = useHotel2()\r\n const { UserToken, setUserToken } = useAuth();\r\n\r\n const logout = () => {\r\n\r\n // console.log('UserToken---', UserToken);\r\n\r\n\r\n\r\n\r\n // localStorage.setItem('Token', '');\r\n // localStorage.setItem('Expiry', '');\r\n // localStorage.setItem('LoggedInUserId', '');\r\n // localStorage.setItem('UserRoles', []);\r\n // localStorage.setItem('FirstName', '');\r\n // localStorage.setItem('LastName', '');\r\n // localStorage.setItem('Email', '');\r\n\r\n setHotelId('0');\r\n setHotelName(\"\");\r\n\r\n localStorage.setItem(\"SignOut\", 'true');\r\n\r\n\r\n localStorage.removeItem(\"WeeklyWrapUpObj\");\r\n localStorage.removeItem(\"WeeklyWrapUpObjEditedHotelId\");\r\n localStorage.removeItem('ReturnURL');\r\n localStorage.removeItem('FormEditingMode');\r\n localStorage.removeItem('IsEditOperation');\r\n\r\n\r\n localStorage.removeItem('PayrollReportObjEditedHotelId');\r\n localStorage.removeItem('PayrollReportObjFormEditingMode');\r\n localStorage.removeItem('IsPayrollReportObjEditOperation');\r\n localStorage.removeItem('PayrollReportReturnURL');\r\n localStorage.removeItem('PayrollReportObj');\r\n\r\n\r\n setUserToken('', '', '', [], '', '', '');\r\n\r\n }\r\n\r\n // console.log('hisoty :: ', history);\r\n console.log('*************&&&&&&F$$$$');\r\n\r\n\r\n if (UserToken.token !== \"\") {\r\n const decodedJwt = parseJwt(UserToken.token);\r\n\r\n console.log((decodedJwt.exp * 1000) > Date.now());\r\n\r\n if (decodedJwt.exp * 1000 < Date.now()) {\r\n\r\n toast.error('Your session has expired. Please login again')\r\n\r\n logout()\r\n\r\n // console.log('decodedJwt ', decodedJwt.exp * 1000);\r\n // console.log('Date.now() ', Date.now());\r\n\r\n }\r\n\r\n return (\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(AuthVerify);","import React, { Suspense, lazy } from 'react'\r\nimport { Redirect, Route, Router, Switch } from 'react-router-dom'\r\nimport { FallbackView } from '../../_metronic/partials'\r\nimport { AllHotelsWrapper } from '../pages/dashboard/AllHotelsWrapper'\r\n\r\nimport { createBrowserHistory } from 'history'\r\n\r\nimport { DashboardWrapper } from '../pages/dashboard/DashboardWrapper'\r\nimport AuthVerify from '../common/auth-verify'\r\n// import {MenuTestPage} from '../pages/MenuTestPage'\r\n\r\nexport function PrivateRoutes() {\r\n\r\n\r\n\r\n\r\n\r\n const WidgetsPage = lazy(() => import('../modules/widgets/WidgetsPage'))\r\n const WeeklyWrapUpPage = lazy(() => import('../modules/WeeklyWrapUp/WeeklyWrapUpPage'))\r\n const UserPage = lazy(() => import('../modules/User/UserPage'))\r\n const SundriesShopProductPage = lazy(() => import('../modules/SundriesShopProducts/SundriesShopProductsPage'))\r\n const SundriesShopInventoryPage = lazy(() => import('../modules/SundriesShopInventory/SundriesShopInventoryPage'))\r\n const RolePage = lazy(() => import('../modules/Role/RolePage'))\r\n const PayrollReportPage = lazy(() => import('../modules/PayrollReport/PayrollReportPage'))\r\n const LinenItemPage = lazy(() => import('../modules/LinenItem/LinenItemPage'))\r\n\r\n const LinenInventoryPage = lazy(() => import('../modules/LinenInventory/LinenInventoryPage'))\r\n const HotelPage = lazy(() => import('../modules/Hotel/HotelPage'))\r\n\r\n const EmployeePage = lazy(() => import('../modules/Employee/EmployeePage'))\r\n const DepartmentPage = lazy(() => import('../modules/Department/DepartmentPage'))\r\n\r\n const FacilitiesInspectionPage = lazy(() => import('../modules/FacilitiesInspection/FacilitiesInspectionPage'))\r\n\r\n const VendorPage = lazy(() => import('../modules/Vendor/VendorPage'))\r\n\r\n const BreakfastPage = lazy(() => import('../modules/Breakfast/BreakfastPage'))\r\n\r\n const DocumentLibraryPage = lazy(() => import('../modules/DocumentLibrary/DocumentLibraryPage'))\r\n\r\n const EOMLibraryPage = lazy(() => import('../modules/EOMLibrary/EOMLibraryPage'))\r\n\r\n const SelfQAPage = lazy(() => import('../modules/SelfQALibrary/SelfQAPage'))\r\n // console.log('route changes****');\r\n\r\n // const history = createBrowserHistory();\r\n\r\n return (\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\n \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\n\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\n {/* */}\r\n {/* */}\r\n \r\n \r\n\r\n \r\n\r\n \r\n )\r\n}\r\n","import axios from 'axios'\r\nimport { AuthModel } from '../models/AuthModel'\r\nimport { UserModel } from '../models/UserModel'\r\n\r\nconst API_URL = process.env.REACT_APP_API_URL || 'api'\r\n\r\nexport const GET_USER_BY_ACCESSTOKEN_URL = `${API_URL}/api/Account/GetUserByToken`\r\n\r\nexport const LOGIN_URL = `${API_URL}/api/Account/Login`\r\nexport const REGISTER_URL = `${API_URL}/api/Account/SignUp`\r\nexport const REQUEST_PASSWORD_URL = `${API_URL}/api/Account/forgotPassword`\r\nexport const CONFIRM_EMAIL_URL = `${API_URL}/api/Account/ConfirmEmail`\r\n\r\n// Server should return AuthModel\r\nexport function login(Email: string, Password: string) {\r\n\r\n console.log('Login URL --- ', LOGIN_URL);\r\n\r\n return axios.post(LOGIN_URL, { Email, Password })\r\n}\r\n\r\n// Server should return AuthModel\r\nexport function register(Email: string, Firstname: string, Lastname: string, Password: string) {\r\n\r\n return axios.post(REGISTER_URL, {\r\n Email,\r\n Firstname,\r\n Lastname,\r\n Password,\r\n })\r\n}\r\n\r\n//-----------------------------------------\r\nexport function confirmEmail(model: any) {\r\n console.log(\r\n 'in confirm Email Function---- at line 34--- AuthCURD---model---',\r\n model\r\n );\r\n\r\n return axios.post(CONFIRM_EMAIL_URL, model)\r\n}\r\n\r\n// Server should return object => { result: boolean } (Is Email in DB)\r\nexport function requestPassword(email: string) {\r\n return axios.post<{ result: boolean }>(REQUEST_PASSWORD_URL, { email })\r\n}\r\n\r\n\r\nexport function resetPassword(token: string, model: any) {\r\n return axios.post(`${API_URL}/api/Account/resetPassword?resetToken=${token}`, model)\r\n}\r\n\r\nexport function getUserByToken() {\r\n // Authorization head should be fulfilled in interceptor.\r\n // Check common redux folder => setupAxios\r\n return axios.get(GET_USER_BY_ACCESSTOKEN_URL)\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useState, useContext } from 'react'\r\nimport { useFormik } from 'formik'\r\nimport * as Yup from 'yup'\r\nimport clsx from 'clsx'\r\nimport { register, resetPassword } from '../services/AuthCRUD'\r\nimport { Link, useHistory, useLocation, useParams } from 'react-router-dom'\r\nimport { toAbsoluteUrl } from '../../../../_metronic/helpers'\r\nimport { IsAuthorizedContext } from '../../../contexts/isAuthorizedContext'\r\nimport { toast } from 'react-toastify'\r\n\r\nconst initialValues = {\r\n email: '',\r\n password: '',\r\n changepassword: '',\r\n}\r\n\r\nconst resetPasswordSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .email('Wrong email format')\r\n .min(3, 'Minimum 3 symbols')\r\n .max(50, 'Maximum 50 symbols')\r\n .required('Email is required'),\r\n password: Yup.string()\r\n .min(3, 'Minimum 3 symbols')\r\n .max(50, 'Maximum 50 symbols')\r\n .required('Password is required'),\r\n changepassword: Yup.string()\r\n .required('Password confirmation is required')\r\n .when('password', {\r\n is: (val: string) => (val && val.length > 0 ? true : false),\r\n then: Yup.string().oneOf([Yup.ref('password')], \"Password and Confirm Password didn't match\"),\r\n })\r\n})\r\n\r\nexport function ResetPassword() {\r\n\r\n const isAuthorizedCxt = useContext(IsAuthorizedContext);\r\n\r\n const history = useHistory();\r\n\r\n\r\n const [loading, setLoading] = useState(false)\r\n\r\n\r\n\r\n let query = new URLSearchParams(useLocation().search);\r\n\r\n\r\n const Token = query.get(\"token\")\r\n\r\n // const [status, setStatus] = useState(\"\")\r\n // const dispatch = useDispatch()\r\n const formik = useFormik({\r\n initialValues,\r\n validationSchema: resetPasswordSchema,\r\n onSubmit: (values, { setStatus, setSubmitting }) => {\r\n setLoading(true)\r\n setTimeout(() => {\r\n resetPassword(encodeURIComponent(Token!), values)\r\n .then(() => {\r\n setLoading(false)\r\n // localStorage.setItem('isAuthorized', 'true');\r\n\r\n // isAuthorizedCxt.setIsaAuthorized(true);\r\n\r\n history.push('/auth/login')\r\n\r\n toast.success('password reset successfully', { position: toast.POSITION.TOP_RIGHT });\r\n\r\n\r\n\r\n // dispatch(auth.actions.login(accessToken))\r\n })\r\n .catch((err) => {\r\n setLoading(false)\r\n setSubmitting(false)\r\n\r\n let Obj = err.toJSON();\r\n\r\n\r\n\r\n if (Obj.message === 'Network Error') {\r\n // setHasErrors('API Server is down....');\r\n setStatus('API Server is down....');\r\n }\r\n // else {\r\n // let obj2 = JSON.parse(Obj.message);\r\n // // setHasErrors(obj2.errorMessage);\r\n // setStatus(obj2.errorMessage);\r\n // }\r\n\r\n toast.error('error in reset password', { position: toast.POSITION.TOP_RIGHT });\r\n\r\n setStatus('Reset Password process has broken. Please try again')\r\n })\r\n }, 1000)\r\n },\r\n })\r\n\r\n return (\r\n <>\r\n \r\n {/* begin::Heading */}\r\n
\r\n {/* begin::Title */}\r\n

Reset Your Password

\r\n
\r\n {/* end::Heading */}\r\n\r\n
\r\n
\r\n {/* OR */}\r\n
\r\n
\r\n\r\n {formik.status && (\r\n
\r\n
{formik.status}
\r\n
\r\n )}\r\n\r\n {/* end::Form group */}\r\n\r\n {/* begin::Form group Email */}\r\n
\r\n \r\n \r\n {formik.touched.email && formik.errors.email && (\r\n
\r\n
\r\n {formik.errors.email}\r\n
\r\n
\r\n )}\r\n
\r\n {/* end::Form group */}\r\n\r\n {/* begin::Form group Password */}\r\n
\r\n
\r\n \r\n
\r\n \r\n {formik.touched.password && formik.errors.password && (\r\n
\r\n
\r\n {formik.errors.password}\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n {/* end::Form group */}\r\n\r\n {/* begin::Form group Confirm password */}\r\n
\r\n \r\n \r\n {formik.touched.changepassword && formik.errors.changepassword && (\r\n
\r\n
\r\n {formik.errors.changepassword}\r\n
\r\n
\r\n )}\r\n
\r\n\r\n {/* begin::Form group */}\r\n
\r\n \r\n {!loading && Submit}\r\n {loading && (\r\n \r\n Please wait...{' '}\r\n \r\n \r\n )}\r\n \r\n\r\n \r\n \r\n Cancel\r\n \r\n \r\n
\r\n {/* end::Form group */}\r\n \r\n \r\n )\r\n}\r\n","import React, { useState } from 'react'\r\nimport * as Yup from 'yup'\r\nimport clsx from 'clsx'\r\nimport { Link } from 'react-router-dom'\r\nimport { useFormik } from 'formik'\r\nimport { requestPassword } from '../services/AuthCRUD'\r\n\r\nconst initialValues = {\r\n email: '',\r\n}\r\n\r\nconst forgotPasswordSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .email('Wrong email format')\r\n .min(3, 'Minimum 3 symbols')\r\n .max(50, 'Maximum 50 symbols')\r\n .required('Email is required'),\r\n})\r\n\r\nexport function ForgotPassword() {\r\n const [loading, setLoading] = useState(false)\r\n const [hasErrors, setHasErrors] = useState(undefined)\r\n const [checkEmailMsg, setCheckEmailMsg] = useState(false)\r\n const formik = useFormik({\r\n initialValues,\r\n validationSchema: forgotPasswordSchema,\r\n onSubmit: (values, { setStatus, setSubmitting }) => {\r\n setLoading(true)\r\n setHasErrors(undefined)\r\n setTimeout(() => {\r\n requestPassword(values.email)\r\n .then(({ data: { result } }) => {\r\n setHasErrors(false)\r\n setCheckEmailMsg(true)\r\n setLoading(false)\r\n })\r\n .catch(() => {\r\n setHasErrors(true)\r\n setLoading(false)\r\n setSubmitting(false)\r\n setStatus('The login detail is incorrect')\r\n })\r\n }, 1000)\r\n },\r\n })\r\n\r\n return (\r\n <>\r\n \r\n\r\n {checkEmailMsg ? (\r\n
\r\n
\r\n Check Your Email for Confirmation Link\r\n\r\n
\r\n
\r\n ) :\r\n\r\n
\r\n
\r\n {/* begin::Title */}\r\n

Forgot Password ?

\r\n {/* end::Title */}\r\n\r\n {/* begin::Link */}\r\n
Enter your email to reset your password.
\r\n {/* end::Link */}\r\n
\r\n\r\n {/* begin::Title */}\r\n {hasErrors === true && (\r\n
\r\n
\r\n Sorry, looks like there are some errors detected, please try again.\r\n
\r\n
\r\n )}\r\n\r\n {hasErrors === false && (\r\n
\r\n
Sent password reset. Please check your email
\r\n
\r\n )}\r\n {/* end::Title */}\r\n\r\n {/* begin::Form group */}\r\n
\r\n \r\n \r\n {formik.touched.email && formik.errors.email && (\r\n
\r\n
\r\n {formik.errors.email}\r\n
\r\n
\r\n )}\r\n
\r\n {/* end::Form group */}\r\n\r\n {/* begin::Form group */}\r\n
\r\n \r\n Submit\r\n {loading && (\r\n \r\n Please wait...\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n Cancel\r\n \r\n {' '}\r\n
\r\n\r\n {/* end::Form group */}\r\n\r\n
\r\n\r\n }\r\n\r\n \r\n \r\n )\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React, { useContext, useEffect, useState } from 'react'\r\nimport * as Yup from 'yup'\r\nimport clsx from 'clsx'\r\nimport { Link } from 'react-router-dom'\r\nimport { useFormik } from 'formik'\r\nimport { login } from '../services/AuthCRUD'\r\nimport { toAbsoluteUrl } from '../../../../_metronic/helpers'\r\nimport { IsAuthorizedContext } from '../../../contexts/isAuthorizedContext'\r\nimport { useAuth } from '../../../contexts/CustomContextHook/useAuth'\r\n\r\n\r\nconst loginSchema = Yup.object().shape({\r\n email: Yup.string()\r\n .email('Wrong email format')\r\n .min(3, 'Minimum 3 symbols')\r\n .max(50, 'Maximum 50 symbols')\r\n .required('Email is required'),\r\n password: Yup.string()\r\n .min(3, 'Minimum 3 symbols')\r\n .max(50, 'Maximum 50 symbols')\r\n .required('Password is required'),\r\n})\r\n\r\nconst initialValues = {\r\n email: '',\r\n password: '',\r\n}\r\n\r\n/*\r\n Formik+YUP+Typescript:\r\n https://jaredpalmer.com/formik/docs/tutorial#getfieldprops\r\n https://medium.com/@maurice.de.beijer/yup-validation-and-typescript-and-formik-6c342578a20e\r\n*/\r\n\r\nexport function Login() {\r\n\r\n // const isAuthorizedCxt = useContext(IsAuthorizedContext);\r\n\r\n const { UserToken, setUserToken } = useAuth('')\r\n\r\n\r\n // const [hasErrors, setHasErrors] = useState('')\r\n\r\n const [loading, setLoading] = useState(false)\r\n\r\n\r\n\r\n const formik = useFormik({\r\n initialValues,\r\n validationSchema: loginSchema,\r\n onSubmit: (values, { setStatus, setSubmitting }) => {\r\n setLoading(true)\r\n\r\n\r\n setTimeout(() => {\r\n login(values.email, values.password)\r\n .then((response) => {\r\n\r\n setLoading(false)\r\n window.location.reload();\r\n\r\n\r\n console.log('login reponse-----', response);\r\n\r\n // localStorage.setItem('Token', response.data.accessToken);\r\n\r\n // localStorage.setItem('Expiry', response.data.expiresIn);\r\n\r\n // localStorage.setItem('LoggedInUserId', response.data.loggedInUserId);\r\n\r\n // localStorage.setItem('UserRoles', response.data.roles);\r\n\r\n // localStorage.setItem('FirstName', response.data.firstName);\r\n // localStorage.setItem('LastName', response.data.lastName);\r\n // localStorage.setItem('Email', response.data.email);\r\n\r\n\r\n setUserToken(\r\n response.data.accessToken,\r\n response.data.expiresIn,\r\n response.data.loggedInUserId,\r\n response.data.roles,\r\n response.data.firstName,\r\n response.data.lastName,\r\n response.data.email\r\n );\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n })\r\n .catch((error) => {\r\n\r\n // localStorage.setItem('Token', '');\r\n\r\n // localStorage.setItem('Expiry', '');\r\n\r\n // localStorage.setItem('LoggedInUserId', '');\r\n // localStorage.setItem('UserRoles', []);\r\n\r\n\r\n\r\n // localStorage.setItem('FirstName', '');\r\n // localStorage.setItem('LastName', '');\r\n // localStorage.setItem('Email', '');\r\n\r\n setLoading(false)\r\n\r\n setUserToken('', '', '', [], '', '', '');\r\n\r\n\r\n let Obj = error.toJSON();\r\n\r\n\r\n\r\n if (Obj.message === 'Network Error') {\r\n // setHasErrors('API Server is down....');\r\n setStatus('API Server is down....');\r\n }\r\n else {\r\n let obj2 = JSON.parse(Obj.message);\r\n // setHasErrors(obj2.errorMessage);\r\n setStatus(obj2.errorMessage);\r\n }\r\n\r\n\r\n // setLoading(false)\r\n // setSubmitting(false)\r\n\r\n // isAuthorizedCxt.setIsaAuthorized(false);\r\n // setStatus(error.errorMessage);\r\n // setStatus('The login detail is incorrect')\r\n })\r\n }, 1000)\r\n},\r\n })\r\n\r\nreturn (\r\n \r\n {/* begin::Heading */}\r\n
\r\n

Sign In to Indiana Hospitality Group Reporting Portal

\r\n {/*
\r\n New Here?{' '}\r\n \r\n Create an Account\r\n \r\n
*/}\r\n
\r\n {/* begin::Heading */}\r\n\r\n {formik.status ? (\r\n
\r\n
{formik.status}
\r\n
\r\n ) : ''}\r\n\r\n {/* {hasErrors ? (\r\n
\r\n
{hasErrors}
\r\n
\r\n ) : ''} */}\r\n\r\n {/* // : (\r\n //
\r\n //
\r\n // Use account admin@demo.com and password demo to\r\n // continue.\r\n //
\r\n //
\r\n // )} */}\r\n\r\n {/* begin::Form group */}\r\n
\r\n \r\n \r\n {formik.touched.email && formik.errors.email && (\r\n
\r\n {formik.errors.email}\r\n
\r\n )}\r\n
\r\n {/* end::Form group */}\r\n\r\n {/* begin::Form group */}\r\n
\r\n
\r\n
\r\n {/* begin::Label */}\r\n \r\n {/* end::Label */}\r\n {/* begin::Link */}\r\n \r\n Forgot Password ?\r\n \r\n {/* end::Link */}\r\n
\r\n
\r\n \r\n {formik.touched.password && formik.errors.password && (\r\n
\r\n
\r\n {formik.errors.password}\r\n
\r\n
\r\n )}\r\n
\r\n {/* end::Form group */}\r\n\r\n {/* begin::Action */}\r\n
\r\n \r\n {!loading && Continue}\r\n {loading && (\r\n \r\n Please wait...\r\n \r\n \r\n )}\r\n \r\n\r\n {/* begin::Separator */}\r\n {/*
or
*/}\r\n {/* end::Separator */}\r\n\r\n {/* begin::Google link */}\r\n {/* \r\n \r\n Continue with Google\r\n */}\r\n {/* end::Google link */}\r\n\r\n {/* begin::Google link */}\r\n {/* \r\n \r\n Continue with Facebook\r\n */}\r\n {/* end::Google link */}\r\n\r\n {/* begin::Google link */}\r\n {/* \r\n \r\n Continue with Apple\r\n */}\r\n {/* end::Google link */}\r\n
\r\n {/* end::Action */}\r\n \r\n)\r\n}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport {useEffect} from 'react'\r\nimport {Redirect, Route, Switch} from 'react-router-dom'\r\nimport {Registration} from './components/Registration'\r\nimport { ResetPassword } from './components/ResetPassword'\r\nimport {ForgotPassword} from './components/ForgotPassword'\r\nimport {Login} from './components/Login'\r\nimport ConfirmEmail from './components/ConfirmEmail'\r\nimport { FallbackView } from '../../../_metronic/partials'\r\n\r\nexport function AuthPage() {\r\n useEffect(() => {\r\n document.body.classList.add('bg-white')\r\n return () => {\r\n document.body.classList.remove('bg-white')\r\n }\r\n }, [])\r\n\r\n return (\r\n \r\n {/* begin::Content */}\r\n
\r\n {/* begin::Logo */}\r\n \r\n \r\n {/* Logo */}\r\n \r\n\r\n \r\n {/* end::Logo */}\r\n {/* begin::Wrapper */}\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\n \r\n \r\n \r\n \r\n
\r\n {/* end::Wrapper */}\r\n
\r\n {/* end::Content */}\r\n {/* begin::Footer */}\r\n
\r\n
\r\n {/* \r\n About\r\n \r\n\r\n \r\n Contact\r\n \r\n\r\n \r\n Contact Us\r\n */}\r\n
\r\n
\r\n {/* end::Footer */}\r\n \r\n )\r\n}\r\n","import {toAbsoluteUrl} from '../../../../_metronic/helpers'\r\nimport {UserModel} from '../models/UserModel'\r\n\r\nexport class UsersTableMock {\r\n public static table: Array = [\r\n {\r\n id: 1,\r\n username: 'admin',\r\n password: 'demo',\r\n email: 'admin@demo.com',\r\n auth: {\r\n accessToken: 'access-token-8f3ae836da744329a6f93bf20594b5cc',\r\n refreshToken: 'access-token-f8c137a2c98743f48b643e71161d90aa',\r\n loggedInUserId : '0',\r\n Roles : []\r\n },\r\n roles: [1], // Administrator\r\n pic: toAbsoluteUrl('/media/avatars/150-2.jpg'),\r\n fullname: 'Sean S',\r\n firstname: 'Sean',\r\n lastname: 'Stark',\r\n occupation: 'CEO',\r\n companyName: 'Keenthemes',\r\n phone: '456669067890',\r\n language: 'en',\r\n timeZone: 'International Date Line West',\r\n website: 'https://keenthemes.com',\r\n emailSettings: {\r\n emailNotification: true,\r\n sendCopyToPersonalEmail: false,\r\n activityRelatesEmail: {\r\n youHaveNewNotifications: false,\r\n youAreSentADirectMessage: false,\r\n someoneAddsYouAsAsAConnection: true,\r\n uponNewOrder: false,\r\n newMembershipApproval: false,\r\n memberRegistration: true,\r\n },\r\n updatesFromKeenthemes: {\r\n newsAboutKeenthemesProductsAndFeatureUpdates: false,\r\n tipsOnGettingMoreOutOfKeen: false,\r\n thingsYouMissedSindeYouLastLoggedIntoKeen: true,\r\n newsAboutStartOnPartnerProductsAndOtherServices: true,\r\n tipsOnStartBusinessProducts: true,\r\n },\r\n },\r\n communication: {\r\n email: true,\r\n sms: true,\r\n phone: false,\r\n },\r\n address: {\r\n addressLine: 'L-12-20 Vertex, Cybersquare',\r\n city: 'San Francisco',\r\n state: 'California',\r\n postCode: '45000',\r\n },\r\n socialNetworks: {\r\n linkedIn: 'https://linkedin.com/admin',\r\n facebook: 'https://facebook.com/admin',\r\n twitter: 'https://twitter.com/admin',\r\n instagram: 'https://instagram.com/admin',\r\n },\r\n },\r\n {\r\n id: 2,\r\n username: 'user',\r\n password: 'demo',\r\n email: 'user@demo.com',\r\n auth: {\r\n accessToken: 'access-token-6829bba69dd3421d8762-991e9e806dbf',\r\n refreshToken: 'access-token-f8e4c61a318e4d618b6c199ef96b9e55',\r\n loggedInUserId : '0',\r\n Roles : []\r\n },\r\n roles: [2], // Manager\r\n pic: toAbsoluteUrl('/media/avatars/150-1.jpg'),\r\n fullname: 'Megan F',\r\n firstname: 'Megan',\r\n lastname: 'Fox',\r\n occupation: 'Deputy Head of Keenthemes in New York office',\r\n companyName: 'Keenthemes',\r\n phone: '456669067891',\r\n language: 'en',\r\n timeZone: 'International Date Line West',\r\n communication: {\r\n email: true,\r\n sms: true,\r\n phone: false,\r\n },\r\n emailSettings: {\r\n emailNotification: true,\r\n sendCopyToPersonalEmail: false,\r\n activityRelatesEmail: {\r\n youHaveNewNotifications: false,\r\n youAreSentADirectMessage: false,\r\n someoneAddsYouAsAsAConnection: true,\r\n uponNewOrder: false,\r\n newMembershipApproval: false,\r\n memberRegistration: true,\r\n },\r\n updatesFromKeenthemes: {\r\n newsAboutKeenthemesProductsAndFeatureUpdates: false,\r\n tipsOnGettingMoreOutOfKeen: false,\r\n thingsYouMissedSindeYouLastLoggedIntoKeen: true,\r\n newsAboutStartOnPartnerProductsAndOtherServices: true,\r\n tipsOnStartBusinessProducts: true,\r\n },\r\n },\r\n address: {\r\n addressLine: '3487 Ingram Road',\r\n city: 'Greensboro',\r\n state: 'North Carolina',\r\n postCode: '27409',\r\n },\r\n socialNetworks: {\r\n linkedIn: 'https://linkedin.com/user',\r\n facebook: 'https://facebook.com/user',\r\n twitter: 'https://twitter.com/user',\r\n instagram: 'https://instagram.com/user',\r\n },\r\n },\r\n {\r\n id: 3,\r\n username: 'guest',\r\n password: 'demo',\r\n email: 'guest@demo.com',\r\n auth: {\r\n accessToken: 'access-token-d2dff7b82f784de584b60964abbe45b9',\r\n refreshToken: 'access-token-c999ccfe74aa40d0aa1a64c5e620c1a5',\r\n loggedInUserId : '0',\r\n Roles : []\r\n },\r\n roles: [3], // Guest\r\n pic: toAbsoluteUrl('/media/avatars/150-5.jpg'),\r\n fullname: 'Manu G',\r\n firstname: 'Manu',\r\n lastname: 'Ginobili',\r\n occupation: 'CFO',\r\n companyName: 'Keenthemes',\r\n phone: '456669067892',\r\n language: 'en',\r\n timeZone: 'International Date Line West',\r\n communication: {\r\n email: true,\r\n sms: true,\r\n phone: false,\r\n },\r\n emailSettings: {\r\n emailNotification: true,\r\n sendCopyToPersonalEmail: false,\r\n activityRelatesEmail: {\r\n youHaveNewNotifications: false,\r\n youAreSentADirectMessage: false,\r\n someoneAddsYouAsAsAConnection: true,\r\n uponNewOrder: false,\r\n newMembershipApproval: false,\r\n memberRegistration: true,\r\n },\r\n updatesFromKeenthemes: {\r\n newsAboutKeenthemesProductsAndFeatureUpdates: false,\r\n tipsOnGettingMoreOutOfKeen: false,\r\n thingsYouMissedSindeYouLastLoggedIntoKeen: true,\r\n newsAboutStartOnPartnerProductsAndOtherServices: true,\r\n tipsOnStartBusinessProducts: true,\r\n },\r\n },\r\n address: {\r\n addressLine: '1467 Griffin Street',\r\n city: 'Phoenix',\r\n state: 'Arizona',\r\n postCode: '85012',\r\n },\r\n socialNetworks: {\r\n linkedIn: 'https://linkedin.com/guest',\r\n facebook: 'https://facebook.com/guest',\r\n twitter: 'https://twitter.com/guest',\r\n instagram: 'https://instagram.com/guest',\r\n },\r\n },\r\n ]\r\n}\r\n","import React, {useEffect} from 'react'\r\nimport {Redirect, Switch} from 'react-router-dom'\r\n\r\n\r\nexport function Logout() {\r\n useEffect(() => {\r\n\r\n document.location.reload()\r\n }, [])\r\n\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n","import {FC} from 'react'\r\n\r\nconst Error500: FC = () => {\r\n return (\r\n <>\r\n

System Error

\r\n\r\n
\r\n Something went wrong!
Please try again later.\r\n
\r\n \r\n )\r\n}\r\n\r\nexport {Error500}\r\n","import {FC} from 'react'\r\n\r\nconst Error404: FC = () => {\r\n return (\r\n <>\r\n

Page Not Found

\r\n\r\n
\r\n The page you looked not found!
Plan your blog post by choosing a topic\r\n
\r\n \r\n )\r\n}\r\n\r\nexport {Error404}\r\n","/* eslint-disable jsx-a11y/anchor-is-valid */\r\nimport React from 'react'\r\nimport {Redirect, Route, Switch, useHistory} from 'react-router-dom'\r\nimport {Error500} from './components/Error500'\r\nimport {Error404} from './components/Error404'\r\nimport {toAbsoluteUrl} from '../../../_metronic/helpers'\r\n\r\nconst ErrorsPage: React.FC = () => {\r\n const history = useHistory()\r\n const redirectToDashboard = () => {\r\n history.push('/')\r\n }\r\n\r\n return (\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\n \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\n \r\n )\r\n}\r\n\r\nexport {ErrorsPage}\r\n","/**\r\n * High level router.\r\n *\r\n * Note: It's recommended to compose related routes in internal router\r\n * components (e.g: `src/app/modules/Auth/pages/AuthPage`, `src/app/BasePage`).\r\n */\r\n\r\nimport React, { FC, useContext, useEffect } from 'react'\r\nimport { Redirect, Switch, Route } from 'react-router-dom'\r\nimport { MasterLayout } from '../../_metronic/layout/MasterLayout'\r\nimport { PrivateRoutes } from './PrivateRoutes'\r\nimport { Logout, AuthPage } from '../modules/auth'\r\nimport { ErrorsPage } from '../modules/errors/ErrorsPage'\r\nimport { useAuth } from '../contexts/CustomContextHook/useAuth'\r\n\r\n\r\n\r\nconst Routes = () => {\r\n // const isAuthorized = useSelector(({auth}) => auth.user, shallowEqual)\r\n\r\n\r\n const { UserToken, setUserToken } = useAuth()\r\n\r\n\r\n\r\n\r\n useEffect(() => {\r\n\r\n\r\n\r\n\r\n document.addEventListener(\"keydown\", function (event) {\r\n if (event.key === \"Enter\" && event.target.nodeName === \"INPUT\") {\r\n var form = event.target.form;\r\n var index = Array.prototype.indexOf.call(form, event.target);\r\n if (form.elements[index + 1] !== undefined) {\r\n form.elements[index + 1].focus();\r\n }\r\n event.preventDefault();\r\n }\r\n })\r\n\r\n },[])\r\n\r\n\r\n\r\n\r\n const isAuthorized = new Date(UserToken.expiry) > new Date() && UserToken.token !== \"\";\r\n\r\n\r\n console.log('is Authorized :: ',isAuthorized);\r\n \r\n\r\n\r\n return (\r\n \r\n {!isAuthorized ? (\r\n /*Render auth page when user at `/auth` and not authorized.*/\r\n \r\n \r\n \r\n ) : (\r\n /*Otherwise redirect to root page (`/`)*/\r\n \r\n )}\r\n\r\n\r\n\r\n\r\n\r\n\r\n \r\n \r\n\r\n {!isAuthorized ? (\r\n /*Redirect to `/auth` when user is not authorized*/\r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport { Routes }\r\n","import React, {Suspense} from 'react'\r\nimport {BrowserRouter} from 'react-router-dom'\r\nimport { I18nProvider } from '../_metronic/i18n/i18nProvider'\r\n// import {I18nProvider} from '../_metronic/i18n/i18nProvider'\r\nimport {LayoutProvider, LayoutSplashScreen} from '../_metronic/layout/core'\r\nimport { AuthProvider, useAuth } from './contexts/CustomContextHook/useAuth'\r\nimport { HotelProvider } from './contexts/CustomContextHook/useHotel'\r\nimport { HotelContextProvider } from './contexts/HotelContext'\r\nimport { IsAuthorizedContextProvider } from './contexts/isAuthorizedContext'\r\nimport IdleTimerContainer from './modules/widgets/components/IdleTimerContainer'\r\n// import AuthInit from './modules/auth/redux/AuthInit'\r\nimport {Routes} from './routing/Routes'\r\nimport {toast} from 'react-toastify'\r\ntype Props = {\r\n basename: string\r\n}\r\n\r\nconst App: React.FC = ({basename}) => {\r\n\r\n toast.configure();\r\n\r\n\r\n \r\n return (\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\n \r\n {/* */}\r\n \r\n {/* */}\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport {App}\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\n// Redux\r\n// https://github.com/rt2zz/redux-persist\r\n// import {Provider} from 'react-redux'\r\n// import * as _redux from './setup'\r\n// Axios\r\nimport axios, { AxiosError, AxiosInstance } from 'axios'\r\nimport {Chart, registerables} from 'chart.js'\r\n\r\n// Apps\r\nimport {App} from './app/App'\r\n// import {MetronicI18nProvider} from './_metronic/i18n/Metronici18n'\r\n/**\r\n * TIP: Replace this style import with dark styles to enable dark mode\r\n *\r\n * import './_metronic/assets/sass/style.dark.scss'\r\n *\r\n * TIP: Replace this style import with rtl styles to enable rtl mode\r\n *\r\n * import './_metronic/assets/css/style.rtl.css'\r\n **/\r\nimport './_metronic/assets/sass/style.scss'\r\nimport './_metronic/assets/sass/style.react.scss'\r\nimport './_metronic/assets/css/App.css'\r\n\r\nimport 'react-toastify/dist/ReactToastify.css'\r\nimport { MetronicI18nProvider } from './_metronic/i18n/Metronici18n'\r\n/**\r\n * Base URL of the website.\r\n *\r\n * @see https://facebook.github.io/create-react-app/docs/using-the-public-folder\r\n */\r\nconst {PUBLIC_URL} = process.env\r\n/**\r\n * Creates `axios-mock-adapter` instance for provided `axios` instance, add\r\n * basic Metronic mocks and returns it.\r\n *\r\n * @see https://github.com/ctimmerm/axios-mock-adapter\r\n */\r\n console.log('public _URL --- ', PUBLIC_URL)\r\n\r\n// /* const mock = */ _redux.mockAxios(axios)\r\n/**\r\n * Inject Metronic interceptors for axios.\r\n *\r\n * @see https://github.com/axios/axios#interceptors\r\n */\r\n// _redux.setupAxios(axios, store)\r\n\r\nChart.register(...registerables)\r\n\r\n// export function extractAPIErrorResponse(axios: AxiosInstance) {\r\n axios.interceptors.response.use(undefined, function (error: AxiosError) {\r\n (error as any).originalMessage = error.message;\r\n Object.defineProperty(error, \"message\", { get: function () {\r\n if (!error.response) {\r\n return (error as any).originalMessage;\r\n }\r\n return JSON.stringify(error.response.data);\r\n }});\r\n return Promise.reject(error);\r\n })\r\n// }\r\n\r\nReactDOM.render(\r\n \r\n \r\n {/* */}\r\n {/* Asynchronously persist redux stores and show `SplashScreen` while it's loading. */}\r\n {/* Loading...}>\r\n \r\n \r\n */}\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n","import React, { createContext, useContext, useState } from \"react\";\r\n\r\n\r\nexport const AuthContext = createContext({} as AuthContextType);\r\n\r\ntype AuthContextProviderProps = {\r\n children: React.ReactNode\r\n}\r\n\r\ntype AuthContextType = {\r\n\r\n UserToken: {\r\n token: string,\r\n expiry: string,\r\n LoggedInUserId: string,\r\n Roles: string[],\r\n FirstName: string,\r\n LastName: string,\r\n Email: string\r\n\r\n }\r\n // setHotelId : React.Dispatch>\r\n setUserToken: (\r\n token: string,\r\n expiry: string,\r\n LoggedInUserId: string,\r\n Roles: string[],\r\n FirstName: string,\r\n LastName: string,\r\n Email: string\r\n ) => void\r\n\r\n\r\n}\r\n\r\n\r\nexport const AuthProvider = ({ children }: AuthContextProviderProps) => {\r\n\r\n\r\n let token_ = localStorage.getItem('Token');\r\n let expiry_ = localStorage.getItem('Expiry');\r\n let loggedInUserId_ = localStorage.getItem('LoggedInUserId');\r\n console.log('*** ',localStorage.getItem('UserRoles'));\r\n\r\n let roles_ = [''];\r\n if(localStorage.getItem('UserRoles') !== null){\r\n roles_ = Array.from(localStorage.getItem('UserRoles')!.split(','));\r\n console.log('previos roles == ', roles_);\r\n \r\n }\r\n \r\n // Array.from(localStorage.getItem('UserRoles')!.split(','));\r\n let firstName_ = localStorage.getItem('FirstName');\r\n let lastName_ = localStorage.getItem('LastName');\r\n let email_ = localStorage.getItem('Email');\r\n\r\n\r\n\r\n const [UserToken, setUser_Token] = useState({\r\n token: token_ ? token_ : '',\r\n expiry: expiry_ ? expiry_ : '',\r\n LoggedInUserId: loggedInUserId_ ? loggedInUserId_ : '',\r\n Roles: roles_ ? roles_ : [''],\r\n FirstName: firstName_ ? firstName_ : '',\r\n LastName: lastName_ ? lastName_ : '',\r\n Email: email_ ? email_ : ''\r\n\r\n })\r\n\r\n const setUserToken = (token: string, expiry: string, LoggedInUserId: string,\r\n Roles: string[], FirstName: string, LastName: string,\r\n Email: string) => {\r\n\r\n localStorage.setItem('Token', token);\r\n\r\n localStorage.setItem('Expiry', expiry);\r\n\r\n localStorage.setItem('LoggedInUserId', LoggedInUserId);\r\n\r\n localStorage.setItem('UserRoles', JSON.stringify(Roles));\r\n\r\n localStorage.setItem('FirstName', FirstName);\r\n localStorage.setItem('LastName', LastName);\r\n localStorage.setItem('Email', Email);\r\n\r\n setUser_Token({\r\n token: token,\r\n expiry: expiry,\r\n LoggedInUserId: LoggedInUserId,\r\n Roles: Roles,\r\n FirstName: FirstName,\r\n LastName: LastName,\r\n Email: Email\r\n })\r\n\r\n }\r\n\r\n return (\r\n \r\n {children}\r\n \r\n )\r\n}\r\n\r\nexport const useAuth = () => useContext(AuthContext)\r\n\r\n","import React, { createContext, useContext, useState } from \"react\"\r\n\r\n\r\ntype HotelContextProviderProps = {\r\n children : React.ReactNode\r\n}\r\n\r\n\r\ntype HotelContextType = {\r\n HotelId : string \r\n // setHotelId : React.Dispatch>\r\n setHotelId : (Id : string) => void\r\n\r\n HotelName : string \r\n // setHotelName : React.Dispatch>\r\n setHotelName : (Name : string) => void\r\n\r\n}\r\n\r\n\r\n// export const UserContext = createContext({} as UserContextType)\r\nexport const HotelContext = createContext({} as HotelContextType)\r\n// export const UserContext = createContext(null)\r\n\r\nexport const HotelContextProvider = \r\n({children} : HotelContextProviderProps) => {\r\n \r\n // const [user, setUser] = useState(null) // this technique is called as Union type\r\nconsole.log('---HotelContext ApI initialization----');\r\n\r\n let item = localStorage.getItem('HotelId');\r\n const [HotelId, setHotel_Id ] = useState(item ? item : '');\r\n\r\n const setHotelId = (Id : string) => {\r\n setHotel_Id(Id);\r\n localStorage.setItem(\"HotelId\", Id);\r\n }\r\n\r\n const setHotelName = (Name : string) => {\r\n setHotel_Name(Name);\r\n localStorage.setItem(\"HotelName\", Name);\r\n }\r\n \r\n let itemName = localStorage.getItem('HotelName');\r\n const [HotelName, setHotel_Name ] = useState(itemName ? itemName : '');\r\n \r\n\r\n return (\r\n \r\n {children} \r\n \r\n )\r\n \r\n\r\n}\r\n\r\n\r\nexport const useHotel2 = () => useContext(HotelContext)\r\n","import {\r\n IAside,\r\n IContent,\r\n IFooter,\r\n IHeader,\r\n IToolbar,\r\n ILayout,\r\n ILayoutCSSClasses,\r\n ILayoutHTMLAttributes,\r\n ILayoutCSSVariables,\r\n IPageTitle,\r\n} from './LayoutModels'\r\nimport {DefaultLayoutConfig} from './DefaultLayoutConfig'\r\n\r\nconst LAYOUT_CONFIG_KEY = process.env.REACT_APP_BASE_LAYOUT_CONFIG_KEY || 'LayoutConfig'\r\n\r\nexport function getLayout(): ILayout {\r\n const ls = localStorage.getItem(LAYOUT_CONFIG_KEY)\r\n if (ls) {\r\n try {\r\n return JSON.parse(ls) as ILayout\r\n } catch (er) {\r\n console.error(er)\r\n }\r\n }\r\n return DefaultLayoutConfig\r\n}\r\n\r\nfunction setLayout(config: ILayout): void {\r\n try {\r\n localStorage.setItem(LAYOUT_CONFIG_KEY, JSON.stringify(config))\r\n } catch (er) {\r\n console.error(er)\r\n }\r\n}\r\n\r\nexport function getEmptyCssClasses() {\r\n return {\r\n header: [],\r\n headerContainer: [],\r\n headerMobile: [],\r\n headerMenu: [],\r\n aside: [],\r\n asideMenu: [],\r\n asideToggle: [],\r\n toolbar: [],\r\n toolbarContainer: [],\r\n content: [],\r\n contentContainer: [],\r\n footerContainer: [],\r\n sidebar: [],\r\n pageTitle: [],\r\n }\r\n}\r\n\r\nexport function getEmptyHTMLAttributes() {\r\n return {\r\n asideMenu: new Map(),\r\n headerMobile: new Map(),\r\n headerMenu: new Map(),\r\n headerContainer: new Map(),\r\n pageTitle: new Map(),\r\n }\r\n}\r\n\r\nexport function getEmptyCSSVariables() {\r\n return {\r\n body: new Map(),\r\n }\r\n}\r\n\r\nexport class LayoutSetup {\r\n public static isLoaded: boolean = false\r\n public static config: ILayout = getLayout()\r\n public static classes: ILayoutCSSClasses = getEmptyCssClasses()\r\n public static attributes: ILayoutHTMLAttributes = getEmptyHTMLAttributes()\r\n public static cssVariables: ILayoutCSSVariables = getEmptyCSSVariables()\r\n\r\n private static initCSSClasses(): void {\r\n LayoutSetup.classes = getEmptyCssClasses()\r\n }\r\n\r\n private static initHTMLAttributes(): void {\r\n LayoutSetup.attributes = Object.assign({}, getEmptyHTMLAttributes())\r\n }\r\n\r\n private static initCSSVariables(): void {\r\n LayoutSetup.cssVariables = getEmptyCSSVariables()\r\n }\r\n\r\n private static initLayout(config: ILayout): void {\r\n Array.from(document.body.attributes).forEach((attr) => {\r\n document.body.removeAttribute(attr.name)\r\n })\r\n document.body.setAttribute('style', '')\r\n document.body.setAttribute('id', 'kt_body')\r\n if (config.main?.body?.backgroundImage) {\r\n document.body.style.backgroundImage = `url('${config.main.body.backgroundImage}')`\r\n }\r\n\r\n if (config.main?.body?.class) {\r\n document.body.classList.add(config.main.body.class)\r\n }\r\n\r\n // if (config.loader.display) {\r\n // document.body.classList.add('page-loading')\r\n // document.body.classList.add('page-loading-enabled')\r\n // }\r\n }\r\n\r\n private static initHeader(config: IHeader): void {\r\n LayoutSetup.classes.headerContainer.push(\r\n config.width === 'fluid' ? 'container-fluid' : 'container'\r\n )\r\n\r\n if (config.fixed.desktop) {\r\n document.body.classList.add('header-fixed')\r\n }\r\n\r\n if (config.fixed.tabletAndMobile) {\r\n document.body.classList.add('header-tablet-and-mobile-fixed')\r\n }\r\n }\r\n\r\n private static initToolbar(config: IToolbar): void {\r\n if (!config.display) {\r\n return\r\n }\r\n\r\n document.body.classList.add('toolbar-enabled')\r\n LayoutSetup.classes.toolbarContainer.push(\r\n config.width === 'fluid' ? 'container-fluid' : 'container'\r\n )\r\n\r\n if (config.fixed.desktop) {\r\n document.body.classList.add('toolbar-fixed')\r\n }\r\n\r\n if (config.fixed.tabletAndMobileMode) {\r\n document.body.classList.add('toolbar-tablet-and-mobile-fixed')\r\n }\r\n\r\n // Height setup\r\n const type = config.layout\r\n const typeOptions = config.layouts[type]\r\n if (typeOptions) {\r\n let bodyStyles: string = ''\r\n if (typeOptions.height) {\r\n bodyStyles += ` --kt-toolbar-height: ${typeOptions.height};`\r\n }\r\n\r\n if (typeOptions.heightAndTabletMobileMode) {\r\n bodyStyles += ` --kt-toolbar-height-tablet-and-mobile: ${typeOptions.heightAndTabletMobileMode};`\r\n }\r\n document.body.setAttribute('style', bodyStyles)\r\n }\r\n }\r\n\r\n private static initPageTitle(config: IPageTitle): void {\r\n if (!config.display) {\r\n return\r\n }\r\n\r\n if (config.direction === 'column') {\r\n this.classes.pageTitle.push('flex-column')\r\n this.classes.pageTitle.push('align-items-start')\r\n } else {\r\n this.classes.pageTitle.push('align-items-center')\r\n this.classes.pageTitle.push('flex-wrap')\r\n }\r\n this.classes.pageTitle.push('me-3')\r\n\r\n if (config.responsive) {\r\n this.classes.pageTitle.push('mb-5')\r\n this.classes.pageTitle.push('mb-lg-0')\r\n\r\n LayoutSetup.attributes.pageTitle.set('data-kt-swapper', true)\r\n LayoutSetup.attributes.pageTitle.set('data-kt-swapper-mode', 'prepend')\r\n LayoutSetup.attributes.pageTitle.set(\r\n 'data-kt-swapper-parent',\r\n `{ default: '#kt_content_container', '${config.responsiveBreakpoint}': '${config.responsiveTarget}'}`\r\n )\r\n }\r\n }\r\n\r\n private static initContent(config: IContent): void {\r\n LayoutSetup.classes.contentContainer.push(\r\n config.width === 'fluid' ? 'container-fluid' : 'container'\r\n )\r\n // if (Theme::getOption('layout', 'content/container-class')) {\r\n // \tTheme::addHtmlClass('content-container', Theme::getOption('layout', 'content/container-class'));\r\n // }\r\n }\r\n\r\n private static initAside(config: IAside): void {\r\n // Check if aside is displayed\r\n if (!config.display) {\r\n return\r\n }\r\n\r\n // Enable Aside\r\n document.body.classList.add('aside-enabled')\r\n LayoutSetup.classes.aside.push(`aside-${config.theme}`)\r\n\r\n // Fixed Aside\r\n if (config.fixed) {\r\n document.body.classList.add('aside-fixed')\r\n }\r\n\r\n // Default minimized\r\n if (config.minimized) {\r\n document.body.setAttribute('data-kt-aside-minimize', 'on')\r\n }\r\n\r\n // Hoverable on minimize\r\n if (config.hoverable) {\r\n LayoutSetup.classes.aside.push('aside-hoverable')\r\n }\r\n }\r\n\r\n private static initAsideMenu(config: IAside): void {\r\n // if (Theme::getOption('layout', 'aside/menu') === 'documentation') {\r\n // \tself::$menu = new Menu( Theme::getOption('menu', 'documentation'), Theme::getPagePath() );\r\n // } else {\r\n // \tself::$menu = new Menu( Theme::getOption('menu', 'main'), Theme::getPagePath() );\r\n // }\r\n // if (Theme::getOption('layout', 'aside/menu-icons-display') === false) {\r\n // \tself::$menu->displayIcons(false);\r\n // }\r\n // self::$menu->setIconType(Theme::getOption('layout', 'aside/menu-icon'));\r\n }\r\n\r\n // private static initSidebar(sidebarConfig: ISidebarConfig): void {\r\n // // / Set Sidebar enabled class\r\n // if (sidebarConfig.display) {\r\n // document.body.classList.add('sidebar-enabled')\r\n // } else {\r\n // return\r\n // }\r\n\r\n // // Set Sidebar shown status\r\n // if (sidebarConfig.shown) {\r\n // document.body.setAttribute('data-sidebar', 'on')\r\n // }\r\n\r\n // // Set Sidebar background color class\r\n // ThemeSetup.classes.sidebar.push(sidebarConfig.bgColor)\r\n // }\r\n\r\n private static initFooter(config: IFooter): void {\r\n LayoutSetup.classes.footerContainer.push(`container${config.width === 'fluid' ? '-fluid' : ''}`)\r\n }\r\n\r\n private static initConfig(config: ILayout): void {\r\n if (config.main?.darkSkinEnabled) {\r\n document.body.classList.add('dark-skin')\r\n }\r\n\r\n // Init layout\r\n LayoutSetup.initLayout(config)\r\n if (config.main?.type !== 'default') {\r\n return\r\n }\r\n\r\n LayoutSetup.initHeader(config.header)\r\n LayoutSetup.initPageTitle(config.pageTitle as IPageTitle)\r\n LayoutSetup.initToolbar(config.toolbar)\r\n LayoutSetup.initContent(config.content)\r\n LayoutSetup.initAside(config.aside)\r\n LayoutSetup.initFooter(config.footer)\r\n LayoutSetup.initAsideMenu(config.aside)\r\n }\r\n\r\n public static updatePartialConfig(fieldsToUpdate: Partial): ILayout {\r\n const config = LayoutSetup.config\r\n const updatedConfig = {...config, ...fieldsToUpdate}\r\n LayoutSetup.initCSSClasses()\r\n LayoutSetup.initCSSVariables()\r\n LayoutSetup.initHTMLAttributes()\r\n LayoutSetup.isLoaded = false\r\n LayoutSetup.config = updatedConfig\r\n LayoutSetup.initConfig(Object.assign({}, updatedConfig))\r\n LayoutSetup.isLoaded = true // remove loading there\r\n return updatedConfig\r\n }\r\n\r\n public static setConfig(config: ILayout): void {\r\n setLayout(config)\r\n }\r\n\r\n public static bootstrap = (() => {\r\n LayoutSetup.updatePartialConfig(LayoutSetup.config)\r\n })()\r\n}\r\n","export const toAbsoluteUrl = (pathname: string) => process.env.PUBLIC_URL + pathname\r\n","export function getCurrentUrl(pathname: string) {\r\n return pathname.split(/[?#]/)[0]\r\n}\r\n\r\nexport function checkIsActive(pathname: string, url: string) {\r\n const current = getCurrentUrl(pathname)\r\n if (!current || !url) {\r\n return false\r\n }\r\n\r\n if (current === url) {\r\n return true\r\n }\r\n\r\n if (current.indexOf(url) > -1) {\r\n return true\r\n }\r\n\r\n return false\r\n}\r\n","import React from 'react'\r\nimport SVG from 'react-inlinesvg'\r\nimport {toAbsoluteUrl} from '../AssetHelpers'\r\ntype Props = {\r\n className?: string\r\n path: string\r\n svgClassName?: string\r\n}\r\n\r\nconst KTSVG: React.FC = ({className = '', path, svgClassName = 'mh-50px'}) => {\r\n return (\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport {KTSVG}\r\n","import {ILayout} from './LayoutModels'\r\n\r\nexport const DefaultLayoutConfig: ILayout = {\r\n main: {\r\n type: 'default',\r\n primaryColor: '#009EF7',\r\n darkSkinEnabled: true,\r\n },\r\n loader: {\r\n display: true,\r\n type: 'default', // Set default|spinner-message|spinner-logo to hide or show page loader\r\n },\r\n scrolltop: {\r\n display: true,\r\n },\r\n header: {\r\n display: true, // Set true|false to show or hide Header\r\n width: 'fluid', // Set fixed|fluid to change width type\r\n left: 'menu',\r\n fixed: {\r\n desktop: true, // Set true|false to set fixed Header for desktop mode\r\n tabletAndMobile: true, // Set true|false to set fixed Header for tablet and mobile modes\r\n },\r\n menuIcon: 'svg',\r\n },\r\n megaMenu: {\r\n display: true, // Set true|false to show or hide Mega Menu\r\n },\r\n aside: {\r\n display: true,\r\n theme: 'dark',\r\n menu: 'main',\r\n fixed: true,\r\n minimized: false,\r\n minimize: true,\r\n hoverable: true,\r\n menuIcon: 'svg',\r\n },\r\n content: {\r\n width: 'fixed', // Set fixed|fluid to change width\r\n layout: 'default',\r\n },\r\n toolbar: {\r\n display: true, // Display toolbar\r\n width: 'fluid', // Set fixed|fluid to change width type,\r\n fixed: {\r\n desktop: true,\r\n tabletAndMobileMode: true,\r\n },\r\n layout: 'toolbar1',\r\n layouts: {\r\n toolbar1: {\r\n height: '55px',\r\n heightAndTabletMobileMode: '55px',\r\n },\r\n toolbar2: {\r\n height: '75px',\r\n heightAndTabletMobileMode: '65px',\r\n },\r\n toolbar3: {\r\n height: '55px',\r\n heightAndTabletMobileMode: '55px',\r\n },\r\n toolbar4: {\r\n height: '65px',\r\n heightAndTabletMobileMode: '65px',\r\n },\r\n toolbar5: {\r\n height: '75px',\r\n heightAndTabletMobileMode: '65px',\r\n },\r\n },\r\n },\r\n footer: {\r\n width: 'fluid', // Set fixed|fluid to change width type\r\n },\r\n pageTitle: {\r\n display: true,\r\n breadCrumbs: true,\r\n description: false,\r\n layout: 'default',\r\n direction: 'row',\r\n responsive: true,\r\n responsiveBreakpoint: 'lg',\r\n responsiveTarget: '#kt_toolbar_container',\r\n },\r\n}\r\n","import React, {createContext, useContext, useState, useEffect} from 'react'\r\nimport {DefaultLayoutConfig} from './DefaultLayoutConfig'\r\nimport {\r\n getEmptyCssClasses,\r\n getEmptyCSSVariables,\r\n getEmptyHTMLAttributes,\r\n LayoutSetup,\r\n} from './LayoutSetup'\r\nimport {\r\n ILayout,\r\n ILayoutCSSVariables,\r\n ILayoutCSSClasses,\r\n ILayoutHTMLAttributes,\r\n} from './LayoutModels'\r\n\r\nexport interface LayoutContextModel {\r\n config: ILayout\r\n classes: ILayoutCSSClasses\r\n attributes: ILayoutHTMLAttributes\r\n cssVariables: ILayoutCSSVariables\r\n setLayout: (config: LayoutSetup) => void\r\n}\r\n\r\nconst LayoutContext = createContext({\r\n config: DefaultLayoutConfig,\r\n classes: getEmptyCssClasses(),\r\n attributes: getEmptyHTMLAttributes(),\r\n cssVariables: getEmptyCSSVariables(),\r\n setLayout: (config: LayoutSetup) => {},\r\n})\r\n\r\nconst enableSplashScreen = () => {\r\n const splashScreen = document.getElementById('splash-screen')\r\n if (splashScreen) {\r\n splashScreen.style.setProperty('display', 'flex')\r\n }\r\n}\r\n\r\nconst disableSplashScreen = () => {\r\n const splashScreen = document.getElementById('splash-screen')\r\n if (splashScreen) {\r\n splashScreen.style.setProperty('display', 'none')\r\n }\r\n}\r\n\r\nconst LayoutProvider: React.FC = ({children}) => {\r\n const [config, setConfig] = useState(LayoutSetup.config)\r\n const [classes, setClasses] = useState(LayoutSetup.classes)\r\n const [attributes, setAttributes] = useState(LayoutSetup.attributes)\r\n const [cssVariables, setCSSVariables] = useState(LayoutSetup.cssVariables)\r\n const setLayout = (_themeConfig: Partial) => {\r\n enableSplashScreen()\r\n const bodyClasses = Array.from(document.body.classList)\r\n bodyClasses.forEach((cl) => document.body.classList.remove(cl))\r\n LayoutSetup.updatePartialConfig(_themeConfig)\r\n setConfig(Object.assign({}, LayoutSetup.config))\r\n setClasses(LayoutSetup.classes)\r\n setAttributes(LayoutSetup.attributes)\r\n setCSSVariables(LayoutSetup.cssVariables)\r\n setTimeout(() => {\r\n disableSplashScreen()\r\n }, 500)\r\n }\r\n const value: LayoutContextModel = {\r\n config,\r\n classes,\r\n attributes,\r\n cssVariables,\r\n setLayout,\r\n }\r\n\r\n useEffect(() => {\r\n disableSplashScreen()\r\n }, [])\r\n\r\n return {children}\r\n}\r\n\r\nexport {LayoutContext, LayoutProvider}\r\n\r\nexport function useLayout() {\r\n return useContext(LayoutContext)\r\n}\r\n","import axios from 'axios'\r\n\r\n\r\nexport const API_URL = process.env.REACT_APP_API_URL || 'api'\r\n\r\n\r\nexport const Department_URL = `${API_URL}/api/Department`\r\n\r\n\r\n\r\nexport function GetDepartments(HotelId: any, accessToken: string) {\r\n return axios.get(`${Department_URL}?HotelId=${HotelId}`,\r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n }\r\n );\r\n}\r\n\r\n\r\nexport function GetDepartmentById(id: number, accessToken: string) {\r\n\r\n return axios.get(`${Department_URL}/${id}`\r\n , {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}\r\n\r\nexport function PostDepartment(model: any, accessToken: string) {\r\n console.log('model values in PostRole -- ', model);\r\n return axios.post(`${Department_URL}`,\r\n model,\r\n {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n }\r\n );\r\n}\r\n\r\nexport function UpdateDepartment(id: number, model: any, accessToken: string) {\r\n model.id = id;\r\n return axios.put(`${Department_URL}/${id}`, model, {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}\r\n\r\nexport function DeleteDepartment(id: number, accessToken: string) {\r\n return axios.delete(`${Department_URL}/${id}`, {\r\n headers: {\r\n 'Authorization': 'Bearer ' + accessToken\r\n }\r\n });\r\n}","export default __webpack_public_path__ + \"static/media/480px-Loader.c4cee91c.gif\";","import React from 'react'\r\n// \r\nimport Spinner from '../../../_metronic/assets/gifs/480px-Loader.gif'\r\nconst FullPageLoader = () => {\r\n return (\r\n
\r\n \"loading\"\r\n\r\n
)\r\n}\r\n\r\nexport default FullPageLoader","/* eslint-disable react-hooks/exhaustive-deps */\r\nimport React, {FC, createContext, useContext, useEffect, useState} from 'react'\r\n\r\nexport interface PageLink {\r\n title: string\r\n path: string\r\n isActive: boolean\r\n isSeparator?: boolean\r\n}\r\n\r\nexport interface PageDataContextModel {\r\n pageTitle?: string\r\n setPageTitle: (_title: string) => void\r\n pageDescription?: string\r\n setPageDescription: (_description: string) => void\r\n pageBreadcrumbs?: Array\r\n setPageBreadcrumbs: (_breadcrumbs: Array) => void\r\n}\r\n\r\nconst PageDataContext = createContext({\r\n setPageTitle: (_title: string) => {},\r\n setPageBreadcrumbs: (_breadcrumbs: Array) => {},\r\n setPageDescription: (_description: string) => {},\r\n})\r\n\r\nconst PageDataProvider: React.FC = ({children}) => {\r\n const [pageTitle, setPageTitle] = useState('')\r\n const [pageDescription, setPageDescription] = useState('')\r\n const [pageBreadcrumbs, setPageBreadcrumbs] = useState>([])\r\n const value: PageDataContextModel = {\r\n pageTitle,\r\n setPageTitle,\r\n pageDescription,\r\n setPageDescription,\r\n pageBreadcrumbs,\r\n setPageBreadcrumbs,\r\n }\r\n return {children}\r\n}\r\n\r\nfunction usePageData() {\r\n return useContext(PageDataContext)\r\n}\r\n\r\ntype Props = {\r\n description?: string\r\n breadcrumbs?: Array\r\n}\r\n\r\nconst PageTitle: FC = ({children, description, breadcrumbs}) => {\r\n const {setPageTitle, setPageDescription, setPageBreadcrumbs} = usePageData()\r\n useEffect(() => {\r\n if (children) {\r\n setPageTitle(children.toString())\r\n }\r\n return () => {\r\n setPageTitle('')\r\n }\r\n }, [children])\r\n\r\n useEffect(() => {\r\n if (description) {\r\n setPageDescription(description)\r\n }\r\n return () => {\r\n setPageDescription('')\r\n }\r\n }, [description])\r\n\r\n useEffect(() => {\r\n if (breadcrumbs) {\r\n setPageBreadcrumbs(breadcrumbs)\r\n }\r\n return () => {\r\n setPageBreadcrumbs([])\r\n }\r\n }, [breadcrumbs])\r\n\r\n return <>\r\n}\r\n\r\nconst PageDescription: React.FC = ({children}) => {\r\n const {setPageDescription} = usePageData()\r\n useEffect(() => {\r\n if (children) {\r\n \r\n setPageDescription(children.toString())\r\n }\r\n return () => {\r\n setPageDescription('')\r\n }\r\n }, [children])\r\n return <>\r\n}\r\n\r\nexport {PageDescription, PageTitle, PageDataProvider, usePageData}\r\n"],"sourceRoot":""}