{"version":3,"sources":["helper/GetAncestorElementHelper.js","temp/config.js","assets/img/rp-bg.png","assets/img/logoPlaceholder.png","assets/icons/svg/pdf.svg","assets/icons/svg/file.svg","assets/icons/png/bitmap@3x.png","components/Base/CustomFilter/FilterDropdown/index.js","components/Base/CustomFilter/FilterRadioButton/index.js","components/Base/Button/index.js","components/Base/CharacterCount/index.js","components/Base/FormInput/index.js","components/Base/Popup/PopupAction/index.js","components/Base/Popup/index.js","components/Base/FormModal/index.js","components/Base/CustomIframe/index.js","components/Base/Popup/PopupPreview/index.js","api/BaseURL.js","api/WorkflowAPI.js","helper/ScrollHelper.js","helper/DateHelper.js","helper/AddClassLazyloadHelper.js","components/Base/Label/index.js","components/Base/FormCheckbox/index.js","components/Base/ListItem/index.js","components/Base/SuccessMessage/index.js","components/Base/CustomFilter/index.js","components/Base/NoResultMessage/index.js","helper/HideBackToTopHelper.js","components/Feature/RetailerPortal/Approvals/index.js","components/Base/RadioButton/index.js","components/Base/PageHeader/index.js","components/Modules/Articles/index.js","api/ArticlesAPI.js","components/Base/FormImageGallery/index.js","components/Base/FormInputMultiple/index.js","components/Base/FormDate/index.js","components/Base/FormListbox/index.js","components/Base/FormListCheckbox/index.js","components/Base/Checkbox/index.js","components/Base/FormErrorMessage/index.js","components/Base/FormImageUpload/index.js","helper/ImageUploadHelper.js","helper/ArticleHelper.js","api/PromotionAPI.js","components/Modules/Forms/FormArticles/index.js","helper/RemoveActiveState.js","components/Feature/RetailerPortal/ArticleListing/index.js","components/Base/ImageUpload/index.js","helper/ImageConversionHelper.js","components/Base/FormFile/index.js","components/Base/DropDown/index.js","components/Base/Modal/index.js","helper/UrlHelper.js","components/Feature/RetailerPortal/Articles/index.js","components/Feature/RetailerPortal/Authorisations/index.js","api/UsersAPI.js","api/DashboardAPI.js","api/StoreAPI.js","components/Base/FormSelect/index.js","api/StorefrontAPI.js","helper/StorefrontHelper.js","components/Modules/Forms/FormStoreFront/index.js","components/Modules/StoreInfo/index.js","components/Feature/RetailerPortal/Stores/index.js","components/Modules/Events/index.js","components/Modules/Offers/index.js","helper/PromotionHelper.js","components/Modules/Forms/FormPromotions/index.js","components/Feature/RetailerPortal/PromotionListing/index.js","api/NotificationAPI.js","components/Modules/MemoItem/index.js","components/Feature/RetailerPortal/Notifications/index.js","components/Feature/RetailerPortal/Dashboard/index.js","api/LoginAPI.js","components/Feature/RetailerPortal/Footer/index.js","components/Feature/RetailerPortal/Hub/index.js","components/Feature/RetailerPortal/LeftNavigation/NavButtons/index.js","components/Feature/RetailerPortal/LeftNavigation/NavLinks/index.js","components/Feature/RetailerPortal/LeftNavigation/index.js","components/Base/Input/index.js","components/Base/ForgotPassword/index.js","components/Feature/RetailerPortal/Login/index.js","components/Base/AvatarUpload/index.js","components/Modules/Profile/EditProfile/index.js","components/Modules/Profile/UpdatePassword/index.js","components/Base/Card/index.js","components/Feature/RetailerPortal/Profile/index.js","components/Feature/RetailerPortal/Promotions/index.js","components/Base/FormDropDown/index.js","components/Feature/RetailerPortal/Storefront/index.js","components/Feature/RetailerPortal/TopNavigation/NavUser/index.js","components/Feature/RetailerPortal/TopNavigation/NavLogo/index.js","components/Feature/RetailerPortal/TopNavigation/NavRetailer/index.js","api/NavigationAPI.js","components/Feature/RetailerPortal/TopNavigation/NavNotification/index.js","components/Feature/RetailerPortal/TopNavigation/index.js","components/Feature/RetailerPortal/UpdatePassword/index.js","api/RecoverPasswordAPI.js","components/Feature/RetailerPortal/User/index.js","helper/UserHelper.js","components/Feature/RetailerPortal/Users/index.js","components/Foundation/Layout/Main/index.js","temp/componentFactory.js","dataFetcher.js","components/Base/BackToTop/index.js","Layout.js","NotFound.js","RouteHandler.js","AppRoot.js","index.js","lib/GraphQLClientFactory.js","assets/icons/png/author.png"],"names":["getAncestorElement","element","ancestorClass","parentElement","classList","contains","module","exports","FilterDropdown","Component","constructor","props","super","handleToggle","e","target","focus","this","setState","show","state","handleBlur","setTimeout","selected","defaultSelected","render","theme","error","title","icon","options","placeholder","noOptionsMessage","addMargin","React","createElement","Fragment","className","style","marginBottom","type","value","onClick","onBlur","length","map","item","index","label","key","handleSelectionChange","FilterRadioButton","handleRadioClick","id","onChange","selectedId","radioGroupName","disabled","plain","name","Button","color","size","tooltip","children","CharacterCount","remaining","FormInput","required","currency","onInputChange","maxLength","width","margin","PopupAction","description","iconBgColor","secondaryBtn","secondaryBtnOnClick","secondaryBtnColor","disabledSecondaryBtn","primaryBtn","primaryBtnOnClick","primaryBtnColor","disabledPrimaryBtn","rejectMessage","withRejectMessage","onRejectMessageChange","backgroundColor","Text","field","RichText","Popup","FormModal","handleScroll","event","headerContainer","querySelector","headerSpace","getBoundingClientRect","top","add","showBackToTop","remove","handleOnClick","parentElem","scrollIntoView","closeOnClick","closeClassName","showModal","showSaveHint","saveHint","saveBtn","saveBtnClassName","saveBtnOnClick","disabledSaveBtn","secondaryBtnClassName","primaryBtnClassName","redBtn","redBtnOnClick","disabledRedBtn","isPreview","isDynamicHeader","onScroll","CustomIframe","isIframeReady","src","frameBorder","allowFullScreen","onLoad","PopupPreview","previewGroupTitle","previewGroupUrl","showPreviewGroupModal","previewTitle","previewLogo","previewList","previewListChildName","btnLabel","btnOnClick","showPreviewModal","previewFormLabel","alt","logoPlaceholder","data-src","Centre","previewListArr","ItemId","Store","PreviewUrl","axios","create","baseURL","getWorkboxItems","params","BaseURL","get","disableBodyScroll","$","document","height","window","scrollTop","addClass","css","enableBodyScroll","parseInt","removeClass","scrollToTop","isNotDesktop","ua","navigator","userAgent","toLowerCase","bodyWrapper","outerWidth","test","scroll","left","behavior","getDate","date","format","moment","getDuration","startDate","endDate","duration","startTime","startDay","startMonth","startYear","endTime","endDay","endMonth","endYear","durationYear","durationMonth","durationDay","getStartDate","addClassLazyload","parentClass","parentWrapper","getElementsByClassName","imageList","querySelectorAll","forEach","el","Label","FormCheckbox","checked","onCheckboxChange","isChecked","tile","ListItem","arguments","handleOnClickCheckbox","checkboxElement","click","convertString","string","replace","handleOnClickListItem","listItemOnClick","checkboxValue","checkboxOnChange","noActionBtn","currentActiveItem","elemListItem","logoBgColor","logoSrc","showNotif","notification","storeDescription","status","previewBtn","previewBtnOnClick","btnOne","btnOneOnClick","btnTwo","btnTwoOnClick","isSelected","descriptionVal","SuccessMessage","handleMouseOver","handleShowSuccess","handleMouseOut","timer","onHover","timerOnHide","clearTimeout","isShown","componentDidMount","linkLabel","showPreviewLink","hideIcon","onMouseOver","onMouseOut","CustomFilter","handleCloseFilter","bodyContainer","backToTop","toggle","right","onCloseFilter","updateBodyClass","showFilter","NoResultMessage","hideBackToTop","isHidden","backToTopWrapper","FeatureRetailerPortalApprovals","getData","async","showLoader","response","data","WorkboxItems","TotalPageNumber","TotalResults","workboxItems","filteredItems","totalPageNumber","totalResults","itemTotal","showPagination","handleChecked","getFilters","handleItems","console","statusText","getOptions","items","all","indexOf","includes","push","sort","a","b","typeItems","centreItems","storeItems","typeOptions","centreOptions","storeOptions","Type","handleResize","paginationRange","isDesktop","handleFilter","filter","activePageNum","uncheckAll","filterCentre","filterStore","filterType","unfiltered","currentPage","until","from","list","slice","listLength","itemCount","Math","ceil","checks","i","selectedItem","selectedItems","handleSelected","splice","isMatch","renderRejectModal","message","showRejectModal","rejectItems","renderApproveModal","modalMessage","showApproveModal","formData","FormData","append","method","url","IsSuccess","Message","resetState","approveItems","modalIcon","previewUrl","previewItemId","pageNumber","handlePaginationClick","renderPagination","ReactPaginate","previousLabel","nextLabel","breakLabel","breakClassName","pageCount","marginPagesDisplayed","pageRangeDisplayed","forcePage","onPageChange","containerClassName","subContainerClassName","activeClassName","renderPreviewModal","previewUrlList","renderItems","Name","StartDate","EndDate","PreviewUrlList","Thumbnail","globalStoreList","storeList","storeItem","Storefronts","handleBulkPreviewForm","logo","showBulkPreview","retailerLogo","handleHeaderIconClick","clearItem","leftNavWrapper","topNavWrapper","renderBulkPreview","isDocumentReady","addEventListener","hasSelection","Select","option","defaultValue","colors","primary","primary25","isSearchable","maxMenuHeight","menuPlacement","RadioButton","radioList","Id","Description","Selected","fields","PageHeader","primaryBtnLabel","primaryBtnIcon","secondaryBtnLabel","Articles","isOnLoad","getArticles","dataUpdate","totalResultCount","Object","keys","dataTotalCount","LivePromotions","ScheduledPromotions","AwaitingApprovalPromotions","DraftPromotions","RejectedPromotions","dashboardArticles","renderItemsLayout","renderDashboardListItem","livePomotionLayout","ScheduledPromotionsLayout","AwaitingApprovalPromotionsLayout","DraftPromotionsLayout","RejectedPromotionsLayout","renderListItem","promotions","noSelectedStore","CentreName","Title","Status","PreviewURL","imageSrc","showDeleteModal","centreName","handleOnClickList","ShortDescription","renderListCount","totalListCount","filterStatus","articleCount","itemId","formModalLabel","activeElement","blur","detail","showFormModal","isNewArticle","isDashboard","centre","componentDidUpdate","prevProps","toString","hideFilter","FormImageGallery","handleAttachments","imageFiles","newImageFiles","newItem","handleAddUpload","addNewValue","Date","now","handleOnDragEnd","result","destination","Array","reorderedItem","source","renderGalleryList","imageGalleryList","DragDropContext","onDragEnd","Droppable","droppableId","provided","assign","droppableProps","ref","innerRef","imgSrc","URL","createObjectURL","Draggable","draggableId","imageItem","isDragging","draggableProps","dragHandleProps","removeFile","htmlFor","accept","updateFile","files","renderGuidelines","initialValue","imageFile","itemIndex","listItem","FormInputMultiple","FormDate","properties","DatePicker","FormListbox","hint","handleListbox","handleSelect","multiple","optionLayout","FormListCheckbox","Checkbox","FormErrorMessage","containsLoginError","href","FormImageUpload","handleFileUpload","file","setFile","preview","alert","renderGuideLines","guidelines","guidelinesOne","guidelinesTwo","guidelinesThree","errorMessage","hasImageUpload","removeImage","imageMimeTypes","validateImageSize","max","undefined","validateImageType","allowedTypes","isEmpty","isObject","validate","removeValidate","articleName","rules","subheading","publishDate","body","heroImage","selectedStores","selectedCategories","thumbnail","imageGallery","socialFeedImage","socialStoryImage","trim","invalidImages","elem","formDataFields","selectedStore","categoryTag","hidePublishDate","imageGalleryChecker","selectedSpecialPromotion","itemIds","setArticleData","Subheading","Body","PublishDate","HidePublishDate","LinkedSpecialHolidays","HolidayId","LinkCategories","CategoryId","ImageGallery","Src","buildFormData","postData","toISOString","promotion","category","storeId","getCentreStores","getCategoriesAndHolidays","RichTextEditor","Loadable","loader","loading","FormArticles","articleData","Article","mode","getArticleDataReady","showImageGallery","categoryListData","Categories","holidayListData","GlobalSpecialHoliday","categoryList","holidayList","CategoryName","HolidayName","categories","holidays","getCentreStoreList","centreStoreList","retailerId","isCheckbox","isSelect","handleStoreListCheckbox","selectAllStores","allStores","StoreList","store","StoreItemId","handleFormUpdate","validateForm","formError","entries","showErrorMessage","formErrorMessage","triggerBackToTop","isSuccess","saveForm","then","articleIdList","timezoneId","getTimezoneOffset","timeZoneId","disableBtn","handleFormData","config","headers","articleList","ArticleList","articlesItem","extractItemIds","previewBulkLogo","setGoogleAnalytics","RetailerLogo","articlePreviewUrl","articlePreviewTitle","setArticleIdList","article","submitForm","log","TagManager","dataLayer","articleCentre","articleRetailer","dataLayerName","centreList","center","handlePreviewForm","renderModal","submitBtn","buildCentreStoreList","CentreIcon","StoreName","imageGalleryHolder","placeholderText","showTimeSelect","timeCaption","timeFormat","timeIntervals","dateFormat","promotionType","heroImageFileType","thumbnailFileType","heroImageFileSize","thumbnailFileSize","imageGalleryFileType","imageGalleryFileSize","removeActiveState","activeItem","FeatureRetailerPortalArticleListing","isMobile","updateCentreOption","CentreList","centreListOption","previewModalData","formModalData","renderFormModal","content","onClickSave","onClickPreview","onClickSubmit","isDashboardUpdate","updateDashboard","updateArticle","onClickUpdate","isSubmit","filterAllStatus","getElementById","filterAllCentreRadio","filterAllCentreDropdown","selectedIndex","successMessage","showSuccessMessage","articlePreviewUrlHolder","articlePreviewTitleHolder","renderDelete","deleteModalData","disableCancelBtn","disableDeleteBtn","deleteArticle","dataCount","statusVar","newData","handleOnClickFilter","setCentreListDropdown","tempCentreList","centreOption","renderCustomFilter","statusOption","filterByCentre","renderContent","HideCreateButton","noStore","articles","isWindowReady","ImageUpload","showCrop","croppedImageUrl","handleCrop","crop","unit","x","y","aspect","onImageLoaded","image","imageRef","onCropComplete","makeClientCrop","convertCroptoFile","onCropChange","canvasImage","getCroppedImg","Promise","resolve","reject","toBlob","blob","revokeObjectURL","fileUrl","lastDot","fileName","fileExtension","split","pop","lastIndexOf","substring","newCropFile","base64String","filename","arr","mime","match","bstr","atob","n","u8arr","Uint8Array","charCodeAt","File","base64StringtoFile","toDataURL","canvas","scaleX","scaleY","naturalWidth","naturalHeight","getContext","drawImage","labelOne","labelTwo","labelThree","ReactCrop","ruleOfThirds","onComplete","keepSelection","FormFile","setList","lists","isError","values","renderList","inputFile","createRef","newList","prototype","apply","DropDown","Modal","modalType","getUrlParameter","results","RegExp","exec","location","search","decodeURIComponent","FeatureRetailerPortalArticles","RetailerList","RedirectUrl","retailerList","setRetailerList","setHolidayList","setCategoryList","retailers","redirectUrl","temp","RetailerName","RetailerId","cta","modalContent","buildPreviewUrls","centrePreview","win","open","param","stores","componentReady","specialHolidayListbox","selectedRetailer","selectedRetailerName","bitmap","FeatureRetailerPortalAuthorisations","getWaitingApprovalUsers","Users","userItems","addAll","Centres","splitCentreArray","centreVal","cIndex","hasFilteredCentre","itemCentre","jsonData","usernames","UserName","FullName","ProfilePicture","Retailers","Email","getStoreInfo","FormSelect","fullWidth","hidden","getStorefrontData","entities","Entities","encode","FormStoreFront","decodeHTML","html","txt","innerHTML","getStoreData","$this","StorefrontDescription","ContactNumber","MenuUrl","BestParking","AcceptsAfterPay","AcceptsGiftCards","IsKidsFriendly","IsVegetarian","RetailerDescription","Website","Instagram","Facebook","LogoImage","HeroImage","StorefrontHeroImage","ImageGalleryChecker","StoreID","IsTemporarilyClosed","IsOpeningSoon","OpeningHoursStatus","Source","MondayOpeningHours","MondayClosingHours","MondaySecondaryOpeningHours","MondaySecondaryClosingHours","MondayIsClosed","TuesdayOpeningHours","TuesdayClosingHours","TuesdaySecondaryOpeningHours","TuesdaySecondaryClosingHours","TuesdayIsClosed","WednesdayOpeningHours","WednesdayClosingHours","WednesdaySecondaryOpeningHours","WednesdaySecondaryClosingHours","WednesdayIsClosed","ThursdayOpeningHours","ThursdayClosingHours","ThursdaySecondaryOpeningHours","ThursdaySecondaryClosingHours","ThursdayIsClosed","FridayOpeningHours","FridayClosingHours","FridaySecondaryOpeningHours","FridaySecondaryClosingHours","FridayIsClosed","SaturdayOpeningHours","SaturdayClosingHours","SaturdaySecondaryOpeningHours","SaturdaySecondaryClosingHours","SaturdayIsClosed","SundayOpeningHours","SundayClosingHours","SundaySecondaryOpeningHours","SundaySecondaryClosingHours","SundayIsClosed","RetailerType","formType","isStoreDataReady","getCarParkData","carparkList","getCategoryData","updateCategoryList","categoryResponse","handleSaveForm","handleSubmitForm","storeInfoCentre","storeInfoRetailer","storeInfoName","renderStoreHours","resetHours","day","newInfo","infoList","info","primaryOpeningHour","primaryClosingHour","secondaryOpeningHour","secondaryClosingHour","closed","TimePicker","use12Hours","allowClear","time","timeString","onTimeChange","suffixIcon","isClosed","dateTime","storeCheckboxList","call","setDropdownValue","optionValue","dropdownValue","StoreOpeningHours","sourceList","openingHoursList","iconList","checkIfBlank","FeatureRetailerPortalStoreInfo","formModalBody","isRetailer","otherFormModalProps","renderDashboardItems","dashboardStores","renderItemLayout","StoreInfoTitle","previewModalTitle","previewModalUrl","formModalProps","storeInfoTitle","StoreInfoList","GlobalList","IsCentreMarketing","RetailerSectionTitle","RetailerSectionSubtext","StoresSectionTitle","StoresSectionSubtext","headerData","RetailerID","RetailerDetails","OpeningToday","OpeningHours","descriptionValue","renderStoreCount","hasPagination","storeCount","dataStoreLength","enablePreview","modalTitle","storeName","Header","FeatureRetailerPortalStores","storeInfo","selectedFilter","StoreInfo","getStoreInfoUpdate","isArray","history","pushState","addParameter","val","modalData","Events","getEvents","dashboardPromotions","promotionCount","isNewPromotion","Offers","getOffers","EmbargoedPromotions","livePromotionsLayout","EmbargoedPromotionsLayout","OfferHighlight","isBlob","Blob","promotionName","summary","embargoStartDate","embargoEndDate","dateToValidate","getTime","dateToCompare","displayStartDate","offerHighlight","displayEndDate","schedule","capacity","price","termsAndConditionsCopy","termsAndConditionsLink","retailerHandles","retailerHashtags","consentToSharing","setPromotionData","Duration","Capacity","Location","CategoryTag","Summary","DisplayStartDate","DisplayEndDate","EmbargoStartDate","EmbargoEndDate","Schedule","Price","RetailerHandles","RetailerHashtags","ConsentToSharing","FormPromotions","promotionData","Promotion","getPromotionDataReady","showScheduleDate","showTermsCondition","handleInputCheckbox","promotionIdList","promotionList","PromotionList","promotionsItem","Promotions","promotionPreviewUrl","promotionPreviewTitle","setPromotionIdList","promotionCentre","promotionRetailer","showModalWrapper","displayStartDateHolder","displayEndDateHolder","termsAndConditionsLinkHolder","termsAndConditionsCopyHolder","dashboardType","charAt","toUpperCase","socialFeedFileType","socialFeedFileSize","socialStoryFileType","socialStoryFileSize","FeatureRetailerPortalPromotionListing","getTab","updatePromotion","promotionPreviewUrlHolder","promotionPreviewTitleHolder","deletePromotion","offer","contentLayout","getNotifications","MemoItem","renderAttachments","attachments","Url","Size","getFileType","pdf","acknowledgeMemo","disabledCb","acknowledged","renderAcknowledgement","hideAcknowledgement","renderMiniModal","Acknowledged","MemoImage","Content","Attachments","MemoType","FeatureRetailerPortalNotifications","Notifications","HideAcknowledgeButton","notifications","hideAcknowledgeButton","getContent","Image","MemoViewed","memoContent","showContentLoader","setMemoStatus","findIndex","find","handleView","isViewed","dateAndCentre","correspondenceDateAndCentre","correspondenceTitle","renderViewModal","showViewModal","acknowledge","isFirefox","notificationsList","FeatureRetailerPortalDashboard","containerWrapper","columnWidth","clientWidth","getCorrespondenceData","correspondenceList","getStoreInfoData","isUpdate","showStoreInfoLoader","storeInfoList","getEventsData","showEventsLoader","eventsList","getOffersData","showOffersLoader","offersList","getArticlesData","showArticlesLoader","articlesList","dashboardPanelLayout","component","headerName","showLink","link","noResultText","panelLayout","Link","querystring","text","renderCorrespondence","correspondenceLayout","renderStoreInfo","storeInfoLayout","Stores","renderEvents","hideCreateButton","eventsLayout","PromotionListing","renderOffers","offersLayout","renderArticles","articlesLayout","ArticleListing","CorrespondenceListingLink","StoresListingLink","EventsListingLink","OffersListingLink","ArticlesListingLink","XMasonry","targetBlockWidth","XBlock","isDashboardReady","UserPhoto","UserRole","DefaultUserLogo","logout","post","FeatureRetailerPortalFooter","FooterTitle","FooterLinks","StatusCode","pathname","logoutUser","LinkTarget","FeatureRetailerPortalHub","Heading","Links","Navigation","NavButtons","getNewApprovals","newApprovals","tab","NavLinks","HideUserManagementLink","HideContentApprovalLink","HideAuthorisationsLink","Nav","iconName","NavFooter","links","linkTarget","FeatureRetailerPortalLeftNavigation","breakpoint","closeNav","backButton","sessionStorage","setItem","Input","onInputKeyDown","responseText","autoComplete","blank","autoFocus","onKeyDown","ForgotPassword","bg","FeatureRetailerPortalLogin","loginWrapper","innerHeight","clearSessionStorageSetPassword","getItem","removeItem","checkBrowser","vendor","browser","login","forgotPassword","sendForgotPassword","form","current","reportValidity","passwordSent","onEnterKeyPress","which","keyCode","forgotPasswordMessage","BackgroundImage","onSubmit","preventDefault","username","password","SiteLogo","SiteLogoClassName","LoginPageBlurb","FooterBlurb","ForgotPasswordMessage","mainLink","blurb","footerBlurb","display","AvatarUpload","EditProfile","EmailAddress","Address","Permissions","profilePicture","fullName","contactNumber","emailAddress","address","permissions","saveData","removeProfilePicture","formSubmit","antiForgeryToken","showMiniModal","refresh","UpdatePassword","sendChangePassword","newPass","confNewPass","Card","textContent","btnText","btnDisabled","FeatureRetailerPortalProfile","renderChangePasswordModal","showChangePasswordModal","renderEditProfileModal","willRefreshPage","showEditProfileModal","reload","renderDetails","FeatureRetailerPortalPromotions","setStoreList","FormDropDown","FeatureRetailerPortalStorefront","OnlineBookingUrl","setCarparkList","CarParkName","CarParkId","selectedStoreName","selectedCarpark","selectedIcon","CarParkList","filterResult","selectedStoreId","Storage","parkList","selectedBestParking","selectedSourceName","disable","NavInfo","handleClick","removeEventListener","node","componentWillUnmount","UserPicture","optionSelected","NavLogo","LogoLink","NavRetailer","handleDropdown","retailersList","removeShowAll","sum","showAll","initialList","offsetHeight","maxHeight","nav","getRetailerList","retailer","setGoogleTagmanager","retailerName","referrer","loginRetailer","loginCentre","handleSwitchRetailer","prevRetailer","newRetailer","newNotif","isSingleRetailer","hasOptions","isBlur","NavNotification","getNewNotification","FeatureNavigationTopNavigation","editProfilePage","changePassword","ShowChangePasswordPrompt","NavUser","FeatureRetailerPortalUpdatePassword","handleServerError","ValidationMessage","errorStatus","decodeUsername","user","URLSearchParams","decodeToken","tokenVal","IsValidUrlToken","token","validateLength","validatePassword","isValidLength","matchesConfPassword","confirmPassword","validationMessage","RecoverPassword","formSubmitted","UpdatePasswordPageBlurb","marginTop","FeatureRetailerPortalUser","Username","Permission","User","centresList","centres","CentreId","email","permission","PermissionValue","handlePermission","finalOptions","PermissionName","isRetailersDisabled","isCentresDisabled","isRetailerRequired","isCentreRequired","retailerRule","centreRule","formatOptionLabelRetailer","_ref","_ref2","inputValue","highlighted","dangerouslySetInnerHTML","__html","DOMPurify","sanitize","formatOptionLabelCentre","_ref3","_ref4","PermissionLevels","isMulti","components","NoOptionsMessage","isClearable","backspaceRemovesValue","formatOptionLabel","isDisabled","FeatureRetailerPortalUsers","getUsers","users","setFilter","levels","userLevel","userList","FilterId","FilterDescription","userName","deleteUser","page","whiteSpace","handleUser","NoUsersText","avatar","UserLevel","FoundationLayoutMain","Placeholder","rendering","Map","componentFactory","componentName","set","BaseCustomFilterFilterDropdown","BaseCustomFilterFilterRadioButton","BasePopupPopupAction","BasePopupPopupPreview","FeatureRetailerPortalTopNavigation","ModulesFormsFormArticles","ModulesFormsFormPromotions","ModulesFormsFormStoreFront","ModulesProfileEditProfile","ModulesProfileUpdatePassword","dataFetcher","withCredentials","BackToTop","handleOnScroll","bodyWrapperContainer","bodyWrapperMargin","bodyContainerMargin","elemPos","backToTopPos","getComputedStyle","getPropertyValue","Layout","initialize","gtmId","objectFitImages","route","Helmet","PageTitle","VisitorIdentification","NotFound","context","site","language","RouteHandler","ssrInitialState","ssrState","notFound","routeData","defaultLanguage","sitecore","componentIsMounted","languageIsChanging","ssrRenderComplete","setSsrRenderComplete","updateRouteData","sitecoreRoutePath","sitecoreRoute","startsWith","fetchOptions","layoutServiceConfig","host","sitecoreApiHost","querystringParams","sc_lang","sc_apikey","sitecoreApiKey","fetcher","dataApi","fetchRouteData","catch","getRouteData","lang","contextFactory","setSitecoreContext","previousProps","existingRoute","newRoute","isExperienceEditorActive","routePatterns","AppRoot","SitecoreContextFactory","path","Router","graphQLClient","routeRenderFunction","ApolloProvider","client","SitecoreContext","Switch","routePattern","Route","ssrRawJson","renderFunction","ReactDOM","__JSS_STATE__","JSON","parse","hydrate","initialGraphQLState","APOLLO_STATE","endpoint","ssr","initialCacheState","createPersistedQueryLink","concat","BatchHttpLink","uri","credentials","cache","InMemoryCache","fragmentMatcher","IntrospectionFragmentMatcher","introspectionQueryResultData","ApolloClient","ssrMode","ssrForceFetchDelay","restore","GraphQLClientFactory","graphQLEndpoint","rootElement","BrowserRouter"],"mappings":"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,sBAAuB,MAC9C+lB,mBAAoBvtB,eAClBuH,EAASC,KACT,2BACA,MAEFgmB,OAAQxtB,eAAIuH,EAASC,KAAM,eAAgB,MAC3CimB,mBAAoBztB,eAClBuH,EAASC,KACT,6CACA,MAEFkmB,mBAAoB1tB,eAClBuH,EAASC,KACT,6CACA,MAEFmmB,4BAA6B3tB,eAC3BuH,EAASC,KACT,sDACA,MAEFomB,4BAA6B5tB,eAC3BuH,EAASC,KACT,sDACA,MAEFqmB,eAAgB7tB,eACduH,EAASC,KACT,yCACA,MAEFsmB,oBAAqB9tB,eACnBuH,EAASC,KACT,8CACA,MAEFumB,oBAAqB/tB,eACnBuH,EAASC,KACT,8CACA,MAEFwmB,6BAA8BhuB,eAC5BuH,EAASC,KACT,uDACA,MAEFymB,6BAA8BjuB,eAC5BuH,EAASC,KACT,uDACA,MAEF0mB,gBAAiBluB,eACfuH,EAASC,KACT,0CACA,MAEF2mB,sBAAuBnuB,eACrBuH,EAASC,KACT,gDACA,MAEF4mB,sBAAuBpuB,eACrBuH,EAASC,KACT,gDACA,MAEF6mB,+BAAgCruB,eAC9BuH,EAASC,KACT,yDACA,MAEF8mB,+BAAgCtuB,eAC9BuH,EAASC,KACT,yDACA,MAEF+mB,kBAAmBvuB,eACjBuH,EAASC,KACT,4CACA,MAEFgnB,qBAAsBxuB,eACpBuH,EAASC,KACT,+CACA,MAEFinB,qBAAsBzuB,eACpBuH,EAASC,KACT,+CACA,MAEFknB,8BAA+B1uB,eAC7BuH,EAASC,KACT,wDACA,MAEFmnB,8BAA+B3uB,eAC7BuH,EAASC,KACT,wDACA,MAEFonB,iBAAkB5uB,eAChBuH,EAASC,KACT,2CACA,MAEFqnB,mBAAoB7uB,eAClBuH,EAASC,KACT,6CACA,MAEFsnB,mBAAoB9uB,eAClBuH,EAASC,KACT,6CACA,MAEFunB,4BAA6B/uB,eAC3BuH,EAASC,KACT,sDACA,MAEFwnB,4BAA6BhvB,eAC3BuH,EAASC,KACT,sDACA,MAEFynB,eAAgBjvB,eACduH,EAASC,KACT,yCACA,MAEF0nB,qBAAsBlvB,eACpBuH,EAASC,KACT,+CACA,MAEF2nB,qBAAsBnvB,eACpBuH,EAASC,KACT,+CACA,MAEF4nB,8BAA+BpvB,eAC7BuH,EAASC,KACT,wDACA,MAEF6nB,8BAA+BrvB,eAC7BuH,EAASC,KACT,wDACA,MAEF8nB,iBAAkBtvB,eAChBuH,EAASC,KACT,2CACA,MAEF+nB,mBAAoBvvB,eAClBuH,EAASC,KACT,6CACA,MAEFgoB,mBAAoBxvB,eAClBuH,EAASC,KACT,6CACA,MAEFioB,4BAA6BzvB,eAC3BuH,EAASC,KACT,sDACA,MAEFkoB,4BAA6B1vB,eAC3BuH,EAASC,KACT,sDACA,MAEFmoB,eAAgB3vB,eACduH,EAASC,KACT,yCACA,MAEFkU,WACEA,GAAcA,EAAW1iB,OAAS,EAC9B0iB,EAAWziB,IAAKkK,GAAOA,EAAGiX,WAAWvhB,OACrC,IAER+2B,aAAc5vB,eACZuH,EAASC,KACT,qCACA,IAEFqoB,SACc,KAAZjV,EACI,GACA5a,eAAIuH,EAASC,KAAM,qCAAsC,IAC/DkY,mBACErF,GAAgBA,EAAarhB,OAAS,EAClCqhB,EAAaphB,IAAKkK,IACX,CACLpJ,KAAMoJ,EAAGqK,KAAK3U,MACdY,GAAI0J,EAAGqM,GAAG3W,MACVqF,IAAKiF,EAAGmX,IAAIzhB,SAGd,GACN2iB,oBACEnB,GAAgBA,EAAarhB,OAAS,GACxC82B,kBAAkB,KAGtB,MAAO54B,GACPmR,QAAQtQ,MAAM,6BACdV,KAAKC,SAAS,CACZw4B,kBAAkB,MAGtB,KAEFC,eAAiB1oB,UACf,IACE,IAAIE,QFveoBzH,EEueY,CAAE+S,UFrelC9S,EAAQC,IADgC,wBAClB,CAAEF,OAAQ,IAAKA,MEsejB,MAApByH,EAASzC,QAAkByC,EAASC,MACtCnQ,KAAKC,SAAS,CACZ04B,YAAahwB,eAAIuH,EAASC,KAAM,cAAe,MAGnD,MAAOtQ,GACPmR,QAAQtQ,MAAM,gCF9eU+H,OEmf1B,KAEFmwB,gBAAkB5oB,UAChB,IAME,IAAIE,QF9eDxH,EAAQC,IADiC,yBACnB,CAAEF,OAAQ,IAAKA,KEgfpCowB,EAAqB,GACzB,GAAwB,MAApB3oB,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,IAAI2oB,EAAmBnwB,eAAIuH,EAASC,KAAM,aAAc,IAEpD2oB,EAAiBn3B,OAAS,GAC5Bm3B,EAAiBjtB,QAASC,IACxB+sB,EAAmBtnB,KAAK,CACtB7O,KAAMoJ,EAAG4Y,aAAaljB,MACtBA,MAAOsK,EAAGiX,WAAWvhB,UAI3BxB,KAAKC,SAAS,CACZukB,aAAcqU,KAGlB,MAAOh5B,GACPmR,QAAQtQ,MAAM,qCFngBW+H,OEqgB3B,KAEF+d,eAAiB,KACf,MAAM,aAAE3gB,EAAY,WAAE0gB,GAAevmB,KAAKG,MAC1CH,KAAKN,MAAM8mB,eACT3gB,EACA0gB,EACAvmB,KAAK+4B,eACL/4B,KAAKg5B,iBACLh5B,KAAK+nB,oBAEP,KAEFtC,iBAAoBjkB,IAClBxB,KAAKC,SACH,CACEsmB,YAAY,EACZnS,SAAU,IACLpU,KAAKG,MAAMiU,YACX5S,IAGPxB,KAAKwmB,iBAEP,KAEFuS,eAAiB/oB,UACf,MAAM,SAAEoE,GAAapU,KAAKG,MAC1B,IAAIimB,GAAa,IAAIhK,MAAOiK,oBAE5B,IAAIlW,EAAO+S,GAAc,IAAK9O,EAAUkS,WAAYF,IAChDhX,EAAYtG,SAAS9D,cACvB,oCAEEoK,GACFA,EAAU3C,QAEZzM,KAAKC,SACH,CACE4F,cAAc,EACd0gB,YAAY,GAEdvmB,KAAKwmB,gBAGP,IACE,IAAItW,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,IAnBQ,yCAoBRrE,OACAsW,OAAQ,CAAEC,QAAS,CAAE,eAAgB,0BAGvC,GAAIxW,EAAU,CACZ,GAAIvH,eAAIuH,EAASC,KAAM,mBAAmB,GAUxC,OATAnQ,KAAKC,SACH,CACE4F,cAAc,EACd0gB,YAAY,EACZV,kBAAkB,GAEpB7lB,KAAKwmB,iBAGA,EACF,CACL,IAAIpG,EACF,mBACAzX,eAAIuH,EAASC,KAAM,gBAAiB,oBAYtC,OAVAnQ,KAAKC,SACH,CACE4F,cAAc,EACd0gB,YAAY,EACZT,iBAAkB1F,EAClByF,kBAAkB,GAEpB7lB,KAAKwmB,iBAGA,IAGX,MAAO3mB,GACPmR,QAAQtQ,MAAM,oBAAsBb,EAAEqQ,SAASe,YAC/C,IAAImP,EAAe,oBAAsBvgB,EAAEqQ,SAASe,WAYpD,OAXAjR,KAAKC,SACH,CACE4F,cAAc,EACd0gB,YAAY,EACZT,iBAAkB1F,EAClByF,kBAAkB,GAEpB7lB,KAAKwmB,iBAIA,IAET,KAEFwS,iBAAmBhpB,UACjB,MAAM,SAAEoE,GAAapU,KAAKG,MAC1B,IAAIimB,GAAa,IAAIhK,MAAOiK,oBAE5B,IAAIlW,EAAO+S,GAAc,IAAK9O,EAAUkS,WAAYF,IAEpD,IACE,IAAIlW,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,IANQ,2CAORrE,OACA1H,OAAQ,CACN8a,QAASnP,EAAS2hB,SAEpBtP,OAAQ,CAAEC,QAAS,CAAE,eAAgB,0BAGvC,GAAIxW,EAAU,CACZ,GAAIvH,eAAIuH,EAASC,KAAM,mBAAmB,GAaxC,OAZAnQ,KAAKC,SAAS,CACZ4lB,kBAAkB,IAEpB2B,KAAWC,UAAU,CACnBA,UAAW,CACT3iB,MAAO,mBACPm0B,gBAAiBj5B,KAAKN,MAAM+a,WAC5Bye,kBAAmB9kB,EAAS2d,aAC5BoH,cAAe/kB,EAAS+B,MAE1ByR,cAAe,eAEV,EACF,CACL5W,QAAQuW,IAAIrX,EAASC,MAErB,IAAIiQ,EACF,uBACAzX,eAAIuH,EAASC,KAAM,gBAAiB,oBAEtCnQ,KAAKC,SAAS,CACZ6lB,iBAAkB1F,EAClByF,kBAAkB,IAGpB,IAAIzW,EAAYtG,SAAS9D,cACvB,oCAKF,OAHIoK,GACFA,EAAU3C,SAEL,IAGX,MAAO5M,GACPmR,QAAQtQ,MAAM,sBAAwBb,EAAEqQ,SAASe,YACjD,IAAImP,EAAe,sBAAwBvgB,EAAEqQ,SAASe,WAOtD,OALAjR,KAAKC,SAAS,CACZ6lB,iBAAkB1F,EAClByF,kBAAkB,KAGb,IAET,KAEFkC,kBAAoB,KAClB/nB,KAAKC,SAAS,CACZ2F,WAAW,KAEb,KAEFwR,kBAAoB,KAClB,MAAM,YAAE7P,GAAgBvH,KAAKN,OAAS,IAChC,UAAEi2B,GAAc31B,KAAKG,MAAMiU,SACjC,OACEnT,IAAAC,cAAA,OAAKE,UAAU,iBACZmG,GAAeA,EAAY5F,OAAS,GACnCV,IAAAC,cAAC+F,EAAY,CACXI,aAAc,UACdC,YAAaquB,EACbpuB,YAAaA,EACbC,qBAAqB,cACrBC,SAAU,SACVC,WAAYA,KACV,IAAIugB,EAAYnf,SAAS9D,cAAc,qBACnCijB,GACFA,EAAUxb,SAGd9E,iBAAkBA,IAAM3H,KAAKC,SAAS,CAAE2F,WAAW,QAgE7D,KAEAwzB,iBAAoBhlB,GAYhBnT,IAAAC,cAAA,OAAKE,UAAU,wBACbH,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,OAAKE,UAAU,kBAAiB,yBAChCH,IAAAC,cAAA,OACEE,UAAU,uBACVK,QAASA,IAAMzB,KAAKq5B,cAEnB,gBAGLp4B,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAAA,OAAKE,UAAU,yBACbH,IAAAC,cAAA,OAAKE,UAAU,aAAY,OAC3BH,IAAAC,cAAA,OAAKE,UAAU,aAAY,iBAC3BH,IAAAC,cAAA,OAAKE,UAAU,aAAY,mBAC3BH,IAAAC,cAAA,OAAKE,UAAU,aAAY,WA1BtB,CACX,SACA,SACA,UACA,YACA,WACA,SACA,YAqBUQ,IAAI,CAAC03B,EAAKx3B,KACd,IAAIy3B,EAAU,GACd,MAAMC,EAAW,CACf,eACA,eACA,wBACA,wBACA,YAEFA,EAAS53B,IAAK63B,IACZF,EAAQhoB,KAAK6C,EAASklB,EAAMG,MAE9B,MAAMC,EAAqBH,EAAQ,GAC7BI,EAAqBJ,EAAQ,GAC7BK,EAAuBL,EAAQ,GAC/BM,EAAuBN,EAAQ,GAC/BO,EAASP,EAAQ,GACvB,OACEt4B,IAAAC,cAAA,OAAKE,UAAU,MAAMY,IAAK,oBAAoBF,GAC5Cb,IAAAC,cAAA,OAAKE,UAAU,+BAA+Bk4B,GAC9Cr4B,IAAAC,cAAA,SAAOE,UAAU,oDAAoDG,KAAK,WAAWa,GAAIk3B,EAAMx3B,EAAOY,KAAM42B,EAAMx3B,EAAON,MAAO83B,IAChIr4B,IAAAC,cAAA,SAAOE,UAAU,iCAAiC6c,QAASqb,EAAMx3B,GAC/Db,IAAAC,cAAA,YAAOo4B,GACPr4B,IAAAC,cAAA,KAAGE,UAAU,kCAEfH,IAAAC,cAAA,OAAKE,UAAU,mCAAmC,iBAClDH,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAAC64B,KAAU,CACTC,YAAU,EACV3vB,OAAO,QACPxH,KAAK,QACLo3B,YAAY,EACZz4B,MACEk4B,EAAqBpvB,IAAOovB,GAAsB,KAEpDr3B,SAAUA,CAAC63B,EAAMC,IACfn6B,KAAKo6B,aAAaF,EAAMC,EAAYb,EAAKE,EAAS,IAEpDa,WAAYp5B,IAAAC,cAAA,KAAGE,UAAU,iCACzBN,YAAY,UACZ0B,SAAUs3B,IAEZ74B,IAAAC,cAAC64B,KAAU,CACTC,YAAU,EACV3vB,OAAO,QACPxH,KAAK,QACLo3B,YAAY,EACZz4B,MACEm4B,EAAqBrvB,IAAOqvB,GAAsB,KAEpDt3B,SAAUA,CAAC63B,EAAMC,IACfn6B,KAAKo6B,aAAaF,EAAMC,EAAYb,EAAKE,EAAS,IAEpDa,WAAYp5B,IAAAC,cAAA,KAAGE,UAAU,iCACzBN,YAAY,UACZ0B,SAAUs3B,KAGd74B,IAAAC,cAAA,OAAKE,UAAU,gDAAgD,mBAC/DH,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAAC64B,KAAU,CACTC,YAAU,EACV3vB,OAAO,QACPxH,KAAK,QACLo3B,YAAY,EACZz4B,MACEo4B,EAAuBtvB,IAAOsvB,GAAwB,KAExDv3B,SAAUA,CAAC63B,EAAMC,IACfn6B,KAAKo6B,aAAaF,EAAMC,EAAYb,EAAKE,EAAS,IAEpDa,WAAYp5B,IAAAC,cAAA,KAAGE,UAAU,iCACzBN,YAAY,UACZ0B,SAAUs3B,IAEZ74B,IAAAC,cAAC64B,KAAU,CACTC,YAAU,EACV3vB,OAAO,QACPxH,KAAK,QACLo3B,YAAY,EACZz4B,MACEq4B,EAAuBvvB,IAAOuvB,GAAwB,KAExDx3B,SAAUA,CAAC63B,EAAMC,IACfn6B,KAAKo6B,aAAaF,EAAMC,EAAYb,EAAKE,EAAS,IAEpDa,WAAYp5B,IAAAC,cAAA,KAAGE,UAAU,iCACzBN,YAAY,UACZ0B,SAAUs3B,KAGd74B,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAAC8K,EAAY,CACXC,QAAS6tB,EACT5tB,iBAAkBA,CAAC1K,EAAO84B,KACxBt6B,KAAKylB,iBAAiB,CACpB,CAAC6T,EAAME,EAAS,IAAKc,KAGzBl5B,UAAU,6BACVW,MAAO,eAMjBd,IAAAC,cAAA,OAAKE,UAAU,OACbH,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAAA,OAAKE,UAAU,QACbH,IAAAC,cAAA,KAAGE,UAAU,mBACbH,IAAAC,cAAA,YAEI,gHAShB,KAEFk5B,aAAe,CAACF,EAAMC,EAAYb,EAAKG,KACrC,IAAIc,EACAJ,IACFI,EACEjwB,MAASD,OAAO,aAChBC,IAAO6vB,EAAY,CAAC,WACjB9vB,OAAO,SACPuC,QAAQ,IAAK,IAChB,MAEJ5M,KAAKylB,iBAAiB,CACpB,CAAC6T,EAAMG,GAAOc,GAAsB,QAEtC,KAEFlB,WAAa,KACXr5B,KAAKC,SACH,CACEsmB,YAAY,EACZnS,SAAU,IACLpU,KAAKG,MAAMiU,SACdgiB,mBAAoB,KACpBC,mBAAoB,KACpBC,4BAA6B,KAC7BC,4BAA6B,KAC7BE,oBAAqB,KACrBC,oBAAqB,KACrBC,6BAA8B,KAC9BC,6BAA8B,KAC9BE,sBAAuB,KACvBC,sBAAuB,KACvBC,+BAAgC,KAChCC,+BAAgC,KAChCE,qBAAsB,KACtBC,qBAAsB,KACtBC,8BAA+B,KAC/BC,8BAA+B,KAC/BE,mBAAoB,KACpBC,mBAAoB,KACpBC,4BAA6B,KAC7BC,4BAA6B,KAC7BE,qBAAsB,KACtBC,qBAAsB,KACtBC,8BAA+B,KAC/BC,8BAA+B,KAC/BE,mBAAoB,KACpBC,mBAAoB,KACpBC,4BAA6B,KAC7BC,4BAA6B,OAGjC,KACEr4B,KAAKwmB,iBACL,MAAMgU,EAAoB1xB,SAAS8C,iBAAiB,oBAChD4uB,EAAkB74B,OAAS,GAC7B8a,MAAMgU,UAAUxd,MAAMwnB,KAAKD,GAAmB54B,IAAI,CAACC,EAAMC,KACvDD,EAAKoK,SAAU,OAKvB,KAEF+S,cAAgB,CAAC5c,EAAIqC,EAAOwgB,KAC1B,MAAM,SAAE7Q,GAAapU,KAAKG,MAC1B,IAAIU,EACAP,EAAW,GACf,GAAIwI,WAEAjI,EADEokB,EACQnc,SAAS8C,iBAAiB,IAAIxJ,mBAE9B0G,SAAS8C,iBAAiB,IAAIxJ,oBAEtCvB,GACF,IAAK,IAAI0S,EAAI,EAAGA,EAAI1S,EAAQc,OAAQ4R,IAClCjT,EAASiR,KAAK1Q,EAAQ0S,GAAG/R,OAI/BxB,KAAKC,SACH,CACEsmB,YAAY,EACZnS,SAAU,IACLA,EACH,CAAC3P,GAAQnE,IAGbN,KAAKwmB,iBAEP,KAEFvH,aAAe,CAACiG,EAAUzgB,EAAO5D,KAC/B,MAAM,SAAEuT,GAAapU,KAAKG,MAC1BH,KAAKC,SACH,CACEsmB,YAAY,EACZnS,SAAU,IACLA,EACH,CAAC3P,GAAQygB,EAAWrkB,EAAQe,IAAKkK,GAAOA,EAAGtK,OAAS,KAGxDxB,KAAKwmB,iBAEP,KAEFkU,iBAAmB,CAACl5B,EAAOX,KACzB,GAAIW,GAASX,GAAWA,EAAQc,OAAQ,CACtC,IAAIg5B,EAAc95B,EAAQyR,OAAQxG,GAAOA,EAAGqM,GAAG3W,QAAUA,GACrDo5B,EAAgB,GAIpB,OAHID,EAAYh5B,OAAS,GAAKg5B,EAAY,GAAGxiB,GAAG3W,QAC9Co5B,EAAgBD,EAAY,GAAGxiB,GAAG3W,OAE7Bo5B,EACF,OAAO,MAv/Bd56B,KAAKG,MAAQ,CACXiU,SAAU,CACR2hB,QAAS,GACT5f,KAAM,GACN4e,sBAAuB,GACvBC,cAAe,GACfC,QAAS,GACTC,YAAa,GACbC,iBAAiB,EACjBC,kBAAkB,EAClBC,gBAAgB,EAChBC,cAAc,EACdvD,aAAc,GACdwD,oBAAqB,GACrBC,QAAS,GACTC,UAAW,GACXC,SAAU,GACVC,UAAW,KACXC,UAAW,KACX5S,aAAc,GACd8S,oBAAqB,GACrBM,mBAAoB,GACpBC,mBAAoB,GACpBC,4BAA6B,GAC7BC,4BAA6B,GAC7BC,eAAgB,GAChBC,oBAAqB,GACrBC,oBAAqB,GACrBC,6BAA8B,GAC9BC,6BAA8B,GAC9BC,gBAAiB,GACjBC,sBAAuB,GACvBC,sBAAuB,GACvBC,+BAAgC,GAChCC,+BAAgC,GAChCC,kBAAmB,GACnBC,qBAAsB,GACtBC,qBAAsB,GACtBC,8BAA+B,GAC/BC,8BAA+B,GAC/BC,iBAAkB,GAClBC,mBAAoB,GACpBC,mBAAoB,GACpBC,4BAA6B,GAC7BC,4BAA6B,GAC7BC,eAAgB,GAChBC,qBAAsB,GACtBC,qBAAsB,GACtBC,8BAA+B,GAC/BC,8BAA+B,GAC/BC,iBAAkB,GAClBC,mBAAoB,GACpBC,mBAAoB,GACpBC,4BAA6B,GAC7BC,4BAA6B,GAC7BC,eAAgB,GAChBzC,oBAAqB,KACrBxR,WAAY,IAEdwW,kBAAmB,GACnBtC,aAAc,GACdC,SAAU,KACV/F,gBAAgB,EAChBqI,WAAY,CACV,CACE3iB,GAAI,CACF3W,MAAO,UAET2U,KAAM,CACJ3U,MAAO,SAAW9B,EAAM+a,WAAa,2BAGzC,CACEtC,GAAI,CACF3W,MAAO,SAET2U,KAAM,CACJ3U,MAAO,sBAIbu5B,iBAAkB,CAChB,CACE5iB,GAAI,CACF3W,MAAO,iBAET2U,KAAM,CACJ3U,MAAO,iBAGX,CACE2W,GAAI,CACF3W,MAAO,uBAET2U,KAAM,CACJ3U,MAAO,uBAGX,CACE2W,GAAI,CACF3W,MAAO,QAET2U,KAAM,CACJ3U,MAAO,UAIbm3B,YAAa,GACbqC,SAAU,GACVxW,aAAc,GACd0N,aAAc,KACd/N,kBAAkB,EAClBoC,YAAY,EACZ1gB,cAAc,EACdwiB,mBAAoB,GACpBxC,kBAAkB,EAClBC,iBAAkB,GAClB2S,kBAAkB,EAClB7yB,WAAW,GAIf+I,oBACE,MAAM,QAAE4U,EAAO,WAAE9I,GAAeza,KAAKN,MACrCM,KAAKC,SACH,CACEwyB,gBAAgB,GAElB,IAAMzyB,KAAK60B,aAAatR,IAE1BvjB,KAAK44B,kBACDne,GACFza,KAAK04B,eAAeje,GAEtBza,KAAKwmB,iBAo3BPhmB,SACE,MAAM,SACJ4T,EAAQ,SACRokB,EAAQ,eACR/F,EAAc,WACdqI,EAAU,iBACVC,EAAgB,YAChBpC,EAAW,SACXqC,EAAQ,iBACR7W,EAAgB,aAChBK,EAAY,mBACZ6D,EAAkB,iBAClBvC,EAAgB,iBAChBD,EAAgB,iBAChB4S,EAAgB,UAChB7yB,GACE5F,KAAKG,MACT,OACEc,IAAAC,cAAA,OAAKE,UAAU,wCACZwE,GAAa5F,KAAKoX,oBAClByO,GAAoB5kB,IAAAC,cAACoe,GAAgB,CAAC5e,MAAOolB,KAC/B,KAAb0S,GAAgC,OAAbA,IACnBv3B,IAAAC,cAAA,OAAKE,UAAU,6BACbH,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAACgC,EAAS,CACR9B,UAAW,SACXT,OAAK,EACLY,KAAK,OACLT,YAAY,sBACZiB,MAAM,gBACNP,MAAO4S,EAAS2d,aAChB1uB,cAAgB0uB,IACd/xB,KAAKylB,iBAAiB,CAAEsM,qBAI9B9wB,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,wBAChCqxB,GAAkBgG,GACjBx3B,IAAAC,cAACwiB,GAAc,CACb3hB,MAAO,cACPuc,aAAclK,EAASmhB,oBACvBlyB,cAAgBkyB,IACdv1B,KAAKylB,iBAAiB,CAAE8P,8BAQrB,WAAbiD,GAAsC,SAAbA,IACzBv3B,IAAAC,cAAA,OAAKE,UAAU,0BACbH,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAACgC,EAAS,CACR9B,UAAW,SACXT,OAAK,EACLY,KAAK,OACLT,YAAY,sBACZiB,MAAM,gBACNP,MAAO4S,EAAS+B,KAChB9S,cAAgB8S,IACdnW,KAAKylB,iBAAiB,CAAEtP,aAI9BlV,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,wBAChCqxB,GACCxxB,IAAAC,cAACwiB,GAAc,CACb3hB,MAAO,cACPk5B,cAAc,EACd3c,aAAclK,EAAS2gB,sBACvB1xB,cAAgB0xB,IACd/0B,KAAKylB,iBAAiB,CAAEsP,8BAKhC9zB,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,mBACjCH,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,gBACZiB,MAAM,eACNP,MAAO4S,EAAS4gB,cAChB3xB,cAAgB2xB,GACdh1B,KAAKylB,iBAAiB,CAAEuP,oBAGd,SAAbwD,GACCv3B,IAAAC,cAACgC,EAAS,CACR9B,UAAU,iBACVG,KAAK,OACLT,YAAY,4BACZiB,MAAM,gBACNP,MAAO4S,EAAS6gB,QAChB5xB,cAAgB4xB,GACdj1B,KAAKylB,iBAAiB,CAAEwP,gBAQpCh0B,IAAAC,cAAA,OAAKE,UAAU,2BACbH,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,gBACjCH,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,gCACZiB,MAAM,UACNP,MAAO4S,EAASohB,QAChBnyB,cAAgBmyB,IACdx1B,KAAKylB,iBAAiB,CAAE+P,eAG5Bv0B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,sBACZiB,MAAM,WACNP,MAAO4S,EAASshB,SAChBryB,cAAgBqyB,IACd11B,KAAKylB,iBAAiB,CAAEiQ,gBAG5Bz0B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,uBACZiB,MAAM,YACNP,MAAO4S,EAASqhB,UAChBpyB,cAAgBoyB,IACdz1B,KAAKylB,iBAAiB,CAAEgQ,oBAMjB,WAAb+C,GAAsC,SAAbA,IACzBv3B,IAAAC,cAAA,OAAKE,UAAU,0BACbH,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,sBACnB,WAAbo3B,GACCv3B,IAAAC,cAAC8K,EAAY,CACXjK,MAAO,WACPkK,QAASmI,EAAS+gB,gBAClBjpB,iBAAkBA,CAAC1K,EAAO2zB,IACxBn1B,KAAKylB,iBAAiB,CAAE0P,sBAIhB,SAAbqD,GACCv3B,IAAAC,cAAA,WACED,IAAAC,cAAC8K,EAAY,CACXjK,MAAO,aACPkK,QAASmI,EAASkhB,aAClBppB,iBAAkBA,CAAC1K,EAAO8zB,IACxBt1B,KAAKylB,iBAAiB,CAAE6P,mBAG5Br0B,IAAAC,cAAC8K,EAAY,CACXjK,MAAO,gBACPkK,QAASmI,EAASihB,eAClBnpB,iBAAkBA,CAAC1K,EAAO6zB,IACxBr1B,KAAKylB,iBAAiB,CAAE4P,sBAKhCp0B,IAAAC,cAAC8K,EAAY,CACXjK,MAAO,aACPkK,QAASmI,EAASghB,iBAClBlpB,iBAAkBA,CAAC1K,EAAO4zB,IACxBp1B,KAAKylB,iBAAiB,CAAE2P,wBAI9Bn0B,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,WACjCH,IAAAC,cAAC+yB,GAAU,CACTlyB,MAAO,eACPjB,YAAa,oBACb4W,aAAc1X,KAAK06B,iBACjBtmB,EAAS8gB,YACTyD,GAEF93B,QAAS83B,EACTt2B,SAAW6yB,GACTl1B,KAAKylB,iBAAiB,CAAEyP,gBAE1Bn0B,iBAAkB,uBAGtBE,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,iBACjCH,IAAAC,cAAA,OAAKE,UAAU,wBACbH,IAAAC,cAAC+W,GAAW,CACV1X,gBAAiB6T,EAAS8hB,mBAC1B3zB,eAAe,qBACf1B,QAASk6B,EACT14B,SAAW6zB,IACTl2B,KAAKylB,iBAAiB,CAAEyQ,2BAI9Bj1B,IAAAC,cAAA,SAAOE,UAAU,eAAe,qBAChCH,IAAAC,cAAC+W,GAAW,CACV1X,gBAAiB6T,EAAS+hB,OAC1B5zB,eAAe,cACf1B,QAASi6B,EACTz4B,SAAW8zB,IACTn2B,KAAKylB,iBAAiB,CAAE0Q,cAI3B/hB,GACCA,EAAS+hB,QACW,UAApB/hB,EAAS+hB,QACTn2B,KAAKo5B,iBAAiBhlB,IAE1BnT,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,oBAEjCH,IAAAC,cAAA,OAAKE,UAAU,6BACbH,IAAAC,cAAC4d,GAAW,CACV/c,MAAM,WACNK,GAAG,8BACHvB,QAAS2jB,EACT/f,MAAM,aACNnE,SAAU8T,EAASiQ,WACnBtF,KAAK,0CACLC,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GACrDwa,aAAcA,CAACiG,EAAUzgB,EAAO5D,IAC9Bb,KAAKif,aAAaiG,EAAUzgB,EAAO5D,MAKzCI,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAACke,GAAgB,CACfrd,MAAM,WACNK,GAAG,6BACHvB,QAAS2jB,EACT/f,MAAM,aACNnE,SAAU8T,EAASiQ,WACnBrF,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GAAO,GAC5Dwa,aAAcA,CAACiG,EAAUzgB,EAAO5D,IAC9Bb,KAAKif,aAAaiG,EAAUzgB,EAAO5D,OAK3CI,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAACue,GAAe,CACdle,KAAK,OACLQ,MAAO,eACPie,WACE,+EAEFC,cAAe,8BACfC,cAAe,+BACfC,gBACE,gEAEF3e,MAAO4S,EAASyhB,oBAChBnW,iBAAmBmW,IACjB71B,KAAKylB,iBAAiB,CAAEoQ,yBAE1BvV,aAAW,KAGfrf,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,iBACjCH,IAAAC,cAACme,GAAQ,CACPpT,QAASkY,EACTpiB,MAAO,uCACPmK,iBAAmBiY,IACjBnkB,KAAKC,SAAS,CACZkkB,qBAEEA,EACFnkB,KAAKylB,iBAAiB,CAAEzC,aAAcqF,IAEtCroB,KAAKylB,iBAAiB,CAAEzC,aAAc,QAI3CmB,GACCljB,IAAAC,cAAC2a,GAAgB,CACfra,MAAO4S,EAAS4O,aAChBlH,kBAAoBkH,IAClBhjB,KAAKC,SAAS,CACZooB,mBAAoBrF,IAEtBhjB,KAAKylB,iBAAiB,CAAEzC,uBAQrB,KAAbwV,GAAgC,OAAbA,IACnBv3B,IAAAC,cAAA,OAAKE,UAAU,6BACbH,IAAAC,cAAA,OAAKE,UAAU,mBACZq3B,GACCx3B,IAAAC,cAACue,GAAe,CACd1d,MAAO,kBACPie,WAAY,wCACZC,cAAe,6BACfC,cAAe,8BACfC,gBACE,+DAEF3e,MAAO4S,EAASyhB,oBAChBr0B,MAAO4S,EAASuhB,UAChBjW,iBAAmBiW,IACjB31B,KAAKylB,iBAAiB,CAAEkQ,kBAKhC10B,IAAAC,cAAA,OAAKE,UAAU,mBACZq3B,GACCx3B,IAAAC,cAACue,GAAe,CACdle,KAAK,OACLQ,MAAO,eACPie,WACE,+EAEFC,cAAe,8BACfC,cAAe,+BACfC,gBACE,gEAEF3e,MAAO4S,EAASwhB,UAChBlW,iBAAmBkW,IACjB51B,KAAKylB,iBAAiB,CAAEmQ,qBAW7BpB,UCz3Cf,MAAM0G,WAAuCj6B,IAAMzB,UACjDC,YAAYC,GACVC,MAAMD,GAAO,KA2CfwS,aAAe,KACTlJ,OAAOc,YAAc,IACvB9J,KAAKC,SAAS,CACZkS,gBAAiB,IAGnBnS,KAAKC,SAAS,CACZkS,gBAAiB,KAGtB,KACDpC,QAAUC,MAAOvH,EAAQ8J,KACvBvS,KAAKC,SAAS,CACZgQ,YAAY,IAGd,IACE,MAAMC,QAAiB8jB,GAAavrB,GAChCyH,IACFlQ,KAAKN,MAAMoZ,WAAW5I,EAASC,KAAMoC,GACrChJ,IACAvJ,KAAKC,SAAS,CACZ2Q,gBAAgB,EAChBX,YAAY,KAGhB,MAAOpQ,GACPmR,QAAQtQ,MAAM,8BAAgCb,EAAEqQ,SAASe,cAQ3D,KAEFyJ,kBAAoB,CAAC1b,EAASic,EAAgBkgB,EAAermB,EAAYzN,EAAc+zB,KAC/E,sBAAsBrxB,KAAK/K,EAAQoC,aAAgB,wBAAwB2I,KAAK/K,EAAQoC,aAC5FpB,KAAKC,SAAS,CACZU,MAAOsa,EACP4O,QAASsR,EACT9zB,eACAyN,aACAsmB,eAEFp7B,KAAKN,MAAM2b,cAAc,CACvB1a,MAAOsa,EACP4O,QAASsR,EACT9zB,eACAyN,aACAsmB,iBAGL,KAED3V,iBAAmB,CAAC5f,EAAc0gB,EAAYuD,EAAaE,EAAeD,EAAgBsR,KACxF,MAAM,MACJ16B,EAAK,QACLkpB,EAAO,aACPxiB,EAAY,WACZyN,EAAU,WACVsmB,GACEp7B,KAAKG,MAETH,KAAKN,MAAM2b,cAAc,CACvB1a,QACAkpB,UACAxiB,eACAyN,aACAsmB,aACAv1B,eACA0gB,aACAuD,cACAE,gBACAD,oBACGsR,KAEN,KAEDC,qBAAwBnrB,IACtB,MAAM,gBACJorB,GACEprB,GAAQ,GACZ,IAAIqrB,EAAmB,GA+EvB,OA7EID,GAAmBA,EAAgB55B,OAAS,IAC9C65B,EACEv6B,IAAAC,cAAA,OAAKE,UAAU,uBACbH,IAAAC,cAAA,OAAKE,UAAU,0BACbH,IAAAC,cAAA,OAAKE,UAAU,gCACZm6B,EAAgB35B,IAAI,CAACC,EAAMC,KAC1B,MAAM,OACJoG,EAAM,WACNiS,EAAU,WACVgO,EAAU,eACVsT,EAAc,WACdrzB,GACEvG,EAEJ,IAAI65B,EAAoB,GACpBC,EAAkBvzB,EAAW5G,MAC7Bi6B,GAAkBA,EAAej6B,OAAS2Y,GAAcA,EAAW3Y,QACrEk6B,EAAoBD,EAAej6B,MAAQ,IAAM2Y,EAAW3Y,OAG9D,IAAIyZ,EACFha,IAAAC,cAAA,YACG,gBAAgB,eAEd,OAAI,eAELD,IAAAC,cAACsD,OAAI,CAACC,MAAOg3B,IAAkB,OAE/Bx6B,IAAAC,cAACsD,OAAI,CAACC,MAAO0V,KAGfyhB,EAAiB,CACnB9mB,WAAY1M,EAAW5G,MACvBq6B,eAAgBJ,EAAej6B,MAC/BmpB,eAAgB8Q,EAAej6B,MAAQ,IAAM2Y,EAAW3Y,MAAQ,uBAG9D25B,EACFl6B,IAAAC,cAACszB,GAAc,CACb/Z,WAAYN,GAAcA,EAAW3Y,MAAQ2Y,EAAW3Y,MAAQ,GAChE+hB,QAAUrb,GAAUA,EAAO1G,MAAS0G,EAAO1G,MAAQ,GACnDglB,eAAgBA,CAAC3gB,EAAc0gB,EAAYuD,EAAaE,EAAeD,KACrE/pB,KAAKylB,iBACH5f,EACA0gB,EACAuD,EACAE,EACAD,EACA6R,MAIR,OAEE36B,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,cAAcF,EACnBuL,QAAU8a,GAAcA,EAAW3mB,MAAS2mB,EAAW3mB,MAAQ,GAC/DO,MAAO05B,EACP96B,MAAOwZ,EACPzM,WAAY,CAAE,MAAS,WACvBC,kBAAmBA,KACjB3N,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAKmnB,EACLh7B,MAAO+6B,KAGX5uB,gBAAkBjN,GAChBG,KAAK0a,kBAAkB7a,EAAEC,OAAQmb,EAAgBkgB,EAAeQ,EAAiBD,WAU5FF,GACR,KAEDtlB,YAAe/F,IACb,MAAM,cACJ2rB,EAAa,WACbC,EAAU,kBACVC,GACE7rB,GAAQ,IACN,qBACJ8rB,EAAuB,KAAI,uBAC3BC,EAAyB,KAAI,mBAC7BC,EAAqB,KAAI,qBACzBC,EAAuB,MACrBp8B,KAAKN,MAAM28B,YAAc,GAC7B,IAAIb,EAAmB,GAwOvB,OArOEA,EADGM,GAAiBA,EAAcn6B,OAAS,GAAOo6B,GAAcA,EAAWp6B,OAAS,EAElFV,IAAAC,cAAA,OAAKE,UAAU,uBACX26B,GAAcA,EAAWp6B,OAAS,GACjCq6B,IAAsBA,EAAkBx6B,OACzCP,IAAAC,cAAA,OAAKE,UAAU,2BACZ66B,GACCA,EAAqBz6B,OACrBP,IAAAC,cAAA,OAAKE,UAAU,+BACbH,IAAAC,cAACsD,OAAI,CAACC,MAAOw3B,KAGhBC,GACCA,EAAuB16B,OACvBP,IAAAC,cAAA,OAAKE,UAAU,oCACbH,IAAAC,cAACsD,OAAI,CAACC,MAAOw3B,KAIjBh7B,IAAAC,cAAA,OAAKE,UAAU,gCACZ26B,EAAWn6B,IAAI,CAACC,EAAMC,KACrB,MAAM,KACJqU,EAAI,YACJiC,EAAW,UACXud,EAAS,eACTrf,GACEzU,EAEJ,IACI85B,EADAD,EAAoB,GAGxB,GAAIplB,GAAkBA,EAAe3U,OAAS,EAAG,CAC/C,MAAM8U,EAAYH,EACZI,EAAYD,EAAU,GAAGE,YAEN,IAArBF,EAAU9U,QAAqC,IAArB+U,EAAU/U,QACtCg6B,EAAkBjlB,EAAU,GAAGtO,WAAW5G,MAC1Ck6B,EAAoBhlB,EAAU,GAAGvO,MAAM3G,MAAQ,IAAMiV,EAAU,GAAGzO,OAAOxG,OAEzEm6B,EAAkBrlB,EAKtB,IAAIiE,EAAW,GAEXob,GAAaA,EAAUn0B,OAASm0B,EAAUn0B,MAAMqF,MAClD0T,EAAWob,EAAUn0B,MAAMqF,KAG7B,IAAIoU,EACFha,IAAAC,cAAA,YACG,gBAAgB,eAElB,OAAI,eAELD,IAAAC,cAACsD,OAAI,CAACC,MAAO0R,KAGXylB,EAAiB,CACnBjR,eAAgBxU,EAAK3U,MAAQ,uBAG3B25B,EACFl6B,IAAAC,cAACszB,GAAc,CACb/Z,WAAY,GACZ8I,QAAS,GACThc,YAAa+O,EACbkQ,eAAgBA,CAAC3gB,EAAc0gB,EAAYuD,EAAaE,EAAeD,KACrE/pB,KAAKylB,iBACH5f,EACA0gB,EACAuD,EACAE,EACAD,EACA6R,MAIR,OACE36B,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,eAAeF,EACpBsL,YAAa,OACbC,QAASkN,EACTxY,MAAO,CAAEP,MAAO,eAChBb,MAAOwV,EACPzS,YAAa0U,EACbtL,gBAAkBjN,GAChBG,KAAK0a,kBAAkB7a,EAAEC,OAAQmb,EAAgBkgB,EAAeQ,EAAiBD,GAAmB,SAQjHI,GACCA,EAAcn6B,OAAS,GACvBV,IAAAC,cAAA,OAAKE,UAAU,0BACZ+6B,GACCA,EAAmB36B,OACnBP,IAAAC,cAAA,OAAKE,UAAU,+BACbH,IAAAC,cAACsD,OAAI,CAACC,MAAO03B,KAGhBC,GACCA,EAAqB56B,OACrBP,IAAAC,cAAA,OAAKE,UAAU,oCACbH,IAAAC,cAACsD,OAAI,CAACC,MAAO23B,KAGjBn7B,IAAAC,cAAA,OAAKE,UAAU,gCACZ06B,EAAcl6B,IAAI,CAACC,EAAMC,KACxB,MAAM,OACJoG,EAAM,WACNiS,EAAU,WACVgO,EAAU,QACVqN,EAAO,cACPR,EAAa,WACb5sB,EAAU,eACVqzB,GACE55B,GAEE,WACJy6B,EAAU,KACVnmB,GACEtU,EAAK06B,iBAAmB,IACtB,aACJC,GACE36B,EAAK46B,cAAgB,GAEzB,IAAIf,EAAoB,GACpBC,EAAkBvzB,EAAW5G,MAC7Bi6B,GAAkBA,EAAej6B,OAAS2Y,GAAcA,EAAW3Y,QACrEk6B,EAAoBD,EAAej6B,MAAQ,IAAM2Y,EAAW3Y,OAE9D,IAAIk7B,EACFz7B,IAAAC,cAAA,WACGs7B,GACCA,EAAah7B,OACbP,IAAAC,cAAA,YACED,IAAAC,cAACsD,OAAI,CAACC,MAAO+3B,IACbv7B,IAAAC,cAAA,YAAM,kBAKT8zB,GACCA,EAAcxzB,OACdP,IAAAC,cAAA,YACED,IAAAC,cAACsD,OAAI,CAACC,MAAOuwB,IACb/zB,IAAAC,cAAA,YAAM,kBAKTs0B,GACCA,EAAQh0B,OACRP,IAAAC,cAAA,YACED,IAAAC,cAACsD,OAAI,CAACC,MAAO+wB,IACbv0B,IAAAC,cAAA,YAAM,mBAMV+Z,EACFha,IAAAC,cAAA,YACG,gBAAgB,eAEhB,OAAI,eAELD,IAAAC,cAACsD,OAAI,CAACC,MAAO0R,IAAQ,OAErBlV,IAAAC,cAACsD,OAAI,CAACC,MAAO0V,KAGbyhB,EAAiB,CACnB9mB,WAAY1M,EAAW5G,MACvBq6B,eAAgBJ,EAAej6B,MAC/BmpB,eAAgBxU,EAAK3U,MAAQ,IAAM2Y,EAAW3Y,MAAQ,uBAGpD25B,EACFl6B,IAAAC,cAACszB,GAAc,CACb/Z,WAAYN,GAAcA,EAAW3Y,MAAQ2Y,EAAW3Y,MAAQ,GAChE+hB,QAAUrb,GAAUA,EAAO1G,MAAS0G,EAAO1G,MAAQ,GACnDglB,eAAgBA,CAAC3gB,EAAc0gB,EAAYuD,EAAaE,EAAeD,KACrE/pB,KAAKylB,iBACH5f,EACA0gB,EACAuD,EACAE,EACAD,EACA6R,MAIR,OAEE36B,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,cAAcF,EACnBuL,QAAU8a,GAAcA,EAAW3mB,MAAS2mB,EAAW3mB,MAAQ,GAC/DO,MAAO05B,EACP96B,MAAOwZ,EACP3M,iBAAkBkvB,EAClBhvB,WAAY,CAAE,MAAS,WACvBC,kBAAmBA,KACjB3N,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAKmnB,EACLh7B,MAAO+6B,KAGX5uB,gBAAkBjN,GAChBG,KAAK0a,kBAAkB7a,EAAEC,OAAQmb,EAAgBkgB,EAAeQ,EAAiBD,UAWjGz6B,IAAAC,cAACwO,GAAe,CACd3N,MAAM,cAILy5B,GACR,KAEDmB,iBAAoBxsB,IAClB,MAAM,cACJoC,GACEvS,KAAKG,MAET,IAAIy8B,GAAgB,EAChBC,EAAa,EACbC,EAAkB3sB,EAAK2rB,cAAcn6B,OAWzC,OATEk7B,EADEtqB,EAAgB,EACkB,IAArBA,EAAgB,GAAWuqB,EAE7BA,EAEX3sB,GACFA,EAAKE,iBACLF,EAAKE,gBAAgB7O,MAAQ,IAC7Bo7B,GAAgB,GAGhB37B,IAAAC,cAAA,OAAKE,UAAW,eAAew7B,EAAkC,GAAlB,kBAC5C,WACAC,EACA,OACA1sB,EAAKG,aAAa9O,QAGxB,KACDyT,sBAAwB9E,IACtBnQ,KAAKC,SAAS,CACZsS,cAAepC,EAAK7P,SAAW,IAEjC,IAAImI,EAAS,CACXuM,WAAY7E,EAAK7P,SAAW,GAE9BN,KAAK+P,QAAQtH,EAAQ0H,EAAK7P,SAAW,IACrC,KAEF4U,iBAAmB,KACjB,MAAM,KAAE/E,GAASnQ,KAAKN,OAChB,gBACJyS,GACEnS,KAAKG,MACT,OACEgQ,GACAA,EAAKE,iBACLF,EAAKE,gBAAgB7O,MAAQ,GAC3BP,IAAAC,cAACiU,IAAa,CACZC,cACEnU,IAAAC,cAAA,WACED,IAAAC,cAAA,KAAGE,UAAU,mCACbH,IAAAC,cAAA,YAAO,aAGXmU,UACEpU,IAAAC,cAAA,WACED,IAAAC,cAAA,KAAGE,UAAU,oCACbH,IAAAC,cAAA,YAAO,SAGXoU,WAAY,MACZC,eAAgB,WAChBC,UAAWrF,EAAKE,gBAAgB7O,MAChCiU,qBAAsB,EACtBC,mBAAoBvD,EACpByD,aAAc5V,KAAKiV,sBACnBY,mBAAoB,aACpBC,sBAAuB,mBACvBC,gBAAiB,YA1gBvB/V,KAAKG,MAAQ,CACXoS,cAAe,EACf3B,gBAAgB,EAChBX,YAAY,EACZpK,cAAc,EACdk3B,eAAe,EACfjT,YAAa,KACbE,cAAe,KACfgT,WAAY,KACZr8B,MAAO,KACPkpB,QAAS,KACTxiB,aAAc,KACdyN,WAAY,KACZmoB,UAAW,KACXxiB,WAAY,KACZ2gB,YAAY,EACZjpB,gBAAiB,GAIrBxD,oBACE,MAAM,YACJ4M,GACEvb,KAAKN,MAIT,GAHIsJ,QACFA,OAAOsO,iBAAiB,SAAUtX,KAAKkS,cAErCpJ,SAEF,GADA9I,KAAKkS,eACAqJ,EAMHvb,KAAKC,SAAS,CACZgQ,YAAY,QAPE,CAChB,IAAIxH,EAAS,CACXuM,WAAY,GAEdhV,KAAK+P,QAAQtH,EAAQ,IA+e3BjI,SACE,MAAM,OACJ08B,EAAS,MACPl9B,KAAKN,MAAM28B,YAAc,IACvB,KACJlsB,EAAI,YACJoL,GACEvb,KAAKN,OACH,eACJkR,EAAc,WACdX,GACEjQ,KAAKG,MACT,OACEc,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAACqX,GAAU,CACT5X,MAAO4a,EAAc,CAAE/Z,MAAO,qBAAwB07B,IAEvDjtB,GACChP,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAAA,OAAKE,UAAU,YAGhB6O,GAAesL,EAEhBvb,KAAKs7B,qBAAqBnrB,GAD1BnQ,KAAKkW,YAAY/F,IAGhBoL,IACAtL,GACDE,GACAA,EAAKG,cACLH,EAAKG,aAAa9O,OAClB2O,EAAK2rB,eACL3rB,EAAK2rB,cAAcn6B,OAAS,GAC5B3B,KAAK28B,iBAAiBxsB,IAEtBoL,GACA3K,GACA3P,IAAAC,cAAA,WACGlB,KAAKkV,sBAQHgmB,UC7jBf,MAAMiC,WAAoCl8B,IAAMzB,UAC9CC,YAAYC,GACVC,MAAMD,GAAO,KA0BfwS,aAAe,KACTlJ,OAAOc,YAAc,IACvB9J,KAAKC,SAAS,CACZqpB,UAAU,IAGZtpB,KAAKC,SAAS,CACZqpB,UAAU,KAGf,KAEDwC,cAAgB,KACd,MAAM,YACJvQ,GAAc,EAAK,UACnB9E,EAAY,IACVzW,KAAKN,OACH,UACJ09B,EAAS,eACTC,GACEr9B,KAAKG,MAET,OACEc,IAAAC,cAACo8B,GAAS,CACRjB,WAAYr8B,KAAKN,MAAM4Y,OACvBnI,KAAMitB,EACNjtB,KAAOsG,GAAaA,EAAU9U,OAAS,EAAK,CAAE45B,gBAAiB9kB,GAAc2mB,EAC7E9qB,OAAQ+qB,EACRvkB,WAAYA,CAACskB,EAAW7qB,IACtBvS,KAAKC,SAAS,CAAEm9B,YAAW7qB,kBAC7B5K,iBAAkB+hB,GAChB1pB,KAAKC,SAAS,CAAE0H,kBAAkB,EAAM+hB,qBAE1CrO,cAAesO,IACb3pB,KAAKC,SAAS,CACZob,eAAe,EACfsO,gBACAD,iBAAkB,IACb1pB,KAAKG,MAAMupB,iBACd/oB,MAAOgpB,EAActiB,aACrBmN,IAAKmV,EAAc7U,eAKzByG,YAAaA,KAGjB,KAEFvF,mBAAqB,KACnB,MAAM,MACJrV,EAAK,IACL6T,GACExU,KAAKG,MAAMupB,kBAAoB,IAE7B,WACJ5U,EAAU,eACV+mB,GACE77B,KAAKG,MAAMwpB,eAAiB,IAE1B,cACJtO,EAAa,iBACb1T,GACE3H,KAAKG,MAIT,OAFAwP,GAAchI,GAAoB0T,GAGhCpa,IAAAC,cAAC0D,EAAS,CACR4B,WAAS,EACTZ,UAAW+B,EACX5F,MAAOpB,GAAgBk7B,EACvBn2B,aAAcA,IACZ1F,KAAKC,SAAS,CACZ0H,kBAAkB,KAGrBA,GACC1G,IAAAC,cAACyF,EAAY,CACXhG,MAAOA,GAAgBk7B,EACvBh1B,IAAK2N,GAAYM,MAK1B,KAED8U,gBAAkB,KAChB,MAAM,gBACJM,GACElqB,KAAKN,OAAS,IACZ,MACJiB,EAAK,QACLkpB,EAAO,WACP/U,EAAU,aACVjP,EAAY,WACZ0gB,EAAU,YACVuD,EAAW,cACXE,EAAa,eACbD,EAAc,eACdY,EAAiB,IACf3qB,KAAKG,MAAMwpB,eAAiB,IAE1B,cACJtO,EAAa,kBACb4O,EAAiB,SACjBX,EAAQ,iBACR3hB,GACE3H,KAAKG,MAWT,OATKkb,GAAiB4O,GAAqBC,GACzClqB,KAAKC,SAAS,CACZgqB,mBAAmB,GAEnB,IAAMC,GAAgB,IAG1Bva,GAAchI,GAAoB0T,GAGhCpa,IAAAC,cAAC0D,EAAS,CACRgB,UAAWyV,EACXtZ,MAAOpB,EACP+E,aAAcA,IACZ1F,KAAKC,SAAS,CACZob,eAAe,IAGnBxV,aAAcA,EACdE,QAAS,aACTE,eAAgBA,KACd6jB,IAAc5D,KAAM3J,IACdA,IACG2N,EAGHlqB,KAAKC,SAAS,CACZgqB,mBAAmB,IAHrBjqB,KAAKu9B,yBASb35B,aAAc,WAAU6Y,MAAM+gB,QAAQ1oB,KAAgBwU,EAAW,SAAM,IACvEzlB,oBAAqBA,KACf4Y,MAAM+gB,QAAQ1oB,GAChBiV,IACSjV,GACT9U,KAAKC,SAAS,CACZ0H,kBAAkB,KAKxB5D,qBAAsBwiB,EACtBviB,WAAY,SACZoC,oBAAqB,mBACrBnC,kBAAmBA,KACjB+lB,IAAgB9D,KAAM3J,IAChBA,IACG2N,GACHlqB,KAAKu9B,qBAEPv9B,KAAKC,SAAS,CACZob,eAAe,EACfuP,oBAAoB,EACpBjB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACdgB,kBAEFV,oBAAmBC,GAEnB,IAAM3gB,SAKdpF,mBAAoBoiB,GAEnBvmB,KAAKG,MAAMkb,eACVwO,IAIP,KAED0T,mBAAqBvtB,UACnB,MAAM,cAAEuC,GAAkBvS,KAAKG,MAC/B,IAAIsI,EAAS,CACXuM,WAAYzC,GAEd,MAAMiC,EAAMxL,OAAOkoB,SAAS1R,KAC5BxW,OAAOy0B,QAAQC,UAAU,KAAM,aX/NPC,EAACnpB,EAAK+d,EAAO/wB,KAKvC,IAAIo8B,EAAM,IAAI5M,OAAO,YAAcuB,EAAQ,iBAI3C,OAAIqL,EAAI7zB,KAAKyK,GAGJA,EAAI5H,QAAQgxB,EAAK,KAAOrL,EAAQ,IAAM/wB,GANnC,QAQKuI,KAAKyK,GAGbA,EAAM,IAAM+d,EAAQ,IAAM/wB,EAI1BgT,EAAM,IAAM+d,EAAQ,IAAM/wB,GW0MYm8B,CAAanpB,EAAK,OAAQ4H,KAAKC,QAC5E,IAAInM,QAAiB8jB,GAAavrB,GAC9ByH,GAA+B,KAAnBA,EAASzC,QACvBzN,KAAKC,SAAS,CACZm9B,UAAWltB,EAASC,QA9NxBnQ,KAAKG,MAAQ,CACXk9B,eAAgB,KAChB11B,kBAAkB,EAClB0T,eAAe,EACf+hB,UAAW,KACXS,UAAW,KACXlU,cAAe,KACfD,iBAAkB,KAClBkB,oBAAoB,EACpBrY,cAAe,EACf8E,iBAAiB,EACjB4S,mBAAmB,EACnBX,UAAU,GAId3a,oBACM7F,UACF9I,KAAKC,SAAS,CAAEoX,iBAAiB,GAAQrX,KAAKkS,gBAE5ClJ,QACFA,OAAOsO,iBAAiB,SAAUtX,KAAKkS,cA8M3C1R,SACE,MAAM,mBACJoqB,EAAkB,gBAClBvT,GACErX,KAAKG,OAEH,eACJwqB,EAAc,WACd7V,EAAU,WACVsmB,GACEp7B,KAAKG,MAAMwpB,eAAiB,GAEhC,OACE1oB,IAAAC,cAAA,OAAKE,UAAW,sBAAqBwpB,EAAqB,sBAAwB,KAC/EvT,GACCrX,KAAKgW,qBAENqB,GACCrX,KAAK4pB,kBAENgB,GACC3pB,IAAAC,cAACgN,GAAc,CACbW,gBAAiBiG,IAAesmB,EAChCr5B,MAAO4oB,EACPplB,cAAeA,IAAMvF,KAAKC,SAAS,CACjC0H,kBAAkB,IAEpByG,kBAAoBwc,IAClB5qB,KAAKC,SAAS,CACZ2qB,0BAKR3pB,IAAAC,cAAA,OAAKE,UAAU,mBACZpB,KAAK8rB,mBAMDqR,UCnRf,MAAMW,WAAe78B,IAAMzB,UACzBC,YAAYC,GACVC,MAAMD,GAAO,KAuCfqQ,QAAUC,MAAOvH,EAAQmQ,KACvB5Y,KAAKC,SAAS,CACZgQ,YAAY,IAGd,IACE,MAAMC,OPvDczH,IAEjBC,EAAQC,IADyB,mBACX,CAAEF,OAAQ,IAAKA,KOqDjBs1B,CAAUt1B,GACjC,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5CnQ,KAAKN,MAAMoZ,WAAW5I,EAASC,MAC/B,IAAI4I,EAAmB,EACvBC,OAAOC,KAAK/I,EAASC,MAAMvO,IAAIC,IAC7BkX,GAAsC7I,EAASC,KAAKtO,GAAMF,SAE5D3B,KAAKN,MAAMwZ,eAAeH,GAC1B/Y,KAAKC,SAAS,CACZgQ,YAAY,KAIlB,MAAOpQ,GACLmR,QAAQtQ,MAAM,0BAA4Bb,EAAEqQ,SAASe,cAWvD,KAEFiF,YAAc,CAAC/F,EAAMmC,KACnB,MAAM,eACJ6G,EAAc,oBACdC,EAAmB,2BACnBC,EAA0B,gBAC1BC,EAAe,mBACfC,EAAkB,oBAClBykB,GACE7tB,GAAQ,GAEZ,IAAIsJ,EAAoB,GAExB,GAAIukB,GAAuBA,EAAoBr8B,OAAS,EACtD8X,EACEzZ,KAAK0Z,wBAAwBskB,OAC1B,CACL,IAAIrkB,EAAqB,GACvBC,EAA4B,GAC5BC,EAAmC,GACnCC,EAAwB,GACxBC,EAA2B,GAEzBZ,GAAkBA,EAAexX,OAAS,IAC5CgY,EACE3Z,KAAKga,eAAeb,EAAgB,OAAQ7G,IAE5C8G,GAAuBA,EAAoBzX,OAAS,IACtDiY,EACE5Z,KAAKga,eAAeZ,EAAqB,YAAa9G,IAEtD+G,GAA8BA,EAA2B1X,OAAS,IACpEkY,EACE7Z,KAAKga,eAAeX,EAA4B,oBAAqB/G,IAErEgH,GAAmBA,EAAgB3X,OAAS,IAC9CmY,EACE9Z,KAAKga,eAAeV,EAAiB,QAAShH,IAE9CiH,GAAsBA,EAAmB5X,OAAS,IACpDoY,EACE/Z,KAAKga,eAAeT,EAAoB,WAAYjH,IAGzC,cAAXA,EACFmH,EACExY,IAAAC,cAAA,WACGyY,EACAC,EACAC,EACAC,EACAC,GAGa,mBAAXzH,EACPmH,EAAoBE,EAEF,wBAAXrH,EACPmH,EAAoBG,EAEF,+BAAXtH,EACPmH,EAAoBI,EAEF,oBAAXvH,EACPmH,EAAoBK,EAEF,uBAAXxH,IACPmH,EAAoBM,GAIxB,OAAON,GACR,KAEDC,wBAA2BO,IACzB,MAAM,gBACJC,GACEla,KAAKN,MAET,OACEuB,IAAAC,cAAA,OAAKE,UAAU,eACZ6Y,EAAWrY,IAAI,CAACC,EAAMC,KACrB,MAAM,OACJoG,EAAM,UACNqO,EAAS,WACT4D,EAAU,KACVhE,EAAI,OACJkE,EAAM,WACNC,GACEzY,GAAQ,GAEZ,IAAI0Y,EAAW,GAMf,OAJIhE,GAAaA,EAAU/U,OAAS+U,EAAU/U,MAAMqF,MAClD0T,EAAWhE,EAAU/U,MAAMqF,KAI3B5F,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,gBAAekG,EAASpG,GAC7BuL,QAASkN,EACTxY,MAAOoY,EACPxZ,MAAOwV,EACP1I,OAAQ4M,EACR3M,WAAY,CAAE,MAAS,WACvBC,kBAAmBA,KACjB3N,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,MAG/CoM,OAAQ,CAAE,KAAQ,UAAW,QAAW,UACxCC,cAAeA,KACb7N,KAAKN,MAAM8a,gBAAgB,CACzBpY,GAAI8F,EAAO1G,MACXkB,KAAMyT,EAAK3U,MACXiZ,WAAYN,EAAW3Y,MACvBiM,OAAQ4M,EAAO7Y,SAGnBsL,gBAAkBjN,IACZqa,EACI,WAAWnQ,KAAKlK,EAAEC,OAAOsB,YAC7BpB,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,KAI/CxB,KAAK0a,kBAAkB7a,EAAGqI,EAAO1G,cAUhD,KAEDwY,eAAiB,CAACC,EAAYlY,EAAOuQ,KACnC,MAAM,gBACJ4H,GACEla,KAAKN,MACT,OACEuB,IAAAC,cAAA,OAAKE,UAAU,eACD,cAAXkR,GACCrR,IAAAC,cAAA,OAAKE,UAAU,gBACZW,GAGJkY,EAAWrY,IAAI,CAACC,EAAMC,KACrB,MAAM,OACJoG,EAAM,UACNqO,EAAS,WACT4D,EAAU,KACVhE,EAAI,UACJC,EAAS,QACTC,EAAO,OACPgE,EAAM,WACNC,GACEzY,GAAQ,GAEZ,IAAI0Y,EAAW,GAEXhE,GAAaA,EAAU/U,OAAS+U,EAAU/U,MAAMqF,MAClD0T,EAAWhE,EAAU/U,MAAMqF,KAG7B,IAAInD,EAAc,GAWlB,OATI0S,GAAaA,EAAU5U,OAAS6U,GAAWA,EAAQ7U,SACrDkC,EACEzC,IAAAC,cAAA,YACGkV,EAAU5U,MACV6U,GAAWA,EAAQ7U,MAAQ,MAAQ,GACnC6U,EAAQ7U,QAKbP,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,gBAAekG,EAASpG,GAC7BuL,QAASkN,EACTxY,MAAOoY,EACPxZ,MAAOwV,EACP3I,iBAAkB9J,EAClB+J,OAAQ4M,EACR3M,WAAY,CAAE,MAAS,WACvBC,kBAAmBA,KACjB3N,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,MAG/CoM,OAAQ,CAAE,KAAQ,UAAW,QAAW,UACxCC,cAAeA,KACb7N,KAAKN,MAAM8a,gBAAgB,CACzBpY,GAAI8F,EAAO1G,MACXkB,KAAMyT,EAAK3U,MACXiZ,WAAYN,EAAW3Y,MACvBiM,OAAQ4M,EAAO7Y,SAGnBsL,gBAAkBjN,IACZqa,EACI,WAAWnQ,KAAKlK,EAAEC,OAAOsB,YAC7BpB,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,KAI/CxB,KAAK0a,kBAAkB7a,EAAGqI,EAAO1G,cAUhD,KAEDoZ,gBAAkB,CAACzK,EAAM0K,EAAgBC,KACvC,IAAImjB,EAAiB,EAYrB,OAVAjlB,OAAOC,KAAK9I,GAAMvO,IAAIC,IACC,cAAjBiZ,EACEA,IAAiBjZ,IACnBo8B,EAAiB9tB,EAAKtO,GAAMF,QAG9Bs8B,GAAkC9tB,EAAKtO,GAAMF,SAK/CV,IAAAC,cAAA,WACG+8B,EAAiB,EAChBh9B,IAAAC,cAAA,OAAKE,UAAU,4BACZ,WACA68B,EACA,OACApjB,GAEH5Z,IAAAC,cAACwO,GAAe,CACd3N,MAAM,YACN2B,YAAY,oEAKrB,KAEDgX,kBAAoB,CAAC7a,EAAGmb,KACtB,IAAIhc,EAAUa,EAAEC,OACZmb,EAAiB,GAErB,GADAnS,SAASoS,cAAcC,SACnBtb,EAAEub,OAAS,GAGf,GAAK,uCAAuCrR,KAAK/K,EAAQoC,WAAa,CACpE,GAAG,aAAa2I,KAAK/K,EAAQoC,aAAgB,kBAAkB2I,KAAK/K,EAAQE,cAAckC,WACxF,OAEF6Z,EACEha,IAAAC,cAAA,YACG,kBAAkB,eAElB,OAAI,eAEJ,SAAS,eAET,OAAI,eAEJ,cAGLlB,KAAKN,MAAM2b,cAAc,CACvB1a,MAAOsa,EACPD,OAAQ,GACRkjB,gBAAgB,QAGT,WAAWn0B,KAAK/K,EAAQoC,aAAgB,wBAAwB2I,KAAK/K,EAAQoC,aACtF6Z,EACEha,IAAAC,cAAA,YACG,kBAAkB,eAEpB,OAAI,eAEJ,SAAS,eAET,OAAI,eAEJ,iBAGHlB,KAAKN,MAAM2b,cAAc,CACvB1a,MAAOsa,EACPD,OAAQA,EACRkjB,gBAAgB,MAtXpBl+B,KAAKG,MAAQ,CACX8P,YAAY,GAIhBtB,oBACE,MAAM,YACJ4M,GACEvb,KAAKN,MAET,GAAK6b,EAMHvb,KAAKC,SAAS,CACZgQ,YAAY,QAPE,CAChB,IAAIxH,EAAS,CACX+S,OAAQ,IAEVxb,KAAK+P,QAAQtH,GAAQ,IAQzBgT,mBAAmBC,GACjB,MAAM,aACJjJ,EAAY,YACZ8I,GACEvb,KAAKN,MAET,IAAK6b,GACE9I,IAAiBiJ,EAAUjJ,aAAe,CAC7C,IAAIhK,EAAS,CACX+S,OAAQ/I,EAAakJ,YAEvB3b,KAAK+P,QAAQtH,IA0VnBjI,SACE,MAAM,KACJ2P,EAAI,WACJV,EAAU,aACVqL,EAAY,YACZS,EAAW,WACXK,EAAU,eACVf,GACE7a,KAAKN,OACH,WACJuQ,GACEjQ,KAAKG,MAET,OACEc,IAAAC,cAAA,WACED,IAAAC,cAAA,OAAKE,UAAW,WAAUwa,EAAa,cAAgB,KACrD3a,IAAAC,cAACqX,GAAU,CACT5X,MAAO,CAAEa,MAAO,UAChBgX,gBAAiB,YACjBpS,oBAAoB,kBACpBqS,eAAgB,OAChBxU,kBAAoBpE,GAClBG,KAAK0a,kBAAkB7a,GACzB6Y,kBAAmB,SACnBvS,sBAAsB,aACtBtC,oBAAqBA,IAAM4L,MAE5BQ,GACChP,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAAA,OAAKE,UAAU,aAIjB6O,GACAjQ,KAAKkW,YAAY/F,EAAM2K,IAEvBS,IACCtL,GACDE,GACAnQ,KAAK4a,gBAAgBzK,EAAM0K,EAAgBC,MAQxCgjB,UC/af,MAAMK,WAAel9B,IAAMzB,UACzBC,YAAYC,GACVC,MAAMD,GAAO,KAuCfqQ,QAAUC,MAAOvH,EAAQmQ,KACvB5Y,KAAKC,SAAS,CACZgQ,YAAY,IAGd,IACE,MAAMC,OR/CczH,IAEjBC,EAAQC,IADyB,mBACX,CAAEF,OAAQ,IAAKA,KQ6CjB21B,CAAU31B,GACjC,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5CnQ,KAAKN,MAAMoZ,WAAW5I,EAASC,MAC/B,IAAI4I,EAAmB,EACvBC,OAAOC,KAAK/I,EAASC,MAAMvO,IAAIC,IAC7BkX,GAAsC7I,EAASC,KAAKtO,GAAMF,SAE5D3B,KAAKN,MAAMwZ,eAAeH,GAC1B/Y,KAAKC,SAAS,CACZgQ,YAAY,KAIlB,MAAOpQ,GACLmR,QAAQtQ,MAAM,0BAA4Bb,EAAEqQ,SAASe,cAWvD,KAEFiF,YAAc,CAAC/F,EAAMmC,KACnB,MAAM,eACJ6G,EAAc,oBACdC,EAAmB,2BACnBC,EAA0B,gBAC1BC,EAAe,mBACfC,EAAkB,oBAClB8kB,EAAmB,oBACnBL,GACE7tB,GAAQ,GAEZ,IAAIsJ,EAAoB,GAExB,GAAIukB,GAAuBA,EAAoBr8B,OAAS,EACtD8X,EACEzZ,KAAK0Z,wBAAwBskB,OAC1B,CACL,IAAIM,EAAuB,GACzB1kB,EAA4B,GAC5B2kB,EAA4B,GAC5B1kB,EAAmC,GACnCC,EAAwB,GACxBC,EAA2B,GAEzBZ,GAAkBA,EAAexX,OAAS,IAC5C28B,EACEt+B,KAAKga,eAAeb,EAAgB,OAAQ7G,IAE5C8G,GAAuBA,EAAoBzX,OAAS,IACtDiY,EACE5Z,KAAKga,eAAeZ,EAAqB,YAAa9G,IAEtD+G,GAA8BA,EAA2B1X,OAAS,IACpEkY,EACE7Z,KAAKga,eAAeX,EAA4B,oBAAqB/G,IAErEgH,GAAmBA,EAAgB3X,OAAS,IAC9CmY,EACE9Z,KAAKga,eAAeV,EAAiB,QAAShH,IAE9CiH,GAAsBA,EAAmB5X,OAAS,IACpDoY,EACE/Z,KAAKga,eAAeT,EAAoB,WAAYjH,IAGpD+rB,GAAuBA,EAAoB18B,OAAS,IACpD48B,EACAv+B,KAAKga,eAAeqkB,EAAqB,YAAa/rB,IAG3C,cAAXA,EACFmH,EACExY,IAAAC,cAAA,WACGo9B,EACA1kB,EACA2kB,EACA1kB,EACAC,EACAC,GAGa,mBAAXzH,EACPmH,EAAoB6kB,EAEF,wBAAXhsB,EACPmH,EAAoBG,EAEF,+BAAXtH,EACPmH,EAAoBI,EAEF,oBAAXvH,EACPmH,EAAoBK,EAEF,uBAAXxH,EACPmH,EAAoBM,EAEF,wBAAXzH,IACPmH,EAAoB8kB,GAIxB,OAAO9kB,GACR,KAEDC,wBAA2BO,IACzB,MAAM,gBACJC,GACEla,KAAKN,MAET,OACEuB,IAAAC,cAAA,OAAKE,UAAU,eACZ6Y,EAAWrY,IAAI,CAACC,EAAMC,KACrB,MAAM,OACJoG,EAAM,UACNqO,EAAS,WACT4D,EAAU,KACVhE,EAAI,OACJkE,EAAM,WACNC,GACEzY,GAAQ,GAEZ,IAAI0Y,EAAW,GAMf,OAJIhE,GAAaA,EAAU/U,OAAS+U,EAAU/U,MAAMqF,MAClD0T,EAAWhE,EAAU/U,MAAMqF,KAI3B5F,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,gBAAekG,EAASpG,GAC7BuL,QAASkN,EACTxY,MAAOoY,EACPxZ,MAAOwV,EACP1I,OAAQ4M,EACR3M,WAAY,CAAE,MAAS,WACvBC,kBAAmBA,KACjB3N,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,MAG/CoM,OAAQ,CAAE,KAAQ,UAAW,QAAW,UACxCC,cAAeA,KACb7N,KAAKN,MAAM8a,gBAAgB,CACzBpY,GAAI8F,EAAO1G,MACXkB,KAAMyT,EAAK3U,MACXiZ,WAAYN,EAAW3Y,MACvBiM,OAAQ4M,EAAO7Y,SAGnBsL,gBAAkBjN,IACZqa,EACI,WAAWnQ,KAAKlK,EAAEC,OAAOsB,YAC7BpB,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,KAI/CxB,KAAK0a,kBAAkB7a,EAAGqI,EAAO1G,cAUhD,KAEDwY,eAAiB,CAACC,EAAYlY,EAAOuQ,KACnC,MAAM,gBACJ4H,GACEla,KAAKN,MACT,OACEuB,IAAAC,cAAA,OAAKE,UAAU,eACD,cAAXkR,GACCrR,IAAAC,cAAA,OAAKE,UAAU,gBACZW,GAGJkY,EAAWrY,IAAI,CAACC,EAAMC,KACrB,MAAM,OACJoG,EAAM,UACNqO,EAAS,WACT4D,EAAU,KACVhE,EAAI,UACJC,EAAS,QACTC,EAAO,OACPgE,EAAM,WACNC,EAAU,eACVkkB,GACE38B,GAAQ,GAEZ,IAAI0Y,EAAW,GAEXhE,GAAaA,EAAU/U,OAAS+U,EAAU/U,MAAMqF,MAClD0T,EAAWhE,EAAU/U,MAAMqF,KAG7B,IAAInD,EAAc,GAYlB,OAVI0S,GAAaA,EAAU5U,OAAS6U,GAAWA,EAAQ7U,SACrDkC,EACEzC,IAAAC,cAAA,YACGkV,EAAU5U,MACV6U,GAAWA,EAAQ7U,MAAQ,MAAQ,GACnC6U,EAAQ7U,MACRg9B,GAAkBA,EAAeh9B,MAAQ,KAAOg9B,EAAeh9B,MAAQ,KAK5EP,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,gBAAekG,EAASpG,GAC7BuL,QAASkN,EACTxY,MAAOoY,EACPxZ,MAAOwV,EACP3I,iBAAkB9J,EAClB+J,OAAQ4M,EACR3M,WAAY,CAAE,MAAS,WACvBC,kBAAmBA,KACjB3N,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,MAG/CoM,OAAQ,CAAE,KAAQ,UAAW,QAAW,UACxCC,cAAeA,KACb7N,KAAKN,MAAM8a,gBAAgB,CACzBpY,GAAI8F,EAAO1G,MACXkB,KAAMyT,EAAK3U,MACXiZ,WAAYN,EAAW3Y,MACvBiM,OAAQ4M,EAAO7Y,SAGnBsL,gBAAkBjN,IACZqa,EACI,WAAWnQ,KAAKlK,EAAEC,OAAOsB,YAC7BpB,KAAKN,MAAMiI,iBAAiB,CAC1B6M,IAAK8F,EAAW9Y,MAChBb,MAAQwV,GAAQA,EAAK3U,MAAS2U,EAAK3U,MAAQ,KAI/CxB,KAAK0a,kBAAkB7a,EAAGqI,EAAO1G,cAUhD,KAEDoZ,gBAAkB,CAACzK,EAAM0K,EAAgBC,KACvC,IAAImjB,EAAiB,EAWrB,OAVAjlB,OAAOC,KAAK9I,GAAMvO,IAAIC,IACC,cAAjBiZ,EACEA,IAAiBjZ,IACnBo8B,EAAiB9tB,EAAKtO,GAAMF,QAG9Bs8B,GAAkC9tB,EAAKtO,GAAMF,SAK/CV,IAAAC,cAAA,WACG+8B,EAAiB,EAChBh9B,IAAAC,cAAA,OAAKE,UAAU,4BACZ,WACA68B,EACA,OACApjB,GAEH5Z,IAAAC,cAACwO,GAAe,CACd3N,MAAM,YACN2B,YAAY,oEAKrB,KAEDgX,kBAAoB,CAAC7a,EAAGmb,KACtB,IAAIhc,EAAUa,EAAEC,OACZmb,EAAiB,GAErB,GADAnS,SAASoS,cAAcC,SACnBtb,EAAEub,OAAS,GAGf,GAAK,uCAAuCrR,KAAK/K,EAAQoC,WAAa,CACpE,GAAG,aAAa2I,KAAK/K,EAAQoC,aAAgB,kBAAkB2I,KAAK/K,EAAQE,cAAckC,WACxF,OAEF6Z,EACEha,IAAAC,cAAA,YACG,kBAAkB,eAElB,OAAI,eAEJ,SAAS,eAET,OAAI,eAEJ,aAGLlB,KAAKN,MAAM2b,cAAc,CACvB1a,MAAOsa,EACPD,OAAQ,GACRkjB,gBAAgB,QAGT,WAAWn0B,KAAK/K,EAAQoC,aAAgB,wBAAwB2I,KAAK/K,EAAQoC,aACtF6Z,EACEha,IAAAC,cAAA,YACG,kBAAkB,eAEpB,OAAI,eAEJ,SAAS,eAET,OAAI,eAEJ,gBAGHlB,KAAKN,MAAM2b,cAAc,CACvB1a,MAAOsa,EACPD,OAAQA,EACRkjB,gBAAgB,MAlYpBl+B,KAAKG,MAAQ,CACX8P,YAAY,GAIhBtB,oBACE,MAAM,YACJ4M,GACEvb,KAAKN,MAET,GAAK6b,EAMHvb,KAAKC,SAAS,CACZgQ,YAAY,QAPE,CAChB,IAAIxH,EAAS,CACX+S,OAAQ,IAEVxb,KAAK+P,QAAQtH,GAAQ,IAQzBgT,mBAAmBC,GACjB,MAAM,aACJjJ,EAAY,YACZ8I,GACEvb,KAAKN,MAET,IAAK6b,GACE9I,IAAiBiJ,EAAUjJ,aAAe,CAC7C,IAAIhK,EAAS,CACX+S,OAAQ/I,EAAakJ,YAEvB3b,KAAK+P,QAAQtH,IAsWnBjI,SACE,MAAM,KACJ2P,EAAI,WACJV,EAAU,aACVqL,EAAY,YACZS,EAAW,WACXK,EAAU,eACVf,GACE7a,KAAKN,OAEH,WACJuQ,GACEjQ,KAAKG,MAET,OACEc,IAAAC,cAAA,WACED,IAAAC,cAAA,OAAKE,UAAW,WAAUwa,EAAa,cAAgB,KACrD3a,IAAAC,cAACqX,GAAU,CACT5X,MAAO,CAAEa,MAAO,UAChBgX,gBAAiB,YACjBpS,oBAAoB,kBACpBqS,eAAgB,OAChBxU,kBAAoBpE,GAClBG,KAAK0a,kBAAkB7a,GACzB6Y,kBAAmB,SACnBvS,sBAAsB,aACtBtC,oBAAqBA,IAAM4L,MAE5BQ,GACChP,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAAA,OAAKE,UAAU,aAIjB6O,GACAjQ,KAAKkW,YAAY/F,EAAM2K,IAEvBS,IACCtL,GACDE,GACAnQ,KAAK4a,gBAAgBzK,EAAM0K,EAAgBC,MAQxCqjB,UChcf,MAAMtd,GAAWrf,IACRA,EAGHsf,GAAYtf,GAA2B,kBAAVA,GAAgC,OAAVA,EAEnDi9B,GAAUj9B,GAAWA,aAAiBk9B,MAAkB,OAAVl9B,EAEvCuf,GAAWA,CAAC5gB,EAAO6gB,KAC9B,IAAIhO,EAAO,CAMT,CACEtQ,KAAM,gBACNlB,MAAOrB,EAAMw+B,cACbzd,MAAO,YAET,CACExe,KAAM,UACNlB,MAAOrB,EAAMy+B,QACb1d,MAAO,YAET,CACExe,KAAM,YACNlB,MAAOrB,EAAMqK,UACb0W,MAAO,YAET,CACExe,KAAM,UACNlB,MAAOrB,EAAMsK,QACbyW,MAAO,YAET,CACExe,KAAM,YACNlB,MAAOrB,EAAMmhB,UACbJ,MAAO,YAET,CACExe,KAAM,iBACNlB,MAAOrB,EAAMohB,eACbL,MAAO,YAET,CACExe,KAAM,cACNlB,MAAOrB,EAAMuD,YACbwd,MAAO,qBAET,CACExe,KAAM,qBACNlB,MAAOrB,EAAMqhB,mBACbN,MAAO,kBAET,CACExe,KAAM,mBACNlB,MAAOrB,EAAM0+B,iBACb3d,MAAO,yBAET,CACExe,KAAM,iBACNlB,MAAOrB,EAAM2+B,eACb5d,MAAO,oBAET,CACExe,KAAM,iBACNlB,MAAOrB,EAAM2+B,eACb5d,MAAO,yBAET,CACExe,KAAM,mBACNlB,MAAOrB,EAAM0+B,iBACb3d,MAAO,mBAET,CACExe,KAAM,iBACNlB,MAAOrB,EAAM2+B,eACb5d,MAAO,0BAET,CACExe,KAAM,oBACNlB,MAAOrB,EAAMshB,UACbP,MAAO,mBAET,CACExe,KAAM,oBACNlB,MAAOrB,EAAMmhB,UACbJ,MAAO,mBAET,CACExe,KAAM,qBACNlB,MAAOrB,EAAMwhB,gBACbT,MAAO,mBAET,CACExe,KAAM,sBACNlB,MAAOrB,EAAMyhB,iBACbV,MAAO,mBAET,CACExe,KAAM,uBACNlB,MAAOrB,EAAMuhB,aACbR,MAAO,2BAET,CACExe,KAAM,oBACNlB,MAAOrB,EAAMshB,UACbP,MAAO,mBAET,CACExe,KAAM,oBACNlB,MAAOrB,EAAMmhB,UACbJ,MAAO,mBAET,CACExe,KAAM,qBACNlB,MAAOrB,EAAMwhB,gBACbT,MAAO,mBAET,CACExe,KAAM,sBACNlB,MAAOrB,EAAMyhB,iBACbV,MAAO,mBAET,CACExe,KAAM,uBACNlB,MAAOrB,EAAMuhB,aACbR,MAAO,4BAIP3E,EAAS,GAoHb,OAnHAvJ,EAAKnH,QAAS7M,IACZ,KAAIgiB,EAAe3P,QAAQrS,EAAQ0D,OAAS,GAA5C,CA4BA,GAzBsB,aAAlB1D,EAAQkiB,QACNL,GAAQ7hB,EAAQwC,SAClB+a,EAAOvd,EAAQ0D,MAAQ,YAGrB1D,EAAQwC,OAASxC,EAAQwC,MAAMG,QAAU3C,EAAQwC,MAAMG,OAAS,IAClE4a,EAAOvd,EAAQ0D,MAAQ,aAIL,sBAAlB1D,EAAQkiB,QACNL,GAAQ7hB,EAAQwC,SAClB+a,EAAOvd,EAAQ0D,MAAQ,YAGrB1D,EAAQwC,OAASxC,EAAQwC,MAAMqgB,OAAOlgB,OAAS,IACjD4a,EAAOvd,EAAQ0D,MAAQ,aAGL,mBAAlB1D,EAAQkiB,OACNliB,EAAQwC,QAAUxC,EAAQwC,MAAMG,QAAU3C,EAAQwC,MAAMG,OAAS,IACnE4a,EAAOvd,EAAQ0D,MAAQ,YAIL,0BAAlB1D,EAAQkiB,MAAmC,CAC7C,IAAI6d,EAAiB,IAAI3iB,KAAKpd,EAAQwC,OAAOw9B,UACzCC,EAAgB,IAAI7iB,KAAKjc,EAAMqK,WAAWw0B,WAC1CD,GAAoBA,EAAiBE,IACvC1iB,EAAOvd,EAAQ0D,MAAQ,2CAI3B,GAAsB,qBAAlB1D,EAAQkiB,MAA8B,CACnB,IAAI9E,KAAKpd,EAAQwC,OAAOw9B,UACzB,IAAI5iB,KAAKjc,EAAM0+B,kBAAkBG,YAEnDziB,EAAOvd,EAAQ0D,MAAQ,wCAI3B,GAAsB,oBAAlB1D,EAAQkiB,MAA6B,CAClB,IAAI9E,KAAKpd,EAAQwC,OAAOw9B,UACzB,IAAI5iB,KAAKjc,EAAM2+B,gBAAgBE,YAEjDziB,EAAOvd,EAAQ0D,MAAQ,wCAI3B,GAAsB,2BAAlB1D,EAAQkiB,MAAoC,CAC9C,IAAI6d,EAAiB,IAAI3iB,KAAKpd,EAAQwC,OAAOw9B,UACzCC,EAAgB,IAAI7iB,KAAKjc,EAAM++B,kBAAkBF,UACjDC,GAAkBF,EAAiBE,IACrC1iB,EAAOvd,EAAQ0D,MAAQ,wCAI3B,GAAsB,oBAAlB1D,EAAQkiB,OACPJ,GAAS9hB,EAAQwC,OAAO,EAED,IADFmf,GAAkB3hB,EAAQwC,SAE5C+a,EAAOvd,EAAQ0D,MAAQ,qBAK/B,GAAsB,oBAAlB1D,EAAQkiB,OACPJ,GAAS9hB,EAAQwC,OAAO,EAEH,IADFgf,GAAkBxhB,EAAQwC,SAE5C+a,EAAOvd,EAAQ0D,MAAQ,+DAK7B,GAAsB,4BAAlB1D,EAAQkiB,QACLL,GAAQ7hB,EAAQwC,OAAQ,CAC3B,IAAIsgB,EAAgB,GACpB9iB,EAAQwC,MAAMqK,QAAQkW,IACpB,GAAGjB,GAASiB,IAAS0c,GAAO1c,GAAM,EAEX,IADDpB,GAAkBoB,IAEpCD,EAAcvQ,KAAKwQ,MAIrBD,EAAcngB,OAAS,IACzB4a,EAAOvd,EAAQ0D,MAAQ,qBAK7B,GAAsB,4BAAlB1D,EAAQkiB,QACLL,GAAQ7hB,EAAQwC,OAAQ,CAC3B,IAAIsgB,EAAgB,GACpB9iB,EAAQwC,MAAMqK,QAAQkW,IACpB,GAAGjB,GAASiB,IAAS0c,GAAO1c,GAAM,EAEb,IADDvB,GAAkBuB,IAEpCD,EAAcvQ,KAAKwQ,MAInBD,EAAcngB,OAAS,IACzB4a,EAAOvd,EAAQ0D,MAAS,gEAOzB6Z,GAGIyF,GAAiB,CAC5BhH,OAAQ,KACRiH,cAAe,KACfC,YAAa,GACbid,eAAgB,GAChBR,cAAe,GACfC,QAAS,GACTp0B,UAAW,GACXC,QAAS,GACTy0B,iBAAkB,KAClBE,eAAgB,KAChBP,iBAAkB,GAClBC,eAAgB,GAChB5N,SAAU,GACVmO,SAAU,GACV30B,SAAU,GACV40B,SAAU,GACVC,MAAO,GACP77B,YAAa,GACb87B,uBAAwB,GACxBC,uBAAwB,GACxBje,mBAAoB,GACpBF,UAAW,GACXG,UAAW,GACXW,oBAAqB,GACrBV,aAAc,GACdH,eAAgB,GAChBc,yBAA0B,GAC1BC,QAAS,GACTX,gBAAiB,GACjBC,iBAAkB,GAClB8d,gBAAiB,GACjBC,iBAAkB,GAClBC,kBAAkB,GAGPC,GAAoB1vB,IACxB,CACL6K,OAAQ7K,EAAKjI,OAAO1G,MACpB8f,UAAW3Y,eAAIwH,EAAM,sBAAuB,MAC5CsR,UAAW9Y,eAAIwH,EAAM,sBAAuB,MAC5CwuB,cAAexuB,EAAKgG,KAAK3U,MACzB29B,eAAgBhvB,EAAKquB,eAAeh9B,MACpCkJ,SAAUyF,EAAK2vB,SAASt+B,MACxB89B,SAAUnvB,EAAK4vB,SAASv+B,MACxB0vB,SAAU/gB,EAAK6vB,SAASx+B,MACxB0gB,YAAa/R,EAAK8vB,YAAYz+B,MAC9Bo9B,QAASzuB,EAAK+vB,QAAQ1+B,MACtBgJ,UAAW2F,EAAKiG,UAAU5U,MAC1BiJ,QAAS0F,EAAKkG,QAAQ7U,MACtB09B,iBAAkB/uB,EAAKgwB,iBAAiB3+B,MACxC49B,eAAgBjvB,EAAKiwB,eAAe5+B,MACpCq9B,iBAAkB1uB,EAAKkwB,iBAAiB7+B,MACxCs9B,eAAgB3uB,EAAKmwB,eAAe9+B,MACpC69B,SAAUlvB,EAAKowB,SAAS/+B,MACxB+9B,MAAOpvB,EAAKqwB,MAAMh/B,MAClBkC,YAAayM,EAAKiI,YAAY5W,MAC9B6gB,yBAA0BlS,EAAKyS,sBAAsBhhB,IAClDkK,GAAOA,EAAG+W,UAAUrhB,OAEvBg+B,uBAAwB72B,eAAIwH,EAAM,+BAAgC,MAClEsvB,uBAAwB92B,eACtBwH,EACA,oCACA,MAEFqR,mBAAoBrR,EAAK2S,eAAelhB,IACrCkK,GAAOA,EAAGiX,WAAWvhB,OAExB4gB,oBAAqBjS,EAAK6S,aAAaphB,IAAKkK,GAAOA,EAAGqM,GAAG3W,OACzDkgB,aAAcvR,EAAK6S,aAAaphB,IAAKkK,IAC5B,CACLpJ,KAAMoJ,EAAGqK,KAAK3U,MACdY,GAAI0J,EAAGqM,GAAG3W,MACVqF,IAAKiF,EAAGmX,IAAIzhB,SAGhBmgB,gBAAiBhZ,eAAIwH,EAAM,4BAA6B,MACxDyR,iBAAkBjZ,eAAIwH,EAAM,6BAA8B,MAC1DuvB,gBAAiBvvB,EAAKswB,gBAAgBj/B,MACtCm+B,iBAAkBxvB,EAAKuwB,iBAAiBl/B,MACxCo+B,iBAAkBzvB,EAAKwwB,iBAAiBn/B,QAI/B0hB,GAAiBC,IAC5B,MAAM/O,EAAW,IAAIC,SACfggB,EAAW,IAAIC,mBAoFrB,OAlFAtb,OAAOC,KAAKkK,GAAUtX,SAAQ,SAAU7J,GACtC,GAAY,WAARA,EAAJ,CAGA,IACW,cAARA,GACS,qBAARA,GACQ,mBAARA,GACQ,YAARA,GACQ,qBAARA,GACQ,mBAARA,IACFmhB,EAASnhB,GAET,OAAOoS,EAASE,OAAOtS,EAAK,IAAIoa,KAAK+G,EAASnhB,IAAMohB,eAGtD,GAAY,gBAARphB,EAAJ,CAKA,GAAY,wBAARA,EAYF,OAAImhB,EAAuB,aAAExhB,OAAS,EAC7BwhB,EAAuB,aAAEvhB,IAAKC,GACnCuS,EAASE,OAAOtS,EAAKH,EAAKO,GAAKP,EAAKO,GAAK,YAG7C,EAGF,GAAY,iBAARJ,EAeJ,MAAY,uBAARA,GAAgCmhB,EAASnhB,GAAKL,OACzCwhB,EAASnhB,GAAKJ,IAAK0hB,GAAalP,EAASE,OAAOtS,EAAKshB,IAGlD,6BAARthB,GAAsCmhB,EAASnhB,GAAKL,OAC/CwhB,EAASnhB,GAAKJ,IAAKyhB,GAAcjP,EAASE,OAAOtS,EAAKqhB,IAGnD,cAARrhB,GAA+B,cAARA,GAA+B,qBAARA,GAAsC,oBAARA,EACjD,kBAAlBmhB,EAASnhB,GACXoS,EAASE,OAAOtS,EAAKmhB,EAASnhB,SAEvC,EAGU,mBAARA,GAA4BmhB,EAASnhB,GAAKL,OACrCwhB,EAASnhB,GAAKJ,IAAK2hB,GAAYnP,EAASE,OAAOtS,EAAKuhB,IAGjD,YAARvhB,GAAqBmhB,EAASnhB,GAAKL,OAC9BwhB,EAASnhB,GAAKJ,IAAKoZ,GAAW5G,EAASE,OAAOtS,EAAKgZ,IAGrD5G,EAASE,OAAOtS,EAAKmhB,EAASnhB,IA9BnC,GAAImhB,EAASnhB,GAAKL,OAAS,EAAG,CAE5B,OADsBwhB,EAASnhB,GAAKsQ,OAAOzQ,GAAQA,EAAKgB,MACjCjB,IAAK+d,GAASvL,EAASE,OAAOtS,EAAK2d,UAlC5DvL,EAASE,OAAOtS,EAAKqyB,EAASE,OAAOpR,EAASnhB,SAiE3CoS,GCrYHsP,GAAiBC,KAAS,CAC9BC,OAAQA,IAAM,oDACdC,QAASA,IAAM,OAGjB,MAAM+c,WAAuB3/B,IAAMzB,UACjCC,YAAYC,GACVC,MAAMD,GAAO,KA+DfqQ,QAAUC,UACR,IACE,IAAIE,QxBjFsBzH,EwBiFY,CAAEuS,UxB/ErCtS,EAAQC,IAD+B,8BACjB,CAAEF,OAAQ,IAAKA,MwBgFxC,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,IAAI0wB,EAAgBhB,GAAiB3vB,EAASC,KAAK2wB,WAEnD9gC,KAAKC,SAAS,CACZgkB,KAAM,OACN8c,uBAAuB,EACvB3sB,SAAU,IAAKpU,KAAKG,MAAMiU,YAAaysB,GACvCG,oBACEH,EAAc3B,mBAAoB2B,EAAczB,gBAGlD6B,sBACEJ,EAAcpB,yBACZoB,EAAcrB,wBAGlBrb,oBACE0c,EAAcnf,cAAgBmf,EAAcnf,aAAa/f,OAAS,GAGpEi+B,iBAAkBiB,EAAcjB,oBAGpC,MAAO//B,GACPmR,QAAQtQ,MAAM,6BAA+Bb,GAC7CG,KAAKC,SAAS,CACZ8gC,uBAAuB,IxB5GCt4B,OwB4H5B,KAEFgb,yBAA2BzT,UACzB,IACE,IAAIE,QAAiBuT,KACrB,GAAwB,MAApBvT,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,IAAIiU,EAAmBlU,EAASC,KAAKkU,WACjCC,EAAkBpU,EAASC,KAAKoU,qBAChCC,EAAe,GACfC,EAAc,GACdL,EAAiBziB,OAAS,GAC5ByiB,EAAiBvY,QAASC,GACxB0Y,EAAajT,KAAK,CAChB7O,KAAMoJ,EAAG4Y,aAAaljB,MACtBA,MAAOsK,EAAGiX,WAAWvhB,SAIvB8iB,EAAgB3iB,OAAS,GAC3B2iB,EAAgBzY,QAASC,GACvB2Y,EAAYlT,KAAK,CACf7O,KAAMoJ,EAAG6Y,YAAYnjB,MACrBA,MAAOsK,EAAG+W,UAAUrhB,SAI1BxB,KAAKC,SAAS,CACZ2kB,WAAYJ,EACZK,SAAUJ,KAGd,MAAO5kB,GACPmR,QAAQtQ,MACN,sCAAwCb,EAAEqQ,SAASe,cA2BvD,KAEF6T,mBAAqB9U,UACnB,IACE,IAAIE,QAAiBsT,KACG,MAApBtT,EAASzC,QAAkByC,EAASC,MAClCD,EAASC,KAAKsE,UAAUjT,OAC1BxB,KAAKC,SAAS,CACZ8kB,gBAAiBpc,eAAIuH,EAASC,KAAM,kBAAmB,IACvD6U,WAAYrc,eAAIuH,EAASC,KAAM,4BAA6B,IAC5D4wB,uBAAuB,IAI7B,MAAOlhC,GACPmR,QAAQtQ,MAAM,iCAAmCb,EAAEqQ,SAASe,YAC5DjR,KAAKC,SAAS,CACZ8gC,uBAAuB,MAQ3B,KAEF/hB,cAAgB,CAAC5c,EAAIqC,EAAOwgB,KAC1B,MAAM,SAAE7Q,GAAapU,KAAKG,MAC1B,IAAIU,EACAP,EAAW,GACf,GAAIwI,WAEAjI,EADEokB,EACQnc,SAAS8C,iBAAiB,IAAIxJ,mBAE9B0G,SAAS8C,iBAAiB,IAAIxJ,oBAEtCvB,GACF,IAAK,IAAI0S,EAAI,EAAGA,EAAI1S,EAAQc,OAAQ4R,IAClCjT,EAASiR,KAAK1Q,EAAQ0S,GAAG/R,OAI/BxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACH,CAAC3P,GAAQnE,MAGb,KAEF2e,aAAe,CAACiG,EAAUzgB,EAAO5D,KAC/B,MAAM,SAAEuT,GAAapU,KAAKG,MAC1BH,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACH,CAAC3P,GAAQygB,EAAWrkB,EAAQe,IAAKkK,GAAOA,EAAGtK,OAAS,OAGxD,KAEF0/B,oBAAuB1/B,IACrB,MAAM,SAAE4S,GAAapU,KAAKG,MACtBiU,EAASoN,mBAAmBnQ,QAAQ7P,IAAU,EAChDxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHoN,mBAAoBpN,EAASoN,mBAAmBlP,OAC7CxG,GAAOA,IAAOtK,MAKrBxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHoN,mBAAoB,IAAIpN,EAASoN,mBAAoBhgB,OAI3D,KAEF2jB,wBAA0B,CAAC3jB,EAAO4jB,KAChC,MAAM,SAAEhR,EAAQ,gBAAE2Q,GAAoB/kB,KAAKG,MAE3C,GAAc,MAAVqB,EAAe,CACjB,IAAI6jB,EAAY,GAChBN,EAAgBnjB,IAAK4Z,IACnBA,EAAO8J,UAAU1jB,IAAK2jB,IACpBF,EAAU9T,KAAKgU,EAAMC,YAAYhkB,WAIrCxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHmN,eAAgB6D,EAAkBC,EAAY,WAGzCjR,EAASmN,eAAelQ,QAAQ7P,IAAU,EACnDxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHmN,eAAgBnN,EAASmN,eAAejP,OAAQxG,GAAOA,IAAOtK,MAIlExB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHmN,eAAgB,IAAInN,EAASmN,eAAgB/f,OAInD,KAEFikB,iBAAoBjkB,IAClBxB,KAAKC,SAAS,CACZmU,SAAU,IACLpU,KAAKG,MAAMiU,YACX5S,MAGP,KAEFkkB,aAAe1V,UACb,IAIIE,EAJAyV,EAAY5E,GACd/gB,KAAKG,MAAMiU,SACS,SAApBpU,KAAKG,MAAM8jB,KAAkB,CAAC,oBAAsB,IAuBtD,OApByC,IAArCjL,OAAO4M,QAAQD,GAAWhkB,QAC5B3B,KAAKC,SAAS,CACZ0lB,YACAE,kBAAkB,EAClBC,iBAAkB,sDAEpB9lB,KAAK+lB,mBACL7V,EAAW,CACT8V,WAAW,KAGbhmB,KAAKC,SAAS,CACZ0lB,cAEFzV,QAAiBlQ,KAAKimB,WAAWC,KAAM3J,IACrC,GAAIA,EAAOyJ,UACT,MAAO,CAAEA,WAAW,MAInB9V,GACP,KAEF+V,SAAWjW,UACT,MAAM,SAAEoE,EAAQ,KAAE6P,EAAI,KAAE1iB,EAAI,gBAAE4/B,GAAoBnhC,KAAKG,MACvD,IAAIimB,GAAa,IAAIhK,MAAOiK,oBAE5B,IAAIlW,EAAO+S,GAAc,IACpB9O,EACHkS,WAAYF,IAGdpmB,KAAK+lB,mBAEL/lB,KAAKC,SACH,CACE4F,cAAc,EACd0gB,YAAY,GAEdvmB,KAAKwmB,gBAGP,IACE,IAAItW,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,IAnBQ,wCAoBRrE,OACA1H,OAAQ,CACNlH,UACa,SAAT0iB,EACA,CAAEjJ,OAAQ5G,EAAS4G,QACnB,CAAEA,OAAQmmB,EAAgBxlB,aAEhC8K,OAAQ,CAAEC,QAAS,CAAE,eAAgB,0BAGvC,GAAIxW,EAAU,CACZ,GAAIA,EAASC,KAAKsE,UAAUjT,OAAkB,QAATyiB,EAAgB,CACnD,MAAMmd,EAAgBlxB,EAASC,KAAKkxB,cAC9BC,EAAiBF,EAAc,GAAGG,WAClCjf,EAAUtiB,KAAK8mB,eAAesa,GACpC,IAAIra,EA+CJ,OA7CA/mB,KAAKgnB,mBAAmBoa,GAEpBlxB,EAASC,KAAK8W,cAAgB/W,EAASC,KAAK8W,aAAazlB,QAC3DulB,EAAkB7W,EAASC,KAAK8W,aAAazlB,OAGlB,IAAzB4/B,EAAcz/B,QAA0C,IAA1B2/B,EAAe3/B,OAC/C3B,KAAKC,SACH,CACEmU,SAAU,IACLA,EACHkO,WAEFzc,cAAc,EACd0gB,YAAY,EACZV,kBAAkB,EAClB2b,oBAAqBF,EAAe,GAAGl5B,WAAW5G,MAElDigC,sBAAuBrtB,EAASuqB,cAChCyC,cAAeA,EACfra,gBAAiB,GACjBoa,gBAAiBnhC,KAAK0hC,mBAAmBN,IAE3CphC,KAAKwmB,gBAGPxmB,KAAKC,SACH,CACEmU,SAAU,IACLA,EACHkO,WAEFzc,cAAc,EACd0gB,YAAY,EACZV,kBAAkB,EAClB2b,oBAAqB,GACrBC,sBAAuB,GACvBL,cAAeA,EACfra,kBACAoa,gBAAiBnhC,KAAK0hC,mBAAmBN,IAE3CphC,KAAKwmB,gBAIF,CACLR,WAAW,GAER,GAAI9V,EAASC,KAAKsE,UAAUjT,OAAkB,SAATyiB,EAAiB,CAC3D,MAAMmd,EAAgBlxB,EAASC,KAAKkxB,cAAc,GAC5Che,EAAY+d,EAAcG,WAAW,GACrCC,EAAsBne,EAAUjb,WAAW5G,MAE/C6hB,EAAUlb,MAAM3G,MAAc4/B,EAAcp5B,OAAOxG,MAgBrD,OAfAxB,KAAKC,SACH,CACEmU,SAAU,IACLA,EACHkO,QAAS,CAAC,GAAGe,EAAUnb,OAAO1G,QAEhCqkB,kBAAkB,EAClBhgB,cAAc,EACd0gB,YAAY,EACZib,sBACAC,sBAAuBrtB,EAASuqB,eAElC3+B,KAAKwmB,gBAGA,CACLR,WAAW,GAcb,OAXAhmB,KAAKC,SACH,CACE4F,cAAc,EACd0gB,YAAY,EACZV,kBAAkB,EAClBC,iBACE,uBAAyB5V,EAASC,KAAKuE,QAAQlT,OAEnDxB,KAAKwmB,gBAGA,CACLR,WAAW,IAIjB,MAAOnmB,GAOP,OANAmR,QAAQtQ,MAAM,yBAA2Bb,EAAEqQ,SAASe,YAEpDjR,KAAKC,SAAS,CACZ4lB,kBAAkB,EAClBC,iBAAkB,yBAA2BjmB,EAAEqQ,SAASe,aAEnD,CACL+U,WAAW,KAyFf,KAEFsB,WAAatX,UACX,MAAM,SACJoE,EAAQ,KACR6P,EAAI,oBACJud,EAAmB,sBACnBC,GACEzhC,KAAKG,MAET,IAAIgQ,EAAO+S,GAAc,CACvBZ,QAAkB,SAAT2B,EAAkB,CAAC,GAAG7P,EAAS4G,QAAY5G,EAASkO,UAE/DtiB,KAAK+lB,mBAEL,IACE,IAAI7V,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,IATQ,0CAURrE,OACAsW,OAAQ,CAAEC,QAAS,CAAE,eAAgB,0BAGvC,GAAIxW,EACF,OAAIA,EAASC,KAAKsE,UAAUjT,OAC1BxB,KAAKC,SAAS,CACZ4lB,kBAAkB,IAEb,CACLG,WAAW,EACXwb,oBAA8B,SAATvd,EAAkBud,EAAsB,GAC7DC,sBAAgC,SAATxd,EAAkBwd,EAAwB,MAGnEzhC,KAAKC,SAAS,CACZ4lB,kBAAkB,EAClBC,iBACE,2BAA6B5V,EAASC,KAAKuE,QAAQlT,QAEhD,CACLwkB,WAAW,IAIjB,MAAOnmB,GAMP,OALAmR,QAAQtQ,MAAM,2BAA6Bb,EAAEqQ,SAASe,YACtDjR,KAAKC,SAAS,CACZ4lB,kBAAkB,EAClBC,iBAAkB,2BAA6BjmB,EAAEqQ,SAASe,aAErD,CACL+U,WAAW,KAYf,KAEFD,iBAAmB,KACjB,IAAI3W,EACAtG,WACFsG,EAAYtG,SAAS9D,cAAc,oCAC/BoK,GACFA,EAAU3C,UAGd,KAEFua,mBAAsBoa,IACpBA,EAAcx/B,IAAKC,IACjB,MAAM,OAAEmG,EAAM,WAAEu5B,GAAe1/B,EAC/B0/B,EAAW3/B,IAAKyhB,IACdmE,KAAWC,UAAU,CACnBA,UAAW,CACT3iB,MAAO,oBACP8jB,cAAe5oB,KAAKG,MAAMoB,KAC1BogC,gBAAiB35B,GAAUA,EAAOxG,MAClCogC,kBACEve,GAAaA,EAAUlb,OAASkb,EAAUlb,MAAM3G,OAEpDomB,cAAe,mBAIrB,KAEF8Z,mBAAsBN,IACpB,IAAID,EAAkB,GAkBtB,OAhBIC,EAAcz/B,OAAS,GACzBy/B,EAAcx/B,IAAKC,IACjB,MAAM,WAAE0/B,GAAe1/B,EAEnB0/B,EAAW5/B,OAAS,GACtB4/B,EAAW3/B,IAAKC,IACd,MAAM,OAAEqG,GAAWrG,EAEfqG,GAAUA,EAAO1G,OACnB2/B,EAAgB5vB,KAAKrJ,EAAO1G,WAO/B2/B,GACP,KAEFra,eAAkBe,IAChB,IAAIvF,EAAU,GAMd,OALAuF,EAAWjmB,IAAKkmB,IACdA,EAAOyZ,WAAW3/B,IAAKyhB,IACrBf,EAAQ/Q,KAAK8R,EAAUnb,OAAO1G,WAG3B8gB,GACP,KAEFyF,kBAAoB,KAClB/nB,KAAKC,SAAS,CACZ2F,WAAW,KAEb,KAEFoiB,YAAc,KACZ,MAAM,cAAEoZ,EAAa,UAAEx7B,EAAS,gBAAEmhB,GAAoB/mB,KAAKG,OAErD,cAAEw+B,GAAkB3+B,KAAKG,MAAMiU,UAAY,GAEjD,OACEnT,IAAAC,cAAA,OAAKE,UAAU,mBACZggC,GAAiBA,EAAcz/B,OAAS,GACvCV,IAAAC,cAAC+F,EAAY,CACXI,aAAc,UACdC,YAAayf,EACbxf,YAAa65B,EACb55B,qBAAqB,aACrBI,iBAAkB+2B,EAClBl3B,SAAU,SACVC,WAAa7H,IACX,IAAIgiC,EAAmB9iC,YACrBc,EAAEC,OACF,eAEF,GAAI+hC,EAAkB,CACpB,IAAI5Z,EAAY4Z,EAAiB78B,cAC/B,yBAEEijB,GACFA,EAAUxb,UAIhB9E,iBAAkBA,IAAM3H,KAAKC,SAAS,CAAE2F,WAAW,QAK3D,KAEF4gB,eAAiB,KACf,MAAM,aACJ3gB,EAAY,WACZ0gB,EAAU,oBACVib,EAAmB,sBACnBC,GACEzhC,KAAKG,MACTH,KAAKN,MAAM8mB,eACT3gB,EACA0gB,EACAib,EACAC,EACAzhC,KAAK0lB,aACL1lB,KAAK+nB,kBACL/nB,KAAKsnB,aAEP,KAEFY,qBAAwBnD,IACtB,MAAM,KAAExjB,EAAI,SAAE6S,GAAapU,KAAKG,MAEhC,OACEc,IAAAC,cAAA,OAAKE,UAAU,yBACbH,IAAAC,cAAA,OAAKE,UAAU,iCACbH,IAAAC,cAAA,SAAOE,UAAU,eACd,gBAAgBG,EAAKqI,0CAExB3I,IAAAC,cAAA,OAAKE,UAAU,iCACbH,IAAAC,cAAA,OACEE,UAAU,oCACVK,QAASA,IAAMzB,KAAKmlB,wBAAwB,KAAK,IAEhD,cAEHlkB,IAAAC,cAAA,OACEE,UAAU,oCACVK,QAASA,IAAMzB,KAAKmlB,wBAAwB,KAAK,IAEhD,kBAIPlkB,IAAAC,cAAA,OAAKE,UAAU,kCACZ2jB,EAAgBnjB,IAAI,CAAC4Z,EAAQ1Z,KAC5B,MAAM,WAAEqY,EAAU,WAAEgO,EAAU,UAAE7C,GAAc9J,EAC9C,OACEva,IAAAC,cAAA,OAAKc,IAAK,6BAA6BF,EAASV,UAAU,OACxDH,IAAAC,cAAA,OAAKE,UAAU,uBACbH,IAAAC,cAAA,OAAKE,UAAU,+BACZ+mB,GAAcA,EAAW3mB,MACxBP,IAAAC,cAAA,OACE2G,IAAK,cAAc/F,EACnB+E,IAAKiB,IACLC,WAAUogB,EAAW3mB,MACrBJ,UAAU,aAGZH,IAAAC,cAAA,OAAKE,UAAU,cAGnBH,IAAAC,cAAA,OAAKE,UAAU,gCACZ+Y,EAAW3Y,QAGhBP,IAAAC,cAAA,OAAKE,UAAU,uBACZkkB,EAAU1jB,IAAI,CAAC2jB,EAAOzjB,KACrB,MAAM,YAAE0jB,EAAW,UAAE4C,GAAc7C,EACnC,OACEtkB,IAAAC,cAAC8K,EAAY,CACXhK,IAAK,SAASwjB,EAAYhkB,SAASM,IACnCN,MAAOgkB,EAAYhkB,MACnBO,MAAOqmB,EAAU5mB,MACjByK,QACEmI,EAASmN,eAAelQ,QAAQmU,EAAYhkB,QAC3C,EAEH0K,iBAAmB1K,GACjBxB,KAAKmlB,wBAAwB3jB,GAE/BiB,OAAK,aAzxBzBzC,KAAKG,MAAQ,CACX8jB,KAAM,MACNre,WAAW,EACX+f,UAAW,GACXZ,gBAAiB,GACjBH,WAAY,GACZC,SAAU,GACVzQ,SAAU,IAAK4N,IACfyQ,gBAAgB,EAChBuO,kBAAkB,EAClBC,oBAAoB,EACpB9c,kBAAkB,EAClBoC,YAAY,EACZ1gB,cAAc,EACdggB,kBAAkB,EAClBC,iBAAkB,GAClBuC,mBAAoB,GACpByZ,uBAAwB,KACxBC,qBAAsB,KACtBC,6BAA8B,GAC9BC,6BAA8B,GAC9BT,oBAAqB,GACrBC,sBAAuB,GACvBL,cAAe,GACfL,uBAAuB,EACvBha,gBAAiB,GACjBoa,gBAAiB,GACjBnc,WAAY,KACZ4a,kBAAkB,EAClBF,gBAAiB,GACjBC,iBAAkB,GAClBhe,gBAAiB,GACjBC,iBAAkB,GAClBoD,WAAY,MAIhBrW,oBACE,MAAM,OAAEqM,EAAM,cAAEknB,GAAkBliC,KAAKN,MAEvC,IAAI6B,EAAO,GAGTA,EADE2gC,EACKA,EAAcC,OAAO,GAAGC,cAAgBF,EAAcjvB,MAAM,GAE5D6d,GAAgB,QAAQlkB,QAAQ,kBAAmB,IAG5D5M,KAAKC,SAAS,CACZsB,OACAkxB,gBAAgB,IAGdzX,EACFhb,KAAK+P,QAAQiL,GAEbhb,KAAK8kB,qBAEP9kB,KAAKyjB,2BACLzjB,KAAKwmB,iBA2uBPhmB,SACE,MAAM,OACJwa,EAAS,MACPhb,KAAKN,OACH,UACJimB,EAAS,SACTvR,EAAQ,WACRwQ,EAAU,KACVrjB,EAAI,UACJqE,EAAS,eACT6sB,EAAc,gBACd1N,EAAe,SACfF,EAAQ,iBACRmc,EAAgB,mBAChBC,EAAkB,iBAClB9c,EAAgB,iBAChB0B,EAAgB,iBAChBC,EAAgB,mBAChBuC,EAAkB,uBAClByZ,EAAsB,qBACtBC,EAAoB,6BACpBC,EAA4B,6BAC5BC,EAA4B,sBAC5BlB,EAAqB,gBACrBI,EAAe,WACfnc,EAAU,iBACV4a,EAAgB,gBAChBF,EAAe,iBACfC,EAAgB,gBAChBhe,EAAe,iBACfC,GACE5hB,KAAKG,MACT,OACEc,IAAAC,cAAA,OACEE,UAAW,0CACDG,GAA+B,UAAvBA,EAAKqI,cACjB,WACA,aAGLhE,GAAa5F,KAAKgoB,cAClBnC,GAAoB5kB,IAAAC,cAACoe,GAAgB,CAAC5e,MAAOolB,IAC9C7kB,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAACgC,EAAS,CACRvC,OAAK,EACLY,KAAK,OACLT,YAAgBS,EAAH,SACbQ,MAAM,iBACNP,MAAO4S,EAASuqB,cAChBx7B,UAAQ,EACRzC,MAAOilB,EAAUgZ,cACjBt7B,cAAgBs7B,GACd3+B,KAAKylB,iBAAiB,CAAEkZ,qBAI9B19B,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAmBG,EAAH,aACjCN,IAAAC,cAAA,OACEE,UAAW,6DACGukB,EAAUnb,WAAamb,EAAUlb,QACzC,YACA,4BAINxJ,IAAAC,cAAA,OAAKE,UAAU,uBACbH,IAAAC,cAACyd,GAAQ,CACPxb,UAAQ,EACRpB,MAAM,aACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXnnB,MAAO4S,EAAS5J,WAAa,IAAI4R,KAAKhI,EAAS5J,WAC/C9J,MAAOilB,EAAUnb,UACjBlK,SAAU8T,EAAS5J,WAAa,IAAI4R,KAAKhI,EAAS5J,WAClDnI,SAAWmI,GAAcxK,KAAKylB,iBAAiB,CAAEjb,gBAEnDvJ,IAAAC,cAAA,OAAKE,UAAU,wBACfH,IAAAC,cAACyd,GAAQ,CACPxb,UAAQ,EACRpB,MAAM,WACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXnnB,MAAO4S,EAAS3J,SAAW,IAAI2R,KAAKhI,EAAS3J,SAC7C/J,MAAOilB,EAAUlb,QACjBnK,SAAU8T,EAAS3J,SAAW,IAAI2R,KAAKhI,EAAS3J,SAChDpI,SAAWoI,GAAYzK,KAAKylB,iBAAiB,CAAEhb,eAGnDxJ,IAAAC,cAAA,OAAKE,UAAU,cAAa,iCAE9BH,IAAAC,cAACme,GAAQ,CACPpT,QAAS+0B,EACTj/B,MAAO,oCACPmK,iBAAmB80B,IACjBhhC,KAAKC,SAAS,CACZ+gC,qBAEEA,EACFhhC,KAAKylB,iBAAiB,CACpByZ,iBAAkB4C,EAClB1C,eAAgB2C,IAGlB/hC,KAAKylB,iBAAiB,CACpByZ,iBAAkB,KAClBE,eAAgB,UAKvB4B,GACC//B,IAAAC,cAAA,OAAKE,UAAU,oCACbH,IAAAC,cAAA,OAAKE,UAAU,uBACbH,IAAAC,cAACyd,GAAQ,CACP5c,MAAM,eACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXjoB,MAAOilB,EAAUuZ,iBACjB19B,MACE4S,EAAS8qB,kBACT,IAAI9iB,KAAKhI,EAAS8qB,kBAEpB5+B,SACE8T,EAAS8qB,kBACT,IAAI9iB,KAAKhI,EAAS8qB,kBAEpB78B,SAAW68B,IACTl/B,KAAKC,SAAS,CACZ6hC,uBAAwB5C,IAE1Bl/B,KAAKylB,iBAAiB,CAAEyZ,wBAG5Bj+B,IAAAC,cAAA,OAAKE,UAAU,wBACfH,IAAAC,cAACyd,GAAQ,CACP5c,MAAM,gBACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXnnB,MACE4S,EAASgrB,gBAAkB,IAAIhjB,KAAKhI,EAASgrB,gBAE/C1+B,MAAOilB,EAAUlb,QACjBnK,SACE8T,EAASgrB,gBAAkB,IAAIhjB,KAAKhI,EAASgrB,gBAE/C/8B,SAAW+8B,IACTp/B,KAAKC,SAAS,CACZ8hC,qBAAsB3C,IAExBp/B,KAAKylB,iBAAiB,CAAE2Z,yBASnC79B,GAA+B,UAAvBA,EAAKqI,eACZ3I,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAmBG,EAAH,YACjCN,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLX,KAAK,WACLE,YAAY,mBACZiB,MAAM,WACNP,MAAO4S,EAASirB,SAChB3+B,MAAOilB,EAAU0Z,SACjBh8B,cAAgBg8B,GAAar/B,KAAKylB,iBAAiB,CAAE4Z,eAGvDp+B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,YACZiB,MAAM,WACNnB,KAAK,OACLY,MAAO4S,EAAS1J,SAChBnH,MAAM,MACNF,cAAgBqH,GAAa1K,KAAKylB,iBAAiB,CAAE/a,eAGvDzJ,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,SACZiB,MAAM,WACNnB,KAAK,WACLY,MAAO4S,EAASkrB,SAChB/7B,MAAM,MACNF,cAAgBi8B,GAAat/B,KAAKylB,iBAAiB,CAAE6Z,eAGvDr+B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,SACLX,KAAK,QACLE,YAAY,WACZiB,MAAM,QACNqB,UAAQ,EACR5B,MAAO4S,EAASmrB,MAChBh8B,MAAM,MACNF,cAAgBk8B,GAAUv/B,KAAKylB,iBAAiB,CAAE8Z,aAKxDt+B,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SAAOE,UAAU,gBAAmBG,EAAH,gBAChCA,GAA+B,UAAvBA,EAAKqI,eACZ3I,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,cACZiB,MAAM,cACNwB,MAAM,QACNC,OAAO,SACPhC,MAAO4S,EAAS+qB,eAChB77B,UAAW,EACXD,cAAgB87B,GACdn/B,KAAKylB,iBAAiB,CAAE0Z,qBAI9Bl+B,IAAAC,cAACwd,GAAiB,CAChB3c,MAAM,YACNjB,YAAY,8BACZqC,UAAQ,EACR3B,MAAO4S,EAASwqB,QAChBt7B,UAAW,IACX5C,MAAOilB,EAAUiZ,QACjBv7B,cAAgBu7B,GAAY5+B,KAAKylB,iBAAiB,CAAEmZ,cAErDmC,GACC9/B,IAAAC,cAACwiB,GAAc,CACbvgB,UAAQ,EACRI,MAAM,MACNxB,MAAO,cACPjB,YAAY,wBACZwd,aAAclK,EAAS1Q,YACvBhD,MAAOilB,EAAUjiB,YACjBL,cAAgBK,GACd1D,KAAKylB,iBAAiB,CAAE/hB,gBAE1BshB,WAAYA,EACZhK,OAAQA,EACR4N,cAAernB,IAInBN,IAAAC,cAAA,OAAKE,UAAU,0BACbH,IAAAC,cAAA,SAAOE,UAAU,uBACd,wBAEHH,IAAAC,cAACme,GAAQ,CACPpT,QAASg1B,EACTl/B,MAAO,yDACPmK,iBAAmB+0B,IACjBjhC,KAAKC,SAAS,CACZghC,uBAGED,EACFhhC,KAAKylB,iBAAiB,CACpBga,uBAAwBuC,EACxBxC,uBAAwByC,IAI1BjiC,KAAKylB,iBAAiB,CACpBga,uBAAwB,GACxBD,uBAAwB,QAK/ByB,GACChgC,IAAAC,cAAA,WACED,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,mCACZiB,MAAM,gBACNP,MAAO4S,EAASqrB,uBAChBp8B,cAAgBo8B,IACdz/B,KAAKC,SAAS,CACZ+hC,6BAA8BvC,IAEhCz/B,KAAKylB,iBAAiB,CAAEga,8BAI5Bx+B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,uCACZiB,MAAM,aACNP,MAAO4S,EAASorB,uBAChBn8B,cAAgBm8B,IACdx/B,KAAKC,SAAS,CACZgiC,6BAA8BzC,IAEhCx/B,KAAKylB,iBAAiB,CAAE+Z,iCAOpCv+B,IAAAC,cAAA,OAAKE,UAAU,mBACZG,GAA+B,UAAvBA,EAAKqI,eACd3I,IAAAC,cAAAD,IAAAE,SAAA,KACAF,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,4BACjCH,IAAAC,cAACme,GAAQ,CACPpT,QAAS2zB,EACT79B,MAAO,+HACPmK,iBAAmB0zB,IACjB5/B,KAAKC,SAAS,CACZ2/B,qBAEEA,EACF5/B,KAAKylB,iBAAiB,CACpB9D,gBAAiBA,EACjBC,iBAAkBA,EAClB8d,gBAAiBA,EACjBC,iBAAkBA,EAClBC,iBAAkBA,KAIpB5/B,KAAKylB,iBAAiB,CACpB9D,gBAAiB,GACjBC,iBAAkB,GAClB8d,gBAAiB,GACjBC,iBAAkB,GAClBC,kBAAkB,EAClBd,eAAgB,GAChBD,iBAAkB,KAGpB7+B,KAAKC,SAAS,CACZy/B,gBAAiB,GACjBC,iBAAkB,SAKzBC,GAA2C,UAAvBr+B,EAAKqI,eACxB3I,IAAAC,cAAA,OAAKE,UAAU,iBACfH,IAAAC,cAAA,OAAKE,UAAU,oCACbH,IAAAC,cAAA,OAAKE,UAAU,uBACfH,IAAAC,cAAA,OAAKE,UAAU,mBACfH,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,kBACjCH,IAAAC,cAAA,OAAKE,UAAU,8BACfH,IAAAC,cAAA,SAAGD,IAAAC,cAAA,SAAG,QAAQ,gEAA6DD,IAAAC,cAAA,cAAQ,6BAAkC,IAACD,IAAAC,cAAA,WAAM,wDAEhID,IAAAC,cAAA,OACEE,UAAW,6DAETukB,EAAUkZ,kBAAoBlZ,EAAUmZ,eACpC,YACA,4BAIN79B,IAAAC,cAAA,OAAKE,UAAU,uBACbH,IAAAC,cAACyd,GAAQ,CACP5c,MAAM,uBACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXnnB,MAAO4S,EAASyqB,kBAAoB,IAAIziB,KAAKhI,EAASyqB,kBACtDn+B,MAAOilB,EAAUkZ,iBACjBv+B,SAAU8T,EAASyqB,kBAAoB,IAAIziB,KAAKhI,EAASyqB,kBACzDx8B,SAAWw8B,GAAqB7+B,KAAKylB,iBAAiB,CAAEoZ,uBAE1D59B,IAAAC,cAAA,OAAKE,UAAU,wBACfH,IAAAC,cAACyd,GAAQ,CACP5c,MAAM,qBACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXnnB,MAAO4S,EAAS0qB,gBAAkB,IAAI1iB,KAAKhI,EAAS0qB,gBACpDp+B,MAAOilB,EAAUmZ,eACjBx+B,SAAU8T,EAAS0qB,gBAAkB,IAAI1iB,KAAKhI,EAAS0qB,gBACvDz8B,SAAWy8B,GAAmB9+B,KAAKylB,iBAAiB,CAAEqZ,sBAG1D79B,IAAAC,cAAA,OAAKE,UAAU,cAAa,kCAG9BH,IAAAC,cAAA,OAAKE,UAAU,cACfH,IAAAC,cAAA,OAAKE,UAAW,oBACZukB,EAAUhE,iBAAmBgE,EAAU0c,oBAAsB1c,EAAU2c,mBACnE,YACA,KAEFrhC,IAAAC,cAACue,GAAe,CACdle,KAAK,YACLQ,MAAO,oBACPie,WACE,kFAEFC,cAAe,8BACfC,cAAe,+BACfC,gBACE,+DAEFzf,MAAOilB,EAAUhE,iBAAmBgE,EAAU0c,oBAAsB1c,EAAU2c,mBAC9E9gC,MAAO4S,EAASuN,gBAChBjC,iBAAmBiC,GACjB3hB,KAAKylB,iBAAiB,CAAE9D,wBAK5B1gB,IAAAC,cAAA,OAAKE,UAAW,oBAClBukB,EAAU/D,kBAAoB+D,EAAU4c,qBAAuB5c,EAAU6c,oBACrE,YACA,KACA,qBAAkBvhC,IAAAC,cAACue,GAAe,CAChCle,KAAK,YACLQ,MAAO,uBACPie,WACE,qFAEFC,cAAe,8BACfC,cAAe,+BACfC,gBACE,gEAEFzf,MAAOilB,EAAU/D,kBAAoB+D,EAAU4c,qBAAuB5c,EAAU6c,oBAChFhhC,MAAO4S,EAASwN,iBAChBlC,iBAAmBkC,GACjB5hB,KAAKylB,iBAAiB,CAAE7D,wBAI9B3gB,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,QACZiB,MAAM,mBACNP,MAAO4S,EAASsrB,gBAChBr8B,cAAgBq8B,IACd1/B,KAAKC,SAAS,CACZy/B,gBAAiBA,IAEnB1/B,KAAKylB,iBAAiB,CAACia,uBAG3Bz+B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,QACZiB,MAAM,oBACNP,MAAO4S,EAASurB,iBAChBt8B,cAAgBs8B,IACd3/B,KAAKC,SAAS,CACZ0/B,iBAAkBA,IAEpB3/B,KAAKylB,iBAAiB,CAAEka,6BAShC/a,GAAcA,EAAWjjB,OAAS,GACjCkjB,GAAYA,EAASljB,OAAS,IAC7BijB,GAAcA,EAAWjjB,OAAS,GAChCV,IAAAC,cAAA,WACED,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAAC4d,GAAW,CACV/c,MAAM,WACNK,GAAG,iBACHe,UAAQ,EACRzC,MAAOilB,EAAUnE,mBACjB3gB,QAAS+jB,EACTngB,MAAM,qBACNnE,SAAU8T,EAASoN,mBACnBzC,KAAK,0CACLC,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GACrDwa,aAAcA,CAACiG,EAAUzgB,EAAO5D,IAC9Bb,KAAKif,aAAaiG,EAAUzgB,EAAO5D,MAIzCI,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAACke,GAAgB,CACfrd,MAAM,WACNK,GAAG,gBACHe,UAAQ,EACRzC,MAAOilB,EAAUnE,mBACjB3gB,QAAS+jB,EACTngB,MAAM,qBACNnE,SAAU8T,EAASoN,mBACnBxC,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GAAO,GAC5Dwa,aAAcA,CAACiG,EAAUzgB,EAAO5D,IAC9Bb,KAAKif,aAAaiG,EAAUzgB,EAAO5D,OAKhDgkB,GAAYA,EAASljB,OAAS,GAC7BV,IAAAC,cAAA,WACED,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAAC4d,GAAW,CACV/c,MAAM,qBACNK,GAAG,gBACHvB,QAASgkB,EACTpgB,MAAM,2BACNnE,SAAU8T,EAASiO,yBACnBtD,KAAK,0CACLC,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GACrDwa,aAAcA,CAACiG,EAAUzgB,IACvBzE,KAAKif,aAAaiG,EAAUzgB,EAAOogB,MAIzC5jB,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAACke,GAAgB,CACfrd,MAAM,qBACNK,GAAG,eACHvB,QAASgkB,EACTpgB,MAAM,2BACNnE,SAAU8T,EAASiO,yBACnBrD,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GAAO,GAC5Dwa,aAAcA,CAACiG,EAAUzgB,EAAO5D,IAC9Bb,KAAKif,aAAaiG,EAAUzgB,EAAO5D,QAO/CI,IAAAC,cAAA,OAAKE,UAAW,oBAAmBukB,EAAUrE,WAAaqE,EAAUoD,mBAAqBpD,EAAUkD,kBAC/F,YACA,KAEDkY,GACC9/B,IAAAC,cAACue,GAAe,CACdtc,UAAQ,EACR5B,KAAK,OACLQ,MAAO,aACPie,WACE,+EAEFC,cAAe,8BACfC,cAAe,+BACfC,gBACE,gEAEFzf,MAAOilB,EAAUrE,WAAaqE,EAAUkD,mBAAqBlD,EAAUoD,kBACvEvnB,MAAO4S,EAASkN,UAChB5B,iBAAmB4B,GACjBthB,KAAKylB,iBAAiB,CAAEnE,iBAMhCrgB,IAAAC,cAAA,OAAKE,UAAW,oBAAmBukB,EAAUlE,WAAakE,EAAUqD,mBAAqBrD,EAAUmD,kBAC/F,YACA,KAEDiY,GACC9/B,IAAAC,cAACue,GAAe,CACd1d,MAAO,kBACPie,WAAY,wCACZC,cAAe,6BACfC,cAAe,8BACfC,gBACE,+DAEFzf,MAAOilB,EAAUlE,WAAakE,EAAUmD,mBAAqBnD,EAAUqD,kBACvExnB,MAAO4S,EAASqN,UAChB/B,iBAAmB+B,GACjBzhB,KAAKylB,iBAAiB,CAAEhE,iBAMhCxgB,IAAAC,cAAA,OAAKE,UAAW,oBAAmBukB,EAAUsD,sBAAwBtD,EAAUuD,qBAC3E,YACA,KACE,aAAUjoB,IAAAC,cAAA,SAAOE,UAAU,gBAAgB,iBAC/CH,IAAAC,cAACme,GAAQ,CACPpT,QAASkY,EACTpiB,MAAO,uCACPmK,iBAAmBiY,IACjBnkB,KAAKC,SAAS,CACZkkB,qBAEEA,EACFnkB,KAAKylB,iBAAiB,CAAE/D,aAAc2G,IAEtCroB,KAAKylB,iBAAiB,CAAE/D,aAAc,QAI3CyC,GACCljB,IAAAC,cAAC2a,GAAgB,CACfra,MAAO4S,EAASsN,aAChBhhB,MAAOilB,EAAUsD,sBAAwBtD,EAAUuD,qBACnDpN,kBAAoB4F,IAClB1hB,KAAKC,SAAS,CACZooB,mBAAoB3G,IAEtB1hB,KAAKylB,iBAAiB,CAAE/D,qBAM/BqD,GAAmBA,EAAgBpjB,OAAS,GAC3CV,IAAAC,cAAA,OACEE,UAAW,oBAAmB+/B,EAAgBx/B,OAAS,EAAI,YAAc,KAGzEV,IAAAC,cAAA,SAAOE,UAAU,gBAAmBG,EAAH,eAChCvB,KAAKkoB,qBAAqBnD,MAQxB6b,UCz8Cf,MAAM6B,WAA8CxhC,IAAMzB,UACxDC,YAAYC,GACVC,MAAMD,GAAO,KA2Gf6pB,mBAAqB,KACnB,MAAM,WACJC,GACExpB,KAAKN,MAAM4Y,QAAU,GAEzB,IAAImR,EAAmB,CACrB,CACEjoB,MAAO,YACPO,MAAO,gBAGPynB,GAAcA,EAAW7nB,OAAS,GACpC6nB,EAAW5nB,IAAI,CAACC,EAAMC,KACpB,MAAM,KACJqU,GACEtU,EAAKyW,OACTmR,EAAiBlY,KAAK,CAAE/P,MAAO2U,EAAK3U,MAAOO,MAAOoU,EAAK3U,UAI3DxB,KAAKC,SAAS,CAAEwpB,sBACjB,KAEDvX,aAAe,KACTlJ,OAAOc,YAAc,IACvB9J,KAAKC,SAAS,CACZqpB,UAAU,IAGZtpB,KAAKC,SAAS,CACZqpB,UAAU,KAGf,KAEDoZ,OAAUR,IACR,IAAI3gC,EAAO,GAETA,EADE2gC,GAGKpR,GAAgB,QAAQlnB,cAAcgD,QAAQ,kBAAmB,IAE1E5M,KAAKC,SAAS,CAAE4pB,QAAStoB,KACzB,KAEFyU,mBAAqB,KACnB,MAAM,MACJrV,EAAK,IACL6T,GACExU,KAAKG,MAAMupB,kBAAoB,IAE7B,WACJ5U,EAAU,aACVzN,GACErH,KAAKG,MAAMwpB,eAAiB,IAE1B,cACJtO,EAAa,iBACb1T,GACE3H,KAAKG,MAIT,OAFAwP,GAAchI,GAAoB0T,GAGhCpa,IAAAC,cAAC0D,EAAS,CACR4B,WAAS,EACTZ,UAAW+B,EACX5F,MAAOsF,IAA8B1G,GAAgB,IACrD+E,aAAcA,IAAM1F,KAAKC,SAAS,CAAE0H,kBAAkB,KAErDA,GACC1G,IAAAC,cAACyF,EAAY,CACXhG,MAAO0G,IAA8B1G,GAAgB,IACrDkG,IAAKiO,IAA0BN,GAAY,QAKpD,KAEDoV,gBAAkB,KAChB,MAAM,cACJsY,EAAgB,MACdliC,KAAKN,OAAS,IAEZ,MACJiB,EAAK,QACLkpB,EAAO,OACP7O,EAAM,WACNlG,EAAU,aACVjP,EAAY,WACZ0gB,EAAU,YACVuD,EAAW,eACXC,EAAc,cACdC,EAAa,eACbkU,GACEl+B,KAAKG,MAAMwpB,eAAiB,IAE1B,cACJtO,EAAa,kBACb4O,EAAiB,SACjBX,EAAQ,iBACR3hB,GACE3H,KAAKG,OAEH,gBACJ+pB,GACElqB,KAAKN,MAWT,OATK2b,GAAiB4O,GAAqBC,GACzClqB,KAAKC,SAAS,CACZgqB,mBAAmB,GAEnB,IAAMC,GAAgB,IAG1Bva,GAAehI,GAAoB0T,GAGjCpa,IAAAC,cAAC0D,EAAS,CACRgB,UAAWyV,EACXtZ,MAAOpB,EACP+E,aAAcA,IACZ1F,KAAKC,SAAS,CAAEob,eAAe,IAEjC1V,eAAgB,sBAChBE,aAAcA,EACdE,QAAS,aACTE,eAAgBA,IAAMjG,KAAK2iC,gBAAgB7Y,GAC3ClmB,aAAc,WAAUs6B,IAAmB5U,EAAW,SAAM,IAC5DzlB,oBAAqBA,KACfiR,EACF9U,KAAKC,SAAS,CACZ0H,kBAAkB,IAGpBoiB,KAIJhmB,qBAAsBwiB,EACtBviB,WAAY,SACZoC,oBAAqB,uBACrBnC,kBAAmBA,IAAMjE,KAAK2iC,gBAAgB3Y,GAAe,GAC7D7lB,mBAAoBoiB,GAEnBlL,GACCpa,IAAAC,cAAC0/B,GAAc,CACbsB,cAAeA,EACflnB,OAAQA,EACRwL,eAAgBA,CAAC3gB,EAAc0gB,EAAYzR,EAAYzN,EAAcyiB,EAAaC,EAAgBC,KAChGhqB,KAAKylB,iBACH5f,EACA0gB,EACAzR,EACAzN,EACAyiB,EACAC,EACAC,QAOb,KAEDvE,iBAAmB,CAAC5f,EAAc0gB,EAAYzR,EAAYzN,EAAcyiB,EAAaC,EAAgBC,KACnGhqB,KAAKC,SAAS,CACZ0pB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACd9jB,eACA0gB,aACAuD,cACAC,iBACAC,gBACAlV,aACAzN,mBAGL,KAEDs7B,gBAAkB,CAACvY,EAAeC,KAC5BA,EACFD,IAAgBlE,KAAM3J,IACpB,GAAIA,GAAUA,EAAOyJ,UAAW,CAC9B,IAAIwb,EAAsB,GACxBC,EAAwB,GACtBllB,EAAOilB,sBACTA,EAAsBjlB,EAAOilB,qBAE3BjlB,EAAOklB,wBACTA,EAAwBllB,EAAOklB,uBAGjC,IAAInX,EAAkBxhB,SAASyhB,eAAe,aAC1CC,EAAuB1hB,SAASyhB,eAAe,aAC/CE,EAA0B3hB,SAAS9D,cAAc,0CACjDslB,GACFA,EAAgB7d,QAEd+d,EACFA,EAAqB/d,QACZge,IACTA,EAAwBC,cAAgB,GAG1C1qB,KAAKC,SAAS,CACZ0pB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACdgB,eAAgB,kCAChB7V,WAAY0sB,EACZn6B,aAAco6B,GAEhBpmB,eAAe,EACfuP,oBAAoB,EACpBnY,aAAc,GACdmwB,0BAA2BpB,EAC3BqB,4BAA6BpB,EAC7BxX,mBAAmB,GAEnB,KACE1gB,IACAgC,EAAiB,4BAOzB6e,IAAgBlE,KAAM3J,IACpB,GAAIA,GAAUA,EAAOyJ,UAAW,CAC9B,IAAIsE,EAAkBxhB,SAASyhB,eAAe,aAC1CC,EAAuB1hB,SAASyhB,eAAe,aAC/CE,EAA0B3hB,SAAS9D,cAAc,0CACjDslB,GACFA,EAAgB7d,QAEd+d,EACFA,EAAqB/d,QACZge,IACTA,EAAwBC,cAAgB,EACxC1qB,KAAKC,SAAS,CACZwS,aAAc,MAGlBzS,KAAKC,SAAS,CACZwS,aAAc,GACdwX,mBAAmB,GAEnB,IAAM1e,EAAiB,4BAKhC,KAEDwf,aAAe,KACb,MAAM,QACJlB,EAAO,gBACPmB,EAAe,iBACfC,EAAgB,iBAChBC,GACElrB,KAAKG,MAET,OACEc,IAAAC,cAACyD,EAAK,KACJ1D,IAAAC,cAACuC,EAAW,CACV1B,MAAO,CAAEP,MAAO,UAAUqoB,MAC1BnmB,YAAa,CAAElC,MAAO,+CAA0CqoB,iCAChEjpB,KAAK,UACL+C,YAAY,UACZC,aAAa,SACbG,qBAAsBknB,EACtBpnB,oBAAqBA,IAAM7D,KAAKC,SAAS,CAAEua,iBAAiB,IAC5DxW,WAAY,UAAU6lB,EACtB5lB,kBAAmBA,IAAMjE,KAAK8iC,gBAAgB9X,GAC9C9mB,gBAAgB,MAChBC,mBAAoB+mB,MAI1B,KAEF4X,gBAAkB9yB,UAChB,MAAM,YACJuL,GAAc,EAAK,gBACnB2O,GACElqB,KAAKN,OAAS,IAEZ,GACJ0C,EAAE,KACFM,EAAI,WACJ+X,EAAU,OACVhN,GACEud,GAEE,QACJnB,EAAO,UACPuB,GACEprB,KAAKG,MACTH,KAAKC,SAAS,CACZgrB,kBAAkB,EAClBC,kBAAkB,IAEpB,IAAIP,EAAiB,GACrB,IACE,IAAIza,QXxaqBzH,EWwaY,CAAEuS,OAAQ5Y,GXva5CsG,EAAQC,IAAI,yBAA0B,CAAEF,OAAQ,IAAKA,MWwaxD,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KACtC,GAAID,EAASC,KAAKsE,UAAUjT,MAG1B,GAFAmpB,EAAiB,kCAEZpP,EAgDHvb,KAAKC,SACH,CACEua,iBAAiB,EACjBoQ,oBAAoB,EACpBK,kBAAkB,EAClBC,kBAAkB,EAClBvB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACdgB,mBAGJ,KACEphB,IACI2gB,GACFA,GAAgB,GAElB3e,EAAiB,6BAhEL,CAChB,IAAI8f,EAAY,GACa,SAAzB5d,EAAO7D,cACTyhB,EAAY,iBAEoB,cAAzB5d,EAAO7D,cACdyhB,EAAY,sBAEoB,sBAAzB5d,EAAO7D,cACdyhB,EAAY,6BAEoB,UAAzB5d,EAAO7D,cACdyhB,EAAY,kBAEoB,aAAzB5d,EAAO7D,cACdyhB,EAAY,qBAEoB,cAAzB5d,EAAO7D,gBACdyhB,EAAY,uBAGd,IAAIC,EACFtrB,KAAKG,MAAM0pB,GAASwB,GAAW/Y,OAAOzQ,GAC7BA,EAAKqG,OAAO1G,QAAUY,GAGjCpC,KAAKC,SACH,CACE,CAACD,KAAKG,MAAM0pB,SAAU,IACjB7pB,KAAKG,MAAM0pB,GACd,CAACwB,GAAYC,GAEf9Q,iBAAiB,EACjBoQ,oBAAoB,EACpBK,kBAAkB,EAClBC,kBAAkB,EAClBvB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACdgB,kBAEFS,UAAWA,EAAY,GAEzB,KACE7hB,IACAgC,EAAiB,8BAyBvBof,EAAiB,2BAEjB3qB,KAAKC,SAAS,CACZua,iBAAiB,EACjBoQ,oBAAoB,EACpBK,kBAAkB,EAClBC,kBAAkB,EAClBvB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACdgB,mBAGF,IAAMphB,UAKVohB,EAAiB,2BAEjB3qB,KAAKC,SAAS,CACZua,iBAAiB,EACjBoQ,oBAAoB,EACpBjB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACdgB,mBAGF,IAAMphB,KAGV4f,KAGF,MAAOtpB,GACLmR,QAAQtQ,MAAM,2BAA6Bb,EAAEqQ,SAASe,YACtD0Z,EAAiB,0BACjB3qB,KAAKC,SAAS,CACZua,iBAAiB,EACjBoQ,oBAAoB,EACpBK,kBAAkB,EAClBC,kBAAkB,EAClBvB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACdgB,mBAGF,IAAMphB,KAER4f,KXliByB1gB,OW8kB3B,KAEF8iB,oBAAsB,CAAChqB,EAAMC,KACd,WAATD,EACFvB,KAAKC,SAAS,CACZ6a,aAActZ,IAEE,WAATD,GACTvB,KAAKC,SAAS,CACZwS,aAAwB,cAAVjR,EAAwB,GAAKA,EAC3CqqB,eAAgBrqB,IAGpB+J,EAAiB,uBACjBhC,KACD,KAEDiiB,sBAAyBhC,IACvB,IAAIiC,EAAiB,GAoBrB,OAfAA,EAAela,KAJC,CACd4G,GAAI,CAAE3W,MAAO,aACb2U,KAAM,CAAE3U,MAAO,iBAIjBgoB,EAAW5nB,IAAKC,IACd,MAAM,KACJsU,GACEtU,EAAKyW,OAET,GAAInC,GAAQA,EAAK3U,MAAO,CACtB,IAAIkqB,EAAe,CACjBvT,GAAI,CAAE3W,MAAO2U,EAAK3U,OAClB2U,KAAM,CAAE3U,MAAO2U,EAAK3U,QAEtBiqB,EAAela,KAAKma,MAGjBD,GACR,KAEDE,mBAAsBnC,IACpB,MAAM,WACJ/Z,EAAU,aACVmc,EAAY,iBACZnC,EAAgB,eAChBoC,EAAc,SACdvC,GACEtpB,KAAKG,MAET,OACEc,IAAAC,cAAC+N,GAAY,CACXQ,WAAYA,EACZF,cAAeA,IAAMvP,KAAKC,SAAS,CAAEwP,YAAY,KAEjDxO,IAAAC,cAAA,OAAKE,UAAU,yCACbH,IAAAC,cAAA,OAAKE,UAAU,wBACZ,oBAEHH,IAAAC,cAAC+W,GAAW,CACV1X,gBAAgB,YAChBM,QAAS+qB,EACTrpB,eAAe,mBACfF,SAAWD,GAAOpC,KAAKurB,oBAAoB,SAAUnpB,GACrDK,OAAK,KAGTxB,IAAAC,cAAA,OAAKE,UAAU,yCACbH,IAAAC,cAAA,OAAKE,UAAU,wBACZ,oBAEFooB,GACCA,EAAW7nB,OAAS,IACjB6nB,EAAW7nB,OAAS,GAAK2nB,EACxBroB,IAAAC,cAACsW,IAAM,CACLnV,SAAWoV,GAAWzX,KAAKurB,oBAAoB,SAAU9T,EAAOjW,OAChEkW,aAAc,CAAElW,MAAO,YAAaO,MAAO,eAC3ClB,QAAS4oB,EACThpB,MAAQA,IAAK,IACRA,EACHkX,OAAQ,IACHlX,EAAMkX,OACTC,QAAS,UACTC,UAAW,aAGfC,cAAc,EACdC,cAAe,IACfC,cAAc,SAGhB/W,IAAAC,cAAC+W,GAAW,CACV1X,gBAAgB,YAChBM,QAASb,KAAKwrB,sBAAsBhC,GACpCjnB,eAAe,6BACfF,SAAWD,GAAOpC,KAAKurB,oBAAoB,SAAUnpB,GACrDK,OAAK,QAOpB,KAEDqpB,cAAiBC,IACf,MAAM,YACJxQ,GAAc,EAAK,cACnB6lB,EAAgB,GAAE,QAClBpV,GAAU,GACRhsB,KAAKN,OAAS,IAEZ,QACJmqB,EAAO,MACP/kB,EAAK,MACLi+B,EAAK,aACLjoB,EAAY,aACZrI,EAAY,UACZ2Y,GACEprB,KAAKG,MAET,IAAI6iC,EAAgB,GAChB9oB,GAAkB,EAyFtB,OAxF2B,SAAvB8R,EAAQrQ,YAA0BoQ,GAA0D,SAAtCA,EAAiBvqB,MAAMma,cAC/EzB,GAAkB,GAEhB2P,GAAuB,UAAZA,IACbmZ,EACE/hC,IAAAC,cAAC48B,GAAM,CACL3tB,KAAOixB,GAAiBA,EAAcz/B,OAAS,EAAK,CAAEq8B,oBAAqBoD,GAAkBt8B,EAC7FgW,aAAcA,EACdrI,aAAcA,EACd9K,iBAAkB+hB,GAChB1pB,KAAKC,SAAS,CACZ0H,kBAAkB,EAClB+hB,mBACAC,cAAe,IACV3pB,KAAKG,MAAMwpB,cACd7U,WAAY,GACZzN,aAAc,MAIpBgU,cAAesO,GACb3pB,KAAKC,SAAS,CAAEob,eAAe,EAAMsO,kBAEvCnP,gBAAiBwQ,GACfhrB,KAAKC,SAAS,CACZua,iBAAiB,EACjBwQ,kBACArB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACd7U,WAAY,GACZzN,aAAc,MAIpBoI,WAAYA,KACVzP,KAAKC,SAAS,CAAEwP,YAAY,KAE9BqJ,WAAYhU,GAAS9E,KAAKC,SAAS,CAAE6E,UACrCoV,gBAAiBA,EACjBqB,YAAaA,EACbrC,eAAgBkS,GAAaprB,KAAKC,SAAS,CAAEmrB,cAC7CxP,WAAyB,GAAbwP,EACZvQ,eAAgBuQ,KAGlBvB,GAAuB,UAAZA,IACbmZ,EACE/hC,IAAAC,cAACi9B,GAAM,CACLhuB,KAAOixB,GAAiBA,EAAcz/B,OAAS,EAAK,CAAEq8B,oBAAqBoD,GAAkB2B,EAC7FjoB,aAAcA,EACdrI,aAAcA,EACd9K,iBAAkB+hB,GAChB1pB,KAAKC,SAAS,CACZ0H,kBAAkB,EAClB+hB,mBACAC,cAAe,IACV3pB,KAAKG,MAAMwpB,cACd7U,WAAY,GACZzN,aAAc,MAIpBgU,cAAesO,GACb3pB,KAAKC,SAAS,CAAEob,eAAe,EAAMsO,kBAEvCnP,gBAAiBwQ,GACfhrB,KAAKC,SAAS,CACZua,iBAAiB,EACjBwQ,kBACArB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACd7U,WAAY,GACZzN,aAAc,MAIpBoI,WAAYA,KACVzP,KAAKC,SAAS,CAAEwP,YAAY,KAE9BqJ,WAAYiqB,GAAS/iC,KAAKC,SAAS,CAAE8iC,UACrC7oB,gBAAiBA,EACjBqB,YAAaA,EACbrC,eAAgBkS,GAAaprB,KAAKC,SAAS,CAAEmrB,cAC7CxP,WAAyB,GAAbwP,EACZvQ,eAAgBuQ,KAId4X,GAtxBRhjC,KAAKG,MAAQ,CACXkX,iBAAiB,EACjB6U,eAAe,EACfrC,QAAS,KACT/kB,MAAO,KACPi+B,MAAO,KACPp7B,kBAAkB,EAClB0T,eAAe,EACfb,iBAAiB,EACjBkP,iBAAkB,KAClBC,cAAe,KACfqB,gBAAiB,KACjBvb,YAAY,EACZmc,aAAc,CACZ,CACEzT,GAAI,CACF3W,MAAO,aAET2U,KAAM,CACJ3U,MAAO,QAGX,CACE2W,GAAI,CACF3W,MAAO,mBAET2U,KAAM,CACJ3U,MAAO,UAGX,CACE2W,GAAI,CACF3W,MAAO,kBAET2U,KAAM,CACJ3U,MAAO,SAGX,CACE2W,GAAI,CACF3W,MAAO,8BAET2U,KAAM,CACJ3U,MAAO,sBAGX,CACE2W,GAAI,CACF3W,MAAO,uBAET2U,KAAM,CACJ3U,MAAO,cAGX,CACE2W,GAAI,CACF3W,MAAO,sBAET2U,KAAM,CACJ3U,MAAO,aAGX,CACE2W,GAAI,CACF3W,MAAO,uBAET2U,KAAM,CACJ3U,MAAO,eAIbiR,aAAc,KACdqI,aAAc,YACdmQ,kBAAkB,EAClBC,kBAAkB,EAClBkW,cAAe,GACfwB,0BAA2B,GAC3BC,4BAA6B,GAC7B5Y,mBAAmB,EACnBX,UAAU,EACV8B,UAAW,EACX3B,iBAAkB,GAClBoC,eAAgB,aAIpBld,oBACE,MAAM,cACJuzB,EAAgB,MACdliC,KAAKN,OAAS,GACdoJ,UACF9I,KAAKC,SAAS,CACZoX,iBAAiB,GAEjB,KACErX,KAAKkS,eACLlS,KAAKupB,uBAIPvgB,SACFhJ,KAAK0iC,OAAOR,GACZl5B,OAAOsO,iBAAiB,SAAUtX,KAAKkS,eAmrB3C1R,SACE,MAAM,QACJqpB,EAAO,gBACPrP,EAAe,mBACfoQ,EAAkB,cAClBjB,EAAa,gBACbtS,EAAe,0BACfurB,EAAyB,4BACzBC,GACE7iC,KAAKG,OACH,WACJqpB,EAAU,iBACVuC,GACE/rB,KAAKN,MAAM4Y,QAAU,IAEnB,QACJ0T,GAAU,GACRhsB,KAAKN,OAAS,GAClB,OACEuB,IAAAC,cAAA,OAAKE,UAAW,kCAAiCwpB,EAAqB,sBAAwB,KAC3FpQ,GAAmBxa,KAAK+qB,eACxB1T,GACCrX,KAAKgW,qBAENqB,GACCrX,KAAK4pB,kBAGNvS,GACCmS,GACAA,EAAW7nB,OAAS,GACpB3B,KAAK2rB,mBAAmBnC,GAGzBoB,GACC3pB,IAAAC,cAACgN,GAAc,CACbW,gBAAiB8a,GAAiBA,EAAc7U,WAChD/S,MAAO4nB,EAAcgB,eACrBplB,cAAeA,KACTokB,EAAc7U,YAChB9U,KAAKC,SAAS,CACZ0H,kBAAkB,EAClBgiB,cAAe,IACV3pB,KAAKG,MAAMwpB,cACd7U,WAAY8tB,EACZv7B,aAAcw7B,MAKtBz0B,kBAAoBwc,IAClB5qB,KAAKC,SAAS,CACZ2qB,0BAMR3pB,IAAAC,cAAA,OAAKE,UAAW,wBAA+C,SAAvB4qB,EAAQrQ,YAA0BoQ,GAA0D,SAAtCA,EAAiBvqB,MAAMma,WAA0B,kBAAoB,KAChKkO,GAAW7pB,KAAK8rB,cAAcC,MAM1B0W,UCl3Bf,MAEaQ,GAAmBA,IAEtBv6B,EAAQC,IAD+B,kC,8CCOjD,MAAMu6B,WAAiBjiC,IAAMzB,UAC3BC,YAAYC,GACVC,MAAMD,GAAO,KAqBfyjC,kBAAqBC,GACfA,GAAeA,EAAYzhC,OAE3BV,IAAAC,cAAA,OAAKE,UAAU,yBACZgiC,EAAYxhC,IAAI,CAACC,EAAMC,KACtB,MAAM,KAAEqU,EAAI,IAAEktB,EAAG,KAAEC,GAASzhC,EACtBN,EAAOvB,KAAKujC,YAAYF,GAC9B,OACEpiC,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,kBAAkBF,EACvBuL,QAAU9L,GAAQiiC,MAAQ7jB,KAC1B5d,MAAO,CAAEP,MAAOD,GAChBZ,MAAOwV,EACPzS,YAAa4/B,EACbx1B,OAAQ,CACNlN,KAAM,WACNgC,MAAO,YACPE,QAAS,YAEXgK,gBAAiBA,IACf9D,QAAUq6B,GAAOA,EAAI7hC,OAASwH,OAAOspB,KAAK+Q,EAAI7hC,OAEhDyL,aAAa,OAMX,KACd,KAEF5K,SAAYu7B,IACV59B,KAAKC,SAAS,CAAEgM,QAAS2xB,EAAKrX,YAAaqX,KAC3C,KAEF6F,gBAAkBzzB,UAChBhQ,KAAKC,SAAS,CACZsmB,YAAY,EACZmd,YAAY,IAEd,IACE,MAAMxzB,QD1DoBzH,EC0Da,CAAEuS,UDzDtCtS,EAAQC,IAAI,6BAA8B,CAAEF,OAAQ,IAAKA,MC0D5D,GAAIyH,GAAYA,EAASC,KAAM,CAC7B,MAAM,UAAEsE,EAAS,QAAEX,GAAY5D,EAASC,KACpCsE,GAAaA,EAAUjT,OACzBxB,KAAKC,SAAS,CACZiU,aAAcJ,GAAWA,EAAQtS,MACjCsS,QAAS,8BACT6vB,cAAc,EACd/9B,WAAW,IAEb4hB,KAAWC,UAAU,CACnBA,UAAW,CACT3iB,MAAO,8BAET8iB,cAAe,eAGjB5nB,KAAKC,SAAS,CACZiU,aAAcJ,GAAWA,EAAQtS,MACjC+kB,YAAY,EACZmd,YAAY,EACZ50B,UAAU,EACVlJ,WAAW,SAIf5F,KAAKC,SAAS,CACZiU,aAAc,0CACdqS,YAAY,EACZmd,YAAY,EACZ50B,UAAU,EACVlJ,WAAW,IAGf,MAAO/F,GACPG,KAAKC,SAAS,CACZiU,aAAc,0CACdqS,YAAY,EACZmd,YAAY,EACZ50B,UAAU,EACVlJ,WAAW,IDlGa6C,OCqG5B,KAEFm7B,sBAAwB,CAACxhC,EAAIb,KAC3B,MAAM,oBAAEsiC,GAAwB7jC,KAAKN,OAC/B,aACJikC,EAAY,QACZ13B,EAAO,WACPsa,EAAU,WACVmd,EAAU,QACV5vB,GACE9T,KAAKG,MACT,IACG0jC,GACDtiC,GACAA,GACAA,EAAKC,OACLD,EAAKC,MAAMoI,cAAcyH,QAAQ,eAAiB,EAElD,OAAIyC,EAEA7S,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAAA,OAAKE,UAAU,gBAAgB0S,IAKjC7S,IAAAC,cAAA,OAAKE,UAAU,gBACXuiC,GACA1iC,IAAAC,cAAA,OAAKE,UAAU,uBACbH,IAAAC,cAAC8K,EAAY,CACXvJ,OAAK,EACLV,MAAM,cACNkK,QAASA,EACTC,iBAAkBA,CAAC0xB,EAAK3xB,IAAYjM,KAAKqC,SAAS4J,GAClDzJ,SAAUkhC,IAEZziC,IAAAC,cAACyB,EAAM,CACLC,MAAM,UACNnB,QAASA,IAAMzB,KAAKyjC,gBAAgBrhC,GAAMA,EAAGZ,OAC7CgB,SAAU+jB,GACX,aASb,KAEFud,gBAAkB,KAChB,MAAM,aAAE5vB,EAAY,SAAEpF,GAAa9O,KAAKG,MAExC,OACEc,IAAAC,cAACgN,GAAc,CACbnM,MAAOmS,EACPpF,SAAUA,EACVV,kBAAoBxI,IAClB5F,KAAKC,SAAS,CAAE2F,kBAItB,KAEF29B,YAAe/uB,IACb,MAAMmL,EAAOnL,GAAOA,EAAIhT,MACxB,IAAID,EAAO,KAEX,GAAIoe,EAAM,CACKA,EAAKrO,SAAS,0BAGzB/P,EAAOoe,EAAK1M,MAAM0M,EAAKsO,YAAY,KAAO,GAAGmU,eAIjD,OAAO7gC,GArLPvB,KAAKG,MAAQ,CACXwjC,aAAc,KACd13B,QAAS,KACTsa,YAAY,EACZmd,YAAY,EACZ5vB,QAAS,KACTlO,WAAW,EACXsO,aAAc,MAGlBvF,oBACE,MAAM,aAAEo1B,EAAe,MAAS/jC,KAAKN,MAAMyQ,MAAQ,GACnDnQ,KAAKC,SAAS,CACZ0jC,aAAcI,GAAgBA,EAAaviC,MAC3CyK,QAAS83B,GAAgBA,EAAaviC,MACtCsS,QACEiwB,GAAgBA,EAAaviC,MAAQ,8BAAgC,KAwK3EhB,SACE,MAAM,OAAE0H,EAAM,MAAEkS,EAAK,UAAE4pB,EAAS,QAAEC,EAAO,YAAEC,EAAW,SAAEC,GACtDnkC,KAAKN,MAAMyQ,MAAQ,IACf,UAAEvK,GAAc5F,KAAKG,MAC3B,OACEc,IAAAC,cAAA,OAAKE,UAAU,sBACZwE,GAAa5F,KAAK8jC,kBACnB7iC,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAACsD,OAAI,CAACC,MAAO2V,KAEd4pB,GAAaA,EAAUxiC,OAASwiC,EAAUxiC,MAAMqF,KAC/C5F,IAAAC,cAAA,OAAKE,UAAU,YACbH,IAAAC,cAAA,OACE2G,IAAK,IACHm8B,EAAUxiC,MAAMqG,IAAMm8B,EAAUxiC,MAAMqG,IAAM,kBAE9ChB,IAAKiB,IACLC,WAAUi8B,EAAUxiC,MAAMqF,IAC1BzF,UAAU,cAIf6iC,GAAWA,EAAQziC,OAClBP,IAAAC,cAAA,OAAKE,UAAU,gBACbH,IAAAC,cAACsD,OAAI,CAACC,MAAOw/B,KAGhBjkC,KAAKmjC,kBAAkBe,GACvBlkC,KAAK4jC,sBAAsB17B,EAAQi8B,KAM7BjB,UCvNf,MAAMkB,WAA2CnjC,IAAMzB,UACrDC,YAAYC,GACVC,MAAMD,GAAO,KAsCfqQ,QAAUC,UACR,IACE,MAAME,QAAiB+yB,KACvB,GAAI/yB,GAAYA,EAASC,KAAM,CAC7B,MAAM,cAAEk0B,EAAa,sBAAEC,GAA0Bp0B,EAASC,KAC1DnQ,KAAKC,SAAS,CACZskC,cAAeF,EACfG,sBACEF,GAAyBA,EAAsB9iC,MACjDyO,YAAY,KAGhB,MAAOpQ,GACHA,GAAKA,EAAEqQ,UAAYrQ,EAAEqQ,SAASe,WAChCD,QAAQtQ,MAAM,iCAAmCb,EAAEqQ,SAASe,YACvDD,QAAQuW,IAAI1nB,KAErB,KAEF4kC,WAAaz0B,UACX,IACE,MAAME,QFtE2BzH,EEsEa,CAAEuS,UFpE7CtS,EAAQC,IADsC,wCACxB,CAAEF,OAAQ,IAAKA,MEqExC,GAAIyH,GAAYA,EAASC,KAAM,CAC7B,MAAM,OACJjI,EAAM,MACNkS,EAAK,KACLgC,EACAsoB,MAAOV,EAAS,QAChBC,EAAO,YACPC,EAAW,SACXC,EAAQ,WACRQ,EAAU,aACVZ,GACE7zB,EAASC,KACbnQ,KAAKC,SAAS,CACZ2kC,YAAa,CACX18B,SACAkS,QACAgC,OACA4nB,YACAC,UACAC,cACAC,WACAQ,aACAZ,gBAEFc,mBAAmB,EACnB7pB,OAAQ9S,IAGZ,OAAO,KACP,MAAOrI,GAEP,OADAmR,QAAQtQ,MAAM,iCAAmCb,EAAEqQ,SAASe,YACrD,KFtG0BxI,OEwGnC,KAEFq8B,cAAiB9pB,IACf,MAAM,cAAEupB,GAAkBvkC,KAAKG,MAC/B,IAAIgR,EAAQ,IAAIozB,GAChB,GAAIpzB,EAAO,CACT,IAAIoC,EAAIpC,EAAM4zB,UAAWj5B,GAAOA,EAAG5D,OAAO1G,QAAUwZ,GAChD7J,EAAMoC,IAAMpC,EAAMoC,GAAGoxB,aAAexzB,EAAMoC,GAAGoxB,WAAWnjC,QAC1D2P,EAAMoC,GAAGoxB,WAAWnjC,OAAQ,GAG1B2P,EAAM6zB,KAAMl5B,GAAOA,GAAMA,EAAG64B,aAAe74B,EAAG64B,WAAWnjC,QAEvDxB,KAAKG,MAAMkX,iBACbvO,SAASyhB,eAAe,gBACtBzhB,SAASyhB,eAAe,eAAejlB,WAI/C,KAEF2/B,WAAaj1B,MAAOgL,EAAQkqB,EAAUC,EAAexkC,KACnD,IAAKukC,EAAU,CACb,MAAMh1B,QF1HqBzH,EE0Ha,CAAEuS,UFzHvCtS,EAAQC,IAAI,2BAA4B,CAAEF,OAAQ,IAAKA,ME2HxDyH,GACAA,EAASC,MACTD,EAASC,KAAKsE,WACdvE,EAASC,KAAKsE,UAAUjT,OAExBgmB,KAAWC,UAAU,CACnBA,UAAW,CACT3iB,MAAO,uBACPsgC,4BAA6BD,EAC7BE,oBAAqB1kC,GAEvBinB,cAAe,cFvIQnf,OE2I7B,KAEF68B,gBAAkB,KAChB,MAAM,cACJC,EAAa,kBACbV,EAAiB,YACjBD,EAAW,sBACXJ,GACExkC,KAAKG,OAAS,GAQlB,OANIolC,GACF38B,IAGF+G,GAAc41B,GAGZtkC,IAAAC,cAAC0D,EAAS,CACRgB,UAAW2/B,EACXxjC,MACEd,IAAAC,cAAA,YACG,iBAAiB,eAEjB,OAAI,eAAmB,WAG5BwE,aAAcA,IACZ1F,KAAKC,SACH,CACEslC,eAAe,EACfX,YAAa,MAEf,IAAMx7B,MAITy7B,GACC5jC,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAAA,OAAKE,UAAU,YAGlBmkC,IAAkBV,GAAqBD,GACtC3jC,IAAAC,cAACgiC,GAAQ,CACP/yB,KAAMy0B,EACNf,oBAAqBW,MAK7B,KAEFnU,WAAa,KACX,MAAM,cAAEkU,GAAkBvkC,KAAKG,MAC/B,GAAIokC,GAAiBA,EAAc5iC,OAAQ,CACzC,MAAMwR,EAAYoxB,EAAc5iC,OAChC,OACEV,IAAAC,cAAA,WACED,IAAAC,cAAA,OAAKE,UAAU,gCACZmjC,EAAc3iC,IAAI,CAACC,EAAMC,KACxB,MAAM,OAAEoG,EAAM,MAAEkS,EAAK,OAAE8iB,EAAM,QAAE+G,EAAO,WAAEU,GAAe9iC,EACvD,OACEZ,IAAAC,cAACmL,GAAQ,CACPrK,IAAK,WAAWF,EAChBC,MAAOm7B,EACP5vB,WAAW,EACXC,aAAco3B,IAAeA,EAAWnjC,MACxCb,MAAOyZ,EACP1W,YAAaugC,EACbn3B,gBAAiBA,KACf9M,KAAKC,SAAS,CACZslC,eAAe,IAEjBvlC,KAAKykC,WAAWv8B,GAAUA,EAAO1G,OACjCxB,KAAKilC,WACH/8B,GAAUA,EAAO1G,MACjBmjC,GAAcA,EAAWnjC,MACzB07B,GAAUA,EAAO17B,MACjB4Y,GAASA,EAAM5Y,OAEjBxB,KAAK8kC,cAAc58B,GAAUA,EAAO1G,QAEtCyL,aAAa,OAKrBhM,IAAAC,cAAA,OAAKE,UAAU,cAAa,WACjB+R,EAAU,OAAKA,IAK9B,OAAOlS,IAAAC,cAACwO,GAAe,CAAC3N,MAAM,uBAhOhC/B,KAAKG,MAAQ,CACX8P,YAAY,EACZ40B,mBAAmB,EACnBN,cAAe,KACfgB,eAAe,EACf1H,UAAW,KACX2H,aAAa,EACbhB,uBAAuB,EACvBI,YAAa,KACba,WAAW,GAIf92B,oBACE,MAAM,YAAE4M,EAAW,kBAAEmqB,EAAiB,sBAAElB,GACtCxkC,KAAKN,OAAS,GAEdgK,WACAA,UAAUC,YACgD,IAA1DD,UAAUC,UAAUy4B,cAAc/wB,QAAQ,YAE1CrR,KAAKC,SAAS,CAAEwlC,WAAW,IAEzB38B,WACF9I,KAAKC,SAAS,CAAEoX,iBAAiB,IAC5BkE,EAGHvb,KAAKC,SAAS,CACZskC,cAAemB,EACflB,wBACAv0B,YAAY,IALdjQ,KAAK+P,WA0MXvP,SACE,MAAM,WAAEyP,EAAU,gBAAEoH,GAAoBrX,KAAKG,MAC7C,OACEc,IAAAC,cAAA,OAAKE,UAAU,2BACZiW,GAAmBrX,KAAKslC,kBACzBrkC,IAAAC,cAACqX,GAAU,CAAC5X,MAAO,CAAEa,MAAO,oBAC3ByO,GACChP,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAAA,OAAKE,UAAU,aAGjB6O,GAAcjQ,KAAKqwB,eAMd+T,UChPf,MAAMuB,WAAuC1kC,IAAMzB,UACjDC,YAAYC,GACVC,MAAMD,GAAO,KAqCfwS,aAAe,KACb,IAAI0zB,EAAmB98B,SAAS9D,cAAc,4BAC1C4gC,GACF5lC,KAAKC,SAAS,CACZ4lC,YAAaD,EAAiBE,YAAc,KAGjD,KAEDC,sBAAwB/1B,UACtB,IACE,MAAME,QhBxEHxH,EAAQC,IAAI,yCAA0C,CAAEF,OAAQ,IAAKA,KgByExE,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,MAAM61B,EAAqBr9B,eAAIuH,EAASC,KAAM,qBAAsB,IAC9Dq0B,EAAwB77B,eAAIuH,EAASC,KAAM,+BAA+B,GAChFnQ,KAAKC,SAAS,CACZ+lC,qBACAxB,2BAIN,MAAO3kC,GACLmR,QAAQtQ,MAAM,4CAA8Cb,EAAEqQ,SAASe,YhBpFlCxI,OgB+FvC,KAEFw9B,iBAAmBj2B,UACZk2B,GACHlmC,KAAKC,SAAS,CACZkmC,qBAAqB,IAIzB,IACE,MAAMj2B,QhBpGHxH,EAAQC,IAAI,oCAAqC,CAAEF,OAAQ,IAAKA,KgBqGnE,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,MAAMi2B,EAAgBz9B,eAAIuH,EAASC,KAAM,gBAAiB,IAC1DnQ,KAAKC,SAAS,CACZmmC,gBACAD,qBAAqB,GAErB,KACE56B,EAAiB,wBAKzB,MAAO1L,GACLmR,QAAQtQ,MAAM,wCAA0Cb,EAAEqQ,SAASe,YhBnHnCxI,OgB6HnC,KAED49B,cAAgBr2B,UACTk2B,GACHlmC,KAAKC,SAAS,CACZqmC,kBAAkB,IAItB,IACE,MAAMp2B,QhBlIHxH,EAAQC,IAAI,gCAAiC,CAAEF,OAAQ,IAAKA,KgBmI/D,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,MAAMo2B,EAAa59B,eAAIuH,EAASC,KAAM,aAAc,IACpDnQ,KAAKC,SAAS,CACZsmC,aACAD,kBAAkB,GAElB,KACE/6B,EAAiB,wBAKzB,MAAO1L,GACLmR,QAAQtQ,MAAM,oCAAsCb,EAAEqQ,SAASe,YhBjJnCxI,OgB2J/B,KAED+9B,cAAgBx2B,UACTk2B,GACHlmC,KAAKC,SAAS,CACZwmC,kBAAkB,IAItB,IACE,MAAMv2B,QhBhKHxH,EAAQC,IAAI,gCAAiC,CAAEF,OAAQ,IAAKA,KgBiK/D,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,MAAMu2B,EAAa/9B,eAAIuH,EAASC,KAAM,aAAc,IACpDnQ,KAAKC,SAAS,CACZymC,aACAD,kBAAkB,GAElB,KACEl7B,EAAiB,wBAKzB,MAAO1L,GACLmR,QAAQtQ,MAAM,oCAAsCb,EAAEqQ,SAASe,YhB/KnCxI,OgByL/B,KAEDk+B,gBAAkB32B,UACXk2B,GACHlmC,KAAKC,SAAS,CACZ2mC,oBAAoB,IAIxB,IACE,MAAM12B,QhB9LHxH,EAAQC,IAAI,kCAAmC,CAAEF,OAAQ,IAAKA,KgB+LjE,GAAwB,MAApByH,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,MAAM02B,EAAel+B,eAAIuH,EAASC,KAAM,eAAgB,IACxDnQ,KAAKC,SAAS,CACZ4mC,eACAD,oBAAoB,GAEpB,KACEr7B,EAAiB,wBAKzB,MAAO1L,GACLmR,QAAQtQ,MAAM,sCAAwCb,EAAEqQ,SAASe,YhB7MnCxI,OgBuNjC,KAEDq+B,qBAAuB,CAACC,EAAWC,EAAYC,EAAUC,EAAMj3B,EAAYk3B,KACzE,IAAIC,EAAc,GA0ClB,OAZEA,EA5BGn3B,EA6BDhP,IAAAC,cAAA,OAAKE,UAAU,8BACbH,IAAAC,cAACqX,GAAU,CACT5X,MAAO,CAAEa,MAAOwlC,KAElB/lC,IAAAC,cAAA,OAAKE,UAAU,kBACbH,IAAAC,cAAA,OAAKE,UAAU,aAhCnBH,IAAAC,cAAA,OAAKE,UAAU,8BACbH,IAAAC,cAAA,OAAKE,UAAU,oCACZ2lC,EACAE,EACChmC,IAAAC,cAAA,OAAKE,UAAU,2BACbH,IAAAC,cAACmmC,OAAI,CACH5iC,MAAO,IACFyiC,EAAK1lC,MACRge,KAAM,GAAG0nB,EAAK1lC,MAAMge,OAClB0nB,EAAK1lC,MAAM8lC,YACP,IAAMJ,EAAK1lC,MAAM8lC,YACjB,KAENC,KAAML,EAAK1lC,MAAM+lC,KAAOL,EAAK1lC,MAAM+lC,KAAO,eAIhDtmC,IAAAC,cAAA,OAAKE,UAAU,gCACbH,IAAAC,cAAA,OAAKE,UAAU,sCACZ+lC,GAA8B,gBAmBtCC,GACR,KAEDI,qBAAuB,CAACx0B,EAAMk0B,KAC5B,MAAM,sBACJ1C,GACExkC,KAAKG,MACT,IAAIsnC,EAAuB,GAEvBV,EACF9lC,IAAAC,cAACmjC,GAAa,CACZ9oB,aAAa,EACbmqB,kBAAmB1yB,EACnBwxB,sBAAuBA,IAY3B,OARAiD,EACEznC,KAAK8mC,qBACHC,EACA,kBAZW,EAcXG,GAGGO,GACR,KAEDC,gBAAkB,CAAC10B,EAAMk0B,EAAMj3B,KAC7B,IAAI03B,EAAkB,GAClBV,GAAW,EACXF,EACF9lC,IAAAC,cAAC0mC,GAAM,CACLrsB,aAAa,EACb9E,UAAWzD,EACXkX,gBAAkBgc,IACZA,GACFlmC,KAAKimC,iBAAiBC,MAkB9B,OAbIlzB,GAAQA,EAAKrR,OAAS,IACxBslC,GAAW,GAGbU,EACE3nC,KAAK8mC,qBACHC,EACA,oBACAE,EACAC,EACAj3B,GAGG03B,GACR,KAEDE,aAAe,CAAC70B,EAAMk0B,EAAMY,EAAkB73B,KAC5C,IAAI83B,EAAe,GACfd,GAAW,EACXF,EACF9lC,IAAAC,cAAC8mC,GAAgB,CACf9F,cAAc,QACd3mB,aAAa,EACb6lB,cAAepuB,EACfgZ,WAAS8b,IAAoBA,EAAiBtmC,QAAQsmC,EAAiBtmC,MACvE0oB,gBAAkBgc,IACZA,GACFlmC,KAAKqmC,cAAcH,MAmB3B,OAdIlzB,GAAQA,EAAKrR,OAAS,IACxBslC,GAAW,GAGbc,EACE/nC,KAAK8mC,qBACHC,EACA,SACAE,EACAC,EACAj3B,EACA,mDAGG83B,GACR,KAEDE,aAAe,CAACj1B,EAAMk0B,EAAMY,EAAkB73B,KAC5C,IAAIi4B,EAAe,GACfjB,GAAW,EACXF,EACF9lC,IAAAC,cAAC8mC,GAAgB,CACf9F,cAAc,QACd3mB,aAAa,EACb6lB,cAAepuB,EACfgZ,WAAS8b,IAAoBA,EAAiBtmC,QAAQsmC,EAAiBtmC,MACvE0oB,gBAAkBgc,IACZA,GACFlmC,KAAKwmC,cAAcN,MAmB3B,OAdIlzB,GAAQA,EAAKrR,OAAS,IACxBslC,GAAW,GAGbiB,EACEloC,KAAK8mC,qBACHC,EACA,SACAE,EACAC,EACAj3B,EACA,mDAGGi4B,GACR,KAEDC,eAAiB,CAACn1B,EAAMk0B,EAAMY,EAAkB73B,KAC9C,IAAIm4B,EAAiB,GACjBnB,GAAW,EACXF,EACF9lC,IAAAC,cAACmnC,GAAc,CACb9sB,aAAa,EACboL,YAAa3T,EACbgZ,WAAS8b,IAAoBA,EAAiBtmC,QAAQsmC,EAAiBtmC,MACvE0oB,gBAAkBgc,IACZA,GACFlmC,KAAK2mC,gBAAgBT,MAmB7B,OAdIlzB,GAAQA,EAAKrR,OAAS,IACxBslC,GAAW,GAGbmB,EACEpoC,KAAK8mC,qBACHC,EACA,WACAE,EACAC,EACAj3B,EACA,qDAGGm4B,GACR,KAEDtc,cAAgB,KACd,MAAM,0BACJwc,EAAyB,kBACzBC,EAAiB,kBACjBC,EAAiB,kBACjBC,EAAiB,oBACjBC,EAAmB,iBACnB3c,GACE/rB,KAAKN,MAAM4Y,QAET,mBACJ0tB,EAAkB,cAClBI,EAAa,WACbG,EAAU,WACVG,EAAU,aACVG,EAAY,oBACZV,EAAmB,iBACnBG,EAAgB,iBAChBG,EAAgB,mBAChBG,EAAkB,YAClBf,GACE7lC,KAAKG,MAET,OACEc,IAAAC,cAAA,OAAKE,UAAU,qBACbH,IAAAC,cAACynC,YAAQ,CAACC,iBAAkB/C,GACzBG,GACCA,EAAmBrkC,OAAS,GAC5BV,IAAAC,cAAE2nC,UAAM,CAAC7mC,IAAI,sBACVhC,KAAKwnC,qBAAqBxB,EAAoBsC,IAGnDrnC,IAAAC,cAAC2nC,UAAM,CAAC7mC,IAAI,iBACThC,KAAK0nC,gBAAgBtB,EAAemC,EAAmBpC,IAE1DllC,IAAAC,cAAC2nC,UAAM,CAAC7mC,IAAI,cACThC,KAAK6nC,aAAatB,EAAYiC,EAAmBzc,EAAkBua,IAEtErlC,IAAAC,cAAC2nC,UAAM,CAAC7mC,IAAI,cACThC,KAAKioC,aAAavB,EAAY+B,EAAmB1c,EAAkB0a,IAEtExlC,IAAAC,cAAC2nC,UAAM,CAAC7mC,IAAI,gBACThC,KAAKmoC,eAAetB,EAAc6B,EAAqB3c,EAAkB6a,OAhclF5mC,KAAKG,MAAQ,CACX6lC,mBAAoB,GACpBI,cAAe,GACfG,WAAY,GACZG,WAAY,GACZG,aAAc,GACdiC,kBAAkB,EAClBjD,YAAa,EACbM,qBAAqB,EACrBG,kBAAkB,EAClBG,kBAAkB,EAClBG,oBAAoB,EACpBpC,uBAAuB,GAI3B71B,oBAIE,GAHI3F,QACFA,OAAOsO,iBAAiB,SAAUtX,KAAKkS,cAErCpJ,SAAU,CACZ,IAAI88B,EAAmB98B,SAAS9D,cAAc,4BAC1C4gC,GACF5lC,KAAKC,SAAS,CACZ4lC,YAAaD,EAAiBE,YAAc,EAC5CgD,kBAAkB,IAGtB9oC,KAAK+lC,wBACL/lC,KAAKimC,mBACLjmC,KAAKqmC,gBACLrmC,KAAKwmC,gBACLxmC,KAAK2mC,mBAuaTnmC,SACE,MAAM,SACJmzB,EAAQ,UACRoV,EAAS,SACTC,GACEhpC,KAAKN,MAAM4Y,QAET,iBACJwwB,GACE9oC,KAAKG,MAET,OACEc,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAAA,OAAKE,UAAU,oBACbH,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAAA,OAAKE,UAAU,2BACX2nC,GAAaA,EAAUvnC,MACvBP,IAAAC,cAAA,OACE2G,IAAI,uBACJhB,IAAKiB,IACLC,WAAUghC,EAAUvnC,MACpBJ,UAAU,aAEZH,IAAAC,cAAA,OAAK2F,IAAKoiC,KAAiBphC,IAAI,6BAGnC5G,IAAAC,cAAA,OAAKE,UAAU,0BACbH,IAAAC,cAAA,OAAKE,UAAU,0BACbH,IAAAC,cAAA,YAAO,aACNyyB,GACCA,EAASnyB,OACTP,IAAAC,cAAA,YACED,IAAAC,cAACsD,OAAI,CAACC,MAAOkvB,IAAa,MAI/BqV,GACCA,EAASxnC,OACTP,IAAAC,cAAA,OAAKE,UAAU,iCACbH,IAAAC,cAACsD,OAAI,CAACC,MAAOukC,OAKrB/nC,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAACqX,GAAU,CAAC5X,MAAO,CAAEa,MAAO,aAAYmyB,GAAYA,EAASnyB,MAAQmyB,EAASnyB,MAAQ,SAGzFsnC,GACC9oC,KAAK8rB,kBAOA6Z,UC1hBR,MAKMuD,GAASA,IACbxgC,EAAQygC,KAAK,mBC6CPC,OAjDqB1pC,IAClC,MAAM,YAAE2pC,EAAW,YAAEC,GAAgB5pC,EAAM4Y,OAc3C,OACErX,IAAAC,cAAA,OAAKE,UAAU,sBACbH,IAAAC,cAAA,OAAKO,QAASA,IAfCuO,WACjB,MAAME,QAAiBg5B,KACnBh5B,GAEoB,MAApBA,EAASzC,QACTyC,EAASC,MACoB,MAA7BD,EAASC,KAAKo5B,aAEdvgC,OAAOy0B,QAAQC,UAAU,KAAM,cAAe10B,OAAOkoB,SAASsY,UAC9DxgC,OAAOkoB,SAASsY,SAAW,eAMTC,GAAcroC,UAAU,qBAC1CH,IAAAC,cAAA,KAAGE,UAAU,qBACbH,IAAAC,cAAA,YAAM,WAGRD,IAAAC,cAAA,OAAKE,UAAU,wBACbH,IAAAC,cAAA,OAAKE,UAAU,oBACbH,IAAAC,cAAA,KAAGE,UAAU,qBACbH,IAAAC,cAAA,YACED,IAAAC,cAACsD,OAAI,CAACC,MAAO4kC,MAGjBpoC,IAAAC,cAAA,OAAKE,UAAU,4BACZkoC,GACCA,EAAY3nC,QACZ2nC,EAAY1nC,IAAI,CAACslC,EAAMplC,KACrB,IAAI,WAAc4nC,EAAa,MAASxC,EAAK5uB,OAC7C,OACErX,IAAAC,cAAA,QAAMc,IAAK,QAAQF,GACjBb,IAAAC,cAAA,SACED,IAAAC,cAACmmC,OAAI,CAAC5iC,MAAOilC,YCpCjC,MAAMC,WAAiC1oC,IAAMzB,UAC3CC,YAAYC,GACVC,MAAMD,GAAO,KAGfqQ,QAAUC,UACR,IAII6X,EAAa,GACjB,MAAM3X,QAAiB8jB,GALV,CACXhf,WAAY,EACZwG,OAAQ,KAINtL,GAEAA,EAASC,MACTD,EAASC,KAAK2rB,eACd5rB,EAASC,KAAK2rB,cAAcn6B,QAE5BuO,EAASC,KAAK2rB,cAAcl6B,IAAKC,IAC/B,MAAQsY,WAAYqB,EAAS,MAAS3Z,GAAQ,IACJ,IAAtCgmB,EAAWvW,SAASkK,EAAOha,QAC7BqmB,EAAWtW,KAAKiK,EAAOha,UAkBjCmN,oBACE3O,KAAK+P,UAGPvP,SACE,MAAM,QAAEopC,EAAO,MAAEC,GAAU7pC,KAAKN,MAAM4Y,OACtC,OACErX,IAAAC,cAAA,OAAKE,UAAU,iBACbH,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAACsD,OAAI,CAACC,MAAOmlC,KAEf3oC,IAAAC,cAAA,OAAKE,UAAU,gBACbH,IAAAC,cAAA,OAAKE,UAAU,OACZyoC,GACkB,IAAjBA,EAAMloC,QACNkoC,EAAMjoC,IAAI,CAACC,EAAMC,KACf,MAAM,YAAEwlC,EAAW,KAAE9nB,EAAI,OAAE1f,EAAM,KAAEynC,GACjC1lC,EAAKyW,OAAOwxB,WAAWtoC,OAAS,KAC5Bb,EACJkB,GACAA,EAAKyW,QACLzW,EAAKyW,OAAO8B,OACZvY,EAAKyW,OAAO8B,MAAM5Y,MACdK,EAAKyW,OAAO8B,MAAM5Y,MAClB,GACN,IAAIZ,EAAO,GAWX,MAVI,QAAQmJ,KAAKu9B,GACf1mC,EAAO,SACE,QAAQmJ,KAAKu9B,GACtB1mC,EAAO,SACE,YAAYmJ,KAAKu9B,GAC1B1mC,EAAO,SACE,UAAUmJ,KAAKu9B,KACxB1mC,EAAO,YAIPK,IAAAC,cAAA,OAAKE,UAAU,MAAMY,IAAK,GAAGslC,KAAexlC,KAC1Cb,IAAAC,cAAA,KACEE,UAAU,aACVoe,KAAM,GAAGA,KAAQ8nB,IACjBxnC,OAAQA,GAERmB,IAAAC,cAAA,OAAKE,UAAU,sBACbH,IAAAC,cAAA,KAAGE,UAAW,sBAAsBR,IACnCD,GAASM,IAAAC,cAAA,QAAME,UAAU,aAAaT,GACtC4mC,GAAQtmC,IAAAC,cAAA,QAAME,UAAU,YAAYmmC,YAa9CoC,UClGf,MAAMI,WAAmBvqC,YACvBC,YAAYC,GACVC,MAAMD,GAAO,KA2BfsqC,gBAAkBh6B,UAChB,MAAME,QAAiB1H,EAAgBC,GACvC,GACEyH,GACAA,EAASC,MACTD,EAASC,KAAKG,cACdJ,EAASC,KAAKG,aAAa9O,MAC3B,CACA,MAAMyoC,EAAe/5B,EAASC,KAAKG,aAAa9O,MAC5B,GAAhByoC,GACFjqC,KAAKC,SAAS,CAAEgqC,mBApCpBjqC,KAAKG,MAAQ,CACX0S,YAAa,GACbq3B,IAAK,GACL3oC,KAAM,GACN4oC,SAAUzqC,EAAMyQ,KAAK05B,MACrBI,aAAc,MAMlBt7B,oBACE3O,KAAKC,SAAS,CACZ4S,YAAa7J,OAAOkoB,SAASsY,SAAS5/B,cACtCrI,KAAMuvB,GAAgB,UA2B1BtwB,SACE,MAAM,uBAAE4pC,EAAsB,wBAAEC,EAAuB,uBAAEC,GAA2BtqC,KAAKN,MAAMyQ,MACzF,SAAEg6B,EAAQ,aAAEF,GAAiBjqC,KAAKG,MACxC,OACEc,IAAAC,cAAA,OAAKE,UAAU,uBACZ+oC,GACCA,EAASxoC,QACTwoC,EAASvoC,IAAI,CAACslC,EAAMplC,KAClB,MAAM,WAAcgoC,EAAa,MAAS5C,EAAK5uB,OAC/C,GACEwxB,GACAA,EAAWtoC,OACXsoC,EAAWtoC,MAAM+lC,MACjBuC,EAAWtoC,MAAMge,KACjB,CACA,IAAI+qB,EAAMT,EAAWtoC,MAAM+lC,KAAK39B,cAChC,GACW,UAAR2gC,GACCH,GACAA,EAAuB5oC,OAChB,mBAAR+oC,GACCD,GACAA,EAAuB9oC,OAChB,cAAR+oC,GACCF,GACAA,EAAwB7oC,MAE1B,OAAO,KACT,IAAI,YACWqR,EAAc,KAAI,KACzBtR,EAAO,MACXvB,KAAKG,MACLoB,IACFA,EAAOA,EAAKqI,cAAgB,KAG9B,IAAI4gC,EAAWD,EAQf,OAP8B,IAA1BA,EAAIl5B,QAAQ,WACdm5B,EAAW,WAE0B,IAAnCD,EAAIl5B,QAAQ,oBACdm5B,EAAW,aAIXvpC,IAAAC,cAACmmC,OAAI,CACH5iC,MAAO,IACFqlC,EAAWtoC,MACdge,KAAM,GAAGsqB,EAAWtoC,MAAMge,QACxBsqB,EAAWtoC,MAAM8lC,YACbwC,EAAWtoC,MAAM8lC,YAAc,IAC/B,oBAGRtlC,IAAK,WAAWF,GAEhBb,IAAAC,cAAA,OACEE,UAAW,gBAC8B,IAAtCyR,EAAYxB,QAAQ,eACI,IAAvB9P,EAAK8P,QAAQk5B,KACoB,IAAlC13B,EAAYxB,QAAQ,WACO,IAA1Bk5B,EAAIl5B,QAAQ,WACgB,IAA9BwB,EAAYxB,QAAQk5B,GAChB,UACA,KAGNtpC,IAAAC,cAAA,KACEE,UAAW,aAAaopC,IAM1BvpC,IAAAC,cAAA,YAAOqpC,KAIR,OAAO,SAMXR,UChHAU,OAlBI/qC,IACjB,MAAQ4pC,YAAaoB,EAAQ,MAAShrC,EAAMyQ,MAAQ,GACpD,OACElP,IAAAC,cAAA,OAAKE,UAAU,qBACZspC,GACCA,EAAM/oC,QACN+oC,EAAM9oC,IAAI,CAACslC,EAAMplC,KACf,IAAM4nC,WAAYiB,EAAa,MAASzD,EAAK5uB,OAC7C,OACErX,IAAAC,cAAA,OAAKc,IAAK,QAAQF,GAChBb,IAAAC,cAACmmC,OAAI,CAAC5iC,MAAOkmC,SCT3B,MAAMC,WAA4C3pC,IAAMzB,UACtDC,YAAYC,GACVC,MAAMD,GAAO,KAoBfwS,aAAe,KACb,MAAM,WAAE24B,GAAe7qC,KAAKG,MAEzB6I,OAAOc,WAAa,KAAO+gC,EAAa,KACxC7hC,OAAOc,YAAc,KAAO+gC,GAAc,KAG3C7qC,KAAK8qC,YAEP,KAEFA,SAAW,KACT,MAAM5zB,EAAiBpO,SAAS9D,cAAc,aACxCmS,EAAgBrO,SAAS9D,cAAc,6BACvC+lC,EAAajiC,SAAS9D,cAAc,oBACtCkS,GAAkBC,IACpBD,EAAe/X,UAAUmG,OAAO,mBAChC6R,EAAchY,UAAUmG,OAAO,oBAE7BylC,GACFA,EAAWt+B,SAvCbzM,KAAKG,MAAQ,CAAE0qC,WAAY,MAG7Bl8B,oBACE,MAAM,WAAE6a,GAAexpB,KAAKN,MAAM4Y,QAAU,GAC5C,IAAItF,EAAO,GACPwW,GAAcA,EAAW7nB,SAC3B6nB,EAAW5nB,IAAKC,IACd,MAAQsY,WAAYqB,EAAS,MAAS3Z,EAAKyW,QAAU,GACjDkD,GAAUA,EAAOha,OACnBwR,EAAKzB,KAAKiK,EAAOha,SAGrBwpC,eAAeC,QAAQ,eAAgBj4B,IAEzChT,KAAKC,SAAS,CAAE4qC,WAAY7hC,OAAOc,aACnCd,OAAOsO,iBAAiB,SAAUtX,KAAKkS,cA0BzC1R,SACE,OACES,IAAAC,cAACC,WAAQ,KACPF,IAAAC,cAAA,OAAKE,UAAU,oBACbH,IAAAC,cAAC6oC,GAAU,CAAC55B,KAAMnQ,KAAKN,MAAM4Y,SAC7BrX,IAAAC,cAACipC,GAAQ,CAACh6B,KAAMnQ,KAAKN,MAAM4Y,UAG7BrX,IAAAC,cAAA,OAAKE,UAAU,oBACbH,IAAAC,cAAA,OAAKE,UAAU,gBAOVwpC,U,qBC/Df,MAAMM,WAAc1rC,YAClBgB,SACE,MAAM,MACJuB,EAAK,MACLP,EAAK,GACLY,EAAE,KACFS,EAAI,cACJQ,EAAa,KACb9B,EAAI,YACJT,EAAW,SACX0B,EAAQ,eACR2oC,EAAc,SACdhoC,EAAQ,aACRioC,EAAY,MACZ/pC,EAAK,aACLgqC,EAAY,MACZC,EAAK,UACLC,GACEvrC,KAAKN,MACT,OACEuB,IAAAC,cAAA,OAAKE,UAAU,2BAA2BC,MAAOA,GAC9CU,GACCd,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,aAAQa,IAGZd,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAAA,SACEE,UAAW,+BACTI,EAAQ,YAAc,MACpBqB,GAAc,MACA,aAAhB/B,EAA6B,gBAAkB,MAC7CwqC,GAAgB,KACpBlpC,GAAIA,EACJZ,MAAOA,EACPa,SAAWxC,GAAMwD,EAAcxD,EAAEC,OAAO0B,OACxCD,KAAMA,EACNT,YAAaA,EACb0B,SAAUA,EACVW,SAAUA,EACVqoC,UAAY3rC,GAAOsrC,EAAiBA,EAAetrC,GAAK,KACxDwrC,aAAcA,EACdE,UAAWA,IAEZH,GACCnqC,IAAAC,cAAA,OAAKE,UAAW,iBAAiBgqC,EAAa7pC,MAC3C6pC,EAAa5pC,UASb0pC,UCvDf,MAAMO,WAAuBjsC,YAC3BgB,SAEE,OACES,IAAAC,cAAA,OAAKE,UAAU,6BACbH,IAAAC,cAAA,OACEE,UAAU,qBACVyF,IAAK7G,KAAKN,MAAMgsC,GAChB7jC,IAAI,eAEN5G,IAAAC,cAAA,OAAKE,UAAU,aAAapB,KAAKN,MAAMqD,YAMhC0oC,UCPf,MAAME,WAAmC1qC,IAAMzB,UAC7CC,YAAYC,GACVC,MAAMD,GAAO,KA8BfwS,aAAe,KACb,IAAI05B,EAAe,GAEf9iC,WACF8iC,EAAe9iC,SAAS9D,cAAc,qBAGpCgE,OAAOc,YAAc,IACvB8hC,EAAavqC,MAAM0H,OAAS,OAE5B6iC,EAAavqC,MAAM0H,OAASC,OAAO6iC,YAAc,MAEnD,KAEFC,+BAAiC,KAC3Bd,eAAee,QAAQ,mBACzBf,eAAegB,WAAW,kBAExBhB,eAAee,QAAQ,gBACzBf,eAAegB,WAAW,gBAE5B,KAEFC,aAAe,KAEXviC,WACAA,UAAUC,YAC8C,GAAxDD,UAAUC,UAAUy4B,cAAc/wB,QAAQ,WAC1C3H,UAAUwiC,SAC2C,GAArDxiC,UAAUwiC,OAAO9J,cAAc/wB,QAAQ,UAEvCrR,KAAKC,SAAS,CAAEksC,QAAS,WACpBnsC,KAAKC,SAAS,CAAEksC,QAAS,WAChC,KAEF7kB,WAAatX,UACX,MAAMG,EAAO,IAAKnQ,KAAKG,OAEjB+P,OR/EYC,IACbzH,EAAQygC,KAAK,iBAAkB,IAAKh5B,IQ8ElBi8B,CAAMj8B,GACzBD,IAEoB,MAApBA,EAASzC,QACTyC,EAASC,MACoB,MAA7BD,EAASC,KAAKo5B,YAEdvpC,KAAK8rC,iCACL9iC,OAAOkoB,SAASsY,SAAW,GAC3BhiB,KAAWC,UAAU,CACnBA,UAAW,CACT3iB,MAAO,mBAET8iB,cAAe,eAGjB9H,MAAM,kBAGV,KAEFusB,eAAkBzO,IAChB59B,KAAKC,SAAS,CACZ2F,UAAWg4B,EACXyO,eAAgB,CACd7qC,MAAO,GACPmpB,eAAgB,GAChBvK,aAAc,OAGlB,KAEFksB,mBAAqBt8B,UACnB,MAAM,eAAEq8B,GAAmBrsC,KAAKG,MAChC,GAAIH,KAAKusC,KAAKC,QAAQC,kBAAoBJ,EAAe7qC,MAAO,CAC9D,MAAM4S,EAAW,IAAIC,SACrBD,EAASE,OAAO,QAAS+3B,EAAe7qC,OAExC,MAAMgT,EAAM,uCAEZ,UACuBnM,IAAM,CACzBkM,OAAQ,OACRC,MACArE,KAAMiE,KAINpU,KAAKC,SAAS,CACZosC,eAAgB,IACXA,EACH1hB,eAAgB,0BAChBvK,aAAc,MAGlBpgB,KAAKC,SAAS,CAAEysC,cAAc,KAE9B1sC,KAAKC,SAAS,CACZosC,eAAgB,IACXA,EACH1hB,eAAgB,GAChBvK,aAAc,4CAIpB,MAAOvgB,GACPmR,QAAQuW,IAAI1nB,GACZG,KAAKC,SAAS,CACZosC,eAAgB,IACXA,EACH1hB,eAAgB,GAChBvK,aAAc,gDAKtB,KAEFusB,gBAAmB7nC,IACG,KAAhBA,EAAM8nC,OAAkC,KAAlB9nC,EAAM+nC,SAAgC,UAAd/nC,EAAM9C,KACtDhC,KAAKsnB,cAEP,KAEFU,YAAe8kB,IACb,MAAM,aAAE1sB,EAAY,eAAEuK,GAAmB3qB,KAAKG,MAAMksC,gBAC9C,aAAEK,GAAiB1sC,KAAKG,MAC9B,OACEc,IAAAC,cAACuqC,GAAc,CACbC,GAAIqB,KACJpsC,MAAM,kBACNT,KAAO09B,GAAQ59B,KAAKqsC,eAAezO,IAEnC38B,IAAAC,cAAA,OAAKE,UAAU,yBACbH,IAAAC,cAAA,OAAKE,UAAU,UACbH,IAAAC,cAAA,OACEE,UAAU,cACVK,QAASA,IACPzB,KAAKC,SAAS,CAAE2F,WAAW,EAAO8mC,cAAc,KAGlDzrC,IAAAC,cAAA,YACED,IAAAC,cAAA,KAAGE,UAAU,mBAAmB,UAKtCH,IAAAC,cAAA,OAAKE,UAAU,QACbH,IAAAC,cAAA,OAAKE,UAAU,SACZsrC,EAAe,iBAAmB,mBAEpCA,EACCzrC,IAAAC,cAAA,OAAKE,UAAU,WACbH,IAAAC,cAACwD,WAAQ,CAACD,MAAOqoC,KAGnB7rC,IAAAC,cAAA,QAAMmc,IAAKrd,KAAKusC,KAAMS,SAAWntC,GAAMA,EAAEotC,kBACvChsC,IAAAC,cAACgqC,GAAK,CACJ3pC,KAAK,QACLT,YAAY,iBACZyqC,WAAW,EACXpoC,UAAQ,EACRE,cAAgB7B,GACdxB,KAAKC,SAAS,CACZosC,eAAgB,IAAKrsC,KAAKG,MAAMksC,eAAgB7qC,WAGpD4pC,aAAc,CACZ7pC,KAAMopB,EACF,UACAvK,EACE,QACA,GACN5e,MAAOmpB,IAEHvK,GAEE,QAKdnf,IAAAC,cAAA,OAAKE,UAAU,iBACZsrC,EACCzrC,IAAAC,cAACyB,EAAM,CACLE,KAAK,gBACLD,MAAM,iBACNnB,QAASA,IACPzB,KAAKC,SAAS,CAAE2F,WAAW,EAAO8mC,cAAc,KAEnD,QAIDzrC,IAAAC,cAACyB,EAAM,CACLE,KAAK,gBACLD,MAAM,iBACNJ,UAAUxC,KAAKG,MAAMksC,eAAe7qC,MACpCC,QAASA,IAAMzB,KAAKssC,sBACrB,sBAlObtsC,KAAKG,MAAQ,CACX+sC,SAAU,KACVC,SAAU,KACVvnC,WAAW,EACXumC,QAAS,GACTO,cAAc,EACdL,eAAgB,CACd7qC,MAAO,GACPmpB,eAAgB,GAChBvK,aAAc,KAGlBpgB,KAAKusC,KAAOtrC,IAAMsvB,YAGpB5hB,oBACE3O,KAAKisC,eACDjB,eAAee,QAAQ,iBACzBf,eAAegB,WAAW,gBAGxBhjC,QACFA,OAAOsO,iBAAiB,SAAUtX,KAAKkS,cAErCpJ,UACF9I,KAAKkS,eAoNT1R,SACE,MAAM,SAEJ4sC,EAAW,KAAI,kBACfC,EAAoB,KAAI,eACxBC,EAAiB,KAAI,YACrBC,EAAc,KAAI,sBAClBC,EAAwB,MACtBxtC,KAAKN,MAAM4Y,QAAU,GAUzB,IAAIm1B,EACFL,GACEA,EAAS90B,QACT80B,EAAS90B,OAAO+uB,MAChB+F,EAAS90B,OAAO+uB,KAAK7lC,MACnB4rC,EAAS90B,OAAO+uB,KAAK7lC,MACrB,GACN,MAAMqV,EAAQw2B,GAAqBA,EAAkB7rC,OAAU,GAC/D,IAAIksC,EAAQJ,GAAkBA,EAAe9rC,MAAQ8rC,EAAiB,GAClEK,EAAcJ,GAAeA,EAAY/rC,MAAQ+rC,EAAc,GAC/DT,EACFU,GAAyBA,EAAsBhsC,MAC3CgsC,EACA,GACN,OACEvsC,IAAAC,cAAA,OAAKE,UAAU,mBACZpB,KAAKG,MAAMyF,UAAY5F,KAAKgoB,YAAY8kB,GAAyB,KAClE7rC,IAAAC,cAAA,OAAKE,UAAU,WAAWyF,IAAKkmC,KAAiBllC,IAAI,eACpD5G,IAAAC,cAAA,OAAKE,UAAU,aACbH,IAAAC,cAAA,OAAKE,UAAU,kBACbH,IAAAC,cAAA,OAAKE,UAAU,iBAUjBH,IAAAC,cAAA,OAAKE,UAAU,aACZqsC,EACCxsC,IAAAC,cAAA,IAAOusC,EACLxsC,IAAAC,cAAA,OACE2G,IAAK,gBACLhB,IAAKiB,IACLC,WAAU8O,EACVzV,UAAU,8BAIdH,IAAAC,cAAA,OACE2G,IAAK,gBACLhB,IAAKiB,IACLC,WAAU8O,EACVzV,UAAU,8BAIhBH,IAAAC,cAAA,OAAKE,UAAU,iBACbH,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAACwD,WAAQ,CAACD,MAAOipC,KAEnBzsC,IAAAC,cAAA,OAAKE,UAAU,gBACbH,IAAAC,cAAA,OAAKE,UAAU,cAAa,WAC5BH,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAACgqC,GAAK,CACJ3pC,KAAK,OACLT,YAAY,gBACZuC,cAAgB6pC,GAAaltC,KAAKC,SAAS,CAAEitC,eAE/CjsC,IAAAC,cAACgqC,GAAK,CACJ3pC,KAAK,OACLT,YAAY,gBACZuC,cAAgB6pC,GAAaltC,KAAKC,SAAS,CAAEitC,aAC7C7rC,MAAO,CAAEusC,QAAS,WAGtB3sC,IAAAC,cAAA,OAAKE,UAAU,cACW,WAAvBpB,KAAKG,MAAMgsC,SACVlrC,IAAAC,cAACgqC,GAAK,CACJ3pC,KAAK,OACLT,YAAY,WACZuC,cAAgB8pC,GAAantC,KAAKC,SAAS,CAAEktC,aAC7ChC,eAAiBrmC,GAAU9E,KAAK2sC,gBAAgB7nC,KAG5B,UAAvB9E,KAAKG,MAAMgsC,SACVlrC,IAAAC,cAACgqC,GAAK,CACJ3pC,KAAK,WACLT,YAAY,WACZuC,cAAgB8pC,GAAantC,KAAKC,SAAS,CAAEktC,aAC7ChC,eAAiBrmC,GAAU9E,KAAK2sC,gBAAgB7nC,GAChDumC,aAAa,kBAInBpqC,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAACyB,EAAM,CACLlB,QAASA,IAAMzB,KAAKsnB,aACpBzkB,KAAK,OACLD,MAAM,eACP,YAKH3B,IAAAC,cAAA,OAAKE,UAAU,yBACbH,IAAAC,cAAA,OACEE,UAAU,uBACVK,QAASA,IAAMzB,KAAKqsC,gBAAe,IACpC,uBAMNsB,GACC1sC,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAACwD,WAAQ,CAACD,MAAOkpC,QAShBhC,UCjYf,MAAMkC,WAAqB5sC,IAAMzB,UAC/BC,YAAYC,GACVC,MAAMD,GAAO,KASfggB,iBAAmB,KACjB1f,KAAKN,MAAMggB,iBAAiB1f,KAAKG,MAAMwf,KAAM3f,KAAKG,MAAMigB,cACxDpgB,KAAKN,MAAM4gB,YAAYtgB,KAAKG,MAAMmF,SAClC,KAEFsa,QAAWD,IACLA,IAAwC,IAAhCA,EAAKpe,KAAK8P,QAAQ,SACxBsO,EAAK9c,KAAO,KAAO,MAAQ,EAC7B7C,KAAKC,SACH,CACE0f,OACAE,QAASrC,IAAIC,gBAAgBkC,IAE/B3f,KAAK0f,kBAGPI,MAAM,0CAGRA,MAAM,4BA3BR9f,KAAKG,MAAQ,CACXwf,KAAMjgB,EAAM8B,MAAQ9B,EAAM8B,MAAQ,KAClCqe,QAASngB,EAAM8B,MAAQ9B,EAAM8B,MAAQ,KACrC8D,QAAQ,EACR8a,aAAc,MA2BlB5f,SACE,MAAM,QAAEqf,GAAY7f,KAAKG,OACnB,MAAEqB,GAAUxB,KAAKN,MACvB,OACEuB,IAAAC,cAAA,OAAKE,UAAU,wBACbH,IAAAC,cAAA,OAAKE,UAAW,qBAAoBye,GAAWre,EAAQ,GAAK,UACzDqe,GAAWre,EACVP,IAAAC,cAAA,OAAKE,UAAU,iBACbH,IAAAC,cAAA,OAAK2F,IAAKgZ,GAAWre,IACrBP,IAAAC,cAAA,OAAKE,UAAU,sBACbH,IAAAC,cAAA,aACED,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAAA,KAAGE,UAAU,oBAEfH,IAAAC,cAAA,SACEK,KAAK,OACL2c,OAAO,UACP7b,SAAWxC,GACTG,KAAKC,SACH,CAAEqF,QAAQ,GACVtF,KAAK4f,QAAQ/f,EAAEC,OAAOse,MAAM,QAKpCnd,IAAAC,cAAA,OACEE,UAAU,cACVK,QAASA,IACPzB,KAAKC,SACH,CACE0f,KAAM,KACNE,QAAS,KACTva,QAAQ,GAEVtF,KAAK0f,mBAITze,IAAAC,cAAA,KAAGE,UAAU,yBAKnBH,IAAAC,cAAA,aACED,IAAAC,cAAA,YAAM,gBACND,IAAAC,cAAA,SACEK,KAAK,OACL2c,OAAO,UACP7b,SAAWxC,GACTG,KAAKC,SACH,CAAEqF,QAAQ,GACVtF,KAAK4f,QAAQ/f,EAAEC,OAAOse,MAAM,WAYjCyvB,UC5Ff,MAAMC,WAAoB7sC,IAAMzB,UAC9BC,YAAYC,GACVC,MAAMD,GAAO,KAqBfqQ,QAAU,KACR,MAAM,eACJ8jB,EAAc,SACdD,EAAQ,cACRoB,EAAa,aACb+Y,EAAY,QACZC,EAAO,YACPC,GACEjuC,KAAKN,MAAMyQ,KACfnQ,KAAKC,SAAS,CACZiuC,eACGra,GAAkBA,EAAeryB,OAASqyB,EAAeryB,MAAMqF,KAChE,KACFsnC,SAAUva,EAASpyB,MACnB4sC,cAAepZ,EAAcxzB,MAC7B6sC,aAAcN,EAAavsC,MAC3B8sC,QAASN,EAAQxsC,MACjB+sC,YAAcN,GAAeA,EAAYzsC,OAAU,MAErD,KAEFgtC,SAAWx+B,UACT,MAAM,eACJk+B,EAAc,SACdC,EAAQ,cACRC,EAAa,QACbE,EAAO,qBACPG,GACEzuC,KAAKG,MAGT,GAFAH,KAAKC,SAAS,CAAEyuC,YAAY,IAExBP,GAAYC,GAAiBE,EAAS,CACxC,MAAMl6B,EAAW,IAAIC,SACfs6B,EAAmB3uC,KAAKN,MAAMivC,iBACpCv6B,EAASE,OAAO,iBAAkB45B,GAClC95B,EAASE,OAAO,WAAY65B,GAC5B/5B,EAASE,OAAO,gBAAiB85B,GACjCh6B,EAASE,OAAO,UAAWg6B,GAC3Bl6B,EAASE,OAAO,uBAAwBm6B,GACrCE,GACDv6B,EAASE,OAAOq6B,EAAiBjsC,KAAMisC,EAAiBntC,OAG1D,MAAMgT,EAAM,wCAEZ,IACE,IAAItE,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,MACArE,KAAMiE,IAGJlE,GAAYA,EAASC,KACnBD,EAASC,KAAKsE,WAAavE,EAASC,KAAKsE,UAAUjT,OACrDxB,KAAKC,SAAS,CACZiU,aAAc,6BACd06B,eAAe,EACf9/B,UAAU,EACVsR,aAAc,KAEhBpgB,KAAKN,MAAMmvC,SAAQ,IAEnB7uC,KAAKC,SAAS,CACZiU,aAAchE,EAASC,KAAKuE,QAAQlT,MACpCotC,eAAe,EACf9/B,UAAU,EACVsR,aAAclQ,EAASC,KAAKuE,QAAQlT,QAIxCxB,KAAKC,SAAS,CACZiU,aAAc,yBACd06B,eAAe,EACf9/B,UAAU,EACVsR,aAAc,2BAGlB,MAAOvgB,GACPmR,QAAQuW,IAAI1nB,GAEZG,KAAKC,SAAS,CACZiU,aAAc,yBACdpF,UAAU,EACV8/B,eAAe,UAInB5uC,KAAKC,SAAS,CACZiU,aAAc,8BACdpF,UAAU,EACV8/B,eAAe,EACfxuB,aAAc,gCAGlBpgB,KAAKC,SAAS,CAAEyuC,YAAY,KAC5B,KAEF5K,gBAAkB,KAChB,MAAM,aAAE5vB,EAAY,SAAEpF,GAAa9O,KAAKG,MACxC,OACEc,IAAAC,cAACgN,GAAc,CACbnM,MAAOmS,EACPpF,SAAUA,EACVV,kBAAoBwgC,IAClB5uC,KAAKC,SAAS,CACZ2uC,sBA7HR5uC,KAAKG,MAAQ,CACX+tC,eAAgB,GAChBC,SAAU,GACVC,cAAe,GACfC,aAAc,GACdC,QAAS,GACTC,YAAa,GACbnuB,aAAc,GACdsuB,YAAY,EACZD,sBAAsB,EACtBG,eAAe,EACf9/B,SAAU,KACVoF,aAAc,MAIlBvF,oBACE3O,KAAK+P,UAmHPvP,SACE,MAAM,eACJ0tC,EAAc,SACdC,EAAQ,cACRC,EAAa,aACbC,EAAY,QACZC,EAAO,aACPluB,EAAY,WACZsuB,EAAU,cACVE,GACE5uC,KAAKG,OACH,KAAED,GAASF,KAAKN,MACtB,OACEuB,IAAAC,cAACC,WAAQ,KACNytC,GAAiB5uC,KAAK8jC,kBACvB7iC,IAAAC,cAAA,OAAKE,UAAU,kDACbH,IAAAC,cAAA,KAAGE,UAAU,kBAAkBK,QAASA,IAAMvB,MAC9Ce,IAAAC,cAAA,OAAKE,UAAU,oBACbH,IAAAC,cAACyB,EAAM,CAACC,MAAM,YAAYnB,QAASA,IAAMvB,KAAQ,UAGjDe,IAAAC,cAACyB,EAAM,CACLC,MAAM,UACNnB,QAASA,IAAMzB,KAAKwuC,WACpBhsC,SAAUksC,GACX,UAKLztC,IAAAC,cAAA,OAAKE,UAAU,yBACbH,IAAAC,cAAA,OAAKE,UAAU,SAAQ,gBACvBH,IAAAC,cAAA,OAAKE,UAAU,2BACbH,IAAAC,cAAA,OAAKE,UAAU,YAAW,mBAC1BH,IAAAC,cAAC2sC,GAAY,CACXrsC,MAAO0sC,EACPxuB,iBAAmBwuB,GACjBluC,KAAKC,SAAS,CAAEiuC,mBAElB5tB,YAAcmuB,GACZzuC,KAAKC,SAAS,CAAEwuC,2BAGpBxtC,IAAAC,cAAA,OAAKE,UAAU,YAAW,QAC1BH,IAAAC,cAACgqC,GAAK,CACJ9oC,GAAG,UACHtB,YAAY,IACZS,KAAK,OACL4B,UAAQ,EACR3B,MAAO2sC,EACP9qC,cAAgB8qC,GACdnuC,KAAKC,SAAS,CAAEkuC,WAAU/tB,aAAc,KAE1CkrB,MAAOlrB,IAAiB+tB,EAAW,QAAU,KAE/CltC,IAAAC,cAAA,OAAKE,UAAU,YAAW,iBAC1BH,IAAAC,cAACgqC,GAAK,CACJ9oC,GAAG,WACHtB,YAAY,IACZS,KAAK,QACLiB,UAAQ,EACRW,UAAQ,EACR3B,MAAO6sC,EACPhrC,cAAgBgrC,GAAiBruC,KAAKC,SAAS,CAAEouC,mBAEnDptC,IAAAC,cAAA,OAAKE,UAAU,YAAW,kBAC1BH,IAAAC,cAACgqC,GAAK,CACJ9oC,GAAG,aACHtB,YAAY,IACZS,KAAK,MACL4B,UAAQ,EACR3B,MAAO4sC,EACP/qC,cAAgB+qC,GACdpuC,KAAKC,SAAS,CAAEmuC,gBAAehuB,aAAc,KAE/CkrB,MAAOlrB,IAAiBguB,EAAgB,QAAU,KAEpDntC,IAAAC,cAAA,OAAKE,UAAU,YAAW,WAC1BH,IAAAC,cAACgqC,GAAK,CACJ9oC,GAAG,aACHtB,YAAY,IACZS,KAAK,OACL4B,UAAQ,EACR3B,MAAO8sC,EACPjrC,cAAgBirC,GACdtuC,KAAKC,SAAS,CAAEquC,UAASluB,aAAc,KAEzCkrB,MAAOlrB,IAAiBkuB,EAAU,QAAU,KAE9CrtC,IAAAC,cAAA,OAAKE,UAAU,gCACbH,IAAAC,cAACyB,EAAM,CAACC,MAAM,YAAYnB,QAASA,IAAMvB,KAAQ,UAGjDe,IAAAC,cAACyB,EAAM,CACLC,MAAM,UACNnB,QAASA,IAAMzB,KAAKwuC,WACpBhsC,SAAUksC,GACX,aAWAZ,UCpPf,MAAMgB,WAAuB7tC,IAAMzB,UACjCC,YAAYC,GACVC,MAAMD,GAAO,KAYfqvC,mBAAqB/+B,UACnB,MAAM,QAAEg/B,EAAO,YAAEC,GAAgBjvC,KAAKG,MAKtC,GAJAH,KAAKC,SAAS,CACZyuC,YAAY,IAGVM,IAAYC,EAAa,CAC3B,MAAM76B,EAAW,IAAIC,SACfs6B,EAAmB3uC,KAAKN,MAAMivC,iBACpCv6B,EAASE,OAAO,WAAY06B,GAEzBL,GACDv6B,EAASE,OAAOq6B,EAAiBjsC,KAAMisC,EAAiBntC,OAI1D,MAAMgT,EAAM,uCAEZ,UACuBnM,IAAM,CACzBkM,OAAQ,OACRC,MACArE,KAAMiE,IAINpU,KAAKC,SAAS,CACZiU,aAAc,6BACd06B,eAAe,EACf9/B,UAAU,IAGZ9O,KAAKC,SAAS,CACZiU,aAAc,yBACd06B,eAAe,EACf9/B,UAAU,IAGd,MAAOjP,GACPG,KAAKC,SAAS,CACZiU,aAAc,yBACd06B,eAAe,EACf9/B,UAAU,IAEZkC,QAAQuW,IAAI1nB,SAGdG,KAAKC,SAAS,CACZiU,aAAc,2BACd06B,eAAe,EACf9/B,UAAU,IAGd9O,KAAKC,SAAS,CAAEyuC,YAAY,KAC5B,KAEF5K,gBAAkB,KAChB,MAAM,aAAE5vB,EAAY,SAAEpF,GAAa9O,KAAKG,MACxC,OACEc,IAAAC,cAACgN,GAAc,CACbnM,MAAOmS,EACPpF,SAAUA,EACVV,kBAAoBwgC,IAClB5uC,KAAKC,SAAS,CACZ2uC,sBA3ER5uC,KAAKG,MAAQ,CACX6uC,QAAS,GACTC,YAAa,GACb9C,QAAS,GACTuC,YAAY,EACZE,eAAe,EACf9/B,SAAU,KACVoF,aAAc,MA2ElB1T,SACE,MAAM,QAAEwuC,EAAO,YAAEC,EAAW,cAAEL,GAAkB5uC,KAAKG,MACrD,IAAI,KAAED,GAASF,KAAKN,MACpB,OACEuB,IAAAC,cAACC,WAAQ,KACNytC,GAAiB5uC,KAAK8jC,kBAEvB7iC,IAAAC,cAAA,OAAKE,UAAU,kDACbH,IAAAC,cAAA,KAAGE,UAAU,kBAAkBK,QAASA,IAAMvB,MAC9Ce,IAAAC,cAAA,OAAKE,UAAU,oBACbH,IAAAC,cAACyB,EAAM,CAACC,MAAM,YAAYnB,QAASA,IAAMvB,KAAQ,UAGjDe,IAAAC,cAACyB,EAAM,CACLC,MAAM,UACNJ,UAAUwsC,IAAWC,EACrBxtC,QAASA,IAAMzB,KAAK+uC,sBACrB,UAKL9tC,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAAA,KAAGE,UAAU,mBACbH,IAAAC,cAAA,OAAKE,UAAU,2BACbH,IAAAC,cAAA,OAAKE,UAAU,SACbH,IAAAC,cAAA,KAAGE,UAAU,mBAAmB,mBAGlCH,IAAAC,cAAA,SAAOK,KAAK,WAAWH,UAAU,6BACjCH,IAAAC,cAAA,OAAKE,UAAU,YAAW,gBAC1BH,IAAAC,cAACgqC,GAAK,CACJ9oC,GAAG,WACHtB,YAAY,IACZS,KAAK,WACL4B,UAAQ,EACRkoC,aAAa,eACbhoC,cAAgB2rC,GAAYhvC,KAAKC,SAAS,CAAE+uC,cAE9C/tC,IAAAC,cAAA,OAAKE,UAAU,YAAW,oBAC1BH,IAAAC,cAACgqC,GAAK,CACJpqC,YAAY,IACZS,KAAK,WACL4B,UAAQ,EACRkoC,aAAa,eACbhoC,cAAgB4rC,GAAgBjvC,KAAKC,SAAS,CAAEgvC,kBAElDhuC,IAAAC,cAAA,OAAKE,UAAU,gCACbH,IAAAC,cAACyB,EAAM,CAACC,MAAM,YAAYnB,QAASA,IAAMvB,KAAQ,UAGjDe,IAAAC,cAACyB,EAAM,CACLC,MAAM,UACNJ,UAAUwsC,IAAWC,EACrBxtC,QAASA,IAAMzB,KAAK+uC,sBACrB,aAWAD,UCtHAI,OAnCDxvC,IACZ,MAAM,UACJ0B,EAAS,MACTT,EAAK,QACLkpB,EAAU,KAAI,YACdslB,EAAW,QACXC,EAAO,YACPC,EAAW,WACX3nC,GACEhI,EACJ,OACEuB,IAAAC,cAAA,OAAKE,UAAW,gBAAgBA,GAC9BH,IAAAC,cAAA,OAAKE,UAAU,WAAWT,GAC1BM,IAAAC,cAAA,OAAKE,UAAU,gBACZ+tC,GAAeA,EAAY3tC,OAC1BP,IAAAC,cAAA,WACED,IAAAC,cAACsD,OAAI,CAACC,MAAO0qC,KAGhBtlB,EACD5oB,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAACyB,EAAM,CACLC,MAAM,YACNC,KAAK,aACLL,SAAU6sC,EACV5tC,QAASiG,GAER0nC,OCjBb,MAAME,WAAqC9vC,YACzCC,YAAYC,GACVC,MAAMD,GAAO,KAiBf6vC,0BAA4B,KAC1B3mC,IAEE3H,IAAAC,cAACyD,EAAK,KACJ1D,IAAAC,cAAC4tC,GAAc,CACbH,iBAAkB3uC,KAAKN,MAAM4Y,OAAOq2B,iBACpCzuC,KAAOsvC,GACLxvC,KAAKC,SAAS,CAAEuvC,2BAA2B,IAAMpmC,SAKzD,KAEFqmC,uBAAyB,KACvB7mC,IACA,MAAM,gBAAE8mC,GAAoB1vC,KAAKG,MACjC,OACEc,IAAAC,cAACyD,EAAK,CACJpD,KAAK,QACLZ,MAAM,eACNT,KAAOyvC,GACL3vC,KAAKC,SAAS,CAAE0vC,wBAAwB,KACtCvmC,IACAsmC,GAAmB1mC,OAAOkoB,SAAS0e,YAIvC3uC,IAAAC,cAAC4sC,GAAW,CACV39B,KAAMnQ,KAAKN,MAAM4Y,OACjBq2B,iBAAkB3uC,KAAKN,MAAM4Y,OAAOq2B,iBACpCzuC,KAAOyvC,GACL3vC,KAAKC,SAAS,CAAE0vC,wBAAwB,KACtCvmC,IACAsmC,GAAmB1mC,OAAOkoB,SAAS0e,WAGvCf,QAAUa,GAAoB1vC,KAAKC,SAAS,CAAEyvC,wBArDpD1vC,KAAKG,MAAQ,CACXwvC,sBAAsB,EACtBH,yBAAyB,EACzBE,iBAAiB,GAIrB/gC,oBACgD,SAA1Cq8B,eAAee,QAAQ,gBACzB/rC,KAAKC,SAAS,CAAEuvC,yBAAyB,GAAQ,KAC/CxE,eAAeC,QAAQ,eAAe,GACtCD,eAAeC,QAAQ,iBAAkB,UAgD/CzqC,SACE,MACEqzB,eAAgBpS,EAAS,SACzBmS,EAAQ,cACRoB,EAAa,aACb+Y,EAAY,QACZC,EAAO,YACPC,GACEjuC,KAAKN,MAAM4Y,OAETu3B,EACJ5uC,IAAAC,cAACD,IAAME,SAAQ,KACbF,IAAAC,cAAA,OAAKE,UAAU,kBACZqgB,GAAaA,EAAUjgB,OAASigB,EAAUjgB,MAAMqF,IAC/C5F,IAAAC,cAAA,OACE2G,IAAI,OACJhB,IAAKiB,IACLC,WAAU0Z,EAAUjgB,MAAMqF,IAC1BzF,UAAU,aAGZH,IAAAC,cAAA,OAAK2F,IAAKoiC,KAAiBphC,IAAI,cAGnC5G,IAAAC,cAAA,OAAKE,UAAU,gBACbH,IAAAC,cAAA,WACED,IAAAC,cAACsD,OAAI,CAACC,MAAOmvB,KAEf3yB,IAAAC,cAAA,WACED,IAAAC,cAACsD,OAAI,CAACC,MAAOuwB,KAEf/zB,IAAAC,cAAA,OAAKE,UAAU,cACbH,IAAAC,cAACsD,OAAI,CAACC,MAAOspC,KAEf9sC,IAAAC,cAAA,WACED,IAAAC,cAACsD,OAAI,CAACC,MAAOupC,OAMrB,OACE/sC,IAAAC,cAAA,OAAKE,UAAU,mBACZpB,KAAKG,MAAMwvC,qBAAuB3vC,KAAKyvC,yBAA2B,KAClEzvC,KAAKG,MAAMqvC,wBACRxvC,KAAKuvC,4BACL,KACJtuC,IAAAC,cAACqX,GAAU,CAAC5X,MAAO,CAAEa,MAAO,kBAC5BP,IAAAC,cAACguC,GAAI,CACH9tC,UAAU,UACVT,MAAM,kBACNkpB,QAASgmB,EACTT,QAAQ,OACR1nC,WAAYA,IAAM1H,KAAKC,SAAS,CAAE0vC,sBAAsB,MAE1D1uC,IAAAC,cAACguC,GAAI,CACH9tC,UAAU,UACVT,MAAM,WACNwuC,YAAa,CAAE3tC,MAAO,4EACtB4tC,QAAQ,kBACR1nC,WAAYA,IAAM1H,KAAKC,SAAS,CAAEuvC,yBAAyB,MAE5DvB,GAAeA,EAAYzsC,OAC1BP,IAAAC,cAACguC,GAAI,CACH9tC,UAAU,UACVT,MAAM,cACNwuC,YAAalB,EACbmB,QAAQ,aACRC,aAAW,MAORC,UC1Hf,MAAM5rB,GAAiBC,KAAS,CAC9BC,OAAQA,IAAM,oDACdC,QAASA,IAAM,OAGjB,MAAMisB,WAAwC7uC,IAAMzB,UAClDC,YAAYC,GACVC,MAAMD,GAAO,KAmCfqQ,QAAU,KACR,MAAM,aACJuhB,EAAY,WACZjN,EAAU,UACVyc,EAAS,YACTvP,EAAW,qBACXhN,GACEvkB,KAAKN,MAAM4Y,OACf,IAAIkZ,EAAexxB,KAAKyxB,gBAAgBH,GACpC9M,EAAexkB,KAAK2xB,gBAAgBtN,GACpCI,EAAczkB,KAAK0xB,eAAenN,GACtC,GAAIuM,GAAgB,UAAW,CAE7B,IAAI+P,EAAgBhB,GAAiBiB,EAAUxoB,QAC/CtY,KAAKC,SAAS,CACZgkB,KAAM,OACN2N,UAAWJ,EACX5M,WAAYJ,EACZpQ,SAAU,IAAKpU,KAAKG,MAAMiU,YAAaysB,GACvChP,YAAaN,EAAY/vB,MACzBqjB,SAAUJ,SAGZzkB,KAAKC,SAAS,CACZ2xB,UAAWJ,EACX5M,WAAYJ,EACZqN,YAAaN,GAAeA,EAAY/vB,MAAQ+vB,EAAY/vB,MAAQ,GACpEqjB,SAAUJ,KAGd,KAEFgN,gBAAmBze,IACjB,IAAI8e,EAAO,GAOX,OANA9e,EAAKnH,QAASC,GACZgmB,EAAKvgB,KAAK,CACR7O,KAAMoJ,EAAGwM,OAAOyZ,aAAavwB,MAC7BA,MAAOsK,EAAGwM,OAAO0Z,WAAWxwB,SAGzBswB,GACP,KAEFH,gBAAmB3e,IACjB,IAAI8e,EAAO,GAOX,OANA9e,EAAKnH,QAASC,GACZgmB,EAAKvgB,KAAK,CACR7O,KAAMoJ,EAAGwM,OAAOoM,aAAaljB,MAC7BA,MAAOsK,EAAGwM,OAAOyK,WAAWvhB,SAGzBswB,GACP,KAEFie,aAAgB/8B,IACd,IAAI8e,EAAO,GAOX,OANA9e,EAAKnH,QAASC,GACZgmB,EAAKvgB,KAAK,CACR7O,KAAMoJ,EAAGwM,OAAOoM,aAAaljB,MAC7BA,MAAOsK,EAAGwM,OAAOyK,WAAWvhB,SAGzBswB,GACP,KAEFJ,eAAkB1e,IAChB,IAAI8e,EAAO,GASX,OARI9e,GAAQA,EAAKrR,QACfqR,EAAKnH,QAASC,GACZgmB,EAAKvgB,KAAK,CACR7O,KAAMoJ,EAAGwM,OAAOqM,YAAYnjB,MAC5BA,MAAOsK,EAAGwM,OAAOuK,UAAUrhB,SAI1BswB,GACP,KACF9S,cAAgB,CAAC5c,EAAIqC,KACnB,MAAM,SAAE2P,GAAapU,KAAKG,MAC1B,IAAIU,EACAP,EAAW,GACf,GAAIwI,WACFjI,EAAUiI,SAAS8C,iBAAiB,IAAIxJ,oBACpCvB,GACF,IAAK,IAAI0S,EAAI,EAAGA,EAAI1S,EAAQc,OAAQ4R,IAClCjT,EAASiR,KAAK1Q,EAAQ0S,GAAG/R,OAI/BxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACH,CAAC3P,GAAQnE,MAGb,KAEF2e,aAAe,CAACiG,EAAUzgB,EAAO5D,KAC/B,MAAM,SAAEuT,GAAapU,KAAKG,MAC1BH,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACH,CAAC3P,GAAQygB,EAAWrkB,EAAQe,IAAKkK,GAAOA,EAAGtK,OAAS,OAGxD,KAEF0/B,oBAAuB1/B,IACrB,MAAM,SAAE4S,GAAapU,KAAKG,MACtBiU,EAASoN,mBAAmBnQ,QAAQ7P,IAAU,EAChDxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHoN,mBAAoBpN,EAASoN,mBAAmBlP,OAC7CxG,GAAOA,IAAOtK,MAKrBxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHoN,mBAAoB,IAAIpN,EAASoN,mBAAoBhgB,OAI3D,KAEFikB,iBAAoBjkB,IAClBxB,KAAKC,SAAS,CAAEmU,SAAU,IAAKpU,KAAKG,MAAMiU,YAAa5S,MACvD,KAEFwmB,YAAc,KACZpf,IACA,MAAM,KAAEqb,EAAI,OAAExW,EAAM,YAAEokB,GAAgB7xB,KAAKG,OACrC,MAAEQ,EAAK,KAAE0gB,EAAI,IAAE4Q,GAAQjyB,KAAKG,MAAM+xB,aACxC,OACEjxB,IAAAC,cAAC0vB,GAAK,CACJrvB,KAAK,QACLZ,MAAOA,EACPT,KAAMA,KACW,cAAXuN,GAAqC,UAAXA,EAC5BzE,OAAOkoB,SAAS1R,KAAO,GAAGqS,EAE1B7xB,KAAKC,SAAS,CAAE2F,WAAW,EAAOssB,aAAc,MAAQ,IACtD9oB,OAKNnI,IAAAC,cAAA,OAAKE,UAAU,cAAcigB,IAClB,SAAT4C,GAA8B,cAAXxW,IAA2BwkB,GAC9ChxB,IAAAC,cAAA,OAAKE,UAAU,gCACbH,IAAAC,cAACyB,EAAM,CACLC,MAAM,UACNnB,QAASA,IAAOuH,OAAOkoB,SAAS1R,KAAOyS,EAAIzd,KAE1Cyd,EAAIlwB,QAID,QAATkiB,GAA6B,UAAXxW,GACjBxM,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAACyB,EAAM,CACLC,MAAM,YACNnB,QAASA,IAAOuH,OAAOkoB,SAAS1R,KAAO,GAAGqS,GAC3C,UAGD5wB,IAAAC,cAACyB,EAAM,CACLH,UAAU,EACVI,MAAM,UACNnB,QAASA,IAAMzB,KAAKsnB,cACrB,WAKK,QAATrD,GAA6B,UAAXxW,GACjBxM,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAACyB,EAAM,CACLC,MAAM,YACNnB,QAASA,IACPzB,KAAKC,SAAS,CAAE2F,WAAW,EAAOssB,aAAc,MAAQ,IACtD9oB,MAGL,YAOT,KAEFsc,aAAe,KACb,IAAIC,EAAY5E,GACd/gB,KAAKG,MAAMiU,SACS,SAApBpU,KAAKG,MAAM8jB,KAAkB,CAAC,oBAAsB,IAElD7D,EAAe,CACjBzf,MAAO,qBACP0gB,KAAM,+BAEiC,IAArCrI,OAAO4M,QAAQD,GAAWhkB,OAC5B3B,KAAKC,SAAS,CAAE0lB,YAAW/f,WAAW,EAAMssB,aAAc9R,IAE1DpgB,KAAKimB,YAEP,KAEFa,eAAkBe,IAChB,IAAIvF,EAAU,GAMd,OALAuF,EAAWjmB,IAAKkmB,IACdA,EAAOyZ,WAAW3/B,IAAKyhB,IACrBf,EAAQ/Q,KAAK8R,EAAUnb,OAAO1G,WAG3B8gB,GACP,KAEF6P,iBAAoBtK,IAClB,IAAIhI,EAAU,GA2Bd,OA1BAA,EAAUgI,EAAWjmB,IAAK4Z,IACxB,IAAI4W,EAAgB,GAkBpB,OAjBAA,EAAgB5W,EAAO+lB,WAAW3/B,IAAKyhB,GAEnCpiB,IAAAC,cAAA,OAAKE,UAAU,gBACbH,IAAAC,cAAA,KAAGE,UAAW,uBACdH,IAAAC,cAAA,KAAGse,KAAM6D,EAAUjb,WAAW5G,MAAO1B,OAAO,UACzCujB,EAAUlb,MAAM3G,SAKzBgmB,KAAWC,UAAU,CACnBA,UAAW,CACT3iB,MAAO,oBACP2V,WAAYe,EAAOxT,OAAOxG,OAE5BomB,cAAe,cAGf3mB,IAAAC,cAAA,OAAKE,UAAU,SACbH,IAAAC,cAAA,OAAKE,UAAU,eAAeoa,EAAOxT,OAAOxG,OAC5CP,IAAAC,cAAA,OAAKE,UAAU,uBAAuBgxB,MAIrCnxB,IAAAC,cAAA,OAAKE,UAAU,OAAOye,IAC7B,KAEFoG,SAAWjW,UACT,MAAM,SAAEoE,EAAQ,KAAE6P,EAAI,KAAE1iB,GAASvB,KAAKG,MACtC,IAAIimB,GAAa,IAAIhK,MAAOiK,oBAE5B,IAAIlW,EAAO+S,GAAc,IACpB9O,EACHkS,WAAYF,IAEd,IACE,IAAIlW,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,IARQ,wCASRrE,OACA1H,OAAQ,CACNlH,UAEa,SAAT0iB,EAAkB,CAAEjJ,OAAQ,WAAW5G,EAAS4G,QAAa,IAEnEyL,OAAQ,CAAEC,QAAS,CAAE,eAAgB,0BAGvC,GAAIxW,EACF,GAAIA,EAASC,KAAKsE,UAAUjT,OAAkB,QAATyiB,EAAgB,CACnD,IAAI0G,EAAiB,CACnBhqB,MAAUY,EAAH,4BACP8f,KAAMrhB,KAAKmyB,iBAAiBjiB,EAASC,KAAKkxB,gBAE5C,MAAM/e,EAAUtiB,KAAK8mB,eAAe5W,EAASC,KAAKkxB,eAClDrhC,KAAKC,SAAS,CACZ2F,WAAW,EACXssB,aAAcvH,EACdvW,SAAU,IAAKA,EAAUkO,WACzB7U,OAAQ,eAEL,GAAIyC,EAASC,KAAKsE,UAAUjT,OAAkB,SAATyiB,EAAiB,CAC3D,IAAI0G,EAAiB,CACnBhqB,MAAO,aACP0gB,KAAMnR,EAASC,KAAKuE,QAAQlT,OAE9B,MAAM6hB,EAAYnT,EAASC,KAAKkxB,cAAc,GAAGE,WAAW,GAC5DvhC,KAAKC,SACH,CACE2F,WAAW,EACXssB,aAAcvH,EACdvW,SAAU,IAAKA,EAAUkO,QAAS,CAAC,GAAGe,EAAUnb,OAAO1G,SAEzD,KACE,MAAM6wB,EAAMrpB,OAAOspB,KAAKjP,EAAUjb,WAAW5G,MAAO,UACzC,MAAP6wB,GACFA,EAAItyB,cAIL,CACL,IAAIqgB,EAAe,CACjBzf,MAAO,iBACP0gB,KAAMnR,EAASC,KAAKuE,QAAQlT,OAG9BxB,KAAKC,SAAS,CACZ2F,WAAW,EACXssB,aAAc9R,KAIpB,MAAOvgB,GACPmR,QAAQuW,IAAI1nB,EAAEqQ,SAASe,cAEzB,KAEFqW,WAAatX,UACX,MAAM,SAAEoE,EAAQ,KAAE7S,EAAI,KAAE0iB,GAASjkB,KAAKG,MAEtC,IAAIgQ,EAAO+S,GAAc,CACvBZ,QAAkB,SAAT2B,EAAkB,CAAC,GAAG7P,EAAS4G,QAAY5G,EAASkO,UAG/D,IACE,IAAIpS,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,IARQ,0CASRrE,OACAsW,OAAQ,CAAEC,QAAS,CAAE,eAAgB,0BAGvC,GAAIxW,EACF,GAAIA,EAASC,KAAKsE,UAAUjT,MAAO,CACjC,IAAImpB,EAAiB,CACnBhqB,MAAO,iBACP0gB,KAAMnR,EAASC,KAAKuE,QAAQlT,MAC5BywB,IAAK,CACHlwB,MAAUR,EAAH,QACPiT,IAAKtE,EAASC,KAAKohB,YAAY/vB,QAGnCxB,KAAKC,SAAS,CACZ2F,WAAW,EACXssB,aAAcvH,EACdld,OAAQ,kBAEL,CACL,IAAI2S,EAAe,CACjBzf,MAAO,qBACP0gB,KAAMnR,EAASC,KAAKuE,QAAQlT,OAG9BxB,KAAKC,SAAS,CACZ2F,WAAW,EACXssB,aAAc9R,KAIpB,MAAOvgB,GACPmR,QAAQuW,IAAI1nB,EAAEqQ,SAASe,cAEzB,KAEF6T,mBAAqB9U,UACnB,IAAIE,QAAiBsT,GAAgB,CAAEwB,eACf,MAApB9U,EAASzC,QAAkByC,EAASC,KAEtCnQ,KAAKC,SAAS,CACZ8kB,gBAAiBpc,eAAIuH,EAASC,KAAM,kBAAmB,IACvD6U,eAGFlF,MAAM,sCAER,KAEFqF,wBAA2B3jB,IACzB,MAAM,SAAE4S,EAAQ,gBAAEgR,EAAe,gBAAEL,GAAoB/kB,KAAKG,MAC5D,GAAc,MAAVqB,EAAe,CACjB,IAAI6jB,EAAY,GAChBN,EAAgBnjB,IAAK4Z,IACnBA,EAAO8J,UAAU1jB,IAAK2jB,IACpBF,EAAU9T,KAAKgU,EAAMC,YAAYhkB,WAIrCxB,KAAKC,SAAS,CACZmlB,iBAAkBA,EAClBhR,SAAU,IACLA,EACHmN,eAAiB6D,EAA8B,GAAZC,UAG9BjR,EAASmN,eAAelQ,QAAQ7P,IAAU,EACnDxB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHmN,eAAgBnN,EAASmN,eAAejP,OAAQxG,GAAOA,IAAOtK,MAIlExB,KAAKC,SAAS,CACZmU,SAAU,IACLA,EACHmN,eAAgB,IAAInN,EAASmN,eAAgB/f,OAInD,KAEF0mB,qBAAwBqK,IAEtB,MAAM,SAAEne,EAAQ,gBAAE2Q,EAAe,gBAAEK,GAAoBplB,KAAKG,MAC5D,GAAI4kB,GAAmBA,EAAgBpjB,OACrC,OACEV,IAAAC,cAAA,OAAKE,UAAU,eACbH,IAAAC,cAAA,OAAKE,UAAU,cAAa,mBAC5BH,IAAAC,cAAA,OAAKE,UAAU,WACbH,IAAAC,cAAA,OAAKE,UAAU,YACbH,IAAAC,cAAA,OAAKE,UAAU,SACbH,IAAAC,cAAC8K,EACC,CACAxK,MAAM,IACNO,MAAM,aACNkK,QAASmZ,EACTlZ,iBAAmB1K,GACjBxB,KAAKmlB,wBAAwB3jB,OAKrCP,IAAAC,cAAA,OAAKE,UAAU,OACZ2jB,EAAgBnjB,IAAI,CAAC4Z,EAAQ1Z,IAE1Bb,IAAAC,cAAA,OAAKE,UAAU,SACbH,IAAAC,cAAA,OAAKE,UAAU,cAAcoa,EAAOrB,WAAW3Y,OAC9Cga,EAAO8J,UAAU1jB,IAAK2jB,GAEnBtkB,IAAAC,cAAC8K,EACC,CACAxK,MAAO+jB,EAAMC,YAAYhkB,MACzBO,MAAOwjB,EAAM6C,UAAU5mB,MAEvByK,QACEmI,EAASmN,eAAelQ,QACtBkU,EAAMC,YAAYhkB,QACf,EAGP0K,iBAAmB1K,GACjBxB,KAAKmlB,wBAAwB3jB,YA3erDxB,KAAKG,MAAQ,CACX8jB,KAAM,MACNuO,OAAQ,KACRZ,UAAW,KACXhN,WAAY,KACZgE,cAAe,GACfhjB,WAAW,EACXssB,aAAc,KACdvM,UAAW,GACXlP,UAAW,KACXsO,gBAAiB,KACjBF,SAAU,KACV6N,sBAAuB,KACvBte,SAAU,IAAK4N,IACfyQ,gBAAgB,EAChBrN,iBAAiB,EACjB3X,OAAQ,QACRokB,YAAa,GACb7M,WAAY,IAGhBrW,oBACE3O,KAAKC,SAAS,CACZsB,KAAMuvB,GAAgB,QACtBtV,OAAQsV,GAAgB,UACxB2B,gBAAgB,IAElBzyB,KAAK+P,UACL,IAAIyhB,EAAexxB,KAAKyxB,gBAAgBzxB,KAAKN,MAAM4Y,OAAOgZ,eACrDR,GAAgB,WAAaU,GAAgBA,EAAa7vB,QAC7D3B,KAAK8kB,mBAAmB0M,EAAa,GAAGhwB,OA4d5ChB,SACE,MAAM,KACJyjB,EAAI,UACJ0B,EAAS,SACTvR,EAAQ,UACRwd,EAAS,WACThN,EAAU,KACVrjB,EAAI,UACJqE,EAAS,eACT6sB,EAAc,gBACd1N,EAAe,YACf8M,EAAW,SACXhN,GACE7kB,KAAKG,MAET,OAAKyxB,EAKH3wB,IAAAC,cAAA,OAAKE,UAAU,uBACZwE,GAAa5F,KAAKgoB,cACnB/mB,IAAAC,cAAA,OAAKE,UAAU,sBACZG,EACY,QAAT0iB,EACE,aAAa1iB,EACb,aAAaA,EACf,IAEI,QAAT0iB,GACChjB,IAAAC,cAAA,OAAKE,UAAU,4BACbH,IAAAC,cAACyvB,GAAQ,CACPlwB,MAAM,QACNI,QAAS+wB,EACTlxB,MAAOilB,EAAUgN,iBACjBpyB,gBAAiBqxB,EAAU,GAAGlvB,KAE9BT,sBAAwB2wB,IACtB5yB,KAAK8kB,mBACH8M,EAAUtf,OAAQxG,GAAOA,EAAGpJ,OAASkwB,GAAsB,GACxDpxB,WAOZujB,GAAmB/kB,KAAKkoB,qBAAqBnD,GAC9C9jB,IAAAC,cAAA,OAAKE,UAAU,mBACbH,IAAAC,cAACgC,EAAS,CACRvC,OAAK,EACLY,KAAK,OACLT,YAAY,+BACZiB,MAAM,iBACNP,MAAO4S,EAASuqB,cAChBx7B,UAAQ,EACRzC,MAAOilB,EAAUgZ,cACjBt7B,cAAes7B,GACb3+B,KAAKylB,iBAAiB,CAAEkZ,qBAI9B19B,IAAAC,cAAA,OAAKE,UAAU,yBACbH,IAAAC,cAAA,OAAKE,UAAU,gBACbH,IAAAC,cAAA,OAAKE,UAAU,cAAa,aAChBH,IAAAC,cAAA,YAAM,MAElBD,IAAAC,cAACirB,GAAW,CACV5qB,KAAK,OACLkuB,SAAS,4BACTC,SAAS,gBACTC,WAAW,eACX7uB,YAAa+xB,KACbnyB,MAAOilB,EAAUrE,UACjB9f,MAAO4S,EAASkN,UAChB5B,iBAAkBA,CAAC4B,EAAWlB,IAC5BpgB,KAAKylB,iBAAiB,CAAEnE,iBAO9BrgB,IAAAC,cAAA,OAAKE,UAAU,qBACbH,IAAAC,cAAA,OAAKE,UAAU,cAAa,mBAC5BH,IAAAC,cAACirB,GAAW,CACV5qB,KAAK,YACLkuB,SAAS,4BACTC,SAAS,cACTC,WAAW,cACX7uB,YAAa+xB,KACbnyB,MAAOilB,EAAUlE,UACjBjgB,MAAO4S,EAASqN,UAChB/B,iBAAkBA,CAAC+B,EAAWrB,IAC5BpgB,KAAKylB,iBAAiB,CAAEhE,kBAc/BmD,GAAcA,EAAWjjB,OACxBV,IAAAC,cAAC4d,GAAW,CACV/c,MAAM,WACNK,GAAG,SACHe,UAAQ,EACRzC,MAAOilB,EAAUnE,mBACjB3gB,QAAS+jB,EACTngB,MAAM,qBACNnE,SAAU8T,EAASoN,mBACnBzC,KAAK,0CACLC,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GACrDwa,aAAcA,CAACiG,EAAUzgB,EAAO5D,IAC9Bb,KAAKif,aAAaiG,EAAUzgB,EAAO5D,KAIrC,GAEHgkB,GAAYA,EAASljB,OACpBV,IAAAC,cAAC4d,GAAW,CACV/c,MAAM,qBACNK,GAAG,QACHvB,QAASgkB,EACTpgB,MAAM,2BACNnE,SAAU8T,EAASiO,yBACnBtD,KAAK,0CACLC,cAAeA,CAAC5c,EAAIqC,IAAUzE,KAAKgf,cAAc5c,EAAIqC,GACrDwa,aAAcA,CAACiG,EAAUzgB,IACvBzE,KAAKif,aAAaiG,EAAUzgB,EAAOogB,KAIrC,GAGJ5jB,IAAAC,cAACwd,GAAiB,CAChB3c,MAAM,aACNoB,UAAQ,EACR3B,MAAO4S,EAASwqB,QAChBt7B,UAAW,IACX5C,MAAOilB,EAAUiZ,QACjBv7B,cAAgBu7B,GAAY5+B,KAAKylB,iBAAiB,CAAEmZ,cAGrDr9B,IAAiD,IAAzCA,EAAKqI,cAAcyH,QAAQ,UAClCpQ,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,eACZiB,MAAM,kBACNP,MAAO4S,EAAS+qB,eAChB77B,UAAW,EACXD,cAAgB87B,GACdn/B,KAAKylB,iBAAiB,CAAE0Z,qBAK9Bl+B,IAAAC,cAAA,OAAKE,UAAW,6CACbukB,EAAUnb,WAAamb,EAAUlb,QAAW,YAAc,gBAE3DxJ,IAAAC,cAAA,OAAKE,UAAU,uBACbH,IAAAC,cAACyd,GAAQ,CACPxb,UAAQ,EACRpB,MAAM,aACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXnnB,MAAO4S,EAAS5J,UAChB9J,MAAOilB,EAAUnb,UACjBlK,SAAU8T,EAAS5J,WAAa,IAAI4R,KAAKhI,EAAS5J,WAClDnI,SAAUmI,GAAaxK,KAAKylB,iBAAiB,CAAEjb,gBAEjDvJ,IAAAC,cAAA,OAAKE,UAAU,wBACfH,IAAAC,cAACyd,GAAQ,CACPxb,UAAQ,EACRpB,MAAM,WACNnB,KAAK,WACL0nB,gBAAgB,aAChBC,gBAAc,EACdC,YAAY,OACZC,WAAW,QACXC,cAAe,EACfC,WAAW,sBACXnnB,MAAO4S,EAAS3J,QAChB/J,MAAOilB,EAAUlb,QACjBnK,SAAU8T,EAAS3J,SAAW,IAAI2R,KAAKhI,EAAS3J,SAChDpI,SAAUoI,GAAWzK,KAAKylB,iBAAiB,CAAEhb,eAGjDxJ,IAAAC,cAAA,OAAKE,UAAU,cAAa,iCAC1BukB,EAAUnb,WAAamb,EAAUlb,UACjCxJ,IAAAC,cAAA,OAAKE,UAAU,4BACZukB,EAAUnb,UAAYmb,EAAUnb,UAAYmb,EAAUlb,QAAUkb,EAAUlb,QAAU,KAK3FxJ,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLX,KAAK,WACLE,YAAY,qBACZiB,MAAM,WACNP,MAAO4S,EAASirB,SAChB3+B,MAAOilB,EAAU0Z,SACjBh8B,cAAgBg8B,GAAar/B,KAAKylB,iBAAiB,CAAE4Z,eAGvDp+B,IAAAC,cAAA,OAAKG,MAAO,CAAEusC,QAAS,SACrB3sC,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,QACZiB,MAAM,WACNnB,KAAK,OACLY,MAAO4S,EAAS1J,SAChBrH,cAAgBqH,GAAa1K,KAAKylB,iBAAiB,CAAE/a,eAGvDzJ,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,uBACZiB,MAAM,WACNnB,KAAK,WACLY,MAAO4S,EAASkrB,SAChBj8B,cAAgBi8B,GAAat/B,KAAKylB,iBAAiB,CAAE6Z,gBAIzDr+B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,SACLX,KAAK,QACLE,YAAY,SACZiB,MAAM,QACNqB,UAAQ,EACR5B,MAAO4S,EAASmrB,MAChBl8B,cAAgBk8B,GAAUv/B,KAAKylB,iBAAiB,CAAE8Z,YAGnD9M,GACCxxB,IAAAC,cAACwiB,GAAc,CACbvgB,UAAQ,EACRpB,MAAO,cACPuc,aAAclK,EAAS1Q,YACvBhD,MAAOilB,EAAUjiB,YACjBL,cAAeK,GACb1D,KAAKylB,iBAAiB,CAAE/hB,gBAE1BshB,WAAYhlB,KAAKG,MAAM6kB,aAI3B/jB,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,8CACZiB,MAAM,WACNP,MAAO4S,EAASqrB,uBAChBp8B,cAAgBo8B,GACdz/B,KAAKylB,iBAAiB,CAAEga,6BAI5Bx+B,IAAAC,cAACgC,EAAS,CACR3B,KAAK,OACLT,YAAY,qEACZiB,MAAM,WACNP,MAAO4S,EAASorB,uBAChBn8B,cAAgBm8B,GACdx/B,KAAKylB,iBAAiB,CAAE+Z,6BA0B5Bv+B,IAAAC,cAAA,OAAKE,UAAU,+BACbH,IAAAC,cAAA,OAAKE,UAAU,cAAa,iBAC5BH,IAAAC,cAAC8uB,GAAQ,CACPpvB,KAAK,OACLmB,MAAM,YAENP,MAAO4S,EAASsN,aAChB5F,kBAAmBA,CAAC4F,EAActB,IAChCpgB,KAAKylB,iBAAiB,CAAE/D,oBAK9BzgB,IAAAC,cAAA,OAAKE,UAAU,2BACH,QAAT6iB,GACChjB,IAAAC,cAACyB,EAAM,CACLC,MAAM,YACNnB,QAASA,IAAOuH,OAAOkoB,SAAS1R,KAAO,GAAGqS,GAC3C,UAIH5wB,IAAAC,cAACyB,EAAM,CACLE,KAAK,SACLD,MAAgB,SAATqhB,EAAkB,YAAc,UACvCxiB,QAASA,IAAMzB,KAAK0lB,gBAEV,SAATzB,EAAkB,iBAAmB,QAE9B,SAATA,GACChjB,IAAAC,cAACyB,EAAM,CACLH,UAAU4R,EAAS4G,OACnBpY,MAAM,UACNnB,QAASA,IAAMzB,KAAKsnB,cACrB,YAlUA,MA4UEwoB,UCv3Bf,MAAME,WAAqBxwC,YACzBC,YAAYC,GACVC,MAAMD,GAAO,KAOfE,aAAgBC,IACdA,EAAEC,OAAOC,QACTC,KAAKC,SAAS,CAAEC,MAAOF,KAAKG,MAAMD,QAClC,KAEFE,WAAa,KACPJ,KAAKG,MAAMD,MACbG,WAAW,KACTL,KAAKC,SAAS,CAAEC,MAAOF,KAAKG,MAAMD,QACjC,MAfLF,KAAKG,MAAQ,CACXD,MAAM,EACNI,SAAUZ,EAAMa,iBAiBpBC,SACE,MAAM,MACJC,EAAK,MACLC,EAAK,MACLC,EAAK,KACLC,EAAI,QACJC,EAAO,YACPC,EAAW,iBACXC,GACEf,KAAKN,OACH,SAAEY,EAAQ,KAAEJ,GAASF,KAAKG,MAChC,OACEc,IAAAC,cAACC,WAAQ,KACPF,IAAAC,cAAA,OAAKE,UAAU,2BACZR,EAAOK,IAAAC,cAAA,KAAGE,UAAW,aAAaR,IAAa,GAC/CD,EAAQM,IAAAC,cAAA,OAAKE,UAAU,SAAST,GAAe,GAChDM,IAAAC,cAAA,SACEE,UAAW,SAASX,GAAgB,MAAMC,EAAQ,QAAU,MAE5DO,IAAAC,cAAA,OAAKE,UAAU,wBACbH,IAAAC,cAAA,SACEK,KAAK,SACLC,MAAOlB,GAAsBQ,EAC7BM,UAAU,eACVK,QAAU5B,GAAMG,KAAKJ,aAAaC,MAItCoB,IAAAC,cAAA,KAAGE,UAAU,2BACbH,IAAAC,cAAA,MAAIE,UAAW,kBAAiBlB,EAAO,GAAK,WACzCW,GAAWA,EAAQc,OAClBd,EAAQe,IAAI,CAACC,EAAMC,IAEfb,IAAAC,cAAA,MACEc,IAAK,WAAWF,EAChBL,QAASA,KACPzB,KAAKC,SAAS,CAAEK,SAAUuB,EAAKa,MAAQ,KACrC1C,KAAKN,MAAMuC,sBAAsBJ,EAAKa,UAI1CzB,IAAAC,cAAA,YAAOW,EAAKa,QAKlBzB,IAAAC,cAAA,MAAIE,UAAU,SACXL,GAAsC,uBAW1CivC,UC5Df,MAAMtsB,GAAiBC,KAAS,CAC9BC,OAAQA,IAAM,oDACdC,QAASA,IAAM,OAGjB,MAAMosB,WAAwChvC,IAAMzB,UAClDC,YAAYC,GACVC,MAAMD,GAAO,KA2Hf06B,aAAe,CAACF,EAAMC,EAAYb,EAAKG,KACrC,IAAIc,EACAJ,IACFI,EACEjwB,MAASD,OAAO,aAChBC,IAAO6vB,EAAY,CAAC,WACjB9vB,OAAO,SACPuC,QAAQ,IAAK,IAChB,MAEJ5M,KAAKylB,iBAAiB,CACpB,CAAC6T,EAAMG,GAAOc,GAAsB,QAEtC,KAEFlB,WAAa,KACXr5B,KAAKC,SAAS,CACZmU,SAAU,IACLpU,KAAKG,MAAMiU,SACdgiB,mBAAoB,KACpBC,mBAAoB,KACpBC,4BAA6B,KAC7BC,4BAA6B,KAC7BE,oBAAqB,KACrBC,oBAAqB,KACrBC,6BAA8B,KAC9BC,6BAA8B,KAC9BE,sBAAuB,KACvBC,sBAAuB,KACvBC,+BAAgC,KAChCC,+BAAgC,KAChCE,qBAAsB,KACtBC,qBAAsB,KACtBC,8BAA+B,KAC/BC,8BAA+B,KAC/BE,mBAAoB,KACpBC,mBAAoB,KACpBC,4BAA6B,KAC7BC,4BAA6B,KAC7BE,qBAAsB,KACtBC,qBAAsB,KACtBC,8BAA+B,KAC/BC,8BAA+B,KAC/BE,mBAAoB,KACpBC,mBAAoB,KACpBC,4BAA6B,KAC7BC,4BAA6B,SAGjC,KAEFrQ,YAAc,KACZpf,IACA,MAAM,MAAEjI,EAAK,KAAE0gB,EAAI,IAAE4Q,GAAQjyB,KAAKG,MAAM+xB,aACxC,OACEjxB,IAAAC,cAAC0vB,GAAK,CACJrvB,KAAK,QACLZ,MAAOA,EACPT,KAAMA,IACJF,KAAKC,SAAS,CAAE2F,WAAW,EAAOssB,aAAc,MAAQ,IACtD9oB,MAIJnI,IAAAC,cAAA,OAAKE,UAAU,IAAIigB,GAClB4Q,EACChxB,IAAAC,cAAA,OAAKE,UAAU,OACbH,IAAAC,cAACyB,EAAM,CACLC,MAAM,UACNnB,QAASA,IAAOuH,OAAOkoB,SAAS1R,KAAOyS,EAAIzd,KAE1Cyd,EAAIlwB,QAIP,KAIR,KAEFkkB,SAAWjW,UACT,MAAM,SAAEoE,GAAapU,KAAKG,MAC1B,IAAIimB,GAAa,IAAIhK,MAAOiK,oBAE5B,IAAIlW,EAAO+S,GAAc,IAAK9O,EAAUkS,WAAYF,IAEpD,IACE,IAAIlW,QAAiB7H,IAAM,CACzBkM,OAAQ,OACRC,IANQ,yCAORrE,OACA1H,OAAQ,CACN8a,QAASnP,EAAS2hB,SAEpBtP,OAAQ,CAAEC,QAAS,CAAE,eAAgB,0BAEvC,GAAIxW,EACF,GAAIvH,eAAIuH,EAASC,KAAM,mBAAmB,GAAQ,CAChD,IAAIwa,EAAiB,CACnBhqB,MAAO,aACP0gB,KAAM1Y,eAAIuH,EAASC,KAAM,gBAAiB,eAE5CnQ,KAAKC,SAAS,CACZ2F,WAAW,EACXssB,aAAcvH,IAEhBnD,KAAWC,UAAU,CACnBA,UAAW,CACT3iB,MAAO,mBAET8iB,cAAe,kBAEZ,CACL,IAAIxH,EAAe,CACjBzf,MAAO,iBACP0gB,KAAM1Y,eAAIuH,EAASC,KAAM,gBAAiB,qBAE5CnQ,KAAKC,SAAS,CACZ2F,WAAW,EACXssB,aAAc9R,KAIpB,MAAOvgB,GACPmR,QAAQuW,IAAI1nB,EAAEqQ,SAASe,YACvB,IAAI0Z,EAAiB,CACnBhqB,MAAO,aACP0gB,KAAM1Y,eAAI9I,EAAEqQ,SAASC,KAAM,gBAAiB,eAE9CnQ,KAAKC,SAAS,CACZ2F,WAAW,EACXssB,aAAcvH,MAGlB,KAEF8J,WAAcC,IACZ,GAAI5rB,SAAU,CACZ,IAAI6rB,EAAM7rB,SAAS5H,cAAc,YAEjC,OADAyzB,EAAIC,UAAYF,EACTC,EAAInzB,QAEb,KAEFqzB,aAAe7kB,UACb,IAAIE,QAAiBkkB,GAAkB,CAAE7Q,YACzC,MAAMuR,EAAQ90B,KACd,GAAwB,MAApBkQ,EAASzC,QAAkByC,EAASC,KAAM,CAC5C,MAAM6S,EAAera,eAAIuH,EAASC,KAAM,eAAgB,IACxDnQ,KAAKC,SAAS,CACZmU,SAAU,CACR+B,KAAMxN,eAAIuH,EAASC,KAAM,aAAc,MACvC4kB,sBAAuBD,EAAML,WAC3B9rB,eAAIuH,EAASC,KAAM,oBAAqB,KAE1C6kB,cAAersB,eAAIuH,EAASC,KAAM,sBAAuB,IACzD8kB,QAAStsB,eAAIuH,EAASC,KAAM,gBAAiB,IAC7C+/B,iBAAkBvnC,eAAIuH,EAASC,KAAM,yBAA0B,IAC/D+kB,YAAavsB,eAAIuH,EAASC,KAAM,oBAAqB,IACrDglB,gBAAiBxsB,eAAIuH,EAASC,KAAM,yBAAyB,GAC7DilB,iBAAkBzsB,eAAIuH,EAASC,KAAM,0BAA0B,GAC/DklB,eAAgB1sB,eAAIuH,EAASC,KAAM,wBAAwB,GAC3DmlB,aAAc3sB,eAAIuH,EAASC,KAAM,sBAAsB,GACvD4hB,aAAcppB,eAAIuH,EAASC,KAAM,6BAA8B,MAC/DolB,oBAAqBT,EAAML,WACzB9rB,eAAIuH,EAASC,KAAM,oCAAqC,KAE1DqlB,QAAS7sB,eAAIuH,EAASC,KAAM,gCAAiC,MAC7DslB,UAAW9sB,eACTuH,EAASC,KACT,kCACA,MAEFulB,SAAU/sB,eAAIuH,EAASC,KAAM,iCAAkC,MAC/DwlB,UAAWhtB,eACTuH,EAASC,KACT,sCACA,MAEFylB,UAAWjtB,eACTuH,EAASC,KACT,sCACA,MAEF0lB,oBAAqBltB,eACnBuH,EAASC,KACT,gCACA,MAEF2lB,oBAAqB9S,EACjBA,EAAaphB,IAAKkK,GAAOA,EAAGqM,GAAG3W,OAC/B,GACJwhB,aAAcA,EACVA,EAAaphB,IAAKkK,IACX,CACLpJ,KAAMoJ,EAAGqK,KAAK3U,MACdY,GAAI0J,EAAGqM,GAAG3W,MACVqF,IAAKiF,EAAGmX,IAAIzhB,SAGd,GACJu0B,QAASptB,eAAIuH,EAASC,KAAM,gBAAiB,MAC7C6lB,oBAAqBrtB,eACnBuH,EAASC,KACT,4BACA,MAEF8lB,eAAettB,eAAIuH,EAASC,KAAM,4BAA6B,OAE3DxH,eAAIuH,EAASC,KAAM,sBAAuB,MAC9CgmB,OAAQxtB,eAAIuH,EAASC,KAAM,eAAgB,MAC3CimB,mBAAoBztB,eAClBuH,EAASC,KACT,6CACA,MAEFkmB,mBAAoB1tB,eAClBuH,EAASC,KACT,6CACA,MAEFmmB,4BAA6B3tB,eAC3BuH,EAASC,KACT,sDACA,MAEFomB,4BAA6B5tB,eAC3BuH,EAASC,KACT,sDACA,MAEFqmB,eAAgB7tB,eACduH,EAASC,KACT,yCACA,MAEFsmB,oBAAqB9tB,eACnBuH,EAASC,KACT,8CACA,MAEFumB,oBAAqB/tB,eACnBuH,EAASC,KACT,8CACA,MAEFwmB,6BAA8BhuB,eAC5BuH,EAASC,KACT,uDACA,MAEFymB,6BAA8BjuB,eAC5BuH,EAASC,KACT,uDACA,MAEF0mB,gBAAiBluB,eACfuH,EAASC,KACT,0CACA,MAEF2mB,sBAAuBnuB,eACrBuH,EAASC,KACT,gDACA,MAEF4mB,sBAAuBpuB,eACrBuH,EAASC,KACT,gDACA,MAEF6mB,+BAAgCruB,eAC9BuH,EAASC,KACT,yDACA,MAEF8mB,+BAAgCtuB,eAC9BuH,EAASC,KACT,yDACA,MAEF+mB,kBAAmBvuB,eACjBuH,EAASC,KACT,4CACA,MAEFgnB,qBAAsBxuB,eACpBuH,EAASC,KACT,+CACA,MAEFinB,qBAAsBzuB,eACpBuH,EAASC,KACT,+CACA,MAEFknB,8BAA+B1uB,eAC7BuH,EAASC,KACT,wDACA,MAEFmnB,8BAA+B3uB,eAC7BuH,EAASC,KACT,wDACA,MAEFonB,iBAAkB5uB,eAChBuH,EAASC,KACT,2CACA,MAEFqnB,mBAAoB7uB,eAClBuH,EAASC,KACT,6CACA,MAEFsnB,mBAAoB9uB,eAClBuH,EAASC,KACT,6CACA,MAEFunB,4BAA6B/uB,eAC3BuH,EAASC,KACT,sDACA,MAEFwnB,4BAA6BhvB,eAC3BuH,EAASC,KACT,sDACA,MAEFynB,eAAgBjvB,eACduH,EAASC,KACT,yCACA,MAEF0nB,qBAAsBlvB,eACpBuH,EAASC,KACT,+CACA,MAEF2nB,qBAAsBnvB,eACpBuH,EAASC,KACT,+CACA,MAEF4nB,8BAA+BpvB,eAC7BuH,EAASC,KACT,wDACA,MAEF6nB,8BAA+BrvB,eAC7BuH,EAAS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","file":"static/js/main.beb7ad91.chunk.js","sourcesContent":["export const getAncestorElement = (element, ancestorClass) => {\n    if (element) {\n        while ((element = element.parentElement) && !element.classList.contains(ancestorClass));\n    }\n    return element;\n};","/* eslint-disable */\n// Do not edit this file, it is auto-generated at build time!\n// See scripts/bootstrap.js to modify the generation of this file.\nmodule.exports = {\n  \"sitecoreApiKey\": \"D7898185-A43A-4641-9D17-399C4930EE7E\",\n  \"sitecoreApiHost\": \"\",\n  \"jssAppName\": \"portal\",\n  \"defaultLanguage\": \"en\",\n  \"graphQLEndpointPath\": \"/api/portal\",\n  \"graphQLEndpoint\": \"/api/portal?sc_apikey=D7898185-A43A-4641-9D17-399C4930EE7E\"\n};","module.exports = __webpack_public_path__ + \"static/media/rp-bg.3ef9e69a.png\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAAEBSURBVHhe7dExAcAwDMCwdPyhhkP7DIQO6zEAn929E8b3N4iGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBqCaQimIZiGYBpCmXkmQQSLV0662QAAAABJRU5ErkJggg==\"","module.exports = __webpack_public_path__ + \"static/media/pdf.c76a3b07.svg\";","module.exports = __webpack_public_path__ + \"static/media/file.06ddb997.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAA5CAYAAACCsf3qAAAAAXNSR0IArs4c6QAABWtJREFUaAXtmduvX0MUx7XoBXWpakmb3hwqFIlLSxBUldSdREQ8+ssk3oQnEV4c9SR1STx4Ue2hF9VD3U8dDvX5NB3ZZ+zLzN6/87vl902+57f3zJrZa9asWbNmzrILRhfLUX0t3AKn4LVwGTwBD8CTMBk2HCWsQFkHvB1ef/75Yn5j/EbBa/BUXFH1PgqGuBzlN0Jn3dm/Gqbo/Tlyb8IkXJQk1V8hXd7BboPO+iZ4KczFVhqshPMpDXMNobxKlrljyvfqZHR7Z9zBb4Bdv6En7YTGitiDzlL2K/wFnkMsEMrLflVyH7wOOmujjjkG8CmchgsX8icF6xB6Baauz5Q+By2jx22GTurh1KVxF8Jhnc7ynByNkR02uCxchtuh478bHkw1xHqExd/wLXjClxHHi+h/MzSgrk1d60FOQyRFYeSGHcaIgOVhgKEg5TcnwNb1lxqf6vroUrdoHKlLo8sH47Y7KLgVXgUX4FH4CfwRDgz9NIQe4Pa7Oxqt2/Lt0CzwSFTXt9d4abgz3AifhM5aL2F0jo0Q+l/Dw/PwilDQ79+iR+zi4/cVlPm5h8qsoq8qI4TPaAw940Ao6OdvMIR5wv7ow/9E711er6SxMaEJJjgDgUvDffTeJf566g4RJqZJHeUWRf2mBk31dngZTJmtpr7q6j3cnIGr64Soa8pYnbj74S3Q/qbhDOwMO3YL+6tzT/UdeNL7ol7kXNbqHUIdHqByD9wAt0KzQw+BnaEhVPK7zj01d/A+InWp+TT1x2q6MR1+MKq/hPfnoIG2EzSEQfFQp17SGnt99jr8CLpU9ETT9ePwDfghrILXc27p6htjPQXPwE73FyE4Haajh2DZhyjuGX6np3fgB9CLE5fkT9AzTBWMYc66s1+FKSpM1t6uEmgqDwN3aZxuEu5h/Rx9eXP0A6wzgruNnmBMaIIJW+vdLxjCmRlYelszwoepu6mmPq56hALPMtkIhrDhV9mtl7bBbXRvppsDl/rT0JiShaIhjNiu4a7QRV+FL8NNLTuz3X7YJmnyvGRMMbYko2gIo/rR5JblgvdQ/AR0IB7eXoJG9RwYRJ+Fnk/awpiStZMUDeFHD7X9Mu1cm3uj9s6Kp0pnKQW69lNwXYpwg8wN1Mf6VDaJDTGDZJss0zXp2nQgMaxzcGV1sayKO4BeYTcdyUbEhjhNi9wsM2XWjfx7GrS5k3qXVq/xKB26TGsRG8IsM2f3MJtzLabEAff4O2AZtlD4WFlFD8r0RL21NheJDeF3gyFSIrbWTnVl+3scboNFePI1OK4oFvb4Wa+t3UnKDHGSRp4FyuqK+unGu4oFCc8OVoV01dVwI3wBaoylRm2sKgtgf6LRDKwyhMF0ChrY2sDt0RzD7VpjmEb3C+5sZp/vxh8sM4QybqNer8XwXGCOoItXtY3bVL1nJTxVnbQoN1adggvFtlWDMbEqmymDowlT3Umw2P+wPjuRLv//UGUIhTRGDOWr2sSyw/y+EuWuKSpYFQdcAt8XBcf9ucoQ4z7u/41vYojzJpkYYmKIxatj4hETj5h4xGILZHqE549xxnxqjAhH83E0hv9bmU01xGcIfzmGVvAk/R6cT7l8CeM3P/f+wYsYD1+jjLMorycchN84kBxDKB+Q6klBfth+NYQcGrSdiJ4PIEcRr9P2wpw2RYVt5x2Hv2fgLPS/8N9CL40Hipy7BZXfDNe01NjAdBy6A81ADfEHHArkGEKl3TmqruTLBuT/Sb6GDt6gtOhWiPehQY4hVPpjuBNWXb07694HOnDd3hvxoZl1dKlEm/W+g96MFeGqa47nY9AL3yPQbWngax4dstDGEH5gFfQ/R26jDnxoXR7dkvAvDZC2G1F8EEgAAAAASUVORK5CYII=\"","import React, { Component, Fragment } from \"react\";\r\n\r\nclass FilterDropdown extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      show: false,\r\n      selected: props.defaultSelected,\r\n    };\r\n  }\r\n\r\n  handleToggle = (e) => {\r\n    e.target.focus();\r\n    this.setState({ show: !this.state.show });\r\n  };\r\n\r\n  handleBlur = () => {\r\n    if (this.state.show) {\r\n      setTimeout(() => {\r\n        this.setState({ show: false });\r\n      }, 250);\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const {\r\n      theme,\r\n      error,\r\n      title,\r\n      icon,\r\n      options,\r\n      placeholder,\r\n      noOptionsMessage,\r\n      addMargin,\r\n    } = this.props;\r\n    const { selected, show } = this.state;\r\n    return (\r\n      <Fragment>\r\n        <div\r\n          className=\"filter-dropdown-container\"\r\n          style={{ marginBottom: show && addMargin ? \"15rem\" : \"0\" }}\r\n        >\r\n          {icon ? <i className={`icon icon-${icon}`} /> : \"\"}\r\n          {title ? <div className=\"title\">{title}</div> : \"\"}\r\n          <label\r\n            className={`arrow ${theme ? theme : \"\"} ${error ? \"error\" : \"\"}`}\r\n          >\r\n            <div className=\"dropdown-placeholder\">\r\n              <input\r\n                type=\"button\"\r\n                value={selected ? selected : placeholder}\r\n                className=\"dropdown-btn\"\r\n                onClick={(e) => this.handleToggle(e)}\r\n                onBlur={(e) => this.handleBlur(e)}\r\n              />\r\n            </div>\r\n            <i className=\"icon icon-chevron-down-small\" />\r\n            <ul className={`dropdown-list ${show ? \"\" : \"d-none\"}`}>\r\n              {options && options.length ? (\r\n                options.map((item, index) => {\r\n                  const { value, label } = item;\r\n\r\n                  return (\r\n                    <li\r\n                      key={`optionId${index}`}\r\n                      onClick={() => {\r\n                        this.setState({ selected: label, show: false }, () => {\r\n                          this.props.handleSelectionChange(value);\r\n                        });\r\n                      }}\r\n                    >\r\n                      <span>{label}</span>\r\n                    </li>\r\n                  );\r\n                })\r\n              ) : (\r\n                <li className=\"empty\">\r\n                  {noOptionsMessage ? noOptionsMessage : \"No options found\"}\r\n                </li>\r\n              )}\r\n            </ul>\r\n          </label>\r\n        </div>\r\n      </Fragment>\r\n    );\r\n  }\r\n}\r\n\r\nexport default FilterDropdown;\r\n","import React, { Component } from \"react\";\n\nclass FilterRadioButton extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      selectedId: null,\n    };\n  }\n\n  handleRadioClick = (id, onChange) => {\n    if (onChange) {\n      onChange(id);\n    }\n\n    this.setState({\n      selectedId: id,\n    });\n  };\n\n  render() {\n    const {\n      defaultSelected = null,\n      options = null,\n      radioGroupName = null,\n      onChange = null,\n      disabled = null,\n      plain = null,\n    } = this.props || {};\n\n    const { selectedId } = this.state;\n\n    return (\n      <div>\n        {options &&\n          options.map((item, index) => {\n            const { value, label } = item;\n            return (\n              <div\n                key={`filter-rb-${index}-${label.value}${index}`}\n                className={`filter-radiobutton ${plain ? \"is-plain\" : \"\"}`}\n              >\n                <label className={disabled ? \"disabled\" : \"\"}>\n                  <input\n                    type=\"radio\"\n                    className={\n                      selectedId == value\n                        ? \"is-active\"\n                        : !selectedId && defaultSelected === value\n                        ? \"is-active\"\n                        : \"\"\n                    }\n                    id={value}\n                    name={radioGroupName}\n                    value={label}\n                    onClick={() => this.handleRadioClick(value, onChange)}\n                    disabled={disabled}\n                  />\n                  <span className=\"filter-radiobutton__checkmark\" />\n                  <span className=\"filter-radiobutton__name\">{label}</span>\n                </label>\n              </div>\n            );\n          })}\n      </div>\n    );\n  }\n}\n\nexport default FilterRadioButton;\n","import React, { Component } from \"react\";\r\n\r\nclass Button extends Component {\r\n  render() {\r\n    /**\r\n     * Color - primary, secondary, tertiary, tertiary-grey, tertiary-custom, red\r\n     * Size - full, small, small-full\r\n     **/\r\n    const {\r\n      color = null,\r\n      size = null,\r\n      onClick = null,\r\n      icon = null,\r\n      disabled = false,\r\n      tooltip = null,\r\n      className = null,\r\n    } = this.props || {};\r\n\r\n    return (\r\n      <button\r\n        className={`btn \r\n        ${color ? \"btn--\" + color : \"btn--primary\"}\r\n        ${size ? \"btn--\" + size : \"\"}\r\n        ${icon ? \"btn--icon\" : \"\"}\r\n        ${className ? className : \"\"}\r\n        `}\r\n        onClick={onClick}\r\n        disabled={disabled}\r\n      >\r\n        {tooltip &&\r\n          <span className=\"btn__tooltip\">{tooltip}</span>\r\n        }\r\n        {icon &&\r\n          <i className={`icon icon-${icon}`} />\r\n        }\r\n        <span className=\"btn__label\">\r\n          {this.props.children}\r\n        </span>\r\n      </button>\r\n    );\r\n  }\r\n}\r\n\r\nexport default Button;\r\n","import React from \"react\";\r\n\r\nconst CharacterCount = props => {\r\n  const { remaining } = props;\r\n  return (\r\n    <div className=\"character-count\">\r\n      <span>{remaining}</span>\r\n      {\" remaining\"}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default CharacterCount;\r\n","import React from \"react\";\nimport CharacterCount from \"../CharacterCount\";\n\nconst FormInput = props => {\n  const {\n    type = null,\n    label = null,\n    icon = null,\n    placeholder = null,\n    required = null,\n    currency = null,\n    error = null,\n    value = null,\n    onInputChange = null,\n    maxLength = null,\n    width = null,\n    title = null,\n    disabled = null,\n    margin = null,\n    className = null\n  } = props;\n  return (\n    <div className={`form-group form__input \n    ${title ? \"is-title\" : \"\"}\n    ${error ? \"has-error\" : \"\"}\n    ${margin && margin === \"custom\" ? \"is-custom-margin\" : \"\"}\n    ${className ? className : \"\"}\n    `}>\n      {(label || required) &&\n        <label className=\"form__label\">\n          {label}\n          {required &&\n            <span className=\"form__asterisk\">*</span>\n          }\n        </label>\n      }\n      <div className={`form__input--details \n      ${currency ? \"has-currency\" : \"\"}\n      ${width && width == \"max\" ? \"is-max\" :\n          width && width == \"min\" ? \"is-min\" :\n            width && width == \"badge\" ? \"is-badge\" : \"\"}\n      `}>\n        {currency &&\n          <div className=\"form__input--currency\">\n            {\"$\"}\n          </div>\n        }\n        <input\n          className=\"form__input--field\"\n          type={type ? type : \"text\"}\n          value={value ? value : \"\"}\n          maxLength={maxLength}\n          placeholder={placeholder}\n          onChange={e => onInputChange(e.target.value)}\n          disabled={disabled}\n        />\n      </div>\n      <div className=\"form__validation-message\">\n        {error}\n      </div>\n      {/* {maxLength && <CharacterCount remaining={maxLength - value.length} />} */}\n    </div >\n  );\n};\n\nexport default FormInput;\n","import React, { Component } from \"react\";\nimport { Text, RichText } from \"@sitecore-jss/sitecore-jss-react\";\nimport Button from \"../../Button\";\nimport FormInput from \"../../FormInput\";\n\nclass PopupAction extends Component {\n  render() {\n    const {\n      label,\n      description,\n      icon,\n      iconBgColor,\n      secondaryBtn,\n      secondaryBtnOnClick,\n      secondaryBtnColor,\n      disabledSecondaryBtn,\n      primaryBtn,\n      primaryBtnOnClick,\n      primaryBtnColor,\n      disabledPrimaryBtn,\n      rejectMessage,\n      withRejectMessage,\n      onRejectMessageChange,\n    } = this.props;\n    return (\n      <React.Fragment>\n        <div className=\"popup-action\">\n          <div className=\"popup-action__close is-tablet\">\n            {secondaryBtnOnClick && (\n              <Button\n                color=\"tertiary\"\n                icon=\"close\"\n                onClick={secondaryBtnOnClick}\n              />\n            )}\n          </div>\n          <div className=\"popup-action__content\">\n            <div className=\"popup-action__icon\">\n              <i\n                className={`icon icon-${icon}`}\n                style={{ backgroundColor: iconBgColor }}\n              />\n            </div>\n\n            <div className=\"popup-action__text is-tablet\">\n              {label && label.value && (\n                <div className=\"popup-action__label\">\n                  <Text field={label} />\n                </div>\n              )}\n            </div>\n            <div className=\"is-tablet\">\n              {description && description.value && (\n                <div className=\"popup-action__description\">\n                  <RichText field={description} />\n                </div>\n              )}\n              {withRejectMessage && (\n                <FormInput\n                  type=\"text\"\n                  placeholder=\"\"\n                  label=\"Comment\"\n                  value={rejectMessage}\n                  onInputChange={(value) => onRejectMessageChange(value)}\n                />\n              )}\n            </div>\n\n            <div className=\"popup-action__text is-desktop\">\n              {label && label.value && (\n                <div className=\"popup-action__label\">\n                  <Text field={label} />\n                </div>\n              )}\n              {description && description.value && (\n                <div className=\"popup-action__description\">\n                  <RichText field={description} />\n                </div>\n              )}\n              {withRejectMessage && (\n                <FormInput\n                  type=\"text\"\n                  placeholder=\"\"\n                  label=\"Comment\"\n                  value={rejectMessage}\n                  onInputChange={(value) => onRejectMessageChange(value)}\n                />\n              )}\n            </div>\n          </div>\n          <div className=\"popup-action__buttons\">\n            {primaryBtn && primaryBtnOnClick && (\n              <Button\n                className=\"is-tablet\"\n                color={primaryBtnColor ? primaryBtnColor : \"primary\"}\n                onClick={primaryBtnOnClick}\n                disabled={disabledPrimaryBtn}\n              >\n                {primaryBtn}\n              </Button>\n            )}\n\n            {secondaryBtn && secondaryBtnOnClick && (\n              <Button\n                color={secondaryBtnColor ? secondaryBtnColor : \"secondary\"}\n                onClick={secondaryBtnOnClick}\n                disabled={disabledSecondaryBtn}\n              >\n                {secondaryBtn}\n              </Button>\n            )}\n\n            {primaryBtn && primaryBtnOnClick && (\n              <Button\n                className=\"is-desktop\"\n                color={primaryBtnColor ? primaryBtnColor : \"primary\"}\n                onClick={primaryBtnOnClick}\n                disabled={disabledPrimaryBtn}\n              >\n                {primaryBtn}\n              </Button>\n            )}\n          </div>\n        </div>\n      </React.Fragment>\n    );\n  }\n}\n\nexport default PopupAction;\n","import React, { Component } from \"react\";\r\n\r\nclass Popup extends Component {\r\n  render() {\r\n    const { show } = this.props;\r\n    return (\r\n      <React.Fragment>\r\n        <div className=\"modal-blur\" />\r\n        <div className=\"portal-modal-container\">\r\n          <div className=\"portal-modal\">\r\n            {show && (\r\n              <div\r\n                className=\"btn btn--tertiary btn--icon close-button\"\r\n                onClick={() => {\r\n                  show();\r\n                }}\r\n              >\r\n                <i className=\"icon icon-close\" />\r\n              </div>\r\n            )}\r\n            {this.props.children}\r\n          </div>\r\n        </div>\r\n      </React.Fragment>\r\n    );\r\n  }\r\n}\r\n\r\nexport default Popup;\r\n","import React, { Component } from \"react\";\nimport Button from \"../Button\";\nimport { getAncestorElement } from \"../../../helper/GetAncestorElementHelper\";\n\nclass FormModal extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showBackToTop: false,\n    };\n  }\n\n  handleScroll = (event) => {\n    const element = event.target;\n    const headerContainer = element.querySelector(\".form__modal--header\");\n    const headerSpace = element.querySelector(\".form__modal--header-space\");\n\n    if (headerSpace && headerContainer) {\n      let elemPos = headerSpace.getBoundingClientRect().top;\n      if (elemPos < 0) {\n        headerContainer.classList.add(\"is-fixed\");\n        this.setState({\n          showBackToTop: true,\n        });\n      } else {\n        headerContainer.classList.remove(\"is-fixed\");\n        this.setState({\n          showBackToTop: false,\n        });\n      }\n    }\n  };\n\n  handleOnClick = (event) => {\n    const element = event.target;\n    const parentElem = getAncestorElement(element, \"form__modal\");\n    if (parentElem) {\n      const headerSpace = parentElem.querySelector(\n        \".form__modal--header-space\"\n      );\n      if (headerSpace) {\n        headerSpace.scrollIntoView();\n      }\n    }\n  };\n\n  render() {\n    const {\n      label = null,\n      closeOnClick = null,\n      closeClassName = null,\n      showModal = null,\n      showSaveHint = null,\n      saveHint = null,\n      saveBtn = null,\n      saveBtnClassName = null,\n      saveBtnOnClick = null,\n      disabledSaveBtn = null,\n      secondaryBtn = null,\n      secondaryBtnClassName = null,\n      secondaryBtnOnClick = null,\n      disabledSecondaryBtn = null,\n      primaryBtn = null,\n      primaryBtnClassName = null,\n      primaryBtnOnClick = null,\n      disabledPrimaryBtn = null,\n      redBtn = null,\n      redBtnOnClick = null,\n      disabledRedBtn = null,\n      isPreview = null,\n      isDynamicHeader = null,\n    } = this.props;\n    const { showBackToTop } = this.state;\n\n    return (\n      <div\n        className={`form__modal \n            ${showModal ? \"show-modal\" : \"\"}\n            ${isPreview ? \"is-preview\" : \"\"}\n            `}\n        onScroll={this.handleScroll}\n      >\n        <div className=\"form__modal--header\">\n          <div className=\"form__modal--close\">\n            <Button\n              icon=\"close\"\n              size=\"small\"\n              color=\"tertiary\"\n              className={closeClassName}\n              onClick={closeOnClick}\n            />\n          </div>\n          {label && <div className=\"form__modal--path\">{label}</div>}\n\n          <div className=\"form__modal--buttons\">\n            {showSaveHint && (\n              <div className=\"form__modal--buttons-hint\">\n                <i className=\"icon icon-upload-cloud\" />\n                <span>{saveHint ? saveHint : \"Saving...\"}</span>\n              </div>\n            )}\n            {saveBtnOnClick && (\n              <Button\n                size=\"small\"\n                color=\"secondary\"\n                onClick={saveBtnOnClick}\n                disabled={disabledSaveBtn}\n                className={saveBtnClassName}\n              >\n                {saveBtn}\n              </Button>\n            )}\n            {secondaryBtnOnClick && (\n              <Button\n                size=\"small\"\n                color=\"secondary\"\n                onClick={secondaryBtnOnClick}\n                disabled={disabledSecondaryBtn}\n                className={secondaryBtnClassName}\n              >\n                {secondaryBtn}\n              </Button>\n            )}\n            {primaryBtnOnClick && (\n              <Button\n                size=\"small\"\n                color=\"primary\"\n                onClick={primaryBtnOnClick}\n                disabled={disabledPrimaryBtn}\n                className={primaryBtnClassName}\n              >\n                {primaryBtn}\n              </Button>\n            )}\n            {redBtnOnClick && (\n              <Button\n                size=\"small\"\n                color=\"red\"\n                onClick={redBtnOnClick}\n                disabled={disabledRedBtn}\n              >\n                {redBtn}\n              </Button>\n            )}\n          </div>\n        </div>\n\n        {isDynamicHeader && label && (\n          <div className=\"form__modal--path\">{label}</div>\n        )}\n        <div\n          className={`form__modal--header-space ${\n            showSaveHint ? \"has-save-hint\" : \"\"\n          }`}\n        />\n        <div className=\"form__modal--body container\">{this.props.children}</div>\n        {showBackToTop && showModal && (\n          <div className=\"form__modal--back-to-top\">\n            <button\n              onClick={this.handleOnClick}\n              className=\"form__modal--back-to-top-button\"\n            >\n              <span>Back to top</span>\n              <i className=\"icon icon-chevron-up\" />\n            </button>\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n\nexport default FormModal;\n","import React, { Component, Fragment } from \"react\";\n\nclass CustomIframe extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            isIframeReady: false,\n        };\n    }\n\n    render() {\n        const {\n            title,\n            src,\n        } = this.props || {};\n\n        const {\n            isIframeReady\n        } = this.state;\n        return (\n            <Fragment>\n                <div className=\"custom-iframe\">\n                    <iframe\n                        frameBorder=\"0\"\n                        className={`${isIframeReady ? \"\" : \"is-hidden\"}`}\n                        allowFullScreen=\"\"\n                        src={src}\n                        title={title}\n                        onLoad={() => {\n                            this.setState({ isIframeReady: true })\n                        }}\n                    >\n                    </iframe>\n                    {!isIframeReady &&\n                        <div className=\"loader-wrapper container\">\n                            <div className=\"loader\" />\n                        </div>\n                    }\n                </div>\n            </Fragment>\n        );\n    }\n\n};\n\nexport default CustomIframe;\n","import React, { Component } from \"react\";\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\nimport Button from \"../../Button\";\nimport Popup from \"../../Popup\";\nimport FormModal from \"../../FormModal\";\nimport CustomIframe from \"../../CustomIframe\";\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\n\nclass PopupPreview extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            previewGroupTitle: \"\",\n            previewGroupUrl: \"\",\n            showPreviewGroupModal: false\n        };\n    }\n\n    render() {\n        const {\n            previewTitle,\n            previewLogo,\n            previewList,\n            previewListChildName,\n            btnLabel,\n            btnOnClick,\n            showPreviewModal,\n            previewFormLabel,\n        } = this.props;\n\n        const {\n            previewGroupTitle,\n            previewGroupUrl,\n            showPreviewGroupModal\n        } = this.state;\n\n        return (\n            <React.Fragment>\n                <div className=\"popup-preview\">\n                    <Popup show={() => showPreviewModal()} >\n                        <div className=\"preview\">\n                            <div className=\"preview__title\">\n                                {previewTitle ? previewTitle : \"Preview\"}\n                            </div>\n\n                            <div className=\"preview__group\">\n                                <div className=\"preview__logo\">\n                                    {previewLogo ?\n                                        <img\n                                            alt=\"preview-logo-alt\"\n                                            src={logoPlaceholder}\n                                            data-src={previewLogo}\n                                            className=\"lazyload\"\n                                        />\n                                        :\n                                        <div className=\"no-image\">\n                                        </div>\n                                    }\n                                </div>\n                                <div className=\"preview__content\">\n                                    {previewList.map((item, index) => {\n                                        const {\n                                            Centre,\n                                        } = item || {}\n\n                                        let previewListArr = item[previewListChildName];\n                                        return (\n                                            <div key={`preview-details-${index}`}\n                                                className=\"preview__details\">\n                                                <div className=\"preview__list\">\n                                                    <div className=\"preview__list--label\">\n                                                        <Text field={Centre} />\n                                                    </div>\n                                                </div>\n                                                {previewListArr.map((item, index) => {\n                                                    const {\n                                                        ItemId,\n                                                        Store,\n                                                        PreviewUrl\n                                                    } = item\n\n                                                    let title = Store.value + \" \" + Centre.value;\n                                                    return (\n                                                        <div key={`preview-list-${index}`}\n                                                            className=\"preview__list\">\n                                                            <div className=\"preview__list--label\">\n                                                                <Text field={Store} />\n                                                            </div>\n                                                            <div className=\"preview__list--link\"\n                                                                onClick={() => {\n                                                                    this.setState({\n                                                                        previewGroupTitle: title,\n                                                                        previewGroupUrl: PreviewUrl.value,\n                                                                        showPreviewGroupModal: true,\n                                                                    })\n                                                                }}\n                                                            >\n                                                                {\"Preview\"}\n                                                            </div>\n                                                        </div>\n                                                    )\n                                                })}\n                                            </div>\n                                        )\n                                    })}\n                                </div>\n                            </div>\n                            {btnOnClick &&\n                                <div className=\"preview__button\">\n                                    <Button\n                                        color=\"primary\"\n                                        onClick={btnOnClick}\n                                    >\n                                        {btnLabel}\n                                    </Button>\n                                </div>\n                            }\n                        </div>\n                    </Popup>\n                    <FormModal\n                        isPreview\n                        showModal={showPreviewGroupModal}\n                        label={previewFormLabel ? previewFormLabel : previewGroupTitle}\n                        closeOnClick={() =>\n                            this.setState({ showPreviewGroupModal: false })\n                        }\n                    >\n                        {this.state.showPreviewGroupModal &&\n                            <CustomIframe\n                                title={previewFormLabel ? previewFormLabel : previewGroupTitle}\n                                src={previewGroupUrl}\n                            />\n                        }\n                    </FormModal>\n                </div>\n\n            </React.Fragment>\n        );\n    }\n}\n\nexport default PopupPreview;\n","import axios from \"axios\";\n\nconst isDev = process.env.REACT_APP_DEV || false;\nexport default axios.create({\n  baseURL: isDev ? \"http://localhost:3001\" : \"/api/sitecore\"\n});\n\nexport const DevURL = axios.create({\n  baseURL: \"http://localhost:3001\",\n});\n\nexport const DevURL2 = axios.create({\n  baseURL: \"http://localhost:3002\",\n});\n\nexport const DevURL3 = axios.create({\n  baseURL: \"http://localhost:3003\",\n});\n","import BaseURL, { DevURL } from \"./BaseURL\";\r\n\r\nexport const getWorkboxItems = params => {\r\n  return BaseURL.get(\"/workflowapproval/GetWorkboxItems\", {\r\n    params: { ...params }\r\n  });\r\n  // return DevURL.get(\"/GetWorkboxItems\", {\r\n  //   params: { ...params }\r\n  // });\r\n};\r\n","import $ from \"jquery\";\n\nexport const disableBodyScroll = () => {\n  if (($(document) && $(document).height()) > $(window).height()) {\n    var scrollTop = $(\"html\").scrollTop()\n      ? $(\"html\").scrollTop()\n      : $(\"body\").scrollTop();\n    $(\"html\")\n      .addClass(\"noscroll\")\n      .css(\"top\", -scrollTop);\n  }\n};\n\nexport const enableBodyScroll = () => {\n  var scrollTop = parseInt($(\"html\").css(\"top\"));\n  $(\"html\").removeClass(\"noscroll\");\n  $(\"html,body\").scrollTop(-scrollTop);\n};\n\n// export const disableBodyScrolling = () => {\n//   if (document) {\n//     let bodyWrapper = document.querySelector(\".body-wrapper\");\n//     if (bodyWrapper) {\n//       bodyWrapper.classList.add(\"disable-scroll\");\n//     }\n//   }\n// };\n\n// export const enableBodyScrolling = () => {\n//   if (document) {\n//     let bodyWrapper = document.querySelector(\".body-wrapper\");\n//     if (bodyWrapper) {\n//       bodyWrapper.classList.remove(\"disable-scroll\");\n//     }\n//   }\n// };\n\nexport const scrollToTop = (isNotDesktop) => {\n  if (document) {\n    const ua = window.navigator.userAgent.toLowerCase();\n    const bodyWrapper = document.querySelector(\".body-wrapper\");\n    if (isNotDesktop) {\n      if (window && window.outerWidth < 992) {\n        if ((/msie|trident/.test(ua))) {\n          bodyWrapper.scroll(0, 0);\n        } else {\n          bodyWrapper.scroll({\n            top: 0,\n            left: 0,\n            behavior: 'smooth'\n          });\n        }\n      }\n    } else {\n      if ((/msie|trident/.test(ua))) {\n        bodyWrapper.scroll(0, 0);\n      } else {\n        bodyWrapper.scroll({\n          top: 0,\n          left: 0,\n          behavior: 'smooth'\n        });\n      }\n    }\n\n  }\n};","import moment from \"moment\";\n\nexport const getDate = (date, format) => {\n  return moment(date).format(format);\n};\n\nexport const getDuration = (startDate, endDate) => {\n  let startTime = getDate(startDate, \"hh:mm a\");\n  let startDay = getDate(startDate, \"DD\");\n  let startMonth = getDate(startDate, \"MMMM\");\n  let startYear = getDate(startDate, \"YYYY\");\n\n  let endTime = getDate(endDate, \"hh:mm a\");\n  let endDay = getDate(endDate, \"DD\");\n  let endMonth = getDate(endDate, \"MMMM\");\n  let endYear = getDate(endDate, \"YYYY\");\n\n  let duration;\n  let durationYear = startYear === endYear ? true : false;\n  let durationMonth = startMonth === endMonth ? true : false;\n  let durationDay = startDay === endDay ? true : false;\n\n  if (durationYear && durationMonth && durationDay) {\n    // 24 July 2019, 6:30pm - 7:30pm\n    duration = `${startDay} ${startMonth} ${startYear}`;\n  }\n\n  if (durationYear && durationMonth && !durationDay) {\n    // 15 - 24 July 2019, 6:30pm - 7:30pm\n    duration = `${startDay}-${endDay} ${startMonth} ${startYear}`;\n  }\n\n  if (durationYear && !durationMonth) {\n    // 15 July - 24 August 2019, 6:30pm - 7:30pm\n    duration = `${startDay} ${startMonth} - ${endDay} ${endMonth} ${startYear}`;\n  }\n\n  if (\n    !durationYear &&\n    ((!durationMonth && !durationDay) || (durationMonth && durationDay))\n  ) {\n    // 15 July 2018 - 24 August 2019, 6:30pm - 7:30pm\n    // 15 July 2018 - 15 July 2019, 6:30pm - 7:30pm\n    duration = `${startDay} ${startMonth} ${startYear} - ${endDay} ${endMonth} ${endYear}`;\n  }\n\n  if (startTime === endTime) {\n    duration = `${duration} ${startTime}`;\n  } else {\n    duration = `${duration} ${startTime} - ${endTime}`;\n  }\n\n  return duration;\n};\n\nexport const getStartDate = startDate => {\n  let startTime = getDate(startDate, \"hh:mm a\");\n  let startDay = getDate(startDate, \"DD\");\n  let startMonth = getDate(startDate, \"MMMM\");\n  let startYear = getDate(startDate, \"YYYY\");\n\n  return `${startDay} ${startMonth} ${startYear} ${startTime}`;\n};\n","export const addClassLazyload = (parentClass) => {\n    const parentWrapper = document.getElementsByClassName(parentClass)[0];\n    let imageList = \"\";\n    if (parentWrapper) {\n        imageList = parentWrapper.querySelectorAll(\"img\");\n        if (imageList.length > 0) {\n            imageList.forEach((el) => {\n                el.classList.add('lazyload');\n            });\n        }\n    }\n}","import React from \"react\";\n\nconst Label = props => {\n  let color;\n  switch (props.color.toLowerCase()) {\n    case \"new\":\n      color = \"new\";\n      break;\n    case \"draft\":\n      color = \"draft\";\n      break;\n    case \"pending approval\":\n      color = \"pending\";\n      break;\n    case \"awaiting approval\":\n      color = \"pending\";\n      break;\n    case \"rejected\":\n      color = \"rejected\";\n      break;\n    case \"approved\":\n      color = \"approved\";\n      break;\n    case \"live\":\n      color = \"approved\";\n      break;\n    case \"embargoed\":\n      color = \"rejected\";\n      break;\n    default:\n      color = \"default\";\n  }\n\n  return (\n    <div className={`label-wrapper ${color}`}>\n      {props.children}\n    </div>\n  );\n};\n\nexport default Label;\n","import React, { Component } from \"react\";\n\nclass FormCheckbox extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isChecked: false\n    };\n  }\n\n  onInputChange = checked => {\n    this.props.onCheckboxChange(this.props.value, checked);\n    this.setState({\n      isChecked: checked\n    })\n  };\n\n  render() {\n    const {\n      disabled = null,\n      icon = null,\n      className = null,\n      label = null,\n      value = \"\",\n      checked = null,\n      tile = null,\n      plain = null\n    } = this.props || {};\n    const {\n      isChecked\n    } = this.state;\n    return (\n      <React.Fragment>\n        <label className={`form-checkbox-container \n        ${disabled ? \"disabled\" : \"\"}\n        ${tile ? \"is-tile\" : \"\"}\n        ${isChecked ? \"is-checked\" : \"\"}\n        ${plain ? \"is-plain\" : \"\"}\n        `}>\n          {icon ? (\n            <i className={`icon icon-${icon}`} />\n          ) : (\n              \"\"\n            )}\n          <span className={className ? className : \"\"}>\n            {label}\n          </span>\n          <input\n            value={value}\n            onChange={e => this.onInputChange(e.target.checked)}\n            type=\"checkbox\"\n            checked={checked}\n            disabled={disabled}\n          />\n          <span className=\"checkmark\" />\n        </label>\n      </React.Fragment>\n    );\n  }\n}\n\nexport default FormCheckbox;\n","import React from \"react\";\nimport { Text, Image, RichText } from \"@sitecore-jss/sitecore-jss-react\";\nimport Button from \"../Button\";\nimport Label from \"../Label\";\nimport FormCheckbox from \"../FormCheckbox\";\nimport { getAncestorElement } from \"../../../helper/GetAncestorElementHelper\";\nimport logoPlaceholder from \"../../../assets/img/logoPlaceholder.png\";\nimport { Fragment } from \"react\";\n\nclass ListItem extends React.Component {\n  /*\n    ** Sample List Item\n        <ListItem key={`itemId-${index}`}\n            listItemOnClick={\"Insert listItem onClick event\"}\n            logo={{ \"bgColor\": \"#000\", \"src\": \"http://placekitten.com/100/100\" }}\n            label={\"label\"}\n            title={\"title\"}\n            description={\"description\"}\n            status={\"DRAFT\"}\n            previewBtn={{ \"label\": \"Preview\", \"color\": \"secondary\" }}\n            previewBtnOnClick={\"Insert preview onClick event\"}\n            btnOne={{ \"icon\": \"trash-2\", \"color\": \"secondary\", \"tooltip\": \"Delete\" }}\n            btnOneOnClick={\"Insert btnOne onClick event\"}\n        />\n    ** Sample List Item using Approval\n        <ListItem key={`itemId-${index}`}\n            listItemOnClick={\"Insert listItem onClick event\"}\n            logo={{ \"bgColor\": \"#000\", \"src\": \"http://placekitten.com/100/100\" }}\n            label={\"label\"}\n            title={\"title\"}\n            description={\"description\"}\n            status={\"DRAFT\"}\n            previewBtn={{ \"label\": \"Preview\", \"color\": \"secondary\" }}\n            previewBtnOnClick={\"Insert preview onClick event\"}\n            btnOne={{ \"icon\": \"thumbs-up\", \"color\": \"primary\", \"tooltip\": \"Approve\" }}\n            btnOneOnClick={\"Insert btnOne onClick event\"}\n            btnTwo={{ \"icon\": \"thumbs-down\", \"color\": \"red\", \"tooltip\": \"Reject\" }}\n            btnTwoOnClick={\"Insert btnTwo onClick event\"}\n            checkboxValue={\"Sample Value\"}\n            checkboxOnChange={(value, checked) =>\n                this.handleSelected(value, checked)\n            }\n        />\n    */\n\n  handleOnClickCheckbox = (element) => {\n    let parentElement = \"\";\n    let checkboxElement = \"\";\n    if (!/btn|icon|form-checkbox-container|checkmark/.test(element.className)) {\n      if (/js-list-item/.test(element.className)) {\n        checkboxElement = element.querySelector(\".form-checkbox-container\");\n      } else {\n        parentElement = getAncestorElement(element, \"js-list-item\");\n        checkboxElement = parentElement.querySelector(\n          \".form-checkbox-container\"\n        );\n      }\n      checkboxElement.click();\n    }\n  };\n\n  convertString = (string) => {\n    return string\n      .replace(/&lt;/g, \"<\")\n      .replace(/&gt;/g, \">\")\n      .replace(/&amp;/g, \"&\")\n      .replace(/&quot;/g, '\"')\n      .replace(/&apos;/g, \"'\");\n  };\n\n  handleOnClickListItem = (e) => {\n    const { listItemOnClick, checkboxValue, checkboxOnChange } =\n      this.props || {};\n\n    const element = e.target;\n    if ((window && window.outerWidth >= 992) || this.props.noActionBtn) {\n      if (listItemOnClick) {\n        listItemOnClick(e);\n      } else if (checkboxValue && checkboxOnChange) {\n        this.handleOnClickCheckbox(e.target);\n      }\n    } else {\n      let currentActiveItem = document.querySelector(\".js-list-item.active\");\n      if (currentActiveItem) {\n        currentActiveItem.classList.remove(\"active\");\n      }\n      let elemListItem = \"\";\n      if (/js-list-item/.test(element.className)) {\n        elemListItem = element;\n      } else {\n        elemListItem = getAncestorElement(element, \"js-list-item\");\n      }\n      elemListItem.classList.add(\"active\");\n    }\n  };\n\n  render() {\n    const {\n      logoBgColor,\n      logoSrc,\n      label,\n      showNotif,\n      notification,\n      title,\n      description,\n      storeDescription,\n      status,\n      listItemOnClick,\n      previewBtn,\n      previewBtnOnClick,\n      btnOne,\n      btnOneOnClick,\n      btnTwo,\n      btnTwoOnClick,\n      checkboxValue,\n      checkboxOnChange,\n      isSelected,\n    } = this.props || {};\n\n    let descriptionVal = \"\";\n\n    if (description && description.value) {\n      descriptionVal = this.convertString(description.value);\n    }\n\n    return (\n      <div\n        className={`list-item js-list-item ${status && status.value ? status.value.toLowerCase() : \"\"} \n            ${checkboxValue && checkboxOnChange ? \"has-checkbox\" : \"\"}\n            ${isSelected ? \"selected\" : \"\"} `}\n        onClick={this.handleOnClickListItem}\n      >\n        {checkboxValue && checkboxOnChange && (\n          <div className=\"list-item__checkbox\">\n            <FormCheckbox\n              value={checkboxValue}\n              onCheckboxChange={checkboxOnChange}\n            />\n          </div>\n        )}\n        {logoSrc ? (\n          <div\n            className={`list-item__logo\n                    ${logoBgColor ? \"has-bg-color\" : \"\"}\n                    `}\n            style={{ backgroundColor: logoBgColor }}\n          >\n            <img\n              alt={`${title && title.value ? title.value : \"list-item-logo\"}`}\n              src={logoPlaceholder}\n              data-src={logoSrc}\n              className=\"lazyload\"\n            />\n          </div>\n        ) : (\n            <div className=\"list-item__logo no-logo\" />\n          )}\n\n        <div className=\"list-item__details\">\n          {label && label.value && (\n            <div className=\"list-item__label\">\n              <Text field={label} />\n            </div>\n          )}\n          {title && title.value && (\n            <div className=\"list-item__title\">\n              {showNotif ? (\n                <Fragment>\n                  <div\n                    className={`show-notif ${notification ? \"unread\" : \"\"}`}\n                  />\n                  <span>\n                    <Text field={title} />\n                  </span>\n                </Fragment>\n              ) : (\n                  <Text field={title} />\n                )}\n            </div>\n          )}\n          {description && description.value && (\n            <div className=\"list-item__description\">\n              <RichText field={{ value: descriptionVal }} />\n            </div>\n          )}\n          {storeDescription && (\n            <div className=\"list-item__description\">{storeDescription}</div>\n          )}\n        </div>\n        {status && status.value && (\n          <div className=\"list-item__status\">\n            <Label color={status.value.toLowerCase()}>{status.value}</Label>\n          </div>\n        )}\n\n        <div className=\"list-item__actions\">\n          <Button\n            className={\"js-btn-edit\"}\n            color={\"secondary\"}\n            size=\"small\"\n            icon={\"edit\"}\n            onClick={listItemOnClick}\n          />\n          {previewBtn && (\n            <Button\n              className=\"btn-preview\"\n              color={previewBtn.color ? previewBtn.color : \"secondary\"}\n              size=\"small\"\n              icon={\"eye\"}\n              onClick={previewBtnOnClick}\n            >\n              {previewBtn.label}\n            </Button>\n          )}\n          {btnOne && (\n            <Button\n              color={btnOne.color ? btnOne.color : \"secondary\"}\n              size=\"small\"\n              icon={btnOne.icon}\n              tooltip={btnOne.tooltip}\n              onClick={btnOneOnClick}\n            />\n          )}\n          {btnTwo && (\n            <Button\n              color={btnTwo.color ? btnTwo.color : \"secondary\"}\n              size=\"small\"\n              icon={btnTwo.icon}\n              tooltip={btnTwo.tooltip}\n              onClick={btnTwoOnClick}\n            />\n          )}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default ListItem;\n","import React, { Component } from \"react\";\nclass SuccessMessage extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isShown: false,\n      timer: 4000,\n      timerOnHide: null,\n    };\n  }\n\n  componentDidMount() {\n    this.handleShowSuccess(4000);\n  }\n\n  handleMouseOver = () => {\n    this.handleShowSuccess(0, true);\n  };\n\n  handleMouseOut = () => {\n    this.handleShowSuccess(2000);\n  };\n\n  handleShowSuccess = (timer, onHover) => {\n    if (!onHover) {\n      this.setState({\n        timerOnHide: setTimeout(() => {\n          this.props.handleShowSuccess(false);\n        }, timer),\n      });\n    } else {\n      this.setState({\n        timerOnHide: clearTimeout(this.state.timerOnHide),\n      });\n    }\n  };\n\n  render() {\n    const {\n      label = null,\n      linkLabel = null,\n      handleOnClick = null,\n      showPreviewLink = null,\n      hideIcon = null,\n    } = this.props || {};\n    return (\n      <React.Fragment>\n        <div\n          className=\"success-message\"\n          onMouseOver={this.handleMouseOver}\n          onMouseOut={this.handleMouseOut}\n        >\n          {!hideIcon && <i className=\"icon icon-check-small\" />}\n          <span className={`success-message__description ${showPreviewLink ? \"has-view\" : \"\"}`}>\n            {label ? label : \"Success update\"}\n          </span>\n          {showPreviewLink && (\n            <a className=\"success-message__link\" onClick={handleOnClick}>\n              {linkLabel ? linkLabel : \"View\"}\n            </a>\n          )}\n        </div>\n      </React.Fragment>\n    );\n  }\n}\n\nexport default SuccessMessage;\n","import React, { Component } from \"react\";\nimport Button from \"../Button\";\n\nclass CustomFilter extends Component {\n\n    handleCloseFilter = () => {\n        let bodyContainer;\n        let backToTop;\n        if (document) {\n            bodyContainer = document.querySelector(\".body-container\");\n            bodyContainer.classList.toggle(\"is-filter-shown\");\n\n            backToTop = document.querySelector(\".back-to-top__wrapper\");\n            if (backToTop) {\n                backToTop.style.right = \"36px\";\n            }\n        }\n        this.props.onCloseFilter(false);\n    }\n\n    updateBodyClass = (showFilter) => {\n        let bodyContainer = document.querySelector(\".body-container\");\n        let backToTop = document.querySelector(\".back-to-top__wrapper\");\n        if (showFilter) {\n            bodyContainer.classList.add(\"is-filter-shown\");\n            if (backToTop) {\n                backToTop.style.right = \"296px\";\n            }\n        } else {\n            bodyContainer.classList.remove(\"is-filter-shown\");\n        }\n    }\n\n    render() {\n        const {\n            showFilter\n        } = this.props;\n        this.updateBodyClass(showFilter);\n        return (\n            <div className={`custom-filter ${(showFilter) ? \"\" : \"is-hidden\"}`}>\n                <div className=\"custom-filter__blur\"\n                    onClick={this.handleCloseFilter}\n                >\n                </div>\n                <div className=\"custom-filter__content\">\n                    <div className=\"custom-filter__header\">\n                        <div className=\"custom-filter__title\">\n                            {\"Filter\"}\n                        </div>\n                        <div className=\"custom-filter__btn is-tablet\">\n                            <Button\n                                size=\"small\"\n                                color=\"tertiary\"\n                                icon=\"close\"\n                                onClick={this.handleCloseFilter}\n                            />\n                        </div>\n                        <div className=\"custom-filter__btn is-desktop\">\n                            <Button\n                                size=\"small\"\n                                color=\"tertiary\"\n                                icon=\"log-out\"\n                                onClick={this.handleCloseFilter}\n                            />\n                        </div>\n                    </div>\n                    <div className=\"custom-filter__wrapper\">\n                        {this.props.children}\n                    </div>\n                </div>\n\n            </div>\n        );\n    }\n}\n\nexport default CustomFilter;\n","import React from \"react\";\n\nconst NoResultMessage = props => {\n    const {\n        label = null,\n        description = null\n    } = props;\n\n    return (\n        <div className=\"no-result-message\">\n            <div className=\"no-result-message__details\">\n                <div className=\"no-result-message__label\">\n                    {label ? label : \"No results\"}\n                </div>\n                {description &&\n                    <div className=\"no-result-message__description\">\n                        {description}\n                    </div>\n                }\n            </div>\n        </div>\n    );\n};\n\nexport default NoResultMessage;\n","export const hideBackToTop = (isHidden) => {\n    if (document) {\n        const backToTopWrapper = document.querySelector(\".js-back-to-top\");\n        if (backToTopWrapper) {\n            if (isHidden) {\n                backToTopWrapper.classList.add(\"is-hidden\");\n            } else {\n                backToTopWrapper.classList.remove(\"is-hidden\");\n            }\n        }\n    }\n}","import React, { Component, Fragment } from \"react\";\r\nimport { getWorkboxItems } from \"../../../../api/WorkflowAPI\";\r\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\r\nimport Button from \"../../../Base/Button\";\r\nimport Select from \"react-select\";\r\nimport {\r\n  disableBodyScroll,\r\n  enableBodyScroll,\r\n} from \"../../../../helper/ScrollHelper\";\r\nimport { getDuration, getStartDate } from \"../../../../helper/DateHelper\";\r\nimport { addClassLazyload } from \"../../../../helper/AddClassLazyloadHelper\";\r\nimport { scrollToTop } from \"../../../../helper/ScrollHelper\";\r\nimport axios from \"axios\";\r\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\r\nimport ReactPaginate from \"react-paginate\";\r\nimport FormModal from \"../../../Base/FormModal\";\r\nimport Popup from \"../../../Base/Popup\";\r\nimport ListItem from \"../../../Base/ListItem\";\r\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\r\nimport CustomFilter from \"../../../Base/CustomFilter\";\r\nimport FilterRadioButton from \"../../../Base/CustomFilter/FilterRadioButton\";\r\nimport NoResultMessage from \"../../../Base/NoResultMessage\";\r\nimport PopupPreview from \"../../../Base/Popup/PopupPreview\";\r\nimport CustomIframe from \"../../../Base/CustomIframe\";\r\nimport PopupAction from \"../../../Base/Popup/PopupAction\";\r\nimport { hideBackToTop } from \"../../../../helper/HideBackToTopHelper\";\r\n\r\nclass FeatureRetailerPortalApprovals extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      activePageNum: 0,\r\n      totalPageNumber: null,\r\n      totalResults: null,\r\n      showPagination: false,\r\n      showLoader: true,\r\n      showRejectModal: false,\r\n      showApproveModal: false,\r\n      showPreviewModal: false,\r\n      showFilter: false,\r\n      modalMessage: null,\r\n      hideIcon: true,\r\n      workboxItems: null,\r\n      selectedItems: null,\r\n      selectedItem: null,\r\n      typeOptions: null,\r\n      centreOptions: null,\r\n      storeOptions: null,\r\n      filterType: \"all\",\r\n      filterStore: \"all\",\r\n      filterCentre: \"all\",\r\n      isDocumentReady: false,\r\n      previewTitle: null,\r\n      previewUrl: null,\r\n      previewUrlList: [],\r\n      previewItemId: null,\r\n      filteredItems: null,\r\n      itemCount: null,\r\n      itemTotal: null,\r\n      showBulkPreview: false,\r\n      retailerLogo: null,\r\n      rejectMessage: \"\",\r\n      paginationRange: 7,\r\n      isDesktop: true,\r\n    };\r\n  }\r\n\r\n  getData = async (params) => {\r\n    this.setState({\r\n      showLoader: true,\r\n    });\r\n\r\n    try {\r\n      const response = await getWorkboxItems(params);\r\n      if (response && response.data) {\r\n        const { WorkboxItems, TotalPageNumber, TotalResults } = response.data;\r\n        this.setState(\r\n          {\r\n            workboxItems: WorkboxItems,\r\n            filteredItems: WorkboxItems,\r\n            totalPageNumber: TotalPageNumber.value,\r\n            totalResults: TotalResults.value,\r\n            itemTotal: TotalResults.value,\r\n            showPagination: true,\r\n            showLoader: false,\r\n          },\r\n          () => {\r\n            this.handleChecked();\r\n            this.getFilters();\r\n            this.handleItems(0);\r\n          }\r\n        );\r\n      }\r\n    } catch (e) {\r\n      console.error(\r\n        (\"Get Workbox Items Error: \" + e &&\r\n          e.response &&\r\n          e.response.statusText) ||\r\n        \"\"\r\n      );\r\n    }\r\n  };\r\n\r\n  getOptions = (items, value, index, options, all) => {\r\n    if (value && value.indexOf(\"Store\") === 0) {\r\n      value = \"Store\";\r\n    }\r\n    if (value && !items.includes(value)) {\r\n      items.push(value);\r\n    }\r\n    if (index === this.state.workboxItems.length - 1) {\r\n      options.push({ value: \"all\", label: all });\r\n      items\r\n        .sort((a, b) => (a > b ? 1 : -1))\r\n        .map((el) => options.push({ value: el, label: el }));\r\n    }\r\n  };\r\n\r\n  getFilters = () => {\r\n    const { workboxItems } = this.state;\r\n    let typeItems = [];\r\n    let centreItems = [];\r\n    let storeItems = [];\r\n    let typeOptions = [];\r\n    let centreOptions = [];\r\n    let storeOptions = [];\r\n    if (workboxItems && workboxItems.length) {\r\n      workboxItems.map((el, index) => {\r\n        const { Type, Centre, Store } = el;\r\n        this.getOptions(\r\n          typeItems,\r\n          Type && Type.value,\r\n          index,\r\n          typeOptions,\r\n          \"All\"\r\n        );\r\n        this.getOptions(\r\n          centreItems,\r\n          Centre && Centre.value,\r\n          index,\r\n          centreOptions,\r\n          \"All centres\"\r\n        );\r\n        this.getOptions(\r\n          storeItems,\r\n          Store && Store.value,\r\n          index,\r\n          storeOptions,\r\n          \"All stores\"\r\n        );\r\n      });\r\n      this.setState({ typeOptions, centreOptions, storeOptions });\r\n    }\r\n  };\r\n\r\n  componentDidMount() {\r\n    if (window) {\r\n      this.handleResize();\r\n      window.addEventListener(\"resize\", this.handleResize);\r\n    }\r\n    if (document) {\r\n      this.setState({ isDocumentReady: true });\r\n    }\r\n    let params = {\r\n      pageNumber: 1,\r\n    };\r\n    this.getData(params);\r\n  }\r\n\r\n  handleResize = () => {\r\n    if (window.outerWidth >= 768) {\r\n      this.setState({\r\n        paginationRange: 7,\r\n      });\r\n    } else {\r\n      this.setState({\r\n        paginationRange: 3,\r\n      });\r\n    }\r\n    if (window.outerWidth >= 992) {\r\n      this.setState({\r\n        isDesktop: true,\r\n      });\r\n    } else {\r\n      this.setState({\r\n        isDesktop: false,\r\n      });\r\n    }\r\n  };\r\n\r\n  handleFilter = (filter, id) => {\r\n    this.setState({ [filter]: id, activePageNum: 0 }, () => {\r\n      this.uncheckAll();\r\n      this.handleItems(0);\r\n      addClassLazyload(\"approvals-item-container\");\r\n      scrollToTop();\r\n    });\r\n  };\r\n\r\n  handleItems = (selected) => {\r\n    const {\r\n      filterCentre,\r\n      filterStore,\r\n      filterType,\r\n      workboxItems,\r\n      totalPageNumber,\r\n    } = this.state;\r\n\r\n    let unfiltered = workboxItems;\r\n    if (unfiltered) {\r\n      if (filterType !== \"all\") {\r\n        unfiltered = unfiltered.filter(\r\n          (item) =>\r\n            item && item.Type && item.Type.value.indexOf(filterType) === 0\r\n        );\r\n      }\r\n      if (filterCentre !== \"all\") {\r\n        unfiltered = unfiltered.filter(\r\n          (item) => item && item.Centre && item.Centre.value === filterCentre\r\n        );\r\n      }\r\n      if (filterStore !== \"all\") {\r\n        unfiltered = unfiltered.filter(\r\n          (item) => item && item.Type && item.Store.value === filterStore\r\n        );\r\n      }\r\n      const currentPage = selected + 1;\r\n      const until = currentPage * 10;\r\n      const from = until - 10;\r\n      const list = unfiltered.slice(from, until);\r\n\r\n      const listLength = unfiltered && unfiltered.length;\r\n      let itemCount = from + 1 + \" – \" + until;\r\n      if (currentPage == totalPageNumber || listLength < 11) {\r\n        itemCount = from + 1 + \" – \" + listLength;\r\n      }\r\n      if (listLength == 1) {\r\n        itemCount = 1;\r\n      }\r\n\r\n      this.setState(\r\n        {\r\n          filteredItems: list,\r\n          itemCount,\r\n          totalPageNumber: listLength ? Math.ceil(listLength / 10) : null,\r\n          itemTotal: listLength || null,\r\n        },\r\n        () => this.handleChecked()\r\n      );\r\n    }\r\n  };\r\n\r\n  uncheckAll = () => {\r\n    let checks = document.querySelectorAll(\r\n      \".approvals-item-container input:checked\"\r\n    );\r\n    for (let i = 0; i < checks.length; i++) {\r\n      checks[i].checked = false;\r\n    }\r\n    this.setState({ selectedItem: null, selectedItems: null });\r\n  };\r\n\r\n  handleSelected = (value, checked) => {\r\n    let items = this.state.selectedItems || [];\r\n    if (checked) {\r\n      items.push(value);\r\n    } else {\r\n      items.map((item, index) =>\r\n        item === value ? items.splice(index, 1) : null\r\n      );\r\n    }\r\n    this.setState({ selectedItems: items });\r\n  };\r\n\r\n  handleChecked = () => {\r\n    let items = this.state.selectedItems || [];\r\n    if (items && items.length) {\r\n      let checks = document.querySelectorAll(\".approvals-item-container input\");\r\n      for (let i = 0; i < checks.length; i++) {\r\n        let isMatch;\r\n        items.map((item) => {\r\n          if (item === checks[i].value) {\r\n            isMatch = true;\r\n          }\r\n        });\r\n        if (isMatch) {\r\n          checks[i].checked = true;\r\n        } else checks[i].checked = false;\r\n      }\r\n    }\r\n  };\r\n\r\n  renderRejectModal = () => {\r\n    disableBodyScroll();\r\n    const { selectedItems, selectedItem, rejectMessage } = this.state;\r\n    let itemCount = selectedItems && selectedItems.length;\r\n    let items = selectedItems;\r\n    if (selectedItem && selectedItem.length) {\r\n      itemCount = selectedItem.length;\r\n      items = selectedItem;\r\n    }\r\n    const message =\r\n      \"You’re about to reject \" +\r\n      itemCount +\r\n      \" piece\" +\r\n      (itemCount === 1 ? \"\" : \"s\") +\r\n      \" of content.<br>\" +\r\n      \"This cannot be undone.\";\r\n    return (\r\n      <Popup>\r\n        <PopupAction\r\n          label={{ value: `Are you sure?` }}\r\n          description={{ value: message }}\r\n          icon=\"trash-2\"\r\n          iconBgColor=\"#d83b42\"\r\n          secondaryBtn=\"Cancel\"\r\n          secondaryBtnOnClick={() =>\r\n            this.setState(\r\n              {\r\n                showRejectModal: false,\r\n                selectedItem: null,\r\n                rejectMessage: \"\",\r\n              },\r\n              () => enableBodyScroll()\r\n            )\r\n          }\r\n          primaryBtn=\"Reject\"\r\n          primaryBtnOnClick={() => this.rejectItems(items)}\r\n          primaryBtnColor=\"red\"\r\n          withRejectMessage={true}\r\n          rejectMessage={rejectMessage}\r\n          onRejectMessageChange={(value) =>\r\n            this.setState({ rejectMessage: value })\r\n          }\r\n        />\r\n      </Popup>\r\n    );\r\n  };\r\n\r\n  renderApproveModal = () => {\r\n    const { modalMessage, hideIcon } = this.state;\r\n    return (\r\n      <SuccessMessage\r\n        label={modalMessage}\r\n        hideIcon={hideIcon}\r\n        handleShowSuccess={(showApproveModal) => {\r\n          this.setState({\r\n            showApproveModal,\r\n          });\r\n        }}\r\n      />\r\n    );\r\n  };\r\n\r\n  rejectItems = async (items) => {\r\n    const { rejectMessage } = this.state;\r\n    const formData = new FormData();\r\n    formData.append(\"itemIds\", items);\r\n    formData.append(\"comments\", rejectMessage);\r\n    const url = \"/api/sitecore/workflowapproval/RejectItems\";\r\n    this.setState({\r\n      rejectMessage: \"\",\r\n    });\r\n\r\n    try {\r\n      let response = await axios({\r\n        method: \"POST\",\r\n        url,\r\n        data: formData,\r\n      });\r\n      if (response && response.data) {\r\n        const { IsSuccess = null, Message = null } = response.data;\r\n        if (IsSuccess && IsSuccess.value) {\r\n          this.setState(\r\n            {\r\n              showRejectModal: false,\r\n              hideIcon: true,\r\n              modalMessage: Message.value,\r\n              showApproveModal: true,\r\n              showLoader: true,\r\n            },\r\n            () => {\r\n              enableBodyScroll();\r\n              this.resetState();\r\n            }\r\n          );\r\n        } else {\r\n          this.setState(\r\n            {\r\n              showRejectModal: false,\r\n              hideIcon: true,\r\n              modalMessage: Message.value,\r\n              showApproveModal: true,\r\n            },\r\n            () => {\r\n              enableBodyScroll();\r\n            }\r\n          );\r\n        }\r\n      } else {\r\n        this.setState(\r\n          {\r\n            showRejectModal: false,\r\n            hideIcon: true,\r\n            modalMessage: \"Something went wrong. Please try again.\",\r\n            showApproveModal: true,\r\n          },\r\n          () => {\r\n            enableBodyScroll();\r\n          }\r\n        );\r\n      }\r\n      scrollToTop(true);\r\n    } catch (e) {\r\n      this.setState(\r\n        {\r\n          showRejectModal: false,\r\n          hideIcon: true,\r\n          modalMessage: \"Something went wrong. Please try again.\",\r\n          showApproveModal: true,\r\n        },\r\n        () => {\r\n          enableBodyScroll();\r\n          scrollToTop(true);\r\n        }\r\n      );\r\n    }\r\n  };\r\n\r\n  approveItems = async () => {\r\n    const { selectedItems, selectedItem } = this.state;\r\n    let items = selectedItems;\r\n    if (selectedItem && selectedItem.length) {\r\n      items = selectedItem;\r\n    }\r\n    const formData = new FormData();\r\n    formData.append(\"itemIds\", items);\r\n\r\n    const url = \"/api/sitecore/workflowapproval/ApproveItems\";\r\n\r\n    try {\r\n      let response = await axios({\r\n        method: \"POST\",\r\n        url,\r\n        data: formData,\r\n      });\r\n      if (response && response.data) {\r\n        const { IsSuccess = null, Message = null } = response.data;\r\n        if (IsSuccess && IsSuccess.value) {\r\n          this.setState(\r\n            {\r\n              modalMessage: Message.value,\r\n              showApproveModal: true,\r\n              hideIcon: false,\r\n              showLoader: true,\r\n            },\r\n            () => this.resetState()\r\n          );\r\n        } else {\r\n          this.setState({\r\n            modalMessage: Message.value,\r\n            showApproveModal: true,\r\n          });\r\n        }\r\n      } else {\r\n        this.setState({\r\n          modalMessage: \"Something went wrong. Please try again.\",\r\n          showApproveModal: true,\r\n        });\r\n      }\r\n      scrollToTop(true);\r\n    } catch (e) {\r\n      this.setState({\r\n        modalMessage: \"Something went wrong. Please try again.\",\r\n        showApproveModal: true,\r\n      },\r\n        () => scrollToTop(true)\r\n      );\r\n    }\r\n  };\r\n\r\n  resetState = () => {\r\n    this.setState(\r\n      {\r\n        activePageNum: 0,\r\n        showFilter: false,\r\n        selectedItems: null,\r\n        selectedItem: null,\r\n        typeOptions: null,\r\n        centreOptions: null,\r\n        storeOptions: null,\r\n        filterType: \"all\",\r\n        filterStore: \"all\",\r\n        filterCentre: \"all\",\r\n        modalIcon: true,\r\n        previewTitle: null,\r\n        previewUrl: null,\r\n        previewItemId: null,\r\n        filteredItems: null,\r\n        itemCount: null,\r\n        itemTotal: null,\r\n      },\r\n      () => {\r\n        let params = {\r\n          pageNumber: 1,\r\n        };\r\n        setTimeout(() => this.getData(params), 1000);\r\n      }\r\n    );\r\n  };\r\n\r\n  handlePaginationClick = (data) => {\r\n    this.setState(\r\n      {\r\n        activePageNum: data.selected,\r\n      },\r\n      () => scrollToTop()\r\n    );\r\n    this.handleItems(data.selected);\r\n    addClassLazyload(\"approvals-item-container\");\r\n  };\r\n\r\n  renderPagination = () => {\r\n    const { totalPageNumber, paginationRange } = this.state;\r\n    return (\r\n      totalPageNumber &&\r\n      totalPageNumber > 1 && (\r\n        <div className=\"react-paginate-wrapper\">\r\n          <ReactPaginate\r\n            previousLabel={\r\n              <div>\r\n                <i className=\"icon icon-chevron-outline-left\" />\r\n                <span>Previous</span>\r\n              </div>\r\n            }\r\n            nextLabel={\r\n              <div>\r\n                <i className=\"icon icon-chevron-outline-right\" />\r\n                <span>Next</span>\r\n              </div>\r\n            }\r\n            breakLabel={\"...\"}\r\n            breakClassName={\"break-me\"}\r\n            pageCount={totalPageNumber}\r\n            marginPagesDisplayed={0}\r\n            pageRangeDisplayed={paginationRange}\r\n            forcePage={this.state.activePageNum}\r\n            onPageChange={this.handlePaginationClick}\r\n            containerClassName={\"pagination\"}\r\n            subContainerClassName={\"pages pagination\"}\r\n            activeClassName={\"active\"}\r\n          />\r\n        </div>\r\n      )\r\n    );\r\n  };\r\n\r\n  renderPreviewModal = () => {\r\n    const {\r\n      previewTitle: title = null,\r\n      previewUrl: url = null,\r\n      previewItemId: id = null,\r\n      showPreviewModal,\r\n      previewUrlList,\r\n    } = this.state || {};\r\n\r\n    if (showPreviewModal) {\r\n      disableBodyScroll();\r\n    }\r\n\r\n    hideBackToTop(showPreviewModal);\r\n\r\n    return (\r\n      <FormModal\r\n        isPreview\r\n        isDynamicHeader\r\n        showModal={showPreviewModal}\r\n        label={title || \"\"}\r\n        closeOnClick={() =>\r\n          this.setState(\r\n            {\r\n              showPreviewModal: false,\r\n            },\r\n            () => enableBodyScroll()\r\n          )\r\n        }\r\n        primaryBtn={\r\n          <Fragment>\r\n            <span className=\"d-none d-lg-block\">Approve</span>\r\n            <i className=\"icon icon-thumbs-up d-block d-lg-none\" />\r\n          </Fragment>\r\n        }\r\n        primaryBtnOnClick={\r\n          previewUrlList.length === 0\r\n            ? () => {\r\n              this.setState(\r\n                {\r\n                  selectedItem: [id],\r\n                  showPreviewModal: false,\r\n                },\r\n                () => {\r\n                  enableBodyScroll();\r\n                  this.approveItems();\r\n                }\r\n              );\r\n            }\r\n            : null\r\n        }\r\n        redBtn={\r\n          <Fragment>\r\n            <span className=\"d-none d-lg-block\">Reject</span>\r\n            <i className=\"icon icon-thumbs-down d-block d-lg-none\" />\r\n          </Fragment>\r\n        }\r\n        redBtnOnClick={\r\n          previewUrlList.length === 0\r\n            ? () => {\r\n              this.setState(\r\n                {\r\n                  selectedItem: [id],\r\n                  showPreviewModal: false,\r\n                  showRejectModal: true,\r\n                },\r\n                () => {\r\n                  enableBodyScroll();\r\n                }\r\n              );\r\n            }\r\n            : null\r\n        }\r\n      >\r\n        {showPreviewModal && <CustomIframe title={title || \"\"} src={url} />}\r\n      </FormModal>\r\n    );\r\n  };\r\n\r\n  renderItems = () => {\r\n    const { filteredItems, selectedItems } = this.state;\r\n    return (\r\n      <div className=\"approvals-item-container\">\r\n        {filteredItems && filteredItems.length ? (\r\n          filteredItems.map((item, index) => {\r\n            const {\r\n              ItemId,\r\n              Name,\r\n              Type,\r\n              Centre,\r\n              StartDate,\r\n              EndDate,\r\n              PreviewUrl,\r\n              PreviewUrlList,\r\n              Store,\r\n              Thumbnail,\r\n            } = item;\r\n            let isSelected = false;\r\n            let title = \"\";\r\n            let url = \"\";\r\n            let globalStoreList = [];\r\n            if (selectedItems && selectedItems.length) {\r\n              selectedItems.map((selected) =>\r\n                selected === ItemId.value ? (isSelected = true) : null\r\n              );\r\n            }\r\n\r\n            if (PreviewUrlList && PreviewUrlList.length > 0) {\r\n              const storeList = PreviewUrlList;\r\n              const storeItem = storeList[0].Storefronts;\r\n\r\n              if (storeList.length === 1 && storeItem.length === 1) {\r\n                title =\r\n                  storeItem[0].Store.value + \" \" + storeList[0].Centre.value;\r\n                url = storeItem[0].PreviewUrl.value;\r\n              } else {\r\n                globalStoreList = PreviewUrlList;\r\n              }\r\n            } else {\r\n              if (Name && Name.value) {\r\n                title = Name.value;\r\n              } else if (Store && Store.value && Centre && Centre.value) {\r\n                title = Store.value + \" \" + Centre.value;\r\n              }\r\n              if (PreviewUrl && PreviewUrl.value) {\r\n                url = PreviewUrl.value;\r\n              }\r\n            }\r\n\r\n            return (\r\n              <ListItem\r\n                key={`itemId-${index}`}\r\n                isSelected={isSelected}\r\n                noActionBtn={true}\r\n                logoSrc={\r\n                  Thumbnail && Thumbnail.value && Thumbnail.value.src\r\n                    ? Thumbnail.value.src\r\n                    : logoPlaceholder\r\n                }\r\n                label={{\r\n                  value: (\r\n                    <Fragment>\r\n                      <Text field={Store} />\r\n                      {Centre && Centre.value && Store && Store.value && \" – \"}\r\n                      <Text field={Centre} />\r\n                    </Fragment>\r\n                  ),\r\n                }}\r\n                title={{\r\n                  value: (\r\n                    <Fragment>\r\n                      <Text field={Type} />\r\n                      {Type && Type.value && Name && Name.value && \" – \"}\r\n                      <Text field={Name} />\r\n                    </Fragment>\r\n                  ),\r\n                }}\r\n                description={{\r\n                  value:\r\n                    StartDate && StartDate.value && EndDate && EndDate.value\r\n                      ? getDuration(StartDate.value, EndDate.value)\r\n                      : StartDate && StartDate.value\r\n                        ? getStartDate(StartDate.value)\r\n                        : null,\r\n                }}\r\n                previewBtn={{\r\n                  label:\r\n                    globalStoreList && globalStoreList.length > 0\r\n                      ? \"Preview...\"\r\n                      : \"Preview\",\r\n                }}\r\n                previewBtnOnClick={() => {\r\n                  if (globalStoreList && globalStoreList.length > 0) {\r\n                    this.handleBulkPreviewForm(globalStoreList, Thumbnail);\r\n                  } else {\r\n                    this.setState({\r\n                      showPreviewModal: true,\r\n                      previewTitle: title,\r\n                      previewUrl: url,\r\n                      previewUrlList: globalStoreList,\r\n                      previewItemId: ItemId.value,\r\n                    });\r\n                  }\r\n                }}\r\n                btnOne={{\r\n                  icon: \"thumbs-up\",\r\n                  color: \"primary\",\r\n                  tooltip: \"Approve\",\r\n                }}\r\n                btnOneOnClick={() => {\r\n                  this.setState(\r\n                    {\r\n                      selectedItem: [ItemId.value],\r\n                    },\r\n                    () => this.approveItems()\r\n                  );\r\n                }}\r\n                btnTwo={{\r\n                  icon: \"thumbs-down\",\r\n                  color: \"red\",\r\n                  tooltip: \"Reject\",\r\n                }}\r\n                btnTwoOnClick={() =>\r\n                  this.setState({\r\n                    selectedItem: [ItemId.value],\r\n                    showRejectModal: true,\r\n                  })\r\n                }\r\n                checkboxValue={ItemId.value}\r\n                checkboxOnChange={(value, checked) =>\r\n                  this.handleSelected(value, checked)\r\n                }\r\n              />\r\n            );\r\n          })\r\n        ) : (\r\n            <NoResultMessage label=\"No approvals\" />\r\n          )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  handleBulkPreviewForm = (globalStoreList, logo) => {\r\n    this.setState({\r\n      showBulkPreview: true,\r\n      previewUrlList: globalStoreList,\r\n      retailerLogo:\r\n        logo && logo.value && logo.value.src ? logo.value.src : null,\r\n    },\r\n      () => hideBackToTop(true)\r\n    );\r\n  };\r\n\r\n  handleHeaderIconClick = (clearItem) => {\r\n    if (clearItem) {\r\n      this.uncheckAll();\r\n    } else {\r\n      const leftNavWrapper = document.querySelector(\".left-nav\");\r\n      const topNavWrapper = document.querySelector(\".top-nav .top-nav-wrapper\");\r\n\r\n      if (leftNavWrapper && topNavWrapper) {\r\n        leftNavWrapper.classList.add(\"show-nav-mobile\");\r\n        topNavWrapper.classList.add(\"show-nav-mobile\");\r\n      }\r\n    }\r\n  };\r\n\r\n  renderBulkPreview = () => {\r\n    const { previewUrlList, retailerLogo } = this.state;\r\n    return (\r\n      <div className=\"approvals-modal\">\r\n        {previewUrlList && previewUrlList.length > 0 && (\r\n          <PopupPreview\r\n            previewTitle={\"Preview\"}\r\n            previewLogo={retailerLogo}\r\n            previewList={previewUrlList}\r\n            previewListChildName=\"Storefronts\"\r\n            showPreviewModal={() => this.setState({ showBulkPreview: false }, () => hideBackToTop(false))}\r\n          />\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  render() {\r\n    const {\r\n      selectedItems,\r\n      showPagination,\r\n      showLoader,\r\n      showRejectModal,\r\n      showApproveModal,\r\n      showFilter,\r\n      isDocumentReady,\r\n      itemTotal,\r\n      totalResults,\r\n      typeOptions,\r\n      centreOptions,\r\n      storeOptions,\r\n      itemCount,\r\n      showBulkPreview,\r\n      isDesktop,\r\n      filterCentre,\r\n      filterStore,\r\n    } = this.state;\r\n    const hasSelection = selectedItems && selectedItems.length;\r\n    return (\r\n      <div className={`approvals-container ${showApproveModal ? \"has-success-message\" : \"\"}`}>\r\n        {showBulkPreview && this.renderBulkPreview()}\r\n        <div className=\"approvals-header\">\r\n          <div className=\"approvals-header-icon\">\r\n            <button onClick={() => this.handleHeaderIconClick(hasSelection)}>\r\n              <i className={`icon icon-${hasSelection ? \"close\" : \"menu\"}`} />\r\n            </button>\r\n            <div className=\"h1-regular\">\r\n              {hasSelection ? selectedItems.length + \" selected\" : \"Approvals\"}\r\n            </div>\r\n          </div>\r\n          <div className=\"approvals-header-actions\">\r\n            {hasSelection ? (\r\n              <Fragment>\r\n                <div\r\n                  className=\"header-cancel\"\r\n                  onClick={() => this.uncheckAll()}\r\n                >\r\n                  Cancel\r\n                </div>\r\n                <Button\r\n                  color=\"primary\"\r\n                  size=\"small\"\r\n                  className=\"approvals-approve-btn\"\r\n                  onClick={() =>\r\n                    this.setState({ selectedItem: null }, () =>\r\n                      this.approveItems()\r\n                    )\r\n                  }\r\n                >\r\n                  <span className=\"d-none d-lg-block\">Approve</span>\r\n                  <i className=\"icon icon-thumbs-up\" />\r\n                </Button>\r\n\r\n                <Button\r\n                  color=\"red\"\r\n                  size=\"small\"\r\n                  className=\"approvals-reject-btn\"\r\n                  onClick={() =>\r\n                    this.setState({\r\n                      selectedItem: null,\r\n                      showRejectModal: true,\r\n                    })\r\n                  }\r\n                >\r\n                  <span className=\"d-none d-lg-block\">Reject</span>\r\n                  <i className=\"icon icon-thumbs-down\" />\r\n                </Button>\r\n              </Fragment>\r\n            ) : (\r\n                \"\"\r\n              )}\r\n            {!showFilter && !showLoader && totalResults && totalResults > 1 && (\r\n              <Button\r\n                color=\"secondary\"\r\n                className=\"approvals-filter-btn\"\r\n                size=\"small\"\r\n                onClick={() => this.setState({ showFilter: true })}\r\n              >\r\n                Filter\r\n              </Button>\r\n            )}\r\n          </div>\r\n        </div>\r\n        {showRejectModal && this.renderRejectModal()}\r\n        {isDocumentReady && this.renderPreviewModal()}\r\n        {isDocumentReady && (\r\n          <CustomFilter\r\n            showFilter={showFilter}\r\n            onCloseFilter={() => this.setState({ showFilter: false })}\r\n          >\r\n            <div className=\"custom-filter__group\">\r\n              <div className=\"custom-filter__label\">Filter by type</div>\r\n              {typeOptions && typeOptions.length ? (\r\n                <FilterRadioButton\r\n                  defaultSelected=\"all\"\r\n                  options={typeOptions}\r\n                  radioGroupName=\"approvalType\"\r\n                  onChange={(id) => this.handleFilter(\"filterType\", id)}\r\n                  plain\r\n                />\r\n              ) : (\r\n                  \"\"\r\n                )}\r\n            </div>\r\n            <div className=\"custom-filter__group\">\r\n              <div className=\"custom-filter__label\">Filter by centre</div>\r\n              {centreOptions && centreOptions.length ? (\r\n                centreOptions.length < 5 && isDesktop ? (\r\n                  <FilterRadioButton\r\n                    defaultSelected={filterCentre}\r\n                    options={centreOptions}\r\n                    radioGroupName=\"approvalCentre\"\r\n                    onChange={(id) => this.handleFilter(\"filterCentre\", id)}\r\n                    plain\r\n                  />\r\n                ) : (\r\n                    <Select\r\n                      onChange={(option) => {\r\n                        this.handleFilter(\"filterCentre\", option.value);\r\n                      }}\r\n                      defaultValue={\r\n                        filterCentre === \"all\"\r\n                          ? centreOptions[0]\r\n                          : { value: filterCentre, label: filterCentre }\r\n                      }\r\n                      options={centreOptions}\r\n                      theme={(theme) => ({\r\n                        ...theme,\r\n                        colors: {\r\n                          ...theme.colors,\r\n                          primary: \"#536760\",\r\n                          primary25: \"#f5f5f6\",\r\n                        },\r\n                      })}\r\n                      isSearchable={false}\r\n                      maxMenuHeight={200}\r\n                      menuPlacement=\"auto\"\r\n                    />\r\n                  )\r\n              ) : (\r\n                  \"\"\r\n                )}\r\n            </div>\r\n            <div className=\"custom-filter__group\">\r\n              <div className=\"custom-filter__label\">Filter by store</div>\r\n              {storeOptions && storeOptions.length ? (\r\n                storeOptions.length < 5 && isDesktop ? (\r\n                  <FilterRadioButton\r\n                    defaultSelected={filterStore}\r\n                    options={storeOptions}\r\n                    radioGroupName=\"approvalStore\"\r\n                    onChange={(id) => this.handleFilter(\"filterStore\", id)}\r\n                    plain\r\n                  />\r\n                ) : (\r\n                    <Select\r\n                      onChange={(option) => {\r\n                        this.handleFilter(\"filterStore\", option.value);\r\n                      }}\r\n                      defaultValue={\r\n                        filterStore === \"all\"\r\n                          ? storeOptions[0]\r\n                          : { value: filterStore, label: filterStore }\r\n                      }\r\n                      options={storeOptions}\r\n                      theme={(theme) => ({\r\n                        ...theme,\r\n                        colors: {\r\n                          ...theme.colors,\r\n                          primary: \"#536760\",\r\n                          primary25: \"#f5f5f6\",\r\n                        },\r\n                      })}\r\n                      isSearchable={false}\r\n                      maxMenuHeight={200}\r\n                      menuPlacement=\"auto\"\r\n                    />\r\n                  )\r\n              ) : (\r\n                  \"\"\r\n                )}\r\n            </div>\r\n          </CustomFilter>\r\n        )}\r\n        {showApproveModal && this.renderApproveModal()}\r\n        {!showLoader && this.renderItems()}\r\n        {!showLoader && itemTotal && itemCount && (\r\n          <div className=\"list-count\">\r\n            Showing {itemCount} of {itemTotal}\r\n          </div>\r\n        )}\r\n        {showLoader && (\r\n          <div className=\"loader-wrapper container\">\r\n            <div className=\"loader\" />\r\n          </div>\r\n        )}\r\n        {showPagination && <div>{this.renderPagination()}</div>}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default FeatureRetailerPortalApprovals;\r\n","import React, { Component } from \"react\";\n\nclass RadioButton extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            selectedId: null,\n        };\n    }\n\n    handleRadioClick = (id, onChange) => {\n        if (onChange) {\n            onChange(id);\n        }\n\n        this.setState({\n            selectedId: id\n        })\n    }\n\n    render() {\n        const {\n            defaultSelected = null,\n            options = null,\n            radioGroupName = null,\n            onChange = null,\n            disabled = null,\n            plain = null,\n        } = this.props || {};\n\n        const {\n            selectedId\n        } = this.state;\n\n        return (\n            <div>\n                {options &&\n                    options.map((radioList, index) => {\n                        const {\n                            Id: id = null,\n                            Name: name = null,\n                            Description: description = null,\n                            Selected: selected = null,\n                        } = radioList.fields || radioList;\n\n                        return (\n                            <div key={`${name.value}-${name.id}-${index}-radiobutton`}\n                                className={`form-radiobutton ${plain ? \"is-plain\" : \"\"}`}\n                            >\n                                <label key={`${name.value}-${name.id}-${index}-radiobutton`}\n                                    className={disabled ? \"disabled\" : \"\"}>\n                                    <input\n                                        type=\"radio\"\n                                        className={selectedId == id.value ? \"is-active\" :\n                                            (!selectedId && ((selected && selected.value === true) || (defaultSelected === id.value))) ? \"is-active\" : \"\"}\n                                        id={id.value}\n                                        name={radioGroupName}\n                                        value={name.value}\n                                        onClick={() => this.handleRadioClick(id.value, onChange)}\n                                        disabled={disabled}\n                                    />\n                                    <span className=\"form-radiobutton__checkmark\"></span>\n                                    <span className=\"form-radiobutton__name\">\n                                        {name.value}\n                                        {description &&\n                                            description.value &&\n                                            <div className=\"form-radiobutton__description\">\n                                                {description.value}\n                                            </div>\n                                        }\n                                    </span>\n\n                                </label>\n                            </div>\n                        );\n                    })}\n            </div>\n        )\n    }\n};\n\nexport default RadioButton;","import React from \"react\";\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\nimport Button from \"../../Base/Button\";\n\nclass PageHeader extends React.Component {\n  handleOnClick = () => {\n    const leftNavWrapper = document.querySelector(\".left-nav\");\n    const topNavWrapper = document.querySelector(\".top-nav .top-nav-wrapper\");\n\n    if (leftNavWrapper && topNavWrapper) {\n      leftNavWrapper.classList.add(\"show-nav-mobile\");\n      topNavWrapper.classList.add(\"show-nav-mobile\");\n    }\n  };\n\n  render() {\n    const {\n      title = null,\n      primaryBtnLabel = null,\n      primaryBtnColor = null,\n      primaryBtnOnClick = null,\n      primaryBtnClassName = null,\n      primaryBtnIcon = null,\n      secondaryBtnLabel = null,\n      secondaryBtnColor = null,\n      secondaryBtnOnClick = null,\n      secondaryBtnClassName = null,\n    } = this.props || {};\n    return (\n      <div className=\"page-header__wrapper\">\n        <div className=\"page-header__hamburger\">\n          <button onClick={this.handleOnClick}>\n            <i className=\"icon icon-menu\" />\n          </button>\n        </div>\n        <div className=\"page-header__title\">\n          <Text field={title} />\n        </div>\n        <div className=\"page-header__button\">\n          {secondaryBtnLabel && secondaryBtnOnClick && (\n            <Button\n              onClick={secondaryBtnOnClick}\n              size=\"small\"\n              color={secondaryBtnColor ? secondaryBtnColor : \"secondary\"}\n              className={secondaryBtnClassName}\n            >\n              {secondaryBtnLabel}\n            </Button>\n          )}\n          {primaryBtnLabel && primaryBtnOnClick && (\n            <Button\n              onClick={primaryBtnOnClick}\n              size=\"small\"\n              color={primaryBtnColor ? primaryBtnColor : \"primary\"}\n              className={primaryBtnClassName}\n              icon={primaryBtnIcon}\n            >\n              {primaryBtnLabel}\n            </Button>\n          )}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default PageHeader;\n","import React from \"react\";\nimport {\n  getArticles,\n} from \"../../../api/ArticlesAPI\";\nimport PageHeader from \"../../Base/PageHeader\";\nimport ListItem from \"../../Base/ListItem\";\nimport NoResultMessage from \"../../Base/NoResultMessage\";\n\n// import GetArticlesResponse from \"./GetArticlesResponse.json\";\n\nclass Articles extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showLoader: true,\n    };\n  }\n\n  componentDidMount() {\n    const {\n      isDashboard\n    } = this.props\n\n    if (!isDashboard) {\n      let params = {\n        centre: \"\"\n      };\n      this.getData(params, true);\n    } else {\n      this.setState({\n        showLoader: false,\n      });\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {\n      filterCentre,\n      isDashboard\n    } = this.props\n\n    if (!isDashboard) {\n      if ((filterCentre !== prevProps.filterCentre)) {\n        let params = {\n          centre: filterCentre.toString()\n        }\n        this.getData(params);\n      }\n    }\n  }\n\n  getData = async (params, isOnLoad) => {\n    this.setState({\n      showLoader: true\n    })\n\n    try {\n      const response = await getArticles(params);\n      if (response.status === 200 && response.data) {\n        this.props.dataUpdate(response.data);\n        let totalResultCount = 0;\n        Object.keys(response.data).map(item => {\n          totalResultCount = totalResultCount + response.data[item].length\n        })\n        this.props.dataTotalCount(totalResultCount)\n        this.setState({\n          showLoader: false,\n        });\n      }\n    }\n    catch (e) {\n      console.error(\"Get Articles Data Error: \" + e.response.statusText);\n      // this.props.dataUpdate(GetArticlesResponse);\n      // let totalResultCount = 0;\n      // Object.keys(GetArticlesResponse).map(item => {\n      //   totalResultCount = totalResultCount + GetArticlesResponse[item].length\n      // })\n      // this.props.dataTotalCount(totalResultCount)\n      // this.setState({\n      //   showLoader: false,\n      // });\n    }\n  };\n\n  renderItems = (data, filter) => {\n    const {\n      LivePromotions,\n      ScheduledPromotions,\n      AwaitingApprovalPromotions,\n      DraftPromotions,\n      RejectedPromotions,\n      dashboardArticles\n    } = data || {};\n\n    let renderItemsLayout = \"\";\n\n    if (dashboardArticles && dashboardArticles.length > 0) {\n      renderItemsLayout =\n        this.renderDashboardListItem(dashboardArticles)\n    } else {\n      let livePomotionLayout = \"\",\n        ScheduledPromotionsLayout = \"\",\n        AwaitingApprovalPromotionsLayout = \"\",\n        DraftPromotionsLayout = \"\",\n        RejectedPromotionsLayout = \"\";\n\n      if (LivePromotions && LivePromotions.length > 0) {\n        livePomotionLayout =\n          this.renderListItem(LivePromotions, \"Live\", filter)\n      }\n      if (ScheduledPromotions && ScheduledPromotions.length > 0) {\n        ScheduledPromotionsLayout =\n          this.renderListItem(ScheduledPromotions, \"Scheduled\", filter)\n      }\n      if (AwaitingApprovalPromotions && AwaitingApprovalPromotions.length > 0) {\n        AwaitingApprovalPromotionsLayout =\n          this.renderListItem(AwaitingApprovalPromotions, \"Awaiting approval\", filter)\n      }\n      if (DraftPromotions && DraftPromotions.length > 0) {\n        DraftPromotionsLayout =\n          this.renderListItem(DraftPromotions, \"Draft\", filter)\n      }\n      if (RejectedPromotions && RejectedPromotions.length > 0) {\n        RejectedPromotionsLayout =\n          this.renderListItem(RejectedPromotions, \"Rejected\", filter)\n      }\n\n      if (filter === \"allStatus\") {\n        renderItemsLayout =\n          <div>\n            {livePomotionLayout}\n            {ScheduledPromotionsLayout}\n            {AwaitingApprovalPromotionsLayout}\n            {DraftPromotionsLayout}\n            {RejectedPromotionsLayout}\n          </div>\n      }\n      else if (filter === \"LivePromotions\") {\n        renderItemsLayout = livePomotionLayout;\n      }\n      else if (filter === \"ScheduledPromotions\") {\n        renderItemsLayout = ScheduledPromotionsLayout;\n      }\n      else if (filter === \"AwaitingApprovalPromotions\") {\n        renderItemsLayout = AwaitingApprovalPromotionsLayout;\n      }\n      else if (filter === \"DraftPromotions\") {\n        renderItemsLayout = DraftPromotionsLayout;\n      }\n      else if (filter === \"RejectedPromotions\") {\n        renderItemsLayout = RejectedPromotionsLayout;\n      }\n    }\n\n    return renderItemsLayout;\n  }\n\n  renderDashboardListItem = (promotions) => {\n    const {\n      noSelectedStore\n    } = this.props\n\n    return (\n      <div className=\"list__group\">\n        {promotions.map((item, index) => {\n          const {\n            ItemId,\n            Thumbnail,\n            CentreName,\n            Title,\n            Status,\n            PreviewURL\n          } = item || {};\n\n          let imageSrc = \"\";\n\n          if (Thumbnail && Thumbnail.value && Thumbnail.value.src) {\n            imageSrc = Thumbnail.value.src;\n          }\n\n          return (\n            <ListItem\n              key={`articles-list-${ItemId + index}`}\n              logoSrc={imageSrc}\n              label={CentreName}\n              title={Title}\n              status={Status}\n              previewBtn={{ \"label\": \"Preview\" }}\n              previewBtnOnClick={() => {\n                this.props.showPreviewModal({\n                  url: PreviewURL.value,\n                  title: (Title && Title.value) ? Title.value : \"\",\n                })\n              }}\n              btnOne={{ \"icon\": \"trash-2\", \"tooltip\": \"Delete\" }}\n              btnOneOnClick={() => {\n                this.props.showDeleteModal({\n                  id: ItemId.value,\n                  name: Title.value,\n                  centreName: CentreName.value,\n                  status: Status.value,\n                })\n              }}\n              listItemOnClick={(e) => {\n                if (noSelectedStore) {\n                  if (!(/btn|icon/.test(e.target.className))) {\n                    this.props.showPreviewModal({\n                      url: PreviewURL.value,\n                      title: (Title && Title.value) ? Title.value : \"\",\n                    })\n                  }\n                } else {\n                  this.handleOnClickList(e, ItemId.value)\n                }\n              }\n              }\n            />\n          )\n        })\n        }\n      </div>\n    )\n  }\n\n  renderListItem = (promotions, label, filter) => {\n    const {\n      noSelectedStore\n    } = this.props;\n    return (\n      <div className=\"list__group\">\n        {filter === \"allStatus\" &&\n          <div className=\"list__header\">\n            {label}\n          </div>\n        }\n        {promotions.map((item, index) => {\n          const {\n            ItemId,\n            Thumbnail,\n            CentreName,\n            Title,\n            ShortDescription,\n            Status,\n            PreviewURL\n          } = item || {};\n\n          let imageSrc = \"\";\n\n          if (Thumbnail && Thumbnail.value && Thumbnail.value.src) {\n            imageSrc = Thumbnail.value.src;\n          }\n\n          return (\n            <ListItem\n              key={`articles-list-${ItemId + index}`}\n              logoSrc={imageSrc}\n              label={CentreName}\n              title={Title}\n              description={ShortDescription}\n              status={Status}\n              previewBtn={{ \"label\": \"Preview\" }}\n              previewBtnOnClick={() => {\n                this.props.showPreviewModal({\n                  url: PreviewURL.value,\n                  title: (Title && Title.value) ? Title.value : \"\",\n                })\n              }}\n              btnOne={{ \"icon\": \"trash-2\", \"tooltip\": \"Delete\" }}\n              btnOneOnClick={() => {\n                this.props.showDeleteModal({\n                  id: ItemId.value,\n                  name: Title.value,\n                  centreName: CentreName.value,\n                  status: Status.value,\n                })\n              }}\n              listItemOnClick={(e) => {\n                if (noSelectedStore) {\n                  if (!(/btn|icon/.test(e.target.className))) {\n                    this.props.showPreviewModal({\n                      url: PreviewURL.value,\n                      title: (Title && Title.value) ? Title.value : \"\",\n                    })\n                  }\n                } else {\n                  this.handleOnClickList(e, ItemId.value)\n                }\n              }\n              }\n            />\n          )\n        })\n        }\n      </div>\n    )\n  }\n\n  renderListCount = (data, totalListCount, filterStatus) => {\n    let articleCount = 0;\n    Object.keys(data).map(item => {\n      if (filterStatus !== \"allStatus\") {\n        if (filterStatus === item) {\n          articleCount = data[item].length;\n        }\n      } else {\n        articleCount = articleCount + data[item].length;\n      }\n    })\n    return (\n      <div>\n        {articleCount > 0 ?\n          <div className=\"list-count no-pagination\">\n            {\"Showing \"}\n            {articleCount}\n            {\" of \"}\n            {totalListCount}\n          </div> :\n          <NoResultMessage\n            label=\"No articles\"\n            description=\"Create an article to boost customer engagement with your store!\"\n          />\n        }\n      </div>\n    )\n  }\n\n  handleOnClickList = (e, itemId) => {\n    let element = e.target;\n    let formModalLabel = \"\";\n    document.activeElement.blur();\n    if (e.detail > 1) {\n      return;\n    }\n    if ((/btn-form-create|btn__label|icon-plus/.test(element.className))) {\n      if(/btn__label/.test(element.className) && !(/btn-form-create/.test(element.parentElement.className))) {\n        return;\n      }\n      formModalLabel =\n        <span>\n          {\"Website content\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"Articles\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"New article\"}\n        </span>\n\n      this.props.showFormModal({\n        title: formModalLabel,\n        itemId: \"\",\n        isNewArticle: true\n      })\n    }\n    else if (!(/btn|icon/.test(element.className)) || (/js-btn-edit|icon-edit/.test(element.className))) {\n      formModalLabel =\n        <span>\n          {\"Website content\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"Articles\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"Update article\"}\n        </span>\n\n      this.props.showFormModal({\n        title: formModalLabel,\n        itemId: itemId,\n        isNewArticle: false\n      })\n    }\n  }\n\n  render() {\n    const {\n      data,\n      showFilter,\n      filterStatus,\n      isDashboard,\n      hideFilter,\n      totalListCount\n    } = this.props;\n    const {\n      showLoader,\n    } = this.state;\n    return (\n      <div>\n        <div className={`articles ${hideFilter ? \"hide-filter\" : \"\"}`}>\n          <PageHeader\n            title={{ value: \"Articles\" }}\n            primaryBtnLabel={\"New article\"}\n            primaryBtnClassName=\"btn-form-create\"\n            primaryBtnIcon={\"plus\"}\n            primaryBtnOnClick={(e) =>\n              this.handleOnClickList(e)}\n            secondaryBtnLabel={\"Filter\"}\n            secondaryBtnClassName=\"filter-btn\"\n            secondaryBtnOnClick={() => showFilter()}\n          />\n          {showLoader &&\n            <div className=\"loader-wrapper container\">\n              <div className=\"loader\">\n              </div>\n            </div>\n          }\n          {!showLoader &&\n            this.renderItems(data, filterStatus)\n          }\n          {!isDashboard &&\n            !showLoader &&\n            data &&\n            this.renderListCount(data, totalListCount, filterStatus)\n          }\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default Articles;\n","import BaseURL from \"./BaseURL\";\r\n\r\nconst isDev = process.env.REACT_APP_DEV || false;\r\n\r\nexport const getArticles = (params) => {\r\n  const endpoint = isDev ? \"/GetArticles\" : \"/article/GetArticles\";\r\n   return BaseURL.get(endpoint, { params: { ...params}});\r\n\r\n};\r\n\r\nexport const deleteArticle = params => {\r\n  return BaseURL.get(\"/article/DeleteArticle\", { params: { ...params } });\r\n};\r\n\r\nexport const getArticleData = params => {\r\n   const endpoint = isDev ? \"/GetCentreStores\" : \"/article/GetArticleData\";\r\n   return BaseURL.get(endpoint, { params: { ...params}});\r\n};","import React, { Component } from \"react\";\nimport { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';\nimport Button from \"../Button\";\n\nclass FormImageGallery extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            imageFiles: [],\n        };\n\n    }\n\n    componentDidMount() {\n        const {\n            value\n        } = this.props || {}\n\n        if (document) {\n            let imageFiles = []\n            if (value.length > 0) {\n                imageFiles = value\n            } else {\n                let initialValue = {\n                    name: Date.now().toString(),\n                    id: Date.now().toString(),\n                    src: null,\n                    newItem: true\n                }\n                imageFiles.push(initialValue)\n            }\n            this.setState({\n                imageFiles\n            })\n        }\n    }\n\n    handleAttachments = () => {\n        const {\n            imageFiles\n        } = this.state\n        let newImageFiles = imageFiles.filter((el) => {\n            return !el.newItem\n        })\n        this.props.handleAttachments(newImageFiles);\n    };\n\n    updateFile(imageFile, itemIndex) {\n        const { imageFiles } = this.state;\n        let listItem = [];\n        imageFiles.map((item, index) => {\n            if (index == itemIndex) {\n                listItem.push(imageFile)\n            } else {\n                listItem.push(item);\n            }\n        })\n        let newImageFiles = listItem;\n        this.setState({\n            imageFiles: newImageFiles\n        },\n            this.handleAttachments\n        );\n    }\n\n    removeFile(index) {\n        const {\n            imageFiles\n        } = this.state;\n        imageFiles.splice(index, 1);\n        this.setState({\n            imageFiles,\n        },\n            this.handleAttachments\n        );\n\n        if (imageFiles.length === 0) {\n            let initialValue = {\n                name: Date.now().toString(),\n                id: Date.now().toString(),\n                src: null,\n                newItem: true\n            }\n            imageFiles.push(initialValue)\n            this.setState({\n                imageFiles\n            })\n        }\n    }\n\n    handleAddUpload = () => {\n        const {\n            imageFiles\n        } = this.state;\n        let newImageFiles = imageFiles;\n        let addNewValue = {\n            name: Date.now().toString(),\n            id: Date.now().toString(),\n            src: null,\n            newItem: true\n        }\n\n        newImageFiles.push(addNewValue)\n\n        this.setState({\n            imageFiles: newImageFiles\n        },\n            this.handleAttachments)\n\n    }\n\n    handleOnDragEnd = (result) => {\n        const {\n            imageFiles\n        } = this.state;\n        if (!result.destination) return;\n\n        const items = Array.from(imageFiles);\n        const [reorderedItem] = items.splice(result.source.index, 1);\n        items.splice(result.destination.index, 0, reorderedItem);\n\n        this.setState({\n            imageFiles: items\n        },\n            this.handleAttachments)\n    }\n\n    renderGalleryList = (imageGalleryList, placeholder) => {\n        return (\n            <React.Fragment>\n                {imageGalleryList.length > 1 ?\n                    <DragDropContext onDragEnd={this.handleOnDragEnd}>\n                        <Droppable droppableId=\"form-image-gallery__drag-drop\">\n                            {(provided) => (\n                                <div className=\"form-image-gallery__drag-drop\" {...provided.droppableProps} ref={provided.innerRef}>\n                                    {imageGalleryList.map((item, index) => {\n                                        const {\n                                            name,\n                                            id,\n                                            src,\n                                            newItem\n                                        } = item || {};\n                                        let imgSrc = \"\";\n                                        if (newItem) {\n                                            imgSrc = \"\"\n                                        }\n                                        else if (item.src) {\n                                            imgSrc = src\n                                        } else {\n                                            imgSrc = URL.createObjectURL(item)\n                                        }\n                                        return (\n                                            <div className=\"form-image-gallery__list--container\" key={id ? id : name + index}>\n                                                <Draggable key={id ? id : name + index} draggableId={id ? id : name + index} index={index}>\n                                                    {(provided, imageItem) => (\n                                                        <div className={`form-image-gallery__list ${imageItem.isDragging ? \"is-dragging\" : \"\"}`} ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}>\n                                                            <div className=\"form-image-gallery__action\">\n                                                                <i className=\"icon icon-move\" />\n                                                                <i\n                                                                    className=\"icon icon-trash\"\n                                                                    onClick={() => this.removeFile(index)}\n                                                                />\n                                                            </div>\n                                                            {imgSrc ?\n                                                                <div className=\"form-image-gallery__image\">\n                                                                    <img alt={`${name}-${index}`}\n                                                                        src={imgSrc ? imgSrc : \"\"}\n                                                                    />\n                                                                    <label className=\"image-gallery-btn-change\" htmlFor={name + index}>\n                                                                        <span>\n                                                                            {\"Change\"}\n                                                                        </span>\n                                                                        <input\n                                                                            id={name + index}\n                                                                            type=\"file\"\n                                                                            accept=\"image/png,image/jpeg\"\n                                                                            onChange={e => this.updateFile(e.target.files[0], index)}\n                                                                        />\n                                                                    </label>\n                                                                </div>\n                                                                :\n                                                                < div className=\"form-image-gallery__image\">\n                                                                    <label className=\"form-image-gallery__upload btn-choose\">\n                                                                        <span>\n                                                                            {placeholder ? placeholder : \"Choose image\"}\n                                                                        </span>\n                                                                        <input\n                                                                            type=\"file\"\n                                                                            accept=\"image/*\"\n                                                                            onChange={e => this.updateFile(e.target.files[0], index)}\n                                                                        />\n                                                                    </label>\n                                                                </div>\n                                                            }\n                                                        </div>\n                                                    )}\n                                                </Draggable>\n                                            </div>\n                                        );\n                                    })}\n                                    {provided.placeholder}\n                                </div>\n                            )}\n                        </Droppable>\n                    </DragDropContext > :\n                    imageGalleryList.map((item, index) => {\n                        const {\n                            name,\n                            id,\n                            src,\n                            newItem\n                        } = item || {};\n                        let imgSrc = \"\";\n                        if (newItem) {\n                            imgSrc = \"\"\n                        }\n                        else if (item.src) {\n                            imgSrc = src\n                        } else {\n                            imgSrc = URL.createObjectURL(item)\n                        }\n                        return (\n                            <div className=\"form-image-gallery__list\" key={id ? id : name + index}>\n                                <div className=\"form-image-gallery__action\">\n                                    <i\n                                        className=\"icon icon-trash\"\n                                        onClick={() => this.removeFile(index)}\n                                    />\n                                </div>\n                                {imgSrc ?\n                                    <div className=\"form-image-gallery__image\">\n                                        <img alt={`${name}-${index}`}\n                                            src={imgSrc ? imgSrc : \"\"}\n                                        />\n                                        <label className=\"image-gallery-btn-change\" htmlFor={name + index}>\n                                            <span>\n                                                {\"Change\"}\n                                            </span>\n                                            <input\n                                                id={name + index}\n                                                type=\"file\"\n                                                accept=\"image/png,image/jpeg\"\n                                                onChange={e => this.updateFile(e.target.files[0], index)}\n                                            />\n                                        </label>\n                                    </div>\n                                    :\n                                    < div className=\"form-image-gallery__image\">\n                                        <label className=\"form-image-gallery__upload btn-choose\">\n                                            <span>\n                                                {placeholder ? placeholder : \"Choose image\"}\n                                            </span>\n                                            <input\n                                                type=\"file\"\n                                                accept=\"image/*\"\n                                                onChange={e => this.updateFile(e.target.files[0], index)}\n                                            />\n                                        </label>\n                                    </div>\n                                }\n                            </div>\n                        )\n                    })\n                }\n            </React.Fragment>\n        )\n    }\n\n    renderGuidelines = (isDesktop) => {\n        return (\n            <div className={`form-image-gallery__guidelines ${isDesktop ? \"is-desktop\" : \"is-tablet\"}`}>\n                <div className=\"form-image-gallery__guidelines-text\">\n                    <div>\n                        {\"To keep the quality of our websites high, the hero banner image needs to be:\"}\n                    </div>\n                    <br />\n                    <div>\n                        {\"• At least 1920px wide\"}\n                    </div>\n                    <div>\n                        {\"• At least 1080px tall.\"}\n                    </div>\n                    <div>\n                        {\"• To avoid your image being cropped, use a ratio of 16:9\"}\n                    </div>\n                    <div>\n                        {\"• Accepted file types: JPG, PNG, SVG, WEBP, TIFF\"}\n                    </div>\n                    <div>\n                        {\"• Maximum file size: 5MB\"}\n                    </div>\n                </div>\n            </div >\n        )\n    }\n    render() {\n        const {\n            imageFiles\n        } = this.state;\n\n        const {\n            placeholder,\n            error\n        } = this.props;\n\n        return (\n            <div className={`form-group form-image-gallery\n            ${error ? \"has-error\" : \"\"} `}>\n                {this.renderGuidelines()}\n                <div className=\"form-image-gallery__content\">\n                    {imageFiles &&\n                        imageFiles.length > 0 &&\n                        this.renderGalleryList(imageFiles, placeholder)\n                    }\n                    <div className=\"form-image-gallery__button\">\n                        <Button\n                            color=\"tertiary-grey\"\n                            size=\"full\"\n                            onClick={this.handleAddUpload}\n                        >\n                            {\"Add image\"}\n                        </Button>\n                    </div>\n                    <div className=\"form__validation-message\">\n                        {error}\n                    </div>\n                </div>\n                {this.renderGuidelines(true)}\n            </div>\n        );\n    }\n}\n\nexport default FormImageGallery;\n","import React from \"react\";\nimport CharacterCount from \"../CharacterCount\";\n\nconst FormInputMultiple = props => {\n  const {\n    label = null,\n    placeholder = null,\n    required = null,\n    maxLength = null,\n    value = null,\n    error = null,\n    onInputChange = null,\n    disabled = null,\n  } = props;\n  return (\n    <div className={`form-group form__input-multiple \n    ${error ? \"has-error\" : \"\"}\n    `}>\n      {(label || required) &&\n        <label className=\"form__label\">\n          {label}\n          {required &&\n            <span className=\"form__asterisk\">*</span>\n          }\n        </label>\n      }\n      <div className=\"form__input-multiple--details\">\n        <textarea\n          value={value}\n          maxLength={maxLength}\n          placeholder={placeholder}\n          onChange={e => onInputChange(e.target.value)}\n          disabled={disabled}\n        />\n        <CharacterCount remaining={maxLength - value.length} />\n      </div>\n      <div className=\"form__validation-message\">\n        {error}\n      </div>\n    </div>\n  );\n};\n\nexport default FormInputMultiple;\n","import React from \"react\";\nimport DatePicker from \"react-datepicker\";\nimport \"react-datepicker/dist/react-datepicker.css\";\n\nconst FormDate = props => {\n  const {\n    icon,\n    error,\n    label,\n    required,\n    ...properties\n  } = props;\n\n  return (\n    <div className=\"form__date--details\">\n      {(label || required) &&\n        <label className=\"form__label\">\n          {label}\n          {required &&\n            <span className=\"form__asterisk\">*</span>\n          }\n        </label>\n      }\n      <div className={`form__date-picker--wrapper ${error ? \"error\" : \"no-error\"}`}>\n        <DatePicker className=\"form__date-picker--field\" {...properties} />\n        {icon &&\n          <i className={`icon icon-${icon}`} />\n        }\n      </div>\n      <div className=\"form__validation-message\">\n        {error}\n      </div>\n    </div>\n  );\n};\n\nexport default FormDate;\n","import React, { Component } from \"react\";\r\n\r\nclass FormListbox extends Component {\r\n  render() {\r\n    const {\r\n      label = null,\r\n      id = null,\r\n      options = null,\r\n      hint = null,\r\n      handleListbox = null,\r\n      handleSelect = null,\r\n      field = null,\r\n      selected = null,\r\n      required = null,\r\n      error = null,\r\n      disabled = null,\r\n    } = this.props;\r\n    return (\r\n      <div className={`form-group form__listbox\r\n      ${error ? \"has-error\" : \"\"}\r\n      `}>\r\n        <div className=\"form__listbox--header\">\r\n          {(label || required) &&\r\n            <label className=\"form__label\">\r\n              {label}\r\n              {required &&\r\n                <span className=\"form__asterisk\">*</span>\r\n              }\r\n            </label>\r\n          }\r\n          <div className={`form__listbox--action\r\n          ${disabled ? \"disabled\" : \"\"}\r\n          `}>\r\n            <div className=\"form__listbox--action-btn\"\r\n              onClick={() => {\r\n                if (disabled) {\r\n                  return\r\n                }\r\n                handleSelect(true, field, options)\r\n              }}\r\n            >\r\n              {\"Select all\"}\r\n            </div>\r\n            <div className=\"form__listbox--action-btn\"\r\n              onClick={() => {\r\n                if (disabled) {\r\n                  return\r\n                }\r\n                handleSelect(false, field, options)\r\n              }}\r\n            >\r\n              {\"Deselect all\"}\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div className=\"form__listbox--field\">\r\n          <select\r\n            multiple\r\n            id={id}\r\n            onChange={() => handleListbox(id, field)}\r\n            disabled={disabled}\r\n            value={selected}\r\n          >\r\n            {options.map((item, index) => {\r\n              const {\r\n                value = null,\r\n                name = null\r\n              } = item;\r\n\r\n              let optionLayout = \"\";\r\n\r\n              if (value && name) {\r\n                optionLayout =\r\n                  <option key={`list-${value}-${index}`}\r\n                    value={value}\r\n                  >\r\n                    {name}\r\n                  </option>\r\n              }\r\n              return optionLayout;\r\n            })}\r\n          </select>\r\n        </div>\r\n\r\n        <div className=\"form__validation-message\">\r\n          {error}\r\n        </div>\r\n\r\n        {hint && (\r\n          <div className=\"form__hint\">\r\n            <i className=\"icon icon-info\" />\r\n            <span>{hint}</span>\r\n          </div>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default FormListbox;\r\n","import React, { Component } from \"react\";\nimport FormCheckbox from \"../FormCheckbox\";\n\nclass FormListCheckbox extends Component {\n    render() {\n        const {\n            label = null,\n            id = null,\n            options = null,\n            handleListbox = null,\n            handleSelect = null,\n            field = null,\n            selected = null,\n            required = null,\n            error = null,\n            disabled = null,\n        } = this.props;\n        return (\n            <div className={`form-group form__listcheckbox\n                ${error ? \"has-error\" : \"\"}\n            `}>\n                <div className=\"form__listcheckbox--header\">\n                    {(label || required) &&\n                        <label className=\"form__label\">\n                            {label}\n                            {required &&\n                                <span className=\"form__asterisk\">*</span>\n                            }\n                        </label>\n                    }\n                    <div className={`form__listcheckbox--action\n                        ${disabled ? \"disabled\" : \"\"}\n                    `}>\n                        <div className=\"form__listcheckbox--action-btn\"\n                            onClick={() => {\n                                if (disabled) {\n                                    return\n                                }\n                                handleSelect(true, field, options)\n                            }}\n                        >\n                            {\"Select all\"}\n                        </div>\n                        <div className=\"form__listcheckbox--action-btn\"\n                            onClick={() => {\n                                if (disabled) {\n                                    return\n                                }\n                                handleSelect(false, field, options)\n                            }}\n                        >\n                            {\"Deselect all\"}\n                        </div>\n                    </div>\n                </div>\n                <div className=\"form__listcheckbox--field\">\n                    {options &&\n                        options.length > 0 &&\n                        <div id={id} className=\"form__listcheckbox--option\">\n                            {options.map((item, index) => {\n                                const {\n                                    name,\n                                    value\n                                } = item || {}\n\n                                return (\n                                    <FormCheckbox\n                                        key={id + index}\n                                        label={name}\n                                        value={value}\n                                        onCheckboxChange={() => handleListbox(id, field)}\n                                        plain\n                                        checked={selected.length > 0 &&\n                                            selected.indexOf(\n                                                value\n                                            ) > -1\n                                        }\n                                    />\n                                )\n                            })}\n                        </div>\n                    }\n                </div>\n\n                <div className=\"form__validation-message\">\n                    {error}\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default FormListCheckbox;\n","import React from \"react\";\n\nconst Checkbox = props => {\n  const {\n    label,\n    value,\n    checked,\n    disabled,\n    onCheckboxChange\n  } = props || {};\n  \n  return (\n    <React.Fragment>\n      <label className={`checkbox-container ${disabled ? \"\":\"\"}`}>\n        {label}\n        <input\n          value={value ? value : \"\"}\n          onChange={e => onCheckboxChange(e.target.checked)}\n          type=\"checkbox\"\n          checked={checked}\n          disabled={disabled}\n        />\n        <span className=\"checkmark\" />\n      </label>\n    </React.Fragment>\n  );\n};\n\nexport default Checkbox;\n","import React from \"react\";\n\nconst FormErrorMessage = props => {\n    const {\n        error\n    } = props;\n\n    const containsLoginError =\n        error.indexOf('User session is Ended') !== -1 ||\n        error.indexOf(\"Parameter 'retailerId' is null\") !== -1;\n\n    return (\n        <div className=\"form__error\">\n            <i className=\"icon icon-alert-triangle\" />\n            <div className=\"form__error--message\">\n                <div>\n                    {error}\n                    {containsLoginError && (\n                        <>\n                            <br />\n                            <a href=\"/\" target=\"_blank\" className=\"form__error--message-link\">Please login again</a> in the new tab, selected a retailer and submit this form again.\n                        </>\n                    )}\n                </div>\n            </div>\n        </div>\n    );\n};\nexport default FormErrorMessage;\n","import React from \"react\";\nimport { RichText } from \"@sitecore-jss/sitecore-jss-react\";\n\nclass FormImageUpload extends React.Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            file: props.value ? props.value : null,\n            preview: props.value ? props.value : null,\n            errorMessage: null,\n            hasImageUpload: false\n        };\n    }\n\n    handleFileUpload = () => {\n        this.props.handleFileUpload(this.state.file);\n    };\n\n    setFile = file => {\n        if (file && file.type.indexOf(\"image\") !== -1) {\n            this.setState(\n                {\n                    file,\n                    preview: URL.createObjectURL(file),\n                },\n                this.handleFileUpload\n            );\n\n        } else {\n            alert(\"Please select an image\");\n        }\n    };\n\n    removeFile = () => {\n        this.setState(\n            {\n                file: null,\n                preview: null\n            },\n            this.handleFileUpload\n        );\n    }\n\n    renderGuideLines = (isDesktop) => {\n        const {\n            guidelines,\n            guidelinesOne,\n            guidelinesTwo,\n            guidelinesThree,\n        } = this.props;\n\n        return (\n            <div className={`form__image-upload--guidelines ${isDesktop ? \"is-desktop\" : \"is-tablet\"}`}>\n                <div className=\"form__image-upload--guidelines-text\">\n                    <div>\n                        {guidelines}\n                    </div>\n                    {(guidelinesOne || guidelinesTwo || guidelinesThree) &&\n                        <br />\n                    }\n                    <div>\n                        {guidelinesOne}\n                    </div>\n                    <div>\n                        {guidelinesTwo}\n                    </div>\n                    <div>\n                        {guidelinesThree}\n                    </div>\n                    <div>\n                        {\"• Accepted file types: JPG, PNG, SVG, WEBP, TIFF\"}\n                    </div>\n                    <div>\n                        {\"• Maximum file size: 5MB\"}\n                    </div>\n                </div>\n            </div>\n        )\n    }\n\n    render() {\n        const {\n            preview,\n        } = this.state;\n        const {\n            required,\n            label,\n            type,\n            placeholder,\n            error,\n            removeImage = false\n        } = this.props;\n        return (\n            <div className=\"form__container\">\n                {(label || required) &&\n                    <label className=\"form__header\">\n                        {label}\n                        {required &&\n                            <span className=\"form__asterisk\">*</span>\n                        }\n                    </label>\n                }\n                <div className={`form-group form__image-upload\n                ${type ? type : \"\"}\n                ${error ? \"has-error\" : \"\"}\n                `}>\n                    {this.renderGuideLines()}\n                    <div className=\"form__image-upload--details\">\n                        {preview &&\n                            <div className=\"form__image-upload--image\">\n                                <img\n                                    src={preview ? preview : placeholder}\n                                    alt={type ? type + \"image\" : label + \" upload\"}\n                                />\n\n                                <label className={`form__image-upload--btn btn-change ${removeImage ? \"has-delete-btn\" : \"\"}`}>\n                                    {\"Change\"}\n                                    <input\n                                        type=\"file\"\n                                        accept=\"image/*\"\n                                        onChange={e => this.setFile(e.target.files[0])}\n                                    />\n                                </label>\n                                {removeImage &&\n                                    <button className=\"form__image-upload--btn btn-delete\"\n                                        onClick={() => this.removeFile()}>\n                                        <i className=\"icon icon-trash-2\" />\n                                    </button>\n                                }\n                            </div>\n                        }\n                        {!preview &&\n                            <div className=\"form__image-upload--image\">\n                                <label className=\"form__image-upload--btn btn-choose\">\n                                    <span>\n                                        {placeholder ? placeholder : \"Choose image\"}\n                                    </span>\n                                    <input\n                                        type=\"file\"\n                                        accept=\"image/*\"\n                                        onChange={e => this.setFile(e.target.files[0])}\n                                    />\n                                </label>\n                            </div>\n                        }\n                    </div>\n                    {this.renderGuideLines(true)}\n                    <div className=\"form__validation-message\">\n                        {error}\n                    </div>\n                </div>\n            </div>\n        );\n    }\n}\n\nexport default FormImageUpload;\n","const imageMimeTypes = [\r\n    'image/webp',\r\n    'image/tiff',\r\n    'image/svg+xml',\r\n    'image/jpeg',\r\n    'image/jpg',\r\n    'image/png'\r\n  ];\r\n\r\nexport const validateImageSize = (file, max = 5000000) => {\r\n    return file.size <= max;\r\n}\r\n\r\nexport const validateImageType = (file, allowedTypes = imageMimeTypes) => {\r\n    return allowedTypes.includes(file.type);\r\n}\r\n\r\n","import { get } from \"lodash\";\nimport { validateImageType, validateImageSize } from \"./ImageUploadHelper\";\n\nconst isEmpty = value => {\n  return value ? false : true;\n};\n\nconst isObject = (value) => typeof value === 'object' && value !== null;\n\n\nexport const validate = (state, removeValidate) => {\n  let list = [\n    // {\n    //   name: \"selectedStore\",\n    //   value: state.selectedStore,\n    //   rules: \"required\"\n    // },\n    {\n      name: \"articleName\",\n      value: state.articleName,\n      rules: \"required\"\n    },\n    {\n      name: \"subheading\",\n      value: state.subheading,\n      rules: \"required\"\n    },\n    {\n      name: \"publishDate\",\n      value: state.publishDate,\n      rules: \"required\"\n    },\n    {\n      name: \"body\",\n      value: state.body,\n      rules: \"required\"\n    },\n    {\n      name: \"heroImage\",\n      value: state.heroImage,\n      rules: \"required\"\n    },\n    {\n      name: \"selectedStores\",\n      value: state.selectedStores,\n      rules: \"required\"\n    },\n    {\n      name: \"selectedCategories\",\n      value: state.selectedCategories,\n      rules: \"required-array\"\n    },\n    {\n      name: \"thumbnailFileType\",\n      value: state.thumbnail,\n      rules: \"image-file-type\"\n    },\n    {\n      name: \"heroImageFileType\",\n      value: state.heroImage,\n      rules: \"image-file-type\"\n    },\n    {\n      name: \"imageGalleryFileType\",\n      value: state.imageGallery,\n      rules: \"image-gallery-file-type\"\n    },\n    {\n      name: \"thumbnailFileSize\",\n      value: state.thumbnail,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"heroImageFileSize\",\n      value: state.heroImage,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"socialFeedFileSize\",\n      value: state.socialFeedImage,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"socialStoryFileSize\",\n      value: state.socialStoryImage,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"imageGalleryFileSize\",\n      value: state.imageGallery,\n      rules: \"image-gallery-file-size\"\n    }\n  ];\n\n  let result = {};\n  list.forEach(element => {\n    if (removeValidate.indexOf(element.name) > -1) {\n      return;\n    }\n    if (element.rules === \"required\") {\n      if (isEmpty(element.value)) {\n        result[element.name] = \"Required\";\n      }\n\n      if (element.value && element.value.length && element.value.length < 1) {\n        result[element.name] = \"Required\";\n      }\n    }\n\n    if (element.rules === \"required-richtext\") {\n      if (isEmpty(element.value)) {\n        result[element.name] = \"Required\";\n      }\n\n      if (element.value && element.value.trim().length < 8) {\n        result[element.name] = \"Required\";\n      }\n    }\n\n    if (element.rules === \"required-array\") {\n      if (element.value && !element.value.length && element.value.length < 1) {\n        result[element.name] = \"Required\";\n      }\n    }\n\n    if (element.rules === 'image-file-type') {\n      if(isObject(element.value)){ \n        const imageValidity = validateImageType(element.value);\n          if (imageValidity === false) {\n            result[element.name] = \"Invalid file type\";\n          }\n      } else {}\n    }\n\n    if (element.rules === 'image-file-size') {\n      if(isObject(element.value)){ \n      const imageValidity = validateImageSize(element.value);\n        if (imageValidity === false) {\n          result[element.name] = \"Your file is too large. File upload image size limit is 5MB\";\n        }\n    }\n  }\n\n  if (element.rules === 'image-gallery-file-type') {\n    if (!isEmpty(element.value)) {\n      let invalidImages = [];\n      element.value.forEach(elem => {\n        if(isObject(elem)){\n          let imageValidity = validateImageType(elem);\n          if(imageValidity === false) {\n            invalidImages.push(elem);\n          }\n        }\n      });\n      if (invalidImages.length > 0) {\n        result[element.name] = \"Invalid file type\";\n      }\n    }\n  }\n\n  if (element.rules === 'image-gallery-file-size') {\n    if (!isEmpty(element.value)) {\n      let invalidImages = [];\n      element.value.forEach(elem => {\n        if(isObject(elem)){\n        let imageValidity = validateImageSize(elem);\n        if(imageValidity === false) {\n          invalidImages.push(elem);\n        }\n      }\n      });\n      if (invalidImages.length > 0) {\n        result[element.name] =  \"A file is too large. File upload image size limit is 5MB\";\n      }\n    }\n  }\n\n    //Other Validation Rules\n  });\n  return result;\n};\n\nexport const formDataFields = {\n  itemId: null,\n  selectedStore: null,\n  categoryTag: \"\",\n  articleName: \"\",\n  subheading: \"\",\n  body: \"\",\n  publishDate: \"\",\n  endDate: \"\",\n  hidePublishDate: false,\n  heroImage: \"\",\n  thumbnail: \"\",\n  imageGalleryChecker: [],\n  imageGallery: [],\n  selectedStores: [],\n  selectedSpecialPromotion: [],\n  selectedCategories: [],\n  itemIds: []\n};\n\nexport const setArticleData = data => {\n  return {\n    itemId: data.ItemId.value,\n    heroImage: get(data, \"HeroImage.value.src\", null),\n    thumbnail: get(data, \"Thumbnail.value.src\", null),\n    articleName: data.Title.value,\n    subheading: data.Subheading.value,\n    body: data.Body.value,\n    publishDate: data.PublishDate.value,\n    endDate: data.EndDate.value,\n    hidePublishDate: data.HidePublishDate.value,\n    categoryTag: get(data, \"CategoryTag.value\", null),\n    selectedSpecialPromotion: data.LinkedSpecialHolidays.map(\n      el => el.HolidayId.value\n    ),\n    selectedCategories: data.LinkCategories.map(\n      el => el.CategoryId.value\n    ),\n    imageGalleryChecker: data.ImageGallery.map(el => el.Id.value),\n    imageGallery: data.ImageGallery.map(el => {\n      return {\n        name: el.Name.value,\n        id: el.Id.value,\n        src: el.Src.value\n      };\n    })\n  };\n};\n\nexport const buildFormData = postData => {\n  const formData = new FormData();\n  Object.keys(postData).forEach(function (key) {\n    if (key === \"itemId\") {\n      return;\n    }\n\n    if (key === \"publishDate\" || (key === \"endDate\" && postData[key])) {\n      return formData.append(key, new Date(postData[key]).toISOString());\n    }\n\n    if (key === \"imageGalleryChecker\") {\n      if (postData[\"imageGallery\"].length > 0) {\n        return postData[\"imageGallery\"].map((item) =>\n          formData.append(key, item.id ? item.id : null)\n        );\n      }\n      return;\n    }\n\n    if (key === \"imageGallery\") {\n      if (postData[key].length > 0) {\n        let newimageGallery = postData[key].filter(item => item.size)\n        return newimageGallery.map((file) => formData.append(key, file));\n      }\n      return;\n    }\n\n    if (key === \"selectedSpecialPromotion\" && postData[key].length) {\n      return postData[key].map(promotion => formData.append(key, promotion));\n    }\n\n    if (key === \"selectedCategories\" && postData[key].length) {\n      return postData[key].map(category => formData.append(key, category));\n    }\n\n    if (key === \"heroImage\" || key === \"thumbnail\") {\n      if (typeof postData[key] !== \"string\") {\n        return formData.append(key, postData[key]);\n      }\n      return;\n    }\n\n    if (key === \"selectedStores\" && postData[key].length) {\n      return postData[key].map(storeId => formData.append(key, storeId));\n    }\n\n    if (key === \"itemIds\" && postData[key].length) {\n      return postData[key].map(itemId => formData.append(key, itemId));\n    }\n\n    return formData.append(key, postData[key]);\n  });\n\n  return formData;\n};\n","import BaseURL, { DevURL} from \"./BaseURL\";\n\nconst isDev = process.env.REACT_APP_DEV || false;\n\n\nexport const getPromotions = () => {\n  const endpoint = isDev ? \"/GetPromotions\" : \"/store/GetEvents\";\n   return BaseURL.get(endpoint);\n};\n\nexport const getCentreStores = params => {\n  const endpoint = isDev ? \"/GetCentreStores\" : \"/promotion/GetCentreStores\";\n  return BaseURL.get(endpoint, { params: { ...params } });\n\n};\n\nexport const getDashboardPromotions = () => {\n  const endpoint = isDev ? \"/GetDashboardPromotions\" : \"/promotion/GetDashboardPromotions\";\n  return BaseURL.get(endpoint);\n\n};\n\nexport const getCategoriesAndHolidays = params => {\n  const endpoint = isDev ? \"/GetCategoriesAndHolidays\" : \"/promotion/GetCategoriesAndHolidays\";\n  return BaseURL.get(endpoint, { params: { ...params } });\n\n};\n\nexport const getPromotionData = params => {\n  const endpoint = isDev ? \"/GetCentreStores\" : \"/promotion/GetPromotionData\";\n  return BaseURL.get(endpoint, { params: { ...params } });\n};\n","import React from \"react\";\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\nimport axios from \"axios\";\nimport Loadable from \"react-loadable\";\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\nimport TagManager from \"react-gtm-module\";\nimport FormImageGallery from \"../../../Base/FormImageGallery\";\nimport FormInput from \"../../../Base/FormInput\";\nimport FormInputMultiple from \"../../../Base/FormInputMultiple\";\nimport FormDate from \"../../../Base/FormDate\";\nimport FormCheckbox from \"../../../Base/FormCheckbox\";\nimport FormListbox from \"../../../Base/FormListbox\";\nimport FormListCheckbox from \"../../../Base/FormListCheckbox\";\nimport Checkbox from \"../../../Base/Checkbox\";\nimport FormErrorMessage from \"../../../Base/FormErrorMessage\";\nimport FormImageUpload from \"../../../Base/FormImageUpload\";\nimport PopupPreview from \"../../../Base/Popup/PopupPreview\";\nimport { get } from \"lodash\";\nimport {\n  validate,\n  setArticleData,\n  buildFormData,\n  formDataFields,\n} from \"../../../../helper/ArticleHelper\";\nimport {\n  getCentreStores,\n  getCategoriesAndHolidays,\n} from \"../../../../api/PromotionAPI\";\nimport { getArticleData } from \"../../../../api/ArticlesAPI\";\n\n// import getCentreStoresResponseApi from \"./jsonResponse/getCentreStoresResponseApi.json\";\n// import getCategoriesAndHolidaysApi from \"./jsonResponse/getCategoriesAndHolidaysApi.json\";\n// import getArticleDataResponse from \"./jsonResponse/getArticleDataResponse.json\";\n// import saveArticleResponse from \"./jsonResponse/saveArticleResponse.json\";\n// import saveBulkArticleResponse from \"./jsonResponse/saveBulkArticleResponse.json\";\n\nconst RichTextEditor = Loadable({\n  loader: () => import(\"../../../Base/RichTextEditor\"),\n  loading: () => null,\n});\n\nclass FormArticles extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      mode: \"new\",\n      showModal: false,\n      formError: {},\n      centreStoreList: [],\n      categories: [],\n      holidays: [],\n      formData: { ...formDataFields },\n      showImageGallery: false,\n      disableBtn: true,\n      showSaveHint: false,\n      showErrorMessage: false,\n      formErrorMessage: \"\",\n      imageGalleryHolder: [],\n      articlePreviewUrl: \"\",\n      articlePreviewTitle: \"\",\n      articleList: [],\n      getArticleDataReady: false,\n      previewBulkLogo: \"\",\n      articleIdList: [],\n      retailerId: null\n    };\n  }\n\n  componentDidMount() {\n    const { itemId } = this.props;\n    if (itemId) {\n      this.getData(itemId);\n    } else {\n      this.getCentreStoreList();\n    }\n    this.getCategoriesAndHolidays();\n    this.handleFormData();\n  }\n\n  getData = async (itemId) => {\n    try {\n      let response = await getArticleData({ itemId });\n      if (response.status === 200 && response.data) {\n        let articleData = setArticleData(response.data.Article);\n\n        this.setState({\n          mode: \"edit\",\n          getArticleDataReady: true,\n          formData: { ...this.state.formData, ...articleData },\n          showImageGallery:\n            articleData.imageGallery && articleData.imageGallery.length > 0\n              ? true\n              : false,\n        });\n      }\n    } catch (e) {\n      console.error(\"Get Article Data Error: \" + e.response.statusText);\n      this.setState({\n        getArticleDataReady: true,\n      });\n      // if (itemId) {\n      //     let articleData = setArticleData(getArticleDataResponse.Article);\n\n      //     this.setState({\n      //         mode: \"edit\",\n      //         getArticleDataReady: true,\n      //         formData: { ...this.state.formData, ...articleData },\n      //         showImageGallery: (articleData.imageGallery && articleData.imageGallery.length > 0) ? true : false\n      //     });\n      // }\n    }\n  };\n\n  getCategoriesAndHolidays = async () => {\n    try {\n      let response = await getCategoriesAndHolidays();\n      if (response.status === 200 && response.data) {\n        let categoryListData = response.data.Categories;\n        let holidayListData = response.data.GlobalSpecialHoliday;\n        let categoryList = [];\n        let holidayList = [];\n        if (categoryListData.length > 0) {\n          categoryListData.forEach((el) =>\n            categoryList.push({\n              name: el.CategoryName.value,\n              value: el.CategoryId.value,\n            })\n          );\n        }\n        if (holidayListData.length > 0) {\n          holidayListData.forEach((el) =>\n            holidayList.push({\n              name: el.HolidayName.value,\n              value: el.HolidayId.value,\n            })\n          );\n        }\n        this.setState({\n          categories: categoryList,\n          holidays: holidayList,\n        });\n      }\n    } catch (e) {\n      console.error(\n        \"Get Categories And Holidays Error: \" + e.response.statusText\n      );\n      // let categoryListData = getCategoriesAndHolidaysApi.Categories;\n      // let holidayListData = getCategoriesAndHolidaysApi.GlobalSpecialHoliday;\n      // let categoryList = [];\n      // let holidayList = [];\n      // if (categoryListData.length > 0) {\n      //     categoryListData.forEach((el) =>\n      //         categoryList.push({\n      //             name: el.CategoryName.value,\n      //             value: el.CategoryId.value,\n      //         })\n      //     );\n      // }\n      // if (holidayListData.length > 0) {\n      //     holidayListData.forEach((el) =>\n      //         holidayList.push({\n      //             name: el.HolidayName.value,\n      //             value: el.HolidayId.value,\n      //         })\n      //     );\n      // }\n      // this.setState({\n      //     categories: categoryList,\n      //     holidays: holidayList,\n      // });\n    }\n  };\n\n  getCentreStoreList = async () => {\n    try {\n      let response = await getCentreStores();\n      if (response.status === 200 && response.data) {\n        if (response.data.IsSuccess.value) {\n          this.setState({\n            centreStoreList: get(response.data, \"CentreStoreList\", []),\n            retailerId: get(response.data, \"Retailer.RetailerId.value\", \"\"),\n            getArticleDataReady: true,\n          });\n        }\n      }\n    } catch (e) {\n      console.error(\"Get centre stores data error: \" + e.response.statusText);\n      this.setState({\n        getArticleDataReady: true,\n      });\n      // this.setState({\n      //   centreStoreList: get(getCentreStoresResponseApi, \"CentreStoreList\", []),\n      //   retailerId: get(getCentreStoresResponseApi, \"Retailer.RetailerId.value\", \"\"),\n      //   getArticleDataReady: true,\n      // });\n    }\n  };\n\n  handleListbox = (id, field, isCheckbox) => {\n    const { formData } = this.state;\n    let options;\n    let selected = [];\n    if (document) {\n      if (isCheckbox) {\n        options = document.querySelectorAll(`#${id} input:checked`);\n      } else {\n        options = document.querySelectorAll(`#${id} option:checked`);\n      }\n      if (options) {\n        for (let i = 0; i < options.length; i++) {\n          selected.push(options[i].value);\n        }\n      }\n    }\n    this.setState({\n      formData: {\n        ...formData,\n        [field]: selected,\n      },\n    });\n  };\n\n  handleSelect = (isSelect, field, options) => {\n    const { formData } = this.state;\n    this.setState({\n      formData: {\n        ...formData,\n        [field]: isSelect ? options.map((el) => el.value) : [],\n      },\n    });\n  };\n\n  handleStoreListCheckbox = (value, selectAllStores) => {\n    const { formData, centreStoreList } = this.state;\n\n    if (value === \"0\") {\n      let allStores = [];\n      centreStoreList.map((centre) => {\n        centre.StoreList.map((store) => {\n          allStores.push(store.StoreItemId.value);\n        });\n      });\n\n      this.setState({\n        formData: {\n          ...formData,\n          selectedStores: selectAllStores ? allStores : [],\n        },\n      });\n    } else if (formData.selectedStores.indexOf(value) > -1) {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedStores: formData.selectedStores.filter((el) => el !== value),\n        },\n      });\n    } else {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedStores: [...formData.selectedStores, value],\n        },\n      });\n    }\n  };\n\n  handleFormUpdate = (value) => {\n    this.setState({\n      formData: {\n        ...this.state.formData,\n        ...value,\n      },\n    });\n  };\n\n  validateForm = async () => {\n    let formError = validate(\n      this.state.formData,\n      this.state.mode === \"edit\" ? [\"selectedRetailer\"] : []\n    );\n    let response;\n    if (Object.entries(formError).length !== 0) {\n      this.setState({\n        formError,\n        showErrorMessage: true,\n        formErrorMessage: \"Please fill out all mandatory fields marked below\",\n      });\n      this.triggerBackToTop();\n      response = {\n        isSuccess: false,\n      };\n    } else {\n      this.setState({\n        formError,\n      });\n      response = await this.saveForm().then((result) => {\n        if (result.isSuccess) {\n          return { isSuccess: true };\n        }\n      });\n    }\n    return response;\n  };\n\n  saveForm = async () => {\n    const { formData, mode, articleIdList } = this.state;\n    var timezoneId = new Date().getTimezoneOffset();\n    const url = \"/api/sitecore/article/SaveArticle\";\n    let data = buildFormData({\n      ...formData,\n      timeZoneId: timezoneId,\n    });\n\n    this.setState(\n      {\n        showSaveHint: true,\n        disableBtn: true,\n      },\n      this.handleFormData\n    );\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        params: {\n          ...(mode === \"edit\"\n            ? { itemId: formData.itemId }\n            : { itemId: articleIdList.toString() }),\n        },\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n      });\n\n      if (response) {\n        if (response.data.IsSuccess.value && mode === \"new\") {\n          const articleList = response.data.ArticleList;\n          const articlesItem = articleList[0].Articles;\n          const itemIds = this.extractItemIds(articleList);\n          let previewBulkLogo;\n\n          this.setGoogleAnalytics(articleList);\n\n          if (response.data.RetailerLogo && response.data.RetailerLogo.value) {\n            previewBulkLogo = response.data.RetailerLogo.value;\n          }\n\n          if (articleList.length === 1 && articlesItem.length === 1) {\n            this.setState(\n              {\n                formData: {\n                  ...formData,\n                  itemIds,\n                },\n                showSaveHint: false,\n                disableBtn: false,\n                showErrorMessage: false,\n                articlePreviewUrl: articlesItem[0].PreviewUrl.value,\n                // articlePreviewTitle: articlesItem[0].Store.value,\n                articlePreviewTitle: formData.articleName,\n                articleList: articleList,\n                previewBulkLogo: \"\",\n                articleIdList: this.setArticleIdList(articleList),\n              },\n              this.handleFormData\n            );\n          } else {\n            this.setState(\n              {\n                formData: {\n                  ...formData,\n                  itemIds,\n                },\n                showSaveHint: false,\n                disableBtn: false,\n                showErrorMessage: false,\n                articlePreviewUrl: \"\",\n                articlePreviewTitle: \"\",\n                articleList: articleList,\n                previewBulkLogo,\n                articleIdList: this.setArticleIdList(articleList),\n              },\n              this.handleFormData\n            );\n          }\n\n          return {\n            isSuccess: true,\n          };\n        } else if (response.data.IsSuccess.value && mode === \"edit\") {\n          const articleList = response.data.ArticleList[0];\n          const article = articleList.Articles[0];\n          const articlePreviewUrl = article.PreviewUrl.value;\n          const articlePreviewTitle =\n            article.Store.value + \" \" + articleList.Centre.value;\n          this.setState(\n            {\n              formData: {\n                ...formData,\n                itemIds: [`${article.ItemId.value}`],\n              },\n              showErrorMessage: false,\n              showSaveHint: false,\n              disableBtn: false,\n              articlePreviewUrl,\n              articlePreviewTitle: formData.articleName,\n            },\n            this.handleFormData\n          );\n\n          return {\n            isSuccess: true,\n          };\n        } else {\n          this.setState(\n            {\n              showSaveHint: false,\n              disableBtn: true,\n              showErrorMessage: true,\n              formErrorMessage:\n                \"Article Not Saved \" + response.data.Message.value,\n            },\n            this.handleFormData\n          );\n\n          this.triggerBackToTop();\n          return {\n            isSuccess: false,\n          };\n        }\n      }\n    } catch (e) {\n      console.error(\"Article Save Error: \" + e.response.statusText);\n      this.setState({\n        showErrorMessage: true,\n        formErrorMessage: \"Article Save Error: \" + e.response.statusText,\n      });\n      this.triggerBackToTop();\n      return {\n        isSuccess: false,\n      };\n\n      // Condition on mode === new\n      // const articleList = saveBulkArticleResponse.ArticleList;\n      // const articlesItem = articleList[0].Articles;\n      // const itemIds = this.extractItemIds(articleList);\n      // let previewBulkLogo;\n\n      // if (saveBulkArticleResponse.RetailerLogo && saveBulkArticleResponse.RetailerLogo.value) {\n      //     previewBulkLogo = saveBulkArticleResponse.RetailerLogo.value;\n      // }\n      // this.setState({\n      //     formData: {\n      //         ...formData,\n      //         itemIds\n      //     },\n      //     showSaveHint: false,\n      //     disableBtn: false,\n      // },\n      //     this.handleFormData\n      // );\n\n      // if (articleList.length === 1 && articlesItem.length === 1) {\n      //     this.setState({\n      //         formData: {\n      //             ...formData,\n      //             itemIds\n      //         },\n      //         showSaveHint: false,\n      //         disableBtn: false,\n      //         showErrorMessage: false,\n      //         articlePreviewUrl: articlesItem[0].PreviewUrl.value,\n      //         articlePreviewTitle: formData.articleName,\n      //         articleList: articleList,\n      //         previewBulkLogo: \"\",\n      //         articleIdList: this.setArticleIdList(articleList)\n      //     },\n      //         this.handleFormData\n      //     );\n      // } else {\n      //     this.setState({\n      //         formData: {\n      //             ...formData,\n      //             itemIds\n      //         },\n      //         showSaveHint: false,\n      //         disableBtn: false,\n      //         showErrorMessage: false,\n      //         articlePreviewUrl: \"\",\n      //         articlePreviewTitle: \"\",\n      //         articleList: articleList,\n      //         previewBulkLogo,\n      //         articleIdList: this.setArticleIdList(articleList)\n      //     },\n      //         this.handleFormData\n      //     );\n      // }\n\n      // return {\n      //     isSuccess: true\n      // };\n    }\n  };\n\n  submitForm = async () => {\n    const {\n      formData,\n      mode,\n      articlePreviewUrl,\n      articlePreviewTitle,\n    } = this.state;\n    const url = \"/api/sitecore/article/SubmitArticle\";\n    let data = buildFormData({\n      itemIds: mode === \"edit\" ? [`${formData.itemId}`] : formData.itemIds,\n    });\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n      });\n\n      if (response) {\n        if (response.data.IsSuccess.value) {\n          this.setState({\n            showErrorMessage: false,\n          });\n          return {\n            isSuccess: true,\n            articlePreviewUrl: mode === \"edit\" ? articlePreviewUrl : \"\",\n            articlePreviewTitle: mode === \"edit\" ? articlePreviewTitle : \"\",\n          };\n        } else {\n          this.setState({\n            showErrorMessage: true,\n            formErrorMessage:\n              \"Article Not Submitted \" + response.data.Message.value,\n          });\n          return {\n            isSuccess: false,\n          };\n        }\n      }\n    } catch (e) {\n      console.error(\"Article Submit Error: \" + e.response.statusText);\n      this.setState({\n        showErrorMessage: true,\n        formErrorMessage: \"Article Submit Error: \" + e.response.statusText,\n      });\n      this.triggerBackToTop();\n      return {\n        isSuccess: false,\n      };\n\n      // return {\n      //     isSuccess: true,\n      //     articlePreviewUrl: mode === \"edit\" ? articlePreviewUrl : \"\",\n      //     articlePreviewTitle: mode === \"edit\" ? articlePreviewTitle : \"\",\n      // };\n    }\n  };\n\n  triggerBackToTop = () => {\n    let backToTop;\n    if (document) {\n      backToTop = document.querySelector(\".form__modal--back-to-top-button\");\n      if (backToTop) {\n        backToTop.click();\n      }\n    }\n  };\n\n  setGoogleAnalytics = (articleList) => {\n    articleList.map((item) => {\n      const { Centre, Articles } = item;\n      Articles.map((article) => {\n        console.log(Centre.value, article.Store.value);\n        TagManager.dataLayer({\n          dataLayer: {\n            event: \"createdArticles\",\n            articleCentre: Centre && Centre.value,\n            articleRetailer: article && article.Store && article.Store.value,\n          },\n          dataLayerName: \"dataLayer\",\n        });\n      });\n    });\n  };\n\n  setArticleIdList = (articleList) => {\n    let articleIdList = [];\n\n    if (articleList.length > 0) {\n      articleList.map((item) => {\n        const { Articles } = item;\n\n        if (Articles.length > 0) {\n          Articles.map((item) => {\n            const { ItemId } = item;\n\n            if (ItemId && ItemId.value) {\n              articleIdList.push(ItemId.value);\n            }\n          });\n        }\n      });\n    }\n\n    return articleIdList;\n  };\n\n  extractItemIds = (centreList) => {\n    let itemIds = [];\n    centreList.map((center) => {\n      center.Articles.map((article) => {\n        itemIds.push(article.ItemId.value);\n      });\n    });\n    return itemIds;\n  };\n\n  handlePreviewForm = () => {\n    this.setState({\n      showModal: true,\n    });\n  };\n\n  renderModal = () => {\n    const { articleList, showModal, previewBulkLogo } = this.state;\n\n    const { articleName } = this.state.formData || {};\n    return (\n      <div className=\"article-modal\">\n        {articleList && articleList.length > 0 && (\n          <PopupPreview\n            previewTitle={\"Preview\"}\n            previewLogo={previewBulkLogo}\n            previewList={articleList}\n            previewListChildName=\"Articles\"\n            previewFormLabel={articleName}\n            btnLabel={\"Submit\"}\n            btnOnClick={() => {\n              let submitBtn = document.querySelector(\".article-submit-btn\");\n              if (submitBtn) {\n                submitBtn.click();\n              }\n            }}\n            showPreviewModal={() => this.setState({ showModal: false })}\n          />\n        )}\n      </div>\n    );\n  };\n\n  handleFormData = () => {\n    const {\n      showSaveHint,\n      disableBtn,\n      articlePreviewUrl,\n      articlePreviewTitle,\n    } = this.state;\n    this.props.handleFormData(\n      showSaveHint,\n      disableBtn,\n      articlePreviewUrl,\n      articlePreviewTitle,\n      this.validateForm,\n      this.handlePreviewForm,\n      this.submitForm\n    );\n  };\n\n  buildCentreStoreList = (centreStoreList) => {\n    const { type, formData } = this.state;\n\n    return (\n      <div className=\"form__multiple-stores\">\n        <div className=\"form__multiple-stores--header\">\n          <label className=\"form__label\">\n            {`Publish this article for the multiple centres`}\n          </label>\n          <div className=\"form__multiple-stores--action\">\n            <div\n              className=\"form__multiple-stores--action-btn\"\n              onClick={() => this.handleStoreListCheckbox(\"0\", true)}\n            >\n              {\"Select all\"}\n            </div>\n            <div\n              className=\"form__multiple-stores--action-btn\"\n              onClick={() => this.handleStoreListCheckbox(\"0\", false)}\n            >\n              {\"Deselect all\"}\n            </div>\n          </div>\n        </div>\n        <div className=\"form__multiple-stores--content\">\n          {centreStoreList.map((centre, index) => {\n            const { CentreName, CentreIcon, StoreList } = centre;\n            return (\n              <div key={`centreStoreList-container-${index}`} className=\"row\">\n                <div className=\"col col-12 col-md-6\">\n                  <div className=\"form__multiple-stores--logo\">\n                    {CentreIcon && CentreIcon.value ? (\n                      <img\n                        alt={`CentreIcon-${index}`}\n                        src={logoPlaceholder}\n                        data-src={CentreIcon.value}\n                        className=\"lazyload\"\n                      />\n                    ) : (\n                      <div className=\"no-image\" />\n                    )}\n                  </div>\n                  <div className=\"form__multiple-stores--label\">\n                    {CentreName.value}\n                  </div>\n                </div>\n                <div className=\"col col-12 col-md-6\">\n                  {StoreList.map((store, index) => {\n                    const { StoreItemId, StoreName } = store;\n                    return (\n                      <FormCheckbox\n                        key={`store-${StoreItemId.value}-${index}`}\n                        value={StoreItemId.value}\n                        label={StoreName.value}\n                        checked={\n                          formData.selectedStores.indexOf(StoreItemId.value) >\n                          -1\n                        }\n                        onCheckboxChange={(value) =>\n                          this.handleStoreListCheckbox(value)\n                        }\n                        plain\n                      />\n                    );\n                  })}\n                </div>\n              </div>\n            );\n          })}\n        </div>\n      </div>\n    );\n  };\n\n  render() {\n    const {\n      itemId = null\n    } = this.props\n    const {\n      formError,\n      formData,\n      categories,\n      showModal,\n      centreStoreList,\n      holidays,\n      showImageGallery,\n      showErrorMessage,\n      formErrorMessage,\n      imageGalleryHolder,\n      getArticleDataReady,\n      articleIdList,\n      retailerId\n    } = this.state;\n    return (\n      <div className=\"article-form\">\n        {showModal && this.renderModal()}\n        {showErrorMessage && <FormErrorMessage error={formErrorMessage} />}\n        <div className=\"form__container\">\n          <FormInput\n            title\n            type=\"text\"\n            placeholder={`Article title`}\n            label=\"Article Name\"\n            value={formData.articleName}\n            required\n            error={formError.articleName}\n            onInputChange={(articleName) =>\n              this.handleFormUpdate({ articleName })\n            }\n          />\n        </div>\n        <div className=\"form__container\">\n          <label className=\"form__header\">{`Article duration`}</label>\n          <div\n            className={`form-group form__date--container\n                        ${formError.publishDate || formError.endDate\n                ? \"has-error\"\n                : \"\"\n              }\n                    `}\n          >\n            <div className=\"form__date--wrapper\">\n              <div className=\"form__date--duration--wrapper\">\n                <FormDate\n                  required\n                  label=\"Publish from\"\n                  icon=\"calendar\"\n                  placeholderText=\"MM/DD/YYYY\"\n                  showTimeSelect\n                  timeCaption=\"Time\"\n                  timeFormat=\"HH:mm\"\n                  timeIntervals={5}\n                  dateFormat=\"d MMM yyyy - h:mmaa\"\n                  value={formData.publishDate && new Date(formData.publishDate)}\n                  error={formError.publishDate}\n                  selected={\n                    formData.publishDate && new Date(formData.publishDate)\n                  }\n                  onChange={(publishDate) =>\n                    this.handleFormUpdate({ publishDate })\n                  }\n                />\n                <div className=\"form__date--divider\" />\n                <FormDate\n                  label=\"Publish until\"\n                  icon=\"calendar\"\n                  placeholderText=\"MM/DD/YYYY\"\n                  showTimeSelect\n                  timeCaption=\"Time\"\n                  timeFormat=\"HH:mm\"\n                  timeIntervals={5}\n                  dateFormat=\"d MMM yyyy - h:mmaa\"\n                  value={formData.endDate && new Date(formData.endDate)}\n                  selected={formData.endDate && new Date(formData.endDate)}\n                  onChange={(endDate) => this.handleFormUpdate({ endDate })}\n                />\n              </div>\n              <Checkbox\n                checked={formData.hidePublishDate}\n                label={\"Hide publish date\"}\n                onCheckboxChange={(hidePublishDate) => {\n                  // console.log(hidePublishDate)\n                  // console.log(formData)\n                  this.handleFormUpdate({ hidePublishDate })\n\n                }}\n              />\n            </div>\n          </div>\n        </div>\n\n        <div className=\"form__container\">\n          <label className=\"form__header\">{`Article description`}</label>\n          <FormInputMultiple\n            label=\"Sub title\"\n            placeholder=\"Provide a short description\"\n            required\n            value={formData.subheading}\n            maxLength={120}\n            error={formError.subheading}\n            onInputChange={(subheading) =>\n              this.handleFormUpdate({ subheading })\n            }\n          />\n          {getArticleDataReady && (\n            <RichTextEditor\n              required\n              width=\"max\"\n              label={\"Description\"}\n              placeholder=\"Provide a description\"\n              initialValue={formData.body}\n              error={formError.body}\n              onInputChange={(body) => this.handleFormUpdate({ body })}\n              retailerId={retailerId}\n              itemId={itemId}\n              promotionType={\"Article\"}\n            />\n          )}\n        </div>\n\n        {((categories && categories.length > 0) ||\n          (holidays && holidays.length > 0)) && (\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Meta information\"}</label>\n              {categories && categories.length > 0 && (\n                <div>\n                  <div className=\"is-desktop\">\n                    <FormListbox\n                      label=\"Category\"\n                      id=\"LB_Cat_Desktop\"\n                      required\n                      error={formError.selectedCategories}\n                      options={categories}\n                      field=\"selectedCategories\"\n                      selected={formData.selectedCategories}\n                      hint=\"Press [ctrl] + click to select multiple\"\n                      handleListbox={(id, field) => this.handleListbox(id, field)}\n                      handleSelect={(isSelect, field, options) =>\n                        this.handleSelect(isSelect, field, options)\n                      }\n                    />\n                  </div>\n                  <div className=\"is-tablet\">\n                    <FormListCheckbox\n                      label=\"Category\"\n                      id=\"LB_Cat_Mobile\"\n                      required\n                      error={formError.selectedCategories}\n                      options={categories}\n                      field=\"selectedCategories\"\n                      selected={formData.selectedCategories}\n                      handleListbox={(id, field) => this.handleListbox(id, field, true)}\n                      handleSelect={(isSelect, field, options) =>\n                        this.handleSelect(isSelect, field, options)\n                      }\n                    />\n                  </div>\n                </div>\n\n              )}\n              {holidays && holidays.length > 0 && (\n                <div>\n                  <div className=\"is-desktop\">\n                    <FormListbox\n                      label=\"Special promotions\"\n                      id=\"LB_SH_Desktop\"\n                      options={holidays}\n                      field=\"selectedSpecialPromotion\"\n                      selected={formData.selectedSpecialPromotion}\n                      hint=\"Press [ctrl] + click to select multiple\"\n                      handleListbox={(id, field) => this.handleListbox(id, field)}\n                      handleSelect={(isSelect, field) =>\n                        this.handleSelect(isSelect, field, holidays)\n                      }\n                    />\n                  </div>\n                  <div className=\"is-tablet\">\n                    <FormListCheckbox\n                      label=\"Special promotions\"\n                      id=\"LB_SH_Mobile\"\n                      options={holidays}\n                      field=\"selectedSpecialPromotion\"\n                      selected={formData.selectedSpecialPromotion}\n                      handleListbox={(id, field) => this.handleListbox(id, field, true)}\n                      handleSelect={(isSelect, field, options) =>\n                        this.handleSelect(isSelect, field, options)\n                      }\n                    />\n                  </div>\n                </div>\n              )}\n            </div>\n          )}\n\n        <div className={`form__container\" ${formError.heroImage || formError.thumbnail || formError.heroImageFileType || formError.thumbnailFileType\n          ? \"has-error\"\n          : \"\"\n          }`}>\n          {getArticleDataReady && (\n            <FormImageUpload\n              required\n              type=\"hero\"\n              label={\"Hero image\"}\n              guidelines={\n                \"To keep the quality of our websites high, the hero banner image needs to be:\"\n              }\n              guidelinesOne={\"• At least 1920px wide\"}\n              guidelinesTwo={\"• At least 1080px tall.\"}\n              guidelinesThree={\n                \"• To avoid your image being cropped, use a ratio of 16:9\"\n              }\n              error={formError.heroImage || formError.heroImageFileType || formError.heroImageFileSize}\n              value={formData.heroImage}\n              handleFileUpload={(heroImage) =>\n                this.handleFormUpdate({ heroImage })\n              }\n            />\n          )}\n        </div>\n\n        <div className=\"form__container\">\n          {getArticleDataReady && (\n            <FormImageUpload\n              label={\"Thumbnail image\"}\n              guidelines={\"The hero thumbnail image needs to be:\"}\n              guidelinesOne={\"• At least 800px wide\"}\n              guidelinesTwo={\"• At least 800px tall.\"}\n              guidelinesThree={\n                \"• To avoid your image being cropped, use a ratio of 1:1\"\n              }\n              error={formError.thumbnail || formError.thumbnailFileType || formError.thumbnailFileSize}\n              value={formData.thumbnail}\n              handleFileUpload={(thumbnail) =>\n                this.handleFormUpdate({ thumbnail })\n              }\n            />\n          )}\n        </div>\n\n        <div className=\"form__container\">\n          <label className=\"form__header\">{\"Image gallery\"}</label>\n          <Checkbox\n            checked={showImageGallery}\n            label={\"Display an additional image gallery?\"}\n            onCheckboxChange={(showImageGallery) => {\n              this.setState({\n                showImageGallery,\n              });\n              if (showImageGallery) {\n                this.handleFormUpdate({ imageGallery: imageGalleryHolder });\n              } else {\n                this.handleFormUpdate({ imageGallery: [] });\n              }\n            }}\n          />\n          {showImageGallery && (\n            <FormImageGallery\n              value={formData.imageGallery}\n              error={formError.imageGalleryFileType || formError.imageGalleryFileSize}\n              handleAttachments={(imageGallery) => {\n                this.setState({\n                  imageGalleryHolder: imageGallery,\n                });\n                this.handleFormUpdate({ imageGallery });\n              }}\n            />\n          )}\n        </div>\n\n        {centreStoreList && centreStoreList.length > 0 && (\n          <div\n            className={`form__container ${articleIdList.length > 0 ? \"is-hidden\" : \"\"\n              }`}\n          >\n            <label className=\"form__header\">{`Article visibility`}</label>\n            {this.buildCentreStoreList(centreStoreList)}\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n\nexport default FormArticles;\n","export const removeActiveState = () => {\n    let activeItem = document.querySelector(\".js-list-item.active\");\n    if (activeItem) {\n      activeItem.classList.remove(\"active\");\n    }\n}","import React from 'react';\nimport Select from \"react-select\";\nimport RadioButton from \"../../../Base/RadioButton\";\nimport FormModal from \"../../../Base/FormModal\";\nimport Popup from \"../../../Base/Popup\";\nimport PopupAction from \"../../../Base/Popup/PopupAction\";\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\nimport Articles from \"../../../Modules/Articles\";\nimport {\n  deleteArticle,\n} from \"../../../../api/ArticlesAPI\";\nimport CustomFilter from '../../../Base/CustomFilter';\nimport CustomIframe from '../../../Base/CustomIframe';\nimport FormArticles from \"../../../Modules/Forms/FormArticles\";\nimport { addClassLazyload } from \"../../../../helper/AddClassLazyloadHelper\";\nimport { scrollToTop } from \"../../../../helper/ScrollHelper\";\nimport { removeActiveState } from \"../../../../helper/RemoveActiveState\";\nimport { hideBackToTop } from \"../../../../helper/HideBackToTopHelper\";\n\nclass FeatureRetailerPortalArticleListing extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isDocumentReady: false,\n      isWindowReady: false,\n      content: null,\n      articles: null,\n      showPreviewModal: false,\n      showFormModal: false,\n      showDeleteModal: false,\n      previewModalData: null,\n      formModalData: null,\n      deleteModalData: null,\n      showFilter: false,\n      statusOption: [\n        {\n          Id: {\n            value: \"allStatus\"\n          },\n          Name: {\n            value: \"All\"\n          }\n        },\n        {\n          Id: {\n            value: \"DraftPromotions\"\n          },\n          Name: {\n            value: \"Draft\"\n          }\n        },\n        {\n          Id: {\n            value: \"LivePromotions\"\n          },\n          Name: {\n            value: \"Live\"\n          }\n        },\n        {\n          Id: {\n            value: \"AwaitingApprovalPromotions\"\n          },\n          Name: {\n            value: \"Awaiting approval\"\n          }\n        },\n        {\n          Id: {\n            value: \"ScheduledPromotions\"\n          },\n          Name: {\n            value: \"Scheduled\"\n          }\n        },\n        {\n          Id: {\n            value: \"RejectedPromotions\"\n          },\n          Name: {\n            value: \"Rejected\"\n          }\n        }\n      ],\n      filterCentre: null,\n      filterStatus: \"allStatus\",\n      disableCancelBtn: false,\n      disableDeleteBtn: false,\n      articleList: [],\n      articlePreviewUrlHolder: \"\",\n      articlePreviewTitleHolder: \"\",\n      isDashboardUpdate: false,\n      isMobile: false,\n      dataCount: 0,\n      centreListOption: [],\n      filterByCentre: \"allCentre\"\n    };\n  }\n\n  componentDidMount() {\n    if (document) {\n      this.setState({\n        isDocumentReady: true,\n        content: \"articles\"\n      },\n        () => {\n          this.handleResize()\n          this.updateCentreOption()\n        }\n      );\n\n    }\n\n    if (window) {\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n  }\n\n  handleResize = () => {\n    if (window.outerWidth >= 992) {\n      this.setState({\n        isMobile: false\n      })\n    } else {\n      this.setState({\n        isMobile: true\n      })\n    }\n  }\n\n  updateCentreOption = () => {\n    const {\n      CentreList,\n    } = this.props.fields || {};\n\n    let centreListOption = [\n      {\n        value: \"allCentre\",\n        label: \"All centres\"\n      }\n    ]\n    if (CentreList && CentreList.length > 0) {\n      CentreList.map((item, index) => {\n        const {\n          Name\n        } = item.fields\n        centreListOption.push({ value: Name.value, label: Name.value });\n      })\n    }\n\n    this.setState({ centreListOption });\n  }\n\n  renderPreviewModal = () => {\n    const {\n      title,\n      url\n    } = this.state.previewModalData || {};\n\n    const {\n      previewUrl,\n      previewTitle,\n    } = this.state.formModalData || {}\n\n    const {\n      showFormModal,\n      showPreviewModal\n    } = this.state;\n\n    hideBackToTop(showPreviewModal || showFormModal);\n\n    return (\n      <FormModal\n        isPreview\n        showModal={showPreviewModal}\n        label={previewTitle ? previewTitle : title ? title : \"\"}\n        closeOnClick={() => this.setState({ showPreviewModal: false })}\n      >\n        {showPreviewModal &&\n          <CustomIframe\n            title={previewTitle ? previewTitle : title ? title : \"\"}\n            src={previewUrl ? previewUrl : url ? url : \"\"}\n          />\n        }\n      </FormModal>\n    );\n  }\n\n  renderFormModal = () => {\n    const {\n      title,\n      content,\n      itemId,\n      previewUrl,\n      showSaveHint,\n      disableBtn,\n      onClickSave,\n      onClickPreview,\n      onClickSubmit,\n      isNewArticle,\n    } = this.state.formModalData || {}\n\n    const {\n      showFormModal,\n      isDashboardUpdate,\n      isMobile,\n      showPreviewModal\n    } = this.state;\n\n    const {\n      updateDashboard\n    } = this.props\n\n    if (!showFormModal && isDashboardUpdate && updateDashboard) {\n      this.setState({\n        isDashboardUpdate: false\n      },\n        () => updateDashboard(true))\n    }\n\n    hideBackToTop(showPreviewModal || showFormModal);\n\n    return (\n      <FormModal\n        showModal={showFormModal}\n        label={title}\n        closeOnClick={() => this.setState({ showFormModal: false })}\n        closeClassName={\"article-close-btn\"}\n        showSaveHint={showSaveHint}\n        saveBtn={\"Save draft\"}\n        saveBtnOnClick={() => this.updateArticle(onClickSave)}\n        secondaryBtn={`Preview${isNewArticle && !isMobile ? \"…\" : \"\"}`}\n        secondaryBtnOnClick={() => {\n          if (previewUrl) {\n            this.setState({\n              showPreviewModal: true,\n            })\n          } else {\n            onClickPreview();\n          }\n        }\n        }\n        disabledSecondaryBtn={disableBtn}\n        primaryBtn={\"Submit\"}\n        primaryBtnClassName={\"article-submit-btn\"}\n        primaryBtnOnClick={() => this.updateArticle(onClickSubmit, true)}\n        disabledPrimaryBtn={disableBtn}\n      >\n        {showFormModal &&\n          <FormArticles\n            itemId={itemId}\n            handleFormData={(showSaveHint, disableBtn, previewUrl, previewTitle, onClickSave, onClickPreview, onClickSubmit) => {\n              this.handleFormUpdate(\n                showSaveHint,\n                disableBtn,\n                previewUrl,\n                previewTitle,\n                onClickSave,\n                onClickPreview,\n                onClickSubmit,\n              );\n            }}\n          />\n        }\n      </FormModal>\n    );\n  }\n\n  handleFormUpdate = (showSaveHint, disableBtn, previewUrl, previewTitle, onClickSave, onClickPreview, onClickSubmit) => {\n    this.setState({\n      formModalData: {\n        ...this.state.formModalData,\n        showSaveHint,\n        disableBtn,\n        onClickSave,\n        onClickPreview,\n        onClickSubmit,\n        previewUrl,\n        previewTitle\n      }\n    })\n  }\n\n  updateArticle = (onClickUpdate, isSubmit) => {\n    if (isSubmit) {\n      onClickUpdate().then((result) => {\n        if (result && result.isSuccess) {\n          let articlePreviewUrl = \"\",\n            articlePreviewTitle = \"\";\n\n          if (result.articlePreviewUrl) {\n            articlePreviewUrl = result.articlePreviewUrl\n          }\n          if (result.articlePreviewTitle) {\n            articlePreviewTitle = result.articlePreviewTitle\n          }\n          let filterAllStatus = document.getElementById(\"allStatus\");\n          let filterAllCentreRadio = document.getElementById(\"allCentre\");\n          let filterAllCentreDropdown = document.querySelector(\".is-filter-centre .form__select--field\");\n          if (filterAllStatus) {\n            filterAllStatus.click()\n          }\n          if (filterAllCentreRadio) {\n            filterAllCentreRadio.click()\n          } else if (filterAllCentreDropdown) {\n            filterAllCentreDropdown.selectedIndex = 0;\n          }\n\n          this.setState({\n            formModalData: {\n              ...this.state.formModalData,\n              successMessage: \"Article successfully updated.\",\n              previewUrl: articlePreviewUrl,\n              previewTitle: articlePreviewTitle,\n            },\n            showFormModal: false,\n            showSuccessMessage: true,\n            filterCentre: [],\n            articlePreviewUrlHolder: articlePreviewUrl,\n            articlePreviewTitleHolder: articlePreviewTitle,\n            isDashboardUpdate: true\n          },\n            () => {\n              scrollToTop()\n              addClassLazyload(\"article-listing__content\")\n            }\n          )\n        }\n      });\n    } else {\n      onClickUpdate().then((result) => {\n        if (result && result.isSuccess) {\n          let filterAllStatus = document.getElementById(\"allStatus\");\n          let filterAllCentreRadio = document.getElementById(\"allCentre\");\n          let filterAllCentreDropdown = document.querySelector(\".is-filter-centre .form__select--field\");\n          if (filterAllStatus) {\n            filterAllStatus.click()\n          }\n          if (filterAllCentreRadio) {\n            filterAllCentreRadio.click()\n          } else if (filterAllCentreDropdown) {\n            filterAllCentreDropdown.selectedIndex = 0;\n          }\n          this.setState({\n            filterCentre: [],\n            isDashboardUpdate: true\n          },\n            () => addClassLazyload(\"article-listing__content\")\n          )\n        }\n      });\n    }\n  }\n\n  renderDelete = () => {\n    const {\n      deleteModalData,\n      disableCancelBtn,\n      disableDeleteBtn,\n    } = this.state;\n\n    return (\n      <Popup>\n        <PopupAction\n          label={{ value: `Delete article?` }}\n          description={{ value: `Are you sure you’d like to delete this article?<br/>This cannot be undone.` }}\n          icon=\"trash-2\"\n          iconBgColor=\"#d83b42\"\n          secondaryBtn=\"Cancel\"\n          disabledSecondaryBtn={disableCancelBtn}\n          secondaryBtnOnClick={() => this.setState({ showDeleteModal: false })}\n          primaryBtn={`Delete article`}\n          primaryBtnOnClick={() => this.deleteArticle(deleteModalData)}\n          primaryBtnColor=\"red\"\n          disabledPrimaryBtn={disableDeleteBtn}\n        />\n      </Popup>\n    );\n  };\n\n  deleteArticle = async deleteModalData => {\n    const {\n      isDashboard = false,\n      updateDashboard\n    } = this.props || {}\n    const {\n      id,\n      status\n    } = deleteModalData;\n    const {\n      content,\n      dataCount\n    } = this.state;\n    this.setState({\n      disableCancelBtn: true,\n      disableDeleteBtn: true\n    })\n    let successMessage = \"\";\n    try {\n      let response = await deleteArticle({ itemId: id });\n      if (response.status === 200 && response.data) {\n        if (response.data.IsSuccess.value) {\n          successMessage = \"Article successfully deleted.\";\n\n          if (!isDashboard) {\n            let statusVar = \"\";\n            if (status.toLowerCase() === \"live\") {\n              statusVar = \"LivePromotions\";\n            }\n            else if (status.toLowerCase() === \"scheduled\") {\n              statusVar = \"ScheduledPromotions\";\n            }\n            else if (status.toLowerCase() === \"awaiting approval\") {\n              statusVar = \"AwaitingApprovalPromotions\";\n            }\n            else if (status.toLowerCase() === \"draft\") {\n              statusVar = \"DraftPromotions\";\n            }\n            else if (status.toLowerCase() === \"rejected\") {\n              statusVar = \"RejectedPromotions\";\n            }\n\n            let newData =\n              this.state[content][statusVar].filter(item => {\n                return item.ItemId.value !== id;\n              });\n\n            this.setState(\n              {\n                [this.state.content]: {\n                  ...this.state[content],\n                  [statusVar]: newData\n                },\n                showDeleteModal: false,\n                showSuccessMessage: true,\n                disableCancelBtn: false,\n                disableDeleteBtn: false,\n                formModalData: {\n                  ...this.state.formModalData,\n                  successMessage\n                },\n                dataCount: dataCount - 1\n              },\n              () => {\n                scrollToTop()\n                addClassLazyload(\"article-listing__content\");\n              }\n            );\n          } else {\n            this.setState(\n              {\n                showDeleteModal: false,\n                showSuccessMessage: true,\n                disableCancelBtn: false,\n                disableDeleteBtn: false,\n                formModalData: {\n                  ...this.state.formModalData,\n                  successMessage\n                }\n              },\n              () => {\n                scrollToTop()\n                if (updateDashboard) {\n                  updateDashboard(true)\n                }\n                addClassLazyload(\"article-listing__content\");\n              }\n            );\n          }\n        } else {\n          successMessage = \"Article delete failed.\"\n\n          this.setState({\n            showDeleteModal: false,\n            showSuccessMessage: true,\n            disableCancelBtn: false,\n            disableDeleteBtn: false,\n            formModalData: {\n              ...this.state.formModalData,\n              successMessage\n            }\n          },\n            () => scrollToTop()\n          );\n        }\n      }\n      else {\n        successMessage = \"Article delete failed.\"\n\n        this.setState({\n          showDeleteModal: false,\n          showSuccessMessage: true,\n          formModalData: {\n            ...this.state.formModalData,\n            successMessage\n          }\n        },\n          () => scrollToTop()\n        );\n      }\n      removeActiveState();\n    }\n    catch (e) {\n      console.error(\"Article Delete Error: \" + e.response.statusText);\n      successMessage = \"Article delete error.\";\n      this.setState({\n        showDeleteModal: false,\n        showSuccessMessage: true,\n        disableCancelBtn: false,\n        disableDeleteBtn: false,\n        formModalData: {\n          ...this.state.formModalData,\n          successMessage\n        }\n      },\n        () => scrollToTop()\n      )\n      removeActiveState();\n      // this.setState(\n      //   {\n      //     showDeleteModal: false,\n      //     showSuccessMessage: true,\n      //     disableCancelBtn: false,\n      //     disableDeleteBtn: false,\n      //     formModalData: {\n      //       ...this.state.formModalData,\n      //       successMessage\n      //     }\n      //   },\n      //   () => {\n      //     if (updateDashboard) {\n      //       updateDashboard(true)\n      //     }\n      //   }\n      // );\n    }\n  };\n\n  handleOnClickFilter = (type, value) => {\n    if (type === \"status\") {\n      this.setState({\n        filterStatus: value\n      })\n    } else if (type === \"centre\") {\n      this.setState({\n        filterCentre: value === \"allCentre\" ? [] : value,\n      })\n    }\n    addClassLazyload(\"article-listing__content\");\n    scrollToTop();\n  }\n\n  setCentreListDropdown = (CentreList) => {\n    let tempCentreList = [];\n    let allOption = {\n      Id: { value: \"allCentre\" },\n      Name: { value: \"All centres\" }\n    }\n    tempCentreList.push(allOption)\n\n    CentreList.map((item) => {\n      const {\n        Name\n      } = item.fields;\n\n      if (Name && Name.value) {\n        let centreOption = {\n          Id: { value: Name.value },\n          Name: { value: Name.value }\n        }\n        tempCentreList.push(centreOption)\n      }\n    })\n    return tempCentreList;\n  }\n\n  renderCustomFilter = (CentreList) => {\n    const {\n      showFilter,\n      statusOption,\n      centreListOption,\n      filterByCentre,\n      isMobile\n    } = this.state;\n\n    return (\n      <CustomFilter\n        showFilter={showFilter}\n        onCloseFilter={() => this.setState({ showFilter: false })}\n      >\n        <div className=\"custom-filter__group is-filter-status\">\n          <div className=\"custom-filter__label\">\n            {\"Filter by status\"}\n          </div>\n          <RadioButton\n            defaultSelected=\"allStatus\"\n            options={statusOption}\n            radioGroupName=\"articleListing\"\n            onChange={(id) => this.handleOnClickFilter(\"status\", id)}\n            plain\n          />\n        </div>\n        <div className=\"custom-filter__group is-filter-centre\">\n          <div className=\"custom-filter__label\">\n            {\"Filter by centre\"}\n          </div>\n          {CentreList &&\n            CentreList.length > 0 && (\n              (CentreList.length > 5 || isMobile) ?\n                <Select\n                  onChange={(option) => this.handleOnClickFilter(\"centre\", option.value)}\n                  defaultValue={{ value: \"allCentre\", label: \"All centres\" }}\n                  options={centreListOption}\n                  theme={(theme) => ({\n                    ...theme,\n                    colors: {\n                      ...theme.colors,\n                      primary: \"#536760\",\n                      primary25: \"#f5f5f6\",\n                    },\n                  })}\n                  isSearchable={false}\n                  maxMenuHeight={200}\n                  menuPlacement=\"auto\"\n                /> :\n                <RadioButton\n                  defaultSelected=\"allCentre\"\n                  options={this.setCentreListDropdown(CentreList)}\n                  radioGroupName=\"articleListingCentreList\"\n                  onChange={(id) => this.handleOnClickFilter(\"centre\", id)}\n                  plain\n                />\n            )\n          }\n        </div>\n      </CustomFilter>\n    )\n  }\n\n  renderContent = (HideCreateButton) => {\n    const {\n      isDashboard = false,\n      articleList = [],\n      noStore = false\n    } = this.props || {}\n\n    const {\n      articles,\n      filterStatus,\n      filterCentre,\n      dataCount\n    } = this.state;\n\n    let noSelectedStore = false;\n    if (noStore.toString() === \"true\" || (HideCreateButton && HideCreateButton.value.toString() === \"true\")) {\n      noSelectedStore = true;\n    }\n\n    return (\n      <Articles\n        data={(articleList && articleList.length > 0) ? { dashboardArticles: articleList } : articles}\n        filterStatus={filterStatus}\n        filterCentre={filterCentre}\n        showPreviewModal={previewModalData =>\n          this.setState({\n            showPreviewModal: true,\n            previewModalData,\n            formModalData: {\n              ...this.state.formModalData,\n              previewUrl: \"\",\n              previewTitle: \"\",\n            },\n          })\n        }\n        showFormModal={formModalData =>\n          this.setState({ showFormModal: true, formModalData })\n        }\n        showDeleteModal={deleteModalData =>\n          this.setState({\n            showDeleteModal: true,\n            deleteModalData,\n            formModalData: {\n              ...this.state.formModalData,\n              previewUrl: \"\",\n              previewTitle: \"\",\n            },\n          })\n        }\n        showFilter={() => {\n          this.setState({ showFilter: true })\n        }}\n        dataUpdate={articles => this.setState({ articles })}\n        noSelectedStore={noSelectedStore}\n        isDashboard={isDashboard}\n        dataTotalCount={dataCount => this.setState({ dataCount })}\n        hideFilter={dataCount == 0}\n        totalListCount={dataCount}\n      />\n    );\n  };\n\n  render() {\n    const {\n      content,\n      showDeleteModal,\n      showSuccessMessage,\n      formModalData,\n      isDocumentReady,\n      articlePreviewUrlHolder,\n      articlePreviewTitleHolder\n    } = this.state;\n    const {\n      CentreList,\n      HideCreateButton,\n    } = this.props.fields || {};\n\n\n    const {\n      noStore = false\n    } = this.props || {}\n\n    return (\n      <div className={`article-listing__container ${showSuccessMessage ? \"has-success-message\" : \"\"}`}>\n        {showDeleteModal && this.renderDelete()}\n        {isDocumentReady &&\n          this.renderPreviewModal()\n        }\n        {isDocumentReady &&\n          this.renderFormModal()\n        }\n\n        {isDocumentReady &&\n          CentreList &&\n          CentreList.length > 0 &&\n          this.renderCustomFilter(CentreList)\n        }\n\n        {showSuccessMessage &&\n          <SuccessMessage\n            showPreviewLink={formModalData && formModalData.previewUrl}\n            label={formModalData.successMessage}\n            handleOnClick={() => {\n              if (formModalData.previewUrl) {\n                this.setState({\n                  showPreviewModal: true,\n                  formModalData: {\n                    ...this.state.formModalData,\n                    previewUrl: articlePreviewUrlHolder,\n                    previewTitle: articlePreviewTitleHolder,\n                  },\n                })\n              } else {\n                console.log(\"Preview Group\")\n              }\n            }}\n            handleShowSuccess={(showSuccessMessage) => {\n              this.setState({\n                showSuccessMessage\n              })\n            }}\n          />\n        }\n\n        <div className={`article-listing__content ${(noStore.toString() === \"true\" || (HideCreateButton && HideCreateButton.value.toString() === \"true\")) ? \"hide-create-btn\" : \"\"}`}>\n          {content && this.renderContent(HideCreateButton)}\n        </div>\n      </div>\n    );\n  }\n}\nexport default FeatureRetailerPortalArticleListing;","import React from \"react\";\nimport ReactCrop from 'react-image-crop';\nimport 'react-image-crop/dist/ReactCrop.css';\nimport {\n  base64StringtoFile\n} from \"../../../helper/ImageConversionHelper\";\n\nclass ImageUpload extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      file: props.value ? props.value : null,\n      preview: props.value ? props.value : null,\n      errorMessage: null,\n      showCrop: false,\n      croppedImageUrl: null,\n      crop: {\n        unit: '%',\n        width: 50,\n        aspect: 16 / 9,\n      },\n    };\n  }\n\n  handleFileUpload = () => {\n    this.props.handleFileUpload(this.state.file, this.state.errorMessage);\n  };\n\n  removeFile = () => {\n    this.setState(\n      {\n        file: null,\n        preview: null\n      },\n      this.handleFileUpload\n    );\n  }\n\n  setFile = file => {\n    if (file && file.type.indexOf(\"image\") !== -1) {\n      this.setState(\n        {\n          file,\n          preview: URL.createObjectURL(file),\n          showCrop: false,\n          croppedImageUrl: null\n        },\n        this.handleFileUpload\n      );\n\n    } else {\n      alert(\"Please select an image\");\n    }\n  };\n\n  handleCrop = (e, type) => {\n    this.setState({\n      showCrop: !this.state.showCrop,\n      crop: {\n        unit: '%',\n        width: 80,\n        x: 10,\n        y: 10,\n        aspect: type === \"hero\" ? 16 / 9 : 1,\n      },\n    });\n  }\n\n  onImageLoaded = image => {\n    this.imageRef = image;\n  };\n\n  onCropComplete = crop => {\n    this.makeClientCrop(crop);\n    this.convertCroptoFile(crop);\n  };\n\n  onCropChange = (crop) => {\n    this.setState({ crop: crop });\n  };\n\n  async makeClientCrop(crop) {\n    if (this.imageRef && crop.width && crop.height) {\n      const canvasImage = this.getCroppedImg(\n        this.imageRef,\n        crop\n      );\n      const croppedImageUrl = await new Promise((resolve, reject) => {\n        canvasImage.toBlob(blob => {\n          if (!blob) {\n            console.error('Canvas is empty');\n            return;\n          }\n          blob.name = 'cropImage.jpeg';\n          window.URL.revokeObjectURL(this.fileUrl);\n          this.fileUrl = window.URL.createObjectURL(blob);\n          resolve(this.fileUrl);\n        }, 'image/jpeg');\n      });\n\n      this.setState({\n        croppedImageUrl: croppedImageUrl\n      })\n    }\n  }\n\n  convertCroptoFile(crop) {\n    const { file } = this.state;\n    let name, lastDot, fileName, fileExtension;\n    const canvasImage = this.getCroppedImg(\n      this.imageRef,\n      crop\n    );\n    if (canvasImage.width > 0 && canvasImage.height > 0) {\n      if (file.name) {\n        name = file.name;\n      }\n      else {\n        name = file.split('/').pop().split('?')[0];\n\n      }\n      lastDot = name.lastIndexOf('.');\n      fileName = name.substring(0, lastDot);\n      fileExtension = name.substring(lastDot + 1);\n      const imageData64 = canvasImage.toDataURL(\"image/\" + (fileExtension === \"jpg\" ? \"jpeg\" : fileExtension));\n      const cropFileName = fileName + \".\" + fileExtension;\n      const newCropFile = base64StringtoFile(imageData64, cropFileName);\n      this.setState(\n        {\n          file: newCropFile\n        },\n        this.handleFileUpload\n      );\n    }\n  }\n  getCroppedImg(image, crop) {\n    if (document) {\n      const canvas = document.createElement('canvas');\n      let scaleX, scaleY;\n      scaleX = image.naturalWidth / image.width;\n      scaleY = image.naturalHeight / image.height;\n\n      canvas.width = crop.width * scaleX;\n      canvas.height = crop.height * scaleY;\n      const ctx = canvas.getContext('2d');\n      ctx.drawImage(\n        image,\n        crop.x * scaleX,\n        crop.y * scaleY,\n        crop.width * scaleX,\n        crop.height * scaleY,\n        0,\n        0,\n        crop.width * scaleX,\n        crop.height * scaleY,\n      );\n      return canvas;\n    }\n  }\n\n  render() {\n    const { preview, showCrop, crop, croppedImageUrl } = this.state;\n    const {\n      type,\n      error,\n      placeholder,\n      labelOne,\n      labelTwo,\n      labelThree,\n      removeImage = false\n    } = this.props;\n    return (\n      <div className={\"imageupload-container \" + type}>\n        <div className={`image-container ${preview ? \"\" : \"default\"}`}>\n          <img\n            src={croppedImageUrl ? croppedImageUrl : preview ? preview : placeholder}\n            alt=\"\"\n            className={`image ${type ? type : \"\"} ${error ? \"error\" : \"\"} ${preview ? \"\" : \"default\"} ${showCrop ? \"hide\" : \"\"}`}\n          />\n          {showCrop &&\n            (preview) && (\n              <ReactCrop\n                src={preview}\n                crop={crop}\n                ruleOfThirds\n                onImageLoaded={this.onImageLoaded}\n                onComplete={this.onCropComplete}\n                onChange={this.onCropChange}\n                keepSelection={true}\n              />\n            )}\n        </div>\n        <div className=\"imageupload-details\">\n          <label className=\"imageupload-btn btn btn-light-primary\">\n            {preview ? \"Change image\" : \"Upload an image\"}\n            <input\n              type=\"file\"\n              accept=\"image/*\"\n              onChange={e => this.setFile(e.target.files[0])}\n            />\n          </label>\n          {(removeImage && preview) &&\n            <button className=\"imageupload-btn imageupload-btn--delete btn btn-light-primary\"\n              onClick={() => this.removeFile()}>\n              <i\n                className=\"icon icon-trash\"\n              />\n            </button>\n          }\n          <button className=\"imageupload-crop btn btn-light-primary\"\n            onClick={e => this.handleCrop(e, type)}\n            disabled={preview ? false : true}\n          >\n            <i className={`icon ${showCrop ? \"icon-check\" : \"icon-crop\"}`}></i>\n          </button>\n          <div className=\"text-container\">\n            <span>{labelOne}</span>\n            <span className=\"bold\">{labelTwo}</span>\n            <span>{labelThree}</span>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default ImageUpload;\n","/*\n** A few JavaScript Functions for Images and Files\n** Author: Justin Mitchel\n** Source: https://kirr.co/ndywes\n*/\n\n//Download a Base64-encoded file\nexport function downloadBase64File(base64Data, filename) {\n    if (document) {\n        var element = document.createElement('a');\n        element.setAttribute('href', base64Data);\n        element.setAttribute('download', filename);\n        element.style.display = 'none';\n        document.body.appendChild(element);\n        element.click();\n        document.body.removeChild(element);\n    }\n}\n\n//Convert a Base64-encoded string to a File object\nexport function base64StringtoFile(base64String, filename) {\n    var arr = base64String.split(','), mime = arr[0].match(/:(.*?);/)[1],\n        bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);\n    while (n--) {\n        u8arr[n] = bstr.charCodeAt(n);\n    }\n    return new File([u8arr], filename, { type: mime });\n}\n\n//Extract an Base64 Image's File Extension\nexport function extractImageFileExtensionFromBase64(base64Data) {\n    return base64Data.substring(\"data:image/\".length, base64Data.indexOf(\";base64\"))\n}","import React, { Component } from \"react\";\nimport { values } from \"lodash\";\nimport bitmap from \"../../../assets/icons/png/bitmap@3x.png\";\nclass FormFile extends Component {\n  constructor(props) {\n    super(props);\n    this.inputFile = React.createRef(null);\n  }\n\n  state = {\n    files: this.props.value,\n    errorMessage: null,\n  };\n\n  handleAttachments = () => {\n    this.props.handleAttachments(this.state.files, this.state.errorMessage);\n  };\n\n  setList = files => {\n    if (files && files.length) {\n      let lists = [];\n      let isError = false;\n      for (let i = 0; i < files.length; i++) {\n        if (\n          files[i] &&\n          (files[i].type === \"image/png\" || files[i].type === \"image/jpeg\")\n        ) {\n          lists.push(files[i]);\n        } else {\n          isError = true;\n        }\n      }\n\n      this.setState(\n        {\n          files: [...this.state.files, ...values(lists)],\n          errorMessage: isError\n            ? \"One or more files could not be uploaded. Only files with jpeg and png extension are allowed.\"\n            : null,\n        },\n        this.handleAttachments\n      );\n    }\n  };\n\n  updateFile(imageFile, filename) {\n    const { files } = this.state;\n    let listItem = [];\n    files.map((item, index) => {\n      if (item.name == filename) {\n        listItem.push(imageFile)\n      } else {\n        listItem.push(item);\n      }\n    })\n    let newList = listItem;\n    this.setState(\n      { files: newList, errorMessage: null },\n      this.handleAttachments\n    );\n  }\n\n  removeFile(filename) {\n    const { files } = this.state;\n    if (document) {\n      document.getElementsByClassName(\"file-btn\")[0].querySelector(\"input\").value = null;\n      const uploadInput = Array.prototype.slice.apply(\n        document.getElementsByClassName(\"file-list\")[0].querySelectorAll(\"input\")\n      );\n      uploadInput.map((item, index) => {\n        item.value = null;\n      })\n      let newList = files.filter(file => file.name !== filename);\n      this.setState(\n        {\n          files: newList,\n          errorMessage: null,\n        },\n        this.handleAttachments\n      );\n    }\n  }\n\n  renderList = () => {\n    const { files } = this.state;\n\n    if (files.length > 0) {\n      let list = [];\n      for (let i = 0; i < files.length; i++) {\n        const element = files[i];\n        list.push(element);\n      }\n\n      return (\n        <div className=\"file-list\">\n          {list.map((item, index) => {\n            let imgSrc;\n            if (item.src) {\n              imgSrc = item.src\n            } else {\n              imgSrc = URL.createObjectURL(item)\n            }\n            return (\n              <React.Fragment key={`fileId-${index}`}>\n                <div className=\"file-item\">\n                  <div className=\"file-item__action\">\n                    <i\n                      className=\"icon icon-trash\"\n                      onClick={() => this.removeFile(item.name)}\n                    />\n                  </div>\n                  <div className=\"file-item__image\">\n                    <img src={imgSrc} alt=\"upload source\" />\n                    <label className=\"image-gallery-btn-change\" htmlFor={item.name + index}>\n                      <span>\n                        {\"Change\"}\n                      </span>\n                      <input\n                        id={item.name + index}\n                        type=\"file\"\n                        accept=\"image/png,image/jpeg\"\n                        onChange={e => this.updateFile(e.target.files[0], item.name)}\n                      />\n                    </label>\n                  </div>\n                </div>\n              </React.Fragment>\n            );\n          })}\n        </div>\n      );\n    }\n  };\n\n  render() {\n    const { files } = this.state;\n\n    return (\n      <div className={`form-file-wrapper ${files.length > 0 ? \"\": \"no-image\"}`}>\n        <div className=\"form-file\">\n          {this.renderList()}\n          <div className=\"file-btn\">\n            <label className=\"image-gallery-btn\">\n              {\"Add image\"}\n              <input\n                ref={this.inputFile}\n                type=\"file\"\n                multiple\n                accept=\"image/png,image/jpeg\"\n                onChange={e => this.setList(e.target.files)}\n              />\n            </label>\n          </div>\n        </div>\n        <div className=\"imageupload-text\">\n          <div className=\"text-container\">\n            <div>\n              {\"To keep the quality of our websites high, the hero banner image needs to be:\"}\n            </div>\n            <br />\n            <div>\n              {\"• At least 1920px wide\"}\n            </div>\n            <div>\n              {\"• At least 1080px tall.\"}\n            </div>\n            <div>\n              {\"• To avoid your image being cropped, use a ratio of 16:9\"}\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default FormFile;\n","import React, { Component, Fragment } from \"react\";\r\n\r\n// Input [{name: value}]\r\n\r\nclass DropDown extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      show: false,\r\n      selected: props.defaultSelected\r\n    };\r\n  }\r\n\r\n  componentDidUpdate(prevProps) {\r\n    if(prevProps.defaultSelected != this.props.defaultSelected) {\r\n      this.setState({\r\n        selected: this.props.defaultSelected\r\n      })\r\n    }\r\n  }\r\n\r\n  handleToggle = e => {\r\n    e.target.focus();\r\n    this.setState({ show: !this.state.show });\r\n  };\r\n\r\n  handleBlur = () => {\r\n    if (this.state.show) {\r\n      setTimeout(() => {\r\n        this.setState({ show: !this.state.show });\r\n      }, 120);\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const { theme, error } = this.props;\r\n    return (\r\n      <Fragment>\r\n        <div className=\"dropdown-container\">\r\n          <label\r\n            className={`arrow ${theme ? theme : \"\"} ${error ? \"error\" : \"\"}`}\r\n          >\r\n            <div className=\"dropdown-placeholder\">\r\n              <input\r\n                type=\"button\"\r\n                value={this.state.selected}\r\n                className=\"dropdown-btn\"\r\n                onClick={e => this.handleToggle(e)}\r\n                // onBlur={e => this.handleBlur(e)}\r\n              />\r\n            </div>\r\n            <i className=\"icon icon-chevron-down\"></i>\r\n            <ul className={`dropdown-list ${this.state.show ? \"\" : \"d-none\"}`}>\r\n              {this.props.options && this.props.options.length ? (\r\n                this.props.options.map((item, index) => {\r\n                  return (\r\n                    <li\r\n                      key={`optionId${index}`}\r\n                      onClick={() => {\r\n                        this.setState(\r\n                          { selected: item.name },\r\n                          this.props.handleSelectionChange(item.name)\r\n                        );\r\n                      }}\r\n                    >\r\n                      <span>{item.name}</span>\r\n                    </li>\r\n                  );\r\n                })\r\n              ) : (\r\n                <li className=\"empty\">No store found</li>\r\n              )}\r\n            </ul>\r\n          </label>\r\n        </div>\r\n      </Fragment>\r\n    );\r\n  }\r\n}\r\n\r\nexport default DropDown;\r\n","import React, { Component } from \"react\";\r\n\r\nclass Modal extends Component {\r\n  render() {\r\n    const { type, show } = this.props;\r\n    let modalType = type ? `modal-${type}` : \"modal-small\";\r\n\r\n    return (\r\n      <React.Fragment>\r\n        <div className=\"modal-bg-blur\" />\r\n        <div className=\"retailer-modal-container\">\r\n          <div className={`retailer-modal ${modalType}`}>\r\n            <div className={`header ${modalType}`}>\r\n              <div className=\"title\">{this.props.title}</div>\r\n              {show &&\r\n                <div className=\"close-button\" onClick={() => show()}>\r\n                  <i className=\"icon icon-cancel\" />\r\n                </div>\r\n              }\r\n            </div>\r\n            {this.props.children}\r\n          </div>\r\n        </div>\r\n      </React.Fragment>\r\n    );\r\n  }\r\n}\r\n\r\nexport default Modal;\r\n","export const getUrlParameter = name => {\n  // name = name.replace(/[\\[]/, \"\\\\[\").replace(/[\\]]/, \"\\\\]\");\n  var regex = new RegExp(\"[\\\\?&]\" + name + \"=([^&#]*)\");\n  var results = regex.exec(window.location.search);\n  return results === null\n    ? \"\"\n    : decodeURIComponent(results[1].replace(/\\+/g, \" \"));\n};\n\nexport const changeUrlParameter = (name, value) => {\n  window.location.search = `?${name}=${value}&sc_mode=normal`;\n};\n\n\nexport const addParameter = (url, param, value) => {\n  // Using a positive lookahead (?=\\=) to find the\n  // given parameter, preceded by a ? or &, and followed\n  // by a = with a value after than (using a non-greedy selector)\n  // and then followed by a & or the end of the string\n  var val = new RegExp('(\\\\?|\\\\&)' + param + '=.*?(?=(&|$))'),\n    qstring = /\\?.+$/;\n\n  // Check if the parameter exists\n  if (val.test(url)) {\n    // if it does, replace it, using the captured group\n    // to determine & or ? at the beginning\n    return url.replace(val, '$1' + param + '=' + value);\n  }\n  else if (qstring.test(url)) {\n    // otherwise, if there is a query string at all\n    // add the param to the end of it\n    return url + '&' + param + '=' + value;\n  }\n  else {\n    // if there's no query string, add one\n    return url + '?' + param + '=' + value;\n  }\n}","import React from \"react\";\nimport axios from \"axios\";\nimport Loadable from \"react-loadable\";\nimport TagManager from \"react-gtm-module\";\nimport ImageUpload from \"../../../Base/ImageUpload\";\nimport FormFile from \"../../../Base/FormFile\";\nimport DropDown from \"../../../Base/DropDown\";\nimport FormInput from \"../../../Base/FormInput\";\nimport FormInputMultiple from \"../../../Base/FormInputMultiple\";\nimport FormDate from \"../../../Base/FormDate\";\nimport FormCheckbox from \"../../../Base/FormCheckbox\";\nimport Button from \"../../../Base/Button\";\nimport Modal from \"../../../Base/Modal\";\nimport { get } from \"lodash\";\nimport {\n  disableBodyScroll,\n  enableBodyScroll\n} from \"../../../../helper/ScrollHelper\";\nimport {\n  validate,\n  setArticleData,\n  buildFormData,\n  formDataFields\n} from \"../../../../helper/ArticleHelper\";\nimport { getUrlParameter } from \"../../../../helper/UrlHelper\";\nimport bitmap from \"../../../../assets/icons/png/bitmap@3x.png\";\nimport { getCentreStores } from \"../../../../api/PromotionAPI\";\nimport FormListbox from \"../../../Base/FormListbox\";\n\nconst RichTextEditor = Loadable({\n  loader: () => import(\"../../../Base/RichTextEditor\"),\n  loading: () => null\n});\n\nclass FeatureRetailerPortalArticles extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      mode: \"new\",\n      stores: null,\n      retailers: null,\n      showModal: false,\n      modalContent: null,\n      formError: {},\n      storeList: null,\n      centreStoreList: null,\n      formData: { ...formDataFields },\n      componentReady: false,\n      selectAllStores: false,\n      holidays: null,\n      categories: null,\n      specialHolidayListbox: null,\n      status: \"dirty\",\n      redirectUrl: \"\",\n      retailerId: \"\"\n    };\n  }\n  componentDidMount() {\n    this.setState({\n      centre: getUrlParameter(\"centre\"),\n      componentReady: true\n    });\n    this.getData();\n    let retailerList = this.setRetailerList(this.props.fields.RetailerList);\n    if (!getUrlParameter(\"itemId\") && retailerList && retailerList.length) {\n      this.getCentreStoreList(retailerList[0].value);\n    }\n  }\n\n  getData = () => {\n    const {\n      RetailerList,\n      Article,\n      RedirectUrl,\n      GlobalSpecialHoliday,\n      Categories\n    } = this.props.fields;\n    let retailerList = this.setRetailerList(RetailerList);\n    let holidayList = this.setHolidayList(GlobalSpecialHoliday);\n    let categoryList = this.setCategoryList(Categories);\n    if (getUrlParameter(\"itemId\")) {\n      let articleData = setArticleData(Article.fields);\n      this.setState({\n        mode: \"edit\",\n        retailers: retailerList,\n        categories: categoryList,\n        formData: { ...this.state.formData, ...articleData },\n        redirectUrl: RedirectUrl.value,\n        holidays: holidayList\n      });\n    } else {\n      this.setState({\n        retailers: retailerList,\n        categories: categoryList,\n        redirectUrl: RedirectUrl && RedirectUrl.value ? RedirectUrl.value : \"\",\n        holidays: holidayList\n      });\n    }\n  };\n\n  setRetailerList = list => {\n    let temp = [];\n    list.forEach(el =>\n      temp.push({\n        name: el.fields.RetailerName.value,\n        value: el.fields.RetailerId.value\n      })\n    );\n    return temp;\n  };\n\n  setHolidayList = list => {\n    let temp = [];\n    if (list && list.length) {\n      list.forEach(el =>\n        temp.push({\n          name: el.fields.HolidayName.value,\n          value: el.fields.HolidayId.value\n        })\n      );\n    }\n    return temp;\n  };\n\n  setCategoryList = list => {\n    let temp = [];\n    list.forEach(el =>\n      temp.push({\n        name: el.fields.CategoryName.value,\n        value: el.fields.CategoryId.value\n      })\n    );\n    return temp;\n  };\n\n  handleListbox = (id, field) => {\n    const { formData } = this.state;\n    let options;\n    let selected = [];\n    if (document) {\n      options = document.querySelectorAll(`#${id} option:checked`);\n      if (options) {\n        for (let i = 0; i < options.length; i++) {\n          selected.push(options[i].value);\n        }\n      }\n    }\n    this.setState({\n      formData: {\n        ...formData,\n        [field]: selected\n      }\n    });\n  };\n\n  handleSelect = (isSelect, field, options) => {\n    const { formData } = this.state;\n    this.setState({\n      formData: {\n        ...formData,\n        [field]: isSelect ? options.map(el => el.value) : []\n      }\n    });\n  };\n\n  handleFormUpdate = value => {\n    this.setState({ formData: { ...this.state.formData, ...value } });\n  };\n\n  renderModal = () => {\n    disableBodyScroll();\n    const { mode, status, redirectUrl } = this.state;\n    const { title, body, cta } = this.state.modalContent;\n    return (\n      <Modal\n        type=\"small\"\n        title={title}\n        show={() => {\n          if (status === \"submitted\" || status === \"saved\") {\n            window.location.href = `${redirectUrl}`;\n          } else {\n            this.setState({ showModal: false, modalContent: null }, () =>\n              enableBodyScroll()\n            );\n          }\n        }}\n      >\n        <div className=\"modal-body\">{body}</div>\n        {(mode === \"edit\" || status === \"submitted\") && cta && (\n          <div className=\"cta modal-controls-container\">\n            <Button\n              color=\"primary\"\n              onClick={() => (window.location.href = cta.url)}\n            >\n              {cta.label}\n            </Button>\n          </div>\n        )}\n        {mode === \"new\" && status === \"saved\" && (\n          <div className=\"modal-controls-container\">\n            <Button\n              color=\"secondary\"\n              onClick={() => (window.location.href = `${redirectUrl}`)}\n            >\n              CANCEL\n            </Button>\n            <Button\n              disabled={false}\n              color=\"primary\"\n              onClick={() => this.submitForm()}\n            >\n              SUBMIT\n            </Button>\n          </div>\n        )}\n        {mode === \"new\" && status === \"dirty\" && (\n          <div className=\"modal-controls-container\">\n            <Button\n              color=\"secondary\"\n              onClick={() =>\n                this.setState({ showModal: false, modalContent: null }, () =>\n                  enableBodyScroll()\n                )\n              }\n            >\n              CLOSE\n            </Button>\n          </div>\n        )}\n      </Modal>\n    );\n  };\n\n  validateForm = () => {\n    let formError = validate(\n      this.state.formData,\n      this.state.mode === \"edit\" ? [\"selectedRetailer\"] : []\n    );\n    let errorMessage = {\n      title: \"Form Saving Failed\",\n      body: \"Required fields are missing\"\n    };\n    if (Object.entries(formError).length !== 0) {\n      this.setState({ formError, showModal: true, modalContent: errorMessage });\n    } else {\n      this.saveForm();\n    }\n  };\n\n  extractItemIds = centreList => {\n    let itemIds = [];\n    centreList.map(center => {\n      center.Articles.map(article => {\n        itemIds.push(article.ItemId.value);\n      });\n    });\n    return itemIds;\n  };\n\n  buildPreviewUrls = centreList => {\n    let preview = \"\";\n    preview = centreList.map(centre => {\n      let centrePreview = [];\n      centrePreview = centre.Articles.map(article => {\n        return (\n          <div className=\"preview-link\">\n            <i className={`icon icon-external`} />\n            <a href={article.PreviewUrl.value} target=\"_blank\">\n              {article.Store.value}\n            </a>\n          </div>\n        );\n      });\n      TagManager.dataLayer({\n        dataLayer: {\n          event: \"createdArticles\",\n          centreName: centre.Centre.value\n        },\n        dataLayerName: \"dataLayer\"\n      });\n      return (\n        <div className=\"col-3\">\n          <div className=\"centre-name\">{centre.Centre.value}</div>\n          <div className=\"centre-preview-list\">{centrePreview}</div>\n        </div>\n      );\n    });\n    return <div className=\"row\">{preview}</div>;\n  };\n\n  saveForm = async () => {\n    const { formData, mode } = this.state;\n    var timezoneId = new Date().getTimezoneOffset();\n    const url = \"/api/sitecore/article/SaveArticle\";\n    let data = buildFormData({\n      ...formData,\n      timeZoneId: timezoneId\n    });\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        params: {\n          ...(mode === \"edit\" ? { itemId: `&itemId=${formData.itemId}` } : \"\")\n        },\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } }\n      });\n\n      if (response) {\n        if (response.data.IsSuccess.value && mode === \"new\") {\n          let successMessage = {\n            title: \"Article drafts have been created\",\n            body: this.buildPreviewUrls(response.data.ArticleList)\n          };\n          const itemIds = this.extractItemIds(response.data.ArticleList);\n          this.setState({\n            showModal: true,\n            modalContent: successMessage,\n            formData: { ...formData, itemIds },\n            status: \"saved\"\n          });\n        } else if (response.data.IsSuccess.value && mode === \"edit\") {\n          let successMessage = {\n            title: \"Form Saved\",\n            body: response.data.Message.value\n          };\n          const article = response.data.ArticleList[0].Articles[0];\n          this.setState(\n            {\n              showModal: true,\n              modalContent: successMessage,\n              formData: { ...formData, itemIds: [`${article.ItemId.value}`] }\n            },\n            () => {\n              const win = window.open(article.PreviewUrl.value, \"_blank\");\n              if (win != null) {\n                win.focus();\n              }\n            }\n          );\n        } else {\n          let errorMessage = {\n            title: \"Form Not Saved\",\n            body: response.data.Message.value\n          };\n\n          this.setState({\n            showModal: true,\n            modalContent: errorMessage\n          });\n        }\n      }\n    } catch (e) {\n      console.log(e.response.statusText);\n    }\n  };\n\n  submitForm = async () => {\n    const { formData, mode } = this.state;\n    const url = \"/api/sitecore/article/SubmitArticle\";\n    let data = buildFormData({\n      itemIds: mode === \"edit\" ? [`${formData.itemId}`] : formData.itemIds\n    });\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } }\n      });\n\n      if (response) {\n        if (response.data.IsSuccess.value) {\n          let successMessage = {\n            title: \"Form Submitted\",\n            body: response.data.Message.value,\n            cta: {\n              label: \"Article list\",\n              url: response.data.RedirectUrl.value\n            }\n          };\n          this.setState({\n            showModal: true,\n            modalContent: successMessage,\n            status: \"submitted\"\n          });\n        } else {\n          let errorMessage = {\n            title: \"Form Not Submitted\",\n            body: response.data.Message.value\n          };\n\n          this.setState({\n            showModal: true,\n            modalContent: errorMessage\n          });\n        }\n      }\n    } catch (e) {\n      console.log(e.response.statusText);\n    }\n  };\n\n  getCentreStoreList = async retailerId => {\n    let response = await getCentreStores({ retailerId });\n    if (response.status === 200 && response.data) {\n      this.setState({\n        centreStoreList: get(response.data, \"CentreStoreList\", []),\n        retailerId\n      });\n    } else {\n      alert(\"Getting centre stores data failed\");\n    }\n  };\n\n  handleStoreListCheckbox = value => {\n    const { formData, selectAllStores, centreStoreList } = this.state;\n    if (value === \"0\") {\n      let allStores = [];\n      centreStoreList.map(centre => {\n        centre.StoreList.map(store => {\n          allStores.push(store.StoreItemId.value);\n        });\n      });\n\n      this.setState({\n        selectAllStores: !selectAllStores,\n        formData: {\n          ...formData,\n          selectedStores: !selectAllStores ? allStores : []\n        }\n      });\n    } else if (formData.selectedStores.indexOf(value) > -1) {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedStores: formData.selectedStores.filter(el => el !== value)\n        }\n      });\n    } else {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedStores: [...formData.selectedStores, value]\n        }\n      });\n    }\n  };\n\n  buildCentreStoreList = param => {\n    // const cetnreStoreList = getCentreStoreList\n    const { formData, centreStoreList, selectAllStores } = this.state;\n    if (centreStoreList && centreStoreList.length) {\n      return (\n        <div className=\"form-stores\">\n          <div className=\"form-label\">Multiple Stores</div>\n          <div className=\"content\">\n            <div className=\"row line\">\n              <div className=\"col-3\">\n                <FormCheckbox\n                  // key={`store-${store.StoreItemId.value}`}\n                  value=\"0\"\n                  label=\"Select All\"\n                  checked={selectAllStores}\n                  onCheckboxChange={value =>\n                    this.handleStoreListCheckbox(value)\n                  }\n                />\n              </div>\n            </div>\n            <div className=\"row\">\n              {centreStoreList.map((centre, index) => {\n                return (\n                  <div className=\"col-3\">\n                    <div className=\"form-label\">{centre.CentreName.value}</div>\n                    {centre.StoreList.map(store => {\n                      return (\n                        <FormCheckbox\n                          // key={`store-${store.StoreItemId.value}`}\n                          value={store.StoreItemId.value}\n                          label={store.StoreName.value}\n                          // checked={false}\n                          checked={\n                            formData.selectedStores.indexOf(\n                              store.StoreItemId.value\n                            ) > -1\n                          }\n                          // onCheckboxChange={value => this.getCentreStoreList(value)}\n                          onCheckboxChange={value =>\n                            this.handleStoreListCheckbox(value)\n                          }\n                        />\n                      );\n                    })}\n                  </div>\n                );\n              })}\n            </div>\n          </div>\n        </div>\n      );\n    }\n  };\n\n  render() {\n    const {\n      mode,\n      formError,\n      formData,\n      retailers,\n      showModal,\n      componentReady,\n      centreStoreList,\n      redirectUrl,\n      holidays,\n      categories\n    } = this.state;\n\n    if (!retailers) {\n      return null;\n    }\n\n    return (\n      <div className=\"article-container\">\n        {showModal && this.renderModal()}\n        <div className=\"body-section-title\">\n          {mode === \"new\" ? `Create an Article` : `Update an Article`}\n        </div>\n        {mode === \"new\" && (\n          <div className=\"form-type-wrapper d-none\">\n            <DropDown\n              theme=\"light\"\n              options={retailers}\n              error={formError.selectedRetailer}\n              defaultSelected={retailers[0].name}\n              // defaultSelected=\"Select Retailer\"\n              handleSelectionChange={selectedRetailerName => {\n                this.getCentreStoreList(\n                  retailers.filter(el => el.name === selectedRetailerName)[0]\n                    .value\n                );\n              }}\n            />\n          </div>\n        )}\n\n        {centreStoreList && this.buildCentreStoreList(centreStoreList)}\n\n        <div className=\"form-images-container\">\n          <div className=\"hero-wrapper\">\n            <div className=\"form-label\">\n              Hero Image<span>*</span>\n            </div>\n            <ImageUpload\n              type=\"hero\"\n              labelOne=\"*Images must be a min of \"\n              labelTwo=\"1920x1080 px \"\n              labelThree=\"(16:9 ratio)\"\n              placeholder={bitmap}\n              error={formError.heroImage}\n              value={formData.heroImage}\n              handleFileUpload={(heroImage, errorMessage) =>\n                this.handleFormUpdate({ heroImage })\n              }\n            />\n            {/* <div className=\"form-subtext\">\n              *Please do not use images that contain text\n            </div> */}\n          </div>\n          <div className=\"thumbnail-wrapper\">\n            <div className=\"form-label\">Thumbnail Image</div>\n            <ImageUpload\n              type=\"thumbnail\"\n              labelOne=\"*Images must be a min of \"\n              labelTwo=\"800x800 px \"\n              labelThree=\"(1:1 ratio)\"\n              placeholder={bitmap}\n              error={formError.thumbnail}\n              value={formData.thumbnail}\n              handleFileUpload={(thumbnail, errorMessage) =>\n                this.handleFormUpdate({ thumbnail })\n              }\n            />\n          </div>\n        </div>\n        {/* <FormInput\n          type=\"text\"\n          placeholder=\"Please add a category tag.\"\n          label=\"Category Tag\"\n          value={formData.categoryTag}\n          error={formError.categoryTag}\n          onInputChange={categoryTag => this.handleFormUpdate({ categoryTag })}\n        /> */}\n\n        {categories && categories.length ? (\n          <FormListbox\n            label=\"Category\"\n            id=\"LB_Cat\"\n            required\n            error={formError.selectedCategories}\n            options={categories}\n            field=\"selectedCategories\"\n            selected={formData.selectedCategories}\n            hint=\"Press [ctrl] + click to select multiple\"\n            handleListbox={(id, field) => this.handleListbox(id, field)}\n            handleSelect={(isSelect, field, options) =>\n              this.handleSelect(isSelect, field, options)\n            }\n          />\n        ) : (\n            \"\"\n          )}\n\n        {holidays && holidays.length ? (\n          <FormListbox\n            label=\"Special Promotions\"\n            id=\"LB_SH\"\n            options={holidays}\n            field=\"selectedSpecialPromotion\"\n            selected={formData.selectedSpecialPromotion}\n            hint=\"Press [ctrl] + click to select multiple\"\n            handleListbox={(id, field) => this.handleListbox(id, field)}\n            handleSelect={(isSelect, field) =>\n              this.handleSelect(isSelect, field, holidays)\n            }\n          />\n        ) : (\n            \"\"\n          )}\n        <FormInput\n          type=\"text\"\n          placeholder=\"Please add an article title.\"\n          label=\"Article Name\"\n          value={formData.articleName}\n          required\n          error={formError.articleName}\n          onInputChange={articleName => this.handleFormUpdate({ articleName })}\n        />\n        <FormInputMultiple\n          label=\"Subheading\"\n          required\n          value={formData.subheading}\n          maxLength={120}\n          error={formError.subheading}\n          onInputChange={subheading => this.handleFormUpdate({ subheading })}\n        />\n\n        <div className=\"form-dates-container\">\n          <div className=\"form-dates-wrapper\">\n            <div className=\"date-wrapper\">\n              <div className=\"form-label\">\n                Publish Date<span>*</span>\n              </div>\n              <FormDate\n                icon=\"calendar\"\n                placeholderText=\"MM/DD/YYYY\"\n                dateFormat=\"MM/dd/yyyy\"\n                value={formData.publishDate}\n                error={formError.publishDate}\n                selected={\n                  formData.publishDate && new Date(formData.publishDate)\n                }\n                onChange={publishDate => this.handleFormUpdate({ publishDate })}\n              />\n            </div>\n            <div className=\"date-wrapper\">\n              <div className=\"form-label\">End Date</div>\n              <FormDate\n                icon=\"calendar\"\n                placeholderText=\"MM/DD/YYYY\"\n                dateFormat=\"MM/dd/yyyy\"\n                value={formData.endDate}\n                selected={formData.endDate && new Date(formData.endDate)}\n                onChange={endDate => this.handleFormUpdate({ endDate })}\n              />\n            </div>\n          </div>\n        </div>\n\n        {componentReady && (\n          <RichTextEditor\n            required\n            label={\"Body\"}\n            initialValue={formData.body}\n            error={formError.body}\n            onInputChange={body => this.handleFormUpdate({ body })}\n            retailerId={this.state.retailerId}\n          />\n        )}\n\n        <div className=\"form-imagegallery-container\">\n          <div className=\"form-label\">Image Gallery</div>\n          <FormFile\n            icon=\"plus\"\n            label=\"Add Image\"\n            // value={[{ name: \"sample.png\" }]}\n            value={formData.imageGallery}\n            handleAttachments={(imageGallery, errorMessage) =>\n              this.handleFormUpdate({ imageGallery })\n            }\n          />\n        </div>\n\n        <div className=\"form-controls-container\">\n          {mode === \"new\" && (\n            <Button\n              color=\"secondary\"\n              onClick={() => (window.location.href = `${redirectUrl}`)}\n            >\n              CANCEL\n            </Button>\n          )}\n          <Button\n            size=\"medium\"\n            color={mode === \"edit\" ? \"secondary\" : \"primary\"}\n            onClick={() => this.validateForm()}\n          // onClick={() => this.saveForm()}\n          >\n            {mode === \"edit\" ? \"SAVE & PREVIEW\" : \"SAVE\"}\n          </Button>\n          {mode === \"edit\" && (\n            <Button\n              disabled={formData.itemId ? false : true}\n              color=\"primary\"\n              onClick={() => this.submitForm()}\n            >\n              SUBMIT\n            </Button>\n          )}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalArticles;\n","import React, { Component, Fragment } from \"react\";\r\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\r\nimport Select from \"react-select\";\r\nimport axios from \"axios\";\r\nimport { getWaitingApprovalUsers } from \"../../../../api/UsersAPI\";\r\nimport Button from \"../../../Base/Button\";\r\nimport {\r\n  disableBodyScroll,\r\n  enableBodyScroll,\r\n} from \"../../../../helper/ScrollHelper\";\r\nimport { addClassLazyload } from \"../../../../helper/AddClassLazyloadHelper\";\r\nimport { scrollToTop } from \"../../../../helper/ScrollHelper\";\r\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\r\nimport ReactPaginate from \"react-paginate\";\r\nimport Popup from \"../../../Base/Popup\";\r\nimport ListItem from \"../../../Base/ListItem\";\r\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\r\nimport CustomFilter from \"../../../Base/CustomFilter\";\r\nimport FilterRadioButton from \"../../../Base/CustomFilter/FilterRadioButton\";\r\nimport NoResultMessage from \"../../../Base/NoResultMessage\";\r\nimport PopupAction from \"../../../Base/Popup/PopupAction\";\r\n\r\nclass FeatureRetailerPortalAuthorisations extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      activePageNum: 0,\r\n      totalPageNumber: null,\r\n      totalResults: null,\r\n      showPagination: false,\r\n      showLoader: true,\r\n      showRejectModal: false,\r\n      showApproveModal: false,\r\n      showFilter: false,\r\n      modalMessage: null,\r\n      hideIcon: true,\r\n      userItems: null,\r\n      selectedItems: null,\r\n      selectedItem: null,\r\n      centreOptions: null,\r\n      filterCentre: \"all\",\r\n      isDocumentReady: false,\r\n      filteredItems: null,\r\n      itemCount: null,\r\n      itemTotal: null,\r\n      retailerLogo: null,\r\n      rejectMessage: \"\",\r\n      paginationRange: 7,\r\n      isDesktop: true,\r\n    };\r\n  }\r\n\r\n  getData = async (params) => {\r\n    this.setState({\r\n      showLoader: true,\r\n    });\r\n\r\n    try {\r\n      const response = await getWaitingApprovalUsers(params);\r\n      if (response && response.data) {\r\n        const { Users, TotalPageNumber, TotalResults } = response.data;\r\n        this.setState(\r\n          {\r\n            userItems: Users,\r\n            filteredItems: Users,\r\n            totalPageNumber: TotalPageNumber.value,\r\n            totalResults: TotalResults.value,\r\n            itemTotal: TotalResults.value,\r\n            showPagination: true,\r\n            showLoader: false,\r\n          },\r\n          () => {\r\n            this.handleChecked();\r\n            this.getFilters();\r\n            this.handleItems(0);\r\n          }\r\n        );\r\n      }\r\n    } catch (e) {\r\n      console.error(\r\n        (\"Get Workbox Items Error: \" + e &&\r\n          e.response &&\r\n          e.response.statusText) ||\r\n        \"\"\r\n      );\r\n    }\r\n  };\r\n\r\n  getOptions = (items, value, addAll, options, all) => {\r\n    if (value && value.indexOf(\"Store\") === 0) {\r\n      value = \"Store\";\r\n    }\r\n    if (value && !items.includes(value)) {\r\n      items.push(value);\r\n    }\r\n    // if (index === this.state.userItems.length - 1) {\r\n    if (addAll) {\r\n      options.push({ value: \"all\", label: all });\r\n      items\r\n        .sort((a, b) => (a > b ? 1 : -1))\r\n        .map((el) => options.push({ value: el, label: el }));\r\n    }\r\n  };\r\n\r\n  getFilters = () => {\r\n    const { userItems } = this.state;\r\n    let centreItems = [];\r\n    let centreOptions = [];\r\n    if (userItems && userItems.length) {\r\n      userItems.map((el, index) => {\r\n        const { Centres } = el;\r\n        if (Centres) {\r\n          const splitCentreArray = Centres.value.split(', ');\r\n          splitCentreArray.forEach((centreVal, cIndex) => {\r\n            this.getOptions(\r\n              centreItems,\r\n              centreVal,\r\n              (index === userItems.length - 1 && cIndex === splitCentreArray.length - 1),\r\n              centreOptions,\r\n              \"All centres\"\r\n            );\r\n          });\r\n        }\r\n      });\r\n      this.setState({ centreOptions });\r\n    }\r\n  };\r\n\r\n  componentDidMount() {\r\n    if (window) {\r\n      this.handleResize();\r\n      window.addEventListener(\"resize\", this.handleResize);\r\n    }\r\n    if (document) {\r\n      this.setState({ isDocumentReady: true });\r\n    }\r\n    let params = {\r\n      pageNumber: 1,\r\n    };\r\n    this.getData(params);\r\n  }\r\n\r\n  handleResize = () => {\r\n    if (window.outerWidth >= 768) {\r\n      this.setState({\r\n        paginationRange: 7,\r\n      });\r\n    } else {\r\n      this.setState({\r\n        paginationRange: 3,\r\n      });\r\n    }\r\n    if (window.outerWidth >= 992) {\r\n      this.setState({\r\n        isDesktop: true,\r\n      });\r\n    } else {\r\n      this.setState({\r\n        isDesktop: false,\r\n      });\r\n    }\r\n  };\r\n\r\n  handleFilter = (filter, id) => {\r\n    this.setState({ [filter]: id, activePageNum: 0 }, () => {\r\n      this.uncheckAll();\r\n      this.handleItems(0);\r\n      addClassLazyload(\"approvals-item-container\");\r\n      scrollToTop();\r\n    });\r\n  };\r\n\r\n  handleItems = (selected) => {\r\n    const {\r\n      filterCentre,\r\n      userItems,\r\n      totalPageNumber,\r\n    } = this.state;\r\n\r\n    let unfiltered = userItems;\r\n    if (unfiltered) {\r\n      if (filterCentre !== \"all\") {\r\n        unfiltered = unfiltered.filter(\r\n          (item) => {\r\n            if (!item || !item.Centres) {\r\n              return false;\r\n            }\r\n            const splitCentreArray = item.Centres.value.split(', ');\r\n            let hasFilteredCentre = false;\r\n            splitCentreArray.forEach(itemCentre => {\r\n              if (itemCentre === filterCentre) {\r\n                hasFilteredCentre = true;\r\n              }\r\n            });\r\n            return hasFilteredCentre;\r\n          }\r\n        );\r\n      }\r\n      const currentPage = selected + 1;\r\n      const until = currentPage * 10;\r\n      const from = until - 10;\r\n      const list = unfiltered.slice(from, until);\r\n\r\n      const listLength = unfiltered && unfiltered.length;\r\n      let itemCount = from + 1 + \" – \" + until;\r\n      if (currentPage == totalPageNumber || listLength < 11) {\r\n        itemCount = from + 1 + \" – \" + listLength;\r\n      }\r\n      if (listLength == 1) {\r\n        itemCount = 1;\r\n      }\r\n\r\n      this.setState(\r\n        {\r\n          filteredItems: list,\r\n          itemCount,\r\n          totalPageNumber: listLength ? Math.ceil(listLength / 10) : null,\r\n          itemTotal: listLength || null,\r\n        },\r\n        () => this.handleChecked()\r\n      );\r\n    }\r\n  };\r\n\r\n  uncheckAll = () => {\r\n    let checks = document.querySelectorAll(\r\n      \".approvals-item-container input:checked\"\r\n    );\r\n    for (let i = 0; i < checks.length; i++) {\r\n      checks[i].checked = false;\r\n    }\r\n    this.setState({ selectedItem: null, selectedItems: null });\r\n  };\r\n\r\n  handleSelected = (value, checked) => {\r\n    let items = this.state.selectedItems || [];\r\n    if (checked) {\r\n      items.push(value);\r\n    } else {\r\n      items.map((item, index) =>\r\n        item === value ? items.splice(index, 1) : null\r\n      );\r\n    }\r\n    this.setState({ selectedItems: items });\r\n  };\r\n\r\n  handleChecked = () => {\r\n    let items = this.state.selectedItems || [];\r\n    if (items && items.length) {\r\n      let checks = document.querySelectorAll(\".approvals-item-container input\");\r\n      for (let i = 0; i < checks.length; i++) {\r\n        let isMatch;\r\n        items.map((item) => {\r\n          if (item === checks[i].value) {\r\n            isMatch = true;\r\n          }\r\n        });\r\n        if (isMatch) {\r\n          checks[i].checked = true;\r\n        } else checks[i].checked = false;\r\n      }\r\n    }\r\n  };\r\n\r\n  renderRejectModal = () => {\r\n    disableBodyScroll();\r\n    const { selectedItems, selectedItem, rejectMessage } = this.state;\r\n    let itemCount = selectedItems && selectedItems.length;\r\n    let items = selectedItems;\r\n    if (selectedItem && selectedItem.length) {\r\n      itemCount = selectedItem.length;\r\n      items = selectedItem;\r\n    }\r\n    const message =\r\n      \"You’re about to reject \" +\r\n      itemCount +\r\n      \" piece\" +\r\n      (itemCount === 1 ? \"\" : \"s\") +\r\n      \" of user request.<br>\" +\r\n      \"This cannot be undone.\";\r\n    return (\r\n      <Popup>\r\n        <PopupAction\r\n          label={{ value: `Are you sure?` }}\r\n          description={{ value: message }}\r\n          icon=\"trash-2\"\r\n          iconBgColor=\"#d83b42\"\r\n          secondaryBtn=\"Cancel\"\r\n          secondaryBtnOnClick={() =>\r\n            this.setState(\r\n              {\r\n                showRejectModal: false,\r\n                selectedItem: null,\r\n                rejectMessage: \"\",\r\n              },\r\n              () => enableBodyScroll()\r\n            )\r\n          }\r\n          primaryBtn=\"Reject\"\r\n          primaryBtnOnClick={() => this.rejectItems(items)}\r\n          primaryBtnColor=\"red\"\r\n          withRejectMessage={false}\r\n        />\r\n      </Popup>\r\n    );\r\n  };\r\n\r\n  renderApproveModal = () => {\r\n    const { modalMessage, hideIcon } = this.state;\r\n    return (\r\n      <SuccessMessage\r\n        label={modalMessage}\r\n        hideIcon={hideIcon}\r\n        handleShowSuccess={(showApproveModal) => {\r\n          this.setState({\r\n            showApproveModal,\r\n          });\r\n        }}\r\n      />\r\n    );\r\n  };\r\n\r\n  rejectItems = async (items) => {\r\n    const jsonData = { usernames: items };\r\n    const url = \"/api/sitecore/user/RejectUser\";\r\n    this.setState({\r\n      rejectMessage: \"\",\r\n    });\r\n\r\n    try {\r\n      // let response = await BaseURL.post(url, formData);\r\n      let response = await axios({\r\n        method: \"POST\",\r\n        url,\r\n        headers: { 'Content-Type': 'application/json' },\r\n        data: jsonData,\r\n      });\r\n      if (response && response.data) {\r\n        const { IsSuccess = null, Message = null } = response.data;\r\n        if (IsSuccess && IsSuccess.value) {\r\n          this.setState(\r\n            {\r\n              showRejectModal: false,\r\n              hideIcon: true,\r\n              modalMessage: Message.value,\r\n              showApproveModal: true,\r\n              showLoader: true,\r\n            },\r\n            () => {\r\n              enableBodyScroll();\r\n              this.resetState();\r\n            }\r\n          );\r\n        } else {\r\n          this.setState(\r\n            {\r\n              showRejectModal: false,\r\n              hideIcon: true,\r\n              modalMessage: Message.value,\r\n              showApproveModal: true,\r\n            },\r\n            () => {\r\n              enableBodyScroll();\r\n            }\r\n          );\r\n        }\r\n      } else {\r\n        this.setState(\r\n          {\r\n            showRejectModal: false,\r\n            hideIcon: true,\r\n            modalMessage: \"Something went wrong. Please try again.\",\r\n            showApproveModal: true,\r\n          },\r\n          () => {\r\n            enableBodyScroll();\r\n          }\r\n        );\r\n      }\r\n      scrollToTop(true);\r\n    } catch (e) {\r\n      this.setState(\r\n        {\r\n          showRejectModal: false,\r\n          hideIcon: true,\r\n          modalMessage: \"Something went wrong. Please try again.\",\r\n          showApproveModal: true,\r\n        },\r\n        () => {\r\n          enableBodyScroll();\r\n          scrollToTop(true);\r\n        }\r\n      );\r\n    }\r\n  };\r\n\r\n  approveItems = async () => {\r\n    const { selectedItems, selectedItem } = this.state;\r\n    let items = selectedItems;\r\n    if (selectedItem && selectedItem.length) {\r\n      items = selectedItem;\r\n    }\r\n    const jsonData = { usernames: items };\r\n    const url = \"/api/sitecore/user/ApproveUser\";\r\n\r\n    try {\r\n      // let response = await BaseURL.post(url, formData);\r\n      let response = await axios({\r\n        method: \"POST\",\r\n        url,\r\n        headers: { 'Content-Type': 'application/json' },\r\n        data: jsonData,\r\n      });\r\n      if (response && response.data) {\r\n        const { IsSuccess = null, Message = null } = response.data;\r\n        console.log(response);\r\n        if (IsSuccess && IsSuccess.value) {\r\n          this.setState(\r\n            {\r\n              modalMessage: Message.value,\r\n              showApproveModal: true,\r\n              hideIcon: false,\r\n              showLoader: true,\r\n            },\r\n            () => this.resetState()\r\n          );\r\n        } else {\r\n          this.setState({\r\n            modalMessage: Message.value,\r\n            showApproveModal: true,\r\n          });\r\n        }\r\n      } else {\r\n        this.setState({\r\n          modalMessage: \"Something went wrong. Please try again.\",\r\n          showApproveModal: true,\r\n        });\r\n      }\r\n      scrollToTop(true);\r\n    } catch (e) {\r\n      this.setState({\r\n        modalMessage: \"Something went wrong. Please try again.\",\r\n        showApproveModal: true,\r\n      },\r\n        () => scrollToTop(true)\r\n      );\r\n    }\r\n  };\r\n\r\n  resetState = () => {\r\n    this.setState(\r\n      {\r\n        activePageNum: 0,\r\n        showFilter: false,\r\n        selectedItems: null,\r\n        selectedItem: null,\r\n        centreOptions: null,\r\n        filterCentre: \"all\",\r\n        modalIcon: true,\r\n        filteredItems: null,\r\n        itemCount: null,\r\n        itemTotal: null,\r\n      },\r\n      () => {\r\n        let params = {\r\n          pageNumber: 1,\r\n        };\r\n        setTimeout(() => this.getData(params), 1000);\r\n      }\r\n    );\r\n  };\r\n\r\n  handlePaginationClick = (data) => {\r\n    this.setState(\r\n      {\r\n        activePageNum: data.selected,\r\n      },\r\n      () => scrollToTop()\r\n    );\r\n    this.handleItems(data.selected);\r\n    addClassLazyload(\"approvals-item-container\");\r\n  };\r\n\r\n  renderPagination = () => {\r\n    const { totalPageNumber, paginationRange } = this.state;\r\n    return (\r\n      totalPageNumber &&\r\n      totalPageNumber > 1 && (\r\n        <div className=\"react-paginate-wrapper\">\r\n          <ReactPaginate\r\n            previousLabel={\r\n              <div>\r\n                <i className=\"icon icon-chevron-outline-left\" />\r\n                <span>Previous</span>\r\n              </div>\r\n            }\r\n            nextLabel={\r\n              <div>\r\n                <i className=\"icon icon-chevron-outline-right\" />\r\n                <span>Next</span>\r\n              </div>\r\n            }\r\n            breakLabel={\"...\"}\r\n            breakClassName={\"break-me\"}\r\n            pageCount={totalPageNumber}\r\n            marginPagesDisplayed={0}\r\n            pageRangeDisplayed={paginationRange}\r\n            forcePage={this.state.activePageNum}\r\n            onPageChange={this.handlePaginationClick}\r\n            containerClassName={\"pagination\"}\r\n            subContainerClassName={\"pages pagination\"}\r\n            activeClassName={\"active\"}\r\n          />\r\n        </div>\r\n      )\r\n    );\r\n  };\r\n\r\n  renderItems = () => {\r\n    const { filteredItems, selectedItems } = this.state;\r\n    return (\r\n      <div className=\"approvals-item-container\">\r\n        {filteredItems && filteredItems.length ? (\r\n          filteredItems.map((item, index) => {\r\n            const {\r\n              UserName,\r\n              FullName,\r\n              Centres,\r\n              ProfilePicture,\r\n              Retailers,\r\n              Email\r\n            } = item;\r\n            let isSelected = false;\r\n            if (selectedItems && selectedItems.length) {\r\n              selectedItems.map((selected) =>\r\n                selected === UserName.value ? (isSelected = true) : null\r\n              );\r\n            }\r\n\r\n            let title = '';\r\n            if (FullName && FullName.value) {\r\n              title = FullName.value;\r\n            } else if (Retailers && Retailers.value && Centres && Centres.value) {\r\n              title = Retailers.value + \" \" + Centres.value;\r\n            }\r\n\r\n            return (\r\n              <ListItem\r\n                key={`itemId-${index}`}\r\n                isSelected={isSelected}\r\n                noActionBtn={true}\r\n                logoSrc={\r\n                  ProfilePicture && ProfilePicture.value && ProfilePicture.value.src\r\n                    ? ProfilePicture.value.src\r\n                    : logoPlaceholder\r\n                }\r\n                label={{\r\n                  value: (\r\n                    <Fragment>\r\n                      <Text field={Retailers} />\r\n                      {Centres && Centres.value && Retailers && Retailers.value && \" – \"}\r\n                      <Text field={Centres} />\r\n                    </Fragment>\r\n                  ),\r\n                }}\r\n                title={{\r\n                  value: (\r\n                    <Fragment>\r\n                      <Text field={FullName} />\r\n                    </Fragment>\r\n                  ),\r\n                }}\r\n                description={{\r\n                  value:\r\n                    Email && Email.value\r\n                      ? Email.value\r\n                      : null,\r\n                }}\r\n                btnOne={{\r\n                  icon: \"thumbs-up\",\r\n                  color: \"primary\",\r\n                  tooltip: \"Approve\",\r\n                }}\r\n                btnOneOnClick={() => {\r\n                  this.setState(\r\n                    {\r\n                      selectedItem: [UserName.value],\r\n                    },\r\n                    () => this.approveItems()\r\n                  );\r\n                }}\r\n                btnTwo={{\r\n                  icon: \"thumbs-down\",\r\n                  color: \"red\",\r\n                  tooltip: \"Reject\",\r\n                }}\r\n                btnTwoOnClick={() =>\r\n                  this.setState({\r\n                    selectedItem: [UserName.value],\r\n                    showRejectModal: true,\r\n                  })\r\n                }\r\n                checkboxValue={UserName.value}\r\n                checkboxOnChange={(value, checked) =>\r\n                  this.handleSelected(value, checked)\r\n                }\r\n              />\r\n            );\r\n          })\r\n        ) : (\r\n            <NoResultMessage label=\"No approvals\" />\r\n          )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  handleHeaderIconClick = (clearItem) => {\r\n    if (clearItem) {\r\n      this.uncheckAll();\r\n    } else {\r\n      const leftNavWrapper = document.querySelector(\".left-nav\");\r\n      const topNavWrapper = document.querySelector(\".top-nav .top-nav-wrapper\");\r\n\r\n      if (leftNavWrapper && topNavWrapper) {\r\n        leftNavWrapper.classList.add(\"show-nav-mobile\");\r\n        topNavWrapper.classList.add(\"show-nav-mobile\");\r\n      }\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const {\r\n      selectedItems,\r\n      showPagination,\r\n      showLoader,\r\n      showRejectModal,\r\n      showApproveModal,\r\n      showFilter,\r\n      isDocumentReady,\r\n      itemTotal,\r\n      totalResults,\r\n      centreOptions,\r\n      itemCount,\r\n      isDesktop,\r\n      filterCentre,\r\n    } = this.state;\r\n    const hasSelection = selectedItems && selectedItems.length;\r\n    return (\r\n      <div className={`authorisations-container ${showApproveModal ? \"has-success-message\" : \"\"}`}>\r\n        <div className=\"approvals-header\">\r\n          <div className=\"approvals-header-icon\">\r\n            <button onClick={() => this.handleHeaderIconClick(hasSelection)}>\r\n              <i className={`icon icon-${hasSelection ? \"close\" : \"menu\"}`} />\r\n            </button>\r\n            <div className=\"h1-regular\">\r\n              {hasSelection ? selectedItems.length + \" selected\" : \"Authorisations\"}\r\n            </div>\r\n          </div>\r\n          <div className=\"approvals-header-actions\">\r\n            {hasSelection ? (\r\n              <Fragment>\r\n                <div\r\n                  className=\"header-cancel\"\r\n                  onClick={() => this.uncheckAll()}\r\n                >\r\n                  Cancel\r\n                </div>\r\n                <Button\r\n                  color=\"primary\"\r\n                  size=\"small\"\r\n                  className=\"approvals-approve-btn\"\r\n                  onClick={() =>\r\n                    this.setState({ selectedItem: null }, () =>\r\n                      this.approveItems()\r\n                    )\r\n                  }\r\n                >\r\n                  <span className=\"d-none d-lg-block\">Approve</span>\r\n                  <i className=\"icon icon-thumbs-up\" />\r\n                </Button>\r\n\r\n                <Button\r\n                  color=\"red\"\r\n                  size=\"small\"\r\n                  className=\"approvals-reject-btn\"\r\n                  onClick={() =>\r\n                    this.setState({\r\n                      selectedItem: null,\r\n                      showRejectModal: true,\r\n                    })\r\n                  }\r\n                >\r\n                  <span className=\"d-none d-lg-block\">Reject</span>\r\n                  <i className=\"icon icon-thumbs-down\" />\r\n                </Button>\r\n              </Fragment>\r\n            ) : (\r\n                \"\"\r\n              )}\r\n            {!showFilter && !showLoader && totalResults && totalResults > 1 && (\r\n              <Button\r\n                color=\"secondary\"\r\n                className=\"approvals-filter-btn\"\r\n                size=\"small\"\r\n                onClick={() => this.setState({ showFilter: true })}\r\n              >\r\n                Filter\r\n              </Button>\r\n            )}\r\n          </div>\r\n        </div>\r\n        {showRejectModal && this.renderRejectModal()}\r\n        {isDocumentReady && (\r\n          <CustomFilter\r\n            showFilter={showFilter}\r\n            onCloseFilter={() => this.setState({ showFilter: false })}\r\n          >\r\n            <div className=\"custom-filter__group\">\r\n              <div className=\"custom-filter__label\">Filter by centre</div>\r\n              {centreOptions && centreOptions.length ? (\r\n                centreOptions.length < 5 && isDesktop ? (\r\n                  <FilterRadioButton\r\n                    defaultSelected={filterCentre}\r\n                    options={centreOptions}\r\n                    radioGroupName=\"approvalCentre\"\r\n                    onChange={(id) => this.handleFilter(\"filterCentre\", id)}\r\n                    plain\r\n                  />\r\n                ) : (\r\n                    <Select\r\n                      onChange={(option) => {\r\n                        this.handleFilter(\"filterCentre\", option.value);\r\n                      }}\r\n                      defaultValue={\r\n                        filterCentre === \"all\"\r\n                          ? centreOptions[0]\r\n                          : { value: filterCentre, label: filterCentre }\r\n                      }\r\n                      options={centreOptions}\r\n                      theme={(theme) => ({\r\n                        ...theme,\r\n                        colors: {\r\n                          ...theme.colors,\r\n                          primary: \"#536760\",\r\n                          primary25: \"#f5f5f6\",\r\n                        },\r\n                      })}\r\n                      isSearchable={false}\r\n                      maxMenuHeight={200}\r\n                      menuPlacement=\"auto\"\r\n                    />\r\n                  )\r\n              ) : (\r\n                  \"\"\r\n                )}\r\n            </div>\r\n          </CustomFilter>\r\n        )}\r\n        {showApproveModal && this.renderApproveModal()}\r\n        {!showLoader && this.renderItems()}\r\n        {!showLoader && itemTotal && itemCount && (\r\n          <div className=\"list-count\">\r\n            Showing {itemCount} of {itemTotal}\r\n          </div>\r\n        )}\r\n        {showLoader && (\r\n          <div className=\"loader-wrapper container\">\r\n            <div className=\"loader\" />\r\n          </div>\r\n        )}\r\n        {showPagination && <div>{this.renderPagination()}</div>}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default FeatureRetailerPortalAuthorisations;\r\n","import BaseURL from \"./BaseURL\";\r\n\r\nconst isDev = process.env.REACT_APP_DEV || false;\r\n\r\nexport const getUsers = (params) => {\r\n  const endpoint = isDev ? \"/GetUsers\" : \"/user/GetUsers\";\r\n   return BaseURL.get(endpoint, { params: { ...params } });\r\n};\r\n\r\nexport const deleteUser = (params) => {\r\n  return BaseURL.get(\"/user/DeleteUser\", { params: { ...params } });\r\n};\r\n\r\nexport const getRetailerList = () => {\r\n  const endpoint = isDev ? \"/GetRetailerList\" : \"/user/GetRetailerList\";\r\n  return BaseURL.get(endpoint);\r\n\r\n};\r\n\r\nexport const getCreateEditUser = (params) => {\r\n  const endpoint = isDev ? \"/GetCreateEditUser\" : \"/user/GetCreateEditUser\";\r\n   return BaseURL.get(endpoint, { params: { ...params } });\r\n};\r\n\r\nexport const getWaitingApprovalUsers = (params) => {\r\n  const endpoint = \"/user/GetWaitingApprovalUsers\";\r\n   return BaseURL.get(endpoint, { params: { ...params } });\r\n};\r\n","import BaseURL from \"./BaseURL\";\n\n\nexport const getDashboardCorrespondences = params => {\n  return BaseURL.get(\"/dashboard/GetDashboardCorrespondences\", { params: { ...params } });\n};\n\nexport const getDashboardStoreInfos = params => {\n  return BaseURL.get(\"/dashboard/GetDashboardStoreInfos\", { params: { ...params } });\n};\n\nexport const getDashboardEvents = params => {\n  return BaseURL.get(\"/dashboard/GetDashboardEvents\", { params: { ...params } });\n};\n\nexport const getDashboardOffers = params => {\n  return BaseURL.get(\"/dashboard/GetDashboardOffers\", { params: { ...params } });\n};\n\nexport const getDashboardArticles = params => {\n  return BaseURL.get(\"/dashboard/GetDashboardArticles\", { params: { ...params } });\n};","import BaseURL, {DevURL}  from \"./BaseURL\";\n\nconst isDev = process.env.REACT_APP_DEV || false;\n\nexport const getEvents = (params) => {\n  const endpoint = isDev ? \"/GetEvents\" : \"/store/GetEvents\";\n  return BaseURL.get(endpoint, { params: { ...params } });\n;\n};\n\nexport const getOffers = (params) => {\n  const endpoint = isDev ? \"/GetOffers\" : \"/store/GetOffers\";\n  return BaseURL.get(endpoint, { params: { ...params } });\n};\n\nexport const deletePromotion = params => {\n  return BaseURL.get(\"/store/DeletePromotion\", { params: { ...params } });\n};\n\nexport const createPromotion = params => {\n  return BaseURL.get(\"/store/CreatePromotion\", { params: { ...params } });\n};\n\nexport const editPromotion = async () => {\n  //   const response = await BaseURL.get(\"/store/EditPromotion\");\n};\n\nexport const savePromotion = async () => {\n  //   const response = await BaseURL.post(\"/store/SavePromotion\");\n};\n\nexport const getStoreInfo = params => {\n  const endpoint = isDev ? \"/GetStoreInfo\" : \"/store/GetStoreInfo\";\n   return BaseURL.get(endpoint, { params: { ...params } });\n};\n\nexport const updateStoreInfo = params => {\n  // return BaseURL.get(\"/store/UpdateStoreInfo\", { params: { ...params } });\n  // return DevURL.get(\"/UpdateStoreInfo\", { params: { ...params } });\n};\n","import React, { Component, Fragment } from \"react\";\n\nclass FormSelect extends Component {\n    constructor(props) {\n        super(props);\n    }\n\n    render() {\n        const {\n            label = null,\n            required = null,\n            disabled = null,\n            error = null,\n            onChange = null,\n            options = [],\n            defaultValue = null,\n            noOptionsMessage = null,\n            fullWidth = null,\n            placeholder = null,\n        } = this.props || {}\n\n        return (\n            <Fragment>\n                <div className={`form-group form__select\n                ${error ? \"has-error\" : \"\"}\n                ${fullWidth ? \"is-full-width\" : \"\"}\n                `}>\n                    {(label || required) &&\n                        <label className=\"form__label\">\n                            {label}\n                            {required &&\n                                <span className=\"form__asterisk\">*</span>\n                            }\n                        </label>\n                    }\n                    {(options && options.length > 0) ?\n                        <div className={`form__select--details\n                        ${disabled ? \"disabled\" : \"\"}\n                        `}>\n                            <select className=\"form__select--field\"\n                                onChange={e => onChange(e.target.value)}\n                                disabled={disabled}\n                                defaultValue={defaultValue}\n                            >\n                                {!defaultValue &&\n                                    <option value={\"\"} hidden>\n                                        {placeholder ? placeholder : \"Select your option\"}\n                                    </option>\n                                }\n                                {options.map((item, index) => {\n                                    const {\n                                        Id: id = null,\n                                        Name: name = null,\n                                    } = item.fields || item;\n                                    let optionLayout = \"\"\n\n                                    if (id && id.value && name && name.value) {\n                                        optionLayout =\n                                            <option value={id.value}\n                                                key={id.value + index}\n                                            >\n                                                {name.value}\n                                            </option>\n                                    }\n                                    return optionLayout;\n                                })\n                                }\n                            </select>\n                        </div>\n                        : <div className=\"form__select--no-option\">\n                            {noOptionsMessage ? noOptionsMessage : \"No available option\"}\n                        </div>\n                    }\n                    <div className=\"form__validation-message\">\n                        {error}\n                    </div>\n                </div>\n            </Fragment >\n        );\n    }\n}\n\nexport default FormSelect;\n","import BaseURL, { DevURL } from \"./BaseURL\";\n\nconst isDev = process.env.REACT_APP_DEV || false;\n\nexport const getStorefrontData = params => {\n  const endpoint = isDev ? \"/GetStorefrontData\" : \"/store/GetStorefrontData\";\n   return BaseURL.get(endpoint, { params: { ...params } });\n\n};\n\nexport const getCarParkList = params => {\n  const endpoint = isDev ? \"/GetStorefrontData\" : \"/store/GetCarParkList\";\n   return BaseURL.get(endpoint, { params: { ...params } });\n\n};\n\nexport const getBookingIcon = params => {\n  const endpoint = isDev ? \"/GetStorefrontData\" : \"/store/GetBookingIcons\";\n   return BaseURL.get(endpoint, { params: { ...params } });\n\n};\n\nexport const getCategoryList = params => {\n  const endpoint = isDev ? \"/GetStorefrontData\" : \"/store/GetCategoryList\";\n  return BaseURL.get(endpoint, { params: { ...params } });\n\n};","// import { get } from \"lodash\";\n// import { AllHtmlEntities } from \"html-entities\"\nimport { AllHtmlEntities as Entities } from \"html-entities\";\n\nconst isEmpty = (value) => {\n  return value ? true : false;\n};\n\nexport const validate = (state, removeValidate) => {\n  let list = [\n    {\n      name: \"selectedStore\",\n      value: state.selectedStore,\n      rules: \"required\",\n    },\n    {\n      name: \"promotionName\",\n      value: state.promotionName,\n      rules: \"required\",\n    },\n    {\n      name: \"startDate\",\n      value: state.startDate,\n      rules: \"required\",\n    },\n    {\n      name: \"endDate\",\n      value: state.endDate,\n      rules: \"required\",\n    },\n    {\n      name: \"heroImage\",\n      value: state.heroImage,\n      rules: \"required\",\n    },\n  ];\n\n  let result = {};\n  list.forEach((element) => {\n    if (removeValidate.indexOf(element.name) > -1) {\n      return;\n    }\n    if (element.rules === \"required\") {\n      if (!isEmpty(element.value)) {\n        result[element.name] = \"Required\";\n      }\n    }\n\n    //Other Validation Rules\n  });\n  return result;\n};\n\n// export const formDataFields = {\n//   itemId: null,\n//   selectedStore: null,\n//   categoryTag: \"\",\n//   promotionName: \"\",\n//   summary: \"\",\n//   startDate: \"\",\n//   endDate: \"\",\n//   location: \"\",\n//   schedule: \"\",\n//   duration: \"\",\n//   capacity: \"\",\n//   price: \"\",\n//   description: \"\",\n//   bookNowLink: \"\",\n//   bookNowLinkCaption: \"\",\n//   selectedCategories: [],\n//   heroImage: \"\",\n//   thumbnail: \"\",\n//   imageGalleryChecker: [],\n//   imageGallery: []\n// };\n\n// export const setPromotionData = data => {\n//   return {\n//     itemId: data.ItemId.value,\n//     heroImage: get(data, \"HeroImage.value.src\", null),\n//     thumbnail: get(data, \"Thumbnail.value.src\", null),\n//     promotionName: data.Name.value,\n//     duration: data.Duration.value,\n//     capacity: data.Capacity.value,\n//     location: data.Location.value,\n//     categoryTag: data.CategoryTag.value,\n//     summary: data.Summary.value,\n//     startDate: data.StartDate.value,\n//     endDate: data.EndDate.value,\n//     schedule: data.Schedule.value,\n//     price: data.Price.value,\n//     description: data.Description.value,\n//     bookNowLink: data.BookNowLink.value,\n//     bookNowLinkCaption: data.BookNowLinkCaption.value,\n//     selectedCategories: data.LinkCategories.map(\n//       el => el.fields.CategoryId.value\n//     ),\n//     imageGalleryChecker: data.ImageGallery.map(el => el.fields.Id.value),\n//     imageGallery: data.ImageGallery.map(el => {\n//       return { name: el.fields.Name.value, id: el.fields.Id.value };\n//     })\n//   };\n// };\n\nexport const buildFormData = (postData) => {\n  const formData = new FormData();\n  const entities = new Entities();\n  Object.keys(postData).forEach(function (key) {\n    // if ((key === \"startDate\" || key === \"endDate\") && postData[key]) {\n    //   return formData.append(key, new Date(postData[key]).toISOString());\n    // }\n    if (key === \"RetailerDescription\" || key === \"StorefrontDescription\") {\n      formData.append(key, entities.encode(postData[key]));\n      return;\n    }\n\n    if (key === \"ImageGalleryChecker\") {\n      if (postData[\"ImageGallery\"].length > 0) {\n        return postData[\"ImageGallery\"].map((item) =>\n          formData.append(key, item.id ? item.id : null)\n        );\n      }\n      return;\n    }\n\n    if (key === \"ImageGallery\") {\n      if (postData[key].length > 0) {\n        let newimageGallery = postData[key].filter(item => item.size)\n        return newimageGallery.map((file) => formData.append(key, file));\n      }\n      return;\n    }\n\n    if (key === \"Categories\" && postData[key].length) {\n      return postData[key].map((category) => formData.append(key, category));\n    }\n    // if (key === \"selectedCategories\" && postData[key].length) {\n    //   return postData[key].map(category => formData.append(key, category));\n    // }\n    // if (key === \"RetailerDetails\") {\n    //   let retailerData = {};\n    //   Object.keys((postData[key])).forEach(function(rkey) {\n    //     const rData = postData[key];\n    //     if (rkey === \"LogoImage\" || rkey === \"HeroImage\") {\n    //       if (typeof rData[rkey] !== \"string\") {\n    //         return formData.append(rkey, rData[rkey]);\n    //       }\n    //       return;\n    //     } else {\n    //       retailerData[rkey] = rData[rkey]\n    //       // retailerData.push({rData[rkey]});\n    //     }\n    //     // return formData.append(key, postData[key]);\n    //   })\n    //   return formData.append(key, retailerData);\n    // }\n    if (key === \"LogoImage\" || key === \"HeroImage\") {\n      if (typeof postData[key] !== \"string\") {\n        return formData.append(key, postData[key]);\n      }\n      return;\n    }\n\n    if (key === \"StorefrontHeroImage\") {\n      if (postData[key]) {\n        return formData.append(key, postData[key]);\n      } else {\n        return formData.append(\"ClearStorefrontHeroImage\", true);\n      }\n    }\n    return formData.append(key, postData[key]);\n  });\n\n  return formData;\n};\n","import React from \"react\";\nimport axios from \"axios\";\nimport Loadable from \"react-loadable\";\nimport TagManager from \"react-gtm-module\";\nimport { TimePicker } from \"antd\";\nimport \"antd/dist/antd.css\";\nimport moment from \"moment\";\nimport { get } from \"lodash\";\n\nimport FormInput from \"../../../Base/FormInput\";\nimport Checkbox from \"../../../Base/Checkbox\";\nimport FormSelect from \"../../../Base/FormSelect\";\nimport FormCheckbox from \"../../../Base/FormCheckbox\";\nimport FormImageGallery from \"../../../Base/FormImageGallery\";\nimport RadioButton from \"../../../Base/RadioButton\";\nimport FormImageUpload from \"../../../Base/FormImageUpload\";\nimport FormListbox from \"../../../Base/FormListbox\";\nimport FormErrorMessage from \"../../../Base/FormErrorMessage\";\nimport PopupPreview from \"../../../Base/Popup/PopupPreview\";\nimport FormListCheckbox from \"../../../Base/FormListCheckbox\";\n\nimport {\n  getStorefrontData,\n  getCarParkList,\n  getCategoryList\n} from \"../../../../api/StorefrontAPI\";\nimport { buildFormData } from \"../../../../helper/StorefrontHelper\";\nimport {\n  disableBodyScroll,\n  enableBodyScroll,\n} from \"../../../../helper/ScrollHelper\";\n\n//getStoreData\n//getRetailerData\n// import getStorefrontDataJson from \"./getStoreData.json\";\n// import getCarParkListJson from \"./getCarParkListJson.json\";\n// import getCategoryListJson from \"./getCategoryListJson.json\";\n\nconst RichTextEditor = Loadable({\n  loader: () => import(\"../../../Base/RichTextEditor\"),\n  loading: () => null,\n});\n\nclass FormStoreFront extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      formData: {\n        StoreID: \"\",\n        Name: \"\",\n        StorefrontDescription: \"\",\n        ContactNumber: \"\",\n        MenuUrl: \"\",\n        BestParking: \"\",\n        AcceptsAfterPay: false,\n        AcceptsGiftCards: false,\n        IsKidsFriendly: false,\n        IsVegetarian: false,\n        RetailerName: \"\",\n        RetailerDescription: \"\",\n        Website: \"\",\n        Instagram: \"\",\n        Facebook: \"\",\n        LogoImage: null,\n        HeroImage: null,\n        ImageGallery: [],\n        ImageGalleryChecker: [],\n        MondayOpeningHours: \"\",\n        MondayClosingHours: \"\",\n        MondaySecondaryOpeningHours: \"\",\n        MondaySecondaryClosingHours: \"\",\n        MondayIsClosed: \"\",\n        TuesdayOpeningHours: \"\",\n        TuesdayClosingHours: \"\",\n        TuesdaySecondaryOpeningHours: \"\",\n        TuesdaySecondaryClosingHours: \"\",\n        TuesdayIsClosed: \"\",\n        WednesdayOpeningHours: \"\",\n        WednesdayClosingHours: \"\",\n        WednesdaySecondaryOpeningHours: \"\",\n        WednesdaySecondaryClosingHours: \"\",\n        WednesdayIsClosed: \"\",\n        ThursdayOpeningHours: \"\",\n        ThursdayClosingHours: \"\",\n        ThursdaySecondaryOpeningHours: \"\",\n        ThursdaySecondaryClosingHours: \"\",\n        ThursdayIsClosed: \"\",\n        FridayOpeningHours: \"\",\n        FridayClosingHours: \"\",\n        FridaySecondaryOpeningHours: \"\",\n        FridaySecondaryClosingHours: \"\",\n        FridayIsClosed: \"\",\n        SaturdayOpeningHours: \"\",\n        SaturdayClosingHours: \"\",\n        SaturdaySecondaryOpeningHours: \"\",\n        SaturdaySecondaryClosingHours: \"\",\n        SaturdayIsClosed: \"\",\n        SundayOpeningHours: \"\",\n        SundayClosingHours: \"\",\n        SundaySecondaryOpeningHours: \"\",\n        SundaySecondaryClosingHours: \"\",\n        SundayIsClosed: \"\",\n        StorefrontHeroImage: null,\n        Categories: [],\n      },\n      StoreOpeningHours: \"\",\n      RetailerType: \"\",\n      formType: null,\n      componentReady: false,\n      sourceList: [\n        {\n          Id: {\n            value: \"Centre\",\n          },\n          Name: {\n            value: \"Match \" + props.centreName + \" Shopping Centre hours\",\n          },\n        },\n        {\n          Id: {\n            value: \"Store\",\n          },\n          Name: {\n            value: \"Set custom hours\",\n          },\n        },\n      ],\n      openingHoursList: [\n        {\n          Id: {\n            value: \"IsOpeningSoon\",\n          },\n          Name: {\n            value: \"Opening soon\",\n          },\n        },\n        {\n          Id: {\n            value: \"IsTemporarilyClosed\",\n          },\n          Name: {\n            value: \"Temporarily closed\",\n          },\n        },\n        {\n          Id: {\n            value: \"Open\",\n          },\n          Name: {\n            value: \"Open\",\n          },\n        },\n      ],\n      carparkList: [],\n      iconList: [],\n      categoryList: [],\n      modalContent: null,\n      showImageGallery: false,\n      disableBtn: true,\n      showSaveHint: false,\n      imageGalleryHolder: [],\n      showErrorMessage: false,\n      formErrorMessage: \"\",\n      isStoreDataReady: false,\n      showModal: false,\n    };\n  }\n\n  componentDidMount() {\n    const { storeId, centreName } = this.props;\n    this.setState(\n      {\n        componentReady: true,\n      },\n      () => this.getStoreData(storeId)\n    );\n    this.getCategoryData();\n    if (centreName) {\n      this.getCarParkData(centreName);\n    }\n    this.handleFormData();\n  }\n\n  decodeHTML = (html) => {\n    if (document) {\n      var txt = document.createElement(\"textarea\");\n      txt.innerHTML = html;\n      return txt.value;\n    }\n  };\n\n  getStoreData = async (storeId) => {\n    try {\n      // const $this = this;\n      // let response = {\n      //   data: getStorefrontDataJson\n      // }\n      // if (response.status !== 200 && response.data) {\n      let response = await getStorefrontData({ storeId });\n      const $this = this;\n      if (response.status === 200 && response.data) {\n        const ImageGallery = get(response.data, \"ImageGallery\", []);\n        const Categories = get(response.data, \"Categories\", []);\n        this.setState({\n          formData: {\n            Name: get(response.data, \"Name.value\", null),\n            StorefrontDescription: $this.decodeHTML(\n              get(response.data, \"Description.value\", \"\")\n            ),\n            ContactNumber: get(response.data, \"ContactNumber.value\", \"\"),\n            MenuUrl: get(response.data, \"MenuUrl.value\", \"\"),\n            BestParking: get(response.data, \"BestParking.value\", \"\"),\n            AcceptsAfterPay: get(response.data, \"AcceptsAfterPay.value\", false),\n            AcceptsGiftCards: get(\n              response.data,\n              \"AcceptsGiftCards.value\",\n              false\n            ),\n            IsKidsFriendly: get(response.data, \"IsKidsFriendly.value\", false),\n            IsVegetarian: get(response.data, \"IsVegetarian.value\", false),\n            RetailerName: get(\n              response.data,\n              \"RetailerDetails.Name.value\",\n              null\n            ),\n            RetailerDescription: $this.decodeHTML(\n              get(response.data, \"RetailerDetails.Description.value\", \"\")\n            ),\n            Website: get(response.data, \"RetailerDetails.Website.value\", null),\n            Instagram: get(\n              response.data,\n              \"RetailerDetails.Instagram.value\",\n              null\n            ),\n            Facebook: get(\n              response.data,\n              \"RetailerDetails.Facebook.value\",\n              null\n            ),\n            LogoImage: get(\n              response.data,\n              \"RetailerDetails.LogoImage.value.src\",\n              null\n            ),\n            HeroImage: get(\n              response.data,\n              \"RetailerDetails.HeroImage.value.src\",\n              null\n            ),\n            StorefrontHeroImage: get(\n              response.data,\n              \"StorefrontHeroImage.value.src\",\n              null\n            ),\n            ImageGalleryChecker:\n              ImageGallery && ImageGallery.length > 0\n                ? ImageGallery.map((el) => el.Id.value)\n                : [],\n            ImageGallery:\n              ImageGallery && ImageGallery.length > 0\n                ? ImageGallery.map((el) => {\n                  return {\n                    name: el.Name.value,\n                    id: el.Id.value,\n                    src: el.Src.value,\n                  };\n                })\n                : [],\n            StoreID: get(response.data, \"StoreID.value\", null),\n            IsTemporarilyClosed: get(\n              response.data,\n              \"IsTemporarilyClosed.value\",\n              null\n            ),\n            IsOpeningSoon: get(response.data, \"IsTemporarilyClosed.value\", null)\n              ? false\n              : get(response.data, \"IsOpeningSoon.value\", null),\n            OpeningHoursStatus: get(\n              response.data,\n              \"OpeningHoursStatus.value\",\n              null\n            ),\n            Source: get(response.data, \"Source.value\", null),\n            MondayOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.MondayOpeningHours.value\",\n              null\n            ),\n            MondayClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.MondayClosingHours.value\",\n              null\n            ),\n            MondaySecondaryOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.MondaySecondaryOpeningHours.value\",\n              null\n            ),\n            MondaySecondaryClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.MondaySecondaryClosingHours.value\",\n              null\n            ),\n            MondayIsClosed: get(\n              response.data,\n              \"StoreOpeningHours.MondayIsClosed.value\",\n              null\n            ),\n            TuesdayOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.TuesdayOpeningHours.value\",\n              null\n            ),\n            TuesdayClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.TuesdayClosingHours.value\",\n              null\n            ),\n            TuesdaySecondaryOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.TuesdaySecondaryOpeningHours.value\",\n              null\n            ),\n            TuesdaySecondaryClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.TuesdaySecondaryClosingHours.value\",\n              null\n            ),\n            TuesdayIsClosed: get(\n              response.data,\n              \"StoreOpeningHours.TuesdayIsClosed.value\",\n              null\n            ),\n            WednesdayOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.WednesdayOpeningHours.value\",\n              null\n            ),\n            WednesdayClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.WednesdayClosingHours.value\",\n              null\n            ),\n            WednesdaySecondaryOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.WednesdaySecondaryOpeningHours.value\",\n              null\n            ),\n            WednesdaySecondaryClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.WednesdaySecondaryClosingHours.value\",\n              null\n            ),\n            WednesdayIsClosed: get(\n              response.data,\n              \"StoreOpeningHours.WednesdayIsClosed.value\",\n              null\n            ),\n            ThursdayOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.ThursdayOpeningHours.value\",\n              null\n            ),\n            ThursdayClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.ThursdayClosingHours.value\",\n              null\n            ),\n            ThursdaySecondaryOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.ThursdaySecondaryOpeningHours.value\",\n              null\n            ),\n            ThursdaySecondaryClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.ThursdaySecondaryClosingHours.value\",\n              null\n            ),\n            ThursdayIsClosed: get(\n              response.data,\n              \"StoreOpeningHours.ThursdayIsClosed.value\",\n              null\n            ),\n            FridayOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.FridayOpeningHours.value\",\n              null\n            ),\n            FridayClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.FridayClosingHours.value\",\n              null\n            ),\n            FridaySecondaryOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.FridaySecondaryOpeningHours.value\",\n              null\n            ),\n            FridaySecondaryClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.FridaySecondaryClosingHours.value\",\n              null\n            ),\n            FridayIsClosed: get(\n              response.data,\n              \"StoreOpeningHours.FridayIsClosed.value\",\n              null\n            ),\n            SaturdayOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.SaturdayOpeningHours.value\",\n              null\n            ),\n            SaturdayClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.SaturdayClosingHours.value\",\n              null\n            ),\n            SaturdaySecondaryOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.SaturdaySecondaryOpeningHours.value\",\n              null\n            ),\n            SaturdaySecondaryClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.SaturdaySecondaryClosingHours.value\",\n              null\n            ),\n            SaturdayIsClosed: get(\n              response.data,\n              \"StoreOpeningHours.SaturdayIsClosed.value\",\n              null\n            ),\n            SundayOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.SundayOpeningHours.value\",\n              null\n            ),\n            SundayClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.SundayClosingHours.value\",\n              null\n            ),\n            SundaySecondaryOpeningHours: get(\n              response.data,\n              \"StoreOpeningHours.SundaySecondaryOpeningHours.value\",\n              null\n            ),\n            SundaySecondaryClosingHours: get(\n              response.data,\n              \"StoreOpeningHours.SundaySecondaryClosingHours.value\",\n              null\n            ),\n            SundayIsClosed: get(\n              response.data,\n              \"StoreOpeningHours.SundayIsClosed.value\",\n              null\n            ),\n            Categories:\n              Categories && Categories.length > 0\n                ? Categories.map((el) => el.CategoryId.value)\n                : [],\n          },\n          RetailerType: get(\n            response.data,\n            \"RetailerDetails.RetailerType.value\",\n            \"\"\n          ),\n          formType:\n            storeId === \"\"\n              ? \"\"\n              : get(response.data, \"RetailerDetails.RetailerType.value\", \"\"),\n          imageGalleryHolder:\n            ImageGallery && ImageGallery.length > 0\n              ? ImageGallery.map((el) => {\n                return {\n                  name: el.Name.value,\n                  id: el.Id.value,\n                  src: el.Src.value,\n                };\n              })\n              : [],\n          showImageGallery:\n            ImageGallery && ImageGallery.length > 0 ? true : false,\n          isStoreDataReady: true,\n        });\n      }\n    } catch (e) {\n      console.error(\"Getting store data failed\");\n      this.setState({\n        isStoreDataReady: true,\n      });\n    }\n  };\n\n  getCarParkData = async (centre) => {\n    try {\n      let response = await getCarParkList({ centre });\n      if (response.status === 200 && response.data) {\n        this.setState({\n          carparkList: get(response.data, \"CarParkList\", []),\n        });\n      }\n    } catch (e) {\n      console.error(\"Getting car park data failed\");\n      // this.setState({\n      //   carparkList: get(getCarParkListJson, \"CarParkList\", []),\n      // });\n    }\n  };\n\n  getCategoryData = async () => {\n    try {\n      // let response = {\n      //   data: getCategoryListJson\n      // }\n      // let updateCategoryList = [];\n      // if (response.status !== 200 && response.data) {\n      let response = await getCategoryList();\n\n      let updateCategoryList = [];\n      if (response.status === 200 && response.data) {\n        let categoryResponse = get(response.data, \"Categories\", []);\n\n        if (categoryResponse.length > 0) {\n          categoryResponse.forEach((el) => {\n            updateCategoryList.push({\n              name: el.CategoryName.value,\n              value: el.CategoryId.value,\n            });\n          });\n        }\n        this.setState({\n          categoryList: updateCategoryList,\n        });\n      }\n    } catch (e) {\n      console.error(\"Getting category list data failed\");\n    }\n  };\n\n  handleFormData = () => {\n    const { showSaveHint, disableBtn } = this.state;\n    this.props.handleFormData(\n      showSaveHint,\n      disableBtn,\n      this.handleSaveForm,\n      this.handleSubmitForm,\n      this.handlePreviewForm\n    );\n  };\n\n  handleFormUpdate = (value) => {\n    this.setState(\n      {\n        disableBtn: true,\n        formData: {\n          ...this.state.formData,\n          ...value,\n        },\n      },\n      this.handleFormData\n    );\n  };\n\n  handleSaveForm = async () => {\n    const { formData } = this.state;\n    var timezoneId = new Date().getTimezoneOffset();\n    const url = \"/api/sitecore/store/SaveStorefrontData\";\n    let data = buildFormData({ ...formData, timeZoneId: timezoneId });\n    let backToTop = document.querySelector(\n      \".form__modal--back-to-top-button\"\n    );\n    if (backToTop) {\n      backToTop.click();\n    }\n    this.setState(\n      {\n        showSaveHint: true,\n        disableBtn: true,\n      },\n      this.handleFormData\n    );\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n      });\n\n      if (response) {\n        if (get(response.data, \"IsSuccess.value\", false)) {\n          this.setState(\n            {\n              showSaveHint: false,\n              disableBtn: false,\n              showErrorMessage: false,\n            },\n            this.handleFormData\n          );\n\n          return true;\n        } else {\n          let errorMessage =\n            \"Form Not Saved: \" +\n            get(response.data, \"message.value\", \"Invalid response\");\n\n          this.setState(\n            {\n              showSaveHint: false,\n              disableBtn: true,\n              formErrorMessage: errorMessage,\n              showErrorMessage: true,\n            },\n            this.handleFormData\n          );\n\n          return false;\n        }\n      }\n    } catch (e) {\n      console.error(\"Form Save Error: \" + e.response.statusText);\n      let errorMessage = \"Form Save Error: \" + e.response.statusText;\n      this.setState(\n        {\n          showSaveHint: false,\n          disableBtn: true,\n          formErrorMessage: errorMessage,\n          showErrorMessage: true,\n        },\n        this.handleFormData\n      );\n\n\n      return false;\n    }\n  };\n\n  handleSubmitForm = async () => {\n    const { formData } = this.state;\n    var timezoneId = new Date().getTimezoneOffset();\n    const url = \"/api/sitecore/store/SubmitStorefrontData\";\n    let data = buildFormData({ ...formData, timeZoneId: timezoneId });\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        params: {\n          storeId: formData.StoreID,\n        },\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n      });\n\n      if (response) {\n        if (get(response.data, \"IsSuccess.value\", false)) {\n          this.setState({\n            showErrorMessage: false,\n          });\n          TagManager.dataLayer({\n            dataLayer: {\n              event: \"updatedStoreInfo\",\n              storeInfoCentre: this.props.centreName,\n              storeInfoRetailer: formData.RetailerName,\n              storeInfoName: formData.Name,\n            },\n            dataLayerName: \"dataLayer\",\n          });\n          return true;\n        } else {\n          console.log(response.data);\n\n          let errorMessage =\n            \"Form Not Submitted: \" +\n            get(response.data, \"message.value\", \"Invalid response\");\n\n          this.setState({\n            formErrorMessage: errorMessage,\n            showErrorMessage: true,\n          });\n\n          let backToTop = document.querySelector(\n            \".form__modal--back-to-top-button\"\n          );\n          if (backToTop) {\n            backToTop.click();\n          }\n          return false;\n        }\n      }\n    } catch (e) {\n      console.error(\"Form Submit Error: \" + e.response.statusText);\n      let errorMessage = \"Form Submit Error: \" + e.response.statusText;\n\n      this.setState({\n        formErrorMessage: errorMessage,\n        showErrorMessage: true,\n      });\n\n      return false;\n    }\n  };\n\n  handlePreviewForm = () => {\n    this.setState({\n      showModal: true,\n    });\n  };\n\n  renderBulkPreview = () => {\n    const { previewList } = this.props || {};\n    const { LogoImage } = this.state.formData;\n    return (\n      <div className=\"article-modal\">\n        {previewList && previewList.length > 0 && (\n          <PopupPreview\n            previewTitle={\"Preview\"}\n            previewLogo={LogoImage}\n            previewList={previewList}\n            previewListChildName=\"Storefronts\"\n            btnLabel={\"Submit\"}\n            btnOnClick={() => {\n              let submitBtn = document.querySelector(\".store-submit-btn\");\n              if (submitBtn) {\n                submitBtn.click();\n              }\n            }}\n            showPreviewModal={() => this.setState({ showModal: false })}\n          />\n        )}\n      </div>\n    );\n  };\n\n  // saveForm = async () => {\n  //     const { formData } = this.state;\n  //     var timezoneId = new Date().getTimezoneOffset();\n  //     const url = \"/api/sitecore/store/SaveStorefrontData\";\n  //     let data = buildFormData({ ...formData, timeZoneId: timezoneId });\n  //     try {\n  //         let response = await axios({\n  //             method: \"POST\",\n  //             url,\n  //             data,\n  //             params: {\n  //                 storeId: formData.StoreID,\n  //             },\n  //             config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n  //         });\n  //         if (response) {\n  //             if (get(response.data, \"IsSuccess.value\", false)) {\n  //                 let successMessage = {\n  //                     title: \"Form Saved\",\n  //                     body: get(response.data, \"message.value\", \"Successful\"),\n  //                 };\n  //                 this.setState({\n  //                     showModal: true,\n  //                     modalContent: successMessage,\n  //                 });\n  //                 TagManager.dataLayer({\n  //                     dataLayer: {\n  //                         event: \"updateStoreInfo\",\n  //                     },\n  //                     dataLayerName: \"dataLayer\",\n  //                 });\n\n  //                 return true;\n  //             } else {\n  //                 let errorMessage = {\n  //                     title: \"Form Not Saved\",\n  //                     body: get(response.data, \"message.value\", \"Invalid response\"),\n  //                 };\n  //                 this.setState({\n  //                     showModal: true,\n  //                     modalContent: errorMessage,\n  //                 });\n  //                 return false;\n  //             }\n  //         }\n  //     } catch (e) {\n  //         console.log(e.response.statusText);\n  //         let successMessage = {\n  //             title: \"Form Saved\",\n  //             body: get(e.response.data, \"message.value\", \"Successful\"),\n  //         };\n  //         this.setState({\n  //             showModal: true,\n  //             modalContent: successMessage,\n  //         });\n  //         return false;\n  //     }\n  // };\n\n  renderStoreHours = (formData) => {\n    const days = [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\",\n    ];\n\n    return (\n      <div className=\"storehours-container\">\n        <div className=\"form-sub-header\">\n          <div className=\"form-sub-label\">Customise store hours</div>\n          <div\n            className=\"form-sub-label-right\"\n            onClick={() => this.resetHours()}\n          >\n            {\"Reset hours\"}\n          </div>\n        </div>\n        <div className=\"hours-table\">\n          <div className=\"row is-tablet-desktop\">\n            <div className=\"col col-3\">Day</div>\n            <div className=\"col col-4\">Opening hours</div>\n            <div className=\"col col-4\">Secondary hours</div>\n            <div className=\"col col-1\">Closed</div>\n          </div>\n          {days.map((day, index) => {\n            let newInfo = [];\n            const infoList = [\n              \"OpeningHours\",\n              \"ClosingHours\",\n              \"SecondaryOpeningHours\",\n              \"SecondaryClosingHours\",\n              \"IsClosed\",\n            ];\n            infoList.map((info) => {\n              newInfo.push(formData[day + info]);\n            });\n            const primaryOpeningHour = newInfo[0];\n            const primaryClosingHour = newInfo[1];\n            const secondaryOpeningHour = newInfo[2];\n            const secondaryClosingHour = newInfo[3];\n            const closed = newInfo[4];\n            return (\n              <div className=\"row\" key={`StoreOpeningHours${index}`}>\n                <div className=\"col col-3 is-tablet-desktop\">{day}</div>\n                <input className=\"storehours-day-checkbox js-openinghours is-mobile\" type=\"checkbox\" id={day + index} name={day + index} value={day} />\n                <label className=\"storehours-day-label is-mobile\" htmlFor={day + index}>\n                  <span>{day}</span>\n                  <i className=\"icon icon-chevron-down-small\" />\n                </label>\n                <div className=\"storehours-time-label is-mobile\">{\"Opening hours\"}</div>\n                <div className=\"col col-4\">\n                  <TimePicker\n                    use12Hours\n                    format=\"h:mma\"\n                    size=\"large\"\n                    allowClear={false}\n                    value={\n                      primaryOpeningHour ? moment(primaryOpeningHour) : null\n                    }\n                    onChange={(time, timeString) =>\n                      this.onTimeChange(time, timeString, day, infoList[0])\n                    }\n                    suffixIcon={<i className=\"icon icon-chevron-down-small\" />}\n                    placeholder=\"Not set\"\n                    disabled={closed}\n                  />\n                  <TimePicker\n                    use12Hours\n                    format=\"h:mma\"\n                    size=\"large\"\n                    allowClear={false}\n                    value={\n                      primaryClosingHour ? moment(primaryClosingHour) : null\n                    }\n                    onChange={(time, timeString) =>\n                      this.onTimeChange(time, timeString, day, infoList[1])\n                    }\n                    suffixIcon={<i className=\"icon icon-chevron-down-small\" />}\n                    placeholder=\"Not set\"\n                    disabled={closed}\n                  />\n                </div>\n                <div className=\"storehours-time-label is-secondary is-mobile\">{\"Secondary hours\"}</div>\n                <div className=\"col col-4\">\n                  <TimePicker\n                    use12Hours\n                    format=\"h:mma\"\n                    size=\"large\"\n                    allowClear={false}\n                    value={\n                      secondaryOpeningHour ? moment(secondaryOpeningHour) : null\n                    }\n                    onChange={(time, timeString) =>\n                      this.onTimeChange(time, timeString, day, infoList[2])\n                    }\n                    suffixIcon={<i className=\"icon icon-chevron-down-small\" />}\n                    placeholder=\"Not set\"\n                    disabled={closed}\n                  />\n                  <TimePicker\n                    use12Hours\n                    format=\"h:mma\"\n                    size=\"large\"\n                    allowClear={false}\n                    value={\n                      secondaryClosingHour ? moment(secondaryClosingHour) : null\n                    }\n                    onChange={(time, timeString) =>\n                      this.onTimeChange(time, timeString, day, infoList[3])\n                    }\n                    suffixIcon={<i className=\"icon icon-chevron-down-small\" />}\n                    placeholder=\"Not set\"\n                    disabled={closed}\n                  />\n                </div>\n                <div className=\"col col-1\">\n                  <FormCheckbox\n                    checked={closed}\n                    onCheckboxChange={(value, isClosed) => {\n                      this.handleFormUpdate({\n                        [day + infoList[4]]: isClosed,\n                      });\n                    }}\n                    className=\"storehours-close is-mobile\"\n                    label={\"Closed\"}\n                  />\n                </div>\n              </div>\n            );\n          })}\n          <div className=\"row\">\n            <div className=\"col col-12\">\n              <div className=\"hint\">\n                <i className=\"icon icon-info\" />\n                <span>\n                  {\n                    \"Secondary hours: The retailer will close and re-open in a single day (eg: Sunday 9am - 12pm, 4pm - 6pm)\"\n                  }\n                </span>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  };\n\n  onTimeChange = (time, timeString, day, info) => {\n    let dateTime;\n    if (timeString) {\n      dateTime =\n        moment().format(\"YYYYMMDDT\") +\n        moment(timeString, [\"h:mm A\"])\n          .format(\"HH:mm\")\n          .replace(\":\", \"\") +\n        \"00\";\n    }\n    this.handleFormUpdate({\n      [day + info]: dateTime ? dateTime : null,\n    });\n  };\n\n  resetHours = () => {\n    this.setState(\n      {\n        disableBtn: true,\n        formData: {\n          ...this.state.formData,\n          MondayOpeningHours: null,\n          MondayClosingHours: null,\n          MondaySecondaryOpeningHours: null,\n          MondaySecondaryClosingHours: null,\n          TuesdayOpeningHours: null,\n          TuesdayClosingHours: null,\n          TuesdaySecondaryOpeningHours: null,\n          TuesdaySecondaryClosingHours: null,\n          WednesdayOpeningHours: null,\n          WednesdayClosingHours: null,\n          WednesdaySecondaryOpeningHours: null,\n          WednesdaySecondaryClosingHours: null,\n          ThursdayOpeningHours: null,\n          ThursdayClosingHours: null,\n          ThursdaySecondaryOpeningHours: null,\n          ThursdaySecondaryClosingHours: null,\n          FridayOpeningHours: null,\n          FridayClosingHours: null,\n          FridaySecondaryOpeningHours: null,\n          FridaySecondaryClosingHours: null,\n          SaturdayOpeningHours: null,\n          SaturdayClosingHours: null,\n          SaturdaySecondaryOpeningHours: null,\n          SaturdaySecondaryClosingHours: null,\n          SundayOpeningHours: null,\n          SundayClosingHours: null,\n          SundaySecondaryOpeningHours: null,\n          SundaySecondaryClosingHours: null,\n        },\n      },\n      () => {\n        this.handleFormData();\n        const storeCheckboxList = document.querySelectorAll(\".js-openinghours\");\n        if (storeCheckboxList.length > 0) {\n          Array.prototype.slice.call(storeCheckboxList).map((item, index) => {\n            item.checked = true;\n          })\n        }\n      }\n    );\n  };\n\n  handleListbox = (id, field, isCheckbox) => {\n    const { formData } = this.state;\n    let options;\n    let selected = [];\n    if (document) {\n      if (isCheckbox) {\n        options = document.querySelectorAll(`#${id} input:checked`);\n      } else {\n        options = document.querySelectorAll(`#${id} option:checked`);\n      }\n      if (options) {\n        for (let i = 0; i < options.length; i++) {\n          selected.push(options[i].value);\n        }\n      }\n    }\n    this.setState(\n      {\n        disableBtn: true,\n        formData: {\n          ...formData,\n          [field]: selected,\n        },\n      },\n      this.handleFormData\n    );\n  };\n\n  handleSelect = (isSelect, field, options) => {\n    const { formData } = this.state;\n    this.setState(\n      {\n        disableBtn: true,\n        formData: {\n          ...formData,\n          [field]: isSelect ? options.map((el) => el.value) : [],\n        },\n      },\n      this.handleFormData\n    );\n  };\n\n  setDropdownValue = (value, options) => {\n    if (value && options && options.length) {\n      let optionValue = options.filter((el) => el.Id.value === value);\n      let dropdownValue = \"\";\n      if (optionValue.length > 0 && optionValue[0].Id.value) {\n        dropdownValue = optionValue[0].Id.value;\n      }\n      return dropdownValue;\n    } else return null;\n  };\n\n  render() {\n    const {\n      formData,\n      formType,\n      componentReady,\n      sourceList,\n      openingHoursList,\n      carparkList,\n      iconList,\n      showImageGallery,\n      categoryList,\n      imageGalleryHolder,\n      formErrorMessage,\n      showErrorMessage,\n      isStoreDataReady,\n      showModal,\n    } = this.state;\n    return (\n      <div className=\"form-storefront storefront-container\">\n        {showModal && this.renderBulkPreview()}\n        {showErrorMessage && <FormErrorMessage error={formErrorMessage} />}\n        {(formType === \"\" || formType === null) && (\n          <div className=\"form-storefront__retailer\">\n            <div className=\"form__container\">\n              <FormInput\n                className={\"is-box\"}\n                title\n                type=\"text\"\n                placeholder=\"Type retailer name.\"\n                label=\"Retailer Name\"\n                value={formData.RetailerName}\n                onInputChange={(RetailerName) => {\n                  this.handleFormUpdate({ RetailerName });\n                }}\n              />\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Retailer information\"}</label>\n              {componentReady && isStoreDataReady && (\n                <RichTextEditor\n                  label={\"Description\"}\n                  initialValue={formData.RetailerDescription}\n                  onInputChange={(RetailerDescription) => {\n                    this.handleFormUpdate({ RetailerDescription });\n                  }}\n                />\n              )}\n            </div>\n          </div>\n        )}\n\n        {(formType === \"Retail\" || formType === \"Food\") && (\n          <div className=\"form-storefront__store\">\n            <div className=\"form__container\">\n              <FormInput\n                className={\"is-box\"}\n                title\n                type=\"text\"\n                placeholder=\"Type retailer name.\"\n                label=\"Retailer Name\"\n                value={formData.Name}\n                onInputChange={(Name) => {\n                  this.handleFormUpdate({ Name });\n                }}\n              />\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Retailer information\"}</label>\n              {componentReady && (\n                <RichTextEditor\n                  label={\"Description\"}\n                  checkIfBlank={true}\n                  initialValue={formData.StorefrontDescription}\n                  onInputChange={(StorefrontDescription) => {\n                    this.handleFormUpdate({ StorefrontDescription });\n                  }}\n                />\n              )}\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Contact details\"}</label>\n              <FormInput\n                type=\"text\"\n                placeholder=\"(88) 888-8888\"\n                label=\"Phone number\"\n                value={formData.ContactNumber}\n                onInputChange={(ContactNumber) =>\n                  this.handleFormUpdate({ ContactNumber })\n                }\n              />\n              {formType === \"Food\" && (\n                <FormInput\n                  className=\"viewMenuMargin\"\n                  type=\"text\"\n                  placeholder=\"e.g. http://view-menu.com\"\n                  label=\"View Menu URL\"\n                  value={formData.MenuUrl}\n                  onInputChange={(MenuUrl) =>\n                    this.handleFormUpdate({ MenuUrl })\n                  }\n                />\n              )}\n            </div>\n          </div>\n        )}\n\n        <div className=\"form-storefront__common\">\n          <div className=\"form__container\">\n            <label className=\"form__header\">{\"Social Media\"}</label>\n            <FormInput\n              type=\"text\"\n              placeholder=\"Insert link (e.g. http://...)\"\n              label=\"Website\"\n              value={formData.Website}\n              onInputChange={(Website) => {\n                this.handleFormUpdate({ Website });\n              }}\n            />\n            <FormInput\n              type=\"text\"\n              placeholder=\"http://facebook.com\"\n              label=\"Facebook\"\n              value={formData.Facebook}\n              onInputChange={(Facebook) => {\n                this.handleFormUpdate({ Facebook });\n              }}\n            />\n            <FormInput\n              type=\"text\"\n              placeholder=\"http://instagram.com\"\n              label=\"Instagram\"\n              value={formData.Instagram}\n              onInputChange={(Instagram) => {\n                this.handleFormUpdate({ Instagram });\n              }}\n            />\n          </div>\n        </div>\n\n        {(formType === \"Retail\" || formType === \"Food\") && (\n          <div className=\"form-storefront__store\">\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Available services\"}</label>\n              {formType === \"Retail\" && (\n                <FormCheckbox\n                  label={\"Afterpay\"}\n                  checked={formData.AcceptsAfterPay}\n                  onCheckboxChange={(value, AcceptsAfterPay) =>\n                    this.handleFormUpdate({ AcceptsAfterPay })\n                  }\n                />\n              )}\n              {formType === \"Food\" && (\n                <div>\n                  <FormCheckbox\n                    label={\"Vegetarian\"}\n                    checked={formData.IsVegetarian}\n                    onCheckboxChange={(value, IsVegetarian) =>\n                      this.handleFormUpdate({ IsVegetarian })\n                    }\n                  />\n                  <FormCheckbox\n                    label={\"Kids-Friendly\"}\n                    checked={formData.IsKidsFriendly}\n                    onCheckboxChange={(value, IsKidsFriendly) =>\n                      this.handleFormUpdate({ IsKidsFriendly })\n                    }\n                  />\n                </div>\n              )}\n              <FormCheckbox\n                label={\"Gift Cards\"}\n                checked={formData.AcceptsGiftCards}\n                onCheckboxChange={(value, AcceptsGiftCards) =>\n                  this.handleFormUpdate({ AcceptsGiftCards })\n                }\n              />\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Parking\"}</label>\n              <FormSelect\n                label={\"Best parking\"}\n                placeholder={\"Select a car park\"}\n                defaultValue={this.setDropdownValue(\n                  formData.BestParking,\n                  carparkList\n                )}\n                options={carparkList}\n                onChange={(BestParking) =>\n                  this.handleFormUpdate({ BestParking })\n                }\n                noOptionsMessage={\"No car park found\"}\n              />\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Opening hours\"}</label>\n              <div className=\"opening-hours-status\">\n                <RadioButton\n                  defaultSelected={formData.OpeningHoursStatus}\n                  radioGroupName=\"Opening Hours List\"\n                  options={openingHoursList}\n                  onChange={(OpeningHoursStatus) => {\n                    this.handleFormUpdate({ OpeningHoursStatus });\n                  }}\n                />\n              </div>\n              <label className=\"form__label\">{\"Set opening hours\"}</label>\n              <RadioButton\n                defaultSelected={formData.Source}\n                radioGroupName=\"Source List\"\n                options={sourceList}\n                onChange={(Source) => {\n                  this.handleFormUpdate({ Source });\n                }}\n              />\n\n              {formData &&\n                formData.Source &&\n                formData.Source === \"Store\" &&\n                this.renderStoreHours(formData)}\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Meta information\"}</label>\n\n              <div className=\"store-list-box is-desktop\">\n                <FormListbox\n                  label=\"Category\"\n                  id=\"Storefront_Category_Desktop\"\n                  options={categoryList}\n                  field=\"Categories\"\n                  selected={formData.Categories}\n                  hint=\"Press [ctrl] + click to select multiple\"\n                  handleListbox={(id, field) => this.handleListbox(id, field)}\n                  handleSelect={(isSelect, field, options) =>\n                    this.handleSelect(isSelect, field, options)\n                  }\n                />\n              </div>\n\n              <div className=\"is-tablet\">\n                <FormListCheckbox\n                  label=\"Category\"\n                  id=\"Storefront_Category_Mobile\"\n                  options={categoryList}\n                  field=\"Categories\"\n                  selected={formData.Categories}\n                  handleListbox={(id, field) => this.handleListbox(id, field, true)}\n                  handleSelect={(isSelect, field, options) =>\n                    this.handleSelect(isSelect, field, options)\n                  }\n                />\n              </div>\n            </div>\n            <div className=\"form__container\">\n              <FormImageUpload\n                type=\"hero\"\n                label={\"Header image\"}\n                guidelines={\n                  \"To keep the quality of our websites high, the hero banner image needs to be:\"\n                }\n                guidelinesOne={\"• At least 1920px wide\"}\n                guidelinesTwo={\"• At least 1080px tall.\"}\n                guidelinesThree={\n                  \"• To avoid your image being cropped, use a ratio of 16:9\"\n                }\n                value={formData.StorefrontHeroImage}\n                handleFileUpload={(StorefrontHeroImage) => {\n                  this.handleFormUpdate({ StorefrontHeroImage });\n                }}\n                removeImage\n              />\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">{\"Image gallery\"}</label>\n              <Checkbox\n                checked={showImageGallery}\n                label={\"Display an additional image gallery?\"}\n                onCheckboxChange={(showImageGallery) => {\n                  this.setState({\n                    showImageGallery,\n                  });\n                  if (showImageGallery) {\n                    this.handleFormUpdate({ ImageGallery: imageGalleryHolder });\n                  } else {\n                    this.handleFormUpdate({ ImageGallery: [] });\n                  }\n                }}\n              />\n              {showImageGallery && (\n                <FormImageGallery\n                  value={formData.ImageGallery}\n                  handleAttachments={(ImageGallery) => {\n                    this.setState({\n                      imageGalleryHolder: ImageGallery,\n                    });\n                    this.handleFormUpdate({ ImageGallery });\n                  }}\n                />\n              )}\n            </div>\n          </div>\n        )}\n\n        {(formType === \"\" || formType === null) && (\n          <div className=\"form-storefront__retailer\">\n            <div className=\"form__container\">\n              {isStoreDataReady && (\n                <FormImageUpload\n                  label={\"Thumbnail image\"}\n                  guidelines={\"The hero thumbnail image needs to be:\"}\n                  guidelinesOne={\"• At least 800px wide\"}\n                  guidelinesTwo={\"• At least 800px tall.\"}\n                  guidelinesThree={\n                    \"• To avoid your image being cropped, use a ratio of 1:1\"\n                  }\n                  value={formData.StorefrontHeroImage}\n                  value={formData.LogoImage}\n                  handleFileUpload={(LogoImage) => {\n                    this.handleFormUpdate({ LogoImage });\n                  }}\n                />\n              )}\n            </div>\n            <div className=\"form__container\">\n              {isStoreDataReady && (\n                <FormImageUpload\n                  type=\"hero\"\n                  label={\"Header image\"}\n                  guidelines={\n                    \"To keep the quality of our websites high, the hero banner image needs to be:\"\n                  }\n                  guidelinesOne={\"• At least 1920px wide\"}\n                  guidelinesTwo={\"• At least 1080px tall.\"}\n                  guidelinesThree={\n                    \"• To avoid your image being cropped, use a ratio of 16:9\"\n                  }\n                  value={formData.HeroImage}\n                  handleFileUpload={(HeroImage) => {\n                    this.handleFormUpdate({ HeroImage });\n                  }}\n                />\n              )}\n            </div>\n          </div>\n        )}\n      </div>\n    );\n  }\n}\nexport default FormStoreFront;\n","import React from \"react\";\nimport { Text, RichText } from \"@sitecore-jss/sitecore-jss-react\";\nimport ReactPaginate from \"react-paginate\";\nimport { getStoreInfo } from \"../../../api/StoreAPI\";\nimport PageHeader from \"../../Base/PageHeader\";\nimport ListItem from \"../../Base/ListItem\";\nimport NoResultMessage from \"../../Base/NoResultMessage\";\nimport FormStoreFront from \"../Forms/FormStoreFront\";\nimport { scrollToTop } from \"../../../helper/ScrollHelper\";\n\n// import GetStoreInfo_Response from \"./GetStoreInfo_Response.json\";\n\nclass FeatureRetailerPortalStoreInfo extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activePageNum: 1,\n      showPagination: false,\n      showLoader: true,\n      showSaveHint: false,\n      enablePreview: false,\n      onClickSave: null,\n      onClickSubmit: null,\n      modalTitle: null,\n      title: null,\n      content: null,\n      previewTitle: null,\n      previewUrl: null,\n      storeName: null,\n      centreName: null,\n      isRetailer: false,\n      paginationRange: 7\n    };\n  }\n\n  componentDidMount() {\n    const {\n      isDashboard\n    } = this.props\n    if (window) {\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n    if (document) {\n      this.handleResize();\n      if (!isDashboard) {\n        let params = {\n          pageNumber: 1\n        };\n        this.getData(params, 1);\n      } else {\n        this.setState({\n          showLoader: false,\n        });\n      }\n    }\n  }\n\n  handleResize = () => {\n    if (window.outerWidth >= 768) {\n      this.setState({\n        paginationRange: 7\n      })\n    } else {\n      this.setState({\n        paginationRange: 3\n      })\n    }\n  }\n  getData = async (params, activePageNum) => {\n    this.setState({\n      showLoader: true\n    });\n\n    try {\n      const response = await getStoreInfo(params);\n      if (response) {\n        this.props.dataUpdate(response.data, activePageNum);\n        scrollToTop();\n        this.setState({\n          showPagination: true,\n          showLoader: false\n        });\n      }\n    } catch (e) {\n      console.error(\"Get Store Info Data Error: \" + e.response.statusText);\n      // this.props.dataUpdate(GetStoreInfo_Response, activePageNum);\n      // scrollToTop();\n      // this.setState({\n      //   showPagination: true,\n      //   showLoader: false\n      // });\n    }\n  };\n\n  handleOnClickList = (element, formModalLabel, formModalBody, previewUrl, previewTitle, isRetailer) => {\n    if (!(/btn|icon|btn__label/.test(element.className)) || (/js-btn-edit|icon-edit/.test(element.className))) {\n      this.setState({\n        title: formModalLabel,\n        content: formModalBody,\n        previewTitle,\n        previewUrl,\n        isRetailer\n      })\n      this.props.showFormModal({\n        title: formModalLabel,\n        content: formModalBody,\n        previewTitle,\n        previewUrl,\n        isRetailer\n      })\n    }\n  }\n\n  handleFormUpdate = (showSaveHint, disableBtn, onClickSave, onClickSubmit, onClickPreview, otherFormModalProps) => {\n    const {\n      title,\n      content,\n      previewTitle,\n      previewUrl,\n      isRetailer\n    } = this.state;\n\n    this.props.showFormModal({\n      title,\n      content,\n      previewTitle,\n      previewUrl,\n      isRetailer,\n      showSaveHint,\n      disableBtn,\n      onClickSave,\n      onClickSubmit,\n      onClickPreview,\n      ...otherFormModalProps\n    })\n  }\n\n  renderDashboardItems = (data) => {\n    const {\n      dashboardStores\n    } = data || {};\n    let renderItemLayout = \"\";\n\n    if (dashboardStores && dashboardStores.length > 0) {\n      renderItemLayout =\n        <div className=\"store-info__content\">\n          <div className=\"store-info__store-list\">\n            <div className=\"store-info__section--wrapper\">\n              {dashboardStores.map((item, index) => {\n                const {\n                  ItemId,\n                  CentreName,\n                  CentreIcon,\n                  StoreInfoTitle,\n                  PreviewUrl,\n                } = item\n\n                let previewModalTitle = \"\";\n                let previewModalUrl = PreviewUrl.value;\n                if (StoreInfoTitle && StoreInfoTitle.value && CentreName && CentreName.value) {\n                  previewModalTitle = StoreInfoTitle.value + \" \" + CentreName.value;\n                }\n\n                let formModalLabel =\n                  <span>\n                    {\"Manage stores\"}\n                    &nbsp;&nbsp;&nbsp;\n                      {\"»\"}\n                    &nbsp;&nbsp;&nbsp;\n                      <Text field={StoreInfoTitle} />\n                    &nbsp;\n                      <Text field={CentreName} />\n                  </span>\n\n                let formModalProps = {\n                  previewUrl: PreviewUrl.value,\n                  storeInfoTitle: StoreInfoTitle.value,\n                  successMessage: StoreInfoTitle.value + \" \" + CentreName.value + \" store info updated\",\n                }\n\n                let formModalBody =\n                  <FormStoreFront\n                    centreName={CentreName && CentreName.value ? CentreName.value : \"\"}\n                    storeId={(ItemId && ItemId.value) ? ItemId.value : \"\"}\n                    handleFormData={(showSaveHint, disableBtn, onClickSave, onClickSubmit, onClickPreview) => {\n                      this.handleFormUpdate(\n                        showSaveHint,\n                        disableBtn,\n                        onClickSave,\n                        onClickSubmit,\n                        onClickPreview,\n                        formModalProps\n                      );\n                    }}\n                  />\n                return (\n\n                  <ListItem\n                    key={`store-list-${index}`}\n                    logoSrc={(CentreIcon && CentreIcon.value) ? CentreIcon.value : \"\"}\n                    label={StoreInfoTitle}\n                    title={CentreName}\n                    previewBtn={{ \"label\": \"Preview\" }}\n                    previewBtnOnClick={() => {\n                      this.props.showPreviewModal({\n                        url: previewModalUrl,\n                        title: previewModalTitle,\n                      })\n                    }}\n                    listItemOnClick={(e) =>\n                      this.handleOnClickList(e.target, formModalLabel, formModalBody, previewModalUrl, previewModalTitle)\n                    }\n                  />\n                )\n              })}\n            </div>\n          </div>\n        </div>\n    }\n\n    return renderItemLayout;\n  }\n\n  renderItems = (data) => {\n    const {\n      StoreInfoList,\n      GlobalList,\n      IsCentreMarketing\n    } = data || {};\n    const {\n      RetailerSectionTitle = null,\n      RetailerSectionSubtext = null,\n      StoresSectionTitle = null,\n      StoresSectionSubtext = null,\n    } = this.props.headerData || {};\n    let renderItemLayout = \"\";\n\n    if ((StoreInfoList && StoreInfoList.length > 0) || (GlobalList && GlobalList.length > 0)) {\n      renderItemLayout =\n        <div className=\"store-info__content\">\n          {(GlobalList && GlobalList.length > 0 &&\n            (IsCentreMarketing && !IsCentreMarketing.value)) &&\n            <div className=\"store-info__global-list\">\n              {RetailerSectionTitle &&\n                RetailerSectionTitle.value &&\n                <div className=\"store-info__section--header\">\n                  <Text field={RetailerSectionTitle} />\n                </div>\n              }\n              {RetailerSectionSubtext &&\n                RetailerSectionSubtext.value &&\n                <div className=\"store-info__section--description\">\n                  <Text field={RetailerSectionTitle} />\n                </div>\n              }\n\n              <div className=\"store-info__section--wrapper\">\n                {GlobalList.map((item, index) => {\n                  const {\n                    Name,\n                    Description,\n                    LogoImage,\n                    PreviewUrlList\n                  } = item\n\n                  let previewModalTitle = \"\";\n                  let previewModalUrl;\n\n                  if (PreviewUrlList && PreviewUrlList.length > 0) {\n                    const storeList = PreviewUrlList;\n                    const storeItem = storeList[0].Storefronts;\n\n                    if (storeList.length === 1 && storeItem.length === 1) {\n                      previewModalUrl = storeItem[0].PreviewUrl.value;\n                      previewModalTitle = storeItem[0].Store.value + \" \" + storeList[0].Centre.value;\n                    } else {\n                      previewModalUrl = PreviewUrlList\n                    }\n                  }\n\n\n                  let imageSrc = \"\";\n\n                  if (LogoImage && LogoImage.value && LogoImage.value.src) {\n                    imageSrc = LogoImage.value.src;\n                  }\n\n                  let formModalLabel =\n                    <span>\n                      {\"Manage stores\"}\n                      &nbsp;&nbsp;&nbsp;\n                    {\"»\"}\n                      &nbsp;&nbsp;&nbsp;\n                    <Text field={Name} />\n                    </span>\n\n                  let formModalProps = {\n                    successMessage: Name.value + \" store info updated\",\n                  }\n\n                  let formModalBody =\n                    <FormStoreFront\n                      centreName={\"\"}\n                      storeId={\"\"}\n                      previewList={PreviewUrlList}\n                      handleFormData={(showSaveHint, disableBtn, onClickSave, onClickSubmit, onClickPreview) => {\n                        this.handleFormUpdate(\n                          showSaveHint,\n                          disableBtn,\n                          onClickSave,\n                          onClickSubmit,\n                          onClickPreview,\n                          formModalProps,\n                        );\n                      }}\n                    />\n                  return (\n                    <ListItem\n                      key={`global-list-${index}`}\n                      logoBgColor={\"#fff\"}\n                      logoSrc={imageSrc}\n                      label={{ value: \"All centres\" }}\n                      title={Name}\n                      description={Description}\n                      listItemOnClick={(e) =>\n                        this.handleOnClickList(e.target, formModalLabel, formModalBody, previewModalUrl, previewModalTitle, true)\n                      }\n                    />\n                  )\n                })}\n              </div>\n            </div>\n          }\n          {StoreInfoList &&\n            StoreInfoList.length > 0 &&\n            <div className=\"store-info__store-list\">\n              {StoresSectionTitle &&\n                StoresSectionTitle.value &&\n                <div className=\"store-info__section--header\">\n                  <Text field={StoresSectionTitle} />\n                </div>\n              }\n              {StoresSectionSubtext &&\n                StoresSectionSubtext.value &&\n                <div className=\"store-info__section--description\">\n                  <Text field={StoresSectionSubtext} />\n                </div>\n              }\n              <div className=\"store-info__section--wrapper\">\n                {StoreInfoList.map((item, index) => {\n                  const {\n                    ItemId,\n                    CentreName,\n                    CentreIcon,\n                    Website,\n                    ContactNumber,\n                    PreviewUrl,\n                    StoreInfoTitle,\n                  } = item\n\n                  const {\n                    RetailerID,\n                    Name\n                  } = item.RetailerDetails || {};\n                  const {\n                    OpeningToday\n                  } = item.OpeningHours || {};\n\n                  let previewModalTitle = \"\";\n                  let previewModalUrl = PreviewUrl.value;\n                  if (StoreInfoTitle && StoreInfoTitle.value && CentreName && CentreName.value) {\n                    previewModalTitle = StoreInfoTitle.value + \" \" + CentreName.value;\n                  }\n                  let descriptionValue =\n                    <div>\n                      {OpeningToday &&\n                        OpeningToday.value &&\n                        <span>\n                          <Text field={OpeningToday} />\n                          <span>\n                            ,&nbsp;&nbsp;&nbsp;\n                          </span>\n                        </span>\n                      }\n                      {ContactNumber &&\n                        ContactNumber.value &&\n                        <span>\n                          <Text field={ContactNumber} />\n                          <span>\n                            ,&nbsp;&nbsp;&nbsp;\n                          </span>\n                        </span>\n                      }\n                      {Website &&\n                        Website.value &&\n                        <span>\n                          <Text field={Website} />\n                          <span>\n                            ,&nbsp;&nbsp;&nbsp;\n                          </span>\n                        </span>\n                      }\n                    </div>\n                  let formModalLabel =\n                    <span>\n                      {\"Manage stores\"}\n                      &nbsp;&nbsp;&nbsp;\n                      {\"»\"}\n                      &nbsp;&nbsp;&nbsp;\n                      <Text field={Name} />\n                      &nbsp;\n                      <Text field={CentreName} />\n                    </span>\n\n                  let formModalProps = {\n                    previewUrl: PreviewUrl.value,\n                    storeInfoTitle: StoreInfoTitle.value,\n                    successMessage: Name.value + \" \" + CentreName.value + \" store info updated\",\n                  }\n\n                  let formModalBody =\n                    <FormStoreFront\n                      centreName={CentreName && CentreName.value ? CentreName.value : \"\"}\n                      storeId={(ItemId && ItemId.value) ? ItemId.value : \"\"}\n                      handleFormData={(showSaveHint, disableBtn, onClickSave, onClickSubmit, onClickPreview) => {\n                        this.handleFormUpdate(\n                          showSaveHint,\n                          disableBtn,\n                          onClickSave,\n                          onClickSubmit,\n                          onClickPreview,\n                          formModalProps\n                        );\n                      }}\n                    />\n                  return (\n\n                    <ListItem\n                      key={`store-list-${index}`}\n                      logoSrc={(CentreIcon && CentreIcon.value) ? CentreIcon.value : \"\"}\n                      label={StoreInfoTitle}\n                      title={CentreName}\n                      storeDescription={descriptionValue}\n                      previewBtn={{ \"label\": \"Preview\" }}\n                      previewBtnOnClick={() => {\n                        this.props.showPreviewModal({\n                          url: previewModalUrl,\n                          title: previewModalTitle,\n                        })\n                      }}\n                      listItemOnClick={(e) =>\n                        this.handleOnClickList(e.target, formModalLabel, formModalBody, previewModalUrl, previewModalTitle)\n                      }\n                    />\n                  )\n                })}\n              </div>\n            </div>\n          }\n        </div>\n    } else {\n      renderItemLayout =\n        <NoResultMessage\n          label=\"No Result\"\n        />\n    }\n\n    return renderItemLayout;\n  }\n\n  renderStoreCount = (data) => {\n    const {\n      activePageNum\n    } = this.state;\n\n    let hasPagination = false;\n    let storeCount = 0;\n    let dataStoreLength = data.StoreInfoList.length;\n    if (activePageNum > 1) {\n      storeCount = ((activePageNum - 1) * 10) + dataStoreLength;\n    } else {\n      storeCount = dataStoreLength\n    }\n    if (data &&\n      data.TotalPageNumber &&\n      data.TotalPageNumber.value > 1) {\n      hasPagination = true;\n    }\n    return (\n      <div className={`list-count ${!hasPagination ? \"no-pagination\" : \"\"}`}>\n        {\"Showing \"}\n        {storeCount}\n        {\" of \"}\n        {data.TotalResults.value}\n      </div>\n    )\n  }\n  handlePaginationClick = data => {\n    this.setState({\n      activePageNum: data.selected + 1\n    })\n    let params = {\n      pageNumber: data.selected + 1\n    };\n    this.getData(params, data.selected + 1);\n  };\n\n  renderPagination = () => {\n    const { data } = this.props;\n    const {\n      paginationRange\n    } = this.state;\n    return (\n      data &&\n      data.TotalPageNumber &&\n      data.TotalPageNumber.value > 1 && (\n        <ReactPaginate\n          previousLabel={\n            <div>\n              <i className=\"icon icon-chevron-outline-left\" />\n              <span>{\"Previous\"}</span>\n            </div>\n          }\n          nextLabel={\n            <div>\n              <i className=\"icon icon-chevron-outline-right\" />\n              <span>{\"Next\"}</span>\n            </div>\n          }\n          breakLabel={\"...\"}\n          breakClassName={\"break-me\"}\n          pageCount={data.TotalPageNumber.value}\n          marginPagesDisplayed={0}\n          pageRangeDisplayed={paginationRange}\n          onPageChange={this.handlePaginationClick}\n          containerClassName={\"pagination\"}\n          subContainerClassName={\"pages pagination\"}\n          activeClassName={\"active\"}\n        />\n      )\n    );\n  };\n\n  render() {\n    const {\n      Header = null\n    } = this.props.headerData || {};\n    const {\n      data,\n      isDashboard\n    } = this.props;\n    const {\n      showPagination,\n      showLoader\n    } = this.state;\n    return (\n      <div className=\"store-info\">\n        <PageHeader\n          title={isDashboard ? { value: \"Store information\" } : Header}\n        />\n        {showLoader && (\n          <div className=\"loader-wrapper container\">\n            <div className=\"loader\"></div>\n          </div>\n        )}\n        {(!showLoader && !isDashboard) ?\n          this.renderItems(data) :\n          this.renderDashboardItems(data)\n        }\n        {(!isDashboard &&\n          !showLoader &&\n          data &&\n          data.TotalResults &&\n          data.TotalResults.value &&\n          data.StoreInfoList &&\n          data.StoreInfoList.length > 0) &&\n          this.renderStoreCount(data)\n        }\n        {!isDashboard &&\n          showPagination &&\n          <div>\n            {this.renderPagination()}\n          </div>\n        }\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalStoreInfo;\n","import React from \"react\";\nimport FormModal from \"../../../Base/FormModal\";\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\nimport CustomIframe from \"../../../Base/CustomIframe\";\nimport StoreInfo from \"../../../Modules/StoreInfo\";\nimport {\n  addParameter\n} from \"../../../../helper/UrlHelper\";\nimport {\n  getStoreInfo,\n} from \"../../../../api/StoreAPI\";\nimport {\n  scrollToTop\n} from \"../../../../helper/ScrollHelper\";\nimport { hideBackToTop } from \"../../../../helper/HideBackToTopHelper\";\n\nclass FeatureRetailerPortalStores extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      selectedFilter: null,\n      showPreviewModal: false,\n      showFormModal: false,\n      storeInfo: null,\n      modalData: null,\n      formModalData: null,\n      previewModalData: null,\n      showSuccessMessage: false,\n      activePageNum: 1,\n      isDocumentReady: false,\n      isDashboardUpdate: false,\n      isMobile: false\n    };\n  }\n\n  componentDidMount() {\n    if (document) {\n      this.setState({ isDocumentReady: true }, this.handleResize());\n    }\n    if (window) {\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n  }\n\n  handleResize = () => {\n    if (window.outerWidth >= 768) {\n      this.setState({\n        isMobile: false\n      })\n    } else {\n      this.setState({\n        isMobile: true\n      })\n    }\n  }\n\n  renderContent = () => {\n    const {\n      isDashboard = false,\n      storeList = []\n    } = this.props\n    const {\n      storeInfo,\n      selectedFilter\n    } = this.state;\n\n    return (\n      <StoreInfo\n        headerData={this.props.fields}\n        data={storeInfo}\n        data={(storeList && storeList.length > 0) ? { dashboardStores: storeList } : storeInfo}\n        filter={selectedFilter}\n        dataUpdate={(storeInfo, activePageNum) =>\n          this.setState({ storeInfo, activePageNum })}\n        showPreviewModal={previewModalData =>\n          this.setState({ showPreviewModal: true, previewModalData })\n        }\n        showFormModal={formModalData => {\n          this.setState({\n            showFormModal: true,\n            formModalData,\n            previewModalData: {\n              ...this.state.previewModalData,\n              title: formModalData.previewTitle,\n              url: formModalData.previewUrl,\n            }\n          })\n        }\n        }\n        isDashboard={isDashboard}\n      />\n    );\n  };\n\n  renderPreviewModal = () => {\n    const {\n      title,\n      url\n    } = this.state.previewModalData || {};\n\n    const {\n      previewUrl,\n      storeInfoTitle\n    } = this.state.formModalData || {}\n\n    const {\n      showFormModal,\n      showPreviewModal\n    } = this.state;\n\n    hideBackToTop(showPreviewModal || showFormModal);\n    \n    return (\n      <FormModal\n        isPreview\n        showModal={showPreviewModal}\n        label={title ? title : storeInfoTitle}\n        closeOnClick={() =>\n          this.setState({\n            showPreviewModal: false\n          })}\n      >\n        {showPreviewModal &&\n          <CustomIframe\n            title={title ? title : storeInfoTitle}\n            src={url ? url : previewUrl}\n          />\n        }\n      </FormModal>\n    );\n  }\n\n  renderFormModal = () => {\n    const {\n      updateDashboard\n    } = this.props || {};\n    const {\n      title,\n      content,\n      previewUrl,\n      showSaveHint,\n      disableBtn,\n      onClickSave,\n      onClickSubmit,\n      onClickPreview,\n      successMessage = \"\",\n    } = this.state.formModalData || {}\n\n    const {\n      showFormModal,\n      isDashboardUpdate,\n      isMobile,\n      showPreviewModal\n    } = this.state\n\n    if (!showFormModal && isDashboardUpdate && updateDashboard) {\n      this.setState({\n        isDashboardUpdate: false\n      },\n        () => updateDashboard(true))\n    }\n\n    hideBackToTop(showPreviewModal || showFormModal);\n\n    return (\n      <FormModal\n        showModal={showFormModal}\n        label={title}\n        closeOnClick={() =>\n          this.setState({\n            showFormModal: false\n          })\n        }\n        showSaveHint={showSaveHint}\n        saveBtn={\"Save draft\"}\n        saveBtnOnClick={() => {\n          onClickSave().then((result) => {\n            if (result) {\n              if (!updateDashboard) {\n                this.getStoreInfoUpdate();\n              } else {\n                this.setState({\n                  isDashboardUpdate: true\n                })\n              }\n            }\n          });\n        }}\n        secondaryBtn={`Preview${Array.isArray(previewUrl) && !isMobile ? \"…\" : \"\"}`}\n        secondaryBtnOnClick={() => {\n          if (Array.isArray(previewUrl)) {\n            onClickPreview();\n          } else if (previewUrl) {\n            this.setState({\n              showPreviewModal: true,\n            })\n          }\n        }\n        }\n        disabledSecondaryBtn={disableBtn}\n        primaryBtn={\"Submit\"}\n        primaryBtnClassName={\"store-submit-btn\"}\n        primaryBtnOnClick={() => {\n          onClickSubmit().then((result) => {\n            if (result) {\n              if (!updateDashboard) {\n                this.getStoreInfoUpdate();\n              }\n              this.setState({\n                showFormModal: false,\n                showSuccessMessage: true,\n                formModalData: {\n                  ...this.state.formModalData,\n                  successMessage\n                },\n                isDashboardUpdate: updateDashboard ? true : false\n              },\n                () => scrollToTop()\n              )\n            }\n          });\n        }}\n        disabledPrimaryBtn={disableBtn}\n      >\n        {this.state.showFormModal &&\n          content\n        }\n      </FormModal>\n    );\n  }\n\n  getStoreInfoUpdate = async () => {\n    const { activePageNum } = this.state;\n    let params = {\n      pageNumber: activePageNum\n    };\n    const url = window.location.href;\n    window.history.pushState(null, \"Store Info\", addParameter(url, \"date\", Date.now()));\n    let response = await getStoreInfo(params);\n    if (response && response.status == 200) {\n      this.setState({\n        storeInfo: response.data\n      })\n    }\n  }\n\n  render() {\n    const {\n      showSuccessMessage,\n      isDocumentReady,\n    } = this.state;\n\n    const {\n      successMessage,\n      previewUrl,\n      isRetailer\n    } = this.state.formModalData || {};\n\n    return (\n      <div className={`stores__container ${showSuccessMessage ? \"has-success-message\" : \"\"}`}>\n        {isDocumentReady &&\n          this.renderPreviewModal()\n        }\n        {isDocumentReady &&\n          this.renderFormModal()\n        }\n        {showSuccessMessage &&\n          <SuccessMessage\n            showPreviewLink={previewUrl && !isRetailer}\n            label={successMessage}\n            handleOnClick={() => this.setState({\n              showPreviewModal: true\n            })}\n            handleShowSuccess={(showSuccessMessage) => {\n              this.setState({\n                showSuccessMessage\n              })\n            }}\n          />\n        }\n        <div className=\"stores__content\">\n          {this.renderContent()}\n        </div>\n      </div>\n    );\n  }\n}\nexport default FeatureRetailerPortalStores;\n","import React from \"react\";\nimport {\n  getEvents,\n} from \"../../../api/StoreAPI\";\nimport PageHeader from \"../../Base/PageHeader\";\nimport ListItem from \"../../Base/ListItem\";\nimport NoResultMessage from \"../../Base/NoResultMessage\";\n\n// import GetEvents_Response from \"./GetEvents_Response.json\";\n// GetEventBackup\n// GetEvents_Response\n\nclass Events extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showLoader: true,\n    };\n  }\n\n  componentDidMount() {\n    const {\n      isDashboard\n    } = this.props\n\n    if (!isDashboard) {\n      let params = {\n        centre: \"\"\n      };\n      this.getData(params, true);\n    } else {\n      this.setState({\n        showLoader: false,\n      });\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {\n      filterCentre,\n      isDashboard\n    } = this.props\n\n    if (!isDashboard) {\n      if ((filterCentre !== prevProps.filterCentre)) {\n        let params = {\n          centre: filterCentre.toString()\n        }\n        this.getData(params);\n      }\n    }\n  }\n\n  getData = async (params, isOnLoad) => {\n    this.setState({\n      showLoader: true\n    })\n\n    try {\n      const response = await getEvents(params);\n      if (response.status === 200 && response.data) {\n        this.props.dataUpdate(response.data);\n        let totalResultCount = 0;\n        Object.keys(response.data).map(item => {\n          totalResultCount = totalResultCount + response.data[item].length\n        })\n        this.props.dataTotalCount(totalResultCount)\n        this.setState({\n          showLoader: false,\n        });\n      }\n    }\n    catch (e) {\n      console.error(\"Get Events Data Error: \" + e.response.statusText);\n      // this.props.dataUpdate(GetEvents_Response);\n      // let totalResultCount = 0;\n      // Object.keys(GetEvents_Response).map(item => {\n      //   totalResultCount = totalResultCount + GetEvents_Response[item].length\n      // })\n      // this.props.dataTotalCount(totalResultCount)\n      // this.setState({\n      //   showLoader: false,\n      // });\n    }\n  };\n\n  renderItems = (data, filter) => {\n    const {\n      LivePromotions,\n      ScheduledPromotions,\n      AwaitingApprovalPromotions,\n      DraftPromotions,\n      RejectedPromotions,\n      dashboardPromotions\n    } = data || {};\n\n    let renderItemsLayout = \"\";\n\n    if (dashboardPromotions && dashboardPromotions.length > 0) {\n      renderItemsLayout =\n        this.renderDashboardListItem(dashboardPromotions)\n    } else {\n      let livePomotionLayout = \"\",\n        ScheduledPromotionsLayout = \"\",\n        AwaitingApprovalPromotionsLayout = \"\",\n        DraftPromotionsLayout = \"\",\n        RejectedPromotionsLayout = \"\";\n\n      if (LivePromotions && LivePromotions.length > 0) {\n        livePomotionLayout =\n          this.renderListItem(LivePromotions, \"Live\", filter)\n      }\n      if (ScheduledPromotions && ScheduledPromotions.length > 0) {\n        ScheduledPromotionsLayout =\n          this.renderListItem(ScheduledPromotions, \"Scheduled\", filter)\n      }\n      if (AwaitingApprovalPromotions && AwaitingApprovalPromotions.length > 0) {\n        AwaitingApprovalPromotionsLayout =\n          this.renderListItem(AwaitingApprovalPromotions, \"Awaiting approval\", filter)\n      }\n      if (DraftPromotions && DraftPromotions.length > 0) {\n        DraftPromotionsLayout =\n          this.renderListItem(DraftPromotions, \"Draft\", filter)\n      }\n      if (RejectedPromotions && RejectedPromotions.length > 0) {\n        RejectedPromotionsLayout =\n          this.renderListItem(RejectedPromotions, \"Rejected\", filter)\n      }\n\n      if (filter === \"allStatus\") {\n        renderItemsLayout =\n          <div>\n            {livePomotionLayout}\n            {ScheduledPromotionsLayout}\n            {AwaitingApprovalPromotionsLayout}\n            {DraftPromotionsLayout}\n            {RejectedPromotionsLayout}\n          </div>\n      }\n      else if (filter === \"LivePromotions\") {\n        renderItemsLayout = livePomotionLayout;\n      }\n      else if (filter === \"ScheduledPromotions\") {\n        renderItemsLayout = ScheduledPromotionsLayout;\n      }\n      else if (filter === \"AwaitingApprovalPromotions\") {\n        renderItemsLayout = AwaitingApprovalPromotionsLayout;\n      }\n      else if (filter === \"DraftPromotions\") {\n        renderItemsLayout = DraftPromotionsLayout;\n      }\n      else if (filter === \"RejectedPromotions\") {\n        renderItemsLayout = RejectedPromotionsLayout;\n      }\n    }\n\n    return renderItemsLayout;\n  }\n\n  renderDashboardListItem = (promotions) => {\n    const {\n      noSelectedStore\n    } = this.props\n\n    return (\n      <div className=\"list__group\">\n        {promotions.map((item, index) => {\n          const {\n            ItemId,\n            Thumbnail,\n            CentreName,\n            Name,\n            Status,\n            PreviewURL\n          } = item || {};\n\n          let imageSrc = \"\";\n\n          if (Thumbnail && Thumbnail.value && Thumbnail.value.src) {\n            imageSrc = Thumbnail.value.src;\n          }\n\n          return (\n            <ListItem\n              key={`events-list-${ItemId + index}`}\n              logoSrc={imageSrc}\n              label={CentreName}\n              title={Name}\n              status={Status}\n              previewBtn={{ \"label\": \"Preview\" }}\n              previewBtnOnClick={() => {\n                this.props.showPreviewModal({\n                  url: PreviewURL.value,\n                  title: (Name && Name.value) ? Name.value : \"\",\n                })\n              }}\n              btnOne={{ \"icon\": \"trash-2\", \"tooltip\": \"Delete\" }}\n              btnOneOnClick={() => {\n                this.props.showDeleteModal({\n                  id: ItemId.value,\n                  name: Name.value,\n                  centreName: CentreName.value,\n                  status: Status.value,\n                })\n              }}\n              listItemOnClick={(e) => {\n                if (noSelectedStore) {\n                  if (!(/btn|icon/.test(e.target.className))) {\n                    this.props.showPreviewModal({\n                      url: PreviewURL.value,\n                      title: (Name && Name.value) ? Name.value : \"\",\n                    })\n                  }\n                } else {\n                  this.handleOnClickList(e, ItemId.value)\n                }\n              }\n              }\n            />\n          )\n        })\n        }\n      </div>\n    )\n  }\n\n  renderListItem = (promotions, label, filter) => {\n    const {\n      noSelectedStore\n    } = this.props\n    return (\n      <div className=\"list__group\">\n        {filter === \"allStatus\" &&\n          <div className=\"list__header\">\n            {label}\n          </div>\n        }\n        {promotions.map((item, index) => {\n          const {\n            ItemId,\n            Thumbnail,\n            CentreName,\n            Name,\n            StartDate,\n            EndDate,\n            Status,\n            PreviewURL\n          } = item || {};\n\n          let imageSrc = \"\";\n\n          if (Thumbnail && Thumbnail.value && Thumbnail.value.src) {\n            imageSrc = Thumbnail.value.src;\n          }\n\n          let description = \"\";\n\n          if (StartDate && StartDate.value || EndDate && EndDate.value) {\n            description =\n              <span>\n                {StartDate.value}\n                {EndDate && EndDate.value ? \" - \" : \"\"}\n                {EndDate.value}\n              </span>\n          }\n\n          return (\n            <ListItem\n              key={`events-list-${ItemId + index}`}\n              logoSrc={imageSrc}\n              label={CentreName}\n              title={Name}\n              storeDescription={description}\n              status={Status}\n              previewBtn={{ \"label\": \"Preview\" }}\n              previewBtnOnClick={() => {\n                this.props.showPreviewModal({\n                  url: PreviewURL.value,\n                  title: (Name && Name.value) ? Name.value : \"\",\n                })\n              }}\n              btnOne={{ \"icon\": \"trash-2\", \"tooltip\": \"Delete\" }}\n              btnOneOnClick={() => {\n                this.props.showDeleteModal({\n                  id: ItemId.value,\n                  name: Name.value,\n                  centreName: CentreName.value,\n                  status: Status.value,\n                })\n              }}\n              listItemOnClick={(e) => {\n                if (noSelectedStore) {\n                  if (!(/btn|icon/.test(e.target.className))) {\n                    this.props.showPreviewModal({\n                      url: PreviewURL.value,\n                      title: (Name && Name.value) ? Name.value : \"\",\n                    })\n                  }\n                } else {\n                  this.handleOnClickList(e, ItemId.value)\n                }\n              }\n              }\n            />\n          )\n        })\n        }\n      </div>\n    )\n  }\n\n  renderListCount = (data, totalListCount, filterStatus) => {\n    let promotionCount = 0;\n  \n    Object.keys(data).map(item => {\n      if (filterStatus !== \"allStatus\") {\n        if (filterStatus === item) {\n          promotionCount = data[item].length;\n        }\n      } else {\n        promotionCount = promotionCount + data[item].length;\n      }\n    })\n\n    return (\n      <div>\n        {promotionCount > 0 ?\n          <div className=\"list-count no-pagination\">\n            {\"Showing \"}\n            {promotionCount}\n            {\" of \"}\n            {totalListCount}\n          </div> :\n          <NoResultMessage\n            label=\"No events\"\n            description=\"Create an event to boost customer engagement with your store!\"\n          />\n        }\n      </div>\n    )\n  }\n\n  handleOnClickList = (e, itemId) => {\n    let element = e.target;\n    let formModalLabel = \"\";\n    document.activeElement.blur();\n    if (e.detail > 1) {\n      return;\n    }\n    if ((/btn-form-create|btn__label|icon-plus/.test(element.className))) {\n      if(/btn__label/.test(element.className) && !(/btn-form-create/.test(element.parentElement.className))) {\n        return;\n      }\n      formModalLabel =\n        <span>\n          {\"Website content\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"Events\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"New  event\"}\n        </span>\n\n      this.props.showFormModal({\n        title: formModalLabel,\n        itemId: \"\",\n        isNewPromotion: true\n      })\n    }\n    else if (!(/btn|icon/.test(element.className)) || (/js-btn-edit|icon-edit/.test(element.className))) {\n      formModalLabel =\n        <span>\n          {\"Website content\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"Events\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"Update  event\"}\n        </span>\n\n      this.props.showFormModal({\n        title: formModalLabel,\n        itemId: itemId,\n        isNewPromotion: false\n      })\n    }\n  }\n\n  render() {\n    const {\n      data,\n      showFilter,\n      filterStatus,\n      isDashboard,\n      hideFilter,\n      totalListCount\n    } = this.props;\n    const {\n      showLoader,\n    } = this.state;\n\n    return (\n      <div>\n        <div className={`events ${hideFilter ? \"hide-filter\" : \"\"}`}>\n          <PageHeader\n            title={{ value: \"Events\" }}\n            primaryBtnLabel={\"New event\"}\n            primaryBtnClassName=\"btn-form-create\"\n            primaryBtnIcon={\"plus\"}\n            primaryBtnOnClick={(e) =>\n              this.handleOnClickList(e)}\n            secondaryBtnLabel={\"Filter\"}\n            secondaryBtnClassName=\"filter-btn\"\n            secondaryBtnOnClick={() => showFilter()}\n          />\n          {showLoader &&\n            <div className=\"loader-wrapper container\">\n              <div className=\"loader\">\n              </div>\n            </div>\n          }\n          {!showLoader &&\n            this.renderItems(data, filterStatus)\n          }\n          {!isDashboard &&\n            !showLoader &&\n            data &&\n            this.renderListCount(data, totalListCount, filterStatus)\n          }\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default Events;\n","import React from \"react\";\nimport {\n  getOffers\n} from \"../../../api/StoreAPI\";\nimport PageHeader from \"../../Base/PageHeader\";\nimport ListItem from \"../../Base/ListItem\";\nimport NoResultMessage from \"../../Base/NoResultMessage\";\n\n// import GetOffers_Response from \"./GetOfferBackup.json\";\n\nclass Offers extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showLoader: true,\n    };\n  }\n\n  componentDidMount() {\n    const {\n      isDashboard\n    } = this.props\n\n    if (!isDashboard) {\n      let params = {\n        centre: \"\"\n      };\n      this.getData(params, true);\n    } else {\n      this.setState({\n        showLoader: false,\n      });\n    }\n  }\n\n  componentDidUpdate(prevProps) {\n    const {\n      filterCentre,\n      isDashboard\n    } = this.props\n\n    if (!isDashboard) {\n      if ((filterCentre !== prevProps.filterCentre)) {\n        let params = {\n          centre: filterCentre.toString()\n        }\n        this.getData(params);\n      }\n    }\n  }\n\n  getData = async (params, isOnLoad) => {\n    this.setState({\n      showLoader: true\n    })\n\n    try {\n      const response = await getOffers(params);\n      if (response.status === 200 && response.data) {\n        this.props.dataUpdate(response.data);\n        let totalResultCount = 0;\n        Object.keys(response.data).map(item => {\n          totalResultCount = totalResultCount + response.data[item].length\n        })\n        this.props.dataTotalCount(totalResultCount)\n        this.setState({\n          showLoader: false,\n        });\n      }\n    }\n    catch (e) {\n      console.error(\"Get Offers Data Error: \" + e.response.statusText);\n      // this.props.dataUpdate(GetOffers_Response);\n      // let totalResultCount = 0;\n      // Object.keys(GetOffers_Response).map(item => {\n      //   totalResultCount = totalResultCount + GetOffers_Response[item].length\n      // })\n      // this.props.dataTotalCount(totalResultCount)\n      // this.setState({\n      //   showLoader: false,\n      // });\n    }\n  };\n\n  renderItems = (data, filter) => {\n    const {\n      LivePromotions,\n      ScheduledPromotions,\n      AwaitingApprovalPromotions,\n      DraftPromotions,\n      RejectedPromotions,\n      EmbargoedPromotions,\n      dashboardPromotions\n    } = data || {};\n\n    let renderItemsLayout = \"\";\n\n    if (dashboardPromotions && dashboardPromotions.length > 0) {\n      renderItemsLayout =\n        this.renderDashboardListItem(dashboardPromotions)\n    } else {\n      let livePromotionsLayout = \"\",\n        ScheduledPromotionsLayout = \"\",\n        EmbargoedPromotionsLayout = \"\",\n        AwaitingApprovalPromotionsLayout = \"\",\n        DraftPromotionsLayout = \"\",\n        RejectedPromotionsLayout = \"\";\n\n      if (LivePromotions && LivePromotions.length > 0) {\n        livePromotionsLayout =\n          this.renderListItem(LivePromotions, \"Live\", filter)\n      }\n      if (ScheduledPromotions && ScheduledPromotions.length > 0) {\n        ScheduledPromotionsLayout =\n          this.renderListItem(ScheduledPromotions, \"Scheduled\", filter)\n      }\n      if (AwaitingApprovalPromotions && AwaitingApprovalPromotions.length > 0) {\n        AwaitingApprovalPromotionsLayout =\n          this.renderListItem(AwaitingApprovalPromotions, \"Awaiting approval\", filter)\n      }\n      if (DraftPromotions && DraftPromotions.length > 0) {\n        DraftPromotionsLayout =\n          this.renderListItem(DraftPromotions, \"Draft\", filter)\n      }\n      if (RejectedPromotions && RejectedPromotions.length > 0) {\n        RejectedPromotionsLayout =\n          this.renderListItem(RejectedPromotions, \"Rejected\", filter)\n      }\n\n      if (EmbargoedPromotions && EmbargoedPromotions.length > 0) {\n          EmbargoedPromotionsLayout =\n          this.renderListItem(EmbargoedPromotions, \"Embargoed\", filter)\n      }\n\n      if (filter === \"allStatus\") {\n        renderItemsLayout =\n          <div>\n            {livePromotionsLayout}\n            {ScheduledPromotionsLayout}\n            {EmbargoedPromotionsLayout}\n            {AwaitingApprovalPromotionsLayout}\n            {DraftPromotionsLayout}\n            {RejectedPromotionsLayout}\n          </div>\n      }\n      else if (filter === \"LivePromotions\") {\n        renderItemsLayout = livePromotionsLayout;\n      }\n      else if (filter === \"ScheduledPromotions\") {\n        renderItemsLayout = ScheduledPromotionsLayout;\n      }\n      else if (filter === \"AwaitingApprovalPromotions\") {\n        renderItemsLayout = AwaitingApprovalPromotionsLayout;\n      }\n      else if (filter === \"DraftPromotions\") {\n        renderItemsLayout = DraftPromotionsLayout;\n      }\n      else if (filter === \"RejectedPromotions\") {\n        renderItemsLayout = RejectedPromotionsLayout;\n      }\n      else if (filter === \"EmbargoedPromotions\") {\n        renderItemsLayout = EmbargoedPromotionsLayout;\n      }\n    }\n\n    return renderItemsLayout;\n  }\n\n  renderDashboardListItem = (promotions) => {\n    const {\n      noSelectedStore\n    } = this.props\n\n    return (\n      <div className=\"list__group\">\n        {promotions.map((item, index) => {\n          const {\n            ItemId,\n            Thumbnail,\n            CentreName,\n            Name,\n            Status,\n            PreviewURL\n          } = item || {};\n\n          let imageSrc = \"\";\n\n          if (Thumbnail && Thumbnail.value && Thumbnail.value.src) {\n            imageSrc = Thumbnail.value.src;\n          }\n\n          return (\n            <ListItem\n              key={`offers-list-${ItemId + index}`}\n              logoSrc={imageSrc}\n              label={CentreName}\n              title={Name}\n              status={Status}\n              previewBtn={{ \"label\": \"Preview\" }}\n              previewBtnOnClick={() => {\n                this.props.showPreviewModal({\n                  url: PreviewURL.value,\n                  title: (Name && Name.value) ? Name.value : \"\",\n                })\n              }}\n              btnOne={{ \"icon\": \"trash-2\", \"tooltip\": \"Delete\" }}\n              btnOneOnClick={() => {\n                this.props.showDeleteModal({\n                  id: ItemId.value,\n                  name: Name.value,\n                  centreName: CentreName.value,\n                  status: Status.value,\n                })\n              }}\n              listItemOnClick={(e) => {\n                if (noSelectedStore) {\n                  if (!(/btn|icon/.test(e.target.className))) {\n                    this.props.showPreviewModal({\n                      url: PreviewURL.value,\n                      title: (Name && Name.value) ? Name.value : \"\",\n                    })\n                  }\n                } else {\n                  this.handleOnClickList(e, ItemId.value)\n                }\n              }\n              }\n            />\n          )\n        })\n        }\n      </div>\n    )\n  }\n\n  renderListItem = (promotions, label, filter) => {\n    const {\n      noSelectedStore\n    } = this.props\n    return (\n      <div className=\"list__group\">\n        {filter === \"allStatus\" &&\n          <div className=\"list__header\">\n            {label}\n          </div>\n        }\n        {promotions.map((item, index) => {\n          const {\n            ItemId,\n            Thumbnail,\n            CentreName,\n            Name,\n            StartDate,\n            EndDate,\n            Status,\n            PreviewURL,\n            OfferHighlight\n          } = item || {};\n\n          let imageSrc = \"\";\n\n          if (Thumbnail && Thumbnail.value && Thumbnail.value.src) {\n            imageSrc = Thumbnail.value.src;\n          }\n\n          let description = \"\";\n\n          if (StartDate && StartDate.value || EndDate && EndDate.value) {\n            description =\n              <span>\n                {StartDate.value}\n                {EndDate && EndDate.value ? \" - \" : \"\"}\n                {EndDate.value}\n                {OfferHighlight && OfferHighlight.value ? \", \" + OfferHighlight.value : \"\"}\n              </span>\n          }\n\n          return (\n            <ListItem\n              key={`offers-list-${ItemId + index}`}\n              logoSrc={imageSrc}\n              label={CentreName}\n              title={Name}\n              storeDescription={description}\n              status={Status}\n              previewBtn={{ \"label\": \"Preview\" }}\n              previewBtnOnClick={() => {\n                this.props.showPreviewModal({\n                  url: PreviewURL.value,\n                  title: (Name && Name.value) ? Name.value : \"\",\n                })\n              }}\n              btnOne={{ \"icon\": \"trash-2\", \"tooltip\": \"Delete\" }}\n              btnOneOnClick={() => {\n                this.props.showDeleteModal({\n                  id: ItemId.value,\n                  name: Name.value,\n                  centreName: CentreName.value,\n                  status: Status.value,\n                })\n              }}\n              listItemOnClick={(e) => {\n                if (noSelectedStore) {\n                  if (!(/btn|icon/.test(e.target.className))) {\n                    this.props.showPreviewModal({\n                      url: PreviewURL.value,\n                      title: (Name && Name.value) ? Name.value : \"\",\n                    })\n                  }\n                } else {\n                  this.handleOnClickList(e, ItemId.value)\n                }\n              }\n              }\n            />\n          )\n        })\n        }\n      </div>\n    )\n  }\n\n  renderListCount = (data, totalListCount, filterStatus) => {\n    let promotionCount = 0;\n    Object.keys(data).map(item => {\n      if (filterStatus !== \"allStatus\") {\n        if (filterStatus === item) {\n          promotionCount = data[item].length;\n        }\n      } else {\n        promotionCount = promotionCount + data[item].length;\n      }\n    })\n\n    return (\n      <div>\n        {promotionCount > 0 ?\n          <div className=\"list-count no-pagination\">\n            {\"Showing \"}\n            {promotionCount}\n            {\" of \"}\n            {totalListCount}\n          </div> :\n          <NoResultMessage\n            label=\"No offers\"\n            description=\"Create an offer to boost customer engagement with your store!\"\n          />\n        }\n      </div>\n    )\n  }\n\n  handleOnClickList = (e, itemId) => {\n    let element = e.target;\n    let formModalLabel = \"\";\n    document.activeElement.blur();\n    if (e.detail > 1) {\n      return;\n    }\n    if ((/btn-form-create|btn__label|icon-plus/.test(element.className))) {\n      if(/btn__label/.test(element.className) && !(/btn-form-create/.test(element.parentElement.className))) {\n        return;\n      }\n      formModalLabel =\n        <span>\n          {\"Website content\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"Offers\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n          {\"New offer\"}\n        </span>\n\n      this.props.showFormModal({\n        title: formModalLabel,\n        itemId: \"\",\n        isNewPromotion: true\n      })\n    }\n    else if (!(/btn|icon/.test(element.className)) || (/js-btn-edit|icon-edit/.test(element.className))) {\n      formModalLabel =\n        <span>\n          {\"Website content\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"Offers\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"»\"}\n          &nbsp;&nbsp;&nbsp;\n        {\"Update offer\"}\n        </span>\n\n      this.props.showFormModal({\n        title: formModalLabel,\n        itemId: itemId,\n        isNewPromotion: false\n      })\n    }\n  }\n\n  render() {\n    const {\n      data,\n      showFilter,\n      filterStatus,\n      isDashboard,\n      hideFilter,\n      totalListCount\n    } = this.props;\n\n    const {\n      showLoader,\n    } = this.state;\n\n    return (\n      <div>\n        <div className={`offers ${hideFilter ? \"hide-filter\" : \"\"}`}>\n          <PageHeader\n            title={{ value: \"Offers\" }}\n            primaryBtnLabel={\"New offer\"}\n            primaryBtnClassName=\"btn-form-create\"\n            primaryBtnIcon={\"plus\"}\n            primaryBtnOnClick={(e) =>\n              this.handleOnClickList(e)}\n            secondaryBtnLabel={\"Filter\"}\n            secondaryBtnClassName=\"filter-btn\"\n            secondaryBtnOnClick={() => showFilter()}\n          />\n          {showLoader &&\n            <div className=\"loader-wrapper container\">\n              <div className=\"loader\">\n              </div>\n            </div>\n          }\n          {!showLoader &&\n            this.renderItems(data, filterStatus)\n          }\n          {!isDashboard &&\n            !showLoader &&\n            data &&\n            this.renderListCount(data, totalListCount, filterStatus)\n          }\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default Offers;\n","import { get } from \"lodash\";\nimport { AllHtmlEntities as Entities } from \"html-entities\";\nimport { validateImageSize, validateImageType } from \"./ImageUploadHelper\";\n\nconst isEmpty = (value) => {\n  return value ? false : true;\n};\n\nconst isObject = (value) => typeof value === 'object' && value !== null;\n\nconst isBlob = (value) =>  value instanceof Blob && value !== null;\n\nexport const validate = (state, removeValidate) => {\n  let list = [\n    // {\n    //   name: \"selectedStore\",\n    //   value: state.selectedStore,\n    //   rules: \"required\"\n    // },\n    {\n      name: \"promotionName\",\n      value: state.promotionName,\n      rules: \"required\",\n    },\n    {\n      name: \"summary\",\n      value: state.summary,\n      rules: \"required\",\n    },\n    {\n      name: \"startDate\",\n      value: state.startDate,\n      rules: \"required\",\n    },\n    {\n      name: \"endDate\",\n      value: state.endDate,\n      rules: \"required\",\n    },\n    {\n      name: \"heroImage\",\n      value: state.heroImage,\n      rules: \"required\",\n    },\n    {\n      name: \"selectedStores\",\n      value: state.selectedStores,\n      rules: \"required\",\n    },\n    {\n      name: \"description\",\n      value: state.description,\n      rules: \"required-richtext\",\n    },\n    {\n      name: \"selectedCategories\",\n      value: state.selectedCategories,\n      rules: \"required-array\",\n    },\n    {\n      name: \"embargoStartDate\",\n      value: state.embargoStartDate,\n      rules: \"optional-before-start\"\n    },\n    {\n      name: \"embargoEndDate\",\n      value: state.embargoEndDate,\n      rules: \"end-before-start\"\n    },\n    {\n      name: \"embargoEndDate\",\n      value: state.embargoEndDate,\n      rules: \"optional-before-start\"\n    },\n    {\n      name: \"embargoStartDate\",\n      value: state.embargoStartDate,\n      rules: \"start-after-end\"\n    },\n    {\n      name: \"embargoEndDate\",\n      value: state.embargoEndDate,\n      rules: \"publish-before-embargo\"\n    },\n    {\n      name: \"thumbnailFileType\",\n      value: state.thumbnail,\n      rules: \"image-file-type\"\n    },\n    {\n      name: \"heroImageFileType\",\n      value: state.heroImage,\n      rules: \"image-file-type\"\n    },\n    {\n      name: \"socialFeedFileType\",\n      value: state.socialFeedImage,\n      rules: \"image-file-type\"\n    },\n    {\n      name: \"socialStoryFileType\",\n      value: state.socialStoryImage,\n      rules: \"image-file-type\"\n    },\n    {\n      name: \"imageGalleryFileType\",\n      value: state.imageGallery,\n      rules: \"image-gallery-file-type\"\n    },\n    {\n      name: \"thumbnailFileSize\",\n      value: state.thumbnail,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"heroImageFileSize\",\n      value: state.heroImage,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"socialFeedFileSize\",\n      value: state.socialFeedImage,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"socialStoryFileSize\",\n      value: state.socialStoryImage,\n      rules: \"image-file-size\"\n    },\n    {\n      name: \"imageGalleryFileSize\",\n      value: state.imageGallery,\n      rules: \"image-gallery-file-size\"\n    }\n  ];\n\n  let result = {};\n  list.forEach((element) => {\n    if (removeValidate.indexOf(element.name) > -1) {\n      return;\n    }\n    if (element.rules === \"required\") {\n      if (isEmpty(element.value)) {\n        result[element.name] = \"Required\";\n      }\n\n      if (element.value && element.value.length && element.value.length < 1) {\n        result[element.name] = \"Required\";\n      }\n    }\n\n    if (element.rules === \"required-richtext\") {\n      if (isEmpty(element.value)) {\n        result[element.name] = \"Required\";\n      }\n\n      if (element.value && element.value.trim().length < 8) {\n        result[element.name] = \"Required\";\n      }\n    }\n    if (element.rules === \"required-array\") {\n      if (element.value && !element.value.length && element.value.length < 1) {\n        result[element.name] = \"Required\";\n      }\n    }\n\n    if (element.rules === \"optional-before-start\") {\n      let dateToValidate = new Date(element.value).getTime();\n      let dateToCompare = new Date(state.startDate).getTime();\n      if (dateToValidate && !(dateToValidate < dateToCompare)) {\n        result[element.name] = \"Embargo must end before offer can start\";\n      }\n    }\n\n    if (element.rules === \"end-before-start\") {\n      let dateToValidate = new Date(element.value).getTime();\n      let dateToCompare = new Date(state.embargoStartDate).getTime();\n      if (dateToValidate < dateToCompare) {\n        result[element.name] = \"End date cannot be before start date\";\n      }\n    }\n\n    if (element.rules === \"start-after-end\") {\n      let dateToValidate = new Date(element.value).getTime();\n      let dateToCompare = new Date(state.embargoEndDate).getTime();\n      if (dateToValidate > dateToCompare) {\n        result[element.name] = \"Start date cannot be before end date\";\n      }\n    }\n\n    if (element.rules === \"publish-before-embargo\") {\n      let dateToValidate = new Date(element.value).getTime();\n      let dateToCompare = new Date(state.displayStartDate).getTime();\n      if (dateToCompare && (dateToValidate > dateToCompare)) {\n        result[element.name] = \"Cannot display during embargo period\";\n      }\n    }\n\n    if (element.rules === 'image-file-type') {\n      if(isObject(element.value)){ \n        const imageValidity = validateImageType(element.value);\n          if (imageValidity === false) {\n            result[element.name] = \"Invalid file type\";\n          }\n      } else {}\n    }\n\n    if (element.rules === 'image-file-size') {\n      if(isObject(element.value)){ \n      const imageValidity = validateImageSize(element.value);\n        if (imageValidity === false) {\n          result[element.name] = \"Your file is too large. File upload image size limit is 5MB\";\n        }\n    }\n  }\n\n    if (element.rules === 'image-gallery-file-type') {\n      if (!isEmpty(element.value)) {\n        let invalidImages = [];\n        element.value.forEach(elem => {\n          if(isObject(elem) && isBlob(elem)){\n            let imageValidity = validateImageType(elem);\n            if(imageValidity === false) {\n              invalidImages.push(elem);\n            }\n          }\n        });\n        if (invalidImages.length > 0) {\n          result[element.name] = \"Invalid file type\";\n        }\n      }\n    }\n\n    if (element.rules === 'image-gallery-file-size') {\n      if (!isEmpty(element.value)) {\n        let invalidImages = [];\n        element.value.forEach(elem => {\n          if(isObject(elem) && isBlob(elem)){\n          let imageValidity = validateImageSize(elem);\n          if(imageValidity === false) {\n            invalidImages.push(elem);\n          }\n        }\n        });\n        if (invalidImages.length > 0) {\n          result[element.name] =  \"A file is too large. File upload image size limit is 5MB\";\n        }\n      }\n    }\n\n    //Other Validation Rules\n  });\n  return result;\n};\n\nexport const formDataFields = {\n  itemId: null,\n  selectedStore: null,\n  categoryTag: \"\",\n  offerHighlight: \"\",\n  promotionName: \"\",\n  summary: \"\",\n  startDate: \"\",\n  endDate: \"\",\n  displayStartDate: null,\n  displayEndDate: null,\n  embargoStartDate: \"\",\n  embargoEndDate: \"\",\n  location: \"\",\n  schedule: \"\",\n  duration: \"\",\n  capacity: \"\",\n  price: \"\",\n  description: \"\",\n  termsAndConditionsCopy: \"\",\n  termsAndConditionsLink: \"\",\n  selectedCategories: [],\n  heroImage: \"\",\n  thumbnail: \"\",\n  imageGalleryChecker: [],\n  imageGallery: [],\n  selectedStores: [],\n  selectedSpecialPromotion: [],\n  itemIds: [],\n  socialFeedImage: \"\",\n  socialStoryImage: \"\",\n  retailerHandles: \"\",\n  retailerHashtags: \"\",\n  consentToSharing: false\n};\n\nexport const setPromotionData = (data) => {\n  return {\n    itemId: data.ItemId.value,\n    heroImage: get(data, \"HeroImage.value.src\", null),\n    thumbnail: get(data, \"Thumbnail.value.src\", null),\n    promotionName: data.Name.value,\n    offerHighlight: data.OfferHighlight.value,\n    duration: data.Duration.value,\n    capacity: data.Capacity.value,\n    location: data.Location.value,\n    categoryTag: data.CategoryTag.value,\n    summary: data.Summary.value,\n    startDate: data.StartDate.value,\n    endDate: data.EndDate.value,\n    displayStartDate: data.DisplayStartDate.value,\n    displayEndDate: data.DisplayEndDate.value,\n    embargoStartDate: data.EmbargoStartDate.value,\n    embargoEndDate: data.EmbargoEndDate.value,\n    schedule: data.Schedule.value,\n    price: data.Price.value,\n    description: data.Description.value,\n    selectedSpecialPromotion: data.LinkedSpecialHolidays.map(\n      (el) => el.HolidayId.value\n    ),\n    termsAndConditionsCopy: get(data, \"TermsAndConditionsCopy.value\", null),\n    termsAndConditionsLink: get(\n      data,\n      \"TermsAndConditionsLink.value.href\",\n      null\n    ),\n    selectedCategories: data.LinkCategories.map(\n      (el) => el.CategoryId.value\n    ),\n    imageGalleryChecker: data.ImageGallery.map((el) => el.Id.value),\n    imageGallery: data.ImageGallery.map((el) => {\n      return {\n        name: el.Name.value,\n        id: el.Id.value,\n        src: el.Src.value,\n      };\n    }),\n    socialFeedImage: get(data, \"SocialFeedImage.value.src\", null),\n    socialStoryImage: get(data, \"SocialStoryImage.value.src\", null),\n    retailerHandles: data.RetailerHandles.value,\n    retailerHashtags: data.RetailerHashtags.value,\n    consentToSharing: data.ConsentToSharing.value\n  };\n};\n\nexport const buildFormData = (postData) => {\n  const formData = new FormData();\n  const entities = new Entities();\n\n  Object.keys(postData).forEach(function (key) {\n    if (key === \"itemId\") {\n      return\n    }\n    if (\n      (key === \"startDate\" ||\n        key === \"embargoStartDate\" ||\n        key === \"embargoEndDate\" ||\n        key === \"endDate\" ||\n        key === \"displayStartDate\" ||\n        key === \"displayEndDate\") &&\n      postData[key]\n    ) {\n      return formData.append(key, new Date(postData[key]).toISOString());\n    }\n\n    if (key === \"description\") {\n      formData.append(key, entities.encode(postData[key]));\n      return;\n    }\n\n    if (key === \"imageGalleryChecker\") {\n      // if (postData[key].length) {\n      //   let newimageGalleryChecker = postData[\"imageGallery\"].filter((item) => {\n      //     if (postData[key].indexOf(item.id) > -1) {\n      //       return item.id;\n      //     } \n      //   });\n      // return newimageGalleryChecker.map((item) =>\n      //   formData.append(key, item.id)\n      // );\n      // }\n\n      if (postData[\"imageGallery\"].length > 0) {\n        return postData[\"imageGallery\"].map((item) =>\n          formData.append(key, item.id ? item.id : null)\n        );\n      }\n      return;\n    }\n\n    if (key === \"imageGallery\") {\n      // if (postData[key].length > 0) {\n      //   let newimageGallery = postData[key].filter((item) => {\n      //     return item.size ? item : null;\n      //   });\n\n      //   return newimageGallery.map((file) => formData.append(key, file));\n      // }\n      if (postData[key].length > 0) {\n        let newimageGallery = postData[key].filter(item => item.size)\n        return newimageGallery.map((file) => formData.append(key, file));\n      }\n      return;\n    }\n\n    if (key === \"selectedCategories\" && postData[key].length) {\n      return postData[key].map((category) => formData.append(key, category));\n    }\n\n    if (key === \"selectedSpecialPromotion\" && postData[key].length) {\n      return postData[key].map((promotion) => formData.append(key, promotion));\n    }\n\n    if (key === \"heroImage\" || key === \"thumbnail\" || key === \"socialStoryImage\" || key === \"socialFeedImage\") {\n      if (typeof postData[key] !== \"string\") {\n        return formData.append(key, postData[key]);\n      }\n      return;\n    }\n\n    if (key === \"selectedStores\" && postData[key].length) {\n      return postData[key].map((storeId) => formData.append(key, storeId));\n    }\n\n    if (key === \"itemIds\" && postData[key].length) {\n      return postData[key].map((itemId) => formData.append(key, itemId));\n    }\n\n    return formData.append(key, postData[key]);\n  });\n\n  return formData;\n};\n","import React from \"react\";\r\nimport axios from \"axios\";\r\nimport Loadable from \"react-loadable\";\r\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\r\nimport TagManager from \"react-gtm-module\";\r\nimport FormImageGallery from \"../../../Base/FormImageGallery\";\r\nimport FormInput from \"../../../Base/FormInput\";\r\nimport FormInputMultiple from \"../../../Base/FormInputMultiple\";\r\nimport FormDate from \"../../../Base/FormDate\";\r\nimport FormCheckbox from \"../../../Base/FormCheckbox\";\r\nimport FormListbox from \"../../../Base/FormListbox\";\r\nimport FormListCheckbox from \"../../../Base/FormListCheckbox\";\r\nimport Checkbox from \"../../../Base/Checkbox\";\r\nimport FormErrorMessage from \"../../../Base/FormErrorMessage\";\r\nimport FormImageUpload from \"../../../Base/FormImageUpload\";\r\nimport PopupPreview from \"../../../Base/Popup/PopupPreview\";\r\nimport { get } from \"lodash\";\r\nimport {\r\n  validate,\r\n  setPromotionData,\r\n  buildFormData,\r\n  formDataFields,\r\n} from \"../../../../helper/PromotionHelper\";\r\nimport { getUrlParameter } from \"../../../../helper/UrlHelper\";\r\nimport { getAncestorElement } from \"../../../../helper/GetAncestorElementHelper\";\r\nimport {\r\n  getPromotionData,\r\n  getCentreStores,\r\n  getCategoriesAndHolidays,\r\n} from \"../../../../api/PromotionAPI\";\r\n\r\n// import promotionProps from \"./jsonResponse/editPropsJson.json\";\r\n// import newSaveResponse from \"./jsonResponse/newSaveResponse.json\";\r\n// import getCentreStoresResponseApi from \"./jsonResponse/getCentreStoresResponseApi.json\";\r\n// import getCategoriesAndHolidaysApi from \"./jsonResponse/getCategoriesAndHolidaysApi.json\";\r\n// import GetPromotionDataResponse from \"./jsonResponse/GetPromotionDataResponse.json\";\r\n\r\nconst RichTextEditor = Loadable({\r\n  loader: () => import(\"../../../Base/RichTextEditor\"),\r\n  loading: () => null,\r\n});\r\n\r\nclass FormPromotions extends React.Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      mode: \"new\",\r\n      showModal: false,\r\n      formError: {},\r\n      centreStoreList: [],\r\n      categories: [],\r\n      holidays: [],\r\n      formData: { ...formDataFields },\r\n      componentReady: false,\r\n      showScheduleDate: false,\r\n      showTermsCondition: false,\r\n      showImageGallery: false,\r\n      disableBtn: true,\r\n      showSaveHint: false,\r\n      showErrorMessage: false,\r\n      formErrorMessage: \"\",\r\n      imageGalleryHolder: [],\r\n      displayStartDateHolder: null,\r\n      displayEndDateHolder: null,\r\n      termsAndConditionsLinkHolder: \"\",\r\n      termsAndConditionsCopyHolder: \"\",\r\n      promotionPreviewUrl: \"\",\r\n      promotionPreviewTitle: \"\",\r\n      promotionList: [],\r\n      getPromotionDataReady: false,\r\n      previewBulkLogo: \"\",\r\n      promotionIdList: [],\r\n      retailerId: null,\r\n      consentToSharing: false,\r\n      retailerHandles: \"\",\r\n      retailerHashtags: \"\",\r\n      socialFeedImage: \"\",\r\n      socialStoryImage: \"\",\r\n      retailerId: null\r\n    };\r\n  }\r\n\r\n  componentDidMount() {\r\n    const { itemId, dashboardType } = this.props;\r\n\r\n    let type = \"\";\r\n\r\n    if (dashboardType) {\r\n      type = dashboardType.charAt(0).toUpperCase() + dashboardType.slice(1);\r\n    } else {\r\n      type = getUrlParameter(\"type\").replace(\"?sc_mode=normal\", \"\");\r\n    }\r\n\r\n    this.setState({\r\n      type,\r\n      componentReady: true,\r\n    });\r\n\r\n    if (itemId) {\r\n      this.getData(itemId);\r\n    } else {\r\n      this.getCentreStoreList();\r\n    }\r\n    this.getCategoriesAndHolidays();\r\n    this.handleFormData();\r\n  }\r\n\r\n  getData = async (itemId) => {\r\n    try {\r\n      let response = await getPromotionData({ itemId });\r\n      if (response.status === 200 && response.data) {\r\n        let promotionData = setPromotionData(response.data.Promotion);\r\n\r\n        this.setState({\r\n          mode: \"edit\",\r\n          getPromotionDataReady: true,\r\n          formData: { ...this.state.formData, ...promotionData },\r\n          showScheduleDate:\r\n            promotionData.displayStartDate || promotionData.displayEndDate\r\n              ? true\r\n              : false,\r\n          showTermsCondition:\r\n            promotionData.termsAndConditionsLink ||\r\n              promotionData.termsAndConditionsCopy\r\n              ? true\r\n              : false,\r\n          showImageGallery:\r\n            promotionData.imageGallery && promotionData.imageGallery.length > 0\r\n              ? true\r\n              : false,\r\n          consentToSharing: promotionData.consentToSharing\r\n        });\r\n      }\r\n    } catch (e) {\r\n      console.error(\"Get Promotion Data Error: \" + e);\r\n      this.setState({\r\n        getPromotionDataReady: true,\r\n      });\r\n      // if (itemId) {\r\n      //   let promotionData = setPromotionData(GetPromotionDataResponse.Promotion);\r\n\r\n      //   this.setState({\r\n      //     mode: \"edit\",\r\n      //     getPromotionDataReady: true,\r\n      //     formData: { ...this.state.formData, ...promotionData },\r\n      //     showScheduleDate: (promotionData.displayStartDate || promotionData.displayEndDate) ? true : false,\r\n      //     showExternalPage: (promotionData.bookNowLink || promotionData.bookNowLinkCaption) ? true : false,\r\n      //     showTermsCondition: (promotionData.termsAndConditionsLink || promotionData.termsAndConditionsCopy) ? true : false,\r\n      //     showImageGallery: (promotionData.imageGallery.length > 0) ? true : false\r\n      //   });\r\n      // }\r\n    }\r\n  };\r\n\r\n  getCategoriesAndHolidays = async () => {\r\n    try {\r\n      let response = await getCategoriesAndHolidays();\r\n      if (response.status === 200 && response.data) {\r\n        let categoryListData = response.data.Categories;\r\n        let holidayListData = response.data.GlobalSpecialHoliday;\r\n        let categoryList = [];\r\n        let holidayList = [];\r\n        if (categoryListData.length > 0) {\r\n          categoryListData.forEach((el) =>\r\n            categoryList.push({\r\n              name: el.CategoryName.value,\r\n              value: el.CategoryId.value,\r\n            })\r\n          );\r\n        }\r\n        if (holidayListData.length > 0) {\r\n          holidayListData.forEach((el) =>\r\n            holidayList.push({\r\n              name: el.HolidayName.value,\r\n              value: el.HolidayId.value,\r\n            })\r\n          );\r\n        }\r\n        this.setState({\r\n          categories: categoryList,\r\n          holidays: holidayList,\r\n        });\r\n      }\r\n    } catch (e) {\r\n      console.error(\r\n        \"Get Categories And Holidays Error: \" + e.response.statusText\r\n      );\r\n      // let categoryListData = getCategoriesAndHolidaysApi.Categories;\r\n      // let holidayListData = getCategoriesAndHolidaysApi.GlobalSpecialHoliday;\r\n      // let categoryList = [];\r\n      // let holidayList = [];\r\n      // if (categoryListData.length > 0) {\r\n      //   categoryListData.forEach((el) =>\r\n      //     categoryList.push({\r\n      //       name: el.CategoryName.value,\r\n      //       value: el.CategoryId.value,\r\n      //     })\r\n      //   );\r\n      // }\r\n      // if (holidayListData.length > 0) {\r\n      //   holidayListData.forEach((el) =>\r\n      //     holidayList.push({\r\n      //       name: el.HolidayName.value,\r\n      //       value: el.HolidayId.value,\r\n      //     })\r\n      //   );\r\n      // }\r\n      // this.setState({\r\n      //   categories: categoryList,\r\n      //   holidays: holidayList,\r\n      // });\r\n    }\r\n  };\r\n\r\n  getCentreStoreList = async () => {\r\n    try {\r\n      let response = await getCentreStores();\r\n      if (response.status === 200 && response.data) {\r\n        if (response.data.IsSuccess.value) {\r\n          this.setState({\r\n            centreStoreList: get(response.data, \"CentreStoreList\", []),\r\n            retailerId: get(response.data, \"Retailer.RetailerId.value\", \"\"),\r\n            getPromotionDataReady: true,\r\n          });\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.error(\"Get centre stores data error: \" + e.response.statusText);\r\n      this.setState({\r\n        getPromotionDataReady: true,\r\n      });\r\n      // this.setState({\r\n      //   centreStoreList: get(getCentreStoresResponseApi, \"CentreStoreList\", []),\r\n      //   retailerId: get(getCentreStoresResponseApi, \"Retailer.RetailerId.value\", \"\"),\r\n      //   getPromotionDataReady: true,\r\n      // });\r\n    }\r\n  };\r\n\r\n  handleListbox = (id, field, isCheckbox) => {\r\n    const { formData } = this.state;\r\n    let options;\r\n    let selected = [];\r\n    if (document) {\r\n      if (isCheckbox) {\r\n        options = document.querySelectorAll(`#${id} input:checked`);\r\n      } else {\r\n        options = document.querySelectorAll(`#${id} option:checked`);\r\n      }\r\n      if (options) {\r\n        for (let i = 0; i < options.length; i++) {\r\n          selected.push(options[i].value);\r\n        }\r\n      }\r\n    }\r\n    this.setState({\r\n      formData: {\r\n        ...formData,\r\n        [field]: selected,\r\n      },\r\n    });\r\n  };\r\n\r\n  handleSelect = (isSelect, field, options) => {\r\n    const { formData } = this.state;\r\n    this.setState({\r\n      formData: {\r\n        ...formData,\r\n        [field]: isSelect ? options.map((el) => el.value) : [],\r\n      },\r\n    });\r\n  };\r\n\r\n  handleInputCheckbox = (value) => {\r\n    const { formData } = this.state;\r\n    if (formData.selectedCategories.indexOf(value) > -1) {\r\n      this.setState({\r\n        formData: {\r\n          ...formData,\r\n          selectedCategories: formData.selectedCategories.filter(\r\n            (el) => el !== value\r\n          ),\r\n        },\r\n      });\r\n    } else {\r\n      this.setState({\r\n        formData: {\r\n          ...formData,\r\n          selectedCategories: [...formData.selectedCategories, value],\r\n        },\r\n      });\r\n    }\r\n  };\r\n\r\n  handleStoreListCheckbox = (value, selectAllStores) => {\r\n    const { formData, centreStoreList } = this.state;\r\n\r\n    if (value === \"0\") {\r\n      let allStores = [];\r\n      centreStoreList.map((centre) => {\r\n        centre.StoreList.map((store) => {\r\n          allStores.push(store.StoreItemId.value);\r\n        });\r\n      });\r\n\r\n      this.setState({\r\n        formData: {\r\n          ...formData,\r\n          selectedStores: selectAllStores ? allStores : [],\r\n        },\r\n      });\r\n    } else if (formData.selectedStores.indexOf(value) > -1) {\r\n      this.setState({\r\n        formData: {\r\n          ...formData,\r\n          selectedStores: formData.selectedStores.filter((el) => el !== value),\r\n        },\r\n      });\r\n    } else {\r\n      this.setState({\r\n        formData: {\r\n          ...formData,\r\n          selectedStores: [...formData.selectedStores, value],\r\n        },\r\n      });\r\n    }\r\n  };\r\n\r\n  handleFormUpdate = (value) => {\r\n    this.setState({\r\n      formData: {\r\n        ...this.state.formData,\r\n        ...value,\r\n      },\r\n    });\r\n  };\r\n\r\n  validateForm = async () => {\r\n    let formError = validate(\r\n      this.state.formData,\r\n      this.state.mode === \"edit\" ? [\"selectedRetailer\"] : []\r\n    );\r\n    let response;\r\n    if (Object.entries(formError).length !== 0) {\r\n      this.setState({\r\n        formError,\r\n        showErrorMessage: true,\r\n        formErrorMessage: \"Please fill out all mandatory fields marked below\",\r\n      });\r\n      this.triggerBackToTop();\r\n      response = {\r\n        isSuccess: false,\r\n      };\r\n    } else {\r\n      this.setState({\r\n        formError,\r\n      });\r\n      response = await this.saveForm().then((result) => {\r\n        if (result.isSuccess) {\r\n          return { isSuccess: true };\r\n        }\r\n      });\r\n    }\r\n    return response;\r\n  };\r\n\r\n  saveForm = async () => {\r\n    const { formData, mode, type, promotionIdList } = this.state;\r\n    var timezoneId = new Date().getTimezoneOffset();\r\n    const url = \"/api/sitecore/promotion/SavePromotion\";\r\n    let data = buildFormData({\r\n      ...formData,\r\n      timeZoneId: timezoneId,\r\n    });\r\n\r\n    this.triggerBackToTop();\r\n\r\n    this.setState(\r\n      {\r\n        showSaveHint: true,\r\n        disableBtn: true,\r\n      },\r\n      this.handleFormData\r\n    );\r\n\r\n    try {\r\n      let response = await axios({\r\n        method: \"POST\",\r\n        url,\r\n        data,\r\n        params: {\r\n          type,\r\n          ...(mode === \"edit\"\r\n            ? { itemId: formData.itemId }\r\n            : { itemId: promotionIdList.toString() }),\r\n        },\r\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\r\n      });\r\n\r\n      if (response) {\r\n        if (response.data.IsSuccess.value && mode === \"new\") {\r\n          const promotionList = response.data.PromotionList;\r\n          const promotionsItem = promotionList[0].Promotions;\r\n          const itemIds = this.extractItemIds(promotionList);\r\n          let previewBulkLogo;\r\n\r\n          this.setGoogleAnalytics(promotionList);\r\n\r\n          if (response.data.RetailerLogo && response.data.RetailerLogo.value) {\r\n            previewBulkLogo = response.data.RetailerLogo.value;\r\n          }\r\n\r\n          if (promotionList.length === 1 && promotionsItem.length === 1) {\r\n            this.setState(\r\n              {\r\n                formData: {\r\n                  ...formData,\r\n                  itemIds,\r\n                },\r\n                showSaveHint: false,\r\n                disableBtn: false,\r\n                showErrorMessage: false,\r\n                promotionPreviewUrl: promotionsItem[0].PreviewUrl.value,\r\n                // promotionPreviewTitle: promotionsItem[0].Store.value,\r\n                promotionPreviewTitle: formData.promotionName,\r\n                promotionList: promotionList,\r\n                previewBulkLogo: \"\",\r\n                promotionIdList: this.setPromotionIdList(promotionList),\r\n              },\r\n              this.handleFormData\r\n            );\r\n          } else {\r\n            this.setState(\r\n              {\r\n                formData: {\r\n                  ...formData,\r\n                  itemIds,\r\n                },\r\n                showSaveHint: false,\r\n                disableBtn: false,\r\n                showErrorMessage: false,\r\n                promotionPreviewUrl: \"\",\r\n                promotionPreviewTitle: \"\",\r\n                promotionList: promotionList,\r\n                previewBulkLogo,\r\n                promotionIdList: this.setPromotionIdList(promotionList),\r\n              },\r\n              this.handleFormData\r\n            );\r\n          }\r\n\r\n          return {\r\n            isSuccess: true,\r\n          };\r\n        } else if (response.data.IsSuccess.value && mode === \"edit\") {\r\n          const promotionList = response.data.PromotionList[0];\r\n          const promotion = promotionList.Promotions[0];\r\n          const promotionPreviewUrl = promotion.PreviewUrl.value;\r\n          const promotionPreviewTitle =\r\n            promotion.Store.value + \" \" + promotionList.Centre.value;\r\n          this.setState(\r\n            {\r\n              formData: {\r\n                ...formData,\r\n                itemIds: [`${promotion.ItemId.value}`],\r\n              },\r\n              showErrorMessage: false,\r\n              showSaveHint: false,\r\n              disableBtn: false,\r\n              promotionPreviewUrl,\r\n              promotionPreviewTitle: formData.promotionName,\r\n            },\r\n            this.handleFormData\r\n          );\r\n\r\n          return {\r\n            isSuccess: true,\r\n          };\r\n        } else {\r\n          this.setState(\r\n            {\r\n              showSaveHint: false,\r\n              disableBtn: true,\r\n              showErrorMessage: true,\r\n              formErrorMessage:\r\n                \"Promotion Not Saved \" + response.data.Message.value,\r\n            },\r\n            this.handleFormData\r\n          );\r\n\r\n          return {\r\n            isSuccess: false,\r\n          };\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.error(\"Promotion Save Error: \" + e.response.statusText);\r\n      // Condition of catch\r\n      this.setState({\r\n        showErrorMessage: true,\r\n        formErrorMessage: \"Promotion Save Error: \" + e.response.statusText,\r\n      });\r\n      return {\r\n        isSuccess: false,\r\n      };\r\n\r\n      // Condition on mode === edit\r\n      // const promotionList = newSaveResponse.PromotionList[0]\r\n      // const promotion = promotionList.Promotions[0];\r\n      // const promotionPreviewUrl = promotion.PreviewUrl.value;\r\n      // const promotionPreviewTitle = promotion.Store.value + \" \" + promotionList.Centre.value;\r\n\r\n      // this.setState(\r\n      //     {\r\n      //         formData: {\r\n      //             ...formData,\r\n      //             itemIds: [`${promotion.ItemId.value}`]\r\n      //         },\r\n      //         showErrorMessage: false,\r\n      //         showSaveHint: false,\r\n      //         disableBtn: false,\r\n      //         promotionPreviewUrl,\r\n      //         promotionPreviewTitle: formData.promotionName\r\n      //     },\r\n      //     this.handleFormData\r\n      // );\r\n\r\n      // return {\r\n      //     isSuccess: true\r\n      // };\r\n\r\n      // condition new\r\n      // const promotionList = newSaveResponse.PromotionList;\r\n      // const promotionsItem = promotionList[0].Promotions;\r\n      // const itemIds = this.extractItemIds(promotionList);\r\n      // let previewBulkLogo;\r\n\r\n      // if (newSaveResponse.RetailerLogo && newSaveResponse.RetailerLogo.value) {\r\n      //     previewBulkLogo = newSaveResponse.RetailerLogo.value;\r\n      // }\r\n      // this.setState({\r\n      //     formData: {\r\n      //         ...formData,\r\n      //         itemIds\r\n      //     },\r\n      //     showSaveHint: false,\r\n      //     disableBtn: false,\r\n      // },\r\n      //     this.handleFormData\r\n      // );\r\n\r\n      // if (promotionList.length === 1 && promotionsItem.length === 1) {\r\n      //     this.setState({\r\n      //         formData: {\r\n      //             ...formData,\r\n      //             itemIds\r\n      //         },\r\n      //         showSaveHint: false,\r\n      //         disableBtn: false,\r\n      //         showErrorMessage: false,\r\n      //         promotionPreviewUrl: promotionsItem[0].PreviewUrl.value,\r\n      //         // promotionPreviewTitle: promotionsItem[0].Store.value,\r\n      //         promotionPreviewTitle: formData.promotionName,\r\n      //         promotionList: promotionList,\r\n      //         previewBulkLogo: \"\",\r\n      //         promotionIdList: this.setPromotionIdList(promotionList)\r\n      //     },\r\n      //         this.handleFormData\r\n      //     );\r\n      // } else {\r\n      //     this.setState({\r\n      //         formData: {\r\n      //             ...formData,\r\n      //             itemIds\r\n      //         },\r\n      //         showSaveHint: false,\r\n      //         disableBtn: false,\r\n      //         showErrorMessage: false,\r\n      //         promotionPreviewUrl: \"\",\r\n      //         promotionPreviewTitle: \"\",\r\n      //         promotionList: promotionList,\r\n      //         previewBulkLogo,\r\n      //         promotionIdList: this.setPromotionIdList(promotionList)\r\n      //     },\r\n      //         this.handleFormData\r\n      //     );\r\n      // }\r\n\r\n      // return {\r\n      //     isSuccess: true\r\n      // };\r\n    }\r\n  };\r\n\r\n  submitForm = async () => {\r\n    const {\r\n      formData,\r\n      mode,\r\n      promotionPreviewUrl,\r\n      promotionPreviewTitle,\r\n    } = this.state;\r\n    const url = \"/api/sitecore/promotion/SubmitPromotion\";\r\n    let data = buildFormData({\r\n      itemIds: mode === \"edit\" ? [`${formData.itemId}`] : formData.itemIds,\r\n    });\r\n    this.triggerBackToTop();\r\n\r\n    try {\r\n      let response = await axios({\r\n        method: \"POST\",\r\n        url,\r\n        data,\r\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\r\n      });\r\n\r\n      if (response) {\r\n        if (response.data.IsSuccess.value) {\r\n          this.setState({\r\n            showErrorMessage: false,\r\n          });\r\n          return {\r\n            isSuccess: true,\r\n            promotionPreviewUrl: mode === \"edit\" ? promotionPreviewUrl : \"\",\r\n            promotionPreviewTitle: mode === \"edit\" ? promotionPreviewTitle : \"\",\r\n          };\r\n        } else {\r\n          this.setState({\r\n            showErrorMessage: true,\r\n            formErrorMessage:\r\n              \"Promotion Not Submitted \" + response.data.Message.value,\r\n          });\r\n          return {\r\n            isSuccess: false,\r\n          };\r\n        }\r\n      }\r\n    } catch (e) {\r\n      console.error(\"Promotion Submit Error: \" + e.response.statusText);\r\n      this.setState({\r\n        showErrorMessage: true,\r\n        formErrorMessage: \"Promotion Submit Error: \" + e.response.statusText,\r\n      });\r\n      return {\r\n        isSuccess: false,\r\n      };\r\n\r\n      // this.setState({\r\n      //     showErrorMessage: false,\r\n      // });\r\n      // return {\r\n      //     isSuccess: true,\r\n      //     promotionPreviewUrl: mode === \"edit\" ? promotionPreviewUrl : \"\",\r\n      //     promotionPreviewTitle: mode === \"edit\" ? promotionPreviewTitle : \"\"\r\n      // };\r\n    }\r\n  };\r\n\r\n  triggerBackToTop = () => {\r\n    let backToTop;\r\n    if (document) {\r\n      backToTop = document.querySelector(\".form__modal--back-to-top-button\");\r\n      if (backToTop) {\r\n        backToTop.click();\r\n      }\r\n    }\r\n  };\r\n\r\n  setGoogleAnalytics = (promotionList) => {\r\n    promotionList.map((item) => {\r\n      const { Centre, Promotions } = item;\r\n      Promotions.map((promotion) => {\r\n        TagManager.dataLayer({\r\n          dataLayer: {\r\n            event: \"createdPromotions\",\r\n            promotionType: this.state.type,\r\n            promotionCentre: Centre && Centre.value,\r\n            promotionRetailer:\r\n              promotion && promotion.Store && promotion.Store.value,\r\n          },\r\n          dataLayerName: \"dataLayer\",\r\n        });\r\n      });\r\n    });\r\n  };\r\n\r\n  setPromotionIdList = (promotionList) => {\r\n    let promotionIdList = [];\r\n\r\n    if (promotionList.length > 0) {\r\n      promotionList.map((item) => {\r\n        const { Promotions } = item;\r\n\r\n        if (Promotions.length > 0) {\r\n          Promotions.map((item) => {\r\n            const { ItemId } = item;\r\n\r\n            if (ItemId && ItemId.value) {\r\n              promotionIdList.push(ItemId.value);\r\n            }\r\n          });\r\n        }\r\n      });\r\n    }\r\n\r\n    return promotionIdList;\r\n  };\r\n\r\n  extractItemIds = (centreList) => {\r\n    let itemIds = [];\r\n    centreList.map((center) => {\r\n      center.Promotions.map((promotion) => {\r\n        itemIds.push(promotion.ItemId.value);\r\n      });\r\n    });\r\n    return itemIds;\r\n  };\r\n\r\n  handlePreviewForm = () => {\r\n    this.setState({\r\n      showModal: true,\r\n    });\r\n  };\r\n\r\n  renderModal = () => {\r\n    const { promotionList, showModal, previewBulkLogo } = this.state;\r\n\r\n    const { promotionName } = this.state.formData || {};\r\n\r\n    return (\r\n      <div className=\"promotion-modal\">\r\n        {promotionList && promotionList.length > 0 && (\r\n          <PopupPreview\r\n            previewTitle={\"Preview\"}\r\n            previewLogo={previewBulkLogo}\r\n            previewList={promotionList}\r\n            previewListChildName=\"Promotions\"\r\n            previewFormLabel={promotionName}\r\n            btnLabel={\"Submit\"}\r\n            btnOnClick={(e) => {\r\n              let showModalWrapper = getAncestorElement(\r\n                e.target,\r\n                \"form__modal\"\r\n              );\r\n              if (showModalWrapper) {\r\n                let submitBtn = showModalWrapper.querySelector(\r\n                  \".promotion-submit-btn\"\r\n                );\r\n                if (submitBtn) {\r\n                  submitBtn.click();\r\n                }\r\n              }\r\n            }}\r\n            showPreviewModal={() => this.setState({ showModal: false })}\r\n          />\r\n        )}\r\n      </div>\r\n    );\r\n  };\r\n\r\n  handleFormData = () => {\r\n    const {\r\n      showSaveHint,\r\n      disableBtn,\r\n      promotionPreviewUrl,\r\n      promotionPreviewTitle,\r\n    } = this.state;\r\n    this.props.handleFormData(\r\n      showSaveHint,\r\n      disableBtn,\r\n      promotionPreviewUrl,\r\n      promotionPreviewTitle,\r\n      this.validateForm,\r\n      this.handlePreviewForm,\r\n      this.submitForm\r\n    );\r\n  };\r\n\r\n  buildCentreStoreList = (centreStoreList) => {\r\n    const { type, formData } = this.state;\r\n\r\n    return (\r\n      <div className=\"form__multiple-stores\">\r\n        <div className=\"form__multiple-stores--header\">\r\n          <label className=\"form__label\">\r\n            {`Publish this ${type.toLowerCase()} for the multiple centres`}\r\n          </label>\r\n          <div className=\"form__multiple-stores--action\">\r\n            <div\r\n              className=\"form__multiple-stores--action-btn\"\r\n              onClick={() => this.handleStoreListCheckbox(\"0\", true)}\r\n            >\r\n              {\"Select all\"}\r\n            </div>\r\n            <div\r\n              className=\"form__multiple-stores--action-btn\"\r\n              onClick={() => this.handleStoreListCheckbox(\"0\", false)}\r\n            >\r\n              {\"Deselect all\"}\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div className=\"form__multiple-stores--content\">\r\n          {centreStoreList.map((centre, index) => {\r\n            const { CentreName, CentreIcon, StoreList } = centre;\r\n            return (\r\n              <div key={`centreStoreList-container-${index}`} className=\"row\">\r\n                <div className=\"col col-12 col-md-6\">\r\n                  <div className=\"form__multiple-stores--logo\">\r\n                    {CentreIcon && CentreIcon.value ? (\r\n                      <img\r\n                        alt={`CentreIcon-${index}`}\r\n                        src={logoPlaceholder}\r\n                        data-src={CentreIcon.value}\r\n                        className=\"lazyload\"\r\n                      />\r\n                    ) : (\r\n                      <div className=\"no-image\" />\r\n                    )}\r\n                  </div>\r\n                  <div className=\"form__multiple-stores--label\">\r\n                    {CentreName.value}\r\n                  </div>\r\n                </div>\r\n                <div className=\"col col-12 col-md-6\">\r\n                  {StoreList.map((store, index) => {\r\n                    const { StoreItemId, StoreName } = store;\r\n                    return (\r\n                      <FormCheckbox\r\n                        key={`store-${StoreItemId.value}-${index}`}\r\n                        value={StoreItemId.value}\r\n                        label={StoreName.value}\r\n                        checked={\r\n                          formData.selectedStores.indexOf(StoreItemId.value) >\r\n                          -1\r\n                        }\r\n                        onCheckboxChange={(value) =>\r\n                          this.handleStoreListCheckbox(value)\r\n                        }\r\n                        plain\r\n                      />\r\n                    );\r\n                  })}\r\n                </div>\r\n              </div>\r\n            );\r\n          })}\r\n        </div>\r\n      </div>\r\n    );\r\n  };\r\n\r\n  render() {\r\n    const {\r\n      itemId = null\r\n    } = this.props;\r\n    const {\r\n      formError,\r\n      formData,\r\n      categories,\r\n      type,\r\n      showModal,\r\n      componentReady,\r\n      centreStoreList,\r\n      holidays,\r\n      showScheduleDate,\r\n      showTermsCondition,\r\n      showImageGallery,\r\n      showErrorMessage,\r\n      formErrorMessage,\r\n      imageGalleryHolder,\r\n      displayStartDateHolder,\r\n      displayEndDateHolder,\r\n      termsAndConditionsLinkHolder,\r\n      termsAndConditionsCopyHolder,\r\n      getPromotionDataReady,\r\n      promotionIdList,\r\n      retailerId,\r\n      consentToSharing,\r\n      retailerHandles,\r\n      retailerHashtags,\r\n      socialFeedImage,\r\n      socialStoryImage\r\n    } = this.state;\r\n    return (\r\n      <div\r\n        className={`promotion-container \r\n                ${type && type.toLowerCase() === \"offer\"\r\n            ? \"is-offer\"\r\n            : \"is-event\"\r\n          }`}\r\n      >\r\n        {showModal && this.renderModal()}\r\n        {showErrorMessage && <FormErrorMessage error={formErrorMessage} />}\r\n        <div className=\"form__container\">\r\n          <FormInput\r\n            title\r\n            type=\"text\"\r\n            placeholder={`${type} title`}\r\n            label=\"Promotion Name\"\r\n            value={formData.promotionName}\r\n            required\r\n            error={formError.promotionName}\r\n            onInputChange={(promotionName) =>\r\n              this.handleFormUpdate({ promotionName })\r\n            }\r\n          />\r\n        </div>\r\n        <div className=\"form__container\">\r\n          <label className=\"form__header\">{`${type} duration`}</label>\r\n          <div\r\n            className={`form-group form__date--container\r\n                        ${formError.startDate || formError.endDate\r\n                ? \"has-error\"\r\n                : \"\"\r\n              }\r\n                    `}\r\n          >\r\n            <div className=\"form__date--wrapper\">\r\n              <FormDate\r\n                required\r\n                label=\"Start Date\"\r\n                icon=\"calendar\"\r\n                placeholderText=\"MM/DD/YYYY\"\r\n                showTimeSelect\r\n                timeCaption=\"Time\"\r\n                timeFormat=\"HH:mm\"\r\n                timeIntervals={5}\r\n                dateFormat=\"d MMM yyyy - h:mmaa\"\r\n                value={formData.startDate && new Date(formData.startDate)}\r\n                error={formError.startDate}\r\n                selected={formData.startDate && new Date(formData.startDate)}\r\n                onChange={(startDate) => this.handleFormUpdate({ startDate })}\r\n              />\r\n              <div className=\"form__date--divider\" />\r\n              <FormDate\r\n                required\r\n                label=\"End Date\"\r\n                icon=\"calendar\"\r\n                placeholderText=\"MM/DD/YYYY\"\r\n                showTimeSelect\r\n                timeCaption=\"Time\"\r\n                timeFormat=\"HH:mm\"\r\n                timeIntervals={5}\r\n                dateFormat=\"d MMM yyyy - h:mmaa\"\r\n                value={formData.endDate && new Date(formData.endDate)}\r\n                error={formError.endDate}\r\n                selected={formData.endDate && new Date(formData.endDate)}\r\n                onChange={(endDate) => this.handleFormUpdate({ endDate })}\r\n              />\r\n            </div>\r\n            <div className=\"form__hint\">*Maximum of 31 days(1 month)</div>\r\n          </div>\r\n          <Checkbox\r\n            checked={showScheduleDate}\r\n            label={\"Schedule a different publish date\"}\r\n            onCheckboxChange={(showScheduleDate) => {\r\n              this.setState({\r\n                showScheduleDate,\r\n              });\r\n              if (showScheduleDate) {\r\n                this.handleFormUpdate({\r\n                  displayStartDate: displayStartDateHolder,\r\n                  displayEndDate: displayEndDateHolder\r\n                });\r\n              } else {\r\n                this.handleFormUpdate({\r\n                  displayStartDate: null,\r\n                  displayEndDate: null\r\n                });\r\n              }\r\n            }}\r\n          />\r\n          {showScheduleDate && (\r\n            <div className=\"form-group form__date--container\">\r\n              <div className=\"form__date--wrapper\">\r\n                <FormDate\r\n                  label=\"Publish from\"\r\n                  icon=\"calendar\"\r\n                  placeholderText=\"MM/DD/YYYY\"\r\n                  showTimeSelect\r\n                  timeCaption=\"Time\"\r\n                  timeFormat=\"HH:mm\"\r\n                  timeIntervals={5}\r\n                  dateFormat=\"d MMM yyyy - h:mmaa\"\r\n                  error={formError.displayStartDate}\r\n                  value={\r\n                    formData.displayStartDate &&\r\n                    new Date(formData.displayStartDate)\r\n                  }\r\n                  selected={\r\n                    formData.displayStartDate &&\r\n                    new Date(formData.displayStartDate)\r\n                  }\r\n                  onChange={(displayStartDate) => {\r\n                    this.setState({\r\n                      displayStartDateHolder: displayStartDate,\r\n                    });\r\n                    this.handleFormUpdate({ displayStartDate });\r\n                  }}\r\n                />\r\n                <div className=\"form__date--divider\" />\r\n                <FormDate\r\n                  label=\"Publish until\"\r\n                  icon=\"calendar\"\r\n                  placeholderText=\"MM/DD/YYYY\"\r\n                  showTimeSelect\r\n                  timeCaption=\"Time\"\r\n                  timeFormat=\"HH:mm\"\r\n                  timeIntervals={5}\r\n                  dateFormat=\"d MMM yyyy - h:mmaa\"\r\n                  value={\r\n                    formData.displayEndDate && new Date(formData.displayEndDate)\r\n                  }\r\n                  error={formError.endDate}\r\n                  selected={\r\n                    formData.displayEndDate && new Date(formData.displayEndDate)\r\n                  }\r\n                  onChange={(displayEndDate) => {\r\n                    this.setState({\r\n                      displayEndDateHolder: displayEndDate,\r\n                    });\r\n                    this.handleFormUpdate({ displayEndDate });\r\n                  }}\r\n                />\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n        \r\n\r\n        {type && type.toLowerCase() === \"event\" && (\r\n          <div className=\"form__container\">\r\n            <label className=\"form__header\">{`${type} details`}</label>\r\n            <FormInput\r\n              type=\"text\"\r\n              icon=\"calendar\"\r\n              placeholder=\"Eg: Every Monday\"\r\n              label=\"Schedule\"\r\n              value={formData.schedule}\r\n              error={formError.schedule}\r\n              onInputChange={(schedule) => this.handleFormUpdate({ schedule })}\r\n            />\r\n\r\n            <FormInput\r\n              type=\"text\"\r\n              placeholder=\"Eg: HH:MM\"\r\n              label=\"Duration\"\r\n              icon=\"time\"\r\n              value={formData.duration}\r\n              width=\"min\"\r\n              onInputChange={(duration) => this.handleFormUpdate({ duration })}\r\n            />\r\n\r\n            <FormInput\r\n              type=\"text\"\r\n              placeholder=\"Eg: 10\"\r\n              label=\"Capacity\"\r\n              icon=\"capacity\"\r\n              value={formData.capacity}\r\n              width=\"min\"\r\n              onInputChange={(capacity) => this.handleFormUpdate({ capacity })}\r\n            />\r\n\r\n            <FormInput\r\n              type=\"number\"\r\n              icon=\"price\"\r\n              placeholder=\"Eg: 0.00\"\r\n              label=\"Price\"\r\n              currency\r\n              value={formData.price}\r\n              width=\"min\"\r\n              onInputChange={(price) => this.handleFormUpdate({ price })}\r\n            />\r\n          </div>\r\n        )}\r\n\r\n        <div className=\"form__container\">\r\n          <label className=\"form__header\">{`${type} description`}</label>\r\n          {type && type.toLowerCase() === \"offer\" && (\r\n            <FormInput\r\n              type=\"text\"\r\n              placeholder=\"Eg: 50% off\"\r\n              label=\"Badge label\"\r\n              width=\"badge\"\r\n              margin=\"custom\"\r\n              value={formData.offerHighlight}\r\n              maxLength={7}\r\n              onInputChange={(offerHighlight) =>\r\n                this.handleFormUpdate({ offerHighlight })\r\n              }\r\n            />\r\n          )}\r\n          <FormInputMultiple\r\n            label=\"Sub title\"\r\n            placeholder=\"Provide a short description\"\r\n            required\r\n            value={formData.summary}\r\n            maxLength={120}\r\n            error={formError.summary}\r\n            onInputChange={(summary) => this.handleFormUpdate({ summary })}\r\n          />\r\n          {getPromotionDataReady && (\r\n            <RichTextEditor\r\n              required\r\n              width=\"max\"\r\n              label={\"Description\"}\r\n              placeholder=\"Provide a description\"\r\n              initialValue={formData.description}\r\n              error={formError.description}\r\n              onInputChange={(description) =>\r\n                this.handleFormUpdate({ description })\r\n              }\r\n              retailerId={retailerId}\r\n              itemId={itemId}\r\n              promotionType={type}\r\n            />\r\n          )}\r\n\r\n          <div className=\"form__container--small\">\r\n            <label className=\"form__header--small\">\r\n              {\"Terms and conditions\"}\r\n            </label>\r\n            <Checkbox\r\n              checked={showTermsCondition}\r\n              label={\"Display link to an external terms and conditions page?\"}\r\n              onCheckboxChange={(showTermsCondition) => {\r\n                this.setState({\r\n                  showTermsCondition,\r\n                });\r\n\r\n                if (showScheduleDate) {\r\n                  this.handleFormUpdate({\r\n                    termsAndConditionsLink: termsAndConditionsLinkHolder,\r\n                    termsAndConditionsCopy: termsAndConditionsCopyHolder\r\n                  });\r\n\r\n                } else {\r\n                  this.handleFormUpdate({\r\n                    termsAndConditionsLink: \"\",\r\n                    termsAndConditionsCopy: \"\"\r\n                  });\r\n                }\r\n              }}\r\n            />\r\n            {showTermsCondition && (\r\n              <div>\r\n                <FormInput\r\n                  type=\"text\"\r\n                  placeholder=\"Eg: www.terms-and-conditions.com\"\r\n                  label=\"External link\"\r\n                  value={formData.termsAndConditionsLink}\r\n                  onInputChange={(termsAndConditionsLink) => {\r\n                    this.setState({\r\n                      termsAndConditionsLinkHolder: termsAndConditionsLink,\r\n                    });\r\n                    this.handleFormUpdate({ termsAndConditionsLink });\r\n                  }}\r\n                />\r\n\r\n                <FormInput\r\n                  type=\"text\"\r\n                  placeholder=\"Eg: Please view terms and conditions\"\r\n                  label=\"Link label\"\r\n                  value={formData.termsAndConditionsCopy}\r\n                  onInputChange={(termsAndConditionsCopy) => {\r\n                    this.setState({\r\n                      termsAndConditionsCopyHolder: termsAndConditionsCopy,\r\n                    });\r\n                    this.handleFormUpdate({ termsAndConditionsCopy });\r\n                  }}\r\n                />\r\n              </div>\r\n            )}\r\n          </div>\r\n        </div>\r\n        <div className=\"form__container\">\r\n          {type && type.toLowerCase() === \"offer\" && (\r\n          <>\r\n          <label className=\"form__header\">{\"QIC Social & Digital Use\"}</label>\r\n          <Checkbox\r\n            checked={consentToSharing}\r\n            label={\"I give permission for centre marketing teams to share this content to QIC centre owned social pages (Facebook and Instagram)\"}\r\n            onCheckboxChange={(consentToSharing) => {\r\n              this.setState({\r\n                consentToSharing,\r\n              });\r\n              if (consentToSharing) {\r\n                this.handleFormUpdate({\r\n                  socialFeedImage: socialFeedImage,\r\n                  socialStoryImage: socialStoryImage,\r\n                  retailerHandles: retailerHandles,\r\n                  retailerHashtags: retailerHashtags,\r\n                  consentToSharing: consentToSharing\r\n                });\r\n\r\n              } else {\r\n                this.handleFormUpdate({\r\n                  socialFeedImage: '',\r\n                  socialStoryImage: '',\r\n                  retailerHandles: \"\",\r\n                  retailerHashtags: \"\",\r\n                  consentToSharing: false,\r\n                  embargoEndDate: \"\",\r\n                  embargoStartDate: \"\"\r\n                });\r\n\r\n                this.setState({\r\n                  retailerHandles: \"\",\r\n                  retailerHashtags: \"\"\r\n                })\r\n              }\r\n            }}\r\n          />\r\n          {consentToSharing && type.toLowerCase() === \"offer\" && (\r\n            <div className=\"embargo-group\">\r\n            <div className=\"form-group form__date--container\">\r\n              <div className=\"form__date--wrapper\">\r\n              <div className=\"form__container\">\r\n              <label className=\"form__header\">{`Embargo Period`}</label>\r\n              <div className=\"form__label embargo-fields\">\r\n              <p><i>Note</i> - An Embargo Period is the period of time in which an offer <strong>cannot be shared publicly</strong>.<br /> This period must end before the offer Start Date. </p>\r\n            </div>\r\n          <div\r\n            className={`form-group form__date--container\r\n                        ${\r\n              formError.embargoStartDate || formError.embargoEndDate\r\n                ? \"has-error\"\r\n                : \"\"\r\n              }\r\n                    `}\r\n          >\r\n            <div className=\"form__date--wrapper\">\r\n              <FormDate\r\n                label=\"Embargo - Start Date\"\r\n                icon=\"calendar\"\r\n                placeholderText=\"MM/DD/YYYY\"\r\n                showTimeSelect\r\n                timeCaption=\"Time\"\r\n                timeFormat=\"HH:mm\"\r\n                timeIntervals={5}\r\n                dateFormat=\"d MMM yyyy - h:mmaa\"\r\n                value={formData.embargoStartDate && new Date(formData.embargoStartDate)}\r\n                error={formError.embargoStartDate}\r\n                selected={formData.embargoStartDate && new Date(formData.embargoStartDate)}\r\n                onChange={(embargoStartDate) => this.handleFormUpdate({ embargoStartDate })}\r\n              />\r\n              <div className=\"form__date--divider\" />\r\n              <FormDate\r\n                label=\"Embargo - End Date\"\r\n                icon=\"calendar\"\r\n                placeholderText=\"MM/DD/YYYY\"\r\n                showTimeSelect\r\n                timeCaption=\"Time\"\r\n                timeFormat=\"HH:mm\"\r\n                timeIntervals={5}\r\n                dateFormat=\"d MMM yyyy - h:mmaa\"\r\n                value={formData.embargoEndDate && new Date(formData.embargoEndDate)}\r\n                error={formError.embargoEndDate}\r\n                selected={formData.embargoEndDate && new Date(formData.embargoEndDate)}\r\n                onChange={(embargoEndDate) => this.handleFormUpdate({ embargoEndDate })}\r\n              />\r\n            </div>\r\n            <div className=\"form__hint\">*Maximum of 31 days(1 month)</div>\r\n          </div>\r\n          </div>\r\n          <div className=\"form-group\">\r\n          <div className={`form__container ${\r\n              formError.socialFeedImage || formError.socialFeedFileType || formError.socialFeedFileSize\r\n                ? \"has-error\"\r\n                : \"\"\r\n              }`}>\r\n                <FormImageUpload\r\n                  type=\"thumbnail\"\r\n                  label={\"Social Feed Image\"}\r\n                  guidelines={\r\n                    \"To ensure the quality of the shared content, the social feed image needs to be:\"\r\n                  }\r\n                  guidelinesOne={\"• At least 1080px wide\"}\r\n                  guidelinesTwo={\"• At least 1080px tall.\"}\r\n                  guidelinesThree={\r\n                    \"• To avoid your image being cropped, use a ratio of 1:1\"\r\n                  }\r\n                  error={formError.socialFeedImage || formError.socialFeedFileType || formError.socialFeedFileSize}\r\n                  value={formData.socialFeedImage}\r\n                  handleFileUpload={(socialFeedImage) =>\r\n                    this.handleFormUpdate({ socialFeedImage })\r\n                  }\r\n                />\r\n                </div> \r\n                </div>\r\n                <div className={`form__container ${\r\n              formError.socialStoryImage || formError.socialStoryFileType || formError.socialStoryFileSize\r\n                ? \"has-error\"\r\n                : \"\"\r\n              }`}>                  <FormImageUpload\r\n                    type=\"thumbnail\"\r\n                    label={\"Social Stories Image\"}\r\n                    guidelines={\r\n                      \"To ensure the quality of the shared content, the social stories image needs to be:\"\r\n                    }\r\n                    guidelinesOne={\"• At least 1080px wide\"}\r\n                    guidelinesTwo={\"• At least 1920px tall.\"}\r\n                    guidelinesThree={\r\n                      \"• To avoid your image being cropped, use a ratio of 9:16\"\r\n                    }\r\n                    error={formError.socialStoryImage || formError.socialStoryFileType || formError.socialStoryFileSize}\r\n                    value={formData.socialStoryImage}\r\n                    handleFileUpload={(socialStoryImage) =>\r\n                      this.handleFormUpdate({ socialStoryImage })\r\n                    }\r\n                  />\r\n                </div>\r\n                <FormInput\r\n                  type=\"text\"\r\n                  placeholder=\"Eg: @\"\r\n                  label=\"Retailer Handles\"\r\n                  value={formData.retailerHandles}\r\n                  onInputChange={(retailerHandles) => {\r\n                    this.setState({\r\n                      retailerHandles: retailerHandles,\r\n                    });\r\n                    this.handleFormUpdate({retailerHandles});\r\n                  }}\r\n                />\r\n                <FormInput\r\n                  type=\"text\"\r\n                  placeholder=\"Eg: #\"\r\n                  label=\"Retailer Hashtags\"\r\n                  value={formData.retailerHashtags}\r\n                  onInputChange={(retailerHashtags) => {\r\n                    this.setState({\r\n                      retailerHashtags: retailerHashtags,\r\n                    });\r\n                    this.handleFormUpdate({ retailerHashtags });\r\n                  }}\r\n                />\r\n              </div>\r\n            </div>\r\n            </div>\r\n          )}\r\n          </>\r\n          )}\r\n          {(categories && categories.length > 0 ||\r\n            (holidays && holidays.length > 0)) && (\r\n              categories && categories.length > 0 && (\r\n                <div>\r\n                  <div className=\"is-desktop\">\r\n                    <FormListbox\r\n                      label=\"Category\"\r\n                      id=\"LB_Cat_Desktop\"\r\n                      required\r\n                      error={formError.selectedCategories}\r\n                      options={categories}\r\n                      field=\"selectedCategories\"\r\n                      selected={formData.selectedCategories}\r\n                      hint=\"Press [ctrl] + click to select multiple\"\r\n                      handleListbox={(id, field) => this.handleListbox(id, field)}\r\n                      handleSelect={(isSelect, field, options) =>\r\n                        this.handleSelect(isSelect, field, options)\r\n                      }\r\n                    />\r\n                  </div>\r\n                  <div className=\"is-tablet\">\r\n                    <FormListCheckbox\r\n                      label=\"Category\"\r\n                      id=\"LB_Cat_Mobile\"\r\n                      required\r\n                      error={formError.selectedCategories}\r\n                      options={categories}\r\n                      field=\"selectedCategories\"\r\n                      selected={formData.selectedCategories}\r\n                      handleListbox={(id, field) => this.handleListbox(id, field, true)}\r\n                      handleSelect={(isSelect, field, options) =>\r\n                        this.handleSelect(isSelect, field, options)\r\n                      }\r\n                    />\r\n                  </div>\r\n                </div>))}\r\n          {holidays && holidays.length > 0 && (\r\n            <div>\r\n              <div className=\"is-desktop\">\r\n                <FormListbox\r\n                  label=\"Special promotions\"\r\n                  id=\"LB_SH_Desktop\"\r\n                  options={holidays}\r\n                  field=\"selectedSpecialPromotion\"\r\n                  selected={formData.selectedSpecialPromotion}\r\n                  hint=\"Press [ctrl] + click to select multiple\"\r\n                  handleListbox={(id, field) => this.handleListbox(id, field)}\r\n                  handleSelect={(isSelect, field) =>\r\n                    this.handleSelect(isSelect, field, holidays)\r\n                  }\r\n                />\r\n              </div>\r\n              <div className=\"is-tablet\">\r\n                <FormListCheckbox\r\n                  label=\"Special promotions\"\r\n                  id=\"LB_SH_Mobile\"\r\n                  options={holidays}\r\n                  field=\"selectedSpecialPromotion\"\r\n                  selected={formData.selectedSpecialPromotion}\r\n                  handleListbox={(id, field) => this.handleListbox(id, field, true)}\r\n                  handleSelect={(isSelect, field, options) =>\r\n                    this.handleSelect(isSelect, field, options)\r\n                  }\r\n                />\r\n              </div>\r\n            </div>\r\n          )}\r\n        </div>\r\n        <div className={`form__container ${formError.heroImage || formError.heroImageFileSize || formError.heroImageFileType\r\n          ? \"has-error\"\r\n          : \"\"\r\n          }`}>\r\n          {getPromotionDataReady && (\r\n            <FormImageUpload\r\n              required\r\n              type=\"hero\"\r\n              label={\"Hero image\"}\r\n              guidelines={\r\n                \"To keep the quality of our websites high, the hero banner image needs to be:\"\r\n              }\r\n              guidelinesOne={\"• At least 1920px wide\"}\r\n              guidelinesTwo={\"• At least 1080px tall.\"}\r\n              guidelinesThree={\r\n                \"• To avoid your image being cropped, use a ratio of 16:9\"\r\n              }\r\n              error={formError.heroImage || formError.heroImageFileType || formError.heroImageFileSize}\r\n              value={formData.heroImage}\r\n              handleFileUpload={(heroImage) =>\r\n                this.handleFormUpdate({ heroImage })\r\n              }\r\n            />\r\n          )}\r\n        </div>\r\n\r\n        <div className={`form__container ${formError.thumbnail || formError.thumbnailFileSize || formError.thumbnailFileType\r\n          ? \"has-error\"\r\n          : \"\"\r\n          }`}>\r\n          {getPromotionDataReady && (\r\n            <FormImageUpload\r\n              label={\"Thumbnail image\"}\r\n              guidelines={\"The hero thumbnail image needs to be:\"}\r\n              guidelinesOne={\"• At least 800px wide\"}\r\n              guidelinesTwo={\"• At least 800px tall.\"}\r\n              guidelinesThree={\r\n                \"• To avoid your image being cropped, use a ratio of 1:1\"\r\n              }\r\n              error={formError.thumbnail || formError.thumbnailFileType || formError.thumbnailFileSize}\r\n              value={formData.thumbnail}\r\n              handleFileUpload={(thumbnail) =>\r\n                this.handleFormUpdate({ thumbnail })\r\n              }\r\n            />\r\n          )}\r\n        </div>\r\n\r\n        <div className={`form__container ${formError.imageGalleryFileType || formError.imageGalleryFileSize\r\n          ? \"has-error\"\r\n          : \"\"\r\n          }`}>          <label className=\"form__header\">{\"Image gallery\"}</label>\r\n          <Checkbox\r\n            checked={showImageGallery}\r\n            label={\"Display an additional image gallery?\"}\r\n            onCheckboxChange={(showImageGallery) => {\r\n              this.setState({\r\n                showImageGallery,\r\n              });\r\n              if (showImageGallery) {\r\n                this.handleFormUpdate({ imageGallery: imageGalleryHolder });\r\n              } else {\r\n                this.handleFormUpdate({ imageGallery: [] });\r\n              }\r\n            }}\r\n          />\r\n          {showImageGallery && (\r\n            <FormImageGallery\r\n              value={formData.imageGallery}\r\n              error={formError.imageGalleryFileType || formError.imageGalleryFileSize}\r\n              handleAttachments={(imageGallery) => {\r\n                this.setState({\r\n                  imageGalleryHolder: imageGallery,\r\n                });\r\n                this.handleFormUpdate({ imageGallery });\r\n              }}\r\n            />\r\n          )}\r\n        </div>\r\n\r\n        {centreStoreList && centreStoreList.length > 0 && (\r\n          <div\r\n            className={`form__container ${promotionIdList.length > 0 ? \"is-hidden\" : \"\"\r\n              }`}\r\n          >\r\n            <label className=\"form__header\">{`${type} visibility`}</label>\r\n            {this.buildCentreStoreList(centreStoreList)}\r\n          </div>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default FormPromotions;\r\n","import React from 'react';\nimport Select from \"react-select\";\nimport RadioButton from \"../../../Base/RadioButton\";\nimport FormModal from \"../../../Base/FormModal\";\nimport Popup from \"../../../Base/Popup\";\nimport PopupAction from \"../../../Base/Popup/PopupAction\";\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\nimport Events from \"../../../Modules/Events\";\nimport Offers from \"../../../Modules/Offers\";\nimport {\n  getUrlParameter,\n} from \"../../../../helper/UrlHelper\";\nimport {\n  deletePromotion,\n} from \"../../../../api/StoreAPI\";\nimport CustomFilter from '../../../Base/CustomFilter';\nimport CustomIframe from '../../../Base/CustomIframe';\nimport FormPromotions from \"../../../Modules/Forms/FormPromotions\";\nimport { addClassLazyload } from \"../../../../helper/AddClassLazyloadHelper\";\nimport { scrollToTop } from \"../../../../helper/ScrollHelper\";\nimport { removeActiveState } from \"../../../../helper/RemoveActiveState\";\nimport { hideBackToTop } from \"../../../../helper/HideBackToTopHelper\";\n\nclass FeatureRetailerPortalPromotionListing extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      isDocumentReady: false,\n      isWindowReady: false,\n      content: null,\n      event: null,\n      offer: null,\n      showPreviewModal: false,\n      showFormModal: false,\n      showDeleteModal: false,\n      previewModalData: null,\n      formModalData: null,\n      deleteModalData: null,\n      showFilter: false,\n      statusOption: [\n        {\n          Id: {\n            value: \"allStatus\"\n          },\n          Name: {\n            value: \"All\"\n          }\n        },\n        {\n          Id: {\n            value: \"DraftPromotions\"\n          },\n          Name: {\n            value: \"Draft\"\n          }\n        },\n        {\n          Id: {\n            value: \"LivePromotions\"\n          },\n          Name: {\n            value: \"Live\"\n          }\n        },\n        {\n          Id: {\n            value: \"AwaitingApprovalPromotions\"\n          },\n          Name: {\n            value: \"Awaiting approval\"\n          }\n        },\n        {\n          Id: {\n            value: \"ScheduledPromotions\"\n          },\n          Name: {\n            value: \"Scheduled\"\n          }\n        },\n        {\n          Id: {\n            value: \"RejectedPromotions\"\n          },\n          Name: {\n            value: \"Rejected\"\n          }\n        },\n        {\n          Id: {\n            value: \"EmbargoedPromotions\"\n          },\n          Name: {\n            value: \"Embargoed\"\n          }\n        }\n      ],\n      filterCentre: null,\n      filterStatus: \"allStatus\",\n      disableCancelBtn: false,\n      disableDeleteBtn: false,\n      promotionList: [],\n      promotionPreviewUrlHolder: \"\",\n      promotionPreviewTitleHolder: \"\",\n      isDashboardUpdate: false,\n      isMobile: false,\n      dataCount: 0,\n      centreListOption: [],\n      filterByCentre: \"allCentre\"\n    };\n  }\n\n  componentDidMount() {\n    const {\n      dashboardType = null\n    } = this.props || {}\n    if (document) {\n      this.setState({\n        isDocumentReady: true\n      },\n        () => {\n          this.handleResize()\n          this.updateCentreOption()\n        }\n      );\n    }\n    if (window) {\n      this.getTab(dashboardType);\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n  }\n\n  updateCentreOption = () => {\n    const {\n      CentreList,\n    } = this.props.fields || {};\n\n    let centreListOption = [\n      {\n        value: \"allCentre\",\n        label: \"All centres\"\n      }\n    ]\n    if (CentreList && CentreList.length > 0) {\n      CentreList.map((item, index) => {\n        const {\n          Name\n        } = item.fields\n        centreListOption.push({ value: Name.value, label: Name.value });\n      })\n    }\n\n    this.setState({ centreListOption });\n  }\n\n  handleResize = () => {\n    if (window.outerWidth >= 992) {\n      this.setState({\n        isMobile: false\n      })\n    } else {\n      this.setState({\n        isMobile: true\n      })\n    }\n  }\n\n  getTab = (dashboardType) => {\n    let type = \"\";\n    if (dashboardType) {\n      type = dashboardType;\n    } else {\n      type = getUrlParameter(\"type\").toLowerCase().replace(\"?sc_mode=normal\", \"\");\n    }\n    this.setState({ content: type });\n  };\n\n  renderPreviewModal = () => {\n    const {\n      title,\n      url\n    } = this.state.previewModalData || {};\n\n    const {\n      previewUrl,\n      previewTitle,\n    } = this.state.formModalData || {}\n\n    const {\n      showFormModal,\n      showPreviewModal\n    } = this.state;\n\n    hideBackToTop(showPreviewModal || showFormModal);\n\n    return (\n      <FormModal\n        isPreview\n        showModal={showPreviewModal}\n        label={previewTitle ? previewTitle : title ? title : \"\"}\n        closeOnClick={() => this.setState({ showPreviewModal: false })}\n      >\n        {showPreviewModal &&\n          <CustomIframe\n            title={previewTitle ? previewTitle : title ? title : \"\"}\n            src={previewUrl ? previewUrl : url ? url : \"\"}\n          />\n        }\n      </FormModal>\n    );\n  }\n\n  renderFormModal = () => {\n    const {\n      dashboardType = null\n    } = this.props || {}\n\n    const {\n      title,\n      content,\n      itemId,\n      previewUrl,\n      showSaveHint,\n      disableBtn,\n      onClickSave,\n      onClickPreview,\n      onClickSubmit,\n      isNewPromotion,\n    } = this.state.formModalData || {}\n\n    const {\n      showFormModal,\n      isDashboardUpdate,\n      isMobile,\n      showPreviewModal\n    } = this.state;\n\n    const {\n      updateDashboard\n    } = this.props\n\n    if (!showFormModal && isDashboardUpdate && updateDashboard) {\n      this.setState({\n        isDashboardUpdate: false\n      },\n        () => updateDashboard(true))\n    }\n\n    hideBackToTop((showPreviewModal || showFormModal));\n\n    return (\n      <FormModal\n        showModal={showFormModal}\n        label={title}\n        closeOnClick={() =>\n          this.setState({ showFormModal: false })\n        }\n        closeClassName={\"promotion-close-btn\"}\n        showSaveHint={showSaveHint}\n        saveBtn={\"Save draft\"}\n        saveBtnOnClick={() => this.updatePromotion(onClickSave)}\n        secondaryBtn={`Preview${isNewPromotion && !isMobile ? \"…\" : \"\"}`}\n        secondaryBtnOnClick={() => {\n          if (previewUrl) {\n            this.setState({\n              showPreviewModal: true,\n            })\n          } else {\n            onClickPreview();\n          }\n        }\n        }\n        disabledSecondaryBtn={disableBtn}\n        primaryBtn={\"Submit\"}\n        primaryBtnClassName={\"promotion-submit-btn\"}\n        primaryBtnOnClick={() => this.updatePromotion(onClickSubmit, true)}\n        disabledPrimaryBtn={disableBtn}\n      >\n        {showFormModal &&\n          <FormPromotions\n            dashboardType={dashboardType}\n            itemId={itemId}\n            handleFormData={(showSaveHint, disableBtn, previewUrl, previewTitle, onClickSave, onClickPreview, onClickSubmit) => {\n              this.handleFormUpdate(\n                showSaveHint,\n                disableBtn,\n                previewUrl,\n                previewTitle,\n                onClickSave,\n                onClickPreview,\n                onClickSubmit,\n              );\n            }}\n          />\n        }\n      </FormModal>\n    );\n  }\n\n  handleFormUpdate = (showSaveHint, disableBtn, previewUrl, previewTitle, onClickSave, onClickPreview, onClickSubmit) => {\n    this.setState({\n      formModalData: {\n        ...this.state.formModalData,\n        showSaveHint,\n        disableBtn,\n        onClickSave,\n        onClickPreview,\n        onClickSubmit,\n        previewUrl,\n        previewTitle\n      }\n    })\n  }\n\n  updatePromotion = (onClickUpdate, isSubmit) => {\n    if (isSubmit) {\n      onClickUpdate().then((result) => {\n        if (result && result.isSuccess) {\n          let promotionPreviewUrl = \"\",\n            promotionPreviewTitle = \"\";\n          if (result.promotionPreviewUrl) {\n            promotionPreviewUrl = result.promotionPreviewUrl\n          }\n          if (result.promotionPreviewTitle) {\n            promotionPreviewTitle = result.promotionPreviewTitle\n          }\n\n          let filterAllStatus = document.getElementById(\"allStatus\");\n          let filterAllCentreRadio = document.getElementById(\"allCentre\");\n          let filterAllCentreDropdown = document.querySelector(\".is-filter-centre .form__select--field\");\n          if (filterAllStatus) {\n            filterAllStatus.click()\n          }\n          if (filterAllCentreRadio) {\n            filterAllCentreRadio.click()\n          } else if (filterAllCentreDropdown) {\n            filterAllCentreDropdown.selectedIndex = 0;\n          }\n\n          this.setState({\n            formModalData: {\n              ...this.state.formModalData,\n              successMessage: \"Promotion successfully updated.\",\n              previewUrl: promotionPreviewUrl,\n              previewTitle: promotionPreviewTitle,\n            },\n            showFormModal: false,\n            showSuccessMessage: true,\n            filterCentre: [],\n            promotionPreviewUrlHolder: promotionPreviewUrl,\n            promotionPreviewTitleHolder: promotionPreviewTitle,\n            isDashboardUpdate: true\n          },\n            () => {\n              scrollToTop()\n              addClassLazyload(\"promotions__content\")\n            }\n          )\n        }\n\n      });\n    } else {\n      onClickUpdate().then((result) => {\n        if (result && result.isSuccess) {\n          let filterAllStatus = document.getElementById(\"allStatus\");\n          let filterAllCentreRadio = document.getElementById(\"allCentre\");\n          let filterAllCentreDropdown = document.querySelector(\".is-filter-centre .form__select--field\");\n          if (filterAllStatus) {\n            filterAllStatus.click()\n          }\n          if (filterAllCentreRadio) {\n            filterAllCentreRadio.click()\n          } else if (filterAllCentreDropdown) {\n            filterAllCentreDropdown.selectedIndex = 0;\n            this.setState({\n              filterCentre: [],\n            })\n          }\n          this.setState({\n            filterCentre: [],\n            isDashboardUpdate: true\n          },\n            () => addClassLazyload(\"promotions__content\")\n          )\n        }\n      });\n    }\n  }\n\n  renderDelete = () => {\n    const {\n      content,\n      deleteModalData,\n      disableCancelBtn,\n      disableDeleteBtn,\n    } = this.state;\n\n    return (\n      <Popup>\n        <PopupAction\n          label={{ value: `Delete ${content}?` }}\n          description={{ value: `Are you sure you’d like to delete this ${content}?<br/>This cannot be undone.` }}\n          icon=\"trash-2\"\n          iconBgColor=\"#d83b42\"\n          secondaryBtn=\"Cancel\"\n          disabledSecondaryBtn={disableCancelBtn}\n          secondaryBtnOnClick={() => this.setState({ showDeleteModal: false })}\n          primaryBtn={`Delete ${content}`}\n          primaryBtnOnClick={() => this.deletePromotion(deleteModalData)}\n          primaryBtnColor=\"red\"\n          disabledPrimaryBtn={disableDeleteBtn}\n        />\n      </Popup>\n    );\n  };\n\n  deletePromotion = async deleteModalData => {\n    const {\n      isDashboard = false,\n      updateDashboard\n    } = this.props || {}\n\n    const {\n      id,\n      name,\n      centreName,\n      status\n    } = deleteModalData;\n\n    const {\n      content,\n      dataCount\n    } = this.state;\n    this.setState({\n      disableCancelBtn: true,\n      disableDeleteBtn: true\n    })\n    let successMessage = \"\";\n    try {\n      let response = await deletePromotion({ itemId: id });\n      if (response.status === 200 && response.data) {\n        if (response.data.IsSuccess.value) {\n          successMessage = \"Promotion successfully deleted.\";\n\n          if (!isDashboard) {\n            let statusVar = \"\";\n            if (status.toLowerCase() === \"live\") {\n              statusVar = \"LivePromotions\";\n            }\n            else if (status.toLowerCase() === \"scheduled\") {\n              statusVar = \"ScheduledPromotions\";\n            }\n            else if (status.toLowerCase() === \"awaiting approval\") {\n              statusVar = \"AwaitingApprovalPromotions\";\n            }\n            else if (status.toLowerCase() === \"draft\") {\n              statusVar = \"DraftPromotions\";\n            }\n            else if (status.toLowerCase() === \"rejected\") {\n              statusVar = \"RejectedPromotions\";\n            }\n            else if (status.toLowerCase() === \"embargoed\") {\n              statusVar = \"EmbargoedPromotions\";\n            }\n\n            let newData =\n              this.state[content][statusVar].filter(item => {\n                return item.ItemId.value !== id;\n              });\n\n            this.setState(\n              {\n                [this.state.content]: {\n                  ...this.state[content],\n                  [statusVar]: newData\n                },\n                showDeleteModal: false,\n                showSuccessMessage: true,\n                disableCancelBtn: false,\n                disableDeleteBtn: false,\n                formModalData: {\n                  ...this.state.formModalData,\n                  successMessage\n                },\n                dataCount: dataCount - 1\n              },\n              () => {\n                scrollToTop()\n                addClassLazyload(\"promotions__content\");\n              }\n            );\n          } else {\n            this.setState(\n              {\n                showDeleteModal: false,\n                showSuccessMessage: true,\n                disableCancelBtn: false,\n                disableDeleteBtn: false,\n                formModalData: {\n                  ...this.state.formModalData,\n                  successMessage\n                }\n              },\n              () => {\n                scrollToTop();\n                if (updateDashboard) {\n                  updateDashboard(true)\n                }\n                addClassLazyload(\"promotions__content\");\n              }\n            );\n          }\n        } else {\n          successMessage = \"Promotion delete failed.\"\n\n          this.setState({\n            showDeleteModal: false,\n            showSuccessMessage: true,\n            disableCancelBtn: false,\n            disableDeleteBtn: false,\n            formModalData: {\n              ...this.state.formModalData,\n              successMessage\n            }\n          },\n            () => scrollToTop()\n          );\n        }\n      }\n      else {\n        successMessage = \"Promotion delete failed.\"\n\n        this.setState({\n          showDeleteModal: false,\n          showSuccessMessage: true,\n          formModalData: {\n            ...this.state.formModalData,\n            successMessage\n          }\n        },\n          () => scrollToTop()\n        );\n      }\n      removeActiveState();\n\n    }\n    catch (e) {\n      console.error(\"Promotion Delete Error: \" + e.response.statusText);\n      successMessage = \"Promotion delete error.\";\n      this.setState({\n        showDeleteModal: false,\n        showSuccessMessage: true,\n        disableCancelBtn: false,\n        disableDeleteBtn: false,\n        formModalData: {\n          ...this.state.formModalData,\n          successMessage\n        }\n      },\n        () => scrollToTop()\n      )\n      removeActiveState();\n\n      // let statusVar = \"\";\n      // if (status.toLowerCase() === \"live\") {\n      //   statusVar = \"LivePromotions\";\n      // }\n      // else if (status.toLowerCase() === \"scheduled\") {\n      //   statusVar = \"ScheduledPromotions\";\n      // }\n      // else if (status.toLowerCase() === \"awaiting approval\") {\n      //   statusVar = \"AwaitingApprovalPromotions\";\n      // }\n      // else if (status.toLowerCase() === \"draft\") {\n      //   statusVar = \"DraftPromotions\";\n      // }\n      // else if (status.toLowerCase() === \"rejected\") {\n      //   statusVar = \"RejectedPromotions\";\n      // }\n\n      // let newData =\n      //   this.state[content][statusVar].filter(item => {\n      //     return item.ItemId.value !== id;\n      //   });\n\n      // this.setState(\n      //   {\n      //     [this.state.content]: {\n      //       ...this.state[content],\n      //       [statusVar]: newData\n      //     },\n      //     showDeleteModal: false,\n      //     showSuccessMessage: true,\n      //     disableCancelBtn: false,\n      //     disableDeleteBtn: false,\n      //     formModalData: {\n      //       ...this.state.formModalData,\n      //       successMessage\n      //     },\n      //     dataCount: dataCount - 1\n      //   },\n      //   () => scrollToTop()\n      // );\n      // removeActiveState();\n    }\n  };\n\n  handleOnClickFilter = (type, value) => {\n    if (type === \"status\") {\n      this.setState({\n        filterStatus: value\n      })\n    } else if (type === \"centre\") {\n      this.setState({\n        filterCentre: value === \"allCentre\" ? [] : value,\n        filterByCentre: value\n      })\n    }\n    addClassLazyload(\"promotions__content\");\n    scrollToTop();\n  }\n\n  setCentreListDropdown = (CentreList) => {\n    let tempCentreList = [];\n    let allOption = {\n      Id: { value: \"allCentre\" },\n      Name: { value: \"All centres\" }\n    }\n    tempCentreList.push(allOption)\n\n    CentreList.map((item) => {\n      const {\n        Name\n      } = item.fields;\n\n      if (Name && Name.value) {\n        let centreOption = {\n          Id: { value: Name.value },\n          Name: { value: Name.value }\n        }\n        tempCentreList.push(centreOption)\n      }\n    })\n    return tempCentreList;\n  }\n\n  renderCustomFilter = (CentreList) => {\n    const {\n      showFilter,\n      statusOption,\n      centreListOption,\n      filterByCentre,\n      isMobile\n    } = this.state;\n\n    return (\n      <CustomFilter\n        showFilter={showFilter}\n        onCloseFilter={() => this.setState({ showFilter: false })}\n      >\n        <div className=\"custom-filter__group is-filter-status\">\n          <div className=\"custom-filter__label\">\n            {\"Filter by status\"}\n          </div>\n          <RadioButton\n            defaultSelected=\"allStatus\"\n            options={statusOption}\n            radioGroupName=\"promotionListing\"\n            onChange={(id) => this.handleOnClickFilter(\"status\", id)}\n            plain\n          />\n        </div>\n        <div className=\"custom-filter__group is-filter-centre\">\n          <div className=\"custom-filter__label\">\n            {\"Filter by centre\"}\n          </div>\n          {CentreList &&\n            CentreList.length > 0 && (\n              (CentreList.length > 5 || isMobile) ?\n                <Select\n                  onChange={(option) => this.handleOnClickFilter(\"centre\", option.value)}\n                  defaultValue={{ value: \"allCentre\", label: \"All centres\" }}\n                  options={centreListOption}\n                  theme={(theme) => ({\n                    ...theme,\n                    colors: {\n                      ...theme.colors,\n                      primary: \"#536760\",\n                      primary25: \"#f5f5f6\",\n                    },\n                  })}\n                  isSearchable={false}\n                  maxMenuHeight={200}\n                  menuPlacement=\"auto\"\n                />\n                :\n                <RadioButton\n                  defaultSelected=\"allCentre\"\n                  options={this.setCentreListDropdown(CentreList)}\n                  radioGroupName=\"promotionListingCentreList\"\n                  onChange={(id) => this.handleOnClickFilter(\"centre\", id)}\n                  plain\n                />\n            )\n          }\n        </div>\n      </CustomFilter>\n    )\n  }\n\n  renderContent = (HideCreateButton) => {\n    const {\n      isDashboard = false,\n      promotionList = [],\n      noStore = false\n    } = this.props || {}\n\n    const {\n      content,\n      event,\n      offer,\n      filterStatus,\n      filterCentre,\n      dataCount\n    } = this.state;\n\n    let contentLayout = \"\";\n    let noSelectedStore = false;\n    if (noStore.toString() === \"true\" || (HideCreateButton && HideCreateButton.value.toString() === \"true\")) {\n      noSelectedStore = true;\n    }\n    if (content && content === \"event\") {\n      contentLayout =\n        <Events\n          data={(promotionList && promotionList.length > 0) ? { dashboardPromotions: promotionList } : event}\n          filterStatus={filterStatus}\n          filterCentre={filterCentre}\n          showPreviewModal={previewModalData =>\n            this.setState({\n              showPreviewModal: true,\n              previewModalData,\n              formModalData: {\n                ...this.state.formModalData,\n                previewUrl: \"\",\n                previewTitle: \"\",\n              },\n            })\n          }\n          showFormModal={formModalData =>\n            this.setState({ showFormModal: true, formModalData })\n          }\n          showDeleteModal={deleteModalData =>\n            this.setState({\n              showDeleteModal: true,\n              deleteModalData,\n              formModalData: {\n                ...this.state.formModalData,\n                previewUrl: \"\",\n                previewTitle: \"\",\n              },\n            })\n          }\n          showFilter={() => {\n            this.setState({ showFilter: true })\n          }}\n          dataUpdate={event => this.setState({ event })}\n          noSelectedStore={noSelectedStore}\n          isDashboard={isDashboard}\n          dataTotalCount={dataCount => this.setState({ dataCount })}\n          hideFilter={dataCount == 0}\n          totalListCount={dataCount}\n        />\n    }\n    if (content && content === \"offer\") {\n      contentLayout =\n        <Offers\n          data={(promotionList && promotionList.length > 0) ? { dashboardPromotions: promotionList } : offer}\n          filterStatus={filterStatus}\n          filterCentre={filterCentre}\n          showPreviewModal={previewModalData =>\n            this.setState({\n              showPreviewModal: true,\n              previewModalData,\n              formModalData: {\n                ...this.state.formModalData,\n                previewUrl: \"\",\n                previewTitle: \"\",\n              },\n            })\n          }\n          showFormModal={formModalData =>\n            this.setState({ showFormModal: true, formModalData })\n          }\n          showDeleteModal={deleteModalData =>\n            this.setState({\n              showDeleteModal: true,\n              deleteModalData,\n              formModalData: {\n                ...this.state.formModalData,\n                previewUrl: \"\",\n                previewTitle: \"\",\n              },\n            })\n          }\n          showFilter={() => {\n            this.setState({ showFilter: true })\n          }}\n          dataUpdate={offer => this.setState({ offer })}\n          noSelectedStore={noSelectedStore}\n          isDashboard={isDashboard}\n          dataTotalCount={dataCount => this.setState({ dataCount })}\n          hideFilter={dataCount == 0}\n          totalListCount={dataCount}\n        />\n    }\n\n    return (contentLayout);\n  };\n\n  render() {\n    const {\n      content,\n      showDeleteModal,\n      showSuccessMessage,\n      formModalData,\n      isDocumentReady,\n      promotionPreviewUrlHolder,\n      promotionPreviewTitleHolder\n    } = this.state;\n    const {\n      CentreList,\n      HideCreateButton,\n    } = this.props.fields || {};\n\n    const {\n      noStore = false\n    } = this.props || {}\n    return (\n      <div className={`promotions-listing__container ${showSuccessMessage ? \"has-success-message\" : \"\"}`}>\n        {showDeleteModal && this.renderDelete()}\n        {isDocumentReady &&\n          this.renderPreviewModal()\n        }\n        {isDocumentReady &&\n          this.renderFormModal()\n        }\n\n        {isDocumentReady &&\n          CentreList &&\n          CentreList.length > 0 &&\n          this.renderCustomFilter(CentreList)\n        }\n\n        {showSuccessMessage &&\n          <SuccessMessage\n            showPreviewLink={formModalData && formModalData.previewUrl}\n            label={formModalData.successMessage}\n            handleOnClick={() => {\n              if (formModalData.previewUrl) {\n                this.setState({\n                  showPreviewModal: true,\n                  formModalData: {\n                    ...this.state.formModalData,\n                    previewUrl: promotionPreviewUrlHolder,\n                    previewTitle: promotionPreviewTitleHolder,\n                  },\n                })\n              }\n            }}\n            handleShowSuccess={(showSuccessMessage) => {\n              this.setState({\n                showSuccessMessage\n              })\n            }}\n          />\n        }\n\n        <div className={`promotions__content ${(noStore.toString() === \"true\" || (HideCreateButton && HideCreateButton.value.toString() === \"true\")) ? \"hide-create-btn\" : \"\"}`}>\n          {content && this.renderContent(HideCreateButton)}\n        </div>\n      </div>\n    );\n  }\n}\nexport default FeatureRetailerPortalPromotionListing;","import BaseURL, { DevURL } from \"./BaseURL\";\n\nconst isDev = process.env.REACT_APP_DEV || false;\n\nexport const getNotifications = () => {\n  const endpoint = isDev ? \"/GetNotifications\" : \"/notification/GetNotifications\";\n   return BaseURL.get(endpoint);\n};\n\nexport const getNotificationContent = (params) => {\n  const endpoint = isDev ? \"/GetNotificationContent\" : \"/notification/GetNotificationsContent\";\n  return BaseURL.get(endpoint, { params: { ...params } });\n};\n\nexport const updateMemoStatus = (params) => {\n  return BaseURL.get(\"/notification/MemoViewed\", { params: { ...params } });\n};\n\nexport const acknowledgeMemo = (params) => {\n  return BaseURL.get(\"/notification/Acknowledged\", { params: { ...params } });\n};\n","import React from \"react\";\nimport { acknowledgeMemo } from \"../../../api/NotificationAPI\";\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\nimport pdf from \"../../../assets/icons/svg/pdf.svg\";\nimport file from \"../../../assets/icons/svg/file.svg\";\nimport ListItem from \"../../Base/ListItem\";\nimport SuccessMessage from \"../../Base/SuccessMessage\";\nimport FormCheckbox from \"../../Base/FormCheckbox\";\nimport Button from \"../../Base/Button\";\nimport TagManager from \"react-gtm-module\";\nimport logoPlaceholder from \"../../../assets/img/logoPlaceholder.png\";\n\nclass MemoItem extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      acknowledged: null,\n      checked: null,\n      disableBtn: true,\n      disabledCb: false,\n      message: null,\n      showModal: false,\n      modalMessage: null,\n    };\n  }\n  componentDidMount() {\n    const { Acknowledged = null } = this.props.data || {};\n    this.setState({\n      acknowledged: Acknowledged && Acknowledged.value,\n      checked: Acknowledged && Acknowledged.value,\n      message:\n        Acknowledged && Acknowledged.value ? \"This has been acknowledged.\" : \"\",\n    });\n  }\n\n  renderAttachments = (attachments) => {\n    if (attachments && attachments.length) {\n      return (\n        <div className=\"attachments-container\">\n          {attachments.map((item, index) => {\n            const { Name, Url, Size } = item;\n            const type = this.getFileType(Url);\n            return (\n              <ListItem\n                key={`attachmentMemo-${index}`}\n                logoSrc={(type && pdf) || file}\n                label={{ value: type }}\n                title={Name}\n                description={Size}\n                btnTwo={{\n                  icon: \"download\",\n                  color: \"secondary\",\n                  tooltip: \"Download\",\n                }}\n                listItemOnClick={() =>\n                  window && Url && Url.value && window.open(Url.value)\n                }\n                noActionBtn={true}\n              />\n            );\n          })}\n        </div>\n      );\n    } else return null;\n  };\n\n  onChange = (val) => {\n    this.setState({ checked: val, disableBtn: !val });\n  };\n\n  acknowledgeMemo = async (itemId) => {\n    this.setState({\n      disableBtn: true,\n      disabledCb: true,\n    });\n    try {\n      const response = await acknowledgeMemo({ itemId });\n      if (response && response.data) {\n        const { IsSuccess, message } = response.data;\n        if (IsSuccess && IsSuccess.value) {\n          this.setState({\n            modalMessage: message && message.value,\n            message: \"This has been acknowledged.\",\n            acknowledged: true,\n            showModal: true,\n          });\n          TagManager.dataLayer({\n            dataLayer: {\n              event: \"correspondenceAcknowledged\",\n            },\n            dataLayerName: \"dataLayer\",\n          });\n        } else {\n          this.setState({\n            modalMessage: message && message.value,\n            disableBtn: false,\n            disabledCb: false,\n            hideIcon: true,\n            showModal: true,\n          });\n        }\n      } else {\n        this.setState({\n          modalMessage: \"Something went wrong. Please try again.\",\n          disableBtn: false,\n          disabledCb: false,\n          hideIcon: true,\n          showModal: true,\n        });\n      }\n    } catch (e) {\n      this.setState({\n        modalMessage: \"Something went wrong. Please try again.\",\n        disableBtn: false,\n        disabledCb: false,\n        hideIcon: true,\n        showModal: true,\n      });\n    }\n  };\n\n  renderAcknowledgement = (id, type) => {\n    const { hideAcknowledgement } = this.props;\n    const {\n      acknowledged,\n      checked,\n      disableBtn,\n      disabledCb,\n      message,\n    } = this.state;\n    if (\n      !hideAcknowledgement &&\n      type &&\n      type &&\n      type.value &&\n      type.value.toLowerCase().indexOf(\"compliance\") > -1\n    ) {\n      if (message) {\n        return (\n          <div className=\"memo-footer\">\n            <div className=\"memo-message\">{message}</div>\n          </div>\n        );\n      } else {\n        return (\n          <div className=\"memo-footer\">\n            {!acknowledged && (\n              <div className=\"memo-acknowledgment\">\n                <FormCheckbox\n                  plain\n                  label=\"Acknowledge\"\n                  checked={checked}\n                  onCheckboxChange={(val, checked) => this.onChange(checked)}\n                  disabled={disabledCb}\n                />\n                <Button\n                  color=\"primary\"\n                  onClick={() => this.acknowledgeMemo(id && id.value)}\n                  disabled={disableBtn}\n                >\n                  Submit\n                </Button>\n              </div>\n            )}\n          </div>\n        );\n      }\n    }\n  };\n\n  renderMiniModal = () => {\n    const { modalMessage, hideIcon } = this.state;\n\n    return (\n      <SuccessMessage\n        label={modalMessage}\n        hideIcon={hideIcon}\n        handleShowSuccess={(showModal) => {\n          this.setState({ showModal });\n        }}\n      />\n    );\n  };\n\n  getFileType = (url) => {\n    const file = url && url.value;\n    let type = null;\n\n    if (file) {\n      const isIB = file.includes(\"intelligencebank.com\");\n\n      if (!isIB) {\n        type = file.slice(file.lastIndexOf(\".\") + 1).toUpperCase();\n      }\n    }\n\n    return type;\n  };\n\n  render() {\n    const { ItemId, Title, MemoImage, Content, Attachments, MemoType } =\n      this.props.data || {};\n    const { showModal } = this.state;\n    return (\n      <div className=\"memoitem-container\">\n        {showModal && this.renderMiniModal()}\n        <div className=\"memo-title\">\n          <Text field={Title} />\n        </div>\n        {MemoImage && MemoImage.value && MemoImage.value.src && (\n          <div className=\"memo-img\">\n            <img\n              alt={`${\n                MemoImage.value.alt ? MemoImage.value.alt : \"Memo-image-alt\"\n              }`}\n              src={logoPlaceholder}\n              data-src={MemoImage.value.src}\n              className=\"lazyload\"\n            />\n          </div>\n        )}\n        {Content && Content.value && (\n          <div className=\"memo-content\">\n            <Text field={Content} />\n          </div>\n        )}\n        {this.renderAttachments(Attachments)}\n        {this.renderAcknowledgement(ItemId, MemoType)}\n      </div>\n    );\n  }\n}\n\nexport default MemoItem;\n","import React from \"react\";\nimport {\n  getNotifications,\n  updateMemoStatus,\n  getNotificationContent,\n} from \"../../../../api/NotificationAPI\";\nimport TagManager from \"react-gtm-module\";\nimport MemoItem from \"../../../Modules/MemoItem\";\nimport PageHeader from \"../../../Base/PageHeader\";\nimport ListItem from \"../../../Base/ListItem\";\nimport FormModal from \"../../../Base/FormModal\";\nimport NoResultMessage from \"../../../Base/NoResultMessage\";\nimport {\n  disableBodyScroll,\n  enableBodyScroll,\n} from \"../../../../helper/ScrollHelper\";\nimport { hideBackToTop } from \"../../../../helper/HideBackToTopHelper\";\n\nclass FeatureRetailerPortalNotifications extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showLoader: true,\n      showContentLoader: true,\n      notifications: null,\n      showViewModal: false,\n      modalData: null,\n      acknowledge: false,\n      hideAcknowledgeButton: false,\n      memoContent: null,\n      isFirefox: false,\n    };\n  }\n\n  componentDidMount() {\n    const { isDashboard, notificationsList, hideAcknowledgeButton } =\n      this.props || {};\n    if (\n      navigator &&\n      navigator.userAgent &&\n      navigator.userAgent.toUpperCase().indexOf(\"FIREFOX\") !== -1\n    ) {\n      this.setState({ isFirefox: true });\n    }\n    if (document) {\n      this.setState({ isDocumentReady: true });\n      if (!isDashboard) {\n        this.getData();\n      } else {\n        this.setState({\n          notifications: notificationsList,\n          hideAcknowledgeButton,\n          showLoader: false,\n        });\n      }\n    }\n  }\n\n  getData = async () => {\n    try {\n      const response = await getNotifications();\n      if (response && response.data) {\n        const { Notifications, HideAcknowledgeButton } = response.data;\n        this.setState({\n          notifications: Notifications,\n          hideAcknowledgeButton:\n            HideAcknowledgeButton && HideAcknowledgeButton.value,\n          showLoader: false,\n        });\n      }\n    } catch (e) {\n      if (e && e.response && e.response.statusText) {\n        console.error(\"Get Notifications Data Error: \" + e.response.statusText);\n      } else console.log(e);\n    }\n  };\n\n  getContent = async (itemId) => {\n    try {\n      const response = await getNotificationContent({ itemId });\n      if (response && response.data) {\n        const {\n          ItemId,\n          Title,\n          Date,\n          Image: MemoImage,\n          Content,\n          Attachments,\n          MemoType,\n          MemoViewed,\n          Acknowledged,\n        } = response.data;\n        this.setState({\n          memoContent: {\n            ItemId,\n            Title,\n            Date,\n            MemoImage,\n            Content,\n            Attachments,\n            MemoType,\n            MemoViewed,\n            Acknowledged,\n          },\n          showContentLoader: false,\n          itemId: ItemId,\n        });\n      }\n      return null;\n    } catch (e) {\n      console.error(\"Get Notifications Data Error: \" + e.response.statusText);\n      return null;\n    }\n  };\n\n  setMemoStatus = (itemId) => {\n    const { notifications } = this.state;\n    let items = [...notifications];\n    if (items) {\n      let i = items.findIndex((el) => el.ItemId.value === itemId);\n      if (items[i] && items[i].MemoViewed && !items[i].MemoViewed.value) {\n        items[i].MemoViewed.value = true;\n      }\n\n      if (items.find((el) => el && el.MemoViewed && !el.MemoViewed.value)) {\n      } else {\n        if (this.state.isDocumentReady) {\n          document.getElementById(\"notif-count\") &&\n            document.getElementById(\"notif-count\").remove();\n        }\n      }\n    }\n  };\n\n  handleView = async (itemId, isViewed, dateAndCentre, title) => {\n    if (!isViewed) {\n      const response = await updateMemoStatus({ itemId });\n      if (\n        response &&\n        response.data &&\n        response.data.IsSuccess &&\n        response.data.IsSuccess.value\n      ) {\n        TagManager.dataLayer({\n          dataLayer: {\n            event: \"correspondenceViewed\",\n            correspondenceDateAndCentre: dateAndCentre,\n            correspondenceTitle: title,\n          },\n          dataLayerName: \"dataLayer\",\n        });\n      }\n    }\n  };\n\n  renderViewModal = () => {\n    const {\n      showViewModal,\n      showContentLoader,\n      memoContent,\n      hideAcknowledgeButton,\n    } = this.state || {};\n\n    if (showViewModal) {\n      disableBodyScroll();\n    }\n\n    hideBackToTop(showViewModal);\n\n    return (\n      <FormModal\n        showModal={showViewModal}\n        label={\n          <span>\n            {\"Correspondence\"}\n            &nbsp;&nbsp;&nbsp;\n            {\"»\"}&nbsp;&nbsp;&nbsp;{\"Message\"}\n          </span>\n        }\n        closeOnClick={() =>\n          this.setState(\n            {\n              showViewModal: false,\n              memoContent: null,\n            },\n            () => enableBodyScroll()\n          )\n        }\n      >\n        {showContentLoader && (\n          <div className=\"loader-wrapper container\">\n            <div className=\"loader\" />\n          </div>\n        )}\n        {showViewModal && !showContentLoader && memoContent && (\n          <MemoItem\n            data={memoContent}\n            hideAcknowledgement={hideAcknowledgeButton}\n          />\n        )}\n      </FormModal>\n    );\n  };\n\n  renderList = () => {\n    const { notifications } = this.state;\n    if (notifications && notifications.length) {\n      const itemCount = notifications.length;\n      return (\n        <div>\n          <div className=\"notifications-item-container\">\n            {notifications.map((item, index) => {\n              const { ItemId, Title, Header, Content, MemoViewed } = item;\n              return (\n                <ListItem\n                  key={`notifId-${index}`}\n                  label={Header}\n                  showNotif={true}\n                  notification={MemoViewed && !MemoViewed.value}\n                  title={Title}\n                  description={Content}\n                  listItemOnClick={() => {\n                    this.setState({\n                      showViewModal: true,\n                    });\n                    this.getContent(ItemId && ItemId.value);\n                    this.handleView(\n                      ItemId && ItemId.value,\n                      MemoViewed && MemoViewed.value,\n                      Header && Header.value,\n                      Title && Title.value\n                    );\n                    this.setMemoStatus(ItemId && ItemId.value);\n                  }}\n                  noActionBtn={true}\n                />\n              );\n            })}\n          </div>\n          <div className=\"list-count\">\n            Showing {itemCount} of {itemCount}\n          </div>\n        </div>\n      );\n    } else {\n      return <NoResultMessage label=\"No correspondence\" />;\n    }\n  };\n\n  render() {\n    const { showLoader, isDocumentReady } = this.state;\n    return (\n      <div className=\"notifications-container\">\n        {isDocumentReady && this.renderViewModal()}\n        <PageHeader title={{ value: \"Correspondence\" }} />\n        {showLoader && (\n          <div className=\"loader-wrapper container\">\n            <div className=\"loader\" />\n          </div>\n        )}\n        {!showLoader && this.renderList()}\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalNotifications;\n","import React from \"react\";\nimport { Text, Link } from \"@sitecore-jss/sitecore-jss-react\";\nimport { get } from \"lodash\";\nimport { XMasonry, XBlock } from \"react-xmasonry\";\nimport DefaultUserLogo from \"../../../../assets/icons/png/author.png\";\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\nimport {\n  getDashboardCorrespondences,\n  getDashboardStoreInfos,\n  getDashboardEvents,\n  getDashboardOffers,\n  getDashboardArticles\n} from \"../../../../api/DashboardAPI\";\nimport Stores from \"../Stores\";\nimport PromotionListing from \"../PromotionListing\";\nimport ArticleListing from \"../ArticleListing\";\nimport Notifications from \"../Notifications\";\nimport PageHeader from \"../../../Base/PageHeader\";\nimport { addClassLazyload } from \"../../../../helper/AddClassLazyloadHelper\";\n\n// import getStoreInfoData from \"./json/getStoreInfo.json\";\n// import getEventsData from \"./json/getEvents.json\";\n// import getOffersData from \"./json/getOffers.json\";\n// import getArticlesData from \"./json/getArticles.json\";\n// import getCorresnpondences from \"./json/getCorresnpondences.json\";\n\nclass FeatureRetailerPortalDashboard extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      correspondenceList: [],\n      storeInfoList: [],\n      eventsList: [],\n      offersList: [],\n      articlesList: [],\n      isDashboardReady: false,\n      columnWidth: 0,\n      showStoreInfoLoader: true,\n      showEventsLoader: true,\n      showOffersLoader: true,\n      showArticlesLoader: true,\n      hideAcknowledgeButton: false\n    };\n  }\n\n  componentDidMount() {\n    if (window) {\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n    if (document) {\n      let containerWrapper = document.querySelector(\".body-wrapper .container\");\n      if (containerWrapper) {\n        this.setState({\n          columnWidth: containerWrapper.clientWidth / 2,\n          isDashboardReady: true\n        })\n      }\n      this.getCorrespondenceData();\n      this.getStoreInfoData();\n      this.getEventsData();\n      this.getOffersData();\n      this.getArticlesData();\n    }\n  }\n\n  handleResize = () => {\n    let containerWrapper = document.querySelector(\".body-wrapper .container\");\n    if (containerWrapper) {\n      this.setState({\n        columnWidth: containerWrapper.clientWidth / 2\n      })\n    }\n  }\n\n  getCorrespondenceData = async () => {\n    try {\n      const response = await getDashboardCorrespondences();\n      if (response.status === 200 && response.data) {\n        const correspondenceList = get(response.data, \"CorrespondenceList\", []);\n        const hideAcknowledgeButton = get(response.data, \"HideAcknowledgeButton.value\", false);\n        this.setState({\n          correspondenceList,\n          hideAcknowledgeButton,\n        })\n      }\n    }\n    catch (e) {\n      console.error(\"Get Dashboard Correspondence Data Error: \" + e.response.statusText);\n      // let response = {\n      //   data: getCorresnpondences\n      // }\n      // const correspondenceList = get(response.data, \"CorrespondenceList\", []);\n      // const hideAcknowledgeButton = get(response.data, \"HideAcknowledgeButton.value\", false);\n      // this.setState({\n      //   correspondenceList,\n      //   hideAcknowledgeButton,\n      // })\n    }\n  };\n\n  getStoreInfoData = async (isUpdate) => {\n    if (!isUpdate) {\n      this.setState({\n        showStoreInfoLoader: true\n      })\n    }\n\n    try {\n      const response = await getDashboardStoreInfos();\n      if (response.status === 200 && response.data) {\n        const storeInfoList = get(response.data, \"StoreInfoList\", []);\n        this.setState({\n          storeInfoList,\n          showStoreInfoLoader: false,\n        },\n          () => {\n            addClassLazyload(\"dashboard-content\");\n          }\n        )\n      }\n    }\n    catch (e) {\n      console.error(\"Get Dashboard Store Info Data Error: \" + e.response.statusText);\n      // let response = {\n      //   data: getStoreInfoData\n      // }\n      // const storeInfoList = get(response.data, \"StoreInfoList\", []);\n      // this.setState({\n      //   storeInfoList,\n      //   showStoreInfoLoader: false,\n      // })\n    }\n  }\n\n  getEventsData = async (isUpdate) => {\n    if (!isUpdate) {\n      this.setState({\n        showEventsLoader: true\n      })\n    }\n\n    try {\n      const response = await getDashboardEvents();\n      if (response.status === 200 && response.data) {\n        const eventsList = get(response.data, \"EventsList\", []);\n        this.setState({\n          eventsList,\n          showEventsLoader: false,\n        },\n          () => {\n            addClassLazyload(\"dashboard-content\");\n          }\n        )\n      }\n    }\n    catch (e) {\n      console.error(\"Get Dashboard Events Data Error: \" + e.response.statusText);\n      // let response = {\n      //   data: getEventsData\n      // }\n      // const eventsList = get(response.data, \"EventsList\", []);\n      // this.setState({\n      //   eventsList,\n      //   showEventsLoader: false,\n      // })\n    }\n  }\n\n  getOffersData = async (isUpdate) => {\n    if (!isUpdate) {\n      this.setState({\n        showOffersLoader: true\n      })\n    }\n\n    try {\n      const response = await getDashboardOffers();\n      if (response.status === 200 && response.data) {\n        const offersList = get(response.data, \"OffersList\", []);\n        this.setState({\n          offersList,\n          showOffersLoader: false,\n        },\n          () => {\n            addClassLazyload(\"dashboard-content\");\n          }\n        )\n      }\n    }\n    catch (e) {\n      console.error(\"Get Dashboard Offers Data Error: \" + e.response.statusText);\n      // let response = {\n      //   data: getOffersData\n      // }\n      // const offersList = get(response.data, \"OffersList\", []);\n      // this.setState({\n      //   offersList,\n      //   showOffersLoader: false,\n      // })\n    }\n  }\n\n  getArticlesData = async (isUpdate) => {\n    if (!isUpdate) {\n      this.setState({\n        showArticlesLoader: true\n      })\n    }\n\n    try {\n      const response = await getDashboardArticles();\n      if (response.status === 200 && response.data) {\n        const articlesList = get(response.data, \"ArticlesList\", []);\n        this.setState({\n          articlesList,\n          showArticlesLoader: false,\n        },\n          () => {\n            addClassLazyload(\"dashboard-content\");\n          }\n        )\n      }\n    }\n    catch (e) {\n      console.error(\"Get Dashboard Articles Data Error: \" + e.response.statusText);\n      // let response = {\n      //   data: getArticlesData\n      // }\n      // const articlesList = get(response.data, \"ArticlesList\", []);\n      // this.setState({\n      //   articlesList,\n      //   showArticlesLoader: false,\n      // })\n    }\n  }\n\n  dashboardPanelLayout = (component, headerName, showLink, link, showLoader, noResultText) => {\n    let panelLayout = \"\";\n\n    if (!showLoader) {\n      panelLayout =\n        <div className=\"dashboard-content__wrapper\">\n          <div className=\"dashboard-content__wrapper--fade\">\n            {component}\n            {showLink ?\n              <div className=\"dashboard-content__link\">\n                <Link\n                  field={{\n                    ...link.value,\n                    href: `${link.value.href}${\n                      link.value.querystring\n                        ? \"?\" + link.value.querystring\n                        : \"\"\n                      }`,\n                    text: link.value.text ? link.value.text : \"View all\"\n                  }}\n                />\n              </div> :\n              <div className=\"dashboard-content__no-result\">\n                <div className=\"dashboard-content__no-result--text\">\n                  {noResultText ? noResultText : \"No Result\"}\n                </div>\n              </div>\n            }\n          </div>\n        </div>\n    } else {\n      panelLayout =\n        <div className=\"dashboard-content__wrapper\">\n          <PageHeader\n            title={{ value: headerName }}\n          />\n          <div className=\"loader-wrapper\">\n            <div className=\"loader\">\n            </div>\n          </div>\n        </div>\n    }\n\n    return panelLayout;\n  }\n\n  renderCorrespondence = (list, link) => {\n    const {\n      hideAcknowledgeButton\n    } = this.state\n    let correspondenceLayout = \"\";\n    let showLink = true;\n    let component =\n      <Notifications\n        isDashboard={true}\n        notificationsList={list}\n        hideAcknowledgeButton={hideAcknowledgeButton}\n      />\n\n\n    correspondenceLayout =\n      this.dashboardPanelLayout(\n        component,\n        \"Correspondence\",\n        showLink,\n        link,\n      )\n\n    return correspondenceLayout;\n  }\n\n  renderStoreInfo = (list, link, showLoader) => {\n    let storeInfoLayout = \"\";\n    let showLink = false;\n    let component =\n      <Stores\n        isDashboard={true}\n        storeList={list}\n        updateDashboard={(isUpdate) => {\n          if (isUpdate) {\n            this.getStoreInfoData(isUpdate)\n          }\n        }}\n      />\n\n    if (list && list.length > 0) {\n      showLink = true;\n    }\n\n    storeInfoLayout =\n      this.dashboardPanelLayout(\n        component,\n        \"Store information\",\n        showLink,\n        link,\n        showLoader\n      )\n\n    return storeInfoLayout;\n  }\n\n  renderEvents = (list, link, hideCreateButton, showLoader) => {\n    let eventsLayout = \"\";\n    let showLink = false;\n    let component =\n      <PromotionListing\n        dashboardType=\"event\"\n        isDashboard={true}\n        promotionList={list}\n        noStore={hideCreateButton && hideCreateButton.value ? hideCreateButton.value : false}\n        updateDashboard={(isUpdate) => {\n          if (isUpdate) {\n            this.getEventsData(isUpdate)\n          }\n        }}\n      />\n\n    if (list && list.length > 0) {\n      showLink = true;\n    }\n\n    eventsLayout =\n      this.dashboardPanelLayout(\n        component,\n        \"Events\",\n        showLink,\n        link,\n        showLoader,\n        \"Create your first event and promote your store!\"\n      )\n\n    return eventsLayout;\n  }\n\n  renderOffers = (list, link, hideCreateButton, showLoader) => {\n    let offersLayout = \"\";\n    let showLink = false;\n    let component =\n      <PromotionListing\n        dashboardType=\"offer\"\n        isDashboard={true}\n        promotionList={list}\n        noStore={hideCreateButton && hideCreateButton.value ? hideCreateButton.value : false}\n        updateDashboard={(isUpdate) => {\n          if (isUpdate) {\n            this.getOffersData(isUpdate)\n          }\n        }}\n      />\n\n    if (list && list.length > 0) {\n      showLink = true;\n    }\n\n    offersLayout =\n      this.dashboardPanelLayout(\n        component,\n        \"Offers\",\n        showLink,\n        link,\n        showLoader,\n        \"Create your first offer and promote your store!\"\n      )\n\n    return offersLayout;\n  }\n\n  renderArticles = (list, link, hideCreateButton, showLoader) => {\n    let articlesLayout = \"\";\n    let showLink = false;\n    let component =\n      <ArticleListing\n        isDashboard={true}\n        articleList={list}\n        noStore={hideCreateButton && hideCreateButton.value ? hideCreateButton.value : false}\n        updateDashboard={(isUpdate) => {\n          if (isUpdate) {\n            this.getArticlesData(isUpdate)\n          }\n        }}\n      />\n\n    if (list && list.length > 0) {\n      showLink = true;\n    }\n\n    articlesLayout =\n      this.dashboardPanelLayout(\n        component,\n        \"Articles\",\n        showLink,\n        link,\n        showLoader,\n        \"Create your first article and promote your store!\"\n      )\n\n    return articlesLayout;\n  }\n\n  renderContent = () => {\n    const {\n      CorrespondenceListingLink,\n      StoresListingLink,\n      EventsListingLink,\n      OffersListingLink,\n      ArticlesListingLink,\n      HideCreateButton\n    } = this.props.fields;\n\n    const {\n      correspondenceList,\n      storeInfoList,\n      eventsList,\n      offersList,\n      articlesList,\n      showStoreInfoLoader,\n      showEventsLoader,\n      showOffersLoader,\n      showArticlesLoader,\n      columnWidth,\n    } = this.state\n\n    return (\n      <div className=\"dashboard-content\">\n        <XMasonry targetBlockWidth={columnWidth}>\n          {correspondenceList &&\n            correspondenceList.length > 0 &&\n            < XBlock key=\"correspondenceList\">\n              {this.renderCorrespondence(correspondenceList, CorrespondenceListingLink)}\n            </XBlock>\n          }\n          <XBlock key=\"storeInfoList\">\n            {this.renderStoreInfo(storeInfoList, StoresListingLink, showStoreInfoLoader)}\n          </XBlock>\n          <XBlock key=\"eventsList\">\n            {this.renderEvents(eventsList, EventsListingLink, HideCreateButton, showEventsLoader)}\n          </XBlock>\n          <XBlock key=\"offersList\">\n            {this.renderOffers(offersList, OffersListingLink, HideCreateButton, showOffersLoader)}\n          </XBlock>\n          <XBlock key=\"articlesList\">\n            {this.renderArticles(articlesList, ArticlesListingLink, HideCreateButton, showArticlesLoader)}\n          </XBlock>\n        </XMasonry>\n      </div>\n    )\n  }\n\n  render() {\n    const {\n      UserName,\n      UserPhoto,\n      UserRole,\n    } = this.props.fields;\n\n    const {\n      isDashboardReady,\n    } = this.state\n\n    return (\n      <div className=\"dashboard\">\n        <div className=\"dashboard-header\">\n          <div className=\"is-desktop\">\n            <div className=\"dashboard-header__image\">\n              {(UserPhoto && UserPhoto.value) ?\n                <img\n                  alt=\"dashboard-image-logo\"\n                  src={logoPlaceholder}\n                  data-src={UserPhoto.value}\n                  className=\"lazyload\"\n                /> :\n                <img src={DefaultUserLogo} alt=\"dashboard-image-default\" />\n              }\n            </div>\n            <div className=\"dashboard-header__text\">\n              <div className=\"dashboard-header__name\">\n                <span>{\"Welcome, \"}</span>\n                {UserName &&\n                  UserName.value &&\n                  <span>\n                    <Text field={UserName} />{\"!\"}\n                  </span>\n                }\n              </div>\n              {UserRole &&\n                UserRole.value &&\n                <div className=\"dashboard-header__description\">\n                  <Text field={UserRole} />\n                </div>\n              }\n            </div>\n          </div>\n          <div className=\"is-tablet\">\n            <PageHeader title={{ value: `Welcome, ${UserName && UserName.value ? UserName.value : \"\"}` }} />\n          </div>\n        </div>\n        {isDashboardReady &&\n          this.renderContent()\n        }\n      </div>\n    )\n  }\n}\n\nexport default FeatureRetailerPortalDashboard;\n","import BaseURL from \"./BaseURL\";\n\nexport const login = (data) => {\n  return BaseURL.post(\"/account/login\", { ...data });\n  // return DevURL.get(\"/GetEvents\", { ...data });\n};\n\nexport const logout = () => {\n  return BaseURL.post(\"/account/logout\");\n};\n","import React from \"react\";\nimport { Text, Link } from \"@sitecore-jss/sitecore-jss-react\";\nimport { logout } from \"../../../../api/LoginAPI\";\n\nconst FeatureRetailerPortalFooter = props => {\n  const { FooterTitle, FooterLinks } = props.fields;\n  const logoutUser = async () => {\n    const response = await logout();\n    if (response) {\n      if (\n        response.status === 200 &&\n        response.data &&\n        response.data.StatusCode === 200\n      ) {\n        window.history.pushState(null, \"Town Square\", window.location.pathname);\n        window.location.pathname = \"home/login\";\n      }\n    }\n  };\n  return (\n    <div className=\"footer-nav-wrapper\">\n      <div onClick={() => logoutUser()} className=\"nav-button-logout\">\n        <i className=\"icon icon-logout\" />\n        <span>Logout</span>\n      </div>\n\n      <div className=\"nav-footer-container\">\n        <div className=\"nav-footer-title\">\n          <i className=\"icon icon-qicgre\" />\n          <span>\n            <Text field={FooterTitle} />\n          </span>\n        </div>\n        <div className=\"nav-footer-links-wrapper\">\n          {FooterLinks &&\n            FooterLinks.length &&\n            FooterLinks.map((link, index) => {\n              let { LinkTarget: LinkTarget = null } = link.fields;\n              return (\n                <span key={`link-${index}`}>\n                  <u>\n                    <Link field={LinkTarget} />\n                  </u>\n                  {/* <i className=\"icon icon-external\" /> */}\n                </span>\n              );\n            })}\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default FeatureRetailerPortalFooter;\n","import React from \"react\";\n// import TagManager from \"react-gtm-module\";\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\nimport { getStoreInfo } from \"../../../../api/StoreAPI\";\n\nclass FeatureRetailerPortalHub extends React.Component {\n  constructor(props) {\n    super(props);\n  }\n\n  getData = async () => {\n    let params = {\n      pageNumber: 1,\n      centre: \"\",\n    };\n    let centreList = [];\n    const response = await getStoreInfo(params);\n    if (response) {\n      if (\n        response.data &&\n        response.data.StoreInfoList &&\n        response.data.StoreInfoList.length\n      ) {\n        response.data.StoreInfoList.map((item) => {\n          const { CentreName: centre = null } = item || {};\n          if (centreList.includes(centre.value) === false) {\n            centreList.push(centre.value);\n          }\n        });\n      }\n      // if (centreList && centreList.length) {\n      //   centreList.map(centeName => {\n      //     TagManager.dataLayer({\n      //       dataLayer: {\n      //         event: \"loginCentreInfo\",\n      //         centreName: centeName ? centeName : \"\"\n      //       },\n      //       dataLayerName: \"dataLayer\"\n      //     });\n      //   });\n      // }\n    }\n  };\n\n  componentDidMount() {\n    this.getData();\n  }\n\n  render() {\n    const { Heading, Links } = this.props.fields;\n    return (\n      <div className=\"hub-container\">\n        <div className=\"hub-heading\">\n          <Text field={Heading} />\n        </div>\n        <div className=\"hub-controls\">\n          <div className=\"row\">\n            {Links &&\n              Links.length !== 0 &&\n              Links.map((item, index) => {\n                const { querystring, href, target, text } =\n                  item.fields.Navigation.value || null;\n                const title =\n                  item &&\n                  item.fields &&\n                  item.fields.Title &&\n                  item.fields.Title.value\n                    ? item.fields.Title.value\n                    : \"\";\n                let icon = \"\";\n                if (/event/.test(querystring)) {\n                  icon = \"events\";\n                } else if (/offer/.test(querystring)) {\n                  icon = \"offers\";\n                } else if (/storeinfo/.test(querystring)) {\n                  icon = \"stores\";\n                } else if (/article/.test(querystring)) {\n                  icon = \"articles\";\n                }\n\n                return (\n                  <div className=\"col\" key={`${querystring}-${index}`}>\n                    <a\n                      className=\"hub-button\"\n                      href={`${href}?${querystring}`}\n                      target={target}\n                    >\n                      <div className=\"hub-button-details\">\n                        <i className={`hub-icon icon icon-${icon}`} />\n                        {title && <span className=\"hub-title\">{title}</span>}\n                        {text && <span className=\"hub-text\">{text}</span>}\n                      </div>\n                    </a>\n                  </div>\n                );\n              })}\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalHub;\n","import React, { Component } from \"react\";\r\nimport { Link } from \"@sitecore-jss/sitecore-jss-react\";\r\nimport { getUrlParameter } from \"../../../../../helper/UrlHelper\";\r\nimport { getWorkboxItems } from \"../../../../../api/WorkflowAPI\";\r\n\r\nclass NavButtons extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      currentPage: \"\",\r\n      tab: \"\",\r\n      type: \"\",\r\n      NavLinks: props.data.Links,\r\n      newApprovals: null,\r\n      // hideApprovalsCount:\r\n      //   props.data.HideContentApprovalLink &&\r\n      //   props.data.HideContenAtpprovalLink.value,\r\n    };\r\n  }\r\n  componentDidMount() {\r\n    this.setState({\r\n      currentPage: window.location.pathname.toLowerCase(),\r\n      type: getUrlParameter(\"type\"),\r\n    });\r\n    // const { hideApprovalsCount } = this.state;\r\n    // if (!hideApprovalsCount) {\r\n    //   let params = {\r\n    //     pageNumber: 1,\r\n    //     type: \"\",\r\n    //   };\r\n    //   this.getNewApprovals(params);\r\n    // }\r\n  }\r\n\r\n  getNewApprovals = async (params) => {\r\n    const response = await getWorkboxItems(params);\r\n    if (\r\n      response &&\r\n      response.data &&\r\n      response.data.TotalResults &&\r\n      response.data.TotalResults.value\r\n    ) {\r\n      const newApprovals = response.data.TotalResults.value;\r\n      if (newApprovals != 0) {\r\n        this.setState({ newApprovals });\r\n      }\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const { HideUserManagementLink, HideContentApprovalLink, HideAuthorisationsLink } = this.props.data;\r\n    const { NavLinks, newApprovals } = this.state;\r\n    return (\r\n      <div className=\"nav-buttons-wrapper\">\r\n        {NavLinks &&\r\n          NavLinks.length &&\r\n          NavLinks.map((link, index) => {\r\n            const { Navigation: Navigation = null } = link.fields;\r\n            if (\r\n              Navigation &&\r\n              Navigation.value &&\r\n              Navigation.value.text &&\r\n              Navigation.value.href\r\n            ) {\r\n              let Nav = Navigation.value.text.toLowerCase();\r\n              if (\r\n                (Nav === \"users\" &&\r\n                  HideUserManagementLink &&\r\n                  HideUserManagementLink.value) ||\r\n                (Nav === \"authorisations\" &&\r\n                  HideAuthorisationsLink &&\r\n                  HideAuthorisationsLink.value) ||\r\n                (Nav === \"approvals\" &&\r\n                  HideContentApprovalLink &&\r\n                  HideContentApprovalLink.value)\r\n              )\r\n                return null;\r\n              let {\r\n                currentPage: currentPage = null,\r\n                type: type = null,\r\n              } = this.state;\r\n              if (type) {\r\n                type = type.toLowerCase() + \"s\";\r\n              }\r\n\r\n              let iconName = Nav;\r\n              if (Nav.indexOf(\"store\") !== -1) {\r\n                iconName = 'stores';\r\n              }\r\n              if (Nav.indexOf(\"authorisations\") !== -1) {\r\n                iconName = 'community';\r\n              }\r\n\r\n              return (\r\n                <Link\r\n                  field={{\r\n                    ...Navigation.value,\r\n                    href: `${Navigation.value.href}?${\r\n                      Navigation.value.querystring\r\n                        ? Navigation.value.querystring + \"&\"\r\n                        : \"\"\r\n                    }sc_mode=normal`,\r\n                  }}\r\n                  key={`NavLink-${index}`}\r\n                >\r\n                  <div\r\n                    className={`nav-button ${\r\n                      (currentPage.indexOf(\"promotion\") !== -1 &&\r\n                        type.indexOf(Nav) !== -1) ||\r\n                      (currentPage.indexOf(\"store\") !== -1 &&\r\n                        Nav.indexOf(\"store\") !== -1) ||\r\n                      currentPage.indexOf(Nav) !== -1\r\n                        ? \"current\"\r\n                        : \"\"\r\n                    }`}\r\n                  >\r\n                    <i\r\n                      className={`icon icon-${iconName}`}\r\n                    >\r\n                      {/* {Nav === \"approvals\" && newApprovals && (\r\n                        <div id={`approvals-count`} className=\"approvals-count\"/>\r\n                      )} */}\r\n                    </i>\r\n                    <span>{Nav}</span>\r\n                  </div>\r\n                </Link>\r\n              );\r\n            } else return null;\r\n          })}\r\n      </div>\r\n    );\r\n  }\r\n}\r\nexport default NavButtons;\r\n","import React from \"react\";\r\nimport { Link } from \"@sitecore-jss/sitecore-jss-react\";\r\n\r\nconst NavFooter = (props) => {\r\n  const { FooterLinks: links = null } = props.data || {};\r\n  return (\r\n    <div className=\"nav-links-wrapper\">\r\n      {links &&\r\n        links.length &&\r\n        links.map((link, index) => {\r\n          let { LinkTarget: linkTarget = null } = link.fields;\r\n          return (\r\n            <div key={`link-${index}`}>\r\n              <Link field={linkTarget} />\r\n            </div>\r\n          );\r\n        })}\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default NavFooter;\r\n","import React, { Fragment } from \"react\";\nimport NavButtons from \"./NavButtons\";\nimport NavLinks from \"./NavLinks\";\n\nclass FeatureRetailerPortalLeftNavigation extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = { breakpoint: null };\n  }\n\n  componentDidMount() {\n    const { CentreList } = this.props.fields || {};\n    let list = [];\n    if (CentreList && CentreList.length) {\n      CentreList.map((item) => {\n        const { CentreName: centre = null } = item.fields || {};\n        if (centre && centre.value) {\n          list.push(centre.value);\n        }\n      });\n      sessionStorage.setItem(\"RPCentreList\", list);\n    }\n    this.setState({ breakpoint: window.outerWidth });\n    window.addEventListener(\"resize\", this.handleResize);\n  }\n\n  handleResize = () => {\n    const { breakpoint } = this.state;\n    if (\n      (window.outerWidth < 992 && breakpoint < 992) ||\n      (window.outerWidth >= 992 && breakpoint >= 992)\n    ) {\n    } else {\n      this.closeNav();\n    }\n  };\n\n  closeNav = () => {\n    const leftNavWrapper = document.querySelector(\".left-nav\");\n    const topNavWrapper = document.querySelector(\".top-nav .top-nav-wrapper\");\n    const backButton = document.querySelector(\"#nav-mobile-back\");\n    if (leftNavWrapper && topNavWrapper) {\n      leftNavWrapper.classList.remove(\"show-nav-mobile\");\n      topNavWrapper.classList.remove(\"show-nav-mobile\");\n    }\n    if (backButton) {\n      backButton.click();\n    }\n  };\n  render() {\n    return (\n      <Fragment>\n        <div className=\"left-nav-wrapper\">\n          <NavButtons data={this.props.fields} />\n          <NavLinks data={this.props.fields} />\n        </div>\n\n        <div className=\"nav-blur-wrapper\">\n          <div className=\"nav-blur\" />\n        </div>\n      </Fragment>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalLeftNavigation;\n","import React, { Component } from \"react\";\r\n\r\nclass Input extends Component {\r\n  render() {\r\n    const {\r\n      label,\r\n      value,\r\n      id,\r\n      size,\r\n      onInputChange,\r\n      type,\r\n      placeholder,\r\n      disabled,\r\n      onInputKeyDown,\r\n      required,\r\n      responseText,\r\n      style,\r\n      autoComplete,\r\n      blank,\r\n      autoFocus,\r\n    } = this.props;\r\n    return (\r\n      <div className=\"retailer-input-container\" style={style}>\r\n        {label && (\r\n          <div className=\"label-container\">\r\n            <label>{label}</label>\r\n          </div>\r\n        )}\r\n        <div className=\"input-container\">\r\n          <input\r\n            className={`retailer-input form-control ${\r\n              value ? \"has-value\" : \"\"\r\n            } ${size ? size : \"\"} ${\r\n              placeholder === \"Password\" ? \"hide-password\" : \"\"\r\n            } ${blank ? blank : \"\"}`}\r\n            id={id}\r\n            value={value}\r\n            onChange={(e) => onInputChange(e.target.value)}\r\n            type={type}\r\n            placeholder={placeholder}\r\n            disabled={disabled}\r\n            required={required}\r\n            onKeyDown={(e) => (onInputKeyDown ? onInputKeyDown(e) : null)}\r\n            autoComplete={autoComplete}\r\n            autoFocus={autoFocus}\r\n          />\r\n          {responseText && (\r\n            <div className={`response-text ${responseText.type}`}>\r\n              {responseText.value}\r\n            </div>\r\n          )}\r\n        </div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default Input;\r\n","import React, { Component } from \"react\";\r\n\r\nclass ForgotPassword extends Component {\r\n  render() {\r\n\r\n    return (\r\n      <div className=\"forgot-password-container\">\r\n        <img\r\n          className=\"forgot-password-bg\"\r\n          src={this.props.bg}\r\n          alt=\"Background\"\r\n        />\r\n        <div className=\"container\">{this.props.children}</div>\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default ForgotPassword;\r\n","import React from \"react\";\nimport axios from \"axios\";\nimport TagManager from \"react-gtm-module\";\nimport { RichText } from \"@sitecore-jss/sitecore-jss-react\";\nimport BackgroundImage from \"../../../../assets/img/rp-bg.png\";\nimport Input from \"../../../Base/Input\";\nimport Button from \"../../../Base/Button\";\nimport { login } from \"../../../../api/LoginAPI\";\nimport ForgotPassword from \"../../../Base/ForgotPassword\";\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\n\nclass FeatureRetailerPortalLogin extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      username: null,\n      password: null,\n      showModal: false,\n      browser: \"\",\n      passwordSent: false,\n      forgotPassword: {\n        value: \"\",\n        successMessage: \"\",\n        errorMessage: \"\",\n      },\n    };\n    this.form = React.createRef();\n  }\n\n  componentDidMount() {\n    this.checkBrowser();\n    if (sessionStorage.getItem(\"RPCentreList\")) {\n      sessionStorage.removeItem(\"RPCentreList\");\n    }\n\n    if (window) {\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n    if (document) {\n      this.handleResize();\n    }\n  }\n\n  handleResize = () => {\n    let loginWrapper = \"\";\n\n    if (document) {\n      loginWrapper = document.querySelector(\".login-container\");\n    }\n\n    if (window.outerWidth >= 992) {\n      loginWrapper.style.height = \"auto\";\n    } else {\n      loginWrapper.style.height = window.innerHeight + \"px\";\n    }\n  };\n\n  clearSessionStorageSetPassword = () => {\n    if (sessionStorage.getItem(\"promptPassword\")) {\n      sessionStorage.removeItem(\"promptPassword\");\n    }\n    if (sessionStorage.getItem(\"setPassword\")) {\n      sessionStorage.removeItem(\"setPassword\");\n    }\n  };\n\n  checkBrowser = () => {\n    if (\n      navigator &&\n      navigator.userAgent &&\n      navigator.userAgent.toUpperCase().indexOf(\"CHROME\") != -1 &&\n      navigator.vendor &&\n      navigator.vendor.toUpperCase().indexOf(\"GOOGLE\") != -1\n    ) {\n      this.setState({ browser: \"chrome\" });\n    } else this.setState({ browser: \"other\" });\n  };\n\n  submitForm = async () => {\n    const data = { ...this.state };\n    // const { username } = this.state;\n    const response = await login(data);\n    if (response) {\n      if (\n        response.status === 200 &&\n        response.data &&\n        response.data.StatusCode === 200\n      ) {\n        this.clearSessionStorageSetPassword();\n        window.location.pathname = \"\";\n        TagManager.dataLayer({\n          dataLayer: {\n            event: \"successfulLogin\",\n          },\n          dataLayerName: \"dataLayer\",\n        });\n      } else {\n        alert(\"Login Failed\");\n      }\n    }\n  };\n\n  forgotPassword = (val) => {\n    this.setState({\n      showModal: val,\n      forgotPassword: {\n        value: \"\",\n        successMessage: \"\",\n        errorMessage: \"\",\n      },\n    });\n  };\n\n  sendForgotPassword = async () => {\n    const { forgotPassword } = this.state;\n    if (this.form.current.reportValidity() && forgotPassword.value) {\n      const formData = new FormData();\n      formData.append(\"email\", forgotPassword.value);\n\n      const url = \"/api/sitecore/account/ForgotPassword\";\n\n      try {\n        let response = await axios({\n          method: \"POST\",\n          url,\n          data: formData,\n        });\n\n        if (response) {\n          this.setState({\n            forgotPassword: {\n              ...forgotPassword,\n              successMessage: \"Please check your email\",\n              errorMessage: \"\",\n            },\n          });\n          this.setState({ passwordSent: true });\n        } else {\n          this.setState({\n            forgotPassword: {\n              ...forgotPassword,\n              successMessage: \"\",\n              errorMessage: \"The email is invalid or does not exist\",\n            },\n          });\n        }\n      } catch (e) {\n        console.log(e);\n        this.setState({\n          forgotPassword: {\n            ...forgotPassword,\n            successMessage: \"\",\n            errorMessage: \"Something went wrong. Please try again.\",\n          },\n        });\n      }\n    }\n  };\n\n  onEnterKeyPress = (event) => {\n    if (event.which === 13 || event.keyCode === 13 || event.key === \"Enter\") {\n      this.submitForm();\n    }\n  };\n\n  renderModal = (forgotPasswordMessage) => {\n    const { errorMessage, successMessage } = this.state.forgotPassword;\n    const { passwordSent } = this.state;\n    return (\n      <ForgotPassword\n        bg={BackgroundImage}\n        title=\"Forgot password\"\n        show={(val) => this.forgotPassword(val)}\n      >\n        <div className=\"forgot-password-modal\">\n          <div className=\"header\">\n            <div\n              className=\"back-button\"\n              onClick={() =>\n                this.setState({ showModal: false, passwordSent: false })\n              }\n            >\n              <span>\n                <i className=\"icon icon-back\" />\n                BACK\n              </span>\n            </div>\n          </div>\n          <div className=\"body\">\n            <div className=\"title\">\n              {passwordSent ? \"Password sent!\" : \"Forgot password\"}\n            </div>\n            {passwordSent ? (\n              <div className=\"message\">\n                <RichText field={forgotPasswordMessage} />\n              </div>\n            ) : (\n              <form ref={this.form} onSubmit={(e) => e.preventDefault()}>\n                <Input\n                  type=\"email\"\n                  placeholder=\"E-mail address\"\n                  autoFocus={true}\n                  required\n                  onInputChange={(value) =>\n                    this.setState({\n                      forgotPassword: { ...this.state.forgotPassword, value },\n                    })\n                  }\n                  responseText={{\n                    type: successMessage\n                      ? \"success\"\n                      : errorMessage\n                        ? \"error\"\n                        : \"\",\n                    value: successMessage\n                      ? successMessage\n                      : errorMessage\n                        ? errorMessage\n                        : \"\",\n                  }}\n                />\n              </form>\n            )}\n            <div className=\"footer-button\">\n              {passwordSent ? (\n                <Button\n                  size=\"send-password\"\n                  color=\"light-tertiary\"\n                  onClick={() =>\n                    this.setState({ showModal: false, passwordSent: false })\n                  }\n                >\n                  Done\n                </Button>\n              ) : (\n                <Button\n                  size=\"send-password\"\n                  color=\"light-tertiary\"\n                  disabled={this.state.forgotPassword.value ? false : true}\n                  onClick={() => this.sendForgotPassword()}\n                >\n                  Send password\n                </Button>\n              )}\n            </div>\n          </div>\n        </div>\n      </ForgotPassword>\n    );\n  };\n\n  render() {\n    const {\n      // TopNavigationLinks = null,\n      SiteLogo = null,\n      SiteLogoClassName = null,\n      LoginPageBlurb = null,\n      FooterBlurb = null,\n      ForgotPasswordMessage = null,\n    } = this.props.fields || {};\n    // let navLink =\n    //   TopNavigationLinks &&\n    //   TopNavigationLinks.fields &&\n    //   TopNavigationLinks.fields.RetailerSiteLogo &&\n    //   TopNavigationLinks.fields.RetailerSiteLogo.fields &&\n    //   TopNavigationLinks.fields.RetailerSiteLogo.fields.Link &&\n    //   TopNavigationLinks.fields.RetailerSiteLogo.fields.Link.value\n    //     ? TopNavigationLinks.fields.RetailerSiteLogo.fields.Link.value\n    //     : {};\n    let mainLink =\n      SiteLogo &&\n        SiteLogo.fields &&\n        SiteLogo.fields.Link &&\n        SiteLogo.fields.Link.value\n        ? SiteLogo.fields.Link.value\n        : {};\n    const logo = (SiteLogoClassName && SiteLogoClassName.value) || \"\";\n    let blurb = LoginPageBlurb && LoginPageBlurb.value ? LoginPageBlurb : \"\";\n    let footerBlurb = FooterBlurb && FooterBlurb.value ? FooterBlurb : \"\";\n    let forgotPasswordMessage =\n      ForgotPasswordMessage && ForgotPasswordMessage.value\n        ? ForgotPasswordMessage\n        : \"\";\n    return (\n      <div className=\"login-container\">\n        {this.state.showModal ? this.renderModal(forgotPasswordMessage) : null}\n        <img className=\"bg-image\" src={BackgroundImage} alt=\"Background\" />\n        <div className=\"container\">\n          <div className=\"header-wrapper\">\n            <div className=\"header-logo\">\n              {/* {navLink ? (\n                <a {...navLink}>\n                  <i className=\"icon icon-qicgre\" />\n                </a>\n              ) : (\n                <i className=\"icon icon-qicgre\" />\n              )} */}\n            </div>\n          </div>\n          <div className=\"form-logo\">\n            {mainLink ? (\n              <a {...mainLink}>\n                <img\n                  alt={\"sitecore-logo\"}\n                  src={logoPlaceholder}\n                  data-src={logo}\n                  className=\"lazyload form-logo-image\"\n                />\n              </a>\n            ) : (\n              <img\n                alt={\"sitecore-logo\"}\n                src={logoPlaceholder}\n                data-src={logo}\n                className=\"lazyload form-logo-image\"\n              />\n            )}\n          </div>\n          <div className=\"login-wrapper\">\n            <div className=\"form-blurb\">\n              <RichText field={blurb} />\n            </div>\n            <div className=\"form-wrapper\">\n              <div className=\"form-title\">Sign in</div>\n              <div className=\"form-group\">\n                <Input\n                  type=\"text\"\n                  placeholder=\"Email address\"\n                  onInputChange={(username) => this.setState({ username })}\n                />\n                <Input\n                  type=\"text\"\n                  placeholder=\"Email address\"\n                  onInputChange={(username) => this.setState({ username })}\n                  style={{ display: \"none\" }}\n                />\n              </div>\n              <div className=\"form-group\">\n                {this.state.browser === \"chrome\" && (\n                  <Input\n                    type=\"text\"\n                    placeholder=\"Password\"\n                    onInputChange={(password) => this.setState({ password })}\n                    onInputKeyDown={(event) => this.onEnterKeyPress(event)}\n                  />\n                )}\n                {this.state.browser === \"other\" && (\n                  <Input\n                    type=\"password\"\n                    placeholder=\"Password\"\n                    onInputChange={(password) => this.setState({ password })}\n                    onInputKeyDown={(event) => this.onEnterKeyPress(event)}\n                    autoComplete=\"new-password\"\n                  />\n                )}\n              </div>\n              <div className=\"form-submit\">\n                <Button\n                  onClick={() => this.submitForm()}\n                  size=\"full\"\n                  color=\"light-green\"\n                >\n                  Sign in\n                </Button>\n              </div>\n\n              <div className=\"form-controls-wrapper\">\n                <div\n                  className=\"form-forgot-password\"\n                  onClick={() => this.forgotPassword(true)}\n                >\n                  Forgot password?\n                </div>\n              </div>\n            </div>\n          </div>\n          {footerBlurb && (\n            <div className=\"form-footer\">\n              <RichText field={footerBlurb} />\n            </div>\n          )}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalLogin;\n","import React from \"react\";\n\nclass AvatarUpload extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      file: props.value ? props.value : null,\n      preview: props.value ? props.value : null,\n      remove: false,\n      errorMessage: null,\n    };\n  }\n\n  handleFileUpload = () => {\n    this.props.handleFileUpload(this.state.file, this.state.errorMessage);\n    this.props.removeImage(this.state.remove);\n  };\n\n  setFile = (file) => {\n    if (file && file.type.indexOf(\"image\") !== -1) {\n      if (file.size / 1024 / 1024 <= 2) {\n        this.setState(\n          {\n            file,\n            preview: URL.createObjectURL(file),\n          },\n          this.handleFileUpload\n        );\n      } else {\n        alert(\"The maximum file size allowed is 2 MB.\");\n      }\n    } else {\n      alert(\"Please select an image.\");\n    }\n  };\n\n  render() {\n    const { preview } = this.state;\n    const { value } = this.props;\n    return (\n      <div className=\"avatarupload-wrapper\">\n        <div className={`avatarupload-btn ${preview || value ? \"\" : \"empty\"}`}>\n          {preview || value ? (\n            <div className=\"img-container\">\n              <img src={preview || value} />\n              <div className=\"controls-container\">\n                <label>\n                  <div className=\"img-control\">\n                    <i className=\"icon icon-edit\" />\n                  </div>\n                  <input\n                    type=\"file\"\n                    accept=\"image/*\"\n                    onChange={(e) =>\n                      this.setState(\n                        { remove: false },\n                        this.setFile(e.target.files[0])\n                      )\n                    }\n                  />\n                </label>\n                <div\n                  className=\"img-control\"\n                  onClick={() =>\n                    this.setState(\n                      {\n                        file: null,\n                        preview: null,\n                        remove: true,\n                      },\n                      this.handleFileUpload\n                    )\n                  }\n                >\n                  <i className=\"icon icon-trash-2\" />\n                </div>\n              </div>\n            </div>\n          ) : (\n            <label>\n              <span>Choose image</span>\n              <input\n                type=\"file\"\n                accept=\"image/*\"\n                onChange={(e) =>\n                  this.setState(\n                    { remove: false },\n                    this.setFile(e.target.files[0])\n                  )\n                }\n              />\n            </label>\n          )}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default AvatarUpload;\n","import React, { Fragment } from \"react\";\nimport axios from \"axios\";\nimport Button from \"../../../Base/Button\";\nimport Input from \"../../../Base/Input\";\nimport AvatarUpload from \"../../../Base/AvatarUpload\";\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\n\nclass EditProfile extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      profilePicture: \"\",\n      fullName: \"\",\n      contactNumber: \"\",\n      emailAddress: \"\",\n      address: \"\",\n      permissions: \"\",\n      errorMessage: \"\",\n      formSubmit: false,\n      removeProfilePicture: false,\n      showMiniModal: false,\n      hideIcon: null,\n      modalMessage: null,\n    };\n  }\n\n  componentDidMount() {\n    this.getData();\n  }\n\n  getData = () => {\n    const {\n      ProfilePicture,\n      FullName,\n      ContactNumber,\n      EmailAddress,\n      Address,\n      Permissions,\n    } = this.props.data;\n    this.setState({\n      profilePicture:\n        (ProfilePicture && ProfilePicture.value && ProfilePicture.value.src) ||\n        null,\n      fullName: FullName.value,\n      contactNumber: ContactNumber.value,\n      emailAddress: EmailAddress.value,\n      address: Address.value,\n      permissions: (Permissions && Permissions.value) || \"\",\n    });\n  };\n\n  saveData = async () => {\n    const {\n      profilePicture,\n      fullName,\n      contactNumber,\n      address,\n      removeProfilePicture,\n    } = this.state;\n    this.setState({ formSubmit: true });\n\n    if (fullName && contactNumber && address) {\n      const formData = new FormData();\n      const antiForgeryToken = this.props.antiForgeryToken;\n      formData.append(\"ProfilePicture\", profilePicture);\n      formData.append(\"FullName\", fullName);\n      formData.append(\"ContactNumber\", contactNumber);\n      formData.append(\"Address\", address);\n      formData.append(\"RemoveProfilePicture\", removeProfilePicture);\n      if(antiForgeryToken) {\n        formData.append(antiForgeryToken.name, antiForgeryToken.value);\n      } \n\n      const url = \"/api/sitecore/account/SaveUserProfile\";\n\n      try {\n        let response = await axios({\n          method: \"POST\",\n          url,\n          data: formData,\n        });\n\n        if (response && response.data) {\n          if (response.data.IsSuccess && response.data.IsSuccess.value) {\n            this.setState({\n              modalMessage: \"Update profile successful.\",\n              showMiniModal: true,\n              hideIcon: false,\n              errorMessage: \"\",\n            });\n            this.props.refresh(true);\n          } else {\n            this.setState({\n              modalMessage: response.data.Message.value,\n              showMiniModal: true,\n              hideIcon: true,\n              errorMessage: response.data.Message.value,\n            });\n          }\n        } else {\n          this.setState({\n            modalMessage: \"Update profile failed.\",\n            showMiniModal: true,\n            hideIcon: true,\n            errorMessage: \"Update profile failed.\",\n          });\n        }\n      } catch (e) {\n        console.log(e);\n\n        this.setState({\n          modalMessage: \"Update profile failed.\",\n          hideIcon: true,\n          showMiniModal: true,\n        });\n      }\n    } else {\n      this.setState({\n        modalMessage: \"Please fill out all fields.\",\n        hideIcon: true,\n        showMiniModal: true,\n        errorMessage: \"Please fill out all fields.\",\n      });\n    }\n    this.setState({ formSubmit: false });\n  };\n\n  renderMiniModal = () => {\n    const { modalMessage, hideIcon } = this.state;\n    return (\n      <SuccessMessage\n        label={modalMessage}\n        hideIcon={hideIcon}\n        handleShowSuccess={(showMiniModal) => {\n          this.setState({\n            showMiniModal,\n          });\n        }}\n      />\n    );\n  };\n\n  render() {\n    const {\n      profilePicture,\n      fullName,\n      contactNumber,\n      emailAddress,\n      address,\n      errorMessage,\n      formSubmit,\n      showMiniModal,\n    } = this.state;\n    const { show } = this.props;\n    return (\n      <Fragment>\n        {showMiniModal && this.renderMiniModal()}\n        <div className=\"btn btn--tertiary profile-btn d-flex d-lg-none\">\n          <i className=\"icon icon-close\" onClick={() => show()} />\n          <div className=\"d-flex d-lg-none\">\n            <Button color=\"secondary\" onClick={() => show()}>\n              Cancel\n            </Button>\n            <Button\n              color=\"primary\"\n              onClick={() => this.saveData()}\n              disabled={formSubmit}\n            >\n              Save\n            </Button>\n          </div>\n        </div>\n        <div className=\"editprofile-container\">\n          <div className=\"title\">Edit profile</div>\n          <div className=\"form-container clearfix\">\n            <div className=\"subtitle\">Profile picture</div>\n            <AvatarUpload\n              value={profilePicture}\n              handleFileUpload={(profilePicture) =>\n                this.setState({ profilePicture })\n              }\n              removeImage={(removeProfilePicture) =>\n                this.setState({ removeProfilePicture })\n              }\n            />\n            <div className=\"subtitle\">Name</div>\n            <Input\n              id=\"EP_Name\"\n              placeholder=\" \"\n              type=\"text\"\n              required\n              value={fullName}\n              onInputChange={(fullName) =>\n                this.setState({ fullName, errorMessage: \"\" })\n              }\n              blank={errorMessage && !fullName ? \"error\" : \"\"}\n            />\n            <div className=\"subtitle\">Email address</div>\n            <Input\n              id=\"EP_Email\"\n              placeholder=\" \"\n              type=\"email\"\n              disabled\n              required\n              value={emailAddress}\n              onInputChange={(emailAddress) => this.setState({ emailAddress })}\n            />\n            <div className=\"subtitle\">Contact number</div>\n            <Input\n              id=\"EP_Contact\"\n              placeholder=\" \"\n              type=\"tel\"\n              required\n              value={contactNumber}\n              onInputChange={(contactNumber) =>\n                this.setState({ contactNumber, errorMessage: \"\" })\n              }\n              blank={errorMessage && !contactNumber ? \"error\" : \"\"}\n            />\n            <div className=\"subtitle\">Address</div>\n            <Input\n              id=\"EP_Address\"\n              placeholder=\" \"\n              type=\"text\"\n              required\n              value={address}\n              onInputChange={(address) =>\n                this.setState({ address, errorMessage: \"\" })\n              }\n              blank={errorMessage && !address ? \"error\" : \"\"}\n            />\n            <div className=\"float-right d-none d-lg-flex\">\n              <Button color=\"secondary\" onClick={() => show()}>\n                Cancel\n              </Button>\n              <Button\n                color=\"primary\"\n                onClick={() => this.saveData()}\n                disabled={formSubmit}\n              >\n                Save\n              </Button>\n            </div>\n          </div>\n        </div>\n      </Fragment>\n    );\n  }\n}\n\nexport default EditProfile;\n","import React, { Fragment } from \"react\";\nimport axios from \"axios\";\nimport Button from \"../../../Base/Button\";\nimport Input from \"../../../Base/Input\";\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\n\nclass UpdatePassword extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      newPass: \"\",\n      confNewPass: \"\",\n      browser: \"\",\n      formSubmit: false,\n      showMiniModal: false,\n      hideIcon: null,\n      modalMessage: null,\n    };\n  }\n\n  sendChangePassword = async () => {\n    const { newPass, confNewPass } = this.state;\n    this.setState({\n      formSubmit: true,\n    });\n\n    if (newPass === confNewPass) {\n      const formData = new FormData();\n      const antiForgeryToken = this.props.antiForgeryToken;\n      formData.append(\"password\", newPass);\n\n      if(antiForgeryToken) {\n        formData.append(antiForgeryToken.name, antiForgeryToken.value);\n\n      }\n\n      const url = \"/api/sitecore/account/updatepassword\";\n\n      try {\n        let response = await axios({\n          method: \"POST\",\n          url,\n          data: formData,\n        });\n\n        if (response) {\n          this.setState({\n            modalMessage: \"Password reset successful.\",\n            showMiniModal: true,\n            hideIcon: false,\n          });\n        } else {\n          this.setState({\n            modalMessage: \"Password reset failed.\",\n            showMiniModal: true,\n            hideIcon: true,\n          });\n        }\n      } catch (e) {\n        this.setState({\n          modalMessage: \"Password reset failed.\",\n          showMiniModal: true,\n          hideIcon: true,\n        });\n        console.log(e);\n      }\n    } else {\n      this.setState({\n        modalMessage: \"Password does not match.\",\n        showMiniModal: true,\n        hideIcon: true,\n      });\n    }\n    this.setState({ formSubmit: false });\n  };\n\n  renderMiniModal = () => {\n    const { modalMessage, hideIcon } = this.state;\n    return (\n      <SuccessMessage\n        label={modalMessage}\n        hideIcon={hideIcon}\n        handleShowSuccess={(showMiniModal) => {\n          this.setState({\n            showMiniModal,\n          });\n        }}\n      />\n    );\n  };\n\n  render() {\n    const { newPass, confNewPass, showMiniModal } = this.state;\n    let { show } = this.props;\n    return (\n      <Fragment>\n        {showMiniModal && this.renderMiniModal()}\n\n        <div className=\"btn btn--tertiary profile-btn d-flex d-lg-none\">\n          <i className=\"icon icon-close\" onClick={() => show()} />\n          <div className=\"d-flex d-lg-none\">\n            <Button color=\"secondary\" onClick={() => show()}>\n              Cancel\n            </Button>\n            <Button\n              color=\"primary\"\n              disabled={newPass && confNewPass ? false : true}\n              onClick={() => this.sendChangePassword()}\n            >\n              Save\n            </Button>\n          </div>\n        </div>\n        <div className=\"updatepassword-container\">\n          <i className=\"icon icon-lock\" />\n          <div className=\"form-container clearfix\">\n            <div className=\"title\">\n              <i className=\"icon icon-lock\" />\n              Change password\n            </div>\n            <input type=\"password\" className=\"fakePasswordField d-none\" />\n            <div className=\"subtitle\">New password</div>\n            <Input\n              id=\"new-pw-1\"\n              placeholder=\" \"\n              type=\"password\"\n              required\n              autoComplete=\"new-password\"\n              onInputChange={(newPass) => this.setState({ newPass })}\n            />\n            <div className=\"subtitle\">Confirm password</div>\n            <Input\n              placeholder=\" \"\n              type=\"password\"\n              required\n              autoComplete=\"new-password\"\n              onInputChange={(confNewPass) => this.setState({ confNewPass })}\n            />\n            <div className=\"float-right d-none d-lg-flex\">\n              <Button color=\"secondary\" onClick={() => show()}>\n                Cancel\n              </Button>\n              <Button\n                color=\"primary\"\n                disabled={newPass && confNewPass ? false : true}\n                onClick={() => this.sendChangePassword()}\n              >\n                Save\n              </Button>\n            </div>\n          </div>\n        </div>\n      </Fragment>\n    );\n  }\n}\n\nexport default UpdatePassword;\n","import { Text } from \"@sitecore-jss/sitecore-jss-react\";\r\nimport React from \"react\";\r\nimport Button from \"../Button\";\r\n\r\nconst Card = (props) => {\r\n  const {\r\n    className,\r\n    title,\r\n    content = null,\r\n    textContent,\r\n    btnText,\r\n    btnDisabled,\r\n    btnOnClick,\r\n  } = props;\r\n  return (\r\n    <div className={`card-wrapper ${className}`}>\r\n      <div className=\"h2-bold\">{title}</div>\r\n      <div className=\"card-content\">\r\n        {textContent && textContent.value && (\r\n          <div>\r\n            <Text field={textContent} />\r\n          </div>\r\n        )}\r\n        {content}\r\n        <div className=\"card-button\">\r\n          <Button\r\n            color=\"secondary\"\r\n            size=\"small-full\"\r\n            disabled={btnDisabled}\r\n            onClick={btnOnClick}\r\n          >\r\n            {btnText}\r\n          </Button>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  );\r\n};\r\n\r\nexport default Card;\r\n","import React, { Component } from \"react\";\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\nimport DefaultUserLogo from \"../../../../assets/icons/png/author.png\";\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\nimport EditProfile from \"../../../Modules/Profile/EditProfile\";\nimport UpdatePassword from \"../../../Modules/Profile/UpdatePassword\";\nimport Popup from \"../../../Base/Popup\";\nimport Card from \"../../../Base/Card\";\nimport {\n  disableBodyScroll,\n  enableBodyScroll,\n} from \"../../../../helper/ScrollHelper\";\nimport PageHeader from \"../../../Base/PageHeader\";\n\nclass FeatureRetailerPortalProfile extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      showEditProfileModal: false,\n      showChangePasswordModal: false,\n      willRefreshPage: false,\n    };\n  }\n\n  componentDidMount() {\n    if (sessionStorage.getItem(\"setPassword\") === \"true\") {\n      this.setState({ showChangePasswordModal: true }, () => {\n        sessionStorage.setItem(\"setPassword\", false);\n        sessionStorage.setItem(\"promptPassword\", \"done\");\n      });\n    }\n  }\n\n  renderChangePasswordModal = () => {\n    disableBodyScroll();\n    return (\n      <Popup>\n        <UpdatePassword\n          antiForgeryToken={this.props.fields.antiForgeryToken}\n          show={(showChangePasswordModal) =>\n            this.setState({ showChangePasswordModal }, () => enableBodyScroll())\n          }\n        />\n      </Popup>\n    );\n  };\n\n  renderEditProfileModal = () => {\n    disableBodyScroll();\n    const { willRefreshPage } = this.state;\n    return (\n      <Popup\n        type=\"small\"\n        title=\"Edit profile\"\n        show={(showEditProfileModal) =>\n          this.setState({ showEditProfileModal }, () => {\n            enableBodyScroll();\n            willRefreshPage && window.location.reload();\n          })\n        }\n      >\n        <EditProfile\n          data={this.props.fields}\n          antiForgeryToken={this.props.fields.antiForgeryToken}\n          show={(showEditProfileModal) =>\n            this.setState({ showEditProfileModal }, () => {\n              enableBodyScroll();\n              willRefreshPage && window.location.reload();\n            })\n          }\n          refresh={(willRefreshPage) => this.setState({ willRefreshPage })}\n        />\n      </Popup>\n    );\n  };\n\n  render() {\n    const {\n      ProfilePicture: thumbnail,\n      FullName,\n      ContactNumber,\n      EmailAddress,\n      Address,\n      Permissions,\n    } = this.props.fields;\n\n    const renderDetails = (\n      <React.Fragment>\n        <div className=\"user-thumbnail\">\n          {thumbnail && thumbnail.value && thumbnail.value.src ? (\n            <img\n              alt=\"icon\"\n              src={logoPlaceholder}\n              data-src={thumbnail.value.src}\n              className=\"lazyload\"\n            />\n          ) : (\n            <img src={DefaultUserLogo} alt=\"retailer\" />\n          )}\n        </div>\n        <div className=\"user-details\">\n          <div>\n            <Text field={FullName} />\n          </div>\n          <div>\n            <Text field={ContactNumber} />\n          </div>\n          <div className=\"user-email\">\n            <Text field={EmailAddress} />\n          </div>\n          <div>\n            <Text field={Address} />\n          </div>\n        </div>\n      </React.Fragment>\n    );\n\n    return (\n      <div className=\"profile-wrapper\">\n        {this.state.showEditProfileModal ? this.renderEditProfileModal() : null}\n        {this.state.showChangePasswordModal\n          ? this.renderChangePasswordModal()\n          : null}\n        <PageHeader title={{ value: \"Your profile\" }} />\n        <Card\n          className=\"card-dt\"\n          title=\"Contact details\"\n          content={renderDetails}\n          btnText=\"Edit\"\n          btnOnClick={() => this.setState({ showEditProfileModal: true })}\n        />\n        <Card\n          className=\"card-pw\"\n          title=\"Password\"\n          textContent={{ value: \"••••••••••••\" }}\n          btnText=\"Change password\"\n          btnOnClick={() => this.setState({ showChangePasswordModal: true })}\n        />\n        {Permissions && Permissions.value && (\n          <Card\n            className=\"card-ps\"\n            title=\"Permissions\"\n            textContent={Permissions}\n            btnText=\"Can't edit\"\n            btnDisabled\n          />\n        )}\n      </div>\n    );\n  }\n}\nexport default FeatureRetailerPortalProfile;\n","import React from \"react\";\nimport axios from \"axios\";\nimport Loadable from \"react-loadable\";\nimport TagManager from \"react-gtm-module\";\nimport ImageUpload from \"../../../Base/ImageUpload\";\nimport FormFile from \"../../../Base/FormFile\";\nimport DropDown from \"../../../Base/DropDown\";\nimport FormInput from \"../../../Base/FormInput\";\nimport FormInputMultiple from \"../../../Base/FormInputMultiple\";\nimport FormDate from \"../../../Base/FormDate\";\nimport FormCheckbox from \"../../../Base/FormCheckbox\";\nimport FormListbox from \"../../../Base/FormListbox\";\nimport Button from \"../../../Base/Button\";\nimport Modal from \"../../../Base/Modal\";\nimport { get } from \"lodash\";\nimport {\n  disableBodyScroll,\n  enableBodyScroll,\n} from \"../../../../helper/ScrollHelper\";\nimport {\n  validate,\n  setPromotionData,\n  buildFormData,\n  formDataFields,\n} from \"../../../../helper/PromotionHelper\";\nimport { getUrlParameter } from \"../../../../helper/UrlHelper\";\nimport bitmap from \"../../../../assets/icons/png/bitmap@3x.png\";\nimport { getCentreStores } from \"../../../../api/PromotionAPI\";\n\nconst RichTextEditor = Loadable({\n  loader: () => import(\"../../../Base/RichTextEditor\"),\n  loading: () => null,\n});\n\nclass FeatureRetailerPortalPromotions extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      mode: \"new\",\n      stores: null,\n      retailers: null,\n      categories: null,\n      promotionType: \"\",\n      showModal: false,\n      modalContent: null,\n      formError: {},\n      storeList: null,\n      centreStoreList: null,\n      holidays: null,\n      specialHolidayListbox: null,\n      formData: { ...formDataFields },\n      componentReady: false,\n      selectAllStores: false,\n      status: \"dirty\",\n      redirectUrl: \"\",\n      retailerId: \"\",\n    };\n  }\n  componentDidMount() {\n    this.setState({\n      type: getUrlParameter(\"type\"),\n      centre: getUrlParameter(\"centre\"),\n      componentReady: true,\n    });\n    this.getData();\n    let retailerList = this.setRetailerList(this.props.fields.RetailerList);\n    if (!getUrlParameter(\"itemId\") && retailerList && retailerList.length) {\n      this.getCentreStoreList(retailerList[0].value);\n    }\n  }\n\n  getData = () => {\n    const {\n      RetailerList,\n      Categories,\n      Promotion,\n      RedirectUrl,\n      GlobalSpecialHoliday,\n    } = this.props.fields;\n    let retailerList = this.setRetailerList(RetailerList);\n    let categoryList = this.setCategoryList(Categories);\n    let holidayList = this.setHolidayList(GlobalSpecialHoliday);\n    if (getUrlParameter(\"itemId\")) {\n      // let promotionData = setPromotionData(Promotion[0].fields);\n      let promotionData = setPromotionData(Promotion.fields);\n      this.setState({\n        mode: \"edit\",\n        retailers: retailerList,\n        categories: categoryList,\n        formData: { ...this.state.formData, ...promotionData },\n        redirectUrl: RedirectUrl.value,\n        holidays: holidayList,\n      });\n    } else {\n      this.setState({\n        retailers: retailerList,\n        categories: categoryList,\n        redirectUrl: RedirectUrl && RedirectUrl.value ? RedirectUrl.value : \"\",\n        holidays: holidayList,\n      });\n    }\n  };\n\n  setRetailerList = (list) => {\n    let temp = [];\n    list.forEach((el) =>\n      temp.push({\n        name: el.fields.RetailerName.value,\n        value: el.fields.RetailerId.value,\n      })\n    );\n    return temp;\n  };\n\n  setCategoryList = (list) => {\n    let temp = [];\n    list.forEach((el) =>\n      temp.push({\n        name: el.fields.CategoryName.value,\n        value: el.fields.CategoryId.value,\n      })\n    );\n    return temp;\n  };\n\n  setStoreList = (list) => {\n    let temp = [];\n    list.forEach((el) =>\n      temp.push({\n        name: el.fields.CategoryName.value,\n        value: el.fields.CategoryId.value,\n      })\n    );\n    return temp;\n  };\n\n  setHolidayList = (list) => {\n    let temp = [];\n    if (list && list.length) {\n      list.forEach((el) =>\n        temp.push({\n          name: el.fields.HolidayName.value,\n          value: el.fields.HolidayId.value,\n        })\n      );\n    }\n    return temp;\n  };\n  handleListbox = (id, field) => {\n    const { formData } = this.state;\n    let options;\n    let selected = [];\n    if (document) {\n      options = document.querySelectorAll(`#${id} option:checked`);\n      if (options) {\n        for (let i = 0; i < options.length; i++) {\n          selected.push(options[i].value);\n        }\n      }\n    }\n    this.setState({\n      formData: {\n        ...formData,\n        [field]: selected,\n      },\n    });\n  };\n\n  handleSelect = (isSelect, field, options) => {\n    const { formData } = this.state;\n    this.setState({\n      formData: {\n        ...formData,\n        [field]: isSelect ? options.map((el) => el.value) : [],\n      },\n    });\n  };\n\n  handleInputCheckbox = (value) => {\n    const { formData } = this.state;\n    if (formData.selectedCategories.indexOf(value) > -1) {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedCategories: formData.selectedCategories.filter(\n            (el) => el !== value\n          ),\n        },\n      });\n    } else {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedCategories: [...formData.selectedCategories, value],\n        },\n      });\n    }\n  };\n\n  handleFormUpdate = (value) => {\n    this.setState({ formData: { ...this.state.formData, ...value } });\n  };\n\n  renderModal = () => {\n    disableBodyScroll();\n    const { mode, status, redirectUrl } = this.state;\n    const { title, body, cta } = this.state.modalContent;\n    return (\n      <Modal\n        type=\"small\"\n        title={title}\n        show={() => {\n          if (status === \"submitted\" || status === \"saved\") {\n            window.location.href = `${redirectUrl}`;\n          } else {\n            this.setState({ showModal: false, modalContent: null }, () =>\n              enableBodyScroll()\n            );\n          }\n        }}\n      >\n        <div className=\"modal-body\">{body}</div>\n        {(mode === \"edit\" || status === \"submitted\") && cta && (\n          <div className=\"cta modal-controls-container\">\n            <Button\n              color=\"primary\"\n              onClick={() => (window.location.href = cta.url)}\n            >\n              {cta.label}\n            </Button>\n          </div>\n        )}\n        {mode === \"new\" && status === \"saved\" && (\n          <div className=\"modal-controls-container\">\n            <Button\n              color=\"secondary\"\n              onClick={() => (window.location.href = `${redirectUrl}`)}\n            >\n              CANCEL\n            </Button>\n            <Button\n              disabled={false}\n              color=\"primary\"\n              onClick={() => this.submitForm()}\n            >\n              SUBMIT\n            </Button>\n          </div>\n        )}\n        {mode === \"new\" && status === \"dirty\" && (\n          <div className=\"modal-controls-container\">\n            <Button\n              color=\"secondary\"\n              onClick={() =>\n                this.setState({ showModal: false, modalContent: null }, () =>\n                  enableBodyScroll()\n                )\n              }\n            >\n              CLOSE\n            </Button>\n          </div>\n        )}\n      </Modal>\n    );\n  };\n\n  validateForm = () => {\n    let formError = validate(\n      this.state.formData,\n      this.state.mode === \"edit\" ? [\"selectedRetailer\"] : []\n    );\n    let errorMessage = {\n      title: \"Form Saving Failed\",\n      body: \"Required fields are missing\",\n    };\n    if (Object.entries(formError).length !== 0) {\n      this.setState({ formError, showModal: true, modalContent: errorMessage });\n    } else {\n      this.saveForm();\n    }\n  };\n\n  extractItemIds = (centreList) => {\n    let itemIds = [];\n    centreList.map((center) => {\n      center.Promotions.map((promotion) => {\n        itemIds.push(promotion.ItemId.value);\n      });\n    });\n    return itemIds;\n  };\n\n  buildPreviewUrls = (centreList) => {\n    let preview = \"\";\n    preview = centreList.map((centre) => {\n      let centrePreview = [];\n      centrePreview = centre.Promotions.map((promotion) => {\n        return (\n          <div className=\"preview-link\">\n            <i className={`icon icon-external`} />\n            <a href={promotion.PreviewUrl.value} target=\"_blank\">\n              {promotion.Store.value}\n            </a>\n          </div>\n        );\n      });\n      TagManager.dataLayer({\n        dataLayer: {\n          event: \"createdPromotions\",\n          centreName: centre.Centre.value,\n        },\n        dataLayerName: \"dataLayer\",\n      });\n      return (\n        <div className=\"col-3\">\n          <div className=\"centre-name\">{centre.Centre.value}</div>\n          <div className=\"centre-preview-list\">{centrePreview}</div>\n        </div>\n      );\n    });\n    return <div className=\"row\">{preview}</div>;\n  };\n\n  saveForm = async () => {\n    const { formData, mode, type } = this.state;\n    var timezoneId = new Date().getTimezoneOffset();\n    const url = \"/api/sitecore/promotion/SavePromotion\";\n    let data = buildFormData({\n      ...formData,\n      timeZoneId: timezoneId,\n    });\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        params: {\n          type,\n          // centre,\n          ...(mode === \"edit\" ? { itemId: `&itemId=${formData.itemId}` } : \"\"),\n        },\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n      });\n\n      if (response) {\n        if (response.data.IsSuccess.value && mode === \"new\") {\n          let successMessage = {\n            title: `${type} drafts have been created`,\n            body: this.buildPreviewUrls(response.data.PromotionList),\n          };\n          const itemIds = this.extractItemIds(response.data.PromotionList);\n          this.setState({\n            showModal: true,\n            modalContent: successMessage,\n            formData: { ...formData, itemIds },\n            status: \"saved\",\n          });\n        } else if (response.data.IsSuccess.value && mode === \"edit\") {\n          let successMessage = {\n            title: \"Form Saved\",\n            body: response.data.Message.value,\n          };\n          const promotion = response.data.PromotionList[0].Promotions[0];\n          this.setState(\n            {\n              showModal: true,\n              modalContent: successMessage,\n              formData: { ...formData, itemIds: [`${promotion.ItemId.value}`] },\n            },\n            () => {\n              const win = window.open(promotion.PreviewUrl.value, \"_blank\");\n              if (win != null) {\n                win.focus();\n              }\n            }\n          );\n        } else {\n          let errorMessage = {\n            title: \"Form Not Saved\",\n            body: response.data.Message.value,\n          };\n\n          this.setState({\n            showModal: true,\n            modalContent: errorMessage,\n          });\n        }\n      }\n    } catch (e) {\n      console.log(e.response.statusText);\n    }\n  };\n\n  submitForm = async () => {\n    const { formData, type, mode } = this.state;\n    const url = \"/api/sitecore/promotion/SubmitPromotion\";\n    let data = buildFormData({\n      itemIds: mode === \"edit\" ? [`${formData.itemId}`] : formData.itemIds,\n    });\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n      });\n\n      if (response) {\n        if (response.data.IsSuccess.value) {\n          let successMessage = {\n            title: \"Form Submitted\",\n            body: response.data.Message.value,\n            cta: {\n              label: `${type} list`,\n              url: response.data.RedirectUrl.value,\n            },\n          };\n          this.setState({\n            showModal: true,\n            modalContent: successMessage,\n            status: \"submitted\",\n          });\n        } else {\n          let errorMessage = {\n            title: \"Form Not Submitted\",\n            body: response.data.Message.value,\n          };\n\n          this.setState({\n            showModal: true,\n            modalContent: errorMessage,\n          });\n        }\n      }\n    } catch (e) {\n      console.log(e.response.statusText);\n    }\n  };\n\n  getCentreStoreList = async (retailerId) => {\n    let response = await getCentreStores({ retailerId });\n    if (response.status === 200 && response.data) {\n      // const ImageGallery = get(response.data, \"ImageGallery\", []);\n      this.setState({\n        centreStoreList: get(response.data, \"CentreStoreList\", []),\n        retailerId,\n      });\n    } else {\n      alert(\"Getting centre stores data failed\");\n    }\n  };\n\n  handleStoreListCheckbox = (value) => {\n    const { formData, selectAllStores, centreStoreList } = this.state;\n    if (value === \"0\") {\n      let allStores = [];\n      centreStoreList.map((centre) => {\n        centre.StoreList.map((store) => {\n          allStores.push(store.StoreItemId.value);\n        });\n      });\n\n      this.setState({\n        selectAllStores: !selectAllStores,\n        formData: {\n          ...formData,\n          selectedStores: !selectAllStores ? allStores : [],\n        },\n      });\n    } else if (formData.selectedStores.indexOf(value) > -1) {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedStores: formData.selectedStores.filter((el) => el !== value),\n        },\n      });\n    } else {\n      this.setState({\n        formData: {\n          ...formData,\n          selectedStores: [...formData.selectedStores, value],\n        },\n      });\n    }\n  };\n\n  buildCentreStoreList = (param) => {\n    // const cetnreStoreList = getCentreStoreList\n    const { formData, centreStoreList, selectAllStores } = this.state;\n    if (centreStoreList && centreStoreList.length) {\n      return (\n        <div className=\"form-stores\">\n          <div className=\"form-label\">Multiple Stores</div>\n          <div className=\"content\">\n            <div className=\"row line\">\n              <div className=\"col-3\">\n                <FormCheckbox\n                  // key={`store-${store.StoreItemId.value}`}\n                  value=\"0\"\n                  label=\"Select All\"\n                  checked={selectAllStores}\n                  onCheckboxChange={(value) =>\n                    this.handleStoreListCheckbox(value)\n                  }\n                />\n              </div>\n            </div>\n            <div className=\"row\">\n              {centreStoreList.map((centre, index) => {\n                return (\n                  <div className=\"col-3\">\n                    <div className=\"form-label\">{centre.CentreName.value}</div>\n                    {centre.StoreList.map((store) => {\n                      return (\n                        <FormCheckbox\n                          // key={`store-${store.StoreItemId.value}`}\n                          value={store.StoreItemId.value}\n                          label={store.StoreName.value}\n                          // checked={false}\n                          checked={\n                            formData.selectedStores.indexOf(\n                              store.StoreItemId.value\n                            ) > -1\n                          }\n                          // onCheckboxChange={value => this.getCentreStoreList(value)}\n                          onCheckboxChange={(value) =>\n                            this.handleStoreListCheckbox(value)\n                          }\n                        />\n                      );\n                    })}\n                  </div>\n                );\n              })}\n            </div>\n          </div>\n        </div>\n      );\n    }\n  };\n\n  render() {\n    const {\n      mode,\n      formError,\n      formData,\n      retailers,\n      categories,\n      type,\n      showModal,\n      componentReady,\n      centreStoreList,\n      redirectUrl,\n      holidays,\n    } = this.state;\n\n    if (!retailers) {\n      return null;\n    }\n\n    return (\n      <div className=\"promotion-container\">\n        {showModal && this.renderModal()}\n        <div className=\"body-section-title\">\n          {type\n            ? mode === \"new\"\n              ? `Create an ${type}`\n              : `Update an ${type}`\n            : \"\"}\n        </div>\n        {mode === \"new\" && (\n          <div className=\"form-type-wrapper d-none\">\n            <DropDown\n              theme=\"light\"\n              options={retailers}\n              error={formError.selectedRetailer}\n              defaultSelected={retailers[0].name}\n              // defaultSelected=\"Select Retailer\"\n              handleSelectionChange={(selectedRetailerName) => {\n                this.getCentreStoreList(\n                  retailers.filter((el) => el.name === selectedRetailerName)[0]\n                    .value\n                );\n              }}\n            />\n          </div>\n        )}\n\n        {centreStoreList && this.buildCentreStoreList(centreStoreList)}\n        <div className=\"form__container\">\n          <FormInput\n            title\n            type=\"text\"\n            placeholder=\"Please add a promotion name.\"\n            label=\"Promotion Name\"\n            value={formData.promotionName}\n            required\n            error={formError.promotionName}\n            onInputChange={promotionName =>\n              this.handleFormUpdate({ promotionName })\n            }\n          />\n        </div>\n        <div className=\"form-images-container\">\n          <div className=\"hero-wrapper\">\n            <div className=\"form-label\">\n              Hero Image<span>*</span>\n            </div>\n            <ImageUpload\n              type=\"hero\"\n              labelOne=\"*Images must be a min of \"\n              labelTwo=\"1920x1080 px \"\n              labelThree=\"(16:9 ratio)\"\n              placeholder={bitmap}\n              error={formError.heroImage}\n              value={formData.heroImage}\n              handleFileUpload={(heroImage, errorMessage) =>\n                this.handleFormUpdate({ heroImage })\n              }\n            />\n            {/* <div className=\"form-subtext\">\n              *Please do not use images that contain text\n            </div> */}\n          </div>\n          <div className=\"thumbnail-wrapper\">\n            <div className=\"form-label\">Thumbnail Image</div>\n            <ImageUpload\n              type=\"thumbnail\"\n              labelOne=\"*Images must be a min of \"\n              labelTwo=\"800x800 px \"\n              labelThree=\"(1:1 ratio)\"\n              placeholder={bitmap}\n              error={formError.thumbnail}\n              value={formData.thumbnail}\n              handleFileUpload={(thumbnail, errorMessage) =>\n                this.handleFormUpdate({ thumbnail })\n              }\n            />\n          </div>\n        </div>\n        {/* <FormInput\n          type=\"text\"\n          placeholder=\"Please add a category tag.\"\n          label=\"Category Tag\"\n          value={formData.categoryTag}\n          error={formError.categoryTag}\n          onInputChange={categoryTag => this.handleFormUpdate({ categoryTag })}\n        /> */}\n\n        {categories && categories.length ? (\n          <FormListbox\n            label=\"Category\"\n            id=\"LB_Cat\"\n            required\n            error={formError.selectedCategories}\n            options={categories}\n            field=\"selectedCategories\"\n            selected={formData.selectedCategories}\n            hint=\"Press [ctrl] + click to select multiple\"\n            handleListbox={(id, field) => this.handleListbox(id, field)}\n            handleSelect={(isSelect, field, options) =>\n              this.handleSelect(isSelect, field, options)\n            }\n          />\n        ) : (\n            \"\"\n          )}\n        {holidays && holidays.length ? (\n          <FormListbox\n            label=\"Special Promotions\"\n            id=\"LB_SH\"\n            options={holidays}\n            field=\"selectedSpecialPromotion\"\n            selected={formData.selectedSpecialPromotion}\n            hint=\"Press [ctrl] + click to select multiple\"\n            handleListbox={(id, field) => this.handleListbox(id, field)}\n            handleSelect={(isSelect, field) =>\n              this.handleSelect(isSelect, field, holidays)\n            }\n          />\n        ) : (\n            \"\"\n          )}\n\n        <FormInputMultiple\n          label=\"Subheading\"\n          required\n          value={formData.summary}\n          maxLength={120}\n          error={formError.summary}\n          onInputChange={(summary) => this.handleFormUpdate({ summary })}\n        />\n\n        {type && type.toLowerCase().indexOf(\"offer\") !== -1 && (\n          <FormInput\n            type=\"text\"\n            placeholder=\"E.g. 50% OFF\"\n            label=\"Offer Highlight\"\n            value={formData.offerHighlight}\n            maxLength={7}\n            onInputChange={(offerHighlight) =>\n              this.handleFormUpdate({ offerHighlight })\n            }\n          />\n        )}\n\n        <div className={`form-group form__date--container\n        ${(formError.startDate || formError.endDate) ? \"has-error\" : \"\"}\n        `}>\n          <div className=\"form__date--wrapper\">\n            <FormDate\n              required\n              label=\"Start Date\"\n              icon=\"calendar\"\n              placeholderText=\"MM/DD/YYYY\"\n              showTimeSelect\n              timeCaption=\"Time\"\n              timeFormat=\"HH:mm\"\n              timeIntervals={5}\n              dateFormat=\"d MMM yyyy - h:mmaa\"\n              value={formData.startDate}\n              error={formError.startDate}\n              selected={formData.startDate && new Date(formData.startDate)}\n              onChange={startDate => this.handleFormUpdate({ startDate })}\n            />\n            <div className=\"form__date--divider\"></div>\n            <FormDate\n              required\n              label=\"End Date\"\n              icon=\"calendar\"\n              placeholderText=\"MM/DD/YYYY\"\n              showTimeSelect\n              timeCaption=\"Time\"\n              timeFormat=\"HH:mm\"\n              timeIntervals={5}\n              dateFormat=\"d MMM yyyy - h:mmaa\"\n              value={formData.endDate}\n              error={formError.endDate}\n              selected={formData.endDate && new Date(formData.endDate)}\n              onChange={endDate => this.handleFormUpdate({ endDate })}\n            />\n          </div>\n          <div className=\"form__hint\">*Maximum of 31 days(1 month)</div>\n          {(formError.startDate || formError.endDate) &&\n            <div className=\"form__validation-message\">\n              {formError.startDate ? formError.startDate : formError.endDate ? formError.endDate : \"\"}\n            </div>\n          }\n        </div>\n\n        <FormInput\n          type=\"text\"\n          icon=\"calendar\"\n          placeholder=\"E.g. Every Mondays\"\n          label=\"Schedule\"\n          value={formData.schedule}\n          error={formError.schedule}\n          onInputChange={(schedule) => this.handleFormUpdate({ schedule })}\n        />\n\n        <div style={{ display: \"flex\" }}>\n          <FormInput\n            type=\"text\"\n            placeholder=\"HH:MM\"\n            label=\"Duration\"\n            icon=\"time\"\n            value={formData.duration}\n            onInputChange={(duration) => this.handleFormUpdate({ duration })}\n          />\n\n          <FormInput\n            type=\"text\"\n            placeholder=\"e.g. Number of seats\"\n            label=\"Capacity\"\n            icon=\"capacity\"\n            value={formData.capacity}\n            onInputChange={(capacity) => this.handleFormUpdate({ capacity })}\n          />\n        </div>\n\n        <FormInput\n          type=\"number\"\n          icon=\"price\"\n          placeholder=\"888.88\"\n          label=\"Price\"\n          currency\n          value={formData.price}\n          onInputChange={(price) => this.handleFormUpdate({ price })}\n        />\n\n        {componentReady && (\n          <RichTextEditor\n            required\n            label={\"Description\"}\n            initialValue={formData.description}\n            error={formError.description}\n            onInputChange={description =>\n              this.handleFormUpdate({ description })\n            }\n            retailerId={this.state.retailerId}\n          />\n        )}\n\n        <FormInput\n          type=\"text\"\n          placeholder=\"e.g. http://url-of-terms-and-conditions.com\"\n          label=\"T&C Link\"\n          value={formData.termsAndConditionsLink}\n          onInputChange={(termsAndConditionsLink) =>\n            this.handleFormUpdate({ termsAndConditionsLink })\n          }\n        />\n\n        <FormInput\n          type=\"text\"\n          placeholder=\"e.g. Please see Terms and Conditions by clicking on the link below\"\n          label=\"T&C Copy\"\n          value={formData.termsAndConditionsCopy}\n          onInputChange={(termsAndConditionsCopy) =>\n            this.handleFormUpdate({ termsAndConditionsCopy })\n          }\n        />\n        {/* {mode === \"edit\" && categories && ( */}\n\n        {/* {categories && (\n          <div className=\"form-linkcategories-container\">\n            <div className=\"form-label\">Link Categories</div>\n            <div className=\"category-list\">\n              {categories.map((item, index) => {\n                return (\n                  <FormCheckbox\n                    key={`checkboxId-${index}`}\n                    value={item.value}\n                    label={item.name}\n                    checked={\n                      formData.selectedCategories.indexOf(item.value) > -1\n                    }\n                    onCheckboxChange={value => this.handleInputCheckbox(value)}\n                  />\n                );\n              })}\n            </div>\n          </div>\n        )} */}\n\n        <div className=\"form-imagegallery-container\">\n          <div className=\"form-label\">Image Gallery</div>\n          <FormFile\n            icon=\"plus\"\n            label=\"Add Image\"\n            // value={[{ name: \"sample.png\" }]}\n            value={formData.imageGallery}\n            handleAttachments={(imageGallery, errorMessage) =>\n              this.handleFormUpdate({ imageGallery })\n            }\n          />\n        </div>\n\n        <div className=\"form-controls-container\">\n          {mode === \"new\" && (\n            <Button\n              color=\"secondary\"\n              onClick={() => (window.location.href = `${redirectUrl}`)}\n            >\n              CANCEL\n            </Button>\n          )}\n          <Button\n            size=\"medium\"\n            color={mode === \"edit\" ? \"secondary\" : \"primary\"}\n            onClick={() => this.validateForm()}\n          >\n            {mode === \"edit\" ? \"SAVE & PREVIEW\" : \"SAVE\"}\n          </Button>\n          {mode === \"edit\" && (\n            <Button\n              disabled={formData.itemId ? false : true}\n              color=\"primary\"\n              onClick={() => this.submitForm()}\n            >\n              SUBMIT\n            </Button>\n          )}\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalPromotions;\n","import React, { Component, Fragment } from \"react\";\r\n\r\n// Input [{name: value}]\r\n\r\nclass FormDropDown extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      show: false,\r\n      selected: props.defaultSelected,\r\n    };\r\n  }\r\n\r\n  handleToggle = (e) => {\r\n    e.target.focus();\r\n    this.setState({ show: !this.state.show });\r\n  };\r\n\r\n  handleBlur = () => {\r\n    if (this.state.show) {\r\n      setTimeout(() => {\r\n        this.setState({ show: !this.state.show });\r\n      }, 120);\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const {\r\n      theme,\r\n      error,\r\n      title,\r\n      icon,\r\n      options,\r\n      placeholder,\r\n      noOptionsMessage,\r\n    } = this.props;\r\n    const { selected, show } = this.state;\r\n    return (\r\n      <Fragment>\r\n        <div className=\"form-dropdown-container\">\r\n          {icon ? <i className={`icon icon-${icon}`} /> : \"\"}\r\n          {title ? <div className=\"title\">{title}</div> : \"\"}\r\n          <label\r\n            className={`arrow ${theme ? theme : \"\"} ${error ? \"error\" : \"\"}`}\r\n          >\r\n            <div className=\"dropdown-placeholder\">\r\n              <input\r\n                type=\"button\"\r\n                value={selected ? selected : placeholder}\r\n                className=\"dropdown-btn\"\r\n                onClick={(e) => this.handleToggle(e)}\r\n                // onBlur={e => this.handleBlur(e)}\r\n              />\r\n            </div>\r\n            <i className=\"icon icon-chevron-down\" />\r\n            <ul className={`dropdown-list ${show ? \"\" : \"d-none\"}`}>\r\n              {options && options.length ? (\r\n                options.map((item, index) => {\r\n                  return (\r\n                    <li\r\n                      key={`optionId${index}`}\r\n                      onClick={() => {\r\n                        this.setState({ selected: item.name }, () => {\r\n                          this.props.handleSelectionChange(item.name);\r\n                        });\r\n                      }}\r\n                    >\r\n                      <span>{item.name}</span>\r\n                    </li>\r\n                  );\r\n                })\r\n              ) : (\r\n                <li className=\"empty\">\r\n                  {noOptionsMessage ? noOptionsMessage : \"No store found\"}\r\n                </li>\r\n              )}\r\n            </ul>\r\n          </label>\r\n        </div>\r\n      </Fragment>\r\n    );\r\n  }\r\n}\r\n\r\nexport default FormDropDown;\r\n","import React from \"react\";\nimport axios from \"axios\";\nimport Loadable from \"react-loadable\";\nimport TagManager from \"react-gtm-module\";\nimport { TimePicker } from \"antd\";\nimport DropDown from \"../../../Base/DropDown\";\nimport ImageUpload from \"../../../Base/ImageUpload\";\nimport FormInput from \"../../../Base/FormInput\";\nimport FormDropDown from \"../../../Base/FormDropDown\";\nimport FormCheckbox from \"../../../Base/FormCheckbox\";\nimport FormFile from \"../../../Base/FormFile\";\nimport Button from \"../../../Base/Button\";\nimport { get } from \"lodash\";\nimport Modal from \"../../../Base/Modal\";\nimport { getStorefrontData } from \"../../../../api/StorefrontAPI\";\nimport bitmap from \"../../../../assets/icons/png/bitmap@3x.png\";\nimport { buildFormData } from \"../../../../helper/StorefrontHelper\";\nimport moment from \"moment\";\nimport \"antd/dist/antd.css\";\nimport {\n  disableBodyScroll,\n  enableBodyScroll,\n} from \"../../../../helper/ScrollHelper\";\n\nconst RichTextEditor = Loadable({\n  loader: () => import(\"../../../Base/RichTextEditor\"),\n  loading: () => null,\n});\n\nclass FeatureRetailerPortalStorefront extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      formData: {\n        StoreID: \"\",\n        Name: \"\",\n        StorefrontDescription: \"\",\n        ContactNumber: \"\",\n        MenuUrl: \"\",\n        OnlineBookingUrl: \"\",\n        BestParking: \"\",\n        AcceptsAfterPay: false,\n        AcceptsGiftCards: false,\n        IsKidsFriendly: false,\n        IsVegetarian: false,\n        RetailerName: \"\",\n        RetailerDescription: \"\",\n        Website: \"\",\n        Instagram: \"\",\n        Facebook: \"\",\n        LogoImage: null,\n        HeroImage: null,\n        ImageGallery: [],\n        ImageGalleryChecker: [],\n        MondayOpeningHours: \"\",\n        MondayClosingHours: \"\",\n        MondaySecondaryOpeningHours: \"\",\n        MondaySecondaryClosingHours: \"\",\n        MondayIsClosed: \"\",\n        TuesdayOpeningHours: \"\",\n        TuesdayClosingHours: \"\",\n        TuesdaySecondaryOpeningHours: \"\",\n        TuesdaySecondaryClosingHours: \"\",\n        TuesdayIsClosed: \"\",\n        WednesdayOpeningHours: \"\",\n        WednesdayClosingHours: \"\",\n        WednesdaySecondaryOpeningHours: \"\",\n        WednesdaySecondaryClosingHours: \"\",\n        WednesdayIsClosed: \"\",\n        ThursdayOpeningHours: \"\",\n        ThursdayClosingHours: \"\",\n        ThursdaySecondaryOpeningHours: \"\",\n        ThursdaySecondaryClosingHours: \"\",\n        ThursdayIsClosed: \"\",\n        FridayOpeningHours: \"\",\n        FridayClosingHours: \"\",\n        FridaySecondaryOpeningHours: \"\",\n        FridaySecondaryClosingHours: \"\",\n        FridayIsClosed: \"\",\n        SaturdayOpeningHours: \"\",\n        SaturdayClosingHours: \"\",\n        SaturdaySecondaryOpeningHours: \"\",\n        SaturdaySecondaryClosingHours: \"\",\n        SaturdayIsClosed: \"\",\n        SundayOpeningHours: \"\",\n        SundayClosingHours: \"\",\n        SundaySecondaryOpeningHours: \"\",\n        SundaySecondaryClosingHours: \"\",\n        SundayIsClosed: \"\",\n        StorefrontHeroImage: null,\n      },\n      StoreOpeningHours: \"\",\n      RetailerType: \"\",\n      formType: null,\n      componentReady: false,\n      selectedStoreName: \"Select a Store\",\n      storeList: [],\n      sourceList: [\n        { name: \"Store\", value: \"Store\" },\n        { name: \"Centre\", value: \"Centre\" },\n      ],\n      carparkList: null,\n      iconList: null,\n      selectedCarpark: \"Select an option\",\n      selectedIcon: \"Select an option\",\n      showModal: false,\n      modalContent: null,\n    };\n  }\n\n  componentDidMount() {\n    const { Stores, CarParkList } = this.props.fields;\n    let selectedStoreName = null;\n    let filterResult = null;\n    let selectedStoreId = null;\n    if (typeof Storage !== \"undefined\") {\n      selectedStoreId = sessionStorage.getItem(\"storeId\");\n    }\n    let storeList = this.setStoreList(Stores);\n    let parkList = this.setCarparkList(CarParkList);\n    if (selectedStoreId) {\n      if (\n        typeof Storage !== \"undefined\" &&\n        sessionStorage.getItem(\"global\") === \"true\"\n      ) {\n        selectedStoreName = \"All\";\n        selectedStoreId = \"\";\n        storeList = \"\";\n      } else {\n        filterResult = storeList.filter((el) => el.value === selectedStoreId);\n        selectedStoreName =\n          filterResult && filterResult[0] && filterResult[0].name\n            ? filterResult[0].name\n            : null;\n      }\n    }\n\n    this.setState(\n      {\n        componentReady: true,\n        selectedStoreName: selectedStoreName\n          ? selectedStoreName\n          : this.state.selectedStoreName,\n        storeList,\n        carparkList: parkList,\n      },\n      () => {\n        if (selectedStoreName) {\n          this.getStoreData(selectedStoreId);\n        }\n      }\n    );\n  }\n\n  onTimeChange = (time, timeString, day, info) => {\n    let dateTime;\n    if (timeString) {\n      dateTime =\n        moment().format(\"YYYYMMDDT\") +\n        moment(timeString, [\"h:mm A\"])\n          .format(\"HH:mm\")\n          .replace(\":\", \"\") +\n        \"00\";\n    }\n    this.handleFormUpdate({\n      [day + info]: dateTime ? dateTime : null,\n    });\n  };\n\n  resetHours = () => {\n    this.setState({\n      formData: {\n        ...this.state.formData,\n        MondayOpeningHours: null,\n        MondayClosingHours: null,\n        MondaySecondaryOpeningHours: null,\n        MondaySecondaryClosingHours: null,\n        TuesdayOpeningHours: null,\n        TuesdayClosingHours: null,\n        TuesdaySecondaryOpeningHours: null,\n        TuesdaySecondaryClosingHours: null,\n        WednesdayOpeningHours: null,\n        WednesdayClosingHours: null,\n        WednesdaySecondaryOpeningHours: null,\n        WednesdaySecondaryClosingHours: null,\n        ThursdayOpeningHours: null,\n        ThursdayClosingHours: null,\n        ThursdaySecondaryOpeningHours: null,\n        ThursdaySecondaryClosingHours: null,\n        FridayOpeningHours: null,\n        FridayClosingHours: null,\n        FridaySecondaryOpeningHours: null,\n        FridaySecondaryClosingHours: null,\n        SaturdayOpeningHours: null,\n        SaturdayClosingHours: null,\n        SaturdaySecondaryOpeningHours: null,\n        SaturdaySecondaryClosingHours: null,\n        SundayOpeningHours: null,\n        SundayClosingHours: null,\n        SundaySecondaryOpeningHours: null,\n        SundaySecondaryClosingHours: null,\n      },\n    });\n  };\n\n  renderModal = () => {\n    disableBodyScroll();\n    const { title, body, cta } = this.state.modalContent;\n    return (\n      <Modal\n        type=\"small\"\n        title={title}\n        show={() =>\n          this.setState({ showModal: false, modalContent: null }, () =>\n            enableBodyScroll()\n          )\n        }\n      >\n        <div className=\"\">{body}</div>\n        {cta ? (\n          <div className=\"cta\">\n            <Button\n              color=\"primary\"\n              onClick={() => (window.location.href = cta.url)}\n            >\n              {cta.label}\n            </Button>\n          </div>\n        ) : (\n            \"\"\n          )}\n      </Modal>\n    );\n  };\n\n  saveForm = async () => {\n    const { formData } = this.state;\n    var timezoneId = new Date().getTimezoneOffset();\n    const url = \"/api/sitecore/store/SaveStorefrontData\";\n    let data = buildFormData({ ...formData, timeZoneId: timezoneId });\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n        params: {\n          storeId: formData.StoreID,\n        },\n        config: { headers: { \"Content-Type\": \"multipart/form-data\" } },\n      });\n      if (response) {\n        if (get(response.data, \"IsSuccess.value\", false)) {\n          let successMessage = {\n            title: \"Form Saved\",\n            body: get(response.data, \"message.value\", \"Successful\"),\n          };\n          this.setState({\n            showModal: true,\n            modalContent: successMessage,\n          });\n          TagManager.dataLayer({\n            dataLayer: {\n              event: \"updateStoreInfo\",\n            },\n            dataLayerName: \"dataLayer\",\n          });\n        } else {\n          let errorMessage = {\n            title: \"Form Not Saved\",\n            body: get(response.data, \"message.value\", \"Invalid response\"),\n          };\n          this.setState({\n            showModal: true,\n            modalContent: errorMessage,\n          });\n        }\n      }\n    } catch (e) {\n      console.log(e.response.statusText);\n      let successMessage = {\n        title: \"Form Saved\",\n        body: get(e.response.data, \"message.value\", \"Successful\"),\n      };\n      this.setState({\n        showModal: true,\n        modalContent: successMessage,\n      });\n    }\n  };\n\n  decodeHTML = (html) => {\n    if (document) {\n      var txt = document.createElement(\"textarea\");\n      txt.innerHTML = html;\n      return txt.value;\n    }\n  };\n\n  getStoreData = async (storeId) => {\n    let response = await getStorefrontData({ storeId });\n    const $this = this;\n    if (response.status === 200 && response.data) {\n      const ImageGallery = get(response.data, \"ImageGallery\", []);\n      this.setState({\n        formData: {\n          Name: get(response.data, \"Name.value\", null),\n          StorefrontDescription: $this.decodeHTML(\n            get(response.data, \"Description.value\", \"\")\n          ),\n          ContactNumber: get(response.data, \"ContactNumber.value\", \"\"),\n          MenuUrl: get(response.data, \"MenuUrl.value\", \"\"),\n          OnlineBookingUrl: get(response.data, \"OnlineBookingUrl.value\", \"\"),\n          BestParking: get(response.data, \"BestParking.value\", \"\"),\n          AcceptsAfterPay: get(response.data, \"AcceptsAfterPay.value\", false),\n          AcceptsGiftCards: get(response.data, \"AcceptsGiftCards.value\", false),\n          IsKidsFriendly: get(response.data, \"IsKidsFriendly.value\", false),\n          IsVegetarian: get(response.data, \"IsVegetarian.value\", false),\n          RetailerName: get(response.data, \"RetailerDetails.Name.value\", null),\n          RetailerDescription: $this.decodeHTML(\n            get(response.data, \"RetailerDetails.Description.value\", \"\")\n          ),\n          Website: get(response.data, \"RetailerDetails.Website.value\", null),\n          Instagram: get(\n            response.data,\n            \"RetailerDetails.Instagram.value\",\n            null\n          ),\n          Facebook: get(response.data, \"RetailerDetails.Facebook.value\", null),\n          LogoImage: get(\n            response.data,\n            \"RetailerDetails.LogoImage.value.src\",\n            null\n          ),\n          HeroImage: get(\n            response.data,\n            \"RetailerDetails.HeroImage.value.src\",\n            null\n          ),\n          StorefrontHeroImage: get(\n            response.data,\n            \"StorefrontHeroImage.value.src\",\n            null\n          ),\n          ImageGalleryChecker: ImageGallery\n            ? ImageGallery.map((el) => el.Id.value)\n            : [],\n          ImageGallery: ImageGallery\n            ? ImageGallery.map((el) => {\n              return {\n                name: el.Name.value,\n                id: el.Id.value,\n                src: el.Src.value,\n              };\n            })\n            : [],\n          StoreID: get(response.data, \"StoreID.value\", null),\n          IsTemporarilyClosed: get(\n            response.data,\n            \"IsTemporarilyClosed.value\",\n            null\n          ),\n          IsOpeningSoon: get(response.data, \"IsTemporarilyClosed.value\", null)\n            ? false\n            : get(response.data, \"IsOpeningSoon.value\", null),\n          Source: get(response.data, \"Source.value\", null),\n          MondayOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.MondayOpeningHours.value\",\n            null\n          ),\n          MondayClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.MondayClosingHours.value\",\n            null\n          ),\n          MondaySecondaryOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.MondaySecondaryOpeningHours.value\",\n            null\n          ),\n          MondaySecondaryClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.MondaySecondaryClosingHours.value\",\n            null\n          ),\n          MondayIsClosed: get(\n            response.data,\n            \"StoreOpeningHours.MondayIsClosed.value\",\n            null\n          ),\n          TuesdayOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.TuesdayOpeningHours.value\",\n            null\n          ),\n          TuesdayClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.TuesdayClosingHours.value\",\n            null\n          ),\n          TuesdaySecondaryOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.TuesdaySecondaryOpeningHours.value\",\n            null\n          ),\n          TuesdaySecondaryClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.TuesdaySecondaryClosingHours.value\",\n            null\n          ),\n          TuesdayIsClosed: get(\n            response.data,\n            \"StoreOpeningHours.TuesdayIsClosed.value\",\n            null\n          ),\n          WednesdayOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.WednesdayOpeningHours.value\",\n            null\n          ),\n          WednesdayClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.WednesdayClosingHours.value\",\n            null\n          ),\n          WednesdaySecondaryOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.WednesdaySecondaryOpeningHours.value\",\n            null\n          ),\n          WednesdaySecondaryClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.WednesdaySecondaryClosingHours.value\",\n            null\n          ),\n          WednesdayIsClosed: get(\n            response.data,\n            \"StoreOpeningHours.WednesdayIsClosed.value\",\n            null\n          ),\n          ThursdayOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.ThursdayOpeningHours.value\",\n            null\n          ),\n          ThursdayClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.ThursdayClosingHours.value\",\n            null\n          ),\n          ThursdaySecondaryOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.ThursdaySecondaryOpeningHours.value\",\n            null\n          ),\n          ThursdaySecondaryClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.ThursdaySecondaryClosingHours.value\",\n            null\n          ),\n          ThursdayIsClosed: get(\n            response.data,\n            \"StoreOpeningHours.ThursdayIsClosed.value\",\n            null\n          ),\n          FridayOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.FridayOpeningHours.value\",\n            null\n          ),\n          FridayClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.FridayClosingHours.value\",\n            null\n          ),\n          FridaySecondaryOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.FridaySecondaryOpeningHours.value\",\n            null\n          ),\n          FridaySecondaryClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.FridaySecondaryClosingHours.value\",\n            null\n          ),\n          FridayIsClosed: get(\n            response.data,\n            \"StoreOpeningHours.FridayIsClosed.value\",\n            null\n          ),\n          SaturdayOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.SaturdayOpeningHours.value\",\n            null\n          ),\n          SaturdayClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.SaturdayClosingHours.value\",\n            null\n          ),\n          SaturdaySecondaryOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.SaturdaySecondaryOpeningHours.value\",\n            null\n          ),\n          SaturdaySecondaryClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.SaturdaySecondaryClosingHours.value\",\n            null\n          ),\n          SaturdayIsClosed: get(\n            response.data,\n            \"StoreOpeningHours.SaturdayIsClosed.value\",\n            null\n          ),\n          SundayOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.SundayOpeningHours.value\",\n            null\n          ),\n          SundayClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.SundayClosingHours.value\",\n            null\n          ),\n          SundaySecondaryOpeningHours: get(\n            response.data,\n            \"StoreOpeningHours.SundaySecondaryOpeningHours.value\",\n            null\n          ),\n          SundaySecondaryClosingHours: get(\n            response.data,\n            \"StoreOpeningHours.SundaySecondaryClosingHours.value\",\n            null\n          ),\n          SundayIsClosed: get(\n            response.data,\n            \"StoreOpeningHours.SundayIsClosed.value\",\n            null\n          ),\n        },\n        RetailerType: get(\n          response.data,\n          \"RetailerDetails.RetailerType.value\",\n          \"\"\n        ),\n        formType:\n          storeId === \"\"\n            ? \"\"\n            : get(response.data, \"RetailerDetails.RetailerType.value\", \"\"),\n      });\n    } else {\n      alert(\"Getting store data failed\");\n    }\n  };\n\n  setStoreList = (list) => {\n    let temp = [];\n    list.forEach((el) =>\n      temp.push({\n        name: el.fields.StoreName.value,\n        value: el.fields.StoreItemId.value,\n      })\n    );\n    return temp;\n  };\n\n  setCarparkList = (list) => {\n    let temp = [];\n    list.forEach((el) =>\n      temp.push({\n        name: el.fields.CarParkName.value,\n        value: el.fields.CarParkId.value,\n      })\n    );\n    return temp;\n  };\n\n  handleFormUpdate = (value) => {\n    this.setState({\n      formData: {\n        ...this.state.formData,\n        ...value,\n      },\n    });\n  };\n\n  setDropdownValue = (value, options) => {\n    if (value && options && options.length) {\n      return options.filter((el) => el.value === value)[0].name;\n    } else return null;\n  };\n\n  render() {\n    const {\n      formData,\n      formType,\n      componentReady,\n      selectedStoreName,\n      storeList,\n      sourceList,\n      carparkList,\n      iconList,\n      showModal,\n    } = this.state;\n    const days = [\n      \"Sunday\",\n      \"Monday\",\n      \"Tuesday\",\n      \"Wednesday\",\n      \"Thursday\",\n      \"Friday\",\n      \"Saturday\",\n    ];\n    return (\n      <div className=\"storefront-container\">\n        {showModal && this.renderModal()}\n        <div className=\"body-section-title\">Update Storefront</div>\n        {storeList && storeList.length && storeList.length > 1 && (\n          <div className=\"form-type-wrapper\">\n            <DropDown\n              theme=\"light\"\n              options={storeList}\n              defaultSelected={selectedStoreName}\n              handleSelectionChange={(selectedStoreName) => {\n                const selectedStoreId = storeList.filter(\n                  (el) => el.name === selectedStoreName\n                )[0].value;\n                this.getStoreData(selectedStoreId);\n              }}\n            />\n          </div>\n        )}\n        {/*---------------- global retailer info ----------------*/}\n        {formType === \"\" && (\n          <div className=\"global-retailer-info\">\n            <div className=\"form-images-container\">\n              <div className=\"thumbnail-wrapper\">\n                <div className=\"form-label\">Retailer Logo</div>\n                <ImageUpload\n                  type=\"retailer\"\n                  labelOne=\"*Images must be a min of \"\n                  labelTwo=\"800x800 px \"\n                  labelThree=\"(1:1 ratio)\"\n                  placeholder={bitmap}\n                  value={formData.LogoImage}\n                  handleFileUpload={(LogoImage, errorMessage) => {\n                    this.handleFormUpdate({ LogoImage });\n                  }}\n                />\n              </div>\n              <div className=\"hero-wrapper\">\n                <div className=\"form-label\">Header Image</div>\n                <ImageUpload\n                  type=\"hero\"\n                  labelOne=\"*Images must be a min of \"\n                  labelTwo=\"1920x1080 px \"\n                  labelThree=\"(16:9 ratio)\"\n                  placeholder={bitmap}\n                  value={formData.HeroImage}\n                  handleFileUpload={(HeroImage, errorMessage) => {\n                    this.handleFormUpdate({ HeroImage });\n                  }}\n                />\n              </div>\n            </div>\n            <FormInput\n              type=\"text\"\n              placeholder=\"Type retailer Name.\"\n              label=\"Retailer Name\"\n              value={formData.RetailerName}\n              onInputChange={(RetailerName) => {\n                this.handleFormUpdate({ RetailerName });\n              }}\n            />\n            {componentReady && (\n              <RichTextEditor\n                label={\"Retailer Description\"}\n                initialValue={formData.RetailerDescription}\n                onInputChange={(RetailerDescription) => {\n                  this.handleFormUpdate({ RetailerDescription });\n                }}\n              />\n            )}\n          </div>\n        )}\n        {(formType === \"Retail\" || formType === \"Food\") && (\n          <div className=\"global-retailer-info\">\n            <div className=\"form-images-container\">\n              <div className=\"hero-wrapper\">\n                <div className=\"form-label\">Header Image</div>\n                <ImageUpload\n                  type=\"hero\"\n                  labelOne=\"*Images must be a min of \"\n                  labelTwo=\"1920x1080 px \"\n                  labelThree=\"(16:9 ratio)\"\n                  placeholder={bitmap}\n                  value={formData.StorefrontHeroImage}\n                  handleFileUpload={(StorefrontHeroImage) => {\n                    this.handleFormUpdate({ StorefrontHeroImage });\n                  }}\n                  removeImage\n                />\n              </div>\n            </div>\n          </div>\n        )}\n        {(formType === \"Retail\" || formType === \"Food\") && (\n          <div className=\"store-info\">\n            <FormInput\n              type=\"text\"\n              placeholder=\"Type store Name.\"\n              label=\"Store Name\"\n              value={formData.Name}\n              onInputChange={(Name) => {\n                this.handleFormUpdate({ Name });\n              }}\n            />\n            {componentReady && (\n              <RichTextEditor\n                label={\"Retailer Description\"}\n                checkIfBlank={true}\n                initialValue={formData.StorefrontDescription}\n                onInputChange={(StorefrontDescription) => {\n                  this.handleFormUpdate({ StorefrontDescription });\n                }}\n              />\n            )}\n          </div>\n        )}\n        {/*---------------- common info ----------------*/}\n        {(formType === \"\" || formType === \"Retail\" || formType === \"Food\") && (\n          <div className=\"common-retailer-info\">\n            <FormInput\n              type=\"text\"\n              icon=\"website\"\n              placeholder=\"Insert link (e.g. http://...)\"\n              label=\"Website\"\n              value={formData.Website}\n              onInputChange={(Website) => {\n                this.handleFormUpdate({ Website });\n              }}\n            />\n            <FormInput\n              type=\"text\"\n              icon=\"instagram\"\n              placeholder=\"http://instagram.com\"\n              label=\"Instagram\"\n              value={formData.Instagram}\n              onInputChange={(Instagram) => {\n                this.handleFormUpdate({ Instagram });\n              }}\n            />\n            <FormInput\n              type=\"text\"\n              icon=\"facebook\"\n              placeholder=\"http://facebook.com\"\n              label=\"Facebook\"\n              value={formData.Facebook}\n              onInputChange={(Facebook) => {\n                this.handleFormUpdate({ Facebook });\n              }}\n            />\n          </div>\n        )}\n        {/*---------------- store info ----------------*/}\n        {(formType === \"Retail\" || formType === \"Food\") && (\n          <div>\n            <div className=\"store-contact-section\">\n              <FormInput\n                type=\"text\"\n                icon=\"contact-details\"\n                placeholder=\"(88) 888-8888\"\n                label=\"Contact Details\"\n                value={formData.ContactNumber}\n                onInputChange={(ContactNumber) =>\n                  this.handleFormUpdate({ ContactNumber })\n                }\n              />\n              {formType === \"Food\" && (\n                <FormInput\n                  type=\"text\"\n                  icon=\"view-menu\"\n                  placeholder=\"e.g. http://view-menu.com\"\n                  label=\"View Menu (URL)\"\n                  value={formData.MenuUrl}\n                  onInputChange={(MenuUrl) =>\n                    this.handleFormUpdate({ MenuUrl })\n                  }\n                />\n              )}\n              <FormInput\n                type=\"text\"\n                icon=\"calendar\"\n                placeholder=\"e.g. http://online-booking.com\"\n                label=\"Online Booking (URL)\"\n                value={formData.OnlineBookingUrl}\n                onInputChange={(OnlineBookingUrl) =>\n                  this.handleFormUpdate({ OnlineBookingUrl })\n                }\n              />\n            </div>\n            <div className=\"best-parking\">\n              <div className=\"form-label\">Best Parking</div>\n              <FormDropDown\n                theme=\"light\"\n                placeholder=\"Select a car park\"\n                noOptionsMessage=\"No car park found\"\n                options={carparkList}\n                defaultSelected={this.setDropdownValue(\n                  formData.BestParking,\n                  carparkList\n                )}\n                handleSelectionChange={(selectedBestParking) => {\n                  const BestParking = carparkList.filter(\n                    (el) => el.name === selectedBestParking\n                  )[0].value;\n                  this.handleFormUpdate({ BestParking });\n                }}\n              />\n            </div>\n\n            <div>\n              <div className=\"form-label\">Other</div>\n              {formType === \"Food\" && (\n                <div className=\"category-list food-retailer\">\n                  <FormCheckbox\n                    value={\"\"}\n                    label={\"Vegetarian\"}\n                    icon=\"vegetarian\"\n                    checked={formData.IsVegetarian}\n                    onCheckboxChange={(value, IsVegetarian) =>\n                      this.handleFormUpdate({ IsVegetarian })\n                    }\n                  />\n                  <FormCheckbox\n                    value={\"\"}\n                    label={\"Kids-Friendly\"}\n                    icon=\"kids-friendly\"\n                    checked={formData.IsKidsFriendly}\n                    onCheckboxChange={(value, IsKidsFriendly) =>\n                      this.handleFormUpdate({ IsKidsFriendly })\n                    }\n                  />\n                  <FormCheckbox\n                    value={\"\"}\n                    label={\"Gift Cards\"}\n                    icon=\"gift-cards\"\n                    checked={formData.AcceptsGiftCards}\n                    onCheckboxChange={(value, AcceptsGiftCards) =>\n                      this.handleFormUpdate({ AcceptsGiftCards })\n                    }\n                  />\n                </div>\n              )}\n              {formType === \"Retail\" && (\n                <div className=\"category-list\">\n                  <FormCheckbox\n                    label={\"Afterpay\"}\n                    icon=\"afterpay\"\n                    checked={formData.AcceptsAfterPay}\n                    onCheckboxChange={(value, AcceptsAfterPay) =>\n                      this.handleFormUpdate({ AcceptsAfterPay })\n                    }\n                  />\n                  <FormCheckbox\n                    value={\"\"}\n                    label={\"Gift Cards\"}\n                    icon=\"gift-cards\"\n                    checked={formData.AcceptsGiftCards}\n                    onCheckboxChange={(value, AcceptsGiftCards) =>\n                      this.handleFormUpdate({ AcceptsGiftCards })\n                    }\n                  />\n                </div>\n              )}\n            </div>\n            <div className=\"form-openinghours-container\">\n              <div className=\"form-label\">Opening hours</div>\n              <FormCheckbox\n                value={\"\"}\n                label=\"Opening soon\"\n                checked={formData.IsOpeningSoon}\n                onCheckboxChange={(value, IsOpeningSoon) =>\n                  this.handleFormUpdate({ IsOpeningSoon })\n                }\n                disabled={formData.IsTemporarilyClosed}\n              />\n              <FormCheckbox\n                value={\"\"}\n                label=\"Temporarily closed\"\n                checked={formData.IsTemporarilyClosed}\n                onCheckboxChange={(value, IsTemporarilyClosed) =>\n                  this.handleFormUpdate({ IsTemporarilyClosed })\n                }\n                disabled={formData.IsOpeningSoon}\n              />\n              <div className=\"form-sub-label\">Source</div>\n              <DropDown\n                theme=\"light\"\n                options={sourceList}\n                defaultSelected={formData.Source}\n                handleSelectionChange={(selectedSourceName) => {\n                  const Source = sourceList.filter(\n                    (el) => el.name === selectedSourceName\n                  )[0].value;\n                  this.handleFormUpdate({ Source });\n                }}\n              />\n              {formData && formData.Source && formData.Source === \"Store\" ? (\n                <div className=\"storehours-container\">\n                  <div className=\"form-sub-header\">\n                    <div className=\"form-sub-label\">Update store hours</div>\n                    <div\n                      className=\"form-sub-label-right\"\n                      onClick={() => this.resetHours()}\n                    >\n                      Reset hours\n                    </div>\n                  </div>\n                  <div className=\"hours-table\">\n                    <div className=\"row\">\n                      <div className=\"col-3\">DAY</div>\n                      <div className=\"col-4\">OPENING HOURS</div>\n                      <div className=\"col-4\">SECONDARY HOURS</div>\n                      <div className=\"col-1\">CLOSED</div>\n                    </div>\n                    {days.map((day, index) => {\n                      let newInfo = [];\n                      const infoList = [\n                        \"OpeningHours\",\n                        \"ClosingHours\",\n                        \"SecondaryOpeningHours\",\n                        \"SecondaryClosingHours\",\n                        \"IsClosed\",\n                      ];\n                      infoList.map((info) => {\n                        newInfo.push(formData[day + info]);\n                      });\n                      const primaryOpeningHour = newInfo[0];\n                      const primaryClosingHour = newInfo[1];\n                      const secondaryOpeningHour = newInfo[2];\n                      const secondaryClosingHour = newInfo[3];\n                      const closed = newInfo[4];\n                      return (\n                        <div className=\"row\" key={`StoreOpeningHours${index}`}>\n                          <div className=\"col-3\">{day}</div>\n                          <div className=\"col-4\">\n                            <TimePicker\n                              use12Hours\n                              format=\"h:mm A\"\n                              size=\"large\"\n                              allowClear={false}\n                              value={\n                                primaryOpeningHour\n                                  ? moment(primaryOpeningHour)\n                                  : null\n                              }\n                              onChange={(time, timeString) =>\n                                this.onTimeChange(\n                                  time,\n                                  timeString,\n                                  day,\n                                  infoList[0]\n                                )\n                              }\n                              suffixIcon={\n                                <i className=\"icon icon-outlined-chevron-down\" />\n                              }\n                              placeholder=\"Not set\"\n                            />\n                            <TimePicker\n                              use12Hours\n                              format=\"h:mm A\"\n                              size=\"large\"\n                              allowClear={false}\n                              value={\n                                primaryClosingHour\n                                  ? moment(primaryClosingHour)\n                                  : null\n                              }\n                              onChange={(time, timeString) =>\n                                this.onTimeChange(\n                                  time,\n                                  timeString,\n                                  day,\n                                  infoList[1]\n                                )\n                              }\n                              suffixIcon={\n                                <i className=\"icon icon-outlined-chevron-down\" />\n                              }\n                              placeholder=\"Not set\"\n                            />\n                          </div>\n                          <div className=\"col-4\">\n                            <TimePicker\n                              use12Hours\n                              format=\"h:mm A\"\n                              size=\"large\"\n                              allowClear={false}\n                              value={\n                                secondaryOpeningHour\n                                  ? moment(secondaryOpeningHour)\n                                  : null\n                              }\n                              onChange={(time, timeString) =>\n                                this.onTimeChange(\n                                  time,\n                                  timeString,\n                                  day,\n                                  infoList[2]\n                                )\n                              }\n                              suffixIcon={\n                                <i className=\"icon icon-outlined-chevron-down\" />\n                              }\n                              placeholder=\"Not set\"\n                            />\n                            <TimePicker\n                              use12Hours\n                              format=\"h:mm A\"\n                              size=\"large\"\n                              allowClear={false}\n                              value={\n                                secondaryClosingHour\n                                  ? moment(secondaryClosingHour)\n                                  : null\n                              }\n                              onChange={(time, timeString) =>\n                                this.onTimeChange(\n                                  time,\n                                  timeString,\n                                  day,\n                                  infoList[3]\n                                )\n                              }\n                              suffixIcon={\n                                <i className=\"icon icon-outlined-chevron-down\" />\n                              }\n                              placeholder=\"Not set\"\n                            />\n                          </div>\n                          <div className=\"col-1\">\n                            <FormCheckbox\n                              checked={closed}\n                              onCheckboxChange={(value, isClosed) =>\n                                this.handleFormUpdate({\n                                  [day + infoList[4]]: isClosed,\n                                })\n                              }\n                            />\n                          </div>\n                        </div>\n                      );\n                    })}\n                  </div>\n                  <div className=\"hint\">\n                    <i className=\"icon icon-outlined-info\" />\n                    <div>\n                      <span>Secondary hours</span>\n                      <span>\n                        : The retailer will open and close twice in a single day\n                        (eg restaurants: Sunday 9am - 12pm, 4pm - 6pm)\n                      </span>\n                    </div>\n                  </div>\n                </div>\n              ) : (\n                  \"\"\n                )}\n            </div>\n            <div className=\"form-imagegallery-container\">\n              <div className=\"form-label\">Image gallery</div>\n              <FormFile\n                icon=\"plus\"\n                label=\"Add Image\"\n                value={formData.ImageGallery}\n                handleAttachments={(ImageGallery, errorMessage) =>\n                  this.handleFormUpdate({ ImageGallery })\n                }\n              />\n            </div>\n          </div>\n        )}\n        {/*---------------- form controls ----------------*/}\n        {formType !== null && (\n          <div className=\"form-controls-container\">\n            <Button\n              color=\"secondary\"\n              onClick={() => (window.location.href = `/stores`)}\n            >\n              CANCEL\n            </Button>\n            <Button\n              disable={false}\n              color=\"primary\"\n              onClick={() => this.saveForm()}\n            >\n              SAVE\n            </Button>\n          </div>\n        )}\n      </div>\n    );\n  }\n}\nexport default FeatureRetailerPortalStorefront;\n","import React, { Component } from \"react\";\r\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\r\nimport DefaultUserLogo from \"../../../../../assets/icons/png/author.png\";\r\nimport logoPlaceholder from \"../../../../../assets/img/logoPlaceholder.png\";\r\n\r\nclass NavInfo extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      show: false,\r\n      breakpoint: null,\r\n    };\r\n  }\r\n  componentDidMount() {\r\n    this.setState({ breakpoint: window.outerWidth });\r\n    this.handleResize();\r\n    window.addEventListener(\"resize\", this.handleResize);\r\n  }\r\n\r\n  componentWillUnmount() {\r\n    document.removeEventListener(\"mousedown\", this.handleClick, false);\r\n  }\r\n\r\n  handleResize = () => {\r\n    const { breakpoint } = this.state;\r\n    if (\r\n      (window.outerWidth < 992 && breakpoint < 992) ||\r\n      (window.outerWidth >= 992 && breakpoint >= 992)\r\n    ) {\r\n    } else {\r\n      this.handleBlur();\r\n    }\r\n\r\n    if (window && window.outerWidth >= 992) {\r\n      document.addEventListener(\"mousedown\", this.handleClick, false);\r\n    } else {\r\n      document.removeEventListener(\"mousedown\", this.handleClick, false);\r\n    }\r\n  };\r\n\r\n  handleClick = (e) => {\r\n    if (this.state.show) {\r\n      if (this.node.contains(e.target)) {\r\n        return;\r\n      } else {\r\n        this.handleBlur();\r\n      }\r\n    }\r\n  };\r\n\r\n  handleBlur = () => {\r\n    setTimeout(() => {\r\n      this.setState({ show: false });\r\n    }, 120);\r\n  };\r\n\r\n  render() {\r\n    const { UserName: name = null, UserPicture: thumbnail = null } =\r\n      this.props.data || {};\r\n    const options = [\"Your profile\", \"Logout\"];\r\n    const { show } = this.state;\r\n    return (\r\n      <div className=\"nav-user-wrapper\" ref={(node) => (this.node = node)}>\r\n        <div\r\n          className=\"user-wrapper\"\r\n          onClick={() => this.setState({ show: !show })}\r\n        >\r\n          <div className=\"user-thumbnail\">\r\n            {thumbnail && thumbnail.value && thumbnail.value.src ? (\r\n              <img\r\n                alt=\"icon\"\r\n                src={logoPlaceholder}\r\n                data-src={thumbnail.value.src}\r\n                className=\"lazyload\"\r\n              />\r\n            ) : (\r\n              <img src={DefaultUserLogo} alt=\"retailer\" />\r\n            )}\r\n          </div>\r\n          <div className=\"user-name\">\r\n            Hey, <Text field={name} />\r\n          </div>\r\n          <div className=\"edit-profile\">\r\n            <i className=\"icon icon-chevron-down-small\" />\r\n            <i className=\"icon icon-chevron-outline-right\" />\r\n          </div>\r\n        </div>\r\n        {show && (\r\n          <ul className=\"dropdown-list\">\r\n            <li\r\n              className=\"nav-back\"\r\n              id={show ? \"nav-mobile-back\" : \"\"}\r\n              onClick={() => this.handleBlur()}\r\n            >\r\n              <i className=\"icon icon-chevron-outline-left\" />\r\n              Back\r\n            </li>\r\n            <li className=\"nav-name\">\r\n              <div>\r\n                <div className=\"user-thumbnail\">\r\n                  {thumbnail && thumbnail.value && thumbnail.value.src ? (\r\n                    <img\r\n                      alt=\"icon\"\r\n                      src={logoPlaceholder}\r\n                      data-src={thumbnail.value.src}\r\n                      className=\"lazyload\"\r\n                    />\r\n                  ) : (\r\n                    <img src={DefaultUserLogo} alt=\"retailer\" />\r\n                  )}\r\n                </div>\r\n                <div className=\"user-name\">\r\n                  Hey, <Text field={name} />\r\n                </div>\r\n              </div>\r\n            </li>\r\n            {options.map((item, index) => {\r\n              return (\r\n                <React.Fragment key={`navUserId${index}`}>\r\n                  {index === options.length - 1 && (\r\n                    <div className=\"last-option-border\" />\r\n                  )}\r\n                  <li\r\n                    onClick={() => {\r\n                      this.setState({ show: false });\r\n                      this.props.optionSelected(item);\r\n                    }}\r\n                  >\r\n                    <i\r\n                      className={`icon icon-${\r\n                        index === 0 ? \"user\" : \"log-out\"\r\n                      }`}\r\n                    />\r\n                    <span>{item}</span>\r\n                  </li>\r\n                </React.Fragment>\r\n              );\r\n            })}\r\n          </ul>\r\n        )}\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default NavInfo;\r\n","import React from \"react\";\r\n\r\nclass NavLogo extends React.Component {\r\n  closeNav = () => {\r\n    const leftNavWrapper = document.querySelector(\".left-nav\");\r\n    const topNavWrapper = document.querySelector(\".top-nav .top-nav-wrapper\");\r\n    const backButton = document.querySelector(\"#nav-mobile-back\");\r\n    if (leftNavWrapper && topNavWrapper) {\r\n      leftNavWrapper.classList.remove(\"show-nav-mobile\");\r\n      topNavWrapper.classList.remove(\"show-nav-mobile\");\r\n    }\r\n    if (backButton) {\r\n      backButton.click();\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const { LogoLink = null } = this.props.data || {};\r\n    return (\r\n      <div className=\"nav-logo-wrapper\">\r\n        {LogoLink && LogoLink.value ? (\r\n          <a {...LogoLink.value}>\r\n            <i className=\"icon icon-townsquare\" />\r\n          </a>\r\n        ) : (\r\n          <i className=\"icon icon-townsquare\" />\r\n        )}\r\n        <i className=\"icon icon-close\" onClick={() => this.closeNav()} />\r\n      </div>\r\n    );\r\n  }\r\n}\r\n\r\nexport default NavLogo;\r\n","import React, { Component, Fragment } from \"react\";\nimport { Text } from \"@sitecore-jss/sitecore-jss-react\";\nimport TagManager from \"react-gtm-module\";\nimport axios from \"axios\";\nimport { getNavRetailerList } from \"../../../../../api/NavigationAPI\";\nimport logoPlaceholder from \"../../../../../assets/img/logoPlaceholder.png\";\n\nclass NavRetailer extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      selectedRetailer: null,\n      retailersList: [],\n      newNotif: null,\n      show: false,\n      removeShowAll: false,\n      breakpoint: null,\n    };\n  }\n\n  componentDidMount() {\n    this.getRetailerList();\n    this.setState({ breakpoint: window.outerWidth });\n    this.handleResize();\n    window.addEventListener(\"resize\", this.handleResize);\n  }\n  componentDidUpdate() {\n    this.handleDropdown();\n  }\n  componentWillUnmount() {\n    document.removeEventListener(\"mousedown\", this.handleClick, false);\n  }\n\n  handleResize = () => {\n    const { breakpoint } = this.state;\n    if (\n      (window.outerWidth < 992 && breakpoint < 992) ||\n      (window.outerWidth >= 992 && breakpoint >= 992)\n    ) {\n    } else {\n      this.handleBlur();\n    }\n\n    if (window && window.outerWidth >= 992) {\n      document.addEventListener(\"mousedown\", this.handleClick, false);\n    } else {\n      document.removeEventListener(\"mousedown\", this.handleClick, false);\n    }\n  };\n\n  handleDropdown = () => {\n    if (window && window.outerWidth >= 992) {\n      const { retailersList, removeShowAll } = this.state;\n      let sum = 0;\n      if (\n        retailersList &&\n        retailersList.length &&\n        retailersList.length > 1 &&\n        document\n      ) {\n        const showAll = retailersList.length > 3 ? true : false;\n        const initialList = document.querySelectorAll(\n          \".nav-retailers-wrapper li\"\n        );\n        if (showAll) {\n          sum =\n            initialList[0].offsetHeight +\n            initialList[1].offsetHeight +\n            initialList[2].offsetHeight;\n        }\n        document.querySelector(\n          \".nav-retailers-wrapper .dropdown-list .options\"\n        ).style.maxHeight = showAll\n          ? removeShowAll\n            ? \"22rem\"\n            : sum + \"px\"\n          : \"fit-content\";\n      }\n    } else {\n      const nav = document.querySelector(\n        \".nav-retailers-wrapper .dropdown-list .options\"\n      );\n      if (nav) {\n        nav.style.maxHeight = \"fit-content\";\n      }\n    }\n  };\n\n  handleClick = (e) => {\n    if (this.state.show) {\n      if (this.node.contains(e.target)) {\n        return;\n      } else {\n        this.handleBlur();\n      }\n    }\n  };\n\n  handleBlur = () => {\n    setTimeout(() => {\n      this.setState({ show: false });\n    }, 120);\n  };\n\n  getRetailerList = async () => {\n    const { RetailerName = null } = this.props.data || {};\n    let retailerList = [];\n    let selectedRetailer;\n    try {\n      const response = await getNavRetailerList();\n      if (response && response.data && response.data.Retailers) {\n        response.data.Retailers.map((retailer) => {\n          const {\n            RetailerId: id = null,\n            RetailerName: name = null,\n            RetailerLogo: logo = null,\n          } = retailer;\n          if (RetailerName && RetailerName.value == name.value) {\n            selectedRetailer = {\n              value: id.value,\n              label: name.value,\n              logo: logo && logo.value ? logo.value : null,\n            };\n          }\n          retailerList.push({\n            value: id.value,\n            label: name.value,\n            logo: logo && logo.value ? logo.value : null,\n          });\n        });\n\n        this.setGoogleTagmanager(RetailerName);\n\n        this.setState({\n          selectedRetailer: selectedRetailer,\n          retailersList: retailerList,\n        });\n      }\n    } catch (e) {\n      console.error(\n        \"getNavRetailerList Error: \" + e && e.response && e.response.statusText\n      );\n    }\n  };\n\n  setGoogleTagmanager = (retailerName) => {\n    if (\n      document &&\n      document.referrer &&\n      document.referrer.toLowerCase().indexOf(\"/home/login\") !== -1\n    ) {\n      const retailer = (retailerName && retailerName.value) || \"Administrator\";\n\n      TagManager.dataLayer({\n        dataLayer: {\n          event: \"loginRetailerInfo\",\n          loginRetailer: retailer,\n        },\n        dataLayerName: \"dataLayer\",\n      });\n\n      const centre = sessionStorage.getItem(\"RPCentreList\");\n      if (centre) {\n        if (centre.indexOf(\",\") !== -1) {\n          centre.split(\",\").map((item) => {\n            TagManager.dataLayer({\n              dataLayer: {\n                event: \"loginCentreInfo\",\n                loginCentre: item,\n                loginRetailer: retailer,\n              },\n              dataLayerName: \"dataLayer\",\n            });\n          });\n        } else {\n          TagManager.dataLayer({\n            dataLayer: {\n              event: \"loginCentreInfo\",\n              loginCentre: centre,\n              loginRetailer: retailer,\n            },\n            dataLayerName: \"dataLayer\",\n          });\n        }\n      }\n    }\n  };\n\n  handleSwitchRetailer = async (retailer) => {\n    const url = \"/api/sitecore/account/SwitchRetailer\";\n    const data = {\n      retailerId: retailer.value,\n    };\n\n    const { selectedRetailer } = this.state;\n\n    TagManager.dataLayer({\n      dataLayer: {\n        prevRetailer:\n          selectedRetailer && selectedRetailer.label\n            ? selectedRetailer.label\n            : \"No previous retailer\",\n        newRetailer: retailer.label,\n      },\n      dataLayerName: \"dataLayer\",\n    });\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data,\n      });\n\n      if (response) {\n        if (response.data.IsSuccess.value) {\n          TagManager.dataLayer({\n            dataLayer: {\n              event: \"switchedRetailer\",\n            },\n            dataLayerName: \"dataLayer\",\n          });\n          window.location.reload(true);\n          return false;\n        }\n      }\n    } catch (e) {\n      if (e && e.response && e.response.statusText) {\n        console.error(\"Nav Retailer Error: \" + e.response.statusText);\n      } else console.log(e);\n    }\n  };\n\n  render() {\n    const { selectedRetailer, removeShowAll, retailersList, show } = this.state;\n    const { RetailerName, RetailerLogo } = this.props.data;\n    const isSingleRetailer =\n      retailersList && retailersList.length && retailersList.length === 1\n        ? true\n        : false;\n    const hasOptions =\n      retailersList && retailersList.length && retailersList.length > 1\n        ? true\n        : false;\n    const showAll = hasOptions && retailersList.length > 3 ? true : false;\n    return (\n      <div className=\"nav-retailer-wrapper\">\n        {retailersList && retailersList.length ? (\n          <div\n            className={`nav-retailers-wrapper ${\n              hasOptions ? \"has-options\" : \"\"\n            }`}\n            ref={(node) => (this.node = node)}\n          >\n            <div\n              className=\"retailers-wrapper\"\n              onClick={() => hasOptions && this.setState({ show: !show })}\n            >\n              {RetailerName && RetailerName.value ? (\n                \"\"\n              ) : (\n                <i className=\"icon icon-list\" />\n              )}\n              <div className=\"retailer-name\">\n                {RetailerName && RetailerName.value ? (\n                  <Text field={RetailerName} />\n                ) : (\n                  \"Select retailer\"\n                )}\n              </div>\n              {isSingleRetailer ? (\n                \"\"\n              ) : hasOptions ? (\n                <Fragment>\n                  <i className=\"icon icon-chevron-down-small\" />\n                  <i className=\"icon icon-chevron-outline-right\" />\n                </Fragment>\n              ) : (\n                <div className=\"nav-retailer-loader\">\n                  <div className=\"loader\" />\n                </div>\n              )}\n              {RetailerName && RetailerName.value ? (\n                RetailerLogo && RetailerLogo.value ? (\n                  <div className=\"retailer-logo\">\n                    <img\n                      alt=\"logo\"\n                      src={logoPlaceholder}\n                      data-src={RetailerLogo.value}\n                      className=\"lazyload\"\n                    />\n                  </div>\n                ) : (\n                  <div className=\"retailer-logo\">\n                    <img alt=\"no_logo\" src={logoPlaceholder} />\n                  </div>\n                )\n              ) : (\n                \"\"\n              )}\n            </div>\n            {!isSingleRetailer && (\n              <ul className={`dropdown-list ${show ? \"\" : \"d-none\"}`}>\n                <div\n                  className=\"label-back\"\n                  id={show ? \"nav-mobile-back\" : \"\"}\n                  onClick={() => this.handleBlur()}\n                >\n                  <i className=\"icon icon-chevron-outline-left\" />\n                  Back\n                </div>\n                <div className=\"label-primary\">\n                  {RetailerName && RetailerName.value\n                    ? \"Switch retailer\"\n                    : \"Select retailer\"}\n                </div>\n                <div\n                  className={`options ${\n                    showAll && removeShowAll ? \"more-items\" : \"default-items\"\n                  }`}\n                >\n                  {retailersList.map((item, index) => {\n                    return (\n                      <li\n                        key={`retailerList-${index}`}\n                        onClick={() => {\n                          this.setState({ show: false });\n                          (!selectedRetailer ||\n                            (selectedRetailer &&\n                              selectedRetailer.value !== item.value)) &&\n                            this.handleSwitchRetailer(item);\n                        }}\n                        className={\n                          selectedRetailer &&\n                          selectedRetailer.value === item.value\n                            ? \"selected\"\n                            : \"\"\n                        }\n                      >\n                        <img\n                          alt=\"icon\"\n                          src={logoPlaceholder}\n                          data-src={item.logo ? item.logo : logoPlaceholder}\n                          className=\"lazyload\"\n                        />\n                        <span>{item.label}</span>\n                        {selectedRetailer &&\n                          selectedRetailer.value === item.value && (\n                            <Fragment>\n                              <i className=\"icon icon-check-small\" />\n                              <i className=\"icon icon-check-big\" />\n                            </Fragment>\n                          )}\n                      </li>\n                    );\n                  })}\n                </div>\n                {showAll && !removeShowAll && (\n                  <div className=\"show-all\">\n                    <div className=\"last-option-border\" />\n                    <div\n                      className=\"label-secondary\"\n                      id=\"nav-retailer-show-all\"\n                      onClick={() =>\n                        this.setState({ removeShowAll: true, isBlur: false })\n                      }\n                    >\n                      Show all\n                    </div>\n                  </div>\n                )}\n              </ul>\n            )}\n          </div>\n        ) : (\n          \"\"\n        )}\n      </div>\n    );\n  }\n}\nexport default NavRetailer;\n","import BaseURL, { DevURL } from \"./BaseURL\";\n\nconst isDev = process.env.REACT_APP_DEV || false;\n\nexport const getNavRetailerList = () => {\n  const endpoint = isDev ? \"/GetRetailerList\" : \"/portalnavigation/GetRetailerList\";\n  return BaseURL.get(endpoint);\n};","import React, { Component } from \"react\";\r\nimport { getNotifications } from \"../../../../../api/NotificationAPI\";\r\n\r\nclass NavNotification extends Component {\r\n  constructor(props) {\r\n    super(props);\r\n    this.state = {\r\n      newNotif: null,\r\n    };\r\n  }\r\n\r\n  componentDidMount() {\r\n    this.getNewNotification();\r\n  }\r\n\r\n  getNewNotification = async () => {\r\n    const response = await getNotifications();\r\n    if (response && response.data && response.data.Notifications) {\r\n      let newNotif = response.data.Notifications.filter(\r\n        (item) => !item.MemoViewed.value\r\n      ).length;\r\n      if (newNotif !== 0) {\r\n        this.setState({ newNotif });\r\n      }\r\n    }\r\n  };\r\n\r\n  render() {\r\n    const { newNotif } = this.state;\r\n    return (\r\n      <div className=\"nav-notifications\">\r\n        <a href=\"/notifications\">\r\n          <div className=\"notif-icon\">\r\n            <i className=\"icon icon-notifications\" />\r\n            {newNotif && <div id=\"notif-count\" className=\"notif-count\" />}\r\n          </div>\r\n          <span>Correspondence</span>\r\n        </a>\r\n      </div>\r\n    );\r\n  }\r\n}\r\nexport default NavNotification;\r\n","import React from \"react\";\nimport NavUser from \"./NavUser\";\nimport NavLogo from \"./NavLogo\";\nimport NavRetailer from \"./NavRetailer\";\nimport NavNotification from \"./NavNotification\";\nimport { logout } from \"../../../../api/LoginAPI\";\n\nclass FeatureNavigationTopNavigation extends React.Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      changePassword: {\n        newPass: \"\",\n        confNewPass: \"\",\n        successMessage: \"\",\n        errorMessage: \"\",\n      },\n    };\n  }\n\n  componentDidMount() {\n    const { ShowChangePasswordPrompt } = this.props.fields;\n    if (\n      ShowChangePasswordPrompt &&\n      ShowChangePasswordPrompt.value &&\n      !sessionStorage.getItem(\"promptPassword\")\n    ) {\n      sessionStorage.setItem(\"setPassword\", true);\n      if (window.location.pathname.indexOf(\"profile\") !== 1) {\n        window.location.pathname = \"/profile\";\n      }\n    }\n  }\n\n  editProfilePage = () => {\n    window.location.pathname = \"/profile\";\n  };\n\n  logoutUser = async () => {\n    const response = await logout();\n    if (response) {\n      if (\n        response.status === 200 &&\n        response.data &&\n        response.data.StatusCode === 200\n      ) {\n        window.history.pushState(null, \"Town Square\", window.location.pathname);\n        window.location.pathname = \"home/login\";\n      }\n    }\n  };\n\n  render() {\n    return (\n      <div className=\"top-nav-wrapper\">\n        <NavUser\n          data={this.props.fields}\n          optionSelected={(selected) => {\n            if (selected === \"Your profile\") {\n              this.editProfilePage();\n            } else if (selected === \"Logout\") {\n              this.logoutUser();\n            }\n          }}\n        />\n        <NavLogo data={this.props.fields} />\n        <NavRetailer data={this.props.fields} />\n        <NavNotification />\n      </div>\n    );\n  }\n}\nexport default FeatureNavigationTopNavigation;\n","import React from \"react\";\nimport TagManager from \"react-gtm-module\";\nimport { RichText } from \"@sitecore-jss/sitecore-jss-react\";\nimport BackgroundImage from \"../../../../assets/img/rp-bg.png\";\nimport Input from \"../../../Base/Input\";\nimport Button from \"../../../Base/Button\";\nimport { RecoverPassword } from \"../../../../api/RecoverPasswordAPI\";\nimport logoPlaceholder from \"../../../../assets/img/logoPlaceholder.png\";\n\nclass FeatureRetailerPortalUpdatePassword extends React.Component {\n      constructor(props) {\n            super(props);\n            this.state = {\n                  confirmPassword: null,\n                  password: null,\n                  username: null,\n                  token: null,\n                  browser: \"\",\n                  formSubmitted: false,\n                  errorStatus: false,\n                  errorMessage: \"\",\n                  validationMessage: \"\",\n                  showLoader: false\n            };\n            this.form = React.createRef();\n      }\n\n      componentDidMount() {\n            this.checkBrowser();\n            this.handleServerError();\n            this.decodeUsername();\n            this.decodeToken();\n\n            if (window) {\n                  window.addEventListener(\"resize\", this.handleResize);\n            }\n            if (document) {\n                  this.handleResize();\n            }\n      }\n\n      handleResize = () => {\n            let loginWrapper = \"\";\n\n            if (document) {\n                  loginWrapper = document.querySelector(\".login-container\");\n            }\n\n            if (window.outerWidth >= 992) {\n                  loginWrapper.style.height = \"auto\";\n            } else {\n                  loginWrapper.style.height = window.innerHeight + \"px\";\n            }\n      };\n\n      handleServerError = () => {\n            if(this.props.fields.ValidationMessage && this.props.fields.ValidationMessage.value) {\n                  this.setState({\n                        errorMessage: this.props.fields.ValidationMessage.value,\n                        errorStatus: true\n                  })\n            }\n      }\n      decodeUsername = () => {\n            let params = new URLSearchParams(window.location.search);\n            let user = params.get('user');\n            if (user) {\n                  this.setState({ username: user });\n            } else {\n                  this.setState({\n                        errorStatus: true,\n                        errorMessage: \"Invalid username\"\n\n                  })\n            }\n      }\n\n      decodeToken = () => {\n            let params = new URLSearchParams(window.location.search);\n            let tokenVal = params.get('token');\n            if(this.props.fields.IsValidUrlToken && !this.props.fields.IsValidUrlToken.value) {\n                  this.setState({\n                        errorStatus: true,\n                        errorMessage: this.props.fields.ValidationMessage.value || \"Invalid session\"\n\n                  })\n            } else {\n                  if (tokenVal) {\n                        this.setState({ token: tokenVal });\n                  } else {\n                        this.setState({\n                              errorStatus: true,\n                              errorMessage: \"Invalid session\"\n      \n                        })\n                  }\n            }\n      }\n\n      validateLength = (password) => {\n            const validCharacters = /^[a-zA-Z0-9!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]*$/;\n            if (password.length >= 5 && validCharacters.test(password)) {\n                  return true;\n            } else {\n                  return false;\n            }\n      }\n\n      validatePassword = (password) => {\n            this.setState({ password });\n            const isValidLength = this.validateLength(password);\n            const matchesConfPassword = (password === this.state.confirmPassword);\n            if (!isValidLength || !matchesConfPassword) {\n                  if (!isValidLength) {\n                        this.setState({ validationMessage: \"Password is required to be at least 5 characters in length\" })\n                  } else if (!matchesConfPassword) {\n                        this.setState({ validationMessage: \"Passwords do not match\" })\n                  }\n                  return false;\n            } else {\n                  this.setState({ validationMessage: \"\" });\n                  return true;\n            }\n      }\n\n\n      checkBrowser = () => {\n            if (\n                  navigator &&\n                  navigator.userAgent &&\n                  navigator.userAgent.toUpperCase().indexOf(\"CHROME\") != -1 &&\n                  navigator.vendor &&\n                  navigator.vendor.toUpperCase().indexOf(\"GOOGLE\") != -1\n            ) {\n                  this.setState({ browser: \"chrome\" });\n            } else this.setState({ browser: \"other\" });\n      };\n\n      submitForm = async () => {\n            let data = {\n                  username: this.state.username,\n                  password: this.state.password,\n                  token: this.state.token\n            };\n\n            if (this.validateLength(this.state.password)) {\n                  if (data.password === this.state.confirmPassword) {\n                        const antiForgeryToken = this.props.fields.antiForgeryToken;\n\n                        if (antiForgeryToken) {\n                              data = { ...data, '__RequestVerificationToken': antiForgeryToken.value }\n                        }\n\n                        this.setState({\n                              showLoader: true\n                        })\n\n                        const response = await RecoverPassword(data);\n\n\n                        if (response) {\n                              this.setState({showLoader: false})\n                              if (\n                                    response.status === 200 &&\n                                    response.data &&\n                                    response.data.StatusCode === 200\n                              ) {\n                                    TagManager.dataLayer({\n                                          dataLayer: {\n                                                event: \"successfulPasswordReset\",\n                                          },\n                                          dataLayerName: \"dataLayer\",\n                                    });\n                                    this.setState({\n                                          formSubmitted: true\n                                    })\n                              } else {\n                                    this.setState({\n                                          errorMessage: \"Unable to reset password successfully\",\n                                          errorStatus: true\n                                    })\n                              }\n                        }\n                  }\n            } else {\n                  this.setState({\n                        errorStatus: true,\n                        errorMessage: \"Chosen password is invalid\"\n                  })\n            }\n\n\n      };\n\n      onEnterKeyPress = (event) => {\n            if (event.which === 13 || event.keyCode === 13 || event.key === \"Enter\") {\n                  this.submitForm();\n            }\n      };\n\n      render() {\n            const {\n                  // TopNavigationLinks = null,\n                  SiteLogo = null,\n                  SiteLogoClassName = null,\n                  UpdatePasswordPageBlurb = null,\n                  FooterBlurb = null,\n            } = this.props.fields || {};\n\n            let mainLink =\n                  SiteLogo &&\n                        SiteLogo.fields &&\n                        SiteLogo.fields.Link &&\n                        SiteLogo.fields.Link.value\n                        ? SiteLogo.fields.Link.value\n                        : {};\n            const logo = (SiteLogoClassName && SiteLogoClassName.value) || \"\";\n            let blurb = UpdatePasswordPageBlurb && UpdatePasswordPageBlurb.value ? UpdatePasswordPageBlurb : \"\";\n            let footerBlurb = FooterBlurb && FooterBlurb.value ? FooterBlurb : \"\";\n\n            return (\n                  <div className=\"login-container\">\n                        <img className=\"bg-image\" src={BackgroundImage} alt=\"Background\" />\n                        <div className=\"container\">\n                              <div className=\"header-wrapper\">\n                                    <div className=\"header-logo\">\n                                    </div>\n                              </div>\n                              <div className=\"form-logo\">\n                                    {mainLink ? (\n                                          <a {...mainLink}>\n                                                <img\n                                                      alt={\"sitecore-logo\"}\n                                                      src={logoPlaceholder}\n                                                      data-src={logo}\n                                                      className=\"lazyload form-logo-image\"\n                                                />\n                                          </a>\n                                    ) : (\n                                          <img\n                                                alt={\"sitecore-logo\"}\n                                                src={logoPlaceholder}\n                                                data-src={logo}\n                                                className=\"lazyload form-logo-image\"\n                                          />\n                                    )}\n                              </div>\n                              <div className=\"login-wrapper\">\n                                    <div className=\"form-blurb\">\n                                          <RichText field={blurb} />\n                                    </div>\n                                    <div className=\"form-wrapper\">\n                                          {this.state.showLoader ?\n                                                (<>\n                                                      <div className=\"loader-wrapper\">\n                                                            <div className=\"loader\">\n                                                            </div>\n                                                      </div>\n                                                </>) :\n                                                (this.state.errorStatus ? (\n                                                      <>\n                                                            <div className=\"form-title\">{this.state.errorMessage}</div>\n                                                            <div className=\"form-controls-wrapper\">\n                                                                  <a\n                                                                        className=\"form-forgot-password\"\n                                                                        href=\"/login\"\n                                                                  >\n                                                                        Back to Login &gt;\n                                                                  </a>\n                                                            </div>\n                                                      </>)\n                                                      :\n                                                      ((!this.setState.errorStatus && !this.state.formSubmitted) &&\n                                                            <>\n                                                                  <div className=\"form-title\">Create your new password</div>\n                                                                  <div className=\"form-group\">\n                                                                        <Input\n                                                                              type=\"password\"\n                                                                              placeholder=\"New Password\"\n                                                                              onInputChange={(confirmPassword) => this.setState({ confirmPassword })}\n                                                                        />\n                                                                        <Input\n                                                                              type=\"password\"\n                                                                              placeholder=\"New Password\"\n                                                                              onInputChange={(confirmPassword) => this.setState({ confirmPassword })}\n                                                                              style={{ display: \"none\" }}\n                                                                        />\n                                                                  </div>\n                                                                  <div className=\"form-group\">\n                                                                        {this.state.browser === \"chrome\" && (\n                                                                              <Input\n                                                                                    type=\"password\"\n                                                                                    placeholder=\"Confirm Password\"\n                                                                                    onInputChange={(password) => this.validatePassword(password)}\n                                                                                    onInputKeyDown={(event) => this.onEnterKeyPress(event)}\n                                                                              />\n                                                                        )}\n                                                                        {this.state.browser === \"other\" && (\n                                                                              <Input\n                                                                                    type=\"password\"\n                                                                                    placeholder=\"Confirm Password\"\n                                                                                    onInputChange={(password) => this.validatePassword(password)}\n                                                                                    onInputKeyDown={(event) => this.onEnterKeyPress(event)}\n                                                                                    autoComplete=\"new-password\"\n                                                                              />\n                                                                        )}\n                                                                  </div>\n                                                                  <div className=\"form-submit\">\n                                                                        <Button\n                                                                              onClick={() => this.submitForm()}\n                                                                              disabled={(!this.state.password && !this.state.confirmPassword) || (this.state.password !== this.state.confirmPassword) || (this.state.password.length < 5)}\n                                                                              size=\"full\"\n                                                                              type=\"submit\"\n                                                                              color=\"light-green\"\n                                                                        >\n                                                                              Save Password\n                                                                        </Button>\n                                                                        <div className=\"form__label\" style={{ marginTop: '10px' }}> {this.state.validationMessage}</div>\n                                                                  </div>\n                                                            </>)\n                                                )}\n                                          {this.state.formSubmitted && !this.state.errorStatus &&\n                                                <>\n                                                      <div className=\"form-title\">Password updated successfully</div>\n                                                      <div className=\"form-controls-wrapper\">\n                                                            <a\n                                                                  className=\"form-forgot-password\"\n                                                                  href=\"/login\"\n                                                            >\n                                                                  Back to Login &gt;\n                                                            </a>\n                                                      </div>\n                                                </>\n                                          }\n\n                                    </div>\n                              </div>\n                              {footerBlurb && (\n                                    <div className=\"form-footer\">\n                                          <RichText field={footerBlurb} />\n                                    </div>\n                              )}\n                        </div>\n                  </div>\n            );\n      }\n}\n\nexport default FeatureRetailerPortalUpdatePassword;\n","import BaseURL from \"./BaseURL\";\r\n\r\nexport const RecoverPassword = (data) => {\r\n    return BaseURL.post(\"/account/RecoverPassword\", { ...data });\r\n  };","import React, { Component, Fragment } from \"react\";\nimport Select from \"react-select\";\nimport axios from \"axios\";\nimport DOMPurify from 'dompurify';\nimport { getCreateEditUser, getRetailerList } from \"../../../../api/UsersAPI\";\nimport { validate } from \"../../../../helper/UserHelper\";\nimport FormInput from \"../../../Base/FormInput\";\nimport RadioButton from \"../../../Base/RadioButton\";\nimport FormErrorMessage from \"../../../Base/FormErrorMessage\";\n\n// import getRetailerListData from \"./getRetailerListData.json\";\n// import getCreateEditUserData from \"./getCreateEditUserData.json\";\n\nclass FeatureRetailerPortalUser extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      formData: {\n        name: null,\n        email: null,\n        centres: [],\n        retailers: [],\n        permission: null,\n      },\n      showLoader: true,\n      isRetailersDisabled: false,\n      isCentresDisabled: false,\n      retailersList: [],\n      centresList: [],\n      disableBtn: false,\n      noOptionsMessage: \"Loading retailers. Please wait.\",\n      formError: {},\n      formErrorMessage: \"\",\n      showErrorMessage: false,\n    };\n  }\n\n  componentDidMount() {\n    this.getRetailerList();\n    this.getData();\n    this.handleFormData();\n  }\n\n  getData = async () => {\n    const { Username } = this.props;\n    const response = await getCreateEditUser({ Username });\n    // const response = {\n    //   data: getCreateEditUserData\n    // }\n    if (response && response.data) {\n      const { FullName, Centres, EmailAddress, Retailers, Permission } =\n        response.data.User || {};\n      const { CentreList } = response.data;\n\n      let centresList = [];\n      let centres = [];\n      let retailers = [];\n\n      if (Centres && Centres.length) {\n        Centres.map((centre) => {\n          const { CentreName, CentreId } = centre;\n          centres.push({ value: CentreId.value, label: CentreName.value });\n        });\n      }\n\n      if (Retailers && Retailers.length) {\n        Retailers.map((retailer) => {\n          const { RetailerName, RetailerId } = retailer;\n          retailers.push({\n            value: RetailerId.value,\n            label: RetailerName.value,\n          });\n        });\n      }\n\n      if (CentreList && CentreList.length) {\n        CentreList.map((centre) => {\n          const { CentreName, CentreId } = centre;\n          centresList.push({ value: CentreId.value, label: CentreName.value });\n        });\n      }\n\n      this.setState(\n        {\n          formData: {\n            name: (FullName && FullName.value) || \"\",\n            email: (EmailAddress && EmailAddress.value) || \"\",\n            centres,\n            retailers,\n            permission:\n              (Permission &&\n                Permission.PermissionValue &&\n                Permission.PermissionValue.value) ||\n              \"\",\n          },\n          centresList,\n          showLoader: false,\n        },\n        () =>\n          Permission &&\n          Permission.PermissionValue &&\n          Permission.PermissionValue.value &&\n          this.handlePermission(Permission.PermissionValue.value)\n      );\n    } else {\n      this.setState({ showLoader: false });\n    }\n  };\n\n  getRetailerList = async () => {\n    let retailers = [];\n    try {\n      const response = await getRetailerList();\n      if (response && response.data && response.data.Retailers) {\n        response.data.Retailers.map((retailer) => {\n          const { RetailerName, RetailerId } = retailer;\n          retailers.push({\n            value: RetailerId.value,\n            label: RetailerName.value,\n          });\n        });\n      }\n      this.setState({ retailersList: retailers });\n    } catch (e) {\n      console.error(\"Get Retailer List Error: \" + e.response.statusText);\n      // const response = {\n      //   data: getRetailerListData\n      // };\n      // if (response && response.data && response.data.Retailers) {\n      //   response.data.Retailers.map((retailer) => {\n      //     const { RetailerName, RetailerId } = retailer;\n      //     retailers.push({ value: RetailerId.value, label: RetailerName.value });\n      //   });\n      // }\n      // this.setState({ retailersList: retailers });\n    }\n  };\n\n  getOptions = (options) => {\n    let finalOptions = [];\n    options.map((item) => {\n      const {\n        PermissionName: name = null,\n        PermissionValue: summary = null,\n      } = item.fields;\n      finalOptions.push({\n        Id: summary,\n        Name: name,\n      });\n    });\n    return finalOptions;\n  };\n\n  handleFormUpdate = (value) => {\n    this.setState({\n      formData: {\n        ...this.state.formData,\n        ...value,\n      },\n    });\n  };\n\n  validateForm = async () => {\n    this.setState(\n      {\n        disableBtn: true,\n      },\n      this.handleFormData\n    );\n    const { isRetailersDisabled, isCentresDisabled } = this.state;\n\n    let formError = validate(\n      this.state.formData,\n      !isRetailersDisabled,\n      !isCentresDisabled\n    );\n    let response;\n    if (Object.entries(formError).length !== 0) {\n      this.setState(\n        {\n          formError,\n          disableBtn: false,\n          showErrorMessage: true,\n          formErrorMessage: \"Please fill out all mandatory fields marked below\",\n        },\n        this.handleFormData\n      );\n      this.triggerBackToTop();\n      response = {\n        isSuccess: false,\n      };\n    } else {\n      this.setState(\n        {\n          formError,\n          disableBtn: false,\n          showErrorMessage: false,\n        },\n        this.handleFormData\n      );\n      response = await this.saveForm().then((result) => {\n        if (result.isSuccess) {\n          return { isSuccess: true };\n        }\n      });\n    }\n    return response;\n  };\n\n  saveForm = async () => {\n    const { name, email, retailers, centres, permission } = this.state.formData;\n    const { Username } = this.props;\n    const antiForgeryToken = this.props.fields.antiForgeryToken;\n    \n    const formData = new FormData();\n    formData.append(\"fullName\", name);\n    formData.append(\"email\", email);\n    if (retailers && retailers.length) {\n      retailers.map((retailer) => {\n        formData.append(\"retailers\", retailer.value);\n      });\n    }\n    if (centres && centres.length) {\n      centres.map((centre) => {\n        formData.append(\"centres\", centre.value);\n      });\n    }\n    formData.append(\"permission\", permission);\n    if(antiForgeryToken) {\n      formData.append(antiForgeryToken.name, antiForgeryToken.value);\n    }\n\n    const url = `/api/sitecore/user/SaveUser?username=${Username}`;\n\n    try {\n      let response = await axios({\n        method: \"POST\",\n        url,\n        data: formData,\n      });\n\n      if (response && response.data) {\n        if (response.data.IsSuccess && response.data.IsSuccess.value) {\n          this.setState({\n            formErrorMessage: \"\",\n            showErrorMessage: false,\n          });\n          return {\n            isSuccess: true,\n            successMessage: response.data.Message.value,\n          };\n        } else {\n          this.setState({\n            formErrorMessage: response.data.Message.value,\n            showErrorMessage: true,\n          });\n          return {\n            isSuccess: false,\n          };\n        }\n      } else {\n        this.setState({\n          formErrorMessage: \"Update user failed. Please try again\",\n          showErrorMessage: true,\n        });\n        this.triggerBackToTop();\n        return {\n          isSuccess: false,\n        };\n      }\n    } catch (e) {\n      this.setState({\n        formErrorMessage: \"Update user failed. Please try again\",\n        showErrorMessage: true,\n      });\n      console.log(e);\n      this.triggerBackToTop();\n      return {\n        isSuccess: false,\n      };\n    }\n  };\n\n  triggerBackToTop = () => {\n    let backToTop;\n    if (document) {\n      backToTop = document.querySelector(\".form__modal--back-to-top-button\");\n      if (backToTop) {\n        backToTop.click();\n      }\n    }\n  };\n\n  handleFormData = () => {\n    this.props.handleFormData(this.state.disableBtn, this.validateForm);\n  };\n\n  handlePermission = (permission) => {\n    if (permission.indexOf(\"L1\") > -1) {\n      this.setState(\n        {\n          isRetailersDisabled: true,\n          isCentresDisabled: true,\n        },\n        () =>\n          this.setState({\n            formData: {\n              ...this.state.formData,\n              retailers: null,\n              centres: null,\n            },\n          })\n      );\n    } else if (permission.indexOf(\"L2\") > -1) {\n      this.setState(\n        { isRetailersDisabled: true, isCentresDisabled: false },\n        () => this.handleFormUpdate({ retailers: null })\n      );\n    } else {\n      this.setState({ isRetailersDisabled: false, isCentresDisabled: false });\n    }\n    this.handleFormUpdate({ permission });\n  };\n\n  responseText = (field, type) => {\n    return (\n      field && (\n        <div\n          className={`response-text error ${\n            type && type.length ? \"with-items\" : \"\"\n          }`}\n        >\n          {field}\n        </div>\n      )\n    );\n  };\n\n  noOptionsMessage = () => {\n    const { retailersList } = this.state;\n    let message = \"Loading...\";\n    if (retailersList && retailersList.length) {\n      message = \"No options\";\n    }\n    return <div className=\"loading-text\">{message}</div>;\n  };\n\n  formatOptionLabelRetailer = ({ label }, { inputValue }) => {\n    let highlighted = label;\n    if (inputValue && inputValue.length > 1) {\n      highlighted = label.replace(\n        new RegExp(inputValue, \"gi\"),\n        (highlighted) => `<b>${highlighted}</b>`\n      );\n    }\n    return <span dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(highlighted) }} />;\n  };\n\n  formatOptionLabelCentre = ({ label }, { inputValue }) => {\n    let highlighted = label;\n    if (inputValue && inputValue.length > 1) {\n      highlighted = label.replace(\n        new RegExp(inputValue, \"gi\"),\n        (highlighted) => `<b>${highlighted}</b>`\n      );\n    }\n    return <span dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(highlighted) }} />;\n  };\n\n  render() {\n    const { name, email, centres, retailers, permission } = this.state.formData;\n    const {\n      centresList,\n      retailersList,\n      isRetailersDisabled,\n      isCentresDisabled,\n      formError,\n      showLoader,\n      showErrorMessage,\n      formErrorMessage,\n    } = this.state;\n    const { PermissionLevels } = this.props.fields || {};\n\n    return (\n      <div className=\"user-container\">\n        {showLoader && (\n          <div className=\"loader-wrapper container\">\n            <div className=\"loader\" />\n          </div>\n        )}\n        {showErrorMessage && <FormErrorMessage error={formErrorMessage} />}\n        {!showLoader && (\n          <Fragment>\n            <div className=\"user-form__title\">\n              {this.props.Username ? \"Edit user\" : \"New user\"}\n            </div>\n            <div className=\"form__container\">\n              <label className=\"form__header\">User details</label>\n              <FormInput\n                type=\"text\"\n                label=\"Name\"\n                error={formError.name}\n                value={name}\n                required\n                onInputChange={(name) => {\n                  this.handleFormUpdate({ name });\n                }}\n              />\n              <FormInput\n                type=\"email\"\n                label=\"Email address\"\n                required\n                value={email}\n                error={formError.email}\n                onInputChange={(email) => {\n                  this.handleFormUpdate({ email });\n                }}\n              />\n              <div className=\"form-group\">\n                <div className=\"form__label\">Retailers</div>\n                <div\n                  className={`react-select-container ${\n                    isRetailersDisabled ? \"select-disabled\" : \"\"\n                  }`}\n                >\n                  <Select\n                    isMulti\n                    className={formError.retailers ? \"error\" : \"\"}\n                    placeholder=\"Search retailers\"\n                    options={retailersList}\n                    value={retailers}\n                    onChange={(retailers) =>\n                      this.handleFormUpdate({ retailers })\n                    }\n                    components={{ NoOptionsMessage: this.noOptionsMessage }}\n                    theme={(theme) => ({\n                      ...theme,\n                      colors: {\n                        ...theme.colors,\n                        primary25: \"#f5f5f6\",\n                      },\n                    })}\n                    isClearable={false}\n                    backspaceRemovesValue={false}\n                    formatOptionLabel={this.formatOptionLabelRetailer}\n                    isDisabled={isRetailersDisabled}\n                  />\n                  {this.responseText(formError.retailers, retailers)}\n                </div>\n              </div>\n              <div className=\"form__label\">Centres</div>\n              <div\n                className={`react-select-container ${\n                  isCentresDisabled ? \"select-disabled\" : \"\"\n                }`}\n              >\n                <Select\n                  isMulti\n                  className={formError.centres ? \"error\" : \"\"}\n                  placeholder=\"Select centres\"\n                  options={centresList}\n                  value={centres}\n                  onChange={(centres) => this.handleFormUpdate({ centres })}\n                  theme={(theme) => ({\n                    ...theme,\n                    colors: {\n                      ...theme.colors,\n                      primary25: \"#f5f5f6\",\n                    },\n                  })}\n                  isClearable={false}\n                  backspaceRemovesValue={false}\n                  formatOptionLabel={this.formatOptionLabelCentre}\n                  isDisabled={isCentresDisabled}\n                />\n                {this.responseText(formError.centres, centres)}\n              </div>\n            </div>\n            <div className=\"form__container is-permission\">\n              <div className=\"h2-bold\">{\"Permissions\"}</div>\n              <div className=\"form__label\">\n                {\n                  \"User can manage events, offers, articles & store information for:\"\n                }\n              </div>\n              <RadioButton\n                defaultSelected={permission}\n                radioGroupName=\"PermissionList\"\n                options={this.getOptions(PermissionLevels)}\n                onChange={(Source) => {\n                  this.handlePermission(Source);\n                }}\n              />\n              {this.responseText(formError.permission)}\n            </div>\n          </Fragment>\n        )}\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalUser;\n","const isEmpty = (value) => {\r\n  return value ? false : true;\r\n};\r\n\r\nexport const validate = (state, isRetailerRequired, isCentreRequired) => {\r\n  let retailerRule = \"not-required\";\r\n  let centreRule = \"not-required\";\r\n  if (isRetailerRequired) {\r\n    retailerRule = \"required-select\";\r\n  }\r\n  if (isCentreRequired) {\r\n    centreRule = \"required-select\";\r\n  }\r\n  let list = [\r\n    {\r\n      name: \"name\",\r\n      value: state.name,\r\n      rules: \"required\",\r\n    },\r\n    {\r\n      name: \"email\",\r\n      value: state.email,\r\n      rules: \"required\",\r\n    },\r\n    {\r\n      name: \"centres\",\r\n      value: state.centres,\r\n      rules: centreRule,\r\n    },\r\n    {\r\n      name: \"retailers\",\r\n      value: state.retailers,\r\n      rules: retailerRule,\r\n    },\r\n    {\r\n      name: \"permission\",\r\n      value: state.permission,\r\n      rules: \"required\",\r\n    },\r\n  ];\r\n\r\n  let result = {};\r\n  list.forEach((element) => {\r\n    if (element.rules === \"required\") {\r\n      let message = null;\r\n      switch (element.name) {\r\n        case \"name\":\r\n          message = \"Please enter a name\";\r\n          break;\r\n        case \"email\":\r\n          message = \"Please enter an email address\";\r\n          break;\r\n        case \"permission\":\r\n          message = \"Please select a permission level\";\r\n          break;\r\n        default:\r\n          message = null;\r\n      }\r\n      if (isEmpty(element.value)) {\r\n        result[element.name] = message;\r\n      }\r\n\r\n      if (element.value && element.value.length && element.value.length < 1) {\r\n        result[element.name] = message;\r\n      }\r\n\r\n      if (element.name === \"email\" && element.value && element.value.length) {\r\n        if (!(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)+$/.test(element.value))) {\r\n          result[element.name] = \"Please enter a valid email address\";\r\n        }\r\n      }\r\n    }\r\n    if (element.rules === \"required-select\") {\r\n      let message = null;\r\n      switch (element.name) {\r\n        case \"centres\":\r\n          message = \"Please select a centre\";\r\n          break;\r\n        case \"retailers\":\r\n          message = \"Please select a retailer\";\r\n          break;\r\n        default:\r\n          message = null;\r\n      }\r\n      if (element.value && element.value.length) {\r\n      } else {\r\n        result[element.name] = message;\r\n      }\r\n    }\r\n    //Other Validation Rules\r\n  });\r\n  return result;\r\n};\r\n","import React, { Component } from \"react\";\nimport avatar from \"../../../../assets/icons/png/author.png\";\nimport { getUsers, deleteUser } from \"../../../../api/UsersAPI\";\nimport ReactPaginate from \"react-paginate\";\nimport PageHeader from \"../../../Base/PageHeader\";\nimport CustomFilter from \"../../../Base/CustomFilter\";\nimport NoResultMessage from \"../../../Base/NoResultMessage\";\nimport ListItem from \"../../../Base/ListItem\";\nimport RadioButton from \"../../../Base/RadioButton\";\nimport Popup from \"../../../Base/Popup\";\nimport PopupAction from \"../../../Base/Popup/PopupAction\";\nimport SuccessMessage from \"../../../Base/SuccessMessage\";\nimport FormModal from \"../../../Base/FormModal\";\nimport FeatureRetailerPortalUser from \"../User\";\nimport { addClassLazyload } from \"../../../../helper/AddClassLazyloadHelper\";\nimport { scrollToTop } from \"../../../../helper/ScrollHelper\";\nimport { removeActiveState } from \"../../../../helper/RemoveActiveState\";\nimport { hideBackToTop } from \"../../../../helper/HideBackToTopHelper\";\n\n// import getUsersData from \"./getUsersData.json\";\n\nclass FeatureRetailerPortalUsers extends Component {\n  constructor(props) {\n    super(props);\n    this.state = {\n      activePageNum: 0,\n      totalPageNumber: null,\n      totalResults: null,\n      showPagination: false,\n      showLoader: true,\n      showDeleteModal: false,\n      showMiniModal: false,\n      showFormModal: false,\n      disableCancelBtn: false,\n      disableDeleteBtn: false,\n      users: null,\n      userName: null,\n      name: null,\n      formModalData: null,\n      filter: \"all\",\n      showFilter: false,\n      modalMessage: null,\n      hideIcon: true,\n      isDocumentReady: false,\n      filteredItems: null,\n      itemCount: null,\n      itemTotal: null,\n      paginationRange: 9,\n    };\n  }\n\n  componentDidMount() {\n    if (window) {\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n    if (document) {\n      this.setState({ isDocumentReady: true }, this.handleResize());\n    }\n    let params = {\n      pageNumber: 1,\n    };\n    this.getData(params);\n  }\n\n  handleResize = () => {\n    if (window.outerWidth >= 768) {\n      this.setState({\n        paginationRange: 9,\n      });\n    } else {\n      this.setState({\n        paginationRange: 3,\n      });\n    }\n  };\n\n  getData = async (params) => {\n    this.setState({\n      showLoader: true,\n    });\n\n    try {\n      const response = await getUsers(params);\n      if (response && response.data) {\n        const { Users, TotalPageNumber, TotalResults } = response.data;\n        this.setState(\n          {\n            users: Users,\n            filteredItems: Users,\n            totalPageNumber: TotalPageNumber.value,\n            totalResults: TotalResults.value,\n            itemTotal: TotalResults.value,\n            showPagination: true,\n            showLoader: false,\n          },\n          () => {\n            this.handleFilter(0);\n          }\n        );\n      }\n    } catch (e) {\n      console.error(\"Get User Data Error: \" + e.response.statusText);\n      // const response = {\n      //   data: getUsersData\n      // };\n      // if (response && response.data) {\n      //   const { Users, TotalPageNumber, TotalResults } = response.data;\n      //   this.setState(\n      //     {\n      //       users: Users,\n      //       filteredItems: Users,\n      //       totalPageNumber: TotalPageNumber.value,\n      //       totalResults: TotalResults.value,\n      //       itemTotal: TotalResults.value,\n      //       showPagination: true,\n      //       showLoader: false,\n      //     },\n      //     () => {\n      //       this.handleFilter(0);\n      //     }\n      //   );\n      // }\n    }\n  };\n\n  setFilter = (levels, userLevel) => {\n    let userList = [\n      {\n        Id: {\n          value: \"all\",\n        },\n        Name: {\n          value: \"All\",\n        },\n        Description: {\n          value: null,\n        },\n      },\n    ];\n\n    levels.map((el) => {\n      const {\n        FilterId: name = null,\n        FilterDescription: summary = null,\n      } = el.fields;\n      if (name && name.value && summary && summary.value) {\n        userList.push({\n          Id: { value: name.value },\n          Name: { value: name.value },\n          Description: { value: summary.value },\n        });\n      }\n    });\n\n    if (userLevel && userLevel.value) {\n      if (userLevel.value.indexOf(\"2\") > -1) {\n        userList = userList.filter(\n          (el) => el && el.Id && el.Id.value && el.Id.value.indexOf(\"1\") < 0\n        );\n      } else if (userLevel.value.indexOf(\"3\") > -1) {\n        userList = userList.filter(\n          (el) =>\n            el &&\n            el.Id &&\n            el.Id.value &&\n            el.Id.value.indexOf(\"1\") < 0 &&\n            el.Id.value.indexOf(\"2\") < 0\n        );\n      }\n    }\n    return userList;\n  };\n\n  renderDelete = () => {\n    const { userName, name, disableCancelBtn, disableDeleteBtn } = this.state;\n    const message =\n      \"Are you sure you want to delete the user, \" +\n      name +\n      \"? You can’t undo this.\";\n\n    return (\n      <Popup>\n        <PopupAction\n          label={{ value: `Delete user?` }}\n          description={{ value: message }}\n          icon=\"trash-2\"\n          iconBgColor=\"#d83b42\"\n          secondaryBtn=\"Cancel\"\n          disabledSecondaryBtn={disableCancelBtn}\n          secondaryBtnOnClick={() => this.setState({ showDeleteModal: false })}\n          primaryBtn=\"Delete user\"\n          primaryBtnOnClick={() => this.deleteUser(userName)}\n          primaryBtnColor=\"red\"\n          disabledPrimaryBtn={disableDeleteBtn}\n        />\n      </Popup>\n    );\n  };\n\n  renderMiniModal = () => {\n    const { modalMessage, hideIcon } = this.state;\n    return (\n      <SuccessMessage\n        label={modalMessage}\n        hideIcon={hideIcon}\n        handleShowSuccess={(showMiniModal) => {\n          this.setState({\n            showMiniModal,\n          });\n        }}\n      />\n    );\n  };\n\n  deleteUser = async (userName) => {\n    this.setState({\n      disableCancelBtn: true,\n      disableDeleteBtn: true,\n    });\n    try {\n      let response = await deleteUser({ userName });\n      if (response.status === 200 && response.data) {\n        const { IsSuccess = null, Message = null } = response.data;\n        if (IsSuccess && IsSuccess.value) {\n          this.setState(\n            {\n              modalMessage: Message.value,\n              showDeleteModal: false,\n              disableCancelBtn: false,\n              disableDeleteBtn: false,\n              showMiniModal: true,\n              hideIcon: false,\n            },\n            () => {\n              this.resetState();\n              scrollToTop();\n            }\n          );\n        } else {\n          this.setState(\n            {\n              modalMessage: Message.value,\n              showDeleteModal: false,\n              disableCancelBtn: false,\n              disableDeleteBtn: false,\n              showMiniModal: true,\n              hideIcon: true,\n            },\n            () => scrollToTop()\n          );\n        }\n      } else {\n        this.setState(\n          {\n            modalMessage: \"Something went wrong. Please try again.\",\n            showDeleteModal: false,\n            disableCancelBtn: false,\n            disableDeleteBtn: false,\n            showMiniModal: true,\n            hideIcon: true,\n          },\n          () => scrollToTop()\n        );\n      }\n    } catch (e) {\n      this.setState(\n        {\n          modalMessage: \"Something went wrong. Please try again.\",\n          showDeleteModal: false,\n          disableCancelBtn: false,\n          disableDeleteBtn: false,\n          showMiniModal: true,\n          hideIcon: true,\n        },\n        () => scrollToTop()\n      );\n    }\n  };\n\n  handleFilter = (page) => {\n    const { filter, users, totalPageNumber } = this.state;\n    if (users && users.length) {\n      let unfiltered = users;\n      if (filter !== \"all\") {\n        unfiltered = unfiltered.filter(\n          (item) => item && item.Permission && item.Permission.value === filter\n        );\n      }\n\n      const currentPage = page + 1;\n      const until = currentPage * 20;\n      const from = until - 20;\n      const list = unfiltered.slice(from, until);\n\n      const listLength = unfiltered && unfiltered.length;\n      let itemCount = from + 1 + \" – \" + until;\n      if (currentPage == totalPageNumber || listLength < 21) {\n        itemCount = from + 1 + \" – \" + listLength;\n      }\n      if (from + 1 == listLength) {\n        itemCount = listLength;\n      }\n\n      this.setState({\n        filteredItems: list,\n        itemCount,\n        totalPageNumber: listLength ? Math.ceil(listLength / 20) : null,\n        itemTotal: listLength || null,\n      });\n    }\n    addClassLazyload(\"users-content\");\n    removeActiveState();\n    scrollToTop();\n  };\n\n  handlePaginationClick = (data) => {\n    this.setState(\n      {\n        activePageNum: data.selected,\n      },\n      () => scrollToTop()\n    );\n    this.handleFilter(data.selected);\n    addClassLazyload(\"users-content\");\n    removeActiveState();\n  };\n\n  renderFormModal = () => {\n    const { disableBtn, onClickSave } = this.state.formModalData || {};\n\n    const { showFormModal, userName } = this.state || {};\n\n    hideBackToTop(showFormModal);\n    \n    return (\n      <FormModal\n        showModal={showFormModal}\n        label={\n          <div style={{ whiteSpace: \"pre\" }}>\n            Manage users &nbsp;&nbsp;&nbsp;»&nbsp;&nbsp;&nbsp;{\" \"}\n            {userName ? \"Edit\" : \"New\"} user\n          </div>\n        }\n        closeOnClick={() => this.setState({ showFormModal: false })}\n        primaryBtn=\"Save\"\n        primaryBtnOnClick={() => this.handleUser(onClickSave)}\n        disabledPrimaryBtn={disableBtn}\n        secondaryBtn=\"Cancel\"\n        secondaryBtnOnClick={() => this.setState({ showFormModal: false })}\n      >\n        {showFormModal && (\n          <FeatureRetailerPortalUser\n            Username={userName}\n            fields={this.props.fields}\n            antiForgeryToken={this.props.fields.antiForgeryToken}\n            handleFormData={(disableBtn, onClickSave) => {\n              this.handleFormUpdate(disableBtn, onClickSave);\n            }}\n          />\n        )}\n      </FormModal>\n    );\n  };\n\n  handleFormUpdate = (disableBtn, onClickSave) => {\n    this.setState({\n      formModalData: {\n        ...this.state.formModalData,\n        disableBtn,\n        onClickSave,\n      },\n    });\n  };\n\n  handleUser = (onClickUpdate) => {\n    onClickUpdate().then((result) => {\n      if (result && result.isSuccess) {\n        setTimeout(() => {\n          this.setState(\n            {\n              showFormModal: false,\n              modalMessage: result.successMessage,\n              showMiniModal: true,\n              hideIcon: false,\n            },\n            () => {\n              this.resetState();\n              scrollToTop();\n            }\n          );\n        }, 2000);\n      }\n    });\n  };\n\n  renderPagination = () => {\n    const { totalPageNumber, paginationRange } = this.state;\n    return (\n      totalPageNumber &&\n      totalPageNumber > 1 && (\n        <ReactPaginate\n          previousLabel={\n            <div>\n              <i className=\"icon icon-chevron-outline-left\" />\n              <span>{\"Previous\"}</span>\n            </div>\n          }\n          nextLabel={\n            <div>\n              <i className=\"icon icon-chevron-outline-right\" />\n              <span>{\"Next\"}</span>\n            </div>\n          }\n          breakLabel={\"...\"}\n          breakClassName={\"break-me\"}\n          pageCount={totalPageNumber}\n          marginPagesDisplayed={0}\n          pageRangeDisplayed={paginationRange}\n          onPageChange={this.handlePaginationClick}\n          containerClassName={\"pagination\"}\n          subContainerClassName={\"pages pagination\"}\n          activeClassName={\"active\"}\n        />\n      )\n    );\n  };\n\n  resetState = () => {\n    this.setState(\n      {\n        filter: \"all\",\n        showLoader: true,\n        showFilter: false,\n        totalResults: null,\n      },\n      () => {\n        let params = {\n          pageNumber: 1,\n        };\n        setTimeout(() => this.getData(params), 2000);\n      }\n    );\n  };\n\n  renderList = () => {\n    const { NoUsersText } = this.props.fields;\n    const {\n      filteredItems,\n      showPagination,\n      itemTotal,\n      itemCount,\n      totalResults,\n      totalPageNumber,\n    } = this.state;\n    return (\n      <div className=\"users-content\">\n        {filteredItems && filteredItems.length ? (\n          <div className=\"list-wrapper\">\n            {filteredItems.map((item, index) => {\n              const {\n                UserName,\n                FullName,\n                Centres,\n                Retailers,\n                Permission,\n                ProfilePicture,\n              } = item;\n              return (\n                <ListItem\n                  key={`itemId-${index}`}\n                  logoSrc={\n                    ProfilePicture &&\n                      ProfilePicture.value &&\n                      ProfilePicture.value.src\n                      ? ProfilePicture.value.src\n                      : avatar\n                  }\n                  label={Retailers}\n                  title={FullName}\n                  description={Centres}\n                  status={Permission}\n                  btnOne={{\n                    icon: \"trash-2\",\n                    color: \"secondary\",\n                    tooltip: \"Delete\",\n                  }}\n                  btnOneOnClick={() => {\n                    this.setState({\n                      showDeleteModal: true,\n                      userName: UserName && UserName.value,\n                      name: FullName && FullName.value,\n                    });\n                  }}\n                  listItemOnClick={(e) => {\n                    if (\n                      !/btn|icon/.test(e.target.className) ||\n                      /js-btn-edit|icon-edit/.test(e.target.className)\n                    ) {\n                      this.setState({\n                        showFormModal: true,\n                        userName: UserName && UserName.value,\n                      });\n                    }\n                  }}\n                />\n              );\n            })}\n            {itemTotal && itemCount && (\n              <div\n                className={`list-count ${\n                  !(totalPageNumber && totalPageNumber > 1)\n                    ? \"no-pagination\"\n                    : \"\"\n                  }`}\n              >\n                Showing {itemCount} of {itemTotal}\n              </div>\n            )}\n            {showPagination && <div>{this.renderPagination()}</div>}\n            <div />\n          </div>\n        ) : (\n            <NoResultMessage\n              label={\n                totalResults\n                  ? \"No users found.\"\n                  : (NoUsersText && NoUsersText.value) || \"No users found.\"\n              }\n            />\n          )}\n      </div>\n    );\n  };\n\n  render() {\n    const {\n      PermissionLevels: levels = null,\n      UserLevel: userLevel = null,\n    } = this.props.fields;\n    const {\n      showLoader,\n      showDeleteModal,\n      isDocumentReady,\n      showFilter,\n      showMiniModal,\n      totalResults,\n    } = this.state;\n    return (\n      <div className={`users-container ${showMiniModal ? \"has-success-message\" : \"\"}`}>\n        <PageHeader\n          title={{ value: \"Manage users\" }}\n          primaryBtnLabel=\"New user\"\n          primaryBtnClassName=\"btn-form-create\"\n          primaryBtnOnClick={() =>\n            this.setState({ showFormModal: true, userName: null })\n          }\n          secondaryBtnLabel={\n            totalResults && totalResults > 1 && levels && levels.length\n              ? \"Filter\"\n              : null\n          }\n          secondaryBtnClassName=\"filter-btn\"\n          secondaryBtnOnClick={() => this.setState({ showFilter: true })}\n        />\n        {showDeleteModal && this.renderDelete()}\n        {isDocumentReady && this.renderFormModal()}\n\n        {isDocumentReady && (\n          <CustomFilter\n            showFilter={showFilter}\n            onCloseFilter={() => this.setState({ showFilter: false })}\n          >\n            <div className=\"custom-filter__group\">\n              <div className=\"custom-filter__label\">\n                Filter by user permissions\n              </div>\n              {totalResults && totalResults > 1 && levels && levels.length && (\n                <RadioButton\n                  defaultSelected=\"all\"\n                  options={this.setFilter(levels, userLevel)}\n                  radioGroupName=\"user-management\"\n                  onChange={(id) =>\n                    this.setState({ filter: id }, () => this.handleFilter(0))\n                  }\n                  plain\n                />\n              )}\n            </div>\n          </CustomFilter>\n        )}\n        {showMiniModal && this.renderMiniModal()}\n        {!showLoader && this.renderList()}\n        {showLoader && (\n          <div className=\"loader-wrapper container\">\n            <div className=\"loader\" />\n          </div>\n        )}\n      </div>\n    );\n  }\n}\n\nexport default FeatureRetailerPortalUsers;\n","import React from \"react\";\nimport { Placeholder } from \"@sitecore-jss/sitecore-jss-react\";\n\nclass FoundationLayoutMain extends React.Component {\n  componentDidMount() {\n    if (window) {\n      window.addEventListener(\"resize\", this.handleResize);\n    }\n    if (document) {\n      this.handleResize();\n    }\n  }\n\n  handleResize = () => {\n    let bodyWrapper = \"\"\n\n    if (document) {\n      bodyWrapper = document.querySelector(\".body-wrapper\");\n    }\n\n    if (window.outerWidth >= 992) {\n      bodyWrapper.style.height = \"calc(100vh - 68px)\";\n\n    } else {\n      bodyWrapper.style.height = window.innerHeight + \"px\";\n    }\n  };\n\n  render() {\n    return (\n      <div className=\"main-layout\">\n        <div className=\"top-nav\">\n          <Placeholder name=\"jss-rp-top\" rendering={this.props.rendering} />\n        </div>\n        <div className=\"left-nav\">\n          <Placeholder name=\"jss-rp-left\" rendering={this.props.rendering} />\n        </div>\n        <div className=\"body-container\">\n          <div className=\"body-wrapper\">\n            <div className=\"container\">\n              <Placeholder\n                name=\"jss-rp-body\"\n                rendering={this.props.rendering}\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n}\n\nexport default FoundationLayoutMain;\n","/* eslint-disable */\n// Do not edit this file, it is auto-generated at build time!\n// See scripts/generate-component-factory.js to modify the generation of this file.\nimport BaseCustomFilterFilterDropdown from '../components/Base/CustomFilter/FilterDropdown';\nimport BaseCustomFilterFilterRadioButton from '../components/Base/CustomFilter/FilterRadioButton';\nimport BasePopupPopupAction from '../components/Base/Popup/PopupAction';\nimport BasePopupPopupPreview from '../components/Base/Popup/PopupPreview';\nimport FeatureRetailerPortalApprovals from '../components/Feature/RetailerPortal/Approvals';\nimport FeatureRetailerPortalArticleListing from '../components/Feature/RetailerPortal/ArticleListing';\nimport FeatureRetailerPortalArticles from '../components/Feature/RetailerPortal/Articles';\nimport FeatureRetailerPortalAuthorisations from '../components/Feature/RetailerPortal/Authorisations';\nimport FeatureRetailerPortalDashboard from '../components/Feature/RetailerPortal/Dashboard';\nimport FeatureRetailerPortalFooter from '../components/Feature/RetailerPortal/Footer';\nimport FeatureRetailerPortalHub from '../components/Feature/RetailerPortal/Hub';\nimport FeatureRetailerPortalLeftNavigation from '../components/Feature/RetailerPortal/LeftNavigation';\nimport FeatureRetailerPortalLogin from '../components/Feature/RetailerPortal/Login';\nimport FeatureRetailerPortalNotifications from '../components/Feature/RetailerPortal/Notifications';\nimport FeatureRetailerPortalProfile from '../components/Feature/RetailerPortal/Profile';\nimport FeatureRetailerPortalPromotionListing from '../components/Feature/RetailerPortal/PromotionListing';\nimport FeatureRetailerPortalPromotions from '../components/Feature/RetailerPortal/Promotions';\nimport FeatureRetailerPortalStorefront from '../components/Feature/RetailerPortal/Storefront';\nimport FeatureRetailerPortalStores from '../components/Feature/RetailerPortal/Stores';\nimport FeatureRetailerPortalTopNavigation from '../components/Feature/RetailerPortal/TopNavigation';\nimport FeatureRetailerPortalUpdatePassword from '../components/Feature/RetailerPortal/UpdatePassword';\nimport FeatureRetailerPortalUser from '../components/Feature/RetailerPortal/User';\nimport FeatureRetailerPortalUsers from '../components/Feature/RetailerPortal/Users';\nimport FoundationLayoutMain from '../components/Foundation/Layout/Main';\nimport ModulesFormsFormArticles from '../components/Modules/Forms/FormArticles';\nimport ModulesFormsFormPromotions from '../components/Modules/Forms/FormPromotions';\nimport ModulesFormsFormStoreFront from '../components/Modules/Forms/FormStoreFront';\nimport ModulesProfileEditProfile from '../components/Modules/Profile/EditProfile';\nimport ModulesProfileUpdatePassword from '../components/Modules/Profile/UpdatePassword';\n\nconst components = new Map();\ncomponents.set('Base-CustomFilter-FilterDropdown', BaseCustomFilterFilterDropdown);\ncomponents.set('Base-CustomFilter-FilterRadioButton', BaseCustomFilterFilterRadioButton);\ncomponents.set('Base-Popup-PopupAction', BasePopupPopupAction);\ncomponents.set('Base-Popup-PopupPreview', BasePopupPopupPreview);\ncomponents.set('Feature-RetailerPortal-Approvals', FeatureRetailerPortalApprovals);\ncomponents.set('Feature-RetailerPortal-ArticleListing', FeatureRetailerPortalArticleListing);\ncomponents.set('Feature-RetailerPortal-Articles', FeatureRetailerPortalArticles);\ncomponents.set('Feature-RetailerPortal-Authorisations', FeatureRetailerPortalAuthorisations);\ncomponents.set('Feature-RetailerPortal-Dashboard', FeatureRetailerPortalDashboard);\ncomponents.set('Feature-RetailerPortal-Footer', FeatureRetailerPortalFooter);\ncomponents.set('Feature-RetailerPortal-Hub', FeatureRetailerPortalHub);\ncomponents.set('Feature-RetailerPortal-LeftNavigation', FeatureRetailerPortalLeftNavigation);\ncomponents.set('Feature-RetailerPortal-Login', FeatureRetailerPortalLogin);\ncomponents.set('Feature-RetailerPortal-Notifications', FeatureRetailerPortalNotifications);\ncomponents.set('Feature-RetailerPortal-Profile', FeatureRetailerPortalProfile);\ncomponents.set('Feature-RetailerPortal-PromotionListing', FeatureRetailerPortalPromotionListing);\ncomponents.set('Feature-RetailerPortal-Promotions', FeatureRetailerPortalPromotions);\ncomponents.set('Feature-RetailerPortal-Storefront', FeatureRetailerPortalStorefront);\ncomponents.set('Feature-RetailerPortal-Stores', FeatureRetailerPortalStores);\ncomponents.set('Feature-RetailerPortal-TopNavigation', FeatureRetailerPortalTopNavigation);\ncomponents.set('Feature-RetailerPortal-UpdatePassword', FeatureRetailerPortalUpdatePassword);\ncomponents.set('Feature-RetailerPortal-User', FeatureRetailerPortalUser);\ncomponents.set('Feature-RetailerPortal-Users', FeatureRetailerPortalUsers);\ncomponents.set('Foundation-Layout-Main', FoundationLayoutMain);\ncomponents.set('Modules-Forms-FormArticles', ModulesFormsFormArticles);\ncomponents.set('Modules-Forms-FormPromotions', ModulesFormsFormPromotions);\ncomponents.set('Modules-Forms-FormStoreFront', ModulesFormsFormStoreFront);\ncomponents.set('Modules-Profile-EditProfile', ModulesProfileEditProfile);\ncomponents.set('Modules-Profile-UpdatePassword', ModulesProfileUpdatePassword);\n\nexport default function componentFactory(componentName) {\n  return components.get(componentName);\n};\n","import axios from 'axios';\n\n/**\n * Implements a data fetcher using Axios - replace with your favorite\n * SSR-capable HTTP or fetch library if you like. See HttpJsonFetcher<T> type\n * in sitecore-jss library for implementation details/notes.\n * @param {string} url The URL to request; may include query string\n * @param {any} data Optional data to POST with the request.\n */\nexport function dataFetcher(url, data) {\n  return axios({\n    url,\n    method: data ? 'POST' : 'GET',\n    data,\n    // note: axios needs to use `withCredentials: true` in order for Sitecore cookies to be included in CORS requests\n    // which is necessary for analytics and such\n    withCredentials: true,\n  });\n}\n","import React, { Component } from \"react\";\n\nclass BackToTop extends Component {\n    constructor(props) {\n        super(props);\n        this.state = {\n            showBackToTop: false,\n        };\n    }\n    componentDidMount() {\n        if (document) {\n            const backToTopWrapper = document.querySelector(\".body-wrapper\")\n            if (backToTopWrapper) {\n                backToTopWrapper.addEventListener('scroll', this.handleOnScroll);\n            }\n        }\n    }\n\n    handleOnScroll = (e) => {\n        const element = e.target;\n        const bodyWrapperContainer = element.querySelector(\".container\");\n\n        if (bodyWrapperContainer) {\n            let elemPos = bodyWrapperContainer.getBoundingClientRect().top;\n            let bodyWrapperMargin,\n                bodyContainerMargin;\n            let backToTopPos = 0;\n\n            if (window && window.outerWidth >= 992) {\n                if (elemPos < 94) {\n                    this.setState({\n                        showBackToTop: true,\n                    });\n                    const backToTopWrapper = document.querySelector(\".back-to-top__wrapper\");\n                    const bodyContainer = document.querySelector(\".body-container.is-filter-shown\");\n\n                    if (bodyContainer) {\n                        bodyWrapperMargin = window.getComputedStyle(element).getPropertyValue(\"padding-left\").replace(\"px\", \"\");\n                        bodyContainerMargin = window.getComputedStyle(bodyContainer).getPropertyValue(\"margin-left\").replace(\"px\", \"\");\n                        backToTopPos = (parseInt(bodyWrapperMargin) + parseInt(bodyContainerMargin)) + \"px\";\n                    }\n                    else {\n                        bodyWrapperMargin = window.getComputedStyle(element).getPropertyValue(\"padding-left\");\n                        backToTopPos = bodyWrapperMargin;\n                    }\n                    backToTopWrapper.style.right = backToTopPos;\n                } else {\n                    this.setState({\n                        showBackToTop: false,\n                    });\n                }\n            } else {\n                if (elemPos < 0) {\n                    this.setState({\n                        showBackToTop: true,\n                    });\n                }\n                else {\n                    this.setState({\n                        showBackToTop: false,\n                    });\n                }\n            }\n\n        }\n\n        // if (document && document.documentElement && document.documentElement.scrollTop > 20) {\n        //     this.setState({ showBackToTop: true });\n        //     const backToTopWrapper = document.querySelector(\".back-to-top__wrapper\")\n        //     const bodyWrapper = document.querySelector(\".body-wrapper\");\n        //     const bodyContainer = document.querySelector(\".body-container.is-filter-shown\");\n        //     let bodyWrapperMargin,\n        //         bodyContainerMargin;\n        //     let backToTopPos = 0;\n\n        //     if (bodyWrapper && bodyContainer) {\n        //         bodyWrapperMargin = window.getComputedStyle(bodyWrapper).getPropertyValue(\"margin-left\").replace(\"px\", \"\");\n        //         bodyContainerMargin = window.getComputedStyle(bodyContainer).getPropertyValue(\"margin-left\").replace(\"px\", \"\");\n        //         backToTopPos = (parseInt(bodyWrapperMargin) + parseInt(bodyContainerMargin)) + \"px\";\n        //     }\n        //     else if (bodyWrapper) {\n        //         bodyWrapperMargin = window.getComputedStyle(bodyWrapper).getPropertyValue(\"margin-left\");\n        //         backToTopPos = bodyWrapperMargin;\n        //     }\n        //     backToTopWrapper.style.right = backToTopPos;\n        // }\n        // else {\n        //     this.setState({ showBackToTop: false });\n        // }\n    }\n\n    handleOnClick = () => {\n        // Check if using IE browser\n        const ua = window.navigator.userAgent.toLowerCase();\n        if (document) {\n            const bodyWrapper = document.querySelector(\".body-wrapper\");\n            if ((/msie|trident/.test(ua))) {\n                bodyWrapper.scroll(0, 0);\n            } else {\n                bodyWrapper.scroll({\n                    top: 0,\n                    left: 0,\n                    behavior: 'smooth'\n                });\n            }\n        }\n        // if ((/msie|trident/.test(ua))) {\n        //     window.scroll(0, 0);\n        // } else {\n        //     window.scroll({\n        //         top: 0,\n        //         left: 0,\n        //         behavior: 'smooth'\n        //     });\n        // }\n    }\n    render() {\n        const {\n            showBackToTop\n        } = this.state;\n        return (\n            <div>\n                {showBackToTop &&\n                    <div className=\"back-to-top__wrapper js-back-to-top\">\n                        <div className=\"container\">\n                            <button onClick={this.handleOnClick} className=\"back-to-top__button\">\n                                <span>Back to top</span>\n                                <i className=\"icon icon-chevron-up\"></i>\n                            </button>\n                        </div>\n                    </div>\n                }\n            </div>\n        )\n    }\n}\n\nexport default BackToTop;\n","import React from \"react\";\nimport {\n  Placeholder,\n  VisitorIdentification\n} from \"@sitecore-jss/sitecore-jss-react\";\nimport Helmet from \"react-helmet\";\nimport TagManager from \"react-gtm-module\";\nimport \"./assets/app.css\";\nimport BackToTop from \"./components/Base/BackToTop\";\nimport objectFitImages from \"object-fit-images\";\nimport \"lazysizes\";\n\nclass Layout extends React.Component {\n  constructor(props) {\n  super(props);\n  }\n\n  componentDidMount() {\n    TagManager.initialize({ gtmId: \"GTM-WN8K6F\" });\n\n    if (document) {\n      objectFitImages();\n    }\n  }\n\n  render() {\n    const route = this.props.route;\n    return (\n      <React.Fragment>\n        <Helmet>\n          <title>\n            {route.fields &&\n              route.fields.PageTitle &&\n              route.fields.PageTitle.value\n              ? route.fields.PageTitle.value\n              : \"\"}\n          </title>\n        </Helmet>\n\n        <VisitorIdentification />\n\n        <Placeholder name=\"jss-rp-main\" rendering={route} />\n\n        <BackToTop />\n      </React.Fragment>\n    );\n  }\n}\n\nexport default Layout;\n","import React from 'react';\n\n// Renders a route-not-found message when no route is available from Sitecore\n// The JSS equivalent of a 404 Not Found page.\n\n// This is invoked from RouteHandler when Sitecore returns no valid route data.\n// The NotFound component receives the Layout Service Context data, but no route data.\n// This can be used to power parts of your site, such as navigation, from LS context additions\n// without losing the ability to render them on your 404 pages :)\n\nconst NotFound = ({ context = { site: { name: '' }, language: '' } }) => (\n  <React.Fragment>\n    <h1>Page not found</h1>\n    <p>This page does not exist.</p>\n    <p>\n      Site: {context.site && context.site.name}\n      <br />\n      Language: {context.language}\n    </p>\n  </React.Fragment>\n);\n\nexport default NotFound;\n","import React from 'react';\n//import i18n from 'i18next';\nimport Helmet from 'react-helmet';\nimport { isExperienceEditorActive, dataApi } from '@sitecore-jss/sitecore-jss-react';\nimport { dataFetcher } from './dataFetcher';\nimport config from './temp/config';\nimport Layout from './Layout';\nimport NotFound from './NotFound';\n// Dynamic route handler for Sitecore items.\n// Because JSS app routes are defined in Sitecore, traditional static React routing isn't enough -\n// we need to be able to load dynamic route data from Sitecore after the client side route changes.\n// So react-router delegates all route rendering to this handler, which attempts to get the right\n// route data from Sitecore - and if none exists, renders the not found component.\n\nexport default class RouteHandler extends React.Component {\n  constructor(props) {\n    super(props);\n\n    const ssrInitialState = props.ssrState;\n\n    this.state = {\n      notFound: true,\n      routeData: ssrInitialState, // null when client-side rendering\n      defaultLanguage: config.defaultLanguage,\n    };\n\n    // route data from react-router - if route was resolved, it's not a 404\n    if (props.route !== null) {\n      this.state.notFound = false;\n    }\n    // if we have an initial SSR state, and that state doesn't have a valid route data,\n    // then this is a 404 route.\n    if (ssrInitialState && (!ssrInitialState.sitecore || !ssrInitialState.sitecore.route)) {\n      this.state.notFound = true;\n    }\n    // if we have an SSR state, and that state has language data, set the current language\n    // (this makes the language of content follow the Sitecore context language cookie)\n    // note that a route-based language (i.e. /de-DE) will override this default; this is for home.\n    if (ssrInitialState && ssrInitialState.context && ssrInitialState.context.language) {\n      this.state.defaultLanguage = ssrInitialState.context.language;\n    }\n\n    this.componentIsMounted = false;\n    this.languageIsChanging = false;\n\n    // tell i18next to sync its current language with the route language\n    //this.updateLanguage();\n  }\n\n  componentDidMount() {\n    // once we initialize the route handler, we've \"used up\" the SSR data,\t\n    // if it existed, so we want to clear it now that it's in react state.\t\n    // future route changes that might destroy/remount this component should ignore any SSR data.\t\n    // EXCEPTION: Unless we are still SSR-ing. Because SSR can re-render the component twice\t\n    // (once to find GraphQL queries that need to run, the second time to refresh the view with\t\n    // GraphQL query results)\t\n    // We test for SSR by checking for Node-specific process.env variable.\t\n    if (typeof window !== \"undefined\" && !this.props.ssrRenderComplete && this.props.setSsrRenderComplete) {\n      this.props.setSsrRenderComplete(true);\n    }\n\n    // if no existing routeData is present (from SSR), get Layout Service fetching the route data\n    if (!this.state.routeData) {\n      this.updateRouteData();\n    }\n    this.componentIsMounted = true;\n  }\n  componentWillUnmount() {\n    this.componentIsMounted = false;\n  }\n  /**\n   * Loads route data from Sitecore Layout Service into state.routeData\n   */\n  updateRouteData() {\n    let sitecoreRoutePath = this.props.route.match.params.sitecoreRoute || '/';\n    if (!sitecoreRoutePath.startsWith('/')) {\n      sitecoreRoutePath = `/${sitecoreRoutePath}`;\n    }\n    const language = this.props.route.match.params.lang || this.state.defaultLanguage;\n    // get the route data for the new route\n    getRouteData(sitecoreRoutePath, language).then((routeData) => {\n      if (routeData !== null && routeData.sitecore && routeData.sitecore.route) {\n        // set the sitecore context data and push the new route\n        this.props.contextFactory.setSitecoreContext({\n          route: routeData.sitecore.route,\n          itemId: routeData.sitecore.route.itemId,\n          ...routeData.sitecore.context,\n        });\n        this.setState({ routeData, notFound: false });\n      } else {\n        this.setState({ routeData, notFound: true });\n      }\n    });\n  }\n  /**\n   * Updates the current app language to match the route data.\n   */\n  // updateLanguage() {\n  //   const newLanguage = this.props.route.match.params.lang || this.state.defaultLanguage;\n  //   if (i18n.language !== newLanguage) {\n  //     this.languageIsChanging = true;\n  //     i18n.changeLanguage(newLanguage, () => {\n  //       this.languageIsChanging = false;\n  //       // if the component is not mounted, we don't care\n  //       // (next time it mounts, it will render with the right language context)\n  //       if (this.componentIsMounted) {\n  //         // after we change the i18n language, we need to force-update React,\n  //         // since otherwise React won't know that the dictionary has changed\n  //         // because it is stored in i18next state not React state\n  //         this.forceUpdate();\n  //       }\n  //     });\n  //   }\n  // }\n  componentDidUpdate(previousProps) {\n    const existingRoute = previousProps.route.match.url;\n    const newRoute = this.props.route.match.url;\n    // don't change state (refetch route data) if the route has not changed\n    if (existingRoute === newRoute) {\n      return;\n    }\n    // if in experience editor - force reload instead of route data update\n    // avoids confusing Sitecore's editing JS\n    if (isExperienceEditorActive()) {\n      window.location.assign(newRoute);\n      return;\n    }\n    //this.updateLanguage();\n    this.updateRouteData();\n  }\n  render() {\n    const { notFound, routeData } = this.state;\n    // no route data for the current route in Sitecore - show not found component.\n    // Note: this is client-side only 404 handling. Server-side 404 handling is the responsibility\n    // of the server being used (i.e. node-headless-ssr-proxy and Sitecore intergrated rendering know how to send 404 status codes).\n    if (notFound) {\n      return (\n        <div>\n          <Helmet>\n            <title>{\"Page not found\"}</title>\n          </Helmet>\n          <NotFound context={routeData.sitecore && routeData.sitecore.context} />\n        </div>\n      );\n    }\n    // Don't render anything if the route data or dictionary data is not fully loaded yet.\n    // This is a good place for a \"Loading\" component, if one is needed.\n    if (!routeData || this.languageIsChanging) {\n      return null;\n    }\n    // Render the app's root structural layout\n    return <Layout route={routeData.sitecore.route} />;\n  }\n}\n\n\n/**\n * Gets route data from Sitecore. This data is used to construct the component layout for a JSS route.\n * @param {string} route Route path to get data for (e.g. /about)\n * @param {string} language Language to get route data in (content language, e.g. 'en')\n */\nfunction getRouteData(route, language) {\n  const fetchOptions = {\n    layoutServiceConfig: { host: config.sitecoreApiHost },\n    querystringParams: { sc_lang: language, sc_apikey: config.sitecoreApiKey },\n    fetcher: dataFetcher,\n  };\n  return dataApi.fetchRouteData(route, fetchOptions).catch((error) => {\n    if (error.response && error.response.status === 404 && error.response.data) {\n      return error.response.data;\n    }\n    console.error('Route data fetch error', error, error.response);\n    return null;\n  });\n}","import React from 'react';\nimport { SitecoreContext, SitecoreContextFactory } from '@sitecore-jss/sitecore-jss-react';\nimport { Route, Switch } from 'react-router-dom';\nimport { ApolloProvider } from 'react-apollo';\nimport componentFactory from './temp/componentFactory';\nimport RouteHandler from './RouteHandler';\n\n// This is the main JSX entry point of the app invoked by the renderer (server or client rendering).\n// By default the app's normal rendering is delegated to <RouteHandler> that handles the loading of JSS route data.\n// support languages in the URL prefix\n// e.g. /da-DK/path, or /en/path, or /path\nexport const routePatterns = [\n  '/:lang([a-z]{2}-[A-Z]{2})/:sitecoreRoute*',\n  '/:lang([a-z]{2})/:sitecoreRoute*',\n  '/:sitecoreRoute*',\n];\n// wrap the app with:\n// ApolloProvider: provides an instance of Apollo GraphQL client to the app to make Connected GraphQL queries.\n//    Not needed if not using connected GraphQL.\n// SitecoreContext: provides component resolution and context services via withSitecoreContext\n// Router: provides a basic routing setup that will resolve Sitecore item routes and allow for language URL prefixes.\nclass AppRoot extends React.Component {\n  state = {\n    ssrRenderComplete: false,\n    contextFactory: new SitecoreContextFactory()\n  }\n\n  setSsrRenderComplete = ssrRenderComplete => {\n    this.setState({\n      ssrRenderComplete\n    })\n  }\n\n  render() {\n    const { path, Router, graphQLClient, ssrState } = this.props;\n\n    if (ssrState && ssrState.sitecore && ssrState.sitecore.route) {\n      // set the initial sitecore context data if we got SSR initial state\n      this.state.contextFactory.setSitecoreContext({\n        route: ssrState.sitecore.route,\n        itemId: ssrState.sitecore.route.itemId,\n        ...ssrState.sitecore.context,\n      });\n    }\n\n    const routeRenderFunction = (props) =>\n      <RouteHandler\n        route={props}\n        ssrState={this.state.ssrRenderComplete ? null : ssrState}\n        contextFactory={this.state.contextFactory}\n        setSsrRenderComplete={this.setSsrRenderComplete}\n        ssrRenderComplete={this.state.ssrRenderComplete}\n      />;\n\n    return (\n      <ApolloProvider client={graphQLClient}>\n        <SitecoreContext componentFactory={componentFactory} contextFactory={this.state.contextFactory}>\n          <Router location={path} context={{}}>\n            <Switch>\n              {routePatterns.map((routePattern) => (\n                <Route key={routePattern} path={routePattern} render={routeRenderFunction} />\n              ))}\n            </Switch>\n          </Router>\n        </SitecoreContext>\n      </ApolloProvider>\n    );\n  }\n}\n\nexport default AppRoot;","import \"@babel/polyfill\";\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport { BrowserRouter } from 'react-router-dom';\nimport AppRoot from './AppRoot';\nimport GraphQLClientFactory from './lib/GraphQLClientFactory';\nimport config from './temp/config';\n//import i18ninit from './i18n';\n/* eslint-disable no-underscore-dangle */\nlet renderFunction = ReactDOM.render;\n/*\n  SSR Data\n  If we're running in a server-side rendering scenario,\n  the server will provide JSON in the #__JSS_STATE__ element\n  for us to acquire the initial state to run with on the client.\n  This enables us to skip a network request to load up the layout data.\n  We are emitting a quiescent script with JSON so that we can take advantage\n  of JSON.parse()'s speed advantage over parsing full JS, and enable\n  working without needing `unsafe-inline` in Content Security Policies.\n  SSR is initiated from /server/server.js.\n*/\nlet __JSS_STATE__ = null;\nlet ssrRawJson;\nif (document) {\n  ssrRawJson = document.getElementById('__JSS_STATE__');\n}\nif (ssrRawJson) {\n  __JSS_STATE__ = JSON.parse(ssrRawJson.innerHTML);\n}\nif (__JSS_STATE__) {\n  // when React initializes from a SSR-based initial state, you need to render with `hydrate` instead of `render`\n  renderFunction = ReactDOM.hydrate;\n}\n/*\n  GraphQL Data\n  The Apollo Client needs to be initialized to make GraphQL available to the JSS app.\n  Not using GraphQL? Remove this, and the ApolloContext from `AppRoot`.\n*/\n// Apollo supports SSR of GraphQL queries, so like JSS SSR, it has an object we can pre-hydrate the client cache from\n// to avoid needing to re-run GraphQL queries after the SSR page loads\nconst initialGraphQLState =\n  __JSS_STATE__ && __JSS_STATE__.APOLLO_STATE ? __JSS_STATE__.APOLLO_STATE : null;\nconst graphQLClient = GraphQLClientFactory(config.graphQLEndpoint, false, initialGraphQLState);\n/*\n  App Rendering\n*/\n// initialize the dictionary, then render the app\n// note: if not making a multlingual app, the dictionary init can be removed.\n// i18ninit().then(() => {\n// });\n\n// HTML element to place the app into\nlet rootElement;\nif (document) {\n  rootElement = document.getElementById('root');\n}\nrenderFunction(\n  <AppRoot\n    path={window.location.pathname}\n    Router={BrowserRouter}\n    graphQLClient={graphQLClient}\n    ssrState={__JSS_STATE__}\n  />,\n  rootElement\n);","/* eslint-disable import/first */\n\nimport 'isomorphic-fetch';\nimport { ApolloClient } from 'apollo-client';\nimport { InMemoryCache, IntrospectionFragmentMatcher } from 'apollo-cache-inmemory';\n\n/*\n  INTROSPECTION DATA\n  See https://www.apollographql.com/docs/react/recipes/fragment-matching.html\n  This enables the Apollo cache to process fragments on interface types correctly.\n  If this file does not exist, you may need to run the `jss graphql:update` script.\n*/\nimport introspectionQueryResultData from '../temp/GraphQLFragmentTypes.json';\n\n/*\n  QUERY LINK SELECTION\n  A link is transport which GraphQL queries are pushed across.\n  You have many choices.\n  See the apollo-link documentation for more details.\n\n  NOTE: to use Sitecore Experience Editor it is essential that your\n  link passes cookies along with requests (credentials: 'include').\n*/\n\n// choose between a basic HTTP link to run queries...\n// import { createHttpLink } from 'apollo-link-http';\n// const link = createHttpLink({ uri: endpoint, credentials: 'include' });\n\n// ...or a batched link (multiple queries within 10ms all go in one HTTP request)\nimport { BatchHttpLink } from 'apollo-link-batch-http';\n\n// ...and an automatic persisted query link, which reduces bandwidth by using query hashes to alias content\n// the APQ link is _chained_ behind another link that performs the actual HTTP calls, so you can choose\n// APQ + batched, or APQ + http links for example.\nimport { createPersistedQueryLink } from 'apollo-link-persisted-queries';\n\nexport default function(endpoint, ssr, initialCacheState) {\n  /* HTTP link selection: default to batched + APQ */\n  const link = createPersistedQueryLink().concat(\n    new BatchHttpLink({ uri: endpoint, credentials: 'include' })\n  );\n\n  const cache = new InMemoryCache({\n    fragmentMatcher: new IntrospectionFragmentMatcher({\n      introspectionQueryResultData,\n    }),\n  });\n\n  return new ApolloClient({\n    ssrMode: ssr,\n    ssrForceFetchDelay: 100,\n    link,\n    cache: cache.restore(initialCacheState),\n  });\n}\n","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}