{"version":3,"sources":["images/logo05.png","services/authService.js","components/common/protectedRoute.jsx","components/common/input.jsx","components/common/inputColourPicker.jsx","components/common/inputEdit.jsx","components/common/inputRTL.jsx","components/common/textArea.jsx","components/common/inputRememberMe.jsx","components/common/inputPassword.jsx","components/common/inputProfileEmail.jsx","components/common/select.jsx","components/common/radioGroup.jsx","components/common/form.jsx","store/api.js","store/auth.js","components/authentication/loginForm.jsx","components/authentication/logout.jsx","store/customizations.js","store/menus.js","services/logService.js","services/httpService.js","services/customizationService.js","components/customizations/customizationForm.jsx","components/common/pagination.jsx","components/common/tableHeader.jsx","components/common/tableBody.jsx","components/common/table.jsx","components/customizations/customizationsTable.jsx","utils/paginate.js","components/searchBox.jsx","components/customizations/customizationsList.jsx","services/billboardLargeService.js","components/navBarFooter.jsx","components/home/searchDynamic.jsx","store/groups.js","components/home/detailsGroup.jsx","store/sumOfArticles.js","components/home/detailsMaster.jsx","store/articles.js","components/home/detailsDetail.jsx","store/homeBillboardsMainsAboutUs.js","components/homeBillboards/renderHomeBillboardChildsMainAboutUs.jsx","services/homeBillboardChildsMainAboutUs.js","components/homeBillboards/homeBillboardChildsMainAboutUs.jsx","components/homeBillboards/aboutUs.jsx","store/homeBillboardsMainsContactUs.js","components/homeBillboards/renderHomeBillboardChildsMainContactUs.jsx","services/homeBillboardChildsMainContactUs.js","components/googleMaps/googleMaps.jsx","components/homeBillboards/homeBillboardChildsMainContactUs.jsx","components/homeBillboards/contactUs.jsx","store/roles.js","components/authorization/roleForm.jsx","components/authorization/rolesTable.jsx","components/authorization/rolesList.jsx","store/users.js","components/users/userForm.jsx","components/common/active.jsx","components/users/usersTable.jsx","components/users/usersList.jsx","store/billboardOrigins.js","store/homeLocationGroups.js","store/billboardMenuBGs.js","components/billboardAdmin/menuForm.jsx","components/billboardAdmin/menusTable.jsx","components/billboardAdmin/menusList.jsx","components/billboardAdmin/groupForm.jsx","components/billboardAdmin/groupsTable.jsx","components/billboardAdmin/groupsList.jsx","components/billboardAdmin/sumOfArticleForm.jsx","components/billboardAdmin/sumOfArticlesTable.jsx","components/billboardAdmin/sumOfArticlesList.jsx","components/billboardAdmin/articleForm.jsx","components/billboardAdmin/articlesTable.jsx","components/billboardAdmin/articlesList.jsx","store/homeBillboards.js","store/radioGrpDirections.js","components/homeBillboards/homeBillboardForm.jsx","components/homeBillboards/homeBillboardsTable.jsx","components/homeBillboards/homeBillboardsList.jsx","store/homeBillboardChilds.js","components/homeBillboards/homeBillboardChildForm.jsx","components/homeBillboards/homeBillboardChildsTable.jsx","components/homeBillboards/homeBillboardChildsList.jsx","store/homeBillboardsMains.js","components/homeBillboards/renderHomeBillboardChildsMains.jsx","components/homeBillboards/renderHomeBillboardChildsMainsXS.jsx","services/homeBillboardChildsMains.js","components/homeBillboards/homeBillboardChildsMain.jsx","components/homeBillboards/renderHomeBillboardChildsMainKeypad.jsx","services/homeBillboardChildsMainKeypad.js","components/homeBillboards/homeBillboardChildsMainKeypad.jsx","components/homeBillboards/renderHomeBillboardChildsMainKeypadListRight.jsx","services/homeBillboardChildsMainKeypadList.js","components/homeBillboards/homeBillboardChildsMainKeypadListRight.jsx","components/homeBillboards/renderHomeBillboardChildsMainKeypadListLeft.jsx","components/homeBillboards/homeBillboardChildsMainKeypadListLeft.jsx","components/homeBillboards/renderHomeBillboardChildsMainVerticalImages.jsx","services/homeBillboardChildsMainVerticalImages.js","components/homeBillboards/homeBillboardChildsMainVerticalImages.jsx","components/homeBillboards/homeBillboardChildsMainImageOnStrip.jsx","store/homeBillboardSlides.js","components/home/carouselSlide.jsx","components/homeBillboards/homeBillboardsMain.jsx","components/notFound.jsx","components/navBar.jsx","components/navBar2.jsx","components/navBar3.jsx","components/navBar4.jsx","App.js","serviceWorker.js","store/homeBillboardChildsMains.js","store/customizationMaintains.js","store/entities.js","store/reducer.js","store/middleware/logger.js","store/middleware/toast.js","store/middleware/api.js","index.js","store/configureStore.js"],"names":["module","exports","logout","localStorage","getItem","removeItem","sessionStorage","getCurrentUser","jwt","jwtDecode","ex","getJwt","ProtectedRoute","path","Component","component","render","rest","Route","props","auth","Redirect","to","pathname","state","from","location","Input","name","label","error","className","htmlFor","id","InputColourPicker","style","width","height","InputRTL","TextArea","minHeight","InputRememberMe","marginRight","marginTop","InputProfileEmail","Select","options","value","map","option","key","ID","A_Name","RadioGroup","columnName","onChange","disableRadio","type","disabled","checked","Form","validate","indentifier","match","params","Joi","data","schemaEdit","schemaCreate","abortEarly","console","log","errors","details","item","message","validateProperty","obj","schema","validatePropertyPhoto","validatePropertyPhoto02","handleSubmit","e","preventDefault","setState","doSubmit","handleChange","input","currentTarget","errorMessage","handleChangeGoogleMap","handleCheckboxChange","handleCheckboxChangeHoverSummary01_Link","B_HoverSummary01_Linked","readUploadedFileAsText","inputFile","temporaryFileReader","FileReader","Promise","resolve","reject","onerror","abort","DOMException","onload","result","readAsDataURL","handleImageFileChange","a","files","size","waitingForFileUpload","fileList","latestUploadedFile","length","fileContents","N_PhotoSize01","handleImageOnImageFileChange","waitingForFileUpload02","N_PhotoSize02","handleRegisterEmailFocusout","handleCreateEmailFocusout","handleMobileRegisterFocusout","handleMobileCreateFocusout","handleRadioGroupChange","event","Number","target","handleRadioGroupDirectionsOnChange","handleRegisterPasswordConfirmFocusout","A_Password","passwordConfirm","response","status","A_Email","focus","handleCreatePasswordConfirmFocusout","_imageUploadCallBackSummary","file","reader","img","Image","src","this","canvas","document","createElement","context","getContext","originWidth","originHeight","targetWidth","targetHeight","maxWidth","Math","round","clearRect","drawImage","newUrl","toDataURL","link","_imageUploadCallBackDescription","showHide","stopPropagation","handleChangePasswordStrength","score","pw","zxcvbn","marginLeft","onClick","cancelForm","bind","autoFocus","onBlur","placeholder","N_RadioGrpDirections_ID","accept","multiple","apiCallBegan","createAction","apiCallSuccess","apiCallFailed","slice","createSlice","initialState","list","loading","lastFetch","authError","reducers","loadLoginRequested","userLogin","action","payload","loadLoginFailed","loadLoginSucceeded","actions","LoginForm","username","password","rememberMe","string","required","boolean","loadLogin","nextProps","login","tokenKey","setItem","window","customizationSingleRow","is_ios","test","navigator","userAgent","sectionStyle","backgroundImage","I_LoginBGImage","backgroundPosition","backgroundAttachment","backgroundRepeat","backgroundSize","transform","textAlign","paddingTop","A_LoginTitle","paddingBottom","backgroundColor","borderRadius","borderWidth","borderColor","onSubmit","renderInputLoginFocus","renderInput","renderButton","renderCheckboxRememberMe","connect","entities","dispatch","url","method","onStart","a_email","a_password","onSuccess","onError","Logout","listSingleRow","customizationsRequested","customizations","customizationsReceived","Date","now","customizationsRequestedFailed","customizationRequested","customization","customizationReceived","customizationRequestedFailed","customizationSingleRowRequested","customizationSingleRowReceived","customizationSingleRowRequestedFailed","customizationChangeRequested","customizationChangeFailed","customizationChanged","customizationDeleteRequested","customizationDeleteFailed","customizationId","index","findIndex","splice","customizationDeleted","customizationID","customizationAddRequested","customizationAddFailed","customizationAdded","push","createSelector","listOnNavvar","menusRequested","menus","menusReceived","menusRequestedFailed","menusOnNavbarRequested","menusOnNavbarReceived","menusOnNavbarRequestedFailed","menuRequested","menu","menuReceived","menuRequestedFailed","menuChangeRequested","menuChangeFailed","menuChanged","menuDeleteRequested","menuDeleteFailed","menuId","menuName","alert","menuDeleted","menuID","menuAddRequested","menuAddFailed","menuAdded","loadMenu","getState","init","axios","defaults","baseURL","process","interceptors","use","logger","toast","get","post","put","delete","setJwt","headers","common","CustomizationUrl","saveCustomization","userID","currentDate","body","D_Updated","A_Updated_By","http","A_WebAppTitle","A_BaseNavbarBGC","A_BaseNavbarFGC","A_BaseNavbarHover","A_BaseSearchBtnBGC","A_BaseSearchBtnFGC","A_BaseSearchBtnHover","B_ClientNavbarActive","B_TopNavbarActive","A_TopNavbarBGC","A_TopNavbarFGC","A_TopNavbarHover","A_TopSearchBtnBGC","A_TopSearchBtnFGC","A_TopSearchBtnHover","N_AboutUsNo","N_ContactUsNo","B_GoogleMap","A_GoogleKey","F_Lat","F_Lng","D_Inserted","A_Inserted_By","deleteCustomization","CustomizationForm","number","allow","optional","min","max","any","meta","swaggerType","clearImages","month","getMonth","getDate","getFullYear","getHours","getMinutes","history","goBack","mapToViewModel","replace","populateCustomization","marginBottom","renderInputColourPickerCust","renderCheckbox","renderImageFile","renderInputGoogleMap","Paginsation","itemsCount","pageSize","currentPage","onPageChange","pagesCount","ceil","pages","_","range","aria-hidden","page","TableHeader","raiseSort","sortColumn","order","onSort","renderSortIcon","column","columns","filter","hidden","TableBody","renderCell","content","renderDateCell","date","toString","createKey","maxHeight","Table","CustomizationsTable","updateColumn","t_role_a_name","onUpdate","deleteColumn","confirm","onDelete","customizationsList","paginate","items","pageNumber","startIndex","take","SearchBox","CustomizationsList","searchQuery","handleUpdate","originalCustomizations","m","handlePageChange","handleSearch","query","handleSort","getPagedData","allCustomizations","filtered","toLowerCase","includes","orderBy","totalCount","Link","title","handleDelete","getBillboardLargesSearchAutoComplete","billLocationSearchAutoComplete","getBillboardLargesSearchDynamic","billLocationSearchDynamic","getBillboardLargesWindows","NavBarFooter","FooterNavBar","styles","background","color","nameOfClass","expand","SearchDynamic","billboardLargesSearchDynamic","searchFound","detailsGroup","groupID","detailsMaster","masterID","detailsDetail","detailsDetailID","padding","N_BillboardOrigin_ID","I_Image","A_Reference","display","menuOnNavvar","onClickSearch","onClickSearchHandle","groupsRequested","groups","groupsReceived","groupsRequestedFailed","groupsOnNavbarRequested","groupsOnNavbarReceived","groupsOnNavbarRequestedFailed","groupRequested","group","groupReceived","groupRequestedFailed","groupChangeRequested","groupChangeFailed","groupChanged","groupDeleteRequested","groupDeleteFailed","groupId","groupName","groupDeleted","groupAddRequested","groupAddFailed","groupAdded","loadGroups","billboardLargeID","loadGroup","DetailsGroup","A_Summary","billboardLargesGroup","renderBillboardData","sectionStyleSmallerLg","row","N_Order_No","data-component","fontWeight","fontSize","populateMenuGroups","scrollTo","listParentOriginIDMenus","sumOfArticlesRequested","sumOfArticles","sumOfArticlesReceived","sumOfArticlesRequestedFailed","sumOfArticlesOnNavbarRequested","sumOfArticlesOnNavbarReceived","sumOfArticlesOnNavbarRequestedFailed","sumOfArticleRequested","sumOfArticle","sumOfArticleReceived","sumOfArticleRequestedFailed","parentOriginIDMenusRequested","parentOriginIDMenus","parentOriginIDMenusReceived","parentOriginIDMenusRequestedFailed","sumOfArticleChangeRequested","sumOfArticleChangeFailed","sumOfArticleChanged","sumOfArticleDeleteRequested","sumOfArticleDeleteFailed","sumOfArticleId","sumOfArticleName","sumOfArticleDeleted","sumOfArticleID","sumOfArticleAddRequested","sumOfArticleAddFailed","sumOfArticleAdded","loadSumOfArticles","loadSumOfArticle","DetailsMaster","billboardLargesMaster","populateGroupSumOfArticles","articlesRequested","articles","articlesReceived","articlesRequestedFailed","articlesOnNavbarRequested","articlesOnNavbarReceived","articlesOnNavbarRequestedFailed","articleRequested","article","articleReceived","articleRequestedFailed","articleChangeRequested","articleChangeFailed","articleChanged","articleDeleteRequested","articleDeleteFailed","articleId","articleName","articleDeleted","articleID","articleAddRequested","articleAddFailed","articleAdded","loadArticles","A_Description","scrollToTop","scroll","populateSumOfArticlesArticles","homeBillboardsMainsAboutUsRequested","homeBillboardsMainsAboutUs","homeBillboardsMainsAboutUsReceived","homeBillboardsMainsAboutUsRequestedFailed","homeBillboardsMainsAboutUsOnNavbarRequested","homeBillboardsMainsAboutUsOnNavbarReceived","homeBillboardsMainsAboutUsOnNavbarRequestedFailed","homeBillboardsMainRequested","homeBillboardsMain","homeBillboardsMainReceived","homeBillboardsMainRequestedFailed","homeBillboardsMainChangeRequested","homeBillboardsMainChangeFailed","homeBillboardsMainChanged","homeBillboardsMainDeleteRequested","homeBillboardsMainDeleteFailed","homeBillboardsMainId","homeBillboardsMainName","homeBillboardsMainDeleted","homeBillboardsMainID","homeBillboardsMainAddRequested","homeBillboardsMainAddFailed","homeBillboardsMainAdded","RenderHomeBillboardChildsMainAboutUs","RenderParentImage","image","imageOnImage","parentImageLink","reference","parentReferenceLink","summary","parentSummaryLink","urlLink","urlLinked","urlLinkedExternal","href","paddingLeft","paddingRight","float","minWidth","opacity","NavLink","RenderChildImage","childImageLink","childReferenceLink","childSummaryLink","RenderReference","referenceCSS","homeBillboardChildsMainAboutUs","nameOfClassParentColumn","nameOfClassChildColumn","mediaAttribute","I_ImageOnImage","A_HoverSummary01_Link","B_HoverSummary01_Link_External","getHomeBillboardChildsMains","homeBillboardID","HomeBillboardChildsMainAboutUs","homeBillboardsID","mainView","identifier","sectionStyleMD","sectionStyleSM","sectionStyleXS","textFC","imageParent","urlLinkParent","border","AboutUs","A_BGC","N_OrderNo","loadHomeBillboardsMainsAboutUs","populateHomeBillboardsMains","orderNo","homeBillboardsMainsContactUsRequested","homeBillboardsMainsContactUs","homeBillboardsMainsContactUsReceived","homeBillboardsMainsContactUsRequestedFailed","homeBillboardsMainsContactUsOnNavbarRequested","homeBillboardsMainsContactUsOnNavbarReceived","homeBillboardsMainsContactUsOnNavbarRequestedFailed","RenderHomeBillboardChildsMainContactUs","homeBillboardChildsMainContactUs","lat","lng","Map","defaultZoom","defaultCenter","position","GoogleMaps","WrapperMap","withScriptjs","withGoogleMap","googleMapURL","loadingElement","containerElement","mapElement","HomeBillboardChildsMainContactUs","googleMapHomeBiilboard","ContactUs","A_TextFC","B_GoogleMapHomeBiilboard","loadHomeBillboardsMainsContactUs","rolesRequested","roles","rolesReceived","rolesRequestedFailed","roleRequested","role","roleReceived","roleRequestedFailed","roleChangeRequested","roleChangeFailed","roleChanged","roleDeleteRequested","roleDeleteFailed","roleId","roleName","roleDeleted","roleID","roleAddRequested","roleAddFailed","roleAdded","loadRoles","RoleForm","A_Discriminator","addRole","changeRole","loadRole","RolesTable","rolesList","RolesList","allRoles","deleteRole","userSuccess","userError","usersRequested","users","usersReceived","usersRequestedFailed","userRequested","userReceived","user","userRequestedFailed","userChangeRequested","userChangeFailed","userChanged","userDeleteRequested","userDeleteFailed","userId","userDeleted","userAddRequested","userAddFailed","userAdded","userActivated","B_Active","UserForm","A_RolesID","email","N_Mobile","I_Photo01","isPasswordVisible","addUser","changeUser","toggleShow","passwordStrength","loadUser","renderInputCreateEmail","renderInputEditEmail","renderPasswordInput","data-score","renderInputCreatePasswordConfirm","renderSelect","renderInputCreateMobile","Active","classes","active","cursor","UsersTable","usersList","UsersList","allUsers","loadUsers","count","deleteUser","billboardOriginsRequested","billboardOrigins","billboardOriginsReceived","billboardOriginsRequestedFailed","billboardOriginRequested","billboardOrigin","billboardOriginReceived","billboardOriginRequestedFailed","billboardOriginChangeRequested","billboardOriginChangeFailed","billboardOriginChanged","billboardOriginDeleteRequested","billboardOriginDeleteFailed","billboardOriginId","billboardOriginName","A_Origin","billboardOriginDeleted","billboardOriginID","billboardOriginAddRequested","billboardOriginAddFailed","billboardOriginAdded","loadBillboardOrigins","homeLocationGroupsRequested","homeLocationGroups","homeLocationGroupsReceived","homeLocationGroupsRequestedFailed","homeLocationGroupRequested","homeLocationGroup","homeLocationGroupReceived","homeLocationGroupRequestedFailed","homeLocationGroupChangeRequested","homeLocationGroupChangeFailed","homeLocationGroupChanged","homeLocationGroupDeleteRequested","homeLocationGroupDeleteFailed","homeLocationGroupId","homeLocationGroupName","homeLocationGroupDeleted","homeLocationGroupID","homeLocationGroupAddRequested","homeLocationGroupAddFailed","homeLocationGroupAdded","loadHomeLocationGroups","billboardMenuBGsRequested","billboardMenuBGs","billboardMenuBGsReceived","billboardMenuBGsRequestedFailed","billboardMenuBGRequested","billboardMenuBG","billboardMenuBGReceived","billboardMenuBGRequestedFailed","billboardMenuBGChangeRequested","billboardMenuBGChangeFailed","billboardMenuBGChanged","billboardMenuBGDeleteRequested","billboardMenuBGDeleteFailed","billboardMenuBGId","billboardMenuBGName","billboardMenuBGDeleted","billboardMenuBGID","billboardMenuBGAddRequested","billboardMenuBGAddFailed","billboardMenuBGAdded","MenuForm","B_Billboard","N_HomeLocationGroup_ID","N_BillboardMenuBG_ID","A_MenuCursorColour","N_ParentOrigin_ID","currentDateWithoutTime","addMenu","a_name","changeMenu","loadBillboardMenuBGs","populateMenus","renderRadioGroup","renderInputColourPickerMenu","renderButtonCancel","MenusTable","groupColumn","onGroup","N_BB_Count","menusList","MenusList","menuForm","handleGroup","allMenus","loadMenus","deleteMenu","billLocationGroupID","GroupForm","N_BillboardLarge_ID","addGroup","changeGroup","populateGroups","GroupsTable","sumOfArticleColumn","onSumOfArticle","groupsList","GroupsList","groupForm","handleSumOfArticle","allGroups","deleteGroup","SumOfArticleForm","addSumOfArticle","changeSumOfArticle","populateSumOfArticles","N_HomeLocationSumOfArticle_ID","SumOfArticlesTable","articleColumn","onArticle","sumOfArticlesList","SumOfArticles","sumOfArticleForm","handleArticle","allSumOfArticles","loadParentOriginIDMenus","parentOriginID","billboardLarge_ID","deleteSumOfArticle","ArticleForm","addArticle","changeArticle","loadArticle","populateArticles","renderTextArea","Article","N_HomeLocationArticle_ID","ArticlesTable","articlesList","ArticlesList","articleForm","allArticles","deleteArticle","homeBillboardsRequested","homeBillboards","homeBillboardsReceived","homeBillboardsRequestedFailed","homeBillboardsOnNavbarRequested","homeBillboardsOnNavbarReceived","homeBillboardsOnNavbarRequestedFailed","homeBillboardRequested","homeBillboard","homeBillboardReceived","homeBillboardRequestedFailed","homeBillboardChangeRequested","homeBillboardChangeFailed","homeBillboardChanged","homeBillboardDeleteRequested","homeBillboardDeleteFailed","homeBillboardId","homeBillboardName","homeBillboardDeleted","homeBillboardAddRequested","homeBillboardAddFailed","homeBillboardAdded","radioGrpDirectionsRequested","radioGrpDirections","radioGrpDirectionsReceived","radioGrpDirectionsRequestedFailed","radioGrpDirectionRequested","radioGrpDirection","radioGrpDirectionReceived","radioGrpDirectionRequestedFailed","radioGrpDirectionChangeRequested","radioGrpDirectionChangeFailed","radioGrpDirectionChanged","radioGrpDirectionDeleteRequested","radioGrpDirectionDeleteFailed","radioGrpDirectionId","radioGrpDirectionName","radioGrpDirectionDeleted","radioGrpDirectionID","radioGrpDirectionAddRequested","radioGrpDirectionAddFailed","radioGrpDirectionAdded","HomeBillboardForm","A_HoverSummary01","A_HoverSummary02","A_HoverSummary02_Link","A_HoverSummary03","A_HoverSummary03_Link","A_HoverSummary04","A_HoverSummary04_Link","A_HoverSummary05","A_HoverSummary05_Link","A_HoverSummary06","A_HoverSummary07","A_HoverSummary08","A_HoverSummary08_Link","B_HoverSummary08_External","A_BGC_Shadow","B_BGC_Shadow_Off","A_Button_Link","B_Button_Link_External","A_Button","addHomeBillboard","changeHomeBillboard","clearSideImage","loadRadioGrpDirections","loadHomeBillboard","populateHomeBillboard","renderRadioGroupDirections","renderInputColourPicker","renderSideImageFile","renderInputHoverSummary","renderCheckboxHover","renderInputReference","renderInputSummary","renderInputLinkButton","renderCheckboxLinkButton","renderInputButton","renderCheckboxGoogleMap","N_HomeBillboards_ID","HomeBillboardsTable","homeBillboardChildColumn","homeBillboardChild","onHomeBillboardChild","N_HB_Count","homeBillboardsList","HomeBillboardsList","homeBillboardChilds","homeBillboardForm","RadioGrpDirectionsID","handleHomeBillboardChild","allHomeBillboards","loadHomeBillboards","deleteHomeBillboard","homeBillboardChildsRequested","homeBillboardChildsReceived","homeBillboardChildsRequestedFailed","homeBillboardChildsOnNavbarRequested","homeBillboardChildsOnNavbarReceived","homeBillboardChildsOnNavbarRequestedFailed","homeBillboardChildRequested","homeBillboardChildReceived","homeBillboardChildRequestedFailed","homeBillboardChildChangeRequested","homeBillboardChildChangeFailed","homeBillboardChildChanged","homeBillboardChildDeleteRequested","homeBillboardChildDeleteFailed","homeBillboardChildId","homeBillboardChildName","homeBillboardChildDeleted","homeBillboardChildID","homeBillboardChildAddRequested","homeBillboardChildAddFailed","homeBillboardChildAdded","addHomeBillboardChild","changeHomeBillboardChild","clearImageOnImage","loadHomeBillboardChild","populateHomeBillboardChild","renderImageOnImageFile","renderInputHoverSummary01_Link","renderCheckboxHoverSummary01_Link","HomeBillboardChildsTable","homeBillboardChildsList","HomeBillboardChildsList","homeBillboardChildForm","allHomeBillboardChilds","loadHomeBillboardChilds","deleteHomeBillboardChild","homeBillboardsMainsRequested","homeBillboardsMains","homeBillboardsMainsReceived","homeBillboardsMainsRequestedFailed","homeBillboardsMainsOnNavbarRequested","homeBillboardsMainsOnNavbarReceived","homeBillboardsMainsOnNavbarRequestedFailed","RenderHomeBillboardChildsMains","RenderImage","ChildImageLink","ChildImage","RenderHomeBillboardChildsMainsXS","HomeBillboardChildsMain","homeBillboardChildsMains","RenderHomeBillboardChildsMainKeypad","homeBillboardChildsMainKeypad","HomeBillboardChildsMainKeypad","RenderHomeBillboardChildsMainKeypadListRight","navMaster","navDetail","RenderVericalMenu","billboardID","closeNav","homeBillboardChildsMainKeypadList","homeBillboardLargesWindows","description","HomeBillboardChildsMainKeypadListRight","RenderHomeBillboardChildsMainKeypadListLeft","homeBillboardLargesSlides","HomeBillboardChildsMainKeypadListLeft","RenderHomeBillboardChildsMainVerticalImages","homeBillboardChildsMainVerticalImages","HomeBillboardChildsMainVerticalImages","HomeBillboardChildsMainImageOnStrip","urlLinkExternal","button","homeBillboardSlidesRequested","homeBillboardSlides","homeBillboardSlidesReceived","homeBillboardSlidesRequestedFailed","homeBillboardSlidesOnNavbarRequested","homeBillboardSlidesOnNavbarReceived","homeBillboardSlidesOnNavbarRequestedFailed","homeBillboardSlideRequested","homeBillboardSlide","homeBillboardSlideReceived","homeBillboardSlideRequestedFailed","homeBillboardSlideChangeRequested","homeBillboardSlideChangeFailed","homeBillboardSlideChanged","homeBillboardSlideDeleteRequested","homeBillboardSlideDeleteFailed","homeBillboardSlideId","homeBillboardSlideName","homeBillboardSlideDeleted","homeBillboardSlideID","homeBillboardSlideAddRequested","homeBillboardSlideAddFailed","homeBillboardSlideAdded","CarouselSlide","onClickBillboardLarges","renderBillboardSlides","rowCount","alt","Carousel","Caption","textShadow","loadHomeBillboardSlides","fade","Item","HomeBillboardsMain","bounce","animation","animationName","Radium","keyframes","fadeIn","fadeInUp01","fadeInUp","fadeInUp02","fadeInUp03","fadeInUp04","flipInX","flipInY","rubberBand","shake","rotateInUpRight","rotateInUpLeft","slideInUp01","slideInUp","slideInUp02","slideInUp03","loadHomeBillboardsMains","NotFound","NavBar","HomeNavigate","useState","bgColour","setBgColour","onMouseEnter","onMouseLeave","MenuNavigate","rowLength","closeNav2","MaintenanceNavigate","RolesNavigate","UsersNavigate","BillboardsNavigate","HomeLayoutsNavigate","CustomizationsNavigate","AboutUsNavigate","activeClass","spy","smooth","offset","duration","ContactUsNavigate","HelloNavigate","LogoutNavigate","SearchNavigate","Button","variant","LoginNavigate","handleOpen","isOpen","handleClose","setNavExpanded","expanded","navExpanded","reload","delaySearchAutoComplete","clearInterval","intervalID","suggestions","dynamicSearchIcon","text","onTextChanged","then","handleScroll","dynamicSearchView","suggestionSelected","addEventListener","removeEventListener","getBoundingClientRect","top","openMenu","default","blue","cyan","green","red","yellow","white","lightBlue","darkCyan","menuBlue","Navbar","fixed","onToggle","Toggle","aria-controls","Collapse","Nav","NavDropdown","show","Divider","Fragment","inline","autoComplete","renderSuggestions","NavBar2","closeNavToAboutUs","closeNavToContactUs","navbarShow","logo02","NavBar3","MenuItemNavigate","borderLeft","borderTop","borderBottom","borderRight","boxShadow","reRun","big","App","elements","searchID","loadCustomizationSingleRow","loadMenusOnNavbar","BrowserRouter","Switch","HomeBillboardChildForm","exact","Boolean","hostname","homeBillboardChildsMainsRequested","homeBillboardChildsMainsReceived","homeBillboardChildsMainsRequestedFailed","homeBillboardChildsMainsOnNavbarRequested","homeBillboardChildsMainsOnNavbarReceived","homeBillboardChildsMainsOnNavbarRequestedFailed","homeBillboardChildsMainRequested","homeBillboardChildsMain","homeBillboardChildsMainReceived","homeBillboardChildsMainRequestedFailed","homeBillboardChildsMainChangeRequested","homeBillboardChildsMainChangeFailed","homeBillboardChildsMainChanged","homeBillboardChildsMainDeleteRequested","homeBillboardChildsMainDeleteFailed","homeBillboardChildsMainId","homeBillboardChildsMainName","homeBillboardChildsMainDeleted","homeBillboardChildsMainID","homeBillboardChildsMainAddRequested","homeBillboardChildsMainAddFailed","homeBillboardChildsMainAdded","customizationMaintains","customizationMaintain","combineReducers","billboardOriginsReducer","homeLocationGroupsReducer","billboardMenuBGsReducer","menusReducer","groupsReducer","sumOfArticlesReducer","articlesReducer","homeBillboardsReducer","homeBillboardChildsReducer","homeBillboardsMainsReducer","homeBillboardChildsMainsReducer","homeBillboardsMainsAboutUsReducer","homeBillboardsMainsContactUsReducer","radioGrpDirectionsReducer","customizationsReducer","customizationMaintainsReducer","homeBillboardSlidesReducer","rolesReducer","usersReducer","authReducer","entitiesReducer","param","store","next","api","timeStamp","getTime","request","configureStore","reducer","middleware","getDefaultMiddleware","destination","ReactDOM","getElementById","serviceWorker","ready","registration","unregister","catch"],"mappings":"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","file":"static/js/main.91c8ba28.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/logo05.8f800fe2.png\";","import jwtDecode from \"jwt-decode\";\r\n// import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/auth\";\r\n\r\n// const apiEndpoint = \"/auth\";\r\n\r\nconst tokenKey = \"token\";\r\n\r\n// http.setJwt(getJwt());\r\n\r\n// export async function login(a_email, a_password, b_rememberMe) {\r\n// //console.log(apiEndpoint, { a_email, a_password });\r\n\r\n// const { data: jwt } = await http.post(apiEndpoint, { a_email, a_password });\r\n// if (b_rememberMe) localStorage.setItem(tokenKey, jwt);\r\n// else sessionStorage.setItem(tokenKey, jwt);\r\n// }\r\n\r\n// export function loginWithJwt(jwt) {\r\n// if (localStorage.getItem(tokenKey)) localStorage.setItem(tokenKey, jwt);\r\n// else sessionStorage.setItem(tokenKey, jwt);\r\n// }\r\n\r\nexport function logout() {\r\n if (localStorage.getItem(tokenKey)) localStorage.removeItem(tokenKey);\r\n else sessionStorage.removeItem(tokenKey);\r\n}\r\n\r\nexport function getCurrentUser() {\r\n try {\r\n let jwt;\r\n if (localStorage.getItem(tokenKey)) jwt = localStorage.getItem(tokenKey);\r\n else jwt = sessionStorage.getItem(tokenKey);\r\n\r\n return jwtDecode(jwt);\r\n } catch (ex) {\r\n return null;\r\n }\r\n}\r\n\r\nexport function getJwt() {\r\n if (localStorage.getItem(tokenKey)) return localStorage.getItem(tokenKey);\r\n else return sessionStorage.getItem(tokenKey);\r\n}\r\n\r\nexport default {\r\n // login,\r\n // loginWithJwt,\r\n logout,\r\n getCurrentUser,\r\n getJwt\r\n};\r\n","import React from \"react\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\nimport auth from \"../../services/authService\";\r\n\r\nconst ProtectedRoute = ({ path, component: Component, render, ...rest }) => {\r\n return (\r\n {\r\n //console.log(props);\r\n // if (!auth.getCurrentUser()) return ;\r\n // Babak's Note: We replaced above with below so we redirect the user to the actual component (ie view) after\r\n // 'login' component (ie view) rather than 'movies' component:-\r\n if (!auth.getCurrentUser())\r\n return (\r\n \r\n );\r\n // Babak's Note: Below either we have passed a 'component' or 'render':-\r\n return Component ? : render(props);\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default ProtectedRoute;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst Input = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default Input;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst InputColourPicker = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default InputColourPicker;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst Input = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default Input;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst InputRTL = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default InputRTL;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst TextArea = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default TextArea;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst InputRememberMe = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default InputRememberMe;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst Input = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default Input;\r\n","// import React from 'react';\r\n\r\n// const Input = (props) => {\r\n// return
\r\n// \r\n// \r\n//
;\r\n// }\r\n\r\n// export default Input;\r\n\r\n//\r\n// Babak's Note: I have destructed above '(props)' to below '({name, label, value, onChange})'\r\nimport React from \"react\";\r\n\r\n// //\r\n// // Babak's Note: Old version\r\n// const Input = ({ type, name, label, value, error, onChange }) => {\r\n// return (\r\n//
\r\n// \r\n// \r\n// {error &&
{error}
}\r\n//
\r\n// );\r\n// };\r\n//\r\n// Babak's Note: New version included of 'Rest operator'\r\nconst InputProfileEmail = ({ name, label, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default InputProfileEmail;\r\n","import React from \"react\";\r\n\r\nconst Select = ({ name, label, options, error, ...rest }) => {\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nexport default Select;\r\n","import React from \"react\";\r\n\r\nconst RadioGroup = ({\r\n name,\r\n columnName,\r\n value,\r\n label,\r\n options,\r\n onChange,\r\n disableRadio,\r\n error,\r\n ...rest\r\n}) => {\r\n return (\r\n
\r\n \r\n {options.map(option => (\r\n
\r\n = option.ID\r\n ? \"clickableNon\"\r\n : \"clickable\"\r\n }\r\n >\r\n = option.ID\r\n ? true\r\n : false\r\n }\r\n className={\r\n disableRadio === 99\r\n ? \"clickableNon\"\r\n : disableRadio >= option.ID\r\n ? \"clickableNon\"\r\n : \"clickable\"\r\n }\r\n style={{ marginRight: 6 }}\r\n key={option.ID}\r\n value={option.ID}\r\n checked={value === option.ID}\r\n onChange={onChange}\r\n />\r\n {option[columnName]}\r\n \r\n
\r\n ))}\r\n
\r\n );\r\n};\r\n\r\nexport default RadioGroup;\r\n","import React, { Component } from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Input from \"./input\";\r\nimport InputColourPicker from \"./inputColourPicker\";\r\nimport InputEdit from \"./inputEdit\";\r\nimport InputRTL from \"./inputRTL\";\r\nimport TextArea from \"./textArea\";\r\nimport InputRememberMe from \"./inputRememberMe\";\r\nimport InputPassword from \"./inputPassword\";\r\nimport InputProfileEmail from \"./inputProfileEmail\";\r\nimport Select from \"./select\";\r\nimport RadioGroup from \"./radioGroup\";\r\n// import { getIfUserExists, getIfMobileIsCut } from \"../../services/userService\";\r\nimport zxcvbn from \"zxcvbn\";\r\n// import { convertToRaw, RichUtils } from \"draft-js\";\r\n// import { Editor } from \"../../../node_modules/react-draft-wysiwyg\";\r\n// import \"../../../node_modules/react-draft-wysiwyg/dist/react-draft-wysiwyg.css\";\r\n\r\nclass Form extends Component {\r\n //state = { data: {}, errors: {}, editorState: EditorState.createEmpty() };\r\n\r\n validate = () => {\r\n // const result = Joi.validate(this.state.data, this.schema, {\r\n // abortEarly: false\r\n // });\r\n //console.log(\"validate : \", this.state.data);\r\n // if (!result.error) return null;\r\n // Babak's Note: Object destructering from above to below\r\n const options = { abortEarly: false };\r\n const indentifier = this.props.match.params.id;\r\n const { error } = Joi.validate(\r\n this.state.data,\r\n indentifier != \"new\" ? this.schemaEdit : this.schemaCreate,\r\n options\r\n );\r\n console.log(\"Hell0111111111111111111111 : \", error);\r\n if (!error) return null;\r\n //console.log(\"Hell022222 : \", error);\r\n const errors = {};\r\n for (let item of error.details) errors[item.path[0]] = item.message;\r\n return errors;\r\n };\r\n\r\n validateProperty = ({ name, value }) => {\r\n //const obj = { username: value };\r\n // Babak's Note: Changed above line to the below for 'Computed Properties' :-\r\n\r\n const obj = { [name]: value };\r\n const indentifier = this.props.match.params.id;\r\n //console.log(\"Helloooooooooooo222222 : \", name, indentifier);\r\n const schema = {\r\n [name]:\r\n indentifier != \"new\" ? this.schemaEdit[name] : this.schemaCreate[name]\r\n };\r\n\r\n const { error } = Joi.validate(obj, schema);\r\n\r\n // if (error) return null;\r\n // return error.details[0].message;\r\n // Babak's Note: Changed above two lines to the below for 'Turner Operater' :-\r\n return error ? error.details[0].message : null;\r\n\r\n // if (name === \"username\") {\r\n // if (value.trim() === \"\") return \"Username is required\";\r\n // // other rules...\r\n // }\r\n // if (name === \"password\") {\r\n // if (value.trim() === \"\") return \"Password is required\";\r\n // // other rules...\r\n // }\r\n };\r\n\r\n validatePropertyPhoto = (name, value) => {\r\n //const obj = { username: value };\r\n // Babak's Note: Changed above line to the below for 'Computed Properties' :-\r\n\r\n const obj = { [name]: value };\r\n const indentifier = this.props.match.params.id;\r\n //console.log(\"Helloooooooooooo111111 : \", name, indentifier);\r\n const schema = {\r\n [name]:\r\n indentifier != \"new\" ? this.schemaEdit[name] : this.schemaCreate[name]\r\n };\r\n\r\n const { error } = Joi.validate(obj, schema);\r\n\r\n // if (error) return null;\r\n // return error.details[0].message;\r\n // Babak's Note: Changed above two lines to the below for 'Turner Operater' :-\r\n return error ? error.details[0].message : null;\r\n\r\n // if (name === \"username\") {\r\n // if (value.trim() === \"\") return \"Username is required\";\r\n // // other rules...\r\n // }\r\n // if (name === \"password\") {\r\n // if (value.trim() === \"\") return \"Password is required\";\r\n // // other rules...\r\n // }\r\n };\r\n\r\n validatePropertyPhoto02 = (name, value) => {\r\n //const obj = { username: value };\r\n // Babak's Note: Changed above line to the below for 'Computed Properties' :-\r\n\r\n const obj = { [name]: value };\r\n const indentifier = this.props.match.params.id;\r\n //console.log(\"Helloooooooooooo111111 : \", name, indentifier);\r\n const schema = {\r\n [name]:\r\n indentifier != \"new\" ? this.schemaEdit[name] : this.schemaCreate[name]\r\n };\r\n\r\n const { error } = Joi.validate(obj, schema);\r\n\r\n // if (error) return null;\r\n // return error.details[0].message;\r\n // Babak's Note: Changed above two lines to the below for 'Turner Operater' :-\r\n return error ? error.details[0].message : null;\r\n\r\n // if (name === \"username\") {\r\n // if (value.trim() === \"\") return \"Username is required\";\r\n // // other rules...\r\n // }\r\n // if (name === \"password\") {\r\n // if (value.trim() === \"\") return \"Password is required\";\r\n // // other rules...\r\n // }\r\n };\r\n\r\n handleSubmit = e => {\r\n e.preventDefault();\r\n\r\n //console.log(\"Hell03333 : \");\r\n\r\n const errors = this.validate();\r\n //console.log(\"What's the error : \", errors);\r\n this.setState({ errors: errors || {} });\r\n if (errors) return;\r\n\r\n //const username = this.username.current.value;\r\n\r\n console.log(\"handleSubmit, What's the error : \", errors);\r\n\r\n this.doSubmit();\r\n };\r\n\r\n //handleChange = e => { -- Removed 'e' to work with version 3 below\r\n handleChange = ({ currentTarget: input }) => {\r\n //console.log(\"handleChange1: \", input);\r\n const errors = { ...this.state.errors };\r\n const errorMessage = this.validateProperty(input);\r\n if (errorMessage) errors[input.name] = errorMessage;\r\n else delete errors[input.name];\r\n\r\n const data = { ...this.state.data };\r\n //console.log(\"handleChange2: \", data);\r\n //\r\n // Babak's Note: -- 1.Hard code version\r\n //data.username = e.currentTarget.value;\r\n\r\n //\r\n // Babak's Note: -- 2.Dynamic version\r\n //data[e.currentTarget.name] = e.currentTarget.value;\r\n\r\n //\r\n // Babak's Note: -- 3.Even better version\r\n data[input.name] = input.value;\r\n //console.log(\"handleChange3: \", input.name, data[input.name], input.value);\r\n this.setState({ data, errors });\r\n };\r\n\r\n handleChangeGoogleMap = ({ currentTarget: input }) => {\r\n //console.log(\"handleChange1: \", input);\r\n const errors = { ...this.state.errors };\r\n const errorMessage = this.validateProperty(input);\r\n if (errorMessage) errors[input.name] = errorMessage;\r\n else delete errors[input.name];\r\n\r\n const data = { ...this.state.data };\r\n //console.log(\"handleChange2: \", data);\r\n //\r\n // Babak's Note: -- 1.Hard code version\r\n //data.username = e.currentTarget.value;\r\n\r\n //\r\n // Babak's Note: -- 2.Dynamic version\r\n //data[e.currentTarget.name] = e.currentTarget.value;\r\n\r\n //\r\n // Babak's Note: -- 3.Even better version\r\n data[input.name] = input.value;\r\n //console.log(\"handleChange3: \", input.name, data[input.name], input.value);\r\n this.setState({ data, errors });\r\n };\r\n\r\n // handleKeyCommand(command) {\r\n // const { editorState } = this.state;\r\n // const newState = RichUtils.handleKeyCommand(editorState, command);\r\n // if (newState) {\r\n // this.onEditorStateChange(newState);\r\n // return true;\r\n // }\r\n // return false;\r\n // }\r\n\r\n handleCheckboxChange = ({ currentTarget: input }) => {\r\n //console.log(\"handleCheckboxChange1: \", input);\r\n //const errors = { ...this.state.errors };\r\n //const errorMessage = this.validateProperty(input);\r\n //if (errorMessage) errors[input.name] = errorMessage;\r\n //else delete errors[input.name];\r\n\r\n const data = { ...this.state.data };\r\n // console.log(\"handleCheckboxChange: \", data[input.name]);\r\n\r\n if (data[input.name]) data[input.name] = false;\r\n else data[input.name] = true;\r\n\r\n //console.log(\"handleCheckboxChange3: \", data[input.name]);\r\n //data[input.name] = input.value;\r\n // console.log(\r\n // \"handleCheckboxChange3: \",\r\n // input.name,\r\n // data[input.name],\r\n // input.value\r\n // );\r\n this.setState({ data });\r\n };\r\n\r\n handleCheckboxChangeHoverSummary01_Link = ({ currentTarget: input }) => {\r\n //console.log(\"handleCheckboxChange1: \", input);\r\n //const errors = { ...this.state.errors };\r\n //const errorMessage = this.validateProperty(input);\r\n //if (errorMessage) errors[input.name] = errorMessage;\r\n //else delete errors[input.name];\r\n\r\n const data = { ...this.state.data };\r\n let B_HoverSummary01_Linked = false;\r\n // console.log(\"handleCheckboxChange: \", data[input.name]);\r\n\r\n if (data[input.name]) {\r\n data[input.name] = false;\r\n B_HoverSummary01_Linked = false;\r\n } else {\r\n data[input.name] = true;\r\n B_HoverSummary01_Linked = true;\r\n }\r\n\r\n //console.log(\"handleCheckboxChange3: \", data[input.name]);\r\n //data[input.name] = input.value;\r\n // console.log(\r\n // \"handleCheckboxChange3: \",\r\n // input.name,\r\n // data[input.name],\r\n // input.value\r\n // );\r\n this.setState({ data, B_HoverSummary01_Linked });\r\n };\r\n\r\n readUploadedFileAsText = inputFile => {\r\n const temporaryFileReader = new FileReader();\r\n\r\n return new Promise((resolve, reject) => {\r\n temporaryFileReader.onerror = () => {\r\n temporaryFileReader.abort();\r\n reject(new DOMException(\"Problem parsing input file.\"));\r\n };\r\n\r\n temporaryFileReader.onload = () => {\r\n resolve(temporaryFileReader.result);\r\n };\r\n temporaryFileReader.readAsDataURL(inputFile);\r\n //temporaryFileReader.readAsText(inputFile);\r\n });\r\n };\r\n\r\n handleImageFileChange = async ({ currentTarget: input }) => {\r\n //\r\n // Babak's Note: This website will show what 'https://www.youtube.com/watch?v=XeiOnkEI7XI' is for:-\r\n // console.log(\"handleImageFileChange1: \", input.files[0]);\r\n //console.log(\"handleImageFileChange2: \", input.files);\r\n //console.log(\"handleImageFileChange1: \", input.className);\r\n const errors = { ...this.state.errors };\r\n\r\n const name = \"N_PhotoSize01\";\r\n const value = input.files[0].size;\r\n const errorMessage = this.validatePropertyPhoto(name, value);\r\n\r\n const data = { ...this.state.data };\r\n\r\n //if (!input || !input.files || input.files[0].size > 40000) {\r\n if (errorMessage) {\r\n input.value = \"\";\r\n input.className = \"form-control innerTDButtonAvailable\";\r\n errors[input.name] = \"Uploaded file is too large, 40kb maximum limit.\";\r\n } else {\r\n delete errors[input.name];\r\n input.className = \"form-control\";\r\n }\r\n\r\n // errors[input.name] = \"Uploaded file is too large\";\r\n // data[input.name] = \"\";\r\n //} else {\r\n this.setState({ waitingForFileUpload: true });\r\n\r\n const fileList = input.files;\r\n\r\n // Uploads will push to the file input's `.files` array. Get the last uploaded file.\r\n const latestUploadedFile = fileList.item(fileList.length - 1);\r\n\r\n try {\r\n // window.alert(\"Hello \");\r\n\r\n const fileContents = await this.readUploadedFileAsText(\r\n latestUploadedFile\r\n );\r\n //const fileContents = URL.createObjectURL(input.files[0]);\r\n //delete errors[input.name];\r\n\r\n data[input.name] = fileContents;\r\n data.N_PhotoSize01 = input.files[0].size;\r\n this.setState({\r\n waitingForFileUpload: false\r\n });\r\n } catch (e) {\r\n //console.log(e);\r\n errors[input.name] = \"Uploaded file is tooooooooooooo large : \";\r\n data[input.name] = \"\";\r\n this.setState({\r\n waitingForFileUpload: false\r\n });\r\n // }\r\n\r\n //errors[input.name] = \"\";\r\n\r\n //data[input.name] = input.files[0];\r\n //console.log(\"handleImageFileChange3: \", data[input.name]);\r\n\r\n // let reader = new FileReader();\r\n // reader.readAsDataURL(input.files[0]);\r\n\r\n // reader.onload = e => {\r\n // console.warn(\"img data : \", e.target.result);\r\n // const formData = { file: e.target.result };\r\n // console.log(\"handleImageFileChange4: \", formData);\r\n // };\r\n }\r\n\r\n //console.log(\"handleImageFileChange4: \", data[input.name]);\r\n\r\n //this.setState({ I_Photo01: input.files[0] });\r\n this.setState({ data, errors });\r\n };\r\n\r\n handleImageOnImageFileChange = async ({ currentTarget: input }) => {\r\n //\r\n // Babak's Note: This website will show what 'https://www.youtube.com/watch?v=XeiOnkEI7XI' is for:-\r\n // console.log(\"handleImageFileChange1: \", input.files[0]);\r\n //console.log(\"handleImageFileChange2: \", input.files);\r\n //console.log(\"handleImageFileChange1: \", input.className);\r\n const errors = { ...this.state.errors };\r\n\r\n const name = \"N_PhotoSize02\";\r\n const value = input.files[0].size;\r\n const errorMessage = this.validatePropertyPhoto02(name, value);\r\n\r\n const data = { ...this.state.data };\r\n\r\n //if (!input || !input.files || input.files[0].size > 40000) {\r\n if (errorMessage) {\r\n input.value = \"\";\r\n input.className = \"form-control innerTDButtonAvailable\";\r\n errors[input.name] = \"Uploaded file is too large, 40kb maximum limit.\";\r\n } else {\r\n delete errors[input.name];\r\n input.className = \"form-control\";\r\n }\r\n\r\n // errors[input.name] = \"Uploaded file is too large\";\r\n // data[input.name] = \"\";\r\n //} else {\r\n this.setState({ waitingForFileUpload02: true });\r\n\r\n const fileList = input.files;\r\n\r\n // Uploads will push to the file input's `.files` array. Get the last uploaded file.\r\n const latestUploadedFile = fileList.item(fileList.length - 1);\r\n\r\n try {\r\n // window.alert(\"Hello \");\r\n\r\n const fileContents = await this.readUploadedFileAsText(\r\n latestUploadedFile\r\n );\r\n //const fileContents = URL.createObjectURL(input.files[0]);\r\n //delete errors[input.name];\r\n\r\n data[input.name] = fileContents;\r\n data.N_PhotoSize02 = input.files[0].size;\r\n this.setState({\r\n waitingForFileUpload02: false\r\n });\r\n } catch (e) {\r\n //console.log(e);\r\n errors[input.name] = \"Uploaded file is tooooooooooooo large : \";\r\n data[input.name] = \"\";\r\n this.setState({\r\n waitingForFileUpload02: false\r\n });\r\n // }\r\n\r\n //errors[input.name] = \"\";\r\n\r\n //data[input.name] = input.files[0];\r\n //console.log(\"handleImageFileChange3: \", data[input.name]);\r\n\r\n // let reader = new FileReader();\r\n // reader.readAsDataURL(input.files[0]);\r\n\r\n // reader.onload = e => {\r\n // console.warn(\"img data : \", e.target.result);\r\n // const formData = { file: e.target.result };\r\n // console.log(\"handleImageFileChange4: \", formData);\r\n // };\r\n }\r\n\r\n //console.log(\"handleImageFileChange4: \", data[input.name]);\r\n\r\n //this.setState({ I_Photo01: input.files[0] });\r\n this.setState({ data, errors });\r\n };\r\n\r\n handleRegisterEmailFocusout = async ({ currentTarget: input }) => {\r\n //console.log(\"handleRegisterEmailFocusout1: \", input);\r\n // try {\r\n // if (input.value) {\r\n // const userFound = await getIfUserExists(input.value);\r\n // }\r\n // //console.log(\"handleRegisterEmailFocusout2: \", userFound);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 400) {\r\n // const errors = { ...this.state.errors };\r\n // errors.username = ex.response.data;\r\n // this.setState({ errors });\r\n // input.focus();\r\n // }\r\n // }\r\n };\r\n\r\n handleCreateEmailFocusout = async ({ currentTarget: input }) => {\r\n //console.log(\"handleCreateEmailFocusout1: \", input);\r\n // try {\r\n // if (input.value) {\r\n // const userFound = await getIfUserExists(input.value);\r\n // }\r\n // //console.log(\"handleCreateEmailFocusout2: \", userFound);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 400) {\r\n // const errors = { ...this.state.errors };\r\n // errors.A_Email = ex.response.data;\r\n // this.setState({ errors });\r\n // input.focus();\r\n // }\r\n // }\r\n };\r\n\r\n handleMobileRegisterFocusout = async ({ currentTarget: input }) => {\r\n //console.log(\"handleMobileRegisterFocusout1: \", input);\r\n // try {\r\n // if (input.value) {\r\n // const mobileURL = `http://api.smartsms.ir/sms/send?userId=57674&password=123456@Aa&message=Hello&recipient=${input.value}&originator=500059326511`;\r\n // const userFound = await getIfMobileIsCut(mobileURL);\r\n // // fetch(\r\n // // `http://api.smartsms.ir/sms/send?userId=57674&password=123456@Aa&message=Hello&recipient=${\r\n // // input.value\r\n // // }&originator=500059326511`,\r\n // // {\r\n // // mode: \"no-cors\"\r\n // // }\r\n // // ).then(response => {\r\n // // //if (response.ok) {\r\n // // // response.json().then(json => {\r\n // // console.log(response);\r\n // // // });\r\n // // //}\r\n // // });\r\n // }\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 400) {\r\n // const errors = { ...this.state.errors };\r\n // errors.mobile = ex.response.data;\r\n // this.setState({ errors });\r\n // }\r\n // }\r\n };\r\n\r\n handleMobileCreateFocusout = async ({ currentTarget: input }) => {\r\n //console.log(\"handleMobileCreateFocusout1: \", input);\r\n // try {\r\n // if (input.value) {\r\n // const mobileURL = `http://api.smartsms.ir/sms/send?userId=57674&password=123456@Aa&message=Hello&recipient=${input.value}&originator=500059326511`;\r\n // const userFound = await getIfMobileIsCut(mobileURL);\r\n // // fetch(\r\n // // `http://api.smartsms.ir/sms/send?userId=57674&password=123456@Aa&message=Hello&recipient=${\r\n // // input.value\r\n // // }&originator=500059326511`,\r\n // // {\r\n // // mode: \"no-cors\"\r\n // // }\r\n // // ).then(response => {\r\n // // //if (response.ok) {\r\n // // // response.json().then(json => {\r\n // // console.log(response);\r\n // // // });\r\n // // //}\r\n // // });\r\n // }\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 400) {\r\n // const errors = { ...this.state.errors };\r\n // errors.N_Mobile = ex.response.data;\r\n // this.setState({ errors });\r\n // }\r\n // }\r\n };\r\n\r\n renderButton(label) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderButtonCancel(label) {\r\n return (\r\n \r\n {label}\r\n \r\n );\r\n }\r\n\r\n renderSelect(name, label, options) {\r\n const { data, errors } = this.state;\r\n //console.log(\"State : \", name, data[name], options, data);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleRadioGroupChange = (name, event) => {\r\n let data = this.state.data;\r\n\r\n //console.log(\"handleRadioGroupChange : \", event.target.value);\r\n\r\n data[name] = Number(event.target.value);\r\n\r\n this.setState({\r\n data,\r\n [name]: Number(event.target.value)\r\n });\r\n };\r\n\r\n renderRadioGroup(name, columnName, label, options, disableRadio) {\r\n const { data, errors } = this.state;\r\n // console.log(\r\n // \"renderRadioGroup : \",\r\n // this.state[name],\r\n // this.state.data[name],\r\n // options,\r\n // disableRadio\r\n // );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleRadioGroupDirectionsOnChange = (name, event) => {\r\n // window.alert(`Hello : ${changeEvent.target.value}`);\r\n let obj = this.state.data;\r\n\r\n obj[name] = Number(event.target.value);\r\n\r\n obj[\"A_HoverSummary01\"] = \"\";\r\n obj[\"A_HoverSummary02\"] = \"\";\r\n obj[\"A_HoverSummary03\"] = \"\";\r\n obj[\"A_Reference\"] = \"\";\r\n obj[\"A_Summary\"] = \"\";\r\n obj[\"A_Description\"] = \"\";\r\n\r\n obj[\"N_RadioGrpDirections_ID\"] = Number(event.target.value);\r\n\r\n this.setState({\r\n data: obj,\r\n [name]: Number(event.target.value)\r\n });\r\n };\r\n\r\n renderRadioGroupDirections(name, columnName, label, options, disableRadio) {\r\n const { data, errors } = this.state;\r\n // console.log(\r\n // \"renderRadioGroup : \",\r\n // this.state[name],\r\n // this.state.data[name],\r\n // options,\r\n // disableRadio\r\n // );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputRegisterEmail(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputProfileEmail(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderPasswordProfileInput(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputCreateEmail(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputEditEmail(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputRegisterMobile(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n // console.log(\r\n // \"renderInputRegisterMobile : \",\r\n // this.state.data,\r\n // data,\r\n // data[name]\r\n // );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputCreateMobile(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n // console.log(\r\n // \"renderInputCreateMobile : \",\r\n // this.state.data,\r\n // data,\r\n // data[name]\r\n // );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputLoginFocus(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n console.log(\r\n \"renderInputLoginFocus : \",\r\n this.state.data,\r\n data,\r\n data[name],\r\n errors[name],\r\n errors\r\n );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleRegisterPasswordConfirmFocusout = async ({ currentTarget: input }) => {\r\n //console.log(\"handleRegisterPasswordConfirmFocusout1: \", input);\r\n\r\n const { A_Password, passwordConfirm } = this.state.data;\r\n\r\n try {\r\n if (A_Password !== passwordConfirm) {\r\n //alert(\"Passwords don't match\");\r\n const errors = { ...this.state.errors };\r\n errors.passwordConfirm = \"Passwords don't match\";\r\n this.setState({ errors });\r\n //console.log(\"handleRegisterPasswordConfirmFocusout2: \", userFound);\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.A_Email = ex.response.data;\r\n this.setState({ errors });\r\n input.focus();\r\n }\r\n }\r\n };\r\n\r\n renderInputRegisterPasswordConfirm(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n // console.log(\r\n // \"renderRegisterInputPasswordConfirm : \",\r\n // this.state.data,\r\n // data,\r\n // data[name]\r\n // );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n handleCreatePasswordConfirmFocusout = async ({ currentTarget: input }) => {\r\n //console.log(\"handleCreatePasswordConfirmFocusout1: \", input);\r\n\r\n const { A_Password, passwordConfirm } = this.state.data;\r\n\r\n try {\r\n if (A_Password !== passwordConfirm) {\r\n //alert(\"Passwords don't match\");\r\n const errors = { ...this.state.errors };\r\n errors.passwordConfirm = \"Passwords don't match\";\r\n this.setState({ errors });\r\n //console.log(\"handleCreatePasswordConfirmFocusout2: \", userFound);\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.A_Email = ex.response.data;\r\n this.setState({ errors });\r\n input.focus();\r\n }\r\n }\r\n };\r\n\r\n renderInputCreatePasswordConfirm(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n // console.log(\r\n // \"renderInputCreatePasswordConfirm : \",\r\n // this.state.data,\r\n // data,\r\n // data[name]\r\n // );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n // onEditorStateChange({ currentTarget: input }) {\r\n // const data = { ...this.state.data };\r\n\r\n // data[input.name] = input.value;\r\n\r\n // this.setState({ data });\r\n // }\r\n\r\n // _imageUploadCallBackSummary(file) {\r\n // // long story short, every time we upload an image, we\r\n // // need to save it to the state so we can get it's data\r\n // // later when we decide what to do with it.\r\n\r\n // // Make sure you have a uploadImages: [] as your default state\r\n // let uploadedImages = this.state.uploadedImagesSummary;\r\n\r\n // const imageObject = {\r\n // file: file,\r\n // localSrc: URL.createObjectURL(file)\r\n // };\r\n\r\n // uploadedImages.push(imageObject);\r\n\r\n // this.setState({ uploadedImagesSummary: uploadedImages });\r\n\r\n // // We need to return a promise with the image src\r\n // // the img src we will use here will be what's needed\r\n // // to preview it in the browser. This will be different than what\r\n // // we will see in the index.md file we generate.\r\n // return new Promise((resolve, reject) => {\r\n // resolve({ data: { link: imageObject.localSrc } });\r\n // });\r\n // }\r\n //\r\n // Babak's Note: Above we store only the URL of the image rather than the accual image, while below we store the image it self:-\r\n // _imageUploadCallBackSummary = file =>\r\n // new Promise((resolve, reject) => {\r\n // let reader = new FileReader();\r\n // reader.readAsDataURL(file);\r\n // let img = new Image();\r\n // // let url = ''\r\n // reader.onload = function(e) {\r\n // img.src = this.result;\r\n // resolve({\r\n // data: {\r\n // link: img.src\r\n // }\r\n // });\r\n // };\r\n // });\r\n //\r\n // Babak's Note: Below is the compressed version of above:-\r\n _imageUploadCallBackSummary = file =>\r\n new Promise((resolve, reject) => {\r\n let reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n let img = new Image();\r\n // let url = ''\r\n reader.onload = function(e) {\r\n img.src = this.result;\r\n };\r\n img.onload = function() {\r\n // console.log(img.src.length)\r\n // Zoom the canvas needed for the image (you can also define the canvas tag directly in the DOM, so that the compressed image can be directly displayed without going to base64)\r\n let canvas = document.createElement(\"canvas\");\r\n let context = canvas.getContext(\"2d\");\r\n\r\n // image original size\r\n let originWidth = this.width;\r\n let originHeight = this.height;\r\n\r\n // Maximum size limit, you can achieve image compression by setting the width and height\r\n let maxWidth = 950,\r\n maxHeight = 950;\r\n // target size\r\n let targetWidth = originWidth,\r\n targetHeight = originHeight;\r\n // Image size exceeds 300x300 limit\r\n if (originWidth > maxWidth || originHeight > maxHeight) {\r\n if (originWidth / originHeight > maxWidth / maxHeight) {\r\n // wider, size limited by width\r\n targetWidth = maxWidth;\r\n targetHeight = Math.round(maxWidth * (originHeight / originWidth));\r\n } else {\r\n targetHeight = maxHeight;\r\n targetWidth = Math.round(maxHeight * (originWidth / originHeight));\r\n }\r\n }\r\n // canvas scales the image\r\n canvas.width = targetWidth;\r\n canvas.height = targetHeight;\r\n // clear the canvas\r\n context.clearRect(0, 0, targetWidth, targetHeight);\r\n // Image Compression\r\n context.drawImage(img, 0, 0, targetWidth, targetHeight);\r\n /* The first parameter is the created img object; the second three parameters are the upper left corner coordinates, and the second two are the canvas area width and height */\r\n\r\n // compressed image to base64 url\r\n /*canvas.toDataURL(mimeType, qualityArgument), mimeType The default value is 'image/png';\r\n * qualityArgument indicates the quality of the exported image. This parameter is valid only when exported to jpeg and webp formats. The default value is 0.92*/\r\n let newUrl = canvas.toDataURL(\"image/jpeg\", 0.92); //base64 format\r\n // console.log(newUrl.length)\r\n\r\n resolve({\r\n data: {\r\n link: newUrl\r\n }\r\n });\r\n // You can also convert the compressed image to blob format for uploading\r\n // canvas.toBlob((blob)=>{\r\n // console.log(blob)\r\n // // Pass the blob as a parameter to the backend\r\n // }, 'image/jpeg', 0.92)\r\n };\r\n });\r\n\r\n // onEditorStateChangeSummary = editorState => {\r\n // //window.alert(`editorState : ${editorState}`);\r\n\r\n // //console.log(\"onEditorStateChange : \", editorState);\r\n\r\n // const raw = convertToRaw(editorState.getCurrentContent());\r\n\r\n // const data = { ...this.state.data };\r\n // data[\"A_Summary\"] = JSON.stringify(raw);\r\n\r\n // // const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n // // // console.log(\r\n // // // \"onEditorStateChange : \",\r\n // // // JSON.stringify(raw.blocks.map(el => el.text))\r\n // // // );\r\n\r\n // // const data = { ...this.state.data };\r\n // // // data[\"A_Description\"] = JSON.stringify(raw.blocks.map(el => el.text));\r\n // // // data[\"A_Description\"] = JSON.stringify(raw.blocks[0].text);\r\n // // data[\"A_Description\"] = JSON.stringify(raw);\r\n // // //editorState = JSON.stringify(raw);\r\n\r\n // this.setState({\r\n // data,\r\n // A_Summary: editorState\r\n // });\r\n // };\r\n\r\n // renderInputControlledEditorSummary(name, label, type = \"text\") {\r\n // //\r\n // // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // // of 'this.state'\r\n // const { data, A_Summary } = this.state;\r\n\r\n // //const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n\r\n // // console.log(\r\n // // \"renderInputControlledEditor -> data : \",\r\n // // editorState,\r\n // // data[\"A_Description\"]\r\n // // );\r\n\r\n // //const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n // //console.log(\"onEditorStateChange : \", JSON.stringify(raw));\r\n // //const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n\r\n // // window.alert(`handle : innerTDButtonOther : ${date}`);\r\n // //console.log(\"renderInput : \", editorState);\r\n\r\n // //data[\"A_Description\"] = editorState;\r\n\r\n // return (\r\n //
\r\n // \r\n // \r\n //
\r\n // );\r\n // }\r\n\r\n // _imageUploadCallBackDescription = file =>\r\n // new Promise((resolve, reject) => {\r\n // let reader = new FileReader();\r\n // reader.readAsDataURL(file);\r\n // let img = new Image();\r\n // // let url = ''\r\n // reader.onload = function(e) {\r\n // img.src = this.result;\r\n // resolve({\r\n // data: {\r\n // link: img.src\r\n // }\r\n // });\r\n // };\r\n // });\r\n //\r\n // Babak's Note: Below is the compressed version of above:-\r\n _imageUploadCallBackDescription = file =>\r\n new Promise((resolve, reject) => {\r\n let reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n let img = new Image();\r\n // let url = ''\r\n reader.onload = function(e) {\r\n img.src = this.result;\r\n };\r\n img.onload = function() {\r\n // console.log(img.src.length)\r\n // Zoom the canvas needed for the image (you can also define the canvas tag directly in the DOM, so that the compressed image can be directly displayed without going to base64)\r\n let canvas = document.createElement(\"canvas\");\r\n let context = canvas.getContext(\"2d\");\r\n\r\n // image original size\r\n let originWidth = this.width;\r\n let originHeight = this.height;\r\n\r\n // Maximum size limit, you can achieve image compression by setting the width and height\r\n let maxWidth = 950,\r\n maxHeight = 950;\r\n // target size\r\n let targetWidth = originWidth,\r\n targetHeight = originHeight;\r\n // Image size exceeds 300x300 limit\r\n if (originWidth > maxWidth || originHeight > maxHeight) {\r\n if (originWidth / originHeight > maxWidth / maxHeight) {\r\n // wider, size limited by width\r\n targetWidth = maxWidth;\r\n targetHeight = Math.round(maxWidth * (originHeight / originWidth));\r\n } else {\r\n targetHeight = maxHeight;\r\n targetWidth = Math.round(maxHeight * (originWidth / originHeight));\r\n }\r\n }\r\n // canvas scales the image\r\n canvas.width = targetWidth;\r\n canvas.height = targetHeight;\r\n // clear the canvas\r\n context.clearRect(0, 0, targetWidth, targetHeight);\r\n // Image Compression\r\n context.drawImage(img, 0, 0, targetWidth, targetHeight);\r\n /* The first parameter is the created img object; the second three parameters are the upper left corner coordinates, and the second two are the canvas area width and height */\r\n\r\n // compressed image to base64 url\r\n /*canvas.toDataURL(mimeType, qualityArgument), mimeType The default value is 'image/png';\r\n * qualityArgument indicates the quality of the exported image. This parameter is valid only when exported to jpeg and webp formats. The default value is 0.92*/\r\n let newUrl = canvas.toDataURL(\"image/jpeg\", 0.92); //base64 format\r\n // console.log(newUrl.length)\r\n\r\n resolve({\r\n data: {\r\n link: newUrl\r\n }\r\n });\r\n // You can also convert the compressed image to blob format for uploading\r\n // canvas.toBlob((blob)=>{\r\n // console.log(blob)\r\n // // Pass the blob as a parameter to the backend\r\n // }, 'image/jpeg', 0.92)\r\n };\r\n });\r\n\r\n // onEditorStateChangeDescription = editorState => {\r\n // //window.alert(`editorState : ${editorState}`);\r\n\r\n // //console.log(\"onEditorStateChange : \", editorState);\r\n\r\n // const raw = convertToRaw(editorState.getCurrentContent());\r\n\r\n // const data = { ...this.state.data };\r\n // data[\"A_Description\"] = JSON.stringify(raw);\r\n\r\n // // const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n // // // console.log(\r\n // // // \"onEditorStateChange : \",\r\n // // // JSON.stringify(raw.blocks.map(el => el.text))\r\n // // // );\r\n\r\n // // const data = { ...this.state.data };\r\n // // // data[\"A_Description\"] = JSON.stringify(raw.blocks.map(el => el.text));\r\n // // // data[\"A_Description\"] = JSON.stringify(raw.blocks[0].text);\r\n // // data[\"A_Description\"] = JSON.stringify(raw);\r\n // // //editorState = JSON.stringify(raw);\r\n\r\n // this.setState({\r\n // data,\r\n // A_Description: editorState\r\n // });\r\n // };\r\n\r\n // renderInputControlledEditorDescription(name, label, type = \"text\") {\r\n // //\r\n // // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // // of 'this.state'\r\n // const { data, A_Description } = this.state;\r\n\r\n // //const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n\r\n // // console.log(\r\n // // \"renderInputControlledEditor -> data : \",\r\n // // editorState,\r\n // // data[\"A_Description\"]\r\n // // );\r\n\r\n // //const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n // //console.log(\"onEditorStateChange : \", JSON.stringify(raw));\r\n // //const raw = convertToRaw(this.state.editorState.getCurrentContent());\r\n\r\n // // window.alert(`handle : innerTDButtonOther : ${date}`);\r\n // //console.log(\"renderInput : \", editorState);\r\n\r\n // //data[\"A_Description\"] = editorState;\r\n\r\n // return (\r\n //
\r\n // \r\n // \r\n //
\r\n // );\r\n // }\r\n\r\n renderInputBillboardLargeLink(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputReference(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputSummary(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputLinkButton(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputButton(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputDescription(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputHoverSummary(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInput(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputHoverSummary01_Link(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, B_HoverSummary01_Linked, errors } = this.state;\r\n\r\n console.log(\r\n `renderInputHoverSummary01_Link zzzzzzzzzzzzzzzzzz : \r\n ${B_HoverSummary01_Linked}`\r\n );\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputGoogleMap(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputColourPickerMenu(name, label, type = \"color\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputColourPickerCust(name, label, type = \"color\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputColourPicker(name, label, type = \"color\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n renderInputRTL(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderTextArea(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n \r\n );\r\n }\r\n\r\n showHide = e => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n this.setState({\r\n type: this.state.type === \"password\" ? \"input\" : \"password\"\r\n });\r\n };\r\n\r\n handleChangePasswordStrength = ({ currentTarget: input }) => {\r\n //console.log(\"handleChange1: \", input);\r\n\r\n if (input.value === \"\") {\r\n this.setState({\r\n score: \"null\"\r\n });\r\n } else {\r\n let pw = zxcvbn(input.value);\r\n this.setState({\r\n score: pw.score\r\n });\r\n }\r\n\r\n const errors = { ...this.state.errors };\r\n const errorMessage = this.validateProperty(input);\r\n if (errorMessage) errors[input.name] = errorMessage;\r\n else delete errors[input.name];\r\n\r\n const data = { ...this.state.data };\r\n //console.log(\"handleChange2: \", input.name, data[input.name], input.value);\r\n //\r\n // Babak's Note: -- 1.Hard code version\r\n //data.username = e.currentTarget.value;\r\n\r\n //\r\n // Babak's Note: -- 2.Dynamic version\r\n //data[e.currentTarget.name] = e.currentTarget.value;\r\n\r\n //\r\n // Babak's Note: -- 3.Even better version\r\n data[input.name] = input.value;\r\n //console.log(\"handleChange3: \", input.name, data[input.name], input.value);\r\n this.setState({ data, errors });\r\n };\r\n\r\n passwordStrength(e) {\r\n if (e.target.value === \"\") {\r\n this.setState({\r\n score: \"null\"\r\n });\r\n } else {\r\n let pw = zxcvbn(e.target.value);\r\n this.setState({\r\n score: pw.score\r\n });\r\n }\r\n }\r\n\r\n renderPasswordInput(name, label, type = \"text\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n\r\n //console.log(\"renderInput : \", this.state.data, data, data[name]);\r\n\r\n return (\r\n //
\r\n // \r\n // \r\n // \r\n // {this.state.type === \"input\" ? \"Hide\" : \"Show\"}\r\n // \r\n // \r\n //
\r\n \r\n );\r\n }\r\n\r\n renderCheckboxRememberMe(name, label, type = \"checkbox\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n //console.log(\"renderCheckbox\", data[name]);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderCheckbox(name, label, type = \"checkbox\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n // console.log(\"renderCheck//box\", data[name], name, data);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderCheckboxLinkButton(name, label, type = \"checkbox\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n // console.log(\"renderCheck//box\", data[name], name, data);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderCheckboxHoverSummary01_Link(name, label, type = \"checkbox\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n // console.log(\"renderCheck//box\", data[name], name, data);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderCheckboxHover(name, label, type = \"checkbox\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n // console.log(\"renderCheck//box\", data[name], name, data);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderCheckboxGoogleMap(name, label, type = \"checkbox\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n // console.log(\"renderCheck//box\", data[name], name, data);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n // renderHomeBillboardImageFile(name, label, type = \"file\") {\r\n // //\r\n // // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // // of 'this.state'\r\n // const { data, errors } = this.state;\r\n // //console.log(\"renderImageFile\", data[name]);\r\n // return (\r\n //
\r\n // \r\n //
\r\n // );\r\n // }\r\n\r\n renderImageFile(name, label, type = \"file\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n //console.log(\"renderImageFile\", data[name]);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderSideImageFile(name, label, type = \"file\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n //console.log(\"renderImageFile\", data[name]);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n renderImageOnImageFile(name, label, type = \"file\") {\r\n //\r\n // Babak's Note: Below is called object destructing. This means we can remove where ever there is text\r\n // of 'this.state'\r\n const { data, errors } = this.state;\r\n //console.log(\"renderImageFile\", data[name]);\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default Form;\r\n","import { createAction } from \"@reduxjs/toolkit\";\r\n\r\nexport const apiCallBegan = createAction(\"api/callBegan\");\r\nexport const apiCallSuccess = createAction(\"api/callSuccess\");\r\nexport const apiCallFailed = createAction(\"api/callFailed\");\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"auth\",\r\n initialState: {\r\n list: [],\r\n loading: false,\r\n lastFetch: null,\r\n jwt: \"\",\r\n authError: \"\"\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'usersRequested' or 'usersReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'userLogin' below represents the 'state':-\r\n\r\n loadLoginRequested: (userLogin, action) => {\r\n console.log(\"loadLoginRequested : \", action.payload);\r\n userLogin.jwt = \"\";\r\n userLogin.authError = \"\";\r\n userLogin.loading = true;\r\n },\r\n loadLoginFailed: (userLogin, action) => {\r\n console.log(\"loadLoginFailed : \", action.payload);\r\n userLogin.authError = action.payload;\r\n userLogin.loading = false;\r\n // window.alert(`Error : ${action.payload}`);\r\n },\r\n //\r\n // Babak's Note: The 'userLogin' below represents the 'state':-\r\n loadLoginSucceeded: (userLogin, action) => {\r\n console.log(\"loadLoginSucceeded : \", action.payload);\r\n userLogin.jwt = action.payload;\r\n userLogin.loading = false;\r\n }\r\n }\r\n});\r\nconst {\r\n loadLoginRequested,\r\n loadLoginSucceeded,\r\n loadLoginFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/auth\";\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'adduser':-\r\nexport const loadLogin = userLogin =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: loadLoginRequested.type,\r\n data: {\r\n a_email: userLogin.username,\r\n a_password: userLogin.password\r\n },\r\n onSuccess: loadLoginSucceeded.type,\r\n onError: loadLoginFailed.type\r\n });\r\n\r\n// //\r\n// // Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'adduser':-\r\n// export const logout = userLogout() {\r\n// if (localStorage.getItem(tokenKey)) localStorage.removeItem(tokenKey);\r\n// else sessionStorage.removeItem(tokenKey);\r\n// };\r\n\r\n// export function logout() {\r\n// if (localStorage.getItem(tokenKey)) localStorage.removeItem(tokenKey);\r\n// else sessionStorage.removeItem(tokenKey);\r\n// }\r\n","import React from \"react\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\n// import backgroundImage from \"../../images/masthead-alt-06-wide-large.jpg\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { loadLogin } from \"../../store/auth\";\r\nimport auth from \"../../services/authService\";\r\nimport { connect } from \"react-redux\";\r\n\r\nclass LoginForm extends Form {\r\n state = {\r\n data: { username: \"\", password: \"\", rememberMe: false },\r\n jwt: \"\",\r\n errors: {}\r\n };\r\n\r\n schemaCreate = {\r\n username: Joi.string()\r\n // .email()\r\n .required()\r\n .label(\"Username\"),\r\n password: Joi.string()\r\n .required()\r\n .label(\"Password\"),\r\n rememberMe: Joi.boolean().label(\"Remember Me\")\r\n };\r\n\r\n schemaEdit = {\r\n username: Joi.string()\r\n // .email()\r\n .required()\r\n .label(\"Username\"),\r\n password: Joi.string()\r\n .required()\r\n .label(\"Password\"),\r\n rememberMe: Joi.boolean().label(\"Remember Me\")\r\n };\r\n\r\n componentDidMount() {\r\n // const { customizationSingleRow } = this.props;\r\n // document.body.style.backgroundImage = `url(${customizationSingleRow.I_LoginBGImage})`;\r\n // // document.body.style.backgroundColor = \"white\";\r\n // document.body.style.backgroundPosition = \"center center\";\r\n // document.body.style.backgroundAttachment = \"fixed\";\r\n // document.body.style.backgroundRepeat = \"no-repeat\";\r\n // document.body.style.backgroundSize = \"cover\";\r\n // // console.log(\"LoginForm, componentDidMount()\");\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n console.log(\r\n \"LoginForm, componentWillReceiveProps 1 : \",\r\n nextProps.login,\r\n nextProps.authError\r\n );\r\n\r\n const tokenKey = \"token\";\r\n const { data } = this.state;\r\n\r\n //\r\n // Babak's Note: 'componentWillReceiveProps' is ran after Redux store is updated, therefore 'this.props' is updated which passes values via param 'nextProps':-\r\n // 'componentWillReceiveProps' alos runs after 'componentDidMount'. 'componentDidMount' will not update 'this.props', we have to wait until\r\n // we reach 'componentWillReceiveProps'.\r\n if (nextProps.authError) {\r\n // this.setState({ errors: nextProps.authError });\r\n const errors = { ...this.state.data };\r\n // console.log(\r\n // \"componentWillReceiveProps 2 : \",\r\n // nextProps.authError,\r\n // errors,\r\n // this.state.errors.username\r\n // );\r\n errors.username = nextProps.authError;\r\n // console.log(\r\n // \"componentWillReceiveProps 3 : \",\r\n // nextProps.authError,\r\n // errors,\r\n // this.state.errors.username\r\n // );\r\n this.setState({ errors });\r\n } else if (this.state.jwt !== nextProps.jwt) {\r\n // this.setState({ data: nextProps.login });\r\n const jwt = nextProps.jwt;\r\n // console.log(\r\n // \"LoginForm, componentWillReceiveProps 2 : \",\r\n // data.rememberMe,\r\n // jwt\r\n // );\r\n if (data.rememberMe) await localStorage.setItem(tokenKey, jwt);\r\n else await sessionStorage.setItem(tokenKey, jwt);\r\n\r\n const { state } = this.props.location;\r\n window.location = state ? state.from.pathname : \"/\";\r\n }\r\n }\r\n\r\n // getDerivedStateFromProps(props, state) {\r\n // console.log(\"LoginForm, getDerivedStateFromProps 1 : \");\r\n // }\r\n\r\n // validate = () => {\r\n // // const result = Joi.validate(this.state.data, this.schema, {\r\n // // abortEarly: false\r\n // // });\r\n // //console.log(result);\r\n // // if (!result.error) return null;\r\n // // Babak's Note: Object destructering from above to below\r\n // const options = { abortEarly: false };\r\n // const { error } = Joi.validate(this.state.data, this.schema, options);\r\n // if (!error) return null;\r\n\r\n // const errors = {};\r\n // for (let item of error.details) errors[item.path[0]] = item.message;\r\n // return errors;\r\n // };\r\n\r\n // validateProperty = ({ name, value }) => {\r\n // //const obj = { username: value };\r\n // // Babak's Note: Changed above line to the below for 'Computed Properties' :-\r\n // const obj = { [name]: value };\r\n // const schema = { [name]: this.schema[name] };\r\n // const { error } = Joi.validate(obj, schema);\r\n // // if (error) return null;\r\n // // return error.details[0].message;\r\n // // Babak's Note: Changed above two lines to the below for 'Turner Operater' :-\r\n // return error ? error.details[0].message : null;\r\n\r\n // // if (name === \"username\") {\r\n // // if (value.trim() === \"\") return \"Username is required\";\r\n // // // other rules...\r\n // // }\r\n // // if (name === \"password\") {\r\n // // if (value.trim() === \"\") return \"Password is required\";\r\n // // // other rules...\r\n // // }\r\n // };\r\n //username = React.createRef();\r\n\r\n // componentDidMount() {\r\n // this.username.current.focus();\r\n // }\r\n\r\n doSubmit = async () => {\r\n // console.log(\"LoginForm, doSubmit 1 : \", this.props.login);\r\n\r\n //\r\n // Babak's Note: Call the server\r\n\r\n try {\r\n const { data } = this.state;\r\n // await auth.login(data.username, data.password, data.rememberMe);\r\n await this.props.loadLogin(data);\r\n\r\n //\r\n // Babak's Note: Replaced above line with below two lines so if 'state' that is passed from 'protectedRoute'\r\n // is populated then we go to 'pathname'(which ever page we clicked on) after logging in otherwise\r\n // go to home (\"/\") page :-\r\n // console.log(\r\n // \"LoginForm, doSubmit 2 : \",\r\n // this.props.login,\r\n // this.props.authError,\r\n // this.state.errors\r\n // );\r\n // const { state } = this.props.location;\r\n // window.location = state ? state.from.pathname : \"/\";\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.data };\r\n errors.username = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n render() {\r\n // console.log(\r\n // \"LoginForm, render() : \",\r\n // this.props.login,\r\n // this.props.authError,\r\n // this.state.errors\r\n // );\r\n\r\n const { customizationSingleRow } = this.props;\r\n\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n const sectionStyle = {\r\n height: \"100vh\",\r\n backgroundImage: `url(${customizationSingleRow.I_LoginBGImage})`,\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment: is_ios ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n //\r\n // Babak's Note: If we are logged in we can still goto 'loginForm' (this page) if we enter in the url\r\n // 'http://localhost:3000/login'. This is not correct. We add the following so we are redirected\r\n // back to 'movies' page. Also we did not use 'window.location = \"/\";' and used ''.\r\n // The user is not trying to login as we are already trying to login. We use 'window.location = \"/\";'\r\n // when we want to remount the application:-\r\n\r\n if (auth.getCurrentUser()) return ;\r\n\r\n return (\r\n
\r\n
\r\n \r\n {customizationSingleRow.A_LoginTitle}\r\n \r\n \r\n {customizationSingleRow.A_LoginTitle}\r\n \r\n
\r\n \r\n \r\n \r\n {/*
*/}\r\n

Patient Login

\r\n {/*
*/}\r\n
\r\n
\r\n {this.renderInputLoginFocus(\"username\", \"E-Mail\")}\r\n {this.renderInput(\"password\", \"Password\", \"password\")}\r\n\r\n
\r\n
{this.renderButton(\"Login\")}
\r\n
\r\n \r\n {this.renderCheckboxRememberMe(\r\n \"rememberMe\",\r\n \"Remember Me\"\r\n )}\r\n \r\n
\r\n
\r\n {/* \r\n Register\r\n */}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // users: state.entities.users.list.filter(user => !user.resolved)\r\n jwt: state.entities.auth.jwt,\r\n authError: state.entities.auth.authError\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadLogin: userLogin => dispatch(loadLogin(userLogin))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Users)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.users' and 'this.props.loadUsers()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(LoginForm);\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\n//\r\n// Babak's Note: Removed below line and replaced it by above, so 'auth' is an object. We access 'logout' by\r\n// entering 'auth.logout();' rather than just 'logout();' in 'componentDidMount()'. This is an\r\n// more object oriented way. In the 'authService.js' we must add :-\r\n// export default {\r\n// login,\r\n// logout\r\n// };\r\n// import { auth } from \"../services/authService\";\r\n\r\nclass Logout extends Component {\r\n componentDidMount() {\r\n auth.logout();\r\n\r\n window.location = \"/\";\r\n }\r\n\r\n render() {\r\n return null;\r\n }\r\n}\r\n\r\nexport default Logout;\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"customizations\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'customizationsRequested' or 'customizationsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'customizations' below represents the 'state':-\r\n customizationsRequested: (customizations, action) => {\r\n console.log(\"customizationsRequested : \", action.payload);\r\n customizations.loading = true;\r\n },\r\n customizationsReceived: (customizations, action) => {\r\n console.log(\"customizationsReceived : \", action.payload);\r\n customizations.list = action.payload;\r\n customizations.loading = false;\r\n customizations.lastFetch = Date.now();\r\n },\r\n customizationsRequestedFailed: (customizations, action) => {\r\n customizations.loading = false;\r\n // window.alert(`No Customizations found.`);\r\n },\r\n customizationRequested: (customization, action) => {\r\n // window.alert(\"customizationRequested : \", action.payload);\r\n customization.loading = true;\r\n },\r\n customizationReceived: (customization, action) => {\r\n console.log(\"customizationReceived : \", action.payload);\r\n customization.list = action.payload;\r\n customization.loading = false;\r\n customization.lastFetch = Date.now();\r\n },\r\n customizationRequestedFailed: (customization, action) => {\r\n // window.alert(`No Customization found.`);\r\n customization.loading = false;\r\n },\r\n\r\n customizationSingleRowRequested: (customization, action) => {\r\n // window.alert(\"customizationSingleRowequested : \", action.payload);\r\n customization.loading = true;\r\n },\r\n customizationSingleRowReceived: (customization, action) => {\r\n console.log(\"customizationSingleRowReceived : \", action.payload);\r\n customization.listSingleRow = action.payload;\r\n customization.loading = false;\r\n customization.lastFetch = Date.now();\r\n },\r\n customizationSingleRowRequestedFailed: (customization, action) => {\r\n // window.alert(`No customizationSingleRowRequestedFailed found.`);\r\n customization.loading = false;\r\n },\r\n\r\n customizationChangeRequested: (customization, action) => {\r\n console.log(\"customizationChangeRequested : \", action.payload);\r\n customization.loading = true;\r\n },\r\n customizationChangeFailed: (customization, action) => {\r\n customization.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete customization api at the back end.\r\n // const { ID: customizationId, A_Name: customizationName } = action.payload;\r\n\r\n // window.alert(`Customization '${customizationName}' no longer exists.`);\r\n\r\n // const index = customization.list.findIndex(customization => customization.ID === customizationId);\r\n // //console.log(\"customizationDeleted ha \", index);\r\n // customization.list.splice(index, 1);\r\n },\r\n customizationChanged: (customization, action) => {\r\n customization.loading = false;\r\n },\r\n customizationDeleteRequested: (customization, action) => {\r\n console.log(\"customizationDeleteRequested : \", action.payload);\r\n customization.loading = true;\r\n },\r\n customizationDeleteFailed: (customizations, action) => {\r\n customizations.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete customization api at the back end.\r\n const { ID: customizationId, A_Name: customizationName } = action.payload;\r\n\r\n // window.alert(\r\n // `An issue has occured with customization '${customizationName}'. ${action.payload}`\r\n // );\r\n\r\n const index = customizations.list.findIndex(\r\n customization => customization.ID === customizationId\r\n );\r\n //console.log(\"customizationDeleted ha \", index);\r\n customizations.list.splice(index, 1);\r\n },\r\n customizationDeleted: (customizations, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete customization api at the back end.\r\n const { ID: customizationID } = action.payload;\r\n // console.log(\"customizationDeleted ha \", action.payload, customizationID, customizations);\r\n const index = customizations.list.findIndex(\r\n customization => customization.ID === customizationID\r\n );\r\n //console.log(\"customizationDeleted, ha! ha! \", index);\r\n customizations.list.splice(index, 1);\r\n },\r\n customizationAddRequested: (customization, action) => {\r\n console.log(\"customizationAddRequested : \", action.payload);\r\n customization.loading = true;\r\n },\r\n customizationAddFailed: (customization, action) => {\r\n customization.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'customizations' below represents the 'state':-\r\n customizationAdded: (customizations, action) => {\r\n console.log(\"customizationAdded : \", action.payload);\r\n customizations.list.push(action.payload);\r\n }\r\n // customizationAdded: (customizations, action) => {\r\n // customizations.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // customizationDeleted: (customizations, action) => {\r\n // console.log(\"customizationDeleted ha \", action.payload.ID);\r\n // customizations.list.filter(customization => customization.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n customizationAddRequested,\r\n customizationAdded,\r\n customizationAddFailed,\r\n customizationChangeRequested,\r\n customizationChanged,\r\n customizationChangeFailed,\r\n customizationDeleteRequested,\r\n customizationDeleted,\r\n customizationDeleteFailed,\r\n customizationsReceived,\r\n customizationsRequested,\r\n customizationsRequestedFailed,\r\n customizationReceived,\r\n customizationRequested,\r\n customizationRequestedFailed,\r\n customizationSingleRowReceived,\r\n customizationSingleRowRequested,\r\n customizationSingleRowRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/customizations\";\r\n\r\nexport const loadCustomizations = () => (dispatch, getState) => {\r\n const { lastFetch } = getState().entities.customizations;\r\n\r\n console.log(\"loadCustomizations lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: customizationsRequested.type,\r\n method: \"get\",\r\n onSuccess: customizationsReceived.type,\r\n onError: customizationsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadCustomization = customizationID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.customizations;\r\n\r\n //console.log(\"loadCustomization : \", customizationID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + customizationID,\r\n onStart: customizationRequested.type,\r\n method: \"get\",\r\n onSuccess: customizationReceived.type,\r\n onError: customizationRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadCustomizationSingleRow = customizationID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.customizations;\r\n\r\n //console.log(\"loadCustomization : \", customizationID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + customizationID,\r\n onStart: customizationSingleRowRequested.type,\r\n method: \"get\",\r\n onSuccess: customizationSingleRowReceived.type,\r\n onError: customizationSingleRowRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addCustomization':-\r\nexport const addCustomization = (customization, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: customizationAddRequested.type,\r\n // data: customization,\r\n data: {\r\n A_WebAppTitle: customization.A_WebAppTitle,\r\n A_BaseNavbarBGC: customization.A_BaseNavbarBGC,\r\n A_BaseNavbarFGC: customization.A_BaseNavbarFGC,\r\n A_BaseNavbarHover: customization.A_BaseNavbarHover,\r\n A_BaseSearchBtnBGC: customization.A_BaseSearchBtnBGC,\r\n A_BaseSearchBtnFGC: customization.A_BaseSearchBtnFGC,\r\n A_BaseSearchBtnHover: customization.A_BaseSearchBtnHover,\r\n B_ClientNavbarActive: customization.B_ClientNavbarActive,\r\n B_TopNavbarActive: customization.B_TopNavbarActive,\r\n A_TopNavbarBGC: customization.A_TopNavbarBGC,\r\n A_TopNavbarFGC: customization.A_TopNavbarFGC,\r\n A_TopNavbarHover: customization.A_TopNavbarHover,\r\n A_TopSearchBtnBGC: customization.A_TopSearchBtnBGC,\r\n A_TopSearchBtnFGC: customization.A_TopSearchBtnFGC,\r\n A_TopSearchBtnHover: customization.A_TopSearchBtnHover,\r\n I_LoginBGImage: customization.I_LoginBGImage,\r\n A_LoginTitle: customization.A_LoginTitle,\r\n N_AboutUsNo: customization.N_AboutUsNo,\r\n N_ContactUsNo: customization.N_ContactUsNo,\r\n B_GoogleMap: customization.B_GoogleMap,\r\n A_GoogleKey: customization.A_GoogleKey,\r\n F_Lat: customization.F_Lat,\r\n F_Lng: customization.F_Lng,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: customizationAdded.type,\r\n onError: customizationAddFailed.type\r\n });\r\n\r\nexport const getCustomizations = createSelector(\r\n state => state.entities.customizations,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (customizations, projects) has not changed then do not requery again:-\r\n // (customizations) => customizations.list.filter(customization => !customization.B_Active)\r\n customizations => customizations.list\r\n);\r\n\r\nexport const changeCustomization = (customization, user, currentDate) =>\r\n apiCallBegan({\r\n url: url + \"/\" + customization.ID,\r\n method: \"put\",\r\n onStart: customizationChangeRequested.type,\r\n // data: customization,\r\n data: {\r\n ID: customization.ID,\r\n A_WebAppTitle: customization.A_WebAppTitle,\r\n A_BaseNavbarBGC: customization.A_BaseNavbarBGC,\r\n A_BaseNavbarFGC: customization.A_BaseNavbarFGC,\r\n A_BaseNavbarHover: customization.A_BaseNavbarHover,\r\n A_BaseSearchBtnBGC: customization.A_BaseSearchBtnBGC,\r\n A_BaseSearchBtnFGC: customization.A_BaseSearchBtnFGC,\r\n A_BaseSearchBtnHover: customization.A_BaseSearchBtnHover,\r\n B_ClientNavbarActive: customization.B_ClientNavbarActive,\r\n B_TopNavbarActive: customization.B_TopNavbarActive,\r\n A_TopNavbarBGC: customization.A_TopNavbarBGC,\r\n A_TopNavbarFGC: customization.A_TopNavbarFGC,\r\n A_TopNavbarHover: customization.A_TopNavbarHover,\r\n A_TopSearchBtnBGC: customization.A_TopSearchBtnBGC,\r\n A_TopSearchBtnFGC: customization.A_TopSearchBtnFGC,\r\n A_TopSearchBtnHover: customization.A_TopSearchBtnHover,\r\n I_LoginBGImage: customization.I_LoginBGImage,\r\n A_LoginTitle: customization.A_LoginTitle,\r\n N_AboutUsNo: customization.N_AboutUsNo,\r\n N_ContactUsNo: customization.N_ContactUsNo,\r\n B_GoogleMap: customization.B_GoogleMap,\r\n A_GoogleKey: customization.A_GoogleKey,\r\n F_Lat: customization.F_Lat,\r\n F_Lng: customization.F_Lng,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: customizationChanged.type,\r\n onError: customizationChangeFailed.type\r\n });\r\n\r\nexport const deleteCustomization = customization =>\r\n apiCallBegan({\r\n url: url + \"/\" + customization.ID,\r\n method: \"delete\",\r\n onStart: customizationDeleteRequested.type,\r\n data: { ID: customization.ID, A_Name: customization.A_Name },\r\n onSuccess: customizationDeleted.type,\r\n onError: customizationDeleteFailed.type\r\n });\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"menus\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'menusRequested' or 'menusReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'menus' below represents the 'state':-\r\n menusRequested: (menus, action) => {\r\n console.log(\"menusRequested : \", action.payload);\r\n menus.loading = true;\r\n },\r\n menusReceived: (menus, action) => {\r\n console.log(\"menusReceived : \", action.payload);\r\n menus.list = action.payload;\r\n menus.loading = false;\r\n menus.lastFetch = Date.now();\r\n },\r\n menusRequestedFailed: (menus, action) => {\r\n menus.loading = false;\r\n // window.alert(`No Menus found.`);\r\n },\r\n\r\n menusOnNavbarRequested: (menus, action) => {\r\n console.log(\"menusOnNavbarRequested : \", action.payload);\r\n menus.loading = true;\r\n },\r\n menusOnNavbarReceived: (menus, action) => {\r\n console.log(\"menusOnNavbarReceived : \", action.payload);\r\n menus.listOnNavvar = action.payload;\r\n menus.loading = false;\r\n menus.lastFetch = Date.now();\r\n },\r\n menusOnNavbarRequestedFailed: (menus, action) => {\r\n menus.loading = false;\r\n // window.alert(`No Menus found.`);\r\n },\r\n\r\n menuRequested: (menu, action) => {\r\n console.log(\"menuRequested : \", action.payload);\r\n menu.loading = true;\r\n },\r\n menuReceived: (menu, action) => {\r\n console.log(\"menuReceived : \", action.payload);\r\n menu.listSingleRow = action.payload;\r\n menu.loading = false;\r\n menu.lastFetch = Date.now();\r\n },\r\n menuRequestedFailed: (menu, action) => {\r\n menu.loading = false;\r\n // window.alert(`No Menu found.`);\r\n },\r\n menuChangeRequested: (menu, action) => {\r\n console.log(\"menuChangeRequested : \", action.payload);\r\n menu.loading = true;\r\n },\r\n menuChangeFailed: (menu, action) => {\r\n menu.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete menu api at the back end.\r\n // const { ID: menuId, A_Name: menuName } = action.payload;\r\n\r\n // window.alert(`Menu '${menuName}' no longer exists.`);\r\n\r\n // const index = menu.list.findIndex(menu => menu.ID === menuId);\r\n // //console.log(\"menuDeleted ha \", index);\r\n // menu.list.splice(index, 1);\r\n },\r\n menuChanged: (menu, action) => {\r\n menu.loading = false;\r\n },\r\n menuDeleteRequested: (menu, action) => {\r\n console.log(\"menuDeleteRequested : \", action.payload);\r\n menu.loading = true;\r\n },\r\n menuDeleteFailed: (menus, action) => {\r\n menus.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete menu api at the back end.\r\n const { ID: menuId, A_Name: menuName } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with menu '${menuName}'. ${action.payload}`\r\n );\r\n\r\n const index = menus.list.findIndex(menu => menu.ID === menuId);\r\n //console.log(\"menuDeleted ha \", index);\r\n menus.list.splice(index, 1);\r\n },\r\n menuDeleted: (menus, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete menu api at the back end.\r\n const { ID: menuID } = action.payload;\r\n // console.log(\"menuDeleted ha \", action.payload, menuID, menus);\r\n const index = menus.list.findIndex(menu => menu.ID === menuID);\r\n //console.log(\"menuDeleted, ha! ha! \", index);\r\n menus.list.splice(index, 1);\r\n },\r\n menuAddRequested: (menu, action) => {\r\n console.log(\"menuAddRequested : \", action.payload);\r\n menu.loading = true;\r\n },\r\n menuAddFailed: (menu, action) => {\r\n menu.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'menus' below represents the 'state':-\r\n menuAdded: (menus, action) => {\r\n console.log(\"menuAdded : \", action.payload);\r\n menus.list.push(action.payload);\r\n }\r\n // menuAdded: (menus, action) => {\r\n // menus.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // menuDeleted: (menus, action) => {\r\n // console.log(\"menuDeleted ha \", action.payload.ID);\r\n // menus.list.filter(menu => menu.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n menuAddRequested,\r\n menuAdded,\r\n menuAddFailed,\r\n menuChangeRequested,\r\n menuChanged,\r\n menuChangeFailed,\r\n menuDeleteRequested,\r\n menuDeleted,\r\n menuDeleteFailed,\r\n menusReceived,\r\n menusRequested,\r\n menusRequestedFailed,\r\n menusOnNavbarReceived,\r\n menusOnNavbarRequested,\r\n menusOnNavbarRequestedFailed,\r\n menuReceived,\r\n menuRequested,\r\n menuRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/menus\";\r\n\r\nexport const loadMenus = billLocationGroupID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.menus;\r\n\r\n // console.log(\"loadMenus lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/menusMaintaince\" + \"/\" + billLocationGroupID,\r\n onStart: menusRequested.type,\r\n method: \"get\",\r\n onSuccess: menusReceived.type,\r\n onError: menusRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadMenusOnNavbar = billLocationGroupID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.menus;\r\n\r\n // console.log(\"loadMenus lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/menus\" + \"/\" + billLocationGroupID,\r\n onStart: menusOnNavbarRequested.type,\r\n method: \"get\",\r\n onSuccess: menusOnNavbarReceived.type,\r\n onError: menusOnNavbarRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadMenu = menuID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.menus;\r\n\r\n //console.log(\"loadMenu : \", menuID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + menuID,\r\n onStart: menuRequested.type,\r\n method: \"get\",\r\n onSuccess: menuReceived.type,\r\n onError: menuRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addMenu':-\r\nexport const addMenu = (menu, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: menuAddRequested.type,\r\n //data: menu,\r\n data: {\r\n B_Billboard: menu.B_Billboard,\r\n N_BillboardOrigin_ID: menu.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: menu.N_HomeLocationGroup_ID,\r\n N_BillboardMenuBG_ID: menu.N_BillboardMenuBG_ID,\r\n N_Order_No: menu.N_Order_No,\r\n A_Reference: menu.A_Reference,\r\n A_Summary: menu.A_Summary,\r\n N_ParentOrigin_ID: menu.N_ParentOrigin_ID,\r\n I_Image: menu.I_Image,\r\n A_MenuCursorColour: menu.A_MenuCursorColour,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: menuAdded.type,\r\n onError: menuAddFailed.type\r\n });\r\n\r\nexport const getMenus = createSelector(\r\n state => state.entities.menus,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (menus, projects) has not changed then do not requery again:-\r\n // (menus) => menus.list.filter(menu => !menu.B_Active)\r\n menus => menus.list\r\n);\r\n\r\nexport const changeMenu = (menu, user, currentDate) =>\r\n apiCallBegan({\r\n url: url + \"/\" + menu.ID,\r\n method: \"put\",\r\n onStart: menuChangeRequested.type,\r\n data: {\r\n B_Billboard: menu.B_Billboard,\r\n N_BillboardOrigin_ID: menu.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: menu.N_HomeLocationGroup_ID,\r\n N_BillboardMenuBG_ID: menu.N_BillboardMenuBG_ID,\r\n N_Order_No: menu.N_Order_No,\r\n A_Reference: menu.A_Reference,\r\n A_Summary: menu.A_Summary,\r\n N_ParentOrigin_ID: menu.N_ParentOrigin_ID,\r\n I_Image: menu.I_Image,\r\n A_MenuCursorColour: menu.A_MenuCursorColour,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: menuChanged.type,\r\n onError: menuChangeFailed.type\r\n });\r\n\r\nexport const deleteMenu = menu =>\r\n apiCallBegan({\r\n url: url + \"/\" + menu.ID,\r\n method: \"delete\",\r\n onStart: menuDeleteRequested.type,\r\n data: { ID: menu.ID, A_Reference: menu.A_Reference },\r\n onSuccess: menuDeleted.type,\r\n onError: menuDeleteFailed.type\r\n });\r\n","// import Raven from \"raven-js\";\r\n\r\nfunction init() {\r\n // Raven.config(\"https://5f9320a4e45c45fcb36eee0a5dc8eab5@sentry.io/1431933\", {\r\n // release: \"1-0-0\",\r\n // environment: \"development-test\"\r\n // }).install();\r\n}\r\n\r\nfunction log(error) {\r\n console.error(error);\r\n // Raven.captureException(error);\r\n}\r\n\r\nexport default {\r\n init,\r\n log\r\n};\r\n","import axios from \"axios\";\r\nimport logger from \"./logService\";\r\nimport { toast } from \"react-toastify\";\r\n\r\naxios.defaults.baseURL = process.env.REACT_APP_API_URL;\r\n\r\naxios.interceptors.response.use(null, error => {\r\n //console.log(\"axios 01 : \", process.env.REACT_APP_API_URL);\r\n const expectedError =\r\n error.response &&\r\n error.response.status >= 400 &&\r\n error.response.status < 500;\r\n\r\n //console.log(\"axios : \", axios.defaults.maxContentLength);\r\n\r\n if (!expectedError) {\r\n //console.log(\"axios 02 : \", error);\r\n logger.log(error);\r\n //console.log(\"Logging the error\", error);\r\n // alert(\"An unexpected error occurred.\");\r\n toast(\"An unexpected error occurred.\");\r\n // toast.error(\"An unexpected error occurred.\");\r\n //toast.success\r\n //toast.info\r\n }\r\n\r\n return Promise.reject(error);\r\n});\r\n\r\nfunction setJwt(jwt) {\r\n //\r\n // Babak's Note: Below line is for when ever we want a http request, we add this token to 'axios'. We require\r\n // to add this as we set 'true' in project 'vidly-api-node' -> 'default.json' ->\r\n // \"requireAuth: true\". So this means we require authority or authentication in order to want\r\n // a http request and by adding our authentication token to 'axios' we are authenticaed.\r\n // Therefore if user is not logged in, this token will not be set and so no authority with be\r\n // given.\r\n //axios.defaults.maxContentLength = Infinity;\r\n axios.defaults.headers.common[\"x-auth-token\"] = jwt;\r\n}\r\n\r\nexport default {\r\n get: axios.get,\r\n post: axios.post,\r\n put: axios.put,\r\n delete: axios.delete,\r\n setJwt\r\n};\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/menus\";\r\nconst apiEndpoint = \"/customizations\";\r\n\r\nfunction CustomizationUrl(id) {\r\n return `${apiEndpoint}/${id}`;\r\n}\r\n\r\nexport function getCustomizations() {\r\n //console.log(\"getMenus : \", apiEndpoint);\r\n return http.get(apiEndpoint);\r\n}\r\n\r\nexport function getCustomization(customizationID) {\r\n // console.log(\r\n // \"getMenu : \",\r\n // CustomizationUrl(menuID)\r\n // );\r\n return http.get(CustomizationUrl(customizationID));\r\n}\r\n\r\nexport function saveCustomization(customization, userID, currentDate) {\r\n // let D_Inserted = new Date();\r\n // // let D_Inserted =\r\n // // new Date().getMonth() +\r\n // // \"/\" +\r\n // // new Date().getDate() +\r\n // // \"/\" +\r\n // // new Date().getFullYear();\r\n\r\n //console.log(\"saveMenu PUT 1 : \", menu, userID, D_Inserted);\r\n\r\n // let D_Updated = new Date();\r\n // // let D_Updated =\r\n // // new Date().getMonth() +\r\n // // \"/\" +\r\n // // new Date().getDate() +\r\n // // \"/\" +\r\n // // new Date().getFullYear();\r\n\r\n // const A_Inserted_By = userID;\r\n // const A_Updated_By = userID;\r\n\r\n if (customization.ID) {\r\n // console.log(\r\n // \"saveMenu PUT 2 : \",\r\n // // CustomizationUrl(menu.ID),\r\n // // body,\r\n // menu.ID,\r\n // menu,\r\n // D_Inserted,\r\n // A_Inserted_By,\r\n // D_Updated,\r\n // A_Updated_By\r\n // );\r\n\r\n const body = {\r\n ...customization,\r\n D_Updated: currentDate,\r\n A_Updated_By: userID\r\n };\r\n delete body.ID;\r\n\r\n return http.put(CustomizationUrl(customization.ID), body);\r\n }\r\n\r\n //console.log(\"saveMenu POST : \", apiEndpoint, menu);\r\n return http.post(apiEndpoint, {\r\n A_WebAppTitle: customization.A_WebAppTitle,\r\n A_BaseNavbarBGC: customization.A_BaseNavbarBGC,\r\n A_BaseNavbarFGC: customization.A_BaseNavbarFGC,\r\n A_BaseNavbarHover: customization.A_BaseNavbarHover,\r\n A_BaseSearchBtnBGC: customization.A_BaseSearchBtnBGC,\r\n A_BaseSearchBtnFGC: customization.A_BaseSearchBtnFGC,\r\n A_BaseSearchBtnHover: customization.A_BaseSearchBtnHover,\r\n B_ClientNavbarActive: customization.B_ClientNavbarActive,\r\n B_TopNavbarActive: customization.B_TopNavbarActive,\r\n A_TopNavbarBGC: customization.A_TopNavbarBGC,\r\n A_TopNavbarFGC: customization.A_TopNavbarFGC,\r\n A_TopNavbarHover: customization.A_TopNavbarHover,\r\n A_TopSearchBtnBGC: customization.A_TopSearchBtnBGC,\r\n A_TopSearchBtnFGC: customization.A_TopSearchBtnFGC,\r\n A_TopSearchBtnHover: customization.A_TopSearchBtnHover,\r\n I_LoginBGImage: customization.I_LoginBGImage,\r\n A_LoginTitle: customization.A_LoginTitle,\r\n N_AboutUsNo: customization.N_AboutUsNo,\r\n N_ContactUsNo: customization.N_ContactUsNo,\r\n B_GoogleMap: customization.B_GoogleMap,\r\n A_GoogleKey: customization.A_GoogleKey,\r\n F_Lat: customization.F_Lat,\r\n F_Lng: customization.F_Lng,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: userID\r\n });\r\n}\r\n\r\nexport function deleteCustomization(customizationId) {\r\n return http.delete(CustomizationUrl(customizationId));\r\n}\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport {\r\n getCustomization,\r\n saveCustomization\r\n} from \"../../services/customizationService\";\r\n// import {\r\n// loadCustomization,\r\n// addCustomization,\r\n// changeCustomization\r\n// } from \"../../store/customizations\";\r\n// import { connect } from \"react-redux\";\r\n\r\nclass CustomizationForm extends Form {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n data: {\r\n ID: \"\",\r\n A_WebAppTitle: \"\",\r\n A_BaseNavbarBGC: \"\",\r\n A_BaseNavbarFGC: \"\",\r\n A_BaseNavbarHover: \"\",\r\n A_BaseSearchBtnBGC: \"\",\r\n A_BaseSearchBtnFGC: \"\",\r\n A_BaseSearchBtnHover: \"\",\r\n B_ClientNavbarActive: false,\r\n B_TopNavbarActive: false,\r\n A_TopNavbarBGC: \"\",\r\n A_TopNavbarFGC: \"\",\r\n A_TopNavbarHover: \"\",\r\n A_TopSearchBtnBGC: \"\",\r\n A_TopSearchBtnFGC: \"\",\r\n A_TopSearchBtnHover: \"\",\r\n I_LoginBGImage: \"\",\r\n A_LoginTitle: \"\",\r\n N_AboutUsNo: 0,\r\n N_ContactUsNo: 0,\r\n B_GoogleMap: false,\r\n A_GoogleKey: \"\",\r\n F_Lat: 0,\r\n F_Lng: 0,\r\n D_Inserted: \"\",\r\n A_Inserted_By: \"\",\r\n D_Updated: \"\",\r\n A_Updated_By: \"\"\r\n },\r\n errors: {}\r\n };\r\n }\r\n\r\n schemaCreate = {\r\n ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n A_WebAppTitle: Joi.string()\r\n .required()\r\n .min(10)\r\n .max(300)\r\n .label(\"WebApp Title\"),\r\n A_BaseNavbarBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Navbar BGC\"),\r\n A_BaseNavbarFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Navbar FGC\"),\r\n A_BaseNavbarHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Navbar Hover\"),\r\n A_BaseSearchBtnBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Search BGC\"),\r\n A_BaseSearchBtnFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Search FGC\"),\r\n A_BaseSearchBtnHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Search Hover\"),\r\n B_ClientNavbarActive: Joi.boolean().label(\"Client Navbar Active\"),\r\n B_TopNavbarActive: Joi.boolean().label(\"Top Navbar Active\"),\r\n A_TopNavbarBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Navbar BGC\"),\r\n A_TopNavbarFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Navbar FGC\"),\r\n A_TopNavbarHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Navbar Hover\"),\r\n A_TopSearchBtnBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Search BGC\"),\r\n A_TopSearchBtnFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Search FGC\"),\r\n A_TopSearchBtnHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Search Hover\"),\r\n I_LoginBGImage: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n .optional(),\r\n A_LoginTitle: Joi.string()\r\n .min(10)\r\n .max(40)\r\n .required()\r\n .label(\"Login Title\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_AboutUsNo: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ContactUsNo: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n B_GoogleMap: Joi.boolean().label(\"Google Map\"),\r\n A_GoogleKey: Joi.string()\r\n .min(10)\r\n .max(500)\r\n .required()\r\n .label(\"Google Key\"),\r\n F_Lat: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n F_Lng: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n D_Inserted: Joi.string()\r\n .allow(\"\")\r\n .optional(),\r\n A_Inserted_By: Joi.string()\r\n .allow(\"\")\r\n .optional(),\r\n D_Updated: Joi.string()\r\n .allow(\"\")\r\n .optional(),\r\n A_Updated_By: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.number(),\r\n A_WebAppTitle: Joi.string()\r\n .required()\r\n .min(10)\r\n .max(300)\r\n .label(\"WebApp Title\"),\r\n A_BaseNavbarBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Navbar BGC\"),\r\n A_BaseNavbarFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Navbar FGC\"),\r\n A_BaseNavbarHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Navbar Hover\"),\r\n A_BaseSearchBtnBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Search BGC\"),\r\n A_BaseSearchBtnFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Search FGC\"),\r\n A_BaseSearchBtnHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Base Search Hover\"),\r\n B_ClientNavbarActive: Joi.boolean().label(\"Client Navbar Active\"),\r\n B_TopNavbarActive: Joi.boolean().label(\"Top Navbar Active\"),\r\n A_TopNavbarBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Navbar BGC\"),\r\n A_TopNavbarFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Navbar FGC\"),\r\n A_TopNavbarHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Navbar Hover\"),\r\n A_TopSearchBtnBGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Search BGC\"),\r\n A_TopSearchBtnFGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Search FGC\"),\r\n A_TopSearchBtnHover: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Top Search Hover\"),\r\n I_LoginBGImage: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n .optional(),\r\n A_LoginTitle: Joi.string()\r\n .min(10)\r\n .max(40)\r\n .required()\r\n .label(\"Login Title\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_AboutUsNo: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ContactUsNo: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n B_GoogleMap: Joi.boolean().label(\"Google Map\"),\r\n A_GoogleKey: Joi.string()\r\n .min(10)\r\n .max(500)\r\n .required()\r\n .label(\"Google Key\"),\r\n F_Lat: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n F_Lng: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n D_Inserted: Joi.string()\r\n .allow(\"\")\r\n .optional(),\r\n A_Inserted_By: Joi.string()\r\n .allow(\"\")\r\n .optional(),\r\n D_Updated: Joi.string()\r\n .allow(\"\")\r\n .optional(),\r\n A_Updated_By: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n // async componentDidMount() {\r\n // // console.log(\"CustomizationForm, componentDidMount\");\r\n\r\n // const customizationId = this.props.match.params.id;\r\n // if (customizationId === \"new\") return;\r\n\r\n // this.props.loadCustomization(customizationId);\r\n // }\r\n\r\n async populateCustomization() {\r\n //console.log(\"populateUsers-1\");\r\n try {\r\n const customizationId = this.props.match.params.id;\r\n if (customizationId === \"new\") return;\r\n\r\n const { data: customization } = await getCustomization(customizationId);\r\n this.setState({ data: this.mapToViewModel(customization) });\r\n //console.log(\"populateUsers-2\", this.mapToViewModel(user));\r\n //this.setState({ data: user });\r\n //console.log(\"populateUsers-2\", this.state.data);\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n this.props.history.replace(\"/not-found\");\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n //console.log(\"SubmicomponentDidMounttted\");\r\n\r\n await this.populateCustomization();\r\n }\r\n\r\n // async componentWillReceiveProps(nextProps) {\r\n // console.log(\r\n // \"CustomizationForm, componentWillReceiveProps\",\r\n // nextProps.customization\r\n // );\r\n\r\n // //\r\n // // Babak's Note: 'componentWillReceiveProps' is ran after Redux store is updated, therefore 'this.props' is updated which passes values via param 'nextProps':-\r\n // // 'componentWillReceiveProps' alos runs after 'componentDidMount'. 'componentDidMount' will not update 'this.props', we have to wait until\r\n // // we reach 'componentWillReceiveProps'.\r\n // if (this.state.data !== nextProps.customization) {\r\n // this.setState({\r\n // data: await this.mapToViewModel(nextProps.customization)\r\n // });\r\n // }\r\n // }\r\n\r\n mapToViewModel(customization) {\r\n //console.log(\"mapToViewModel-1\", customization);\r\n return {\r\n ID: customization.ID,\r\n A_WebAppTitle: customization.A_WebAppTitle,\r\n A_BaseNavbarBGC: customization.A_BaseNavbarBGC,\r\n A_BaseNavbarFGC: customization.A_BaseNavbarFGC,\r\n A_BaseNavbarHover: customization.A_BaseNavbarHover,\r\n A_BaseSearchBtnBGC: customization.A_BaseSearchBtnBGC,\r\n A_BaseSearchBtnFGC: customization.A_BaseSearchBtnFGC,\r\n A_BaseSearchBtnHover: customization.A_BaseSearchBtnHover,\r\n B_ClientNavbarActive: customization.B_ClientNavbarActive,\r\n B_TopNavbarActive: customization.B_TopNavbarActive,\r\n A_TopNavbarBGC: customization.A_TopNavbarBGC,\r\n A_TopNavbarFGC: customization.A_TopNavbarFGC,\r\n A_TopNavbarHover: customization.A_TopNavbarHover,\r\n A_TopSearchBtnBGC: customization.A_TopSearchBtnBGC,\r\n A_TopSearchBtnFGC: customization.A_TopSearchBtnFGC,\r\n A_TopSearchBtnHover: customization.A_TopSearchBtnHover,\r\n I_LoginBGImage: customization.I_LoginBGImage,\r\n A_LoginTitle: customization.A_LoginTitle,\r\n N_AboutUsNo: customization.N_AboutUsNo,\r\n N_ContactUsNo: customization.N_ContactUsNo,\r\n B_GoogleMap: customization.B_GoogleMap,\r\n A_GoogleKey: customization.A_GoogleKey,\r\n F_Lat: customization.F_Lat,\r\n F_Lng: customization.F_Lng,\r\n D_Inserted: customization.D_Inserted,\r\n A_Inserted_By: customization.A_Inserted_By\r\n };\r\n }\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_LoginBGImage\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n doSubmit = async () => {\r\n // await saveCustomization(this.state.data);\r\n // this.props.history.push(\"/customizations\");\r\n\r\n // console.log(\"CustomizationForm, doSubmit : \", this.state.data);\r\n\r\n try {\r\n const customizationId = this.props.match.params.id;\r\n if (customizationId === \"new\") {\r\n // console.log(\"userrrrrrrrrrrrrr : \", auth.getCurrentUser().a_name);\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n // await this.props.addCustomization(\r\n // this.state.data,\r\n // auth.getCurrentUser().a_name,\r\n // currentDateWithoutTime\r\n // );\r\n const response = await saveCustomization(this.state.data);\r\n this.props.history.goBack();\r\n } else {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n // await this.props.changeCustomization(\r\n // this.state.data,\r\n // auth.getCurrentUser().a_name,\r\n // currentDateWithoutTime\r\n // );\r\n const response = await saveCustomization(this.state.data);\r\n this.props.history.goBack();\r\n }\r\n // await savecustomization(this.state.data);\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.A_WebAppTitle = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n // this.props.history.push(\"/customizationsList\");\r\n //\r\n // Babak's Note: Use below rather than above:-\r\n // this.props.history.goBack();\r\n };\r\n\r\n render() {\r\n console.log(\r\n \"CustomizationForm render\",\r\n this.props.customization,\r\n this.state.data\r\n );\r\n return (\r\n \r\n

Customization Form

\r\n
\r\n {/* */}\r\n {this.renderInput(\"A_WebAppTitle\", \"WebApp Title\")}\r\n\r\n
\r\n {\"Colour codes\"}\r\n
\r\n {this.renderInputColourPickerCust(\r\n \"A_BaseNavbarBGC\",\r\n \"Base Navbar BGC\"\r\n )}\r\n {this.renderInputColourPickerCust(\r\n \"A_BaseNavbarFGC\",\r\n \"Base Navbar FGC\"\r\n )}\r\n {this.renderInputColourPickerCust(\r\n \"A_BaseNavbarHover\",\r\n \"Base Navbar Hover\"\r\n )}\r\n {this.renderInputColourPickerCust(\r\n \"A_BaseSearchBtnBGC\",\r\n \"Base Search BGC\"\r\n )}\r\n {this.renderInputColourPickerCust(\r\n \"A_BaseSearchBtnFGC\",\r\n \"Base Search FGC\"\r\n )}\r\n {this.renderInputColourPickerCust(\r\n \"A_BaseSearchBtnHover\",\r\n \"Base Search Hover\"\r\n )}\r\n {this.renderCheckbox(\"B_ClientNavbarActive\", \"Client Navbar Active\")}\r\n {this.renderCheckbox(\"B_TopNavbarActive\", \"Top Navbar Active\")}\r\n {this.renderInputColourPickerCust(\"A_TopNavbarBGC\", \"Top Navbar BGC\")}\r\n {this.renderInputColourPickerCust(\"A_TopNavbarFGC\", \"Top Navbar FGC\")}\r\n {this.renderInputColourPickerCust(\r\n \"A_TopNavbarHover\",\r\n \"Top Navbar Hover\"\r\n )}\r\n {this.renderInputColourPickerCust(\r\n \"A_TopSearchBtnBGC\",\r\n \"Top Search BGC\"\r\n )}\r\n {this.renderInputColourPickerCust(\r\n \"A_TopSearchBtnFGC\",\r\n \"Top Search FGC\"\r\n )}\r\n\r\n
\r\n {\"Login Background Image\"}\r\n
\r\n {this.renderImageFile(\r\n \"I_LoginBGImage\",\r\n \"Upload Login Background Image\"\r\n )}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading image file...\r\n
\r\n )}\r\n \r\n {this.renderInputColourPickerCust(\r\n \"A_TopSearchBtnHover\",\r\n \"Top Search Hover\"\r\n )}\r\n {this.renderInput(\"A_LoginTitle\", \"Login Title\")}\r\n\r\n
\r\n {\"About Us & Contact Us Coordinates\"}\r\n
\r\n {this.renderInput(\"N_AboutUsNo\", \"About Us Menu Link Number\")}\r\n {this.renderInput(\"N_ContactUsNo\", \"ContactUs Menu Link Number\")}\r\n\r\n
\r\n {\"Google Map Coordinates: www.latlong.net\"}\r\n
\r\n {this.renderCheckbox(\"B_GoogleMap\", \"Google Map\")}\r\n {this.renderInput(\"A_GoogleKey\", \"Google Key\")}\r\n {this.renderInputGoogleMap(\"F_Lat\", \"Latitude\")}\r\n {this.renderInputGoogleMap(\"F_Lng\", \"Longitude\")}\r\n\r\n
\r\n
\r\n\r\n {this.renderButton(\"Submit\")}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n// //\r\n// // Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\n// const mapStateToProps = state => ({\r\n// // customizations: state.entities.customizations.list.filter(customization => !customization.resolved)\r\n// customization: state.entities.customizations.list\r\n// });\r\n\r\n// const mapDispatchToProps = dispatch => ({\r\n// loadCustomization: id => dispatch(loadCustomization(id)),\r\n// addCustomization: (customization, user, currentDate) =>\r\n// dispatch(addCustomization(customization, user, currentDate)),\r\n// changeCustomization: (customization, user, currentDate) =>\r\n// dispatch(changeCustomization(customization, user, currentDate))\r\n// });\r\n\r\n// // Container Component\r\n// // Presentation (Customizations)\r\n// //\r\n// // Babak's Notes: Below I populate 'this.props.customizations' and 'this.props.loadCustomizations()':-\r\n// export default connect(\r\n// mapStateToProps,\r\n// mapDispatchToProps\r\n// )(CustomizationForm);\r\n\r\nexport default CustomizationForm;\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport _ from \"lodash\";\r\n\r\nconst Paginsation = props => {\r\n const { itemsCount, pageSize, currentPage, onPageChange } = props;\r\n //console.log(\"Paginsation 01 : \", itemsCount, pageSize, currentPage);\r\n\r\n let pagesCount = Math.ceil(itemsCount / pageSize);\r\n\r\n //console.log(\"Paginsation 02 : \", pagesCount);\r\n if (pagesCount === 1) return null;\r\n\r\n const pages = _.range(1, pagesCount + 1);\r\n\r\n //console.log(\"Paginsation 03 : \", pages);\r\n\r\n // Babak's Note: First version:-\r\n return (\r\n \r\n );\r\n\r\n // // Babak's Note: Second version:-\r\n // return (\r\n // \r\n // );\r\n\r\n // // Babak's Note: Third version:-\r\n // return (\r\n // \r\n // );\r\n\r\n // // Babak's Note: Fourth version:-\r\n // return (\r\n // \r\n // );\r\n};\r\n\r\nPaginsation.propTypes = {\r\n itemsCount: PropTypes.number.isRequired,\r\n pageSize: PropTypes.number.isRequired,\r\n currentPage: PropTypes.number.isRequired,\r\n onPageChange: PropTypes.func.isRequired\r\n};\r\nexport default Paginsation;\r\n","import React, { Component } from \"react\";\r\n\r\n// columns: array\r\n// sortColumn: object\r\n// onSort: function\r\nclass TableHeader extends Component {\r\n raiseSort = path => {\r\n const sortColumn = { ...this.props.sortColumn };\r\n //console.log(\"TableHeader, raiseSort\", sortColumn.path, path);\r\n if (sortColumn.path === path)\r\n sortColumn.order = sortColumn.order === \"asc\" ? \"desc\" : \"asc\";\r\n else {\r\n sortColumn.path = path;\r\n sortColumn.order = \"asc\";\r\n }\r\n this.props.onSort(sortColumn);\r\n };\r\n\r\n renderSortIcon = column => {\r\n //\r\n // Babak's Notes; Below we want the property of 'sortColumn' of 'this.props'\r\n const { sortColumn } = this.props;\r\n\r\n if (column.path !== sortColumn.path) return null;\r\n if (sortColumn.order === \"asc\") return ;\r\n return ;\r\n };\r\n\r\n render() {\r\n //console.log(\"render tableHeader\");\r\n return (\r\n \r\n \r\n {this.props.columns\r\n .filter(e => !e.hidden)\r\n .map(column => (\r\n this.raiseSort(column.path)}\r\n >\r\n {column.label} {this.renderSortIcon(column)}\r\n \r\n ))}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableHeader;\r\n","import React, { Component } from \"react\";\r\nimport _ from \"lodash\";\r\nimport LazyLoad from \"react-lazy-load\";\r\n\r\n//\r\n// Babak's Note: I had to add 'Editor' to the above line and quate out below line in order not to display\r\n// the buttons at top of 'Editor' element (field) when displaying on a htmnl table td cell. The\r\n// buttons are automatically are displayed when using 'Editor' from below line of\r\n// 'react-draft-wysiwyg'.\r\n//import { Editor } from \"../../../node_modules/react-draft-wysiwyg\";\r\n\r\nclass TableBody extends Component {\r\n renderCell = (item, column) => {\r\n // if (column.hidden) {\r\n // console.log(\"renderCell 1 : \", column.path, column.hidden);\r\n // return;\r\n // }\r\n\r\n //console.log(\"renderCell 2 : \", item.ID, column.key);\r\n\r\n if (column.content) return column.content(item);\r\n\r\n //\r\n // Babak's Note: Using lodash:-\r\n return _.get(item, column.path);\r\n };\r\n\r\n renderDateCell = (item, column) => {\r\n // if (column.hidden) {\r\n // console.log(\"renderCell 1 : \", column.path, column.hidden);\r\n // return;\r\n // }\r\n\r\n //console.log(\"renderCell 2 : \", item.ID, column.key);\r\n\r\n if (column.content) return column.content(item);\r\n\r\n //return _.get(item, column.path);\r\n if (_.get(item, column.path)) {\r\n const date = new Date(_.get(item, column.path));\r\n const month = date.getMonth() + 1;\r\n return (\r\n (month.toString().length > 1 ? month : \"0\" + month) +\r\n \"/\" +\r\n date.getDate() +\r\n \"/\" +\r\n date.getFullYear() +\r\n \" \" +\r\n date.getHours() +\r\n \":\" +\r\n date.getMinutes()\r\n );\r\n } else return \"\";\r\n };\r\n\r\n createKey = (item, column) => {\r\n return item.ID + (column.path || column.key);\r\n };\r\n\r\n render() {\r\n const { data, columns } = this.props;\r\n //console.log(\"Hello 06 : \");\r\n return (\r\n \r\n {data.map(item => (\r\n \r\n {columns\r\n .filter(e => !e.hidden)\r\n .map(column =>\r\n column.type === \"text\" ? (\r\n \r\n {this.renderCell(item, column)}\r\n \r\n ) : column.type === \"image\" ? (\r\n \r\n \r\n \r\n \r\n \r\n ) : column.type === \"date\" ? (\r\n \r\n {this.renderDateCell(item, column)}\r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ))}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default TableBody;\r\n","import React, { Component } from \"react\";\r\nimport TableHeader from \"./tableHeader\";\r\nimport TableBody from \"./tableBody\";\r\n\r\n//\r\n// Babak's Note: Old version\r\n// const Table = props => {\r\n// const { columns, sortColumn, onSort, data } = props;\r\n\r\n// return (\r\n// \r\n// \r\n// \r\n//
\r\n// );\r\n// };\r\n\r\n//\r\n// Babak's Note: Old and better version\r\nconst Table = ({ columns, sortColumn, onSort, data }) => {\r\n return (\r\n \r\n \r\n \r\n
\r\n );\r\n};\r\n\r\nexport default Table;\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\n\r\nclass CustomizationsTable extends Component {\r\n //\r\n // Babak's Note: A template litaral is (including ``) : `/customizations/${customization.id}`\r\n // Argument is : ${customization.id}\r\n //\r\n // Babal's Note: Below are the columns in the home page 'customizations'. The 'Title' column is rendered dynamically\r\n // in order so we link it to another componet (another words a page), in this case 'customizationForm'.\r\n // Path is the database column name.\r\n columns = [\r\n {\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n },\r\n { path: \"A_WebAppTitle\", label: \"WebApp Title\", type: \"text\" },\r\n { path: \"D_Inserted\", label: \"Inserted\", type: \"text\" },\r\n { path: \"A_Inserted_By\", label: \"Inserted By\", type: \"text\" },\r\n { path: \"D_Updated\", label: \"Updated\", type: \"text\" },\r\n { path: \"A_Updated_By\", label: \"Updated By\", type: \"text\" }\r\n ];\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: customization =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(customization)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: customization =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete user '${customization.A_WebAppTitle}'?`\r\n )\r\n ) {\r\n this.props.onDelete(customization);\r\n }\r\n }}\r\n className=\"btn btn-danger btn-sm enabled\"\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n }\r\n // //\r\n // // Babak's Note: Below we add a condition that the user must be logged in and have an admin customization in order to see\r\n // // the 'delete' button:-\r\n // constructor() {\r\n // super();\r\n // const user = auth.getCurrentUser();\r\n // if (user && user.isAdmin) this.columns.push(this.deleteColumn);\r\n // }\r\n\r\n render() {\r\n const { customizationsList, onSort, sortColumn } = this.props;\r\n // const { customizationsList } = this.props;\r\n // console.log(\"render customizationsTable : \", customizationsList);\r\n return (\r\n \r\n );\r\n }\r\n}\r\nexport default CustomizationsTable;\r\n","import _ from \"lodash\";\r\n\r\nexport function paginate(items, pageNumber, pageSize) {\r\n const startIndex = (pageNumber - 1) * pageSize;\r\n return _(items)\r\n .slice(startIndex)\r\n .take(pageSize)\r\n .value();\r\n}\r\n","import React from \"react\";\r\n\r\nconst SearchBox = ({ value, onChange }) => {\r\n return (\r\n onChange(e.currentTarget.value)}\r\n />\r\n );\r\n};\r\n\r\nexport default SearchBox;\r\n","import React, { Component } from \"react\";\r\n// import StoreContext from \"../contexts/storeContext\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { toast } from \"react-toastify\";\r\n// import { Redirect } from \"react-router\";\r\nimport Pagination from \"../common/pagination\";\r\n// import {\r\n// loadCustomizations,\r\n// getCustomizations,\r\n// deleteCustomization\r\n// } from \"../../store/customizationMaintains\";\r\nimport {\r\n getCustomizations,\r\n deleteCustomization\r\n} from \"../../services/customizationService\";\r\nimport CustomizationsTable from \"./customizationsTable\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\n// import { connect } from \"react-redux\";\r\n\r\nclass CustomizationsList extends Component {\r\n // static contextType = StoreContext;\r\n\r\n state = {\r\n // customizationsList: [],\r\n customizations: [],\r\n currentPage: 1,\r\n pageSize: 10,\r\n searchQuery: \"\",\r\n sortColumn: { path: \"A_WebAppTitle\", order: \"asc\" }\r\n };\r\n\r\n async componentDidMount() {\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n // this.props.loadCustomizations();\r\n const { data: customizations } = await getCustomizations();\r\n // console.log(\"CustomizationsList, componentDidMount : \");\r\n this.setState({ customizations });\r\n }\r\n\r\n // componentWillUnmount() {\r\n // this.unsubscribe();\r\n // }\r\n\r\n handleUpdate = async customization => {\r\n // //console.log(\"CustomizationsList, handleUpdate : \", customization.ID);\r\n\r\n // //\r\n // // Babak's Notes: 'Redirect' does not work for some reason (back to prev screen browser arrow key), no time to investifate for now:-\r\n // // this.setState({ CustomizationForm: true, customizationID: customization.ID });\r\n\r\n // try {\r\n // window.location = `/customizationsList/${customization.ID}`;\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 400) {\r\n // const errors = { ...ex.errors };\r\n // this.setState({ errors });\r\n // }\r\n // }\r\n\r\n const originalCustomizations = this.state.customizations;\r\n const customizations = originalCustomizations.filter(\r\n m => m.ID !== customization.ID\r\n );\r\n this.setState({ customizations });\r\n\r\n try {\r\n await deleteCustomization(customization.ID);\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n toast.error(\"This Customization has already been deleted.\");\r\n\r\n this.setState({ customizations: originalCustomizations });\r\n }\r\n };\r\n\r\n handleUpdate = async customization => {\r\n try {\r\n window.location = `/customizationsList/${customization.ID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n //console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const {\r\n pageSize,\r\n currentPage,\r\n sortColumn,\r\n searchQuery,\r\n customizations: allCustomizations\r\n } = this.state;\r\n\r\n // console.log(\r\n // \"CustomizationsList, getPageData : \",\r\n // this.props.customizations\r\n // );\r\n\r\n // const allCustomizations = this.props.customizations;\r\n\r\n let filtered = allCustomizations;\r\n if (searchQuery)\r\n filtered = allCustomizations.filter(m =>\r\n m.A_Name.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const customizations = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: customizations };\r\n };\r\n\r\n render() {\r\n // console.log(\"CustomizationsList, render() : \", this.props.customizations);\r\n\r\n // if (this.state.CustomizationForm === true) {\r\n // //console.log(\"CustomizationsList, render(), Redirect : \", this.state.customizationID);\r\n // return ;\r\n // }\r\n\r\n // const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n // //\r\n // //Babak's Note: Below I renamed 'data' to 'customizations'\r\n // const { totalCount, data: customizationsList } = this.getPagedData();\r\n\r\n const { length: count } = this.state.customizations;\r\n\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'users'\r\n const { totalCount, data: customizations } = this.getPagedData();\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Customizations

\r\n
\r\n {totalCount < 1 ? (\r\n \r\n New Customization\r\n \r\n ) : (\r\n \r\n Maximum number of Customization reached!\r\n \r\n )}\r\n {/* \r\n New Customization\r\n */}\r\n

Showing {totalCount} customizations in the database.

\r\n \r\n \r\n // this.props.deleteCustomization(customization)\r\n // }\r\n onDelete={this.handleDelete}\r\n onUpdate={this.handleUpdate}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n// //\r\n// // Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\n// const mapStateToProps = state => ({\r\n// // bugs: state.entities.customizations.list.filter(bug => !bug.resolved)\r\n// customizations: state.entities.customizationMaintains.list\r\n// });\r\n\r\n// const mapDispatchToProps = dispatch => ({\r\n// loadCustomizations: () => dispatch(loadCustomizations()),\r\n// deleteCustomization: id => dispatch(deleteCustomization(id))\r\n// });\r\n\r\n// // Container Component\r\n// // Presentation (Bugs)\r\n// //\r\n// // Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\n// export default connect(\r\n// mapStateToProps,\r\n// mapDispatchToProps\r\n// )(CustomizationsList);\r\n\r\nexport default CustomizationsList;\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/billboardLarges\";\r\nconst apiEndpoint = \"/billboardLarges\";\r\n\r\nfunction BillboardLargesSearchAutoCompleteUrl(id) {\r\n return `${apiEndpoint}/searchAutoComplete/${id}`;\r\n}\r\n\r\nfunction BillboardLargesSearchDynamicUrl(id) {\r\n return `${apiEndpoint}/searchDynamic/${id}`;\r\n}\r\n\r\nfunction BillboardLargesSlidesUrl() {\r\n return `${apiEndpoint}/slides`;\r\n}\r\n\r\nfunction BillboardLargesWindowsUrl() {\r\n return `${apiEndpoint}/windows`;\r\n}\r\n\r\nexport function getBillboardLargesSearchAutoComplete(\r\n billLocationSearchAutoComplete\r\n) {\r\n // console.log(\r\n // \"getBillboardLargesSearchAutoComplete : \",\r\n // BillboardLargesSearchAutoCompleteUrl(billLocationSearchAutoComplete)\r\n // );\r\n return http.get(\r\n BillboardLargesSearchAutoCompleteUrl(billLocationSearchAutoComplete)\r\n );\r\n}\r\n\r\nexport function getBillboardLargesSearchDynamic(billLocationSearchDynamic) {\r\n // console.log(\r\n // \"getBillboardLargesSearchDynamic : \",\r\n // BillboardLargesSearchDynamicUrl(billLocationSearchDynamic)\r\n // );\r\n return http.get(BillboardLargesSearchDynamicUrl(billLocationSearchDynamic));\r\n}\r\n\r\nexport function getBillboardLargesSlides() {\r\n // console.log(\r\n // \"getBillboardLargesSearchDynamic : \",\r\n // BillboardLargesSearchDynamicUrl(billLocationSearchDynamic)\r\n // );\r\n return http.get(BillboardLargesSlidesUrl());\r\n}\r\n\r\nexport function getBillboardLargesWindows() {\r\n // console.log(\r\n // \"getBillboardLargesSearchDynamic : \",\r\n // BillboardLargesSearchDynamicUrl(billLocationSearchDynamic)\r\n // );\r\n return http.get(BillboardLargesWindowsUrl());\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { Navbar } from \"react-bootstrap\";\r\n\r\n//\r\n// Babak's Note: Below 'user' is from 'props', we have used destructering so by adding only 'user' reactjs will\r\n// automnatically take it from 'props':-\r\nclass NavBarFooter extends Component {\r\n constructor(props) {\r\n super(props);\r\n }\r\n\r\n FooterNavBar = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${customizationSingleRow.A_BaseNavbarFGC}`,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n textAlign: \"center\"\r\n };\r\n\r\n return (\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { customizationSingleRow } = this.props;\r\n\r\n // return (\r\n // \r\n // \r\n // \r\n // );\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n// export default withRouter(NavBar);\r\nexport default NavBarFooter;\r\n","import React, { Component } from \"react\";\r\nimport { getBillboardLargesSearchDynamic } from \"../../services/billboardLargeService\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { Redirect } from \"react-router\";\r\nimport NavBarFooter from \"../navBarFooter\";\r\nimport ScrollUpButton from \"react-scroll-up-button\";\r\n\r\nclass SearchDynamic extends Component {\r\n state = {\r\n billboardLargesSearchDynamic: [],\r\n searchFound: false,\r\n detailsGroup: false,\r\n groupID: 0,\r\n detailsMaster: false,\r\n masterID: 0,\r\n detailsDetail: false,\r\n detailsDetailID: 0\r\n };\r\n\r\n async componentDidMount() {\r\n const billLocationSearchDynamic = this.props.match.params.id;\r\n\r\n //console.log(\"componentDidMount (SearchDynamic) : \", billLocationSearchDynamic);\r\n const {\r\n data: billboardLargesSearchDynamic\r\n } = await getBillboardLargesSearchDynamic(billLocationSearchDynamic);\r\n\r\n let searchFound = true;\r\n this.setState({ billboardLargesSearchDynamic, searchFound });\r\n }\r\n\r\n render() {\r\n // if (this.state.detailsGroup === true) {\r\n // return ;\r\n // }\r\n // if (this.state.detailsMaster === true) {\r\n // return ;\r\n // }\r\n // if (this.state.detailsDetail === true) {\r\n // return ;\r\n // }\r\n\r\n const { billboardLargesSearchDynamic, searchFound } = this.state;\r\n\r\n if (!searchFound) {\r\n return
;\r\n } else if (billboardLargesSearchDynamic.length === 0) {\r\n return (\r\n
\r\n
\r\n No data found, please try again.\r\n
\r\n
\r\n );\r\n }\r\n\r\n // console.log(\r\n // \"SearchDynamic render, Number of billboardLargesMenu: \",\r\n // billboardLargesSearchDynamic\r\n // );\r\n return (\r\n
\r\n \r\n
\r\n {billboardLargesSearchDynamic.map(item => (\r\n
\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 1) {\r\n window.location = `../detailsGroup/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLink\"\r\n >\r\n \r\n
\r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 1) {\r\n window.location = `../detailsGroup/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 1) {\r\n window.location = `../detailsGroup/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 1) {\r\n window.location = `../detailsGroup/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n \r\n ))}\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SearchDynamic;\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"groups\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'groupsRequested' or 'groupsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'groups' below represents the 'state':-\r\n groupsRequested: (groups, action) => {\r\n console.log(\"groupsRequested : \", action.payload);\r\n groups.loading = true;\r\n },\r\n groupsReceived: (groups, action) => {\r\n console.log(\"groupsReceived : \", action.payload);\r\n groups.list = action.payload;\r\n groups.loading = false;\r\n groups.lastFetch = Date.now();\r\n },\r\n groupsRequestedFailed: (groups, action) => {\r\n groups.loading = false;\r\n // window.alert(`No Groups found.`);\r\n },\r\n\r\n groupsOnNavbarRequested: (groups, action) => {\r\n console.log(\"groupsOnNavbarRequested : \", action.payload);\r\n groups.loading = true;\r\n },\r\n groupsOnNavbarReceived: (groups, action) => {\r\n console.log(\"groupsOnNavbarReceived : \", action.payload);\r\n groups.listOnNavvar = action.payload;\r\n groups.loading = false;\r\n groups.lastFetch = Date.now();\r\n },\r\n groupsOnNavbarRequestedFailed: (groups, action) => {\r\n groups.loading = false;\r\n // window.alert(`No Groups found.`);\r\n },\r\n\r\n groupRequested: (group, action) => {\r\n console.log(\"groupRequested : \", action.payload);\r\n group.loading = true;\r\n },\r\n groupReceived: (group, action) => {\r\n console.log(\"groupReceived : \", action.payload);\r\n group.listSingleRow = action.payload;\r\n group.loading = false;\r\n group.lastFetch = Date.now();\r\n },\r\n groupRequestedFailed: (group, action) => {\r\n group.loading = false;\r\n // window.alert(`No Group found.`);\r\n },\r\n groupChangeRequested: (group, action) => {\r\n console.log(\"groupChangeRequested : \", action.payload);\r\n group.loading = true;\r\n },\r\n groupChangeFailed: (group, action) => {\r\n group.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete group api at the back end.\r\n // const { ID: groupId, A_Name: groupName } = action.payload;\r\n\r\n // window.alert(`Group '${groupName}' no longer exists.`);\r\n\r\n // const index = group.list.findIndex(group => group.ID === groupId);\r\n // //console.log(\"groupDeleted ha \", index);\r\n // group.list.splice(index, 1);\r\n },\r\n groupChanged: (group, action) => {\r\n group.loading = false;\r\n },\r\n groupDeleteRequested: (group, action) => {\r\n console.log(\"groupDeleteRequested : \", action.payload);\r\n group.loading = true;\r\n },\r\n groupDeleteFailed: (groups, action) => {\r\n groups.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete group api at the back end.\r\n const { ID: groupId, A_Name: groupName } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with group '${groupName}'. ${action.payload}`\r\n );\r\n\r\n const index = groups.list.findIndex(group => group.ID === groupId);\r\n //console.log(\"groupDeleted ha \", index);\r\n groups.list.splice(index, 1);\r\n },\r\n groupDeleted: (groups, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete group api at the back end.\r\n const { ID: groupID } = action.payload;\r\n // console.log(\"groupDeleted ha \", action.payload, groupID, groups);\r\n const index = groups.list.findIndex(group => group.ID === groupID);\r\n //console.log(\"groupDeleted, ha! ha! \", index);\r\n groups.list.splice(index, 1);\r\n },\r\n groupAddRequested: (group, action) => {\r\n console.log(\"groupAddRequested : \", group, action.payload);\r\n group.loading = true;\r\n },\r\n groupAddFailed: (group, action) => {\r\n group.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'groups' below represents the 'state':-\r\n groupAdded: (groups, action) => {\r\n console.log(\"groupAdded : \", action.payload);\r\n groups.list.push(action.payload);\r\n }\r\n // groupAdded: (groups, action) => {\r\n // groups.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // groupDeleted: (groups, action) => {\r\n // console.log(\"groupDeleted ha \", action.payload.ID);\r\n // groups.list.filter(group => group.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n groupAddRequested,\r\n groupAdded,\r\n groupAddFailed,\r\n groupChangeRequested,\r\n groupChanged,\r\n groupChangeFailed,\r\n groupDeleteRequested,\r\n groupDeleted,\r\n groupDeleteFailed,\r\n groupsReceived,\r\n groupsRequested,\r\n groupsRequestedFailed,\r\n groupsOnNavbarReceived,\r\n groupsOnNavbarRequested,\r\n groupsOnNavbarRequestedFailed,\r\n groupReceived,\r\n groupRequested,\r\n groupRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/groups\";\r\n\r\nexport const loadGroups = billboardLargeID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.groups;\r\n\r\n // console.log(\"loadGroups lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/groups\" + \"/\" + billboardLargeID,\r\n onStart: groupsRequested.type,\r\n method: \"get\",\r\n onSuccess: groupsReceived.type,\r\n onError: groupsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadGroup = groupID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.groups;\r\n\r\n //console.log(\"loadGroup : \", groupID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + groupID,\r\n onStart: groupRequested.type,\r\n method: \"get\",\r\n onSuccess: groupReceived.type,\r\n onError: groupRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addGroup':-\r\nexport const addGroup = (group, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: groupAddRequested.type,\r\n //data: group,\r\n data: {\r\n N_BillboardOrigin_ID: group.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: group.N_HomeLocationGroup_ID,\r\n N_Order_No: group.N_Order_No,\r\n A_Reference: group.A_Reference,\r\n A_Summary: group.A_Summary,\r\n N_BillboardLarge_ID: group.N_BillboardLarge_ID,\r\n N_ParentOrigin_ID: group.N_ParentOrigin_ID,\r\n I_Image: group.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: groupAdded.type,\r\n onError: groupAddFailed.type\r\n });\r\n\r\nexport const getGroups = createSelector(\r\n state => state.entities.groups,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (groups, projects) has not changed then do not requery again:-\r\n // (groups) => groups.list.filter(group => !group.B_Active)\r\n groups => groups.list\r\n);\r\n\r\nexport const changeGroup = (group, user, currentDate) =>\r\n apiCallBegan({\r\n url: url + \"/\" + group.ID,\r\n method: \"put\",\r\n onStart: groupChangeRequested.type,\r\n data: {\r\n N_BillboardOrigin_ID: group.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: group.N_HomeLocationGroup_ID,\r\n N_Order_No: group.N_Order_No,\r\n A_Reference: group.A_Reference,\r\n A_Summary: group.A_Summary,\r\n N_ParentOrigin_ID: group.N_ParentOrigin_ID,\r\n I_Image: group.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: groupChanged.type,\r\n onError: groupChangeFailed.type\r\n });\r\n\r\nexport const deleteGroup = group =>\r\n apiCallBegan({\r\n url: url + \"/\" + group.ID,\r\n method: \"delete\",\r\n onStart: groupDeleteRequested.type,\r\n data: { ID: group.ID, A_Reference: group.A_Reference },\r\n onSuccess: groupDeleted.type,\r\n onError: groupDeleteFailed.type\r\n });\r\n","import React, { Component, Suspense } from \"react\";\r\nimport { loadMenu } from \"../../store/menus\";\r\nimport { loadGroups } from \"../../store/groups\";\r\nimport { connect } from \"react-redux\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport NavBarFooter from \"../navBarFooter\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport ScrollUpButton from \"react-scroll-up-button\";\r\n\r\nclass DetailsGroup extends Component {\r\n state = {\r\n data: {\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n I_Image: \"\"\r\n },\r\n billboardLargesGroup: []\r\n };\r\n\r\n async populateMenuGroups() {\r\n const menuId = this.props.match.params.id;\r\n\r\n // window.alert(`componentDidMount (DetailsGroup) : ${menuId}`);\r\n\r\n await this.props.loadMenu(menuId);\r\n\r\n await this.props.loadGroups(menuId);\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateMenuGroups();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n\r\n // if (this.state.data !== nextProps.menu) {\r\n\r\n data[\"A_Reference\"] = nextProps.menu.A_Reference;\r\n data[\"A_Summary\"] = nextProps.menu.A_Summary;\r\n data[\"I_Image\"] = nextProps.menu.I_Image;\r\n\r\n this.setState({\r\n data\r\n });\r\n // }\r\n }\r\n\r\n // async mapToViewModel(billboardLarge) {\r\n // //console.log(\"mapToViewModel-1\", billboardLarge);\r\n // return {\r\n // A_Reference: billboardLarge.A_Reference,\r\n // A_Summary: billboardLarge.A_Summary,\r\n // I_Image: billboardLarge.I_Image\r\n // };\r\n // }\r\n\r\n renderBillboardData = ({ item, row }) => {\r\n // console.log(\"renderBillboardData 01 : \", item, rowCount);\r\n\r\n let sectionStyle;\r\n\r\n // document.body.style.backgroundImage = `url(${item.I_Image})`;\r\n // document.body.style.backgroundRepeat = \"no-repeat\";\r\n // document.body.style.backgroundSize = \"cover\";\r\n\r\n if (row === 0) {\r\n sectionStyle = {\r\n height: \"100vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment: \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n } else {\r\n sectionStyle = {\r\n height: \"100vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n\r\n let sectionStyleSmallerLg;\r\n sectionStyleSmallerLg = {\r\n height: \"50vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // } else if (item.N_RadioGrpDirection === \"5\") {\r\n // sectionStyle = {\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // backgroundPosition: \"center center\",\r\n // backgroundAttachment: \"fixed\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n // } else {\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundColor: \"white\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n // }\r\n\r\n // https://www.npmjs.com/package/react-animations\r\n // const styles = {\r\n // bounce: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(bounce, \"bounce\")\r\n // },\r\n // fadeIn: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeIn, \"fadeIn\")\r\n // },\r\n // fadeInUp00: {\r\n // animation: \"y 1s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp02\")\r\n // },\r\n // fadeInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp03\")\r\n // },\r\n // flipInX: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInX, \"flipInX\")\r\n // },\r\n // flipInY: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInY, \"flipInY\")\r\n // },\r\n // rubberBand: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rubberBand, \"rubberBand\")\r\n // },\r\n // shake: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(shake, \"shake\")\r\n // },\r\n // rotateInUpRight: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpRight, \"rotateInUpRight\")\r\n // },\r\n // rotateInUpLeft: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpLeft, \"rotateInUpLeft\")\r\n // },\r\n // slideInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(slideInUp, fadeIn, \"slideInUp01\")\r\n // },\r\n // slideInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // },\r\n // slideInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // }\r\n // };\r\n\r\n // Babak's Notes: Commented out on 20200115: START\r\n return (\r\n //
\r\n
\r\n {row === 0 ? (\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n {item.A_Reference}\r\n

\r\n\r\n

\r\n {item.A_Summary}\r\n

\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n

\r\n {item.A_Reference}\r\n

\r\n\r\n

\r\n {item.A_Summary}\r\n

\r\n
\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {row === 0 ? (\r\n \r\n
\r\n \r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n \r\n
\r\n ) : (\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { data } = this.state;\r\n // const { billboardLargesGroup } = this.props.groups;\r\n\r\n // let sectionStyle;\r\n\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundImage: `url(${data.I_Image})`,\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // console.log(\r\n // \"DetailsGroup render, Number of billboardLargesGroup: \",\r\n // this.props.match.params.id,\r\n // data,\r\n // this.props.groups,\r\n // this.props.groups.length\r\n // );\r\n\r\n if (this.props.groups.length === 0)\r\n return
;\r\n\r\n //\r\n // Babak's Note: Goto at top of screen:-\r\n window.scrollTo(0, 0);\r\n\r\n // return (\r\n //
\r\n // {/*
}> */}\r\n // \r\n\r\n // {this.props.groups.map((item, index) => (\r\n // \r\n // ))}\r\n // {/* */}\r\n // {/*
\r\n // \r\n //
*/}\r\n // \r\n // );\r\n\r\n return (\r\n // \r\n
\r\n \r\n\r\n \r\n
\r\n {this.props.groups.map(item => (\r\n
\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkLG\"\r\n >\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkMD\"\r\n >\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkSM\"\r\n >\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkXS\"\r\n >\r\n \r\n
\r\n\r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n
\r\n {/* \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Reference}\r\n
*/}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n\r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n */}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n\r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n */}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n\r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n */}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // groups: state.entities.groups.list.filter(group => !group.resolved)\r\n menu: state.entities.menus.listSingleRow,\r\n groups: state.entities.groups.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadMenu: id => dispatch(loadMenu(id)),\r\n loadGroups: id => dispatch(loadGroups(id))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Groups)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.groups' and 'this.props.loadGroups()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(DetailsGroup);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"sumOfArticles\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n listParentOriginIDMenus: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'sumOfArticlesRequested' or 'sumOfArticlesReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'sumOfArticles' below represents the 'state':-\r\n sumOfArticlesRequested: (sumOfArticles, action) => {\r\n console.log(\"sumOfArticlesRequested : \", action.payload);\r\n sumOfArticles.loading = true;\r\n },\r\n sumOfArticlesReceived: (sumOfArticles, action) => {\r\n console.log(\"sumOfArticlesReceived : \", action.payload);\r\n sumOfArticles.list = action.payload;\r\n sumOfArticles.loading = false;\r\n sumOfArticles.lastFetch = Date.now();\r\n },\r\n sumOfArticlesRequestedFailed: (sumOfArticles, action) => {\r\n sumOfArticles.loading = false;\r\n // window.alert(`No SumOfArticles found.`);\r\n },\r\n\r\n sumOfArticlesOnNavbarRequested: (sumOfArticles, action) => {\r\n console.log(\"sumOfArticlesOnNavbarRequested : \", action.payload);\r\n sumOfArticles.loading = true;\r\n },\r\n sumOfArticlesOnNavbarReceived: (sumOfArticles, action) => {\r\n console.log(\"sumOfArticlesOnNavbarReceived : \", action.payload);\r\n sumOfArticles.listOnNavvar = action.payload;\r\n sumOfArticles.loading = false;\r\n sumOfArticles.lastFetch = Date.now();\r\n },\r\n sumOfArticlesOnNavbarRequestedFailed: (sumOfArticles, action) => {\r\n sumOfArticles.loading = false;\r\n // window.alert(`No SumOfArticles found.`);\r\n },\r\n sumOfArticleRequested: (sumOfArticle, action) => {\r\n console.log(\"sumOfArticleRequested : \", action.payload);\r\n sumOfArticle.loading = true;\r\n },\r\n sumOfArticleReceived: (sumOfArticle, action) => {\r\n console.log(\"sumOfArticleReceived : \", action.payload);\r\n sumOfArticle.listSingleRow = action.payload;\r\n sumOfArticle.loading = false;\r\n sumOfArticle.lastFetch = Date.now();\r\n },\r\n sumOfArticleRequestedFailed: (sumOfArticle, action) => {\r\n sumOfArticle.loading = false;\r\n // window.alert(`No SumOfArticle found.`);\r\n },\r\n\r\n parentOriginIDMenusRequested: (parentOriginIDMenus, action) => {\r\n console.log(\"parentOriginIDMenusRequested : \", action.payload);\r\n parentOriginIDMenus.loading = true;\r\n },\r\n parentOriginIDMenusReceived: (parentOriginIDMenus, action) => {\r\n console.log(\"parentOriginIDMenusReceived : \", action.payload);\r\n parentOriginIDMenus.listParentOriginIDMenus = action.payload;\r\n parentOriginIDMenus.loading = false;\r\n parentOriginIDMenus.lastFetch = Date.now();\r\n },\r\n parentOriginIDMenusRequestedFailed: (parentOriginIDMenus, action) => {\r\n parentOriginIDMenus.loading = false;\r\n // window.alert(`No parentOriginIDMenus found.`);\r\n },\r\n\r\n sumOfArticleChangeRequested: (sumOfArticle, action) => {\r\n console.log(\"sumOfArticleChangeRequested : \", action.payload);\r\n sumOfArticle.loading = true;\r\n },\r\n sumOfArticleChangeFailed: (sumOfArticle, action) => {\r\n sumOfArticle.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete sumOfArticle api at the back end.\r\n // const { ID: sumOfArticleId, A_Name: sumOfArticleName } = action.payload;\r\n\r\n // window.alert(`SumOfArticle '${sumOfArticleName}' no longer exists.`);\r\n\r\n // const index = sumOfArticle.list.findIndex(sumOfArticle => sumOfArticle.ID === sumOfArticleId);\r\n // //console.log(\"sumOfArticleDeleted ha \", index);\r\n // sumOfArticle.list.splice(index, 1);\r\n },\r\n sumOfArticleChanged: (sumOfArticle, action) => {\r\n sumOfArticle.loading = false;\r\n },\r\n sumOfArticleDeleteRequested: (sumOfArticle, action) => {\r\n console.log(\"sumOfArticleDeleteRequested : \", action.payload);\r\n sumOfArticle.loading = true;\r\n },\r\n sumOfArticleDeleteFailed: (sumOfArticles, action) => {\r\n sumOfArticles.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete sumOfArticle api at the back end.\r\n const { ID: sumOfArticleId, A_Name: sumOfArticleName } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with sumOfArticle '${sumOfArticleName}'. ${action.payload}`\r\n );\r\n\r\n const index = sumOfArticles.list.findIndex(\r\n sumOfArticle => sumOfArticle.ID === sumOfArticleId\r\n );\r\n //console.log(\"sumOfArticleDeleted ha \", index);\r\n sumOfArticles.list.splice(index, 1);\r\n },\r\n sumOfArticleDeleted: (sumOfArticles, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete sumOfArticle api at the back end.\r\n const { ID: sumOfArticleID } = action.payload;\r\n // console.log(\"sumOfArticleDeleted ha \", action.payload, sumOfArticleID, sumOfArticles);\r\n const index = sumOfArticles.list.findIndex(\r\n sumOfArticle => sumOfArticle.ID === sumOfArticleID\r\n );\r\n //console.log(\"sumOfArticleDeleted, ha! ha! \", index);\r\n sumOfArticles.list.splice(index, 1);\r\n },\r\n sumOfArticleAddRequested: (sumOfArticle, action) => {\r\n console.log(\"sumOfArticleAddRequested : \", sumOfArticle, action.payload);\r\n sumOfArticle.loading = true;\r\n },\r\n sumOfArticleAddFailed: (sumOfArticle, action) => {\r\n sumOfArticle.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'sumOfArticles' below represents the 'state':-\r\n sumOfArticleAdded: (sumOfArticles, action) => {\r\n console.log(\"sumOfArticleAdded : \", action.payload);\r\n sumOfArticles.list.push(action.payload);\r\n }\r\n // sumOfArticleAdded: (sumOfArticles, action) => {\r\n // sumOfArticles.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // sumOfArticleDeleted: (sumOfArticles, action) => {\r\n // console.log(\"sumOfArticleDeleted ha \", action.payload.ID);\r\n // sumOfArticles.list.filter(sumOfArticle => sumOfArticle.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n sumOfArticleAddRequested,\r\n sumOfArticleAdded,\r\n sumOfArticleAddFailed,\r\n sumOfArticleChangeRequested,\r\n sumOfArticleChanged,\r\n sumOfArticleChangeFailed,\r\n sumOfArticleDeleteRequested,\r\n sumOfArticleDeleted,\r\n sumOfArticleDeleteFailed,\r\n sumOfArticlesReceived,\r\n sumOfArticlesRequested,\r\n sumOfArticlesRequestedFailed,\r\n sumOfArticlesOnNavbarReceived,\r\n sumOfArticlesOnNavbarRequested,\r\n sumOfArticlesOnNavbarRequestedFailed,\r\n sumOfArticleReceived,\r\n sumOfArticleRequested,\r\n sumOfArticleRequestedFailed,\r\n parentOriginIDMenusRequested,\r\n parentOriginIDMenusReceived,\r\n parentOriginIDMenusRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/sumOfArticles\";\r\n\r\nexport const loadSumOfArticles = billboardLargeID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.sumOfArticles;\r\n\r\n // console.log(\"loadSumOfArticles lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/sumOfArticles\" + \"/\" + billboardLargeID,\r\n onStart: sumOfArticlesRequested.type,\r\n method: \"get\",\r\n onSuccess: sumOfArticlesReceived.type,\r\n onError: sumOfArticlesRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadSumOfArticle = sumOfArticleID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.sumOfArticles;\r\n\r\n //console.log(\"loadSumOfArticle : \", sumOfArticleID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + sumOfArticleID,\r\n onStart: sumOfArticleRequested.type,\r\n method: \"get\",\r\n onSuccess: sumOfArticleReceived.type,\r\n onError: sumOfArticleRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadParentOriginIDMenus = billboardLargeID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.sumOfArticles;\r\n\r\n //console.log(\"loadParentOriginIDMenus : \", sumOfArticleID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/parentOrigin\" + \"/\" + billboardLargeID,\r\n onStart: parentOriginIDMenusRequested.type,\r\n method: \"get\",\r\n onSuccess: parentOriginIDMenusReceived.type,\r\n onError: parentOriginIDMenusRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addSumOfArticle':-\r\nexport const addSumOfArticle = (sumOfArticle, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: sumOfArticleAddRequested.type,\r\n //data: sumOfArticle,\r\n data: {\r\n N_BillboardOrigin_ID: sumOfArticle.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: sumOfArticle.N_HomeLocationGroup_ID,\r\n N_HomeLocationSumOfArticle_ID: sumOfArticle.N_HomeLocationSumOfArticle_ID,\r\n N_Order_No: sumOfArticle.N_Order_No,\r\n A_Reference: sumOfArticle.A_Reference,\r\n A_Summary: sumOfArticle.A_Summary,\r\n N_BillboardLarge_ID: sumOfArticle.N_BillboardLarge_ID,\r\n N_ParentOrigin_ID: sumOfArticle.N_ParentOrigin_ID,\r\n I_Image: sumOfArticle.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: sumOfArticleAdded.type,\r\n onError: sumOfArticleAddFailed.type\r\n });\r\n\r\nexport const getSumOfArticles = createSelector(\r\n state => state.entities.sumOfArticles,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (sumOfArticles, projects) has not changed then do not requery again:-\r\n // (sumOfArticles) => sumOfArticles.list.filter(sumOfArticle => !sumOfArticle.B_Active)\r\n sumOfArticles => sumOfArticles.list\r\n);\r\n\r\nexport const changeSumOfArticle = (sumOfArticle, user, currentDate) =>\r\n apiCallBegan({\r\n url: url + \"/\" + sumOfArticle.ID,\r\n method: \"put\",\r\n onStart: sumOfArticleChangeRequested.type,\r\n data: {\r\n N_BillboardOrigin_ID: sumOfArticle.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: sumOfArticle.N_HomeLocationGroup_ID,\r\n N_HomeLocationSumOfArticle_ID: sumOfArticle.N_HomeLocationSumOfArticle_ID,\r\n N_Order_No: sumOfArticle.N_Order_No,\r\n A_Reference: sumOfArticle.A_Reference,\r\n A_Summary: sumOfArticle.A_Summary,\r\n N_ParentOrigin_ID: sumOfArticle.N_ParentOrigin_ID,\r\n I_Image: sumOfArticle.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: sumOfArticleChanged.type,\r\n onError: sumOfArticleChangeFailed.type\r\n });\r\n\r\nexport const deleteSumOfArticle = sumOfArticle =>\r\n apiCallBegan({\r\n url: url + \"/\" + sumOfArticle.ID,\r\n method: \"delete\",\r\n onStart: sumOfArticleDeleteRequested.type,\r\n data: { ID: sumOfArticle.ID, A_Reference: sumOfArticle.A_Reference },\r\n onSuccess: sumOfArticleDeleted.type,\r\n onError: sumOfArticleDeleteFailed.type\r\n });\r\n","import React, { Component } from \"react\";\r\nimport { loadGroup } from \"../../store/groups\";\r\nimport { loadSumOfArticles } from \"../../store/sumOfArticles\";\r\nimport { connect } from \"react-redux\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport NavBarFooter from \"../navBarFooter\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport ScrollUpButton from \"react-scroll-up-button\";\r\n\r\nclass DetailsMaster extends Component {\r\n state = {\r\n data: {\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n I_Image: \"\"\r\n },\r\n billboardLargesMaster: []\r\n };\r\n\r\n async populateGroupSumOfArticles() {\r\n // const billboardLargesID = this.props.match.params.id;\r\n\r\n // //console.log(\"componentDidMount (DetailsMaster) : \", billboardLargesID);\r\n\r\n // const { data: billboardLarge } = await getBillboardLarge(billboardLargesID);\r\n\r\n // const { data: billboardLargesMaster } = await getBillboardLargesMaster(\r\n // billboardLargesID\r\n // );\r\n\r\n // this.setState({\r\n // data: await this.mapToViewModel(billboardLarge),\r\n // billboardLargesMaster\r\n // });\r\n // }\r\n\r\n // async mapToViewModel(billboardLarge) {\r\n // //console.log(\"mapToViewModel-1\", billboardLarge);\r\n // return {\r\n // A_Reference: billboardLarge.A_Reference,\r\n // A_Summary: billboardLarge.A_Summary,\r\n // I_Image: billboardLarge.I_Image\r\n // };\r\n\r\n const groupId = this.props.match.params.id;\r\n\r\n // window.alert(`componentDidMount (DetailsMaster) : ${groupId}`);\r\n\r\n await this.props.loadGroup(groupId);\r\n\r\n await this.props.loadSumOfArticles(groupId);\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateGroupSumOfArticles();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"GroupForm, componentWillReceiveProps\", nextProps.groupSuccess);\r\n\r\n let data = { ...this.state.data };\r\n\r\n // if (this.state.data !== nextProps.group) {\r\n\r\n data[\"A_Reference\"] = nextProps.group.A_Reference;\r\n data[\"A_Summary\"] = nextProps.group.A_Summary;\r\n data[\"I_Image\"] = nextProps.group.I_Image;\r\n\r\n this.setState({\r\n data\r\n });\r\n // }\r\n }\r\n\r\n renderBillboardData = ({ item, row }) => {\r\n // console.log(\"renderBillboardData 01 : \", item, rowCount);\r\n\r\n let sectionStyle;\r\n\r\n // document.body.style.backgroundImage = `url(${item.I_Image})`;\r\n // document.body.style.backgroundRepeat = \"no-repeat\";\r\n // document.body.style.backgroundSize = \"cover\";\r\n\r\n if (row === 0) {\r\n sectionStyle = {\r\n height: \"100vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment: \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n } else {\r\n sectionStyle = {\r\n height: \"100vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n\r\n let sectionStyleSmallerLg;\r\n sectionStyleSmallerLg = {\r\n height: \"50vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // } else if (item.N_RadioGrpDirection === \"5\") {\r\n // sectionStyle = {\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // backgroundPosition: \"center center\",\r\n // backgroundAttachment: \"fixed\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n // } else {\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundColor: \"white\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n // }\r\n\r\n // https://www.npmjs.com/package/react-animations\r\n // const styles = {\r\n // bounce: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(bounce, \"bounce\")\r\n // },\r\n // fadeIn: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeIn, \"fadeIn\")\r\n // },\r\n // fadeInUp00: {\r\n // animation: \"y 1s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp02\")\r\n // },\r\n // fadeInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp03\")\r\n // },\r\n // flipInX: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInX, \"flipInX\")\r\n // },\r\n // flipInY: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInY, \"flipInY\")\r\n // },\r\n // rubberBand: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rubberBand, \"rubberBand\")\r\n // },\r\n // shake: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(shake, \"shake\")\r\n // },\r\n // rotateInUpRight: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpRight, \"rotateInUpRight\")\r\n // },\r\n // rotateInUpLeft: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpLeft, \"rotateInUpLeft\")\r\n // },\r\n // slideInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(slideInUp, fadeIn, \"slideInUp01\")\r\n // },\r\n // slideInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // },\r\n // slideInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // }\r\n // };\r\n\r\n // Babak's Notes: Commented out on 20200115: START\r\n return (\r\n //
\r\n
\r\n {row === 0 ? (\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n {item.A_Reference}\r\n

\r\n\r\n

\r\n {item.A_Summary}\r\n

\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n

\r\n {item.A_Reference}\r\n

\r\n\r\n

\r\n {item.A_Summary}\r\n

\r\n
\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n {row === 0 ? (\r\n \r\n
\r\n \r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n \r\n
\r\n ) : (\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { data } = this.state;\r\n\r\n if (this.props.sumOfArticles.length === 0)\r\n return
;\r\n\r\n //\r\n // Babak's Note: Goto at top of screen:-\r\n window.scrollTo(0, 0);\r\n\r\n // if (this.props.sumOfArticles.length === 0)\r\n // console.log(\r\n // \"DetailsGroup render, Number of billboardLargesMaster: \",\r\n // billboardLargesMaster\r\n // );\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n {this.props.sumOfArticles.map(item => (\r\n
\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkLG\"\r\n >\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkMD\"\r\n >\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkSM\"\r\n >\r\n \r\n
\r\n\r\n
\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n src={item.I_Image}\r\n className=\"imageLinkXS\"\r\n >\r\n \r\n
\r\n\r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n
\r\n {/* \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Reference}\r\n
*/}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n */}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n */}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n\r\n {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n \r\n {item.A_Reference}\r\n \r\n {/* \r\n {item.A_Reference}\r\n \r\n \r\n {item.A_Reference}\r\n */}\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // groups: state.entities.groups.list.filter(group => !group.resolved)\r\n group: state.entities.groups.listSingleRow,\r\n sumOfArticles: state.entities.sumOfArticles.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadGroup: id => dispatch(loadGroup(id)),\r\n loadSumOfArticles: id => dispatch(loadSumOfArticles(id))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Groups)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.groups' and 'this.props.loadGroups()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(DetailsMaster);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"articles\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n listParentOriginIDMenus: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'articlesRequested' or 'articlesReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'articles' below represents the 'state':-\r\n articlesRequested: (articles, action) => {\r\n console.log(\"articlesRequested : \", action.payload);\r\n articles.loading = true;\r\n },\r\n articlesReceived: (articles, action) => {\r\n console.log(\"articlesReceived : \", action.payload);\r\n articles.list = action.payload;\r\n articles.loading = false;\r\n articles.lastFetch = Date.now();\r\n },\r\n articlesRequestedFailed: (articles, action) => {\r\n articles.loading = false;\r\n // window.alert(`No Articles found.`);\r\n },\r\n\r\n articlesOnNavbarRequested: (articles, action) => {\r\n console.log(\"articlesOnNavbarRequested : \", action.payload);\r\n articles.loading = true;\r\n },\r\n articlesOnNavbarReceived: (articles, action) => {\r\n console.log(\"articlesOnNavbarReceived : \", action.payload);\r\n articles.listOnNavvar = action.payload;\r\n articles.loading = false;\r\n articles.lastFetch = Date.now();\r\n },\r\n articlesOnNavbarRequestedFailed: (articles, action) => {\r\n articles.loading = false;\r\n // window.alert(`No Articles found.`);\r\n },\r\n articleRequested: (article, action) => {\r\n console.log(\"articleRequested : \", action.payload);\r\n article.loading = true;\r\n },\r\n articleReceived: (article, action) => {\r\n console.log(\"articleReceived : \", action.payload);\r\n article.listSingleRow = action.payload;\r\n article.loading = false;\r\n article.lastFetch = Date.now();\r\n },\r\n articleRequestedFailed: (article, action) => {\r\n article.loading = false;\r\n // window.alert(`No Article found.`);\r\n },\r\n\r\n parentOriginIDMenusRequested: (parentOriginIDMenus, action) => {\r\n console.log(\"parentOriginIDMenusRequested : \", action.payload);\r\n parentOriginIDMenus.loading = true;\r\n },\r\n parentOriginIDMenusReceived: (parentOriginIDMenus, action) => {\r\n console.log(\"parentOriginIDMenusReceived : \", action.payload);\r\n parentOriginIDMenus.listParentOriginIDMenus = action.payload;\r\n parentOriginIDMenus.loading = false;\r\n parentOriginIDMenus.lastFetch = Date.now();\r\n },\r\n parentOriginIDMenusRequestedFailed: (parentOriginIDMenus, action) => {\r\n parentOriginIDMenus.loading = false;\r\n // window.alert(`No parentOriginIDMenus found.`);\r\n },\r\n\r\n articleChangeRequested: (article, action) => {\r\n console.log(\"articleChangeRequested : \", action.payload);\r\n article.loading = true;\r\n },\r\n articleChangeFailed: (article, action) => {\r\n article.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete article api at the back end.\r\n // const { ID: articleId, A_Name: articleName } = action.payload;\r\n\r\n // window.alert(`Article '${articleName}' no longer exists.`);\r\n\r\n // const index = article.list.findIndex(article => article.ID === articleId);\r\n // //console.log(\"articleDeleted ha \", index);\r\n // article.list.splice(index, 1);\r\n },\r\n articleChanged: (article, action) => {\r\n article.loading = false;\r\n },\r\n articleDeleteRequested: (article, action) => {\r\n console.log(\"articleDeleteRequested : \", action.payload);\r\n article.loading = true;\r\n },\r\n articleDeleteFailed: (articles, action) => {\r\n articles.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete article api at the back end.\r\n const { ID: articleId, A_Name: articleName } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with article '${articleName}'. ${action.payload}`\r\n );\r\n\r\n const index = articles.list.findIndex(\r\n article => article.ID === articleId\r\n );\r\n //console.log(\"articleDeleted ha \", index);\r\n articles.list.splice(index, 1);\r\n },\r\n articleDeleted: (articles, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete article api at the back end.\r\n const { ID: articleID } = action.payload;\r\n // console.log(\"articleDeleted ha \", action.payload, articleID, articles);\r\n const index = articles.list.findIndex(\r\n article => article.ID === articleID\r\n );\r\n //console.log(\"articleDeleted, ha! ha! \", index);\r\n articles.list.splice(index, 1);\r\n },\r\n articleAddRequested: (article, action) => {\r\n console.log(\"articleAddRequested : \", article, action.payload);\r\n article.loading = true;\r\n },\r\n articleAddFailed: (article, action) => {\r\n article.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'articles' below represents the 'state':-\r\n articleAdded: (articles, action) => {\r\n console.log(\"articleAdded : \", action.payload);\r\n articles.list.push(action.payload);\r\n }\r\n // articleAdded: (articles, action) => {\r\n // articles.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // articleDeleted: (articles, action) => {\r\n // console.log(\"articleDeleted ha \", action.payload.ID);\r\n // articles.list.filter(article => article.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n articleAddRequested,\r\n articleAdded,\r\n articleAddFailed,\r\n articleChangeRequested,\r\n articleChanged,\r\n articleChangeFailed,\r\n articleDeleteRequested,\r\n articleDeleted,\r\n articleDeleteFailed,\r\n articlesReceived,\r\n articlesRequested,\r\n articlesRequestedFailed,\r\n articlesOnNavbarReceived,\r\n articlesOnNavbarRequested,\r\n articlesOnNavbarRequestedFailed,\r\n articleReceived,\r\n articleRequested,\r\n articleRequestedFailed,\r\n parentOriginIDMenusRequested,\r\n parentOriginIDMenusReceived,\r\n parentOriginIDMenusRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/articles\";\r\n\r\nexport const loadArticles = billboardLargeID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.articles;\r\n\r\n // console.log(\"loadArticles lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/articles\" + \"/\" + billboardLargeID,\r\n onStart: articlesRequested.type,\r\n method: \"get\",\r\n onSuccess: articlesReceived.type,\r\n onError: articlesRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadArticle = articleID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.articles;\r\n\r\n //console.log(\"loadArticle : \", articleID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + articleID,\r\n onStart: articleRequested.type,\r\n method: \"get\",\r\n onSuccess: articleReceived.type,\r\n onError: articleRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadParentOriginIDMenus = billboardLargeID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.articles;\r\n\r\n //console.log(\"loadParentOriginIDMenus : \", articleID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/parentOrigin\" + \"/\" + billboardLargeID,\r\n onStart: parentOriginIDMenusRequested.type,\r\n method: \"get\",\r\n onSuccess: parentOriginIDMenusReceived.type,\r\n onError: parentOriginIDMenusRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addArticle':-\r\nexport const addArticle = (article, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: articleAddRequested.type,\r\n //data: article,\r\n data: {\r\n N_BillboardOrigin_ID: article.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: article.N_HomeLocationGroup_ID,\r\n N_HomeLocationArticle_ID: article.N_HomeLocationArticle_ID,\r\n N_Order_No: article.N_Order_No,\r\n A_Reference: article.A_Reference,\r\n A_Summary: article.A_Summary,\r\n A_Description: article.A_Description,\r\n N_BillboardLarge_ID: article.N_BillboardLarge_ID,\r\n N_ParentOrigin_ID: article.N_ParentOrigin_ID,\r\n I_Image: article.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: articleAdded.type,\r\n onError: articleAddFailed.type\r\n });\r\n\r\nexport const getArticles = createSelector(\r\n state => state.entities.articles,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (articles, projects) has not changed then do not requery again:-\r\n // (articles) => articles.list.filter(article => !article.B_Active)\r\n articles => articles.list\r\n);\r\n\r\nexport const changeArticle = (article, user, currentDate) =>\r\n apiCallBegan({\r\n url: url + \"/\" + article.ID,\r\n method: \"put\",\r\n onStart: articleChangeRequested.type,\r\n data: {\r\n N_BillboardOrigin_ID: article.N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID: article.N_HomeLocationGroup_ID,\r\n N_HomeLocationArticle_ID: article.N_HomeLocationArticle_ID,\r\n N_Order_No: article.N_Order_No,\r\n A_Reference: article.A_Reference,\r\n A_Summary: article.A_Summary,\r\n A_Description: article.A_Description,\r\n N_ParentOrigin_ID: article.N_ParentOrigin_ID,\r\n I_Image: article.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: articleChanged.type,\r\n onError: articleChangeFailed.type\r\n });\r\n\r\nexport const deleteArticle = article =>\r\n apiCallBegan({\r\n url: url + \"/\" + article.ID,\r\n method: \"delete\",\r\n onStart: articleDeleteRequested.type,\r\n data: { ID: article.ID, A_Reference: article.A_Reference },\r\n onSuccess: articleDeleted.type,\r\n onError: articleDeleteFailed.type\r\n });\r\n","import React, { Component, Suspense } from \"react\";\r\n// import {\r\n// getBillboardLarge,\r\n// getBillboardLargesGroup\r\n// } from \"../../services/billboardLargeService\";\r\nimport { loadSumOfArticle } from \"../../store/sumOfArticles\";\r\nimport { loadArticles } from \"../../store/articles\";\r\nimport { connect } from \"react-redux\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport NavBarFooter from \"../navBarFooter\";\r\nimport ScrollUpButton from \"react-scroll-up-button\";\r\nimport { Link, animateScroll as scroll } from \"react-scroll\";\r\n\r\nclass DetailsGroup extends Component {\r\n state = {\r\n data: {\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n I_Image: \"\"\r\n },\r\n billboardLargesGroup: []\r\n };\r\n\r\n async populateSumOfArticlesArticles() {\r\n const sumOfArticleId = this.props.match.params.id;\r\n\r\n // window.alert(`componentDidMount (DetailsGroup) : ${menuId}`);\r\n\r\n await this.props.loadSumOfArticle(sumOfArticleId);\r\n\r\n await this.props.loadArticles(sumOfArticleId);\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateSumOfArticlesArticles();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n\r\n // if (this.state.data !== nextProps.menu) {\r\n\r\n data[\"A_Reference\"] = nextProps.sumOfArticle.A_Reference;\r\n data[\"A_Summary\"] = nextProps.sumOfArticle.A_Summary;\r\n data[\"I_Image\"] = nextProps.sumOfArticle.I_Image;\r\n\r\n this.setState({\r\n data\r\n });\r\n // }\r\n }\r\n\r\n // async mapToViewModel(billboardLarge) {\r\n // //console.log(\"mapToViewModel-1\", billboardLarge);\r\n // return {\r\n // A_Reference: billboardLarge.A_Reference,\r\n // A_Summary: billboardLarge.A_Summary,\r\n // I_Image: billboardLarge.I_Image\r\n // };\r\n // }\r\n\r\n renderBillboardData = ({ item, row }) => {\r\n // console.log(\"renderBillboardData 01 : \", item, rowCount);\r\n\r\n let sectionStyle;\r\n\r\n // document.body.style.backgroundImage = `url(${item.I_Image})`;\r\n // document.body.style.backgroundRepeat = \"no-repeat\";\r\n // document.body.style.backgroundSize = \"cover\";\r\n\r\n if (row === 0) {\r\n sectionStyle = {\r\n height: \"100vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment: \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n } else {\r\n sectionStyle = {\r\n height: \"500px\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n\r\n let sectionStyleSmallerLg;\r\n sectionStyleSmallerLg = {\r\n height: \"50vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // } else if (item.N_RadioGrpDirection === \"5\") {\r\n // sectionStyle = {\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // backgroundPosition: \"center center\",\r\n // backgroundAttachment: \"fixed\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n // } else {\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundColor: \"white\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n // }\r\n\r\n // https://www.npmjs.com/package/react-animations\r\n // const styles = {\r\n // bounce: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(bounce, \"bounce\")\r\n // },\r\n // fadeIn: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeIn, \"fadeIn\")\r\n // },\r\n // fadeInUp00: {\r\n // animation: \"y 1s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp02\")\r\n // },\r\n // fadeInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp03\")\r\n // },\r\n // flipInX: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInX, \"flipInX\")\r\n // },\r\n // flipInY: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInY, \"flipInY\")\r\n // },\r\n // rubberBand: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rubberBand, \"rubberBand\")\r\n // },\r\n // shake: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(shake, \"shake\")\r\n // },\r\n // rotateInUpRight: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpRight, \"rotateInUpRight\")\r\n // },\r\n // rotateInUpLeft: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpLeft, \"rotateInUpLeft\")\r\n // },\r\n // slideInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(slideInUp, fadeIn, \"slideInUp01\")\r\n // },\r\n // slideInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // },\r\n // slideInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // }\r\n // };\r\n\r\n // Babak's Notes: Commented out on 20200115: START\r\n return (\r\n //
\r\n
\r\n {row === 0 ? (\r\n
\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n {item.A_Reference}\r\n

\r\n\r\n

\r\n {item.A_Summary}\r\n

\r\n\r\n

\r\n {item.A_Description}\r\n

\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n

\r\n {item.A_Reference}\r\n

\r\n\r\n

\r\n {item.A_Summary}\r\n

\r\n\r\n

\r\n {item.A_Description}\r\n

\r\n
\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n
\r\n\r\n \r\n {item.A_Description}\r\n \r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n\r\n \r\n {item.A_Description}\r\n \r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n )}\r\n\r\n {row === 0 ? (\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n \r\n\r\n \r\n {item.A_Description}\r\n \r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n \r\n {item.A_Reference}\r\n
\r\n \r\n {item.A_Summary}\r\n
\r\n\r\n \r\n {item.A_Description}\r\n \r\n\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n scrollToTop = () => {\r\n // scroll.scrollToTop();\r\n // scroll.scrollToBottom();\r\n scroll.scrollTo(3);\r\n };\r\n\r\n render() {\r\n const { data } = this.state;\r\n // const { billboardLargesGroup } = this.props.groups;\r\n\r\n // let sectionStyle;\r\n\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundImage: `url(${data.I_Image})`,\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // console.log(\r\n // \"DetailsGroup render, Number of billboardLargesGroup: \",\r\n // this.props.match.params.id,\r\n // data,\r\n // this.props.groups,\r\n // this.props.groups.length\r\n // );\r\n\r\n if (this.props.articles.length === 0)\r\n return
;\r\n\r\n //\r\n // Babak's Note: Goto at top of screen:- https://www.youtube.com/watch?v=7f0QXAgFtrE\r\n // https://www.digitalocean.com/community/tutorials/how-to-implement-smooth-scrolling-in-react\r\n // https://stackoverflow.com/questions/58771756/react-scroll-to-element-when-element-exists\r\n // this.scrollToTop();\r\n window.scrollTo(0, 0);\r\n // window.scroll({\r\n // top: document.body.offsetHeight,\r\n // left: 0,\r\n // behavior: \"smooth\"\r\n // });\r\n\r\n return (\r\n
\r\n {/*
}> */}\r\n \r\n\r\n {this.props.articles.map((item, index) => (\r\n \r\n ))}\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {/* */}\r\n {/*
\r\n \r\n
*/}\r\n \r\n );\r\n\r\n // return (\r\n // \r\n //
\r\n // \r\n // {data.A_Reference}\r\n //
\r\n //
\r\n // {data.A_Summary}\r\n //
\r\n //
\r\n // {this.props.groups.map(item => (\r\n //
\r\n //
\r\n // \r\n // {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={item.I_Image}\r\n // className=\"imageLink\"\r\n // >\r\n // \r\n //
\r\n // {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // >\r\n // {item.A_Reference}\r\n //
\r\n //
{item.A_Summary}
\r\n // {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // >\r\n // بیشتر...\r\n //
\r\n // \r\n // ))}\r\n // \r\n // \r\n //
\r\n // \r\n //
\r\n // \r\n // );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // groups: state.entities.groups.list.filter(group => !group.resolved)\r\n sumOfArticle: state.entities.sumOfArticles.listSingleRow,\r\n articles: state.entities.articles.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadSumOfArticle: id => dispatch(loadSumOfArticle(id)),\r\n loadArticles: id => dispatch(loadArticles(id))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Groups)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.groups' and 'this.props.loadGroups()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(DetailsGroup);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeBillboardsMainsAboutUs\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeBillboardsMainsAboutUsRequested' or 'homeBillboardsMainsAboutUsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeBillboardsMainsAboutUs' below represents the 'state':-\r\n homeBillboardsMainsAboutUsRequested: (\r\n homeBillboardsMainsAboutUs,\r\n action\r\n ) => {\r\n console.log(\"homeBillboardsMainsAboutUsRequested : \", action.payload);\r\n homeBillboardsMainsAboutUs.loading = true;\r\n },\r\n homeBillboardsMainsAboutUsReceived: (\r\n homeBillboardsMainsAboutUs,\r\n action\r\n ) => {\r\n console.log(\"homeBillboardsMainsAboutUsReceived : \", action.payload);\r\n homeBillboardsMainsAboutUs.list = action.payload;\r\n homeBillboardsMainsAboutUs.loading = false;\r\n homeBillboardsMainsAboutUs.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainsAboutUsRequestedFailed: (\r\n homeBillboardsMainsAboutUs,\r\n action\r\n ) => {\r\n homeBillboardsMainsAboutUs.loading = false;\r\n // window.alert(`No HomeBillboardsMainsAboutUs found.`);\r\n },\r\n\r\n homeBillboardsMainsAboutUsOnNavbarRequested: (\r\n homeBillboardsMainsAboutUs,\r\n action\r\n ) => {\r\n console.log(\r\n \"homeBillboardsMainsAboutUsOnNavbarRequested : \",\r\n action.payload\r\n );\r\n homeBillboardsMainsAboutUs.loading = true;\r\n },\r\n homeBillboardsMainsAboutUsOnNavbarReceived: (\r\n homeBillboardsMainsAboutUs,\r\n action\r\n ) => {\r\n console.log(\r\n \"homeBillboardsMainsAboutUsOnNavbarReceived : \",\r\n action.payload\r\n );\r\n homeBillboardsMainsAboutUs.listOnNavvar = action.payload;\r\n homeBillboardsMainsAboutUs.loading = false;\r\n homeBillboardsMainsAboutUs.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainsAboutUsOnNavbarRequestedFailed: (\r\n homeBillboardsMainsAboutUs,\r\n action\r\n ) => {\r\n homeBillboardsMainsAboutUs.loading = false;\r\n // window.alert(`No HomeBillboardsMainsAboutUs found.`);\r\n },\r\n\r\n homeBillboardsMainRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainReceived: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainReceived : \", action.payload);\r\n homeBillboardsMain.listSingleRow = action.payload;\r\n homeBillboardsMain.loading = false;\r\n homeBillboardsMain.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainRequestedFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n // window.alert(`No HomeBillboardsMain found.`);\r\n },\r\n homeBillboardsMainChangeRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainChangeRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainChangeFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n // const { ID: homeBillboardsMainId, A_Name: homeBillboardsMainName } = action.payload;\r\n\r\n // window.alert(`HomeBillboardsMain '${homeBillboardsMainName}' no longer exists.`);\r\n\r\n // const index = homeBillboardsMain.list.findIndex(homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainId);\r\n // //console.log(\"homeBillboardsMainDeleted ha \", index);\r\n // homeBillboardsMain.list.splice(index, 1);\r\n },\r\n homeBillboardsMainChanged: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n },\r\n homeBillboardsMainDeleteRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainDeleteRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainDeleteFailed: (homeBillboardsMainsAboutUs, action) => {\r\n homeBillboardsMainsAboutUs.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n const {\r\n ID: homeBillboardsMainId,\r\n A_Name: homeBillboardsMainName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeBillboardsMain '${homeBillboardsMainName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeBillboardsMainsAboutUs.list.findIndex(\r\n homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainId\r\n );\r\n //console.log(\"homeBillboardsMainDeleted ha \", index);\r\n homeBillboardsMainsAboutUs.list.splice(index, 1);\r\n },\r\n homeBillboardsMainDeleted: (homeBillboardsMainsAboutUs, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n const { ID: homeBillboardsMainID } = action.payload;\r\n // console.log(\"homeBillboardsMainDeleted ha \", action.payload, homeBillboardsMainID, homeBillboardsMainsAboutUs);\r\n const index = homeBillboardsMainsAboutUs.list.findIndex(\r\n homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainID\r\n );\r\n //console.log(\"homeBillboardsMainDeleted, ha! ha! \", index);\r\n homeBillboardsMainsAboutUs.list.splice(index, 1);\r\n },\r\n homeBillboardsMainAddRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainAddRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainAddFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeBillboardsMainsAboutUs' below represents the 'state':-\r\n homeBillboardsMainAdded: (homeBillboardsMainsAboutUs, action) => {\r\n console.log(\"homeBillboardsMainAdded : \", action.payload);\r\n homeBillboardsMainsAboutUs.list.push(action.payload);\r\n }\r\n // homeBillboardsMainAdded: (homeBillboardsMainsAboutUs, action) => {\r\n // homeBillboardsMainsAboutUs.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeBillboardsMainDeleted: (homeBillboardsMainsAboutUs, action) => {\r\n // console.log(\"homeBillboardsMainDeleted ha \", action.payload.ID);\r\n // homeBillboardsMainsAboutUs.list.filter(homeBillboardsMain => homeBillboardsMain.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeBillboardsMainAddRequested,\r\n homeBillboardsMainAdded,\r\n homeBillboardsMainAddFailed,\r\n homeBillboardsMainChangeRequested,\r\n homeBillboardsMainChanged,\r\n homeBillboardsMainChangeFailed,\r\n homeBillboardsMainDeleteRequested,\r\n homeBillboardsMainDeleted,\r\n homeBillboardsMainDeleteFailed,\r\n homeBillboardsMainsAboutUsReceived,\r\n homeBillboardsMainsAboutUsRequested,\r\n homeBillboardsMainsAboutUsRequestedFailed,\r\n homeBillboardsMainsAboutUsOnNavbarReceived,\r\n homeBillboardsMainsAboutUsOnNavbarRequested,\r\n homeBillboardsMainsAboutUsOnNavbarRequestedFailed,\r\n homeBillboardsMainReceived,\r\n homeBillboardsMainRequested,\r\n homeBillboardsMainRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/homeBillboardsMainsAboutUs\";\r\n\r\nexport const loadHomeBillboardsMainsAboutUs = orderNo => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardsMainsAboutUs;\r\n\r\n // console.log(\"loadHomeBillboardsMainsAboutUs lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/aboutUs/\" + orderNo,\r\n onStart: homeBillboardsMainsAboutUsRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardsMainsAboutUsReceived.type,\r\n onError: homeBillboardsMainsAboutUsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeBillboardsMain = homeBillboardsMainID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardsMainsAboutUs;\r\n\r\n //console.log(\"loadHomeBillboardsMain : \", homeBillboardsMainID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMainID,\r\n onStart: homeBillboardsMainRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardsMainReceived.type,\r\n onError: homeBillboardsMainRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeBillboardsMain':-\r\nexport const addHomeBillboardsMain = (homeBillboardsMain, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeBillboardsMainAddRequested.type,\r\n //data: homeBillboardsMain,\r\n data: {\r\n N_OrderNo: homeBillboardsMain.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardsMain.N_RadioGrpDirections_ID,\r\n N_HomeBillboardsMains_ID: homeBillboardsMain.N_HomeBillboardsMains_ID,\r\n // A_BillboardLargeLink: homeBillboardsMain.A_BillboardLargeLink,\r\n A_Reference: homeBillboardsMain.A_Reference,\r\n A_Summary: homeBillboardsMain.A_Summary,\r\n A_Description: homeBillboardsMain.A_Description,\r\n A_HoverSummary01: homeBillboardsMain.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardsMain.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardsMain.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardsMain.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardsMain.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardsMain.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardsMain.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardsMain.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardsMain.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardsMain.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardsMain.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardsMain.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardsMain.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardsMain.A_HoverSummary08_Link,\r\n I_Image: homeBillboardsMain.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: homeBillboardsMainAdded.type,\r\n onError: homeBillboardsMainAddFailed.type\r\n });\r\n\r\nexport const getHomeBillboardsMainsAboutUs = createSelector(\r\n state => state.entities.homeBillboardsMainsAboutUs,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeBillboardsMainsAboutUs, projects) has not changed then do not requery again:-\r\n // (homeBillboardsMainsAboutUs) => homeBillboardsMainsAboutUs.list.filter(homeBillboardsMain => !homeBillboardsMain.B_Active)\r\n homeBillboardsMainsAboutUs => homeBillboardsMainsAboutUs.list\r\n);\r\n\r\nexport const changeHomeBillboardsMain = (\r\n homeBillboardsMain,\r\n user,\r\n currentDate\r\n) =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMain.ID,\r\n method: \"put\",\r\n onStart: homeBillboardsMainChangeRequested.type,\r\n data: {\r\n N_OrderNo: homeBillboardsMain.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardsMain.N_RadioGrpDirections_ID,\r\n N_HomeBillboardsMains_ID: homeBillboardsMain.N_HomeBillboardsMains_ID,\r\n // A_BillboardLargeLink: homeBillboardsMain.A_BillboardLargeLink,\r\n A_Reference: homeBillboardsMain.A_Reference,\r\n A_Summary: homeBillboardsMain.A_Summary,\r\n A_Description: homeBillboardsMain.A_Description,\r\n A_HoverSummary01: homeBillboardsMain.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardsMain.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardsMain.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardsMain.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardsMain.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardsMain.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardsMain.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardsMain.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardsMain.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardsMain.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardsMain.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardsMain.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardsMain.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardsMain.A_HoverSummary08_Link,\r\n I_Image: homeBillboardsMain.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: homeBillboardsMainChanged.type,\r\n onError: homeBillboardsMainChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeBillboardsMain = homeBillboardsMain =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMain.ID,\r\n method: \"delete\",\r\n onStart: homeBillboardsMainDeleteRequested.type,\r\n data: {\r\n ID: homeBillboardsMain.ID,\r\n A_Reference: homeBillboardsMain.A_Reference\r\n },\r\n onSuccess: homeBillboardsMainDeleted.type,\r\n onError: homeBillboardsMainDeleteFailed.type\r\n });\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMainAboutUs extends Component {\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderParentImage = ({\r\n image,\r\n imageOnImage,\r\n parentImageLink,\r\n reference,\r\n parentReferenceLink,\r\n summary,\r\n parentSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={parentImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderChildImage = ({\r\n image,\r\n imageOnImage,\r\n childImageLink,\r\n reference,\r\n childReferenceLink,\r\n summary,\r\n childSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}{\" \"}\r\n
\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={childImageLink}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}{\" \"}\r\n
\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n
\r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderReference = ({ reference, referenceCSS, urlLink }) => {\r\n return (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n homeBillboardChildsMainAboutUs,\r\n nameOfClassParentColumn,\r\n nameOfClassChildColumn,\r\n mediaAttribute,\r\n parentImageLink,\r\n parentReferenceLink,\r\n parentSummaryLink,\r\n childImageLink,\r\n childReferenceLink,\r\n childSummaryLink\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {/*
Hello
\r\n
\r\n
\r\n Bye1\r\n
\r\n
\r\n Bye2\r\n
\r\n
\r\n Bye3\r\n
\r\n
\r\n Bye4\r\n
\r\n
*/}\r\n {/* *** Babak's Notes: Below is the make up of above *** */}\r\n \r\n {homeBillboardChildsMainAboutUs.map((item, index) =>\r\n index === 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n
\r\n\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainAboutUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"MD\" ? (\r\n \r\n {homeBillboardChildsMainAboutUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"SM\" ? (\r\n \r\n {homeBillboardChildsMainAboutUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"XS\" ? (\r\n \r\n {homeBillboardChildsMainAboutUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n // \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMainAboutUs;\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/homeBillboards\";\r\n// const apiEndpointHomeBillboardsMain = apiUrl + \"/homeBillboards/main\";\r\n\r\nconst apiEndpointHomeBillboardChildsMains = \"/homeBillboardChildsMains\";\r\n\r\nfunction HomeBillboardChildsMainsUrl(id) {\r\n return `${apiEndpointHomeBillboardChildsMains}/main/${id}`;\r\n}\r\n\r\nexport function getHomeBillboardChildsMains(homeBillboardID) {\r\n //console.log(\"getHomeBillboardChildsMains : \", HomeBillboardChildsMainsUrl(homeBillboardID));\r\n\r\n return http.get(HomeBillboardChildsMainsUrl(homeBillboardID));\r\n}\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport RenderHomeBillboardChildsMainAboutUs from \"./renderHomeBillboardChildsMainAboutUs\";\r\n//import slideInLeft from \"react-animations/lib/slide-in-left\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMainAboutUs\";\r\n\r\nclass HomeBillboardChildsMainAboutUs extends Component {\r\n state = {\r\n homeBillboardChildsMainAboutUs: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMainAboutUs\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({ homeBillboardChildsMainAboutUs });\r\n }\r\n\r\n render() {\r\n const mainView = this.props.mainView;\r\n const identifier = this.props.identifier;\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n const imageParent = this.props.imageParent;\r\n const urlLinkParent = this.props.urlLinkParent;\r\n\r\n const { homeBillboardChildsMainAboutUs } = this.state;\r\n // const { length: count } = this.state.homeBillboardChildsMainAboutUs;\r\n // window.alert(`Number of rows : ${count}`);\r\n // if (count === 0) return
;\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {/*
*/}\r\n \r\n {/*
*/}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {/*
\r\n
top row
\r\n
\r\n
\r\n
\r\n top row2\r\n
\r\n
\r\n bottom row2\r\n
\r\n
\r\n top row3\r\n
\r\n
\r\n bottom row3\r\n
\r\n
*/}\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMainAboutUs;\r\n","import React, { Component, Suspense } from \"react\";\r\nimport { loadHomeBillboardsMainsAboutUs } from \"../../store/homeBillboardsMainsAboutUs\";\r\nimport HomeBillboardChildsMainAboutUs from \"./homeBillboardChildsMainAboutUs\";\r\nimport NavBarFooter from \"../navBarFooter\";\r\nimport { connect } from \"react-redux\";\r\n// import LazyLoad from \"react-lazy-load\";\r\n// import {\r\n// fadeIn,\r\n// fadeInUp,\r\n// bounce,\r\n// flipInX,\r\n// flipInY,\r\n// rubberBand,\r\n// shake,\r\n// rotateInUpRight,\r\n// rotateInUpLeft,\r\n// slideInUp\r\n// } from \"react-animations\";\r\n// import Radium, { StyleRoot } from \"radium\";\r\nimport ScrollUpButton from \"react-scroll-up-button\";\r\n\r\nclass AboutUs extends Component {\r\n state = {\r\n data: {\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n I_Image: \"\"\r\n }\r\n };\r\n\r\n async populateHomeBillboardsMains() {\r\n // window.alert(\r\n // `AboutUs componentDidMount : ${this.props.customizationSingleRow.N_AboutUsNo}`\r\n // );\r\n\r\n await this.props.loadHomeBillboardsMainsAboutUs(\r\n this.props.customizationSingleRow.N_AboutUsNo\r\n );\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateHomeBillboardsMains();\r\n }\r\n\r\n // async componentWillReceiveProps(nextProps) {\r\n // // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n // let data = { ...this.state.data };\r\n\r\n // // if (this.state.data !== nextProps.menu) {\r\n\r\n // data[\"A_Reference\"] = nextProps.menus.A_Reference;\r\n // data[\"A_Summary\"] = nextProps.menus.A_Summary;\r\n // data[\"I_Image\"] = nextProps.menus.I_Image;\r\n\r\n // this.setState({\r\n // data\r\n // });\r\n // // }\r\n // }\r\n\r\n // async mapToViewModel(billboardLarge) {\r\n // //console.log(\"mapToViewModel-1\", billboardLarge);\r\n // return {\r\n // A_Reference: billboardLarge.A_Reference,\r\n // A_Summary: billboardLarge.A_Summary,\r\n // I_Image: billboardLarge.I_Image\r\n // };\r\n // }\r\n\r\n renderBillboardData = ({ item }) => {\r\n // console.log(\"renderBillboardData 01 : \", item, rowCount);\r\n\r\n // let sectionStyleTop;\r\n let sectionStyle, sectionStyleMD, sectionStyleSM, sectionStyleXS;\r\n // let sectionStyleBottom;\r\n\r\n // const styles = {\r\n // bounce: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(bounce, \"bounce\")\r\n // },\r\n // fadeIn: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeIn, \"fadeIn\")\r\n // },\r\n // fadeInUp01: {\r\n // animation: \"y 1s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp02: {\r\n // animation: \"y 2s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp02\")\r\n // },\r\n // fadeInUp03: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp03\")\r\n // },\r\n // fadeInUp04: {\r\n // animation: \"y 4s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp04\")\r\n // },\r\n // flipInX: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInX, \"flipInX\")\r\n // },\r\n // flipInY: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInY, \"flipInY\")\r\n // },\r\n // rubberBand: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rubberBand, \"rubberBand\")\r\n // },\r\n // shake: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(shake, \"shake\")\r\n // },\r\n // rotateInUpRight: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpRight, \"rotateInUpRight\")\r\n // },\r\n // rotateInUpLeft: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpLeft, \"rotateInUpLeft\")\r\n // },\r\n // slideInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(slideInUp, fadeIn, \"slideInUp01\")\r\n // },\r\n // slideInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // },\r\n // slideInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // }\r\n // };\r\n\r\n // document.body.style.backgroundImage = `url(${item.I_Image})`;\r\n // document.body.style.backgroundRepeat = \"no-repeat\";\r\n // document.body.style.backgroundSize = \"cover\";\r\n\r\n if (item.N_RadioGrpDirections_ID === 5) {\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n }\r\n\r\n // let sectionStyleSmallerLg;\r\n // sectionStyleSmallerLg = {\r\n // height: \"50vh\",\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // Babak's Notes: Commented out on 20200115: START\r\n return (\r\n //
\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const { data } = this.state;\r\n // const { billboardLargesGroup } = this.props.groups;\r\n\r\n // let sectionStyle;\r\n\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundImage: `url(${data.I_Image})`,\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // console.log(\r\n // \"DetailsGroup render, Number of billboardLargesGroup: \",\r\n // this.props.match.params.id,\r\n // data,\r\n // this.props.groups,\r\n // this.props.groups.length\r\n // );\r\n\r\n if (this.props.homeBillboardsMainsAboutUs.length === 0)\r\n return
;\r\n\r\n return (\r\n
\r\n
\r\n {this.props.homeBillboardsMainsAboutUs.map((item, index) => (\r\n \r\n ))}\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n homeBillboardsMainsAboutUs: state.entities.homeBillboardsMainsAboutUs.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboardsMainsAboutUs: orderNo =>\r\n dispatch(loadHomeBillboardsMainsAboutUs(orderNo))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(AboutUs);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeBillboardsMainsContactUs\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeBillboardsMainsContactUsRequested' or 'homeBillboardsMainsContactUsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeBillboardsMainsContactUs' below represents the 'state':-\r\n homeBillboardsMainsContactUsRequested: (\r\n homeBillboardsMainsContactUs,\r\n action\r\n ) => {\r\n console.log(\"homeBillboardsMainsContactUsRequested : \", action.payload);\r\n homeBillboardsMainsContactUs.loading = true;\r\n },\r\n homeBillboardsMainsContactUsReceived: (\r\n homeBillboardsMainsContactUs,\r\n action\r\n ) => {\r\n console.log(\"homeBillboardsMainsContactUsReceived : \", action.payload);\r\n homeBillboardsMainsContactUs.list = action.payload;\r\n homeBillboardsMainsContactUs.loading = false;\r\n homeBillboardsMainsContactUs.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainsContactUsRequestedFailed: (\r\n homeBillboardsMainsContactUs,\r\n action\r\n ) => {\r\n homeBillboardsMainsContactUs.loading = false;\r\n // window.alert(`No HomeBillboardsMainsContactUs found.`);\r\n },\r\n\r\n homeBillboardsMainsContactUsOnNavbarRequested: (\r\n homeBillboardsMainsContactUs,\r\n action\r\n ) => {\r\n console.log(\r\n \"homeBillboardsMainsContactUsOnNavbarRequested : \",\r\n action.payload\r\n );\r\n homeBillboardsMainsContactUs.loading = true;\r\n },\r\n homeBillboardsMainsContactUsOnNavbarReceived: (\r\n homeBillboardsMainsContactUs,\r\n action\r\n ) => {\r\n console.log(\r\n \"homeBillboardsMainsContactUsOnNavbarReceived : \",\r\n action.payload\r\n );\r\n homeBillboardsMainsContactUs.listOnNavvar = action.payload;\r\n homeBillboardsMainsContactUs.loading = false;\r\n homeBillboardsMainsContactUs.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainsContactUsOnNavbarRequestedFailed: (\r\n homeBillboardsMainsContactUs,\r\n action\r\n ) => {\r\n homeBillboardsMainsContactUs.loading = false;\r\n // window.alert(`No HomeBillboardsMainsContactUs found.`);\r\n },\r\n\r\n homeBillboardsMainRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainReceived: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainReceived : \", action.payload);\r\n homeBillboardsMain.listSingleRow = action.payload;\r\n homeBillboardsMain.loading = false;\r\n homeBillboardsMain.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainRequestedFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n // window.alert(`No HomeBillboardsMain found.`);\r\n },\r\n homeBillboardsMainChangeRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainChangeRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainChangeFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n // const { ID: homeBillboardsMainId, A_Name: homeBillboardsMainName } = action.payload;\r\n\r\n // window.alert(`HomeBillboardsMain '${homeBillboardsMainName}' no longer exists.`);\r\n\r\n // const index = homeBillboardsMain.list.findIndex(homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainId);\r\n // //console.log(\"homeBillboardsMainDeleted ha \", index);\r\n // homeBillboardsMain.list.splice(index, 1);\r\n },\r\n homeBillboardsMainChanged: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n },\r\n homeBillboardsMainDeleteRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainDeleteRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainDeleteFailed: (homeBillboardsMainsContactUs, action) => {\r\n homeBillboardsMainsContactUs.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n const {\r\n ID: homeBillboardsMainId,\r\n A_Name: homeBillboardsMainName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeBillboardsMain '${homeBillboardsMainName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeBillboardsMainsContactUs.list.findIndex(\r\n homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainId\r\n );\r\n //console.log(\"homeBillboardsMainDeleted ha \", index);\r\n homeBillboardsMainsContactUs.list.splice(index, 1);\r\n },\r\n homeBillboardsMainDeleted: (homeBillboardsMainsContactUs, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n const { ID: homeBillboardsMainID } = action.payload;\r\n // console.log(\"homeBillboardsMainDeleted ha \", action.payload, homeBillboardsMainID, homeBillboardsMainsContactUs);\r\n const index = homeBillboardsMainsContactUs.list.findIndex(\r\n homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainID\r\n );\r\n //console.log(\"homeBillboardsMainDeleted, ha! ha! \", index);\r\n homeBillboardsMainsContactUs.list.splice(index, 1);\r\n },\r\n homeBillboardsMainAddRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainAddRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainAddFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeBillboardsMainsContactUs' below represents the 'state':-\r\n homeBillboardsMainAdded: (homeBillboardsMainsContactUs, action) => {\r\n console.log(\"homeBillboardsMainAdded : \", action.payload);\r\n homeBillboardsMainsContactUs.list.push(action.payload);\r\n }\r\n // homeBillboardsMainAdded: (homeBillboardsMainsContactUs, action) => {\r\n // homeBillboardsMainsContactUs.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeBillboardsMainDeleted: (homeBillboardsMainsContactUs, action) => {\r\n // console.log(\"homeBillboardsMainDeleted ha \", action.payload.ID);\r\n // homeBillboardsMainsContactUs.list.filter(homeBillboardsMain => homeBillboardsMain.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeBillboardsMainAddRequested,\r\n homeBillboardsMainAdded,\r\n homeBillboardsMainAddFailed,\r\n homeBillboardsMainChangeRequested,\r\n homeBillboardsMainChanged,\r\n homeBillboardsMainChangeFailed,\r\n homeBillboardsMainDeleteRequested,\r\n homeBillboardsMainDeleted,\r\n homeBillboardsMainDeleteFailed,\r\n homeBillboardsMainsContactUsReceived,\r\n homeBillboardsMainsContactUsRequested,\r\n homeBillboardsMainsContactUsRequestedFailed,\r\n homeBillboardsMainsContactUsOnNavbarReceived,\r\n homeBillboardsMainsContactUsOnNavbarRequested,\r\n homeBillboardsMainsContactUsOnNavbarRequestedFailed,\r\n homeBillboardsMainReceived,\r\n homeBillboardsMainRequested,\r\n homeBillboardsMainRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/homeBillboardsMainsContactUs\";\r\n\r\nexport const loadHomeBillboardsMainsContactUs = orderNo => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardsMainsContactUs;\r\n\r\n // console.log(\"loadHomeBillboardsMainsContactUs lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/contactUs/\" + orderNo,\r\n onStart: homeBillboardsMainsContactUsRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardsMainsContactUsReceived.type,\r\n onError: homeBillboardsMainsContactUsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeBillboardsMain = homeBillboardsMainID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardsMainsContactUs;\r\n\r\n //console.log(\"loadHomeBillboardsMain : \", homeBillboardsMainID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMainID,\r\n onStart: homeBillboardsMainRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardsMainReceived.type,\r\n onError: homeBillboardsMainRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeBillboardsMain':-\r\nexport const addHomeBillboardsMain = (homeBillboardsMain, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeBillboardsMainAddRequested.type,\r\n //data: homeBillboardsMain,\r\n data: {\r\n N_OrderNo: homeBillboardsMain.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardsMain.N_RadioGrpDirections_ID,\r\n N_HomeBillboardsMains_ID: homeBillboardsMain.N_HomeBillboardsMains_ID,\r\n // A_BillboardLargeLink: homeBillboardsMain.A_BillboardLargeLink,\r\n A_Reference: homeBillboardsMain.A_Reference,\r\n A_Summary: homeBillboardsMain.A_Summary,\r\n A_Description: homeBillboardsMain.A_Description,\r\n A_HoverSummary01: homeBillboardsMain.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardsMain.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardsMain.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardsMain.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardsMain.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardsMain.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardsMain.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardsMain.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardsMain.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardsMain.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardsMain.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardsMain.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardsMain.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardsMain.A_HoverSummary08_Link,\r\n I_Image: homeBillboardsMain.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: homeBillboardsMainAdded.type,\r\n onError: homeBillboardsMainAddFailed.type\r\n });\r\n\r\nexport const getHomeBillboardsMainsContactUs = createSelector(\r\n state => state.entities.homeBillboardsMainsContactUs,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeBillboardsMainsContactUs, projects) has not changed then do not requery again:-\r\n // (homeBillboardsMainsContactUs) => homeBillboardsMainsContactUs.list.filter(homeBillboardsMain => !homeBillboardsMain.B_Active)\r\n homeBillboardsMainsContactUs => homeBillboardsMainsContactUs.list\r\n);\r\n\r\nexport const changeHomeBillboardsMain = (\r\n homeBillboardsMain,\r\n user,\r\n currentDate\r\n) =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMain.ID,\r\n method: \"put\",\r\n onStart: homeBillboardsMainChangeRequested.type,\r\n data: {\r\n N_OrderNo: homeBillboardsMain.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardsMain.N_RadioGrpDirections_ID,\r\n N_HomeBillboardsMains_ID: homeBillboardsMain.N_HomeBillboardsMains_ID,\r\n // A_BillboardLargeLink: homeBillboardsMain.A_BillboardLargeLink,\r\n A_Reference: homeBillboardsMain.A_Reference,\r\n A_Summary: homeBillboardsMain.A_Summary,\r\n A_Description: homeBillboardsMain.A_Description,\r\n A_HoverSummary01: homeBillboardsMain.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardsMain.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardsMain.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardsMain.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardsMain.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardsMain.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardsMain.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardsMain.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardsMain.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardsMain.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardsMain.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardsMain.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardsMain.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardsMain.A_HoverSummary08_Link,\r\n I_Image: homeBillboardsMain.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: homeBillboardsMainChanged.type,\r\n onError: homeBillboardsMainChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeBillboardsMain = homeBillboardsMain =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMain.ID,\r\n method: \"delete\",\r\n onStart: homeBillboardsMainDeleteRequested.type,\r\n data: {\r\n ID: homeBillboardsMain.ID,\r\n A_Reference: homeBillboardsMain.A_Reference\r\n },\r\n onSuccess: homeBillboardsMainDeleted.type,\r\n onError: homeBillboardsMainDeleteFailed.type\r\n });\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n// import backgroundImage from \"../../images/logo.jpeg\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMainContactUs extends Component {\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderParentImage = ({\r\n image,\r\n imageOnImage,\r\n parentImageLink,\r\n reference,\r\n parentReferenceLink,\r\n summary,\r\n parentSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={parentImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderChildImage = ({\r\n image,\r\n imageOnImage,\r\n childImageLink,\r\n reference,\r\n childReferenceLink,\r\n summary,\r\n childSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n // console.log(`Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${reference}`);\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={childImageLink}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderReference = ({ reference, referenceCSS, urlLink }) => {\r\n return (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n homeBillboardChildsMainContactUs,\r\n nameOfClassParentColumn,\r\n nameOfClassChildColumn,\r\n mediaAttribute,\r\n parentImageLink,\r\n parentReferenceLink,\r\n parentSummaryLink,\r\n childImageLink,\r\n childReferenceLink,\r\n childSummaryLink\r\n } = this.props;\r\n\r\n // console.log(\r\n // `Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${homeBillboardChildsMainContactUs.length}`\r\n // );\r\n\r\n return (\r\n
\r\n {/*
Hello
\r\n
\r\n
\r\n Bye1\r\n
\r\n
\r\n Bye2\r\n
\r\n
\r\n Bye3\r\n
\r\n
\r\n Bye4\r\n
\r\n
*/}\r\n {/* *** Babak's Notes: Below is the make up of above *** */}\r\n\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"MD\" ? (\r\n
\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index === 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n
\r\n\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n \r\n ) : mediaAttribute === \"SM\" ? (\r\n
\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index === 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n
\r\n\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n \r\n ) : mediaAttribute === \"XS\" ? (\r\n
\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index === 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n
\r\n\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n \r\n ) : (\r\n \"\"\r\n )}\r\n\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainContactUs.map((item, index) =>\r\n index === 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n // \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMainContactUs;\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/homeBillboards\";\r\n// const apiEndpointHomeBillboardsMain = apiUrl + \"/homeBillboards/main\";\r\n\r\nconst apiEndpointHomeBillboardChildsMains = \"/homeBillboardChildsMains\";\r\n\r\nfunction HomeBillboardChildsMainsUrl(id) {\r\n return `${apiEndpointHomeBillboardChildsMains}/main/${id}`;\r\n}\r\n\r\nexport function getHomeBillboardChildsMains(homeBillboardID) {\r\n //console.log(\"getHomeBillboardChildsMains : \", HomeBillboardChildsMainsUrl(homeBillboardID));\r\n\r\n return http.get(HomeBillboardChildsMainsUrl(homeBillboardID));\r\n}\r\n","import React, { Component } from \"react\";\r\nimport {\r\n GoogleMap,\r\n withScriptjs,\r\n withGoogleMap,\r\n Marker\r\n} from \"react-google-maps\";\r\n\r\nlet lat; // = 45.383321536272049;\r\nlet lng; // = -75.3372987731628;\r\n\r\nfunction Map() {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nclass GoogleMaps extends Component {\r\n //\r\n // https://elfsight.com/blog/2018/06/how-to-get-google-maps-api-key-guide/\r\n\r\n render() {\r\n const customizationSingleRow = this.props.customizationSingleRow;\r\n\r\n // window.alert(\r\n // `api key : ${process.env.REACT_APP_GOOGLE_API_KEY} -- ${process.env.REACT_APP_API_URL}`\r\n // );\r\n // window.alert(`api key : ${customizationSingleRow.A_GoogleKey}`);\r\n\r\n lat = customizationSingleRow.F_Lat;\r\n lng = customizationSingleRow.F_Lng;\r\n\r\n const WrapperMap = withScriptjs(withGoogleMap(Map));\r\n\r\n return (\r\n
\r\n }\r\n containerElement={
}\r\n mapElement={
}\r\n />\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default GoogleMaps;\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport RenderHomeBillboardChildsMainContactUs from \"./renderHomeBillboardChildsMainContactUs\";\r\n//import slideInLeft from \"react-animations/lib/slide-in-left\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMainContactUs\";\r\nimport GoogleMaps from \"../googleMaps/googleMaps\";\r\nimport LazyLoad from \"react-lazy-load\";\r\n\r\nclass HomeBillboardChildsMainContactUs extends Component {\r\n state = {\r\n homeBillboardChildsMainContactUs: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMainContactUs\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({ homeBillboardChildsMainContactUs });\r\n }\r\n\r\n render() {\r\n const mainView = this.props.mainView;\r\n const identifier = this.props.identifier;\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n const imageParent = this.props.imageParent;\r\n const urlLinkParent = this.props.urlLinkParent;\r\n const customizationSingleRow = this.props.customizationSingleRow;\r\n const googleMapHomeBiilboard = this.props.googleMapHomeBiilboard;\r\n\r\n const { homeBillboardChildsMainContactUs } = this.state;\r\n // const { length: count } = this.state.homeBillboardChildsMainContactUs;\r\n // window.alert(`Number of rows : ${count}`);\r\n // if (count === 0) return
;\r\n\r\n // window.alert(`Number of rows : ${reference}`);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n {/*
*/}\r\n \r\n {/*
*/}\r\n
\r\n
\r\n\r\n {customizationSingleRow.B_GoogleMap && googleMapHomeBiilboard ? (\r\n
\r\n {/*
\r\n
*/}\r\n \r\n {/*
\r\n
*/}\r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n
\r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n {/*
\r\n
top row
\r\n
\r\n
\r\n
\r\n top row2\r\n
\r\n
\r\n bottom row2\r\n
\r\n
\r\n top row3\r\n
\r\n
\r\n bottom row3\r\n
\r\n
*/}\r\n
\r\n
\r\n\r\n {customizationSingleRow.B_GoogleMap && googleMapHomeBiilboard ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n\r\n {customizationSingleRow.B_GoogleMap && googleMapHomeBiilboard ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n\r\n {customizationSingleRow.B_GoogleMap && googleMapHomeBiilboard ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMainContactUs;\r\n","import React, { Component, Suspense } from \"react\";\r\nimport { loadHomeBillboardsMainsContactUs } from \"../../store/homeBillboardsMainsContactUs\";\r\nimport HomeBillboardChildsMainContactUs from \"./homeBillboardChildsMainContactUs\";\r\nimport NavBarFooter from \"../navBarFooter\";\r\nimport { connect } from \"react-redux\";\r\n// import LazyLoad from \"react-lazy-load\";\r\n// import {\r\n// fadeIn,\r\n// fadeInUp,\r\n// bounce,\r\n// flipInX,\r\n// flipInY,\r\n// rubberBand,\r\n// shake,\r\n// rotateInUpRight,\r\n// rotateInUpLeft,\r\n// slideInUp\r\n// } from \"react-animations\";\r\n// import Radium, { StyleRoot } from \"radium\";\r\nimport ScrollUpButton from \"react-scroll-up-button\";\r\n\r\nclass ContactUs extends Component {\r\n state = {\r\n data: {\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n I_Image: \"\"\r\n }\r\n };\r\n\r\n async populateHomeBillboardsMains() {\r\n // window.alert(\r\n // `ContactUs componentDidMount : ${this.props.customizationSingleRow.N_ContactUsNo}`\r\n // );\r\n\r\n await this.props.loadHomeBillboardsMainsContactUs(\r\n this.props.customizationSingleRow.N_ContactUsNo\r\n );\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateHomeBillboardsMains();\r\n }\r\n\r\n // async componentWillReceiveProps(nextProps) {\r\n // // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n // let data = { ...this.state.data };\r\n\r\n // // if (this.state.data !== nextProps.menu) {\r\n\r\n // data[\"A_Reference\"] = nextProps.menus.A_Reference;\r\n // data[\"A_Summary\"] = nextProps.menus.A_Summary;\r\n // data[\"I_Image\"] = nextProps.menus.I_Image;\r\n\r\n // this.setState({\r\n // data\r\n // });\r\n // // }\r\n // }\r\n\r\n // async mapToViewModel(billboardLarge) {\r\n // //console.log(\"mapToViewModel-1\", billboardLarge);\r\n // return {\r\n // A_Reference: billboardLarge.A_Reference,\r\n // A_Summary: billboardLarge.A_Summary,\r\n // I_Image: billboardLarge.I_Image\r\n // };\r\n // }\r\n\r\n renderBillboardData = ({ item }) => {\r\n // console.log(\"renderBillboardData 01 : \", item, rowCount);\r\n\r\n // let sectionStyleTop;\r\n let sectionStyle, sectionStyleMD, sectionStyleSM, sectionStyleXS;\r\n // let sectionStyleBottom;\r\n\r\n // const styles = {\r\n // bounce: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(bounce, \"bounce\")\r\n // },\r\n // fadeIn: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(fadeIn, \"fadeIn\")\r\n // },\r\n // fadeInUp01: {\r\n // animation: \"y 1s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n // },\r\n // fadeInUp02: {\r\n // animation: \"y 2s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp02\")\r\n // },\r\n // fadeInUp03: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp03\")\r\n // },\r\n // fadeInUp04: {\r\n // animation: \"y 4s\",\r\n // animationName: Radium.keyframes(fadeInUp, \"fadeInUp04\")\r\n // },\r\n // flipInX: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInX, \"flipInX\")\r\n // },\r\n // flipInY: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(flipInY, \"flipInY\")\r\n // },\r\n // rubberBand: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rubberBand, \"rubberBand\")\r\n // },\r\n // shake: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(shake, \"shake\")\r\n // },\r\n // rotateInUpRight: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpRight, \"rotateInUpRight\")\r\n // },\r\n // rotateInUpLeft: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(rotateInUpLeft, \"rotateInUpLeft\")\r\n // },\r\n // slideInUp01: {\r\n // animation: \"y 3s\",\r\n // animationName: Radium.keyframes(slideInUp, fadeIn, \"slideInUp01\")\r\n // },\r\n // slideInUp02: {\r\n // animation: \"y 5s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // },\r\n // slideInUp03: {\r\n // animation: \"y 8s\",\r\n // animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n // }\r\n // };\r\n\r\n // document.body.style.backgroundImage = `url(${item.I_Image})`;\r\n // document.body.style.backgroundRepeat = \"no-repeat\";\r\n // document.body.style.backgroundSize = \"cover\";\r\n\r\n if (item.N_RadioGrpDirections_ID === 6) {\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"1150px\",\r\n backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n }\r\n\r\n // let sectionStyleSmallerLg;\r\n // sectionStyleSmallerLg = {\r\n // height: \"50vh\",\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // Babak's Notes: Commented out on 20200115: START\r\n return (\r\n //
\r\n
\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const { data } = this.state;\r\n // const { billboardLargesGroup } = this.props.groups;\r\n\r\n // let sectionStyle;\r\n\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundImage: `url(${data.I_Image})`,\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // console.log(\r\n // \"DetailsGroup render, Number of billboardLargesGroup: \",\r\n // this.props.match.params.id,\r\n // data,\r\n // this.props.groups,\r\n // this.props.groups.length\r\n // );\r\n\r\n if (this.props.homeBillboardsMainsContactUs.length === 0)\r\n return
;\r\n\r\n return (\r\n
\r\n
\r\n {this.props.homeBillboardsMainsContactUs.map((item, index) => (\r\n \r\n ))}\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n homeBillboardsMainsContactUs: state.entities.homeBillboardsMainsContactUs.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboardsMainsContactUs: orderNo =>\r\n dispatch(loadHomeBillboardsMainsContactUs(orderNo))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ContactUs);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"roles\",\r\n initialState: {\r\n list: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'rolesRequested' or 'rolesReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'roles' below represents the 'state':-\r\n rolesRequested: (roles, action) => {\r\n console.log(\"rolesRequested : \", action.payload);\r\n roles.loading = true;\r\n },\r\n rolesReceived: (roles, action) => {\r\n console.log(\"rolesReceived : \", action.payload);\r\n roles.list = action.payload;\r\n roles.loading = false;\r\n roles.lastFetch = Date.now();\r\n },\r\n rolesRequestedFailed: (roles, action) => {\r\n roles.loading = false;\r\n // window.alert(`No Roles found.`);\r\n },\r\n roleRequested: (role, action) => {\r\n console.log(\"roleRequested : \", action.payload);\r\n role.loading = true;\r\n },\r\n roleReceived: (role, action) => {\r\n console.log(\"roleReceived : \", action.payload);\r\n role.list = action.payload;\r\n role.loading = false;\r\n role.lastFetch = Date.now();\r\n },\r\n roleRequestedFailed: (role, action) => {\r\n role.loading = false;\r\n // window.alert(`No Role found.`);\r\n },\r\n roleChangeRequested: (role, action) => {\r\n console.log(\"roleChangeRequested : \", action.payload);\r\n role.loading = true;\r\n },\r\n roleChangeFailed: (role, action) => {\r\n role.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete role api at the back end.\r\n // const { ID: roleId, A_Name: roleName } = action.payload;\r\n\r\n // window.alert(`Role '${roleName}' no longer exists.`);\r\n\r\n // const index = role.list.findIndex(role => role.ID === roleId);\r\n // //console.log(\"roleDeleted ha \", index);\r\n // role.list.splice(index, 1);\r\n },\r\n roleChanged: (role, action) => {\r\n role.loading = false;\r\n },\r\n roleDeleteRequested: (role, action) => {\r\n console.log(\"roleDeleteRequested : \", action.payload);\r\n role.loading = true;\r\n },\r\n roleDeleteFailed: (roles, action) => {\r\n roles.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete role api at the back end.\r\n const { ID: roleId, A_Name: roleName } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with role '${roleName}'. ${action.payload}`\r\n );\r\n\r\n const index = roles.list.findIndex(role => role.ID === roleId);\r\n //console.log(\"roleDeleted ha \", index);\r\n roles.list.splice(index, 1);\r\n },\r\n roleDeleted: (roles, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete role api at the back end.\r\n const { ID: roleID } = action.payload;\r\n // console.log(\"roleDeleted ha \", action.payload, roleID, roles);\r\n const index = roles.list.findIndex(role => role.ID === roleID);\r\n //console.log(\"roleDeleted, ha! ha! \", index);\r\n roles.list.splice(index, 1);\r\n },\r\n roleAddRequested: (role, action) => {\r\n console.log(\"roleAddRequested : \", action.payload);\r\n role.loading = true;\r\n },\r\n roleAddFailed: (role, action) => {\r\n role.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'roles' below represents the 'state':-\r\n roleAdded: (roles, action) => {\r\n console.log(\"roleAdded : \", action.payload);\r\n roles.list.push(action.payload);\r\n }\r\n // roleAdded: (roles, action) => {\r\n // roles.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // roleDeleted: (roles, action) => {\r\n // console.log(\"roleDeleted ha \", action.payload.ID);\r\n // roles.list.filter(role => role.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n roleAddRequested,\r\n roleAdded,\r\n roleAddFailed,\r\n roleChangeRequested,\r\n roleChanged,\r\n roleChangeFailed,\r\n roleDeleteRequested,\r\n roleDeleted,\r\n roleDeleteFailed,\r\n rolesReceived,\r\n rolesRequested,\r\n rolesRequestedFailed,\r\n roleReceived,\r\n roleRequested,\r\n roleRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/roles\";\r\n\r\nexport const loadRoles = () => (dispatch, getState) => {\r\n const { lastFetch } = getState().entities.roles;\r\n\r\n console.log(\"loadRoles lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: rolesRequested.type,\r\n method: \"get\",\r\n onSuccess: rolesReceived.type,\r\n onError: rolesRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadRole = roleID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.roles;\r\n\r\n //console.log(\"loadRole : \", roleID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + roleID,\r\n onStart: roleRequested.type,\r\n method: \"get\",\r\n onSuccess: roleReceived.type,\r\n onError: roleRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addRole':-\r\nexport const addRole = role =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: roleAddRequested.type,\r\n data: role,\r\n onSuccess: roleAdded.type,\r\n onError: roleAddFailed.type\r\n });\r\n\r\nexport const getRoles = createSelector(\r\n state => state.entities.roles,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (roles, projects) has not changed then do not requery again:-\r\n // (roles) => roles.list.filter(role => !role.B_Active)\r\n roles => roles.list\r\n);\r\n\r\nexport const changeRole = role =>\r\n apiCallBegan({\r\n url: url + \"/\" + role.ID,\r\n method: \"put\",\r\n onStart: roleChangeRequested.type,\r\n data: {\r\n A_Name: role.A_Name,\r\n A_Description: role.A_Description,\r\n A_Discriminator: role.A_Discriminator\r\n },\r\n onSuccess: roleChanged.type,\r\n onError: roleChangeFailed.type\r\n });\r\n\r\nexport const deleteRole = role =>\r\n apiCallBegan({\r\n url: url + \"/\" + role.ID,\r\n method: \"delete\",\r\n onStart: roleDeleteRequested.type,\r\n data: { ID: role.ID, A_Name: role.A_Name },\r\n onSuccess: roleDeleted.type,\r\n onError: roleDeleteFailed.type\r\n });\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport { loadRole, addRole, changeRole } from \"../../store/roles\";\r\nimport { connect } from \"react-redux\";\r\n\r\nclass RoleForm extends Form {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n data: {\r\n ID: \"\",\r\n A_Name: \"\",\r\n A_Description: \"\",\r\n A_Discriminator: \"\"\r\n },\r\n errors: {}\r\n };\r\n }\r\n\r\n schemaCreate = {\r\n ID: Joi.string()\r\n .allow(\"\")\r\n .optional(),\r\n A_Name: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(10)\r\n .label(\"Role\"),\r\n A_Description: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(15)\r\n .label(\"Description\"),\r\n A_Discriminator: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(15)\r\n .label(\"Discriminator\")\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.string(),\r\n A_Name: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(10)\r\n .label(\"Role\"),\r\n A_Description: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(15)\r\n .label(\"Description\"),\r\n A_Discriminator: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(15)\r\n .label(\"Discriminator\")\r\n };\r\n\r\n // async populateRoles() {\r\n // try {\r\n // console.log(\"populateRoles - 1 : \", this.props.role);\r\n\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 404)\r\n // this.props.history.replace(\"/not-found\");\r\n // }\r\n // }\r\n\r\n componentDidMount() {\r\n console.log(\"RoleForm, componentDidMount\");\r\n\r\n const roleId = this.props.match.params.id;\r\n if (roleId === \"new\") return;\r\n\r\n // const { data: role } = await getRole(roleId);\r\n // this.setState({ data: this.mapToViewModel(role) });\r\n this.props.loadRole(roleId);\r\n\r\n //\r\n // Babak's Notes: 'componentDidMount' will not update 'this.props', we have to wait until we reach 'componentWillReceiveProps' or 'getDerivedStateFromProps'.\r\n // 'componentWillReceiveProps' should be replace by renwer version 'getDerivedStateFromProps'.\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n console.log(\"RoleForm, componentWillReceiveProps\", nextProps.role);\r\n\r\n //\r\n // Babak's Note: 'componentWillReceiveProps' is ran after Redux store is updated, therefore 'this.props' is updated which passes values via param 'nextProps':-\r\n // 'componentWillReceiveProps' alos runs after 'componentDidMount'. 'componentDidMount' will not update 'this.props', we have to wait until\r\n // we reach 'componentWillReceiveProps'.\r\n if (this.state.data !== nextProps.role) {\r\n this.setState({ data: await this.mapToViewModel(nextProps.role) });\r\n }\r\n }\r\n\r\n // static getDerivedStateFromProps(props, state) {\r\n // //\r\n // // Babak's Notes: DO NOT USE 'async' on 'getDerivedStateFromProps'.\r\n // if (props.role !== state.data) {\r\n // // window.alert(\"Hello : \");\r\n // console.log(\"RoleForm, getDerivedStateFromProps\", props.role, state.data);\r\n // return {\r\n // data: {\r\n // ID: props.role.ID,\r\n // A_Name: props.role.A_Name,\r\n // A_Description: props.role.A_Description,\r\n // A_Discriminator: props.role.A_Discriminator\r\n // }\r\n // };\r\n // }\r\n // // Return null to indicate no change to state.\r\n // return null;\r\n // }\r\n\r\n mapToViewModel(role) {\r\n //console.log(\"mapToViewModel-1\", role);\r\n return {\r\n ID: role.ID,\r\n A_Name: role.A_Name,\r\n A_Description: role.A_Description,\r\n A_Discriminator: role.A_Discriminator\r\n };\r\n }\r\n\r\n doSubmit = async () => {\r\n // await saveRole(this.state.data);\r\n // this.props.history.push(\"/roles\");\r\n\r\n // console.log(\"RoleForm, doSubmit : \", this.state.data);\r\n\r\n try {\r\n const roleId = this.props.match.params.id;\r\n if (roleId === \"new\") await this.props.addRole(this.state.data);\r\n else await this.props.changeRole(this.state.data);\r\n // await saveRole(this.state.data);\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.title = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n // this.props.history.push(\"/rolesList\");\r\n //\r\n // Babak's Note: Use below rather than above:-\r\n this.props.history.goBack();\r\n };\r\n\r\n render() {\r\n console.log(\"RoleForm render\", this.props.role, this.state.data);\r\n return (\r\n \r\n

Role Form

\r\n
\r\n {/* */}\r\n {this.renderInput(\"A_Name\", \"Role\")}\r\n {this.renderInput(\"A_Description\", \"Description\")}\r\n {this.renderInput(\"A_Discriminator\", \"Discriminator\")}\r\n {this.renderButton(\"Save\")}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // roles: state.entities.roles.list.filter(role => !role.resolved)\r\n //\r\n // Babak's Note: Below line should change from '.list' to '.listSingleRow' and added to 'store' of 'roles' 'initialState':-\r\n role: state.entities.roles.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadRole: id => dispatch(loadRole(id)),\r\n addRole: role => dispatch(addRole(role)),\r\n changeRole: role => dispatch(changeRole(role))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Roles)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.roles' and 'this.props.loadRoles()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(RoleForm);\r\n","import React, { Component } from \"react\";\r\n// import auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\n\r\nclass RolesTable extends Component {\r\n //\r\n // Babak's Note: A template litaral is (including ``) : `/roles/${role.id}`\r\n // Argument is : ${role.id}\r\n //\r\n // Babal's Note: Below are the columns in the home page 'roles'. The 'Title' column is rendered dynamically\r\n // in order so we link it to another componet (another words a page), in this case 'roleForm'.\r\n // Path is the database column name.\r\n columns = [\r\n {\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n },\r\n { path: \"A_Name\", label: \"Role\", type: \"text\" },\r\n { path: \"A_Description\", label: \"Description\", type: \"text\" },\r\n { path: \"A_Discriminator\", label: \"Discriminator\", type: \"text\" }\r\n ];\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: role => (\r\n this.props.onUpdate(role)}\r\n className=\"btn btn-info btn-sm pull-right\"\r\n >\r\n Update\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: role => (\r\n {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete role '${role.A_Name}'?`\r\n )\r\n ) {\r\n this.props.onDelete(role);\r\n }\r\n }}\r\n className=\"btn btn-danger btn-sm\"\r\n >\r\n Delete\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n }\r\n // //\r\n // // Babak's Note: Below we add a condition that the user must be logged in and have an admin role in order to see\r\n // // the 'delete' button:-\r\n // constructor() {\r\n // super();\r\n // const user = auth.getCurrentUser();\r\n // if (user && user.isAdmin) this.columns.push(this.deleteColumn);\r\n // }\r\n\r\n render() {\r\n const { rolesList, onSort, sortColumn } = this.props;\r\n // const { rolesList } = this.props;\r\n // console.log(\"render rolesTable : \", rolesList);\r\n return (\r\n \r\n );\r\n }\r\n}\r\nexport default RolesTable;\r\n","import React, { Component } from \"react\";\r\n// import StoreContext from \"../contexts/storeContext\";\r\nimport { Link } from \"react-router-dom\";\r\n// import { Redirect } from \"react-router\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { loadRoles, getRoles, deleteRole } from \"../../store/roles\";\r\nimport RolesTable from \"./rolesTable\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\nimport { connect } from \"react-redux\";\r\n\r\n// **********\r\n// ********** I USE THIS FORM, I DONT NOT USE 'Roles' **********\r\n// **********\r\n\r\nclass RolesList extends Component {\r\n // static contextType = StoreContext;\r\n\r\n state = {\r\n // RoleForm: false,\r\n roleID: 0,\r\n rolesList: [],\r\n currentPage: 1,\r\n pageSize: 2,\r\n searchQuery: \"\",\r\n sortColumn: { path: \"A_Name\", order: \"asc\" }\r\n };\r\n\r\n componentDidMount() {\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n this.props.loadRoles();\r\n\r\n console.log(\"RolesList, componentDidMount : \");\r\n }\r\n\r\n // componentWillUnmount() {\r\n // this.unsubscribe();\r\n // }\r\n\r\n handleUpdate = async role => {\r\n //console.log(\"RolesList, handleUpdate : \", role.ID);\r\n\r\n //\r\n // Babak's Notes: 'Redirect' does not work for some reason (back to prev screen browser arrow key), no time to investifate for now:-\r\n // this.setState({ RoleForm: true, roleID: role.ID });\r\n\r\n try {\r\n window.location = `/rolesList/${role.ID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n //console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n console.log(\"RolesList, getPageData : \", this.props.roles);\r\n\r\n const allRoles = this.props.roles;\r\n\r\n let filtered = allRoles;\r\n if (searchQuery)\r\n filtered = allRoles.filter(m =>\r\n m.A_Name.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const roles = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: roles };\r\n };\r\n\r\n render() {\r\n console.log(\"RolesList, render() : \", this.props.roles);\r\n\r\n // if (this.state.RoleForm === true) {\r\n // //console.log(\"RolesList, render(), Redirect : \", this.state.roleID);\r\n // return ;\r\n // }\r\n\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'roles'\r\n const { totalCount, data: rolesList } = this.getPagedData();\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Roles

\r\n
\r\n \r\n New Role\r\n \r\n

Showing {totalCount} roles in the database.

\r\n \r\n this.props.deleteRole(role)}\r\n onUpdate={this.handleUpdate}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.roles.list.filter(bug => !bug.resolved)\r\n roles: state.entities.roles.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadRoles: () => dispatch(loadRoles()),\r\n deleteRole: id => dispatch(deleteRole(id))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(RolesList);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\n// **********\r\n// ********** I DO NOT USE THIS FORM, INSTEAD I USE 'UsersList' **********\r\n// **********\r\n\r\nconst slice = createSlice({\r\n name: \"users\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n loading: false,\r\n lastFetch: null,\r\n userSuccess: false,\r\n userError: \"\"\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'usersRequested' or 'usersReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'users' below represents the 'state':-\r\n usersRequested: (users, action) => {\r\n console.log(\"usersRequested : \", action.payload);\r\n users.userError = \"\";\r\n // users.userSuccess = false;\r\n users.loading = true;\r\n },\r\n usersReceived: (users, action) => {\r\n console.log(\"usersReceived : \", action.payload);\r\n users.list = action.payload;\r\n users.loading = false;\r\n users.lastFetch = Date.now();\r\n },\r\n usersRequestedFailed: (users, action) => {\r\n users.loading = false;\r\n users.userError = action.payload;\r\n // window.alert(`No users found.`);\r\n },\r\n userRequested: (users, action) => {\r\n console.log(\"userRequested : \", action.payload);\r\n // users.userSuccess = false;\r\n users.loading = true;\r\n },\r\n userReceived: (user, action) => {\r\n console.log(\"userReceived : \", action.payload);\r\n user.listSingleRow = action.payload;\r\n user.loading = false;\r\n user.lastFetch = Date.now();\r\n },\r\n userRequestedFailed: (user, action) => {\r\n user.loading = false;\r\n // window.alert(`No user found.`);\r\n },\r\n userChangeRequested: (users, action) => {\r\n console.log(\"userChangeRequested : \", action.payload);\r\n // users.userSuccess = false;\r\n users.loading = true;\r\n },\r\n userChangeFailed: (user, action) => {\r\n user.userError = action.payload;\r\n user.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete user api at the back end.\r\n // const { ID: userId, A_Name: userName } = action.payload;\r\n\r\n // window.alert(`user '${userName}' no longer exists.`);\r\n\r\n // const index = user.list.findIndex(user => user.ID === userId);\r\n // //console.log(\"userDeleted ha \", index);\r\n // user.list.splice(index, 1);\r\n },\r\n userChanged: (user, action) => {\r\n console.log(\"userChanged : \", action.payload);\r\n //\r\n // Babak's Note: Below line must be added here, look at 'componentWillReceiveProps' in 'userForm'\r\n // \"} else if (nextProps.userSuccess)\r\n // { this.props.history.goBack();\":-\r\n user.userSuccess = true;\r\n user.loading = false;\r\n },\r\n userDeleteRequested: (users, action) => {\r\n console.log(\"userDeleteRequested : \", action.payload);\r\n // users.userSuccess = false;\r\n users.loading = true;\r\n },\r\n userDeleteFailed: (users, action) => {\r\n users.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete user api at the back end.\r\n const { ID: userId, A_Name: userName } = action.payload;\r\n\r\n // window.alert(`user '${userName}' no longer exists.`);\r\n\r\n const index = users.list.findIndex(user => user.ID === userId);\r\n //console.log(\"userDeleted ha \", index);\r\n users.list.splice(index, 1);\r\n },\r\n userDeleted: (users, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete user api at the back end.\r\n const { ID: userID } = action.payload;\r\n // console.log(\"userDeleted ha \", action.payload, userID, users);\r\n const index = users.list.findIndex(user => user.ID === userID);\r\n //console.log(\"userDeleted ha \", index);\r\n users.list.splice(index, 1);\r\n },\r\n userAddRequested: (users, action) => {\r\n console.log(\"userAddRequested : \", action.payload);\r\n users.userError = \"\";\r\n users.userSuccess = false;\r\n users.loading = true;\r\n },\r\n userAddFailed: (users, action) => {\r\n users.userError = action.payload;\r\n users.loading = false;\r\n // window.alert(`No Userrrr found : ${action.payload}`);\r\n },\r\n //\r\n // Babak's Note: The 'users' below represents the 'state':-\r\n userAdded: (users, action) => {\r\n console.log(\"userAdded : \", action.payload);\r\n users.list.push(action.payload);\r\n users.userSuccess = true;\r\n users.loading = false;\r\n },\r\n // userAdded: (users, action) => {\r\n // users.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // userDeleted: (users, action) => {\r\n // console.log(\"userDeleted ha \", action.payload.ID);\r\n // users.list.filter(user => user.ID !== action.payload.ID);\r\n // },\r\n userActivated: (users, action) => {\r\n console.log(\"userActivated : \", action.payload);\r\n const index = users.list.findIndex(user => user.ID === action.payload.ID);\r\n users.list[index].B_Active = true;\r\n }\r\n }\r\n});\r\nconst {\r\n userAddRequested,\r\n userAdded,\r\n userAddFailed,\r\n userChangeRequested,\r\n userChanged,\r\n userChangeFailed,\r\n userDeleteRequested,\r\n userDeleted,\r\n userDeleteFailed,\r\n userActivated,\r\n usersReceived,\r\n usersRequested,\r\n usersRequestedFailed,\r\n userReceived,\r\n userRequested,\r\n userRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/users\";\r\n\r\nexport const loadUsers = () => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.users;\r\n\r\n // console.log(\"loadUsers lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: usersRequested.type,\r\n method: \"get\",\r\n onSuccess: usersReceived.type,\r\n onError: usersRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadUser = userID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.users;\r\n\r\n //console.log(\"loadUser : \", userID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + userID,\r\n onStart: userRequested.type,\r\n method: \"get\",\r\n onSuccess: userReceived.type,\r\n onError: userRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'adduser':-\r\nexport const addUser = user =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: userAddRequested.type,\r\n data: user,\r\n // data: {\r\n // ID: user.ID,\r\n // A_RolesID: user.A_RolesID,\r\n // A_Email: user.A_Email,\r\n // A_Password: user.A_Password,\r\n // A_Name: user.A_Name,\r\n // N_Mobile: user.N_Mobile,\r\n // B_Active: user.B_Active,\r\n // I_Photo01: user.I_Photo01\r\n // },\r\n onSuccess: userAdded.type,\r\n onError: userAddFailed.type\r\n });\r\n\r\nexport const getUsers = createSelector(\r\n state => state.entities.users,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (users, projects) has not changed then do not requery again:-\r\n // (users) => users.list.filter(user => !user.B_Active)\r\n users => users.list\r\n);\r\n\r\nexport const changeUser = user =>\r\n apiCallBegan({\r\n url: url + \"/\" + user.ID,\r\n method: \"put\",\r\n onStart: userChangeRequested.type,\r\n data: {\r\n // ID: user.ID,\r\n A_RolesID: user.A_RolesID,\r\n A_Email: user.A_Email,\r\n A_Password: user.A_Password,\r\n A_Name: user.A_Name,\r\n N_Mobile: user.N_Mobile,\r\n B_Active: user.B_Active,\r\n I_Photo01: user.I_Photo01\r\n },\r\n onSuccess: userChanged.type,\r\n onError: userChangeFailed.type\r\n });\r\n\r\nexport const deleteUser = user =>\r\n apiCallBegan({\r\n url: url + \"/\" + user.ID,\r\n method: \"delete\",\r\n onStart: userDeleteRequested.type,\r\n data: { ID: user.ID, A_Name: user.A_Name },\r\n onSuccess: userDeleted.type,\r\n onError: userDeleteFailed.type\r\n });\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport { loadUser, addUser, changeUser } from \"../../store/users\";\r\nimport { loadRoles } from \"../../store/roles\";\r\nimport { connect } from \"react-redux\";\r\n\r\nclass UserForm extends Form {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n data: {\r\n //\r\n // Babak's Note: I can set default values here as like below line:-\r\n // A_Email: \"dingdong\",\r\n // Also we are in a nested state\r\n A_Email: \"\",\r\n A_RolesID: \"\",\r\n A_Password: \"\",\r\n A_Name: \"\",\r\n N_Mobile: \"\",\r\n passwordConfirm: \"\",\r\n B_Active: true,\r\n I_Photo01: \"\",\r\n waitingForFileUpload: false,\r\n isPasswordVisible: true\r\n },\r\n roles: [],\r\n errors: {},\r\n type: \"input\",\r\n score: \"null\"\r\n };\r\n this.showHide = this.showHide.bind(this);\r\n this.passwordStrength = this.passwordStrength.bind(this);\r\n }\r\n\r\n schemaCreate = {\r\n ID: Joi.string(),\r\n A_RolesID: Joi.string()\r\n .required()\r\n .label(\"Role\"),\r\n A_Email: Joi.string()\r\n .required()\r\n .email()\r\n .label(\"Email\"),\r\n A_Password: Joi.string()\r\n .required()\r\n .min(4)\r\n .label(\"Password\"),\r\n passwordConfirm: Joi.string()\r\n .required()\r\n .min(4)\r\n .label(\"Password Confirm\"),\r\n A_Name: Joi.string()\r\n .required()\r\n .label(\"Name\"),\r\n N_Mobile: Joi.number()\r\n .required()\r\n .label(\"Mobile\")\r\n .min(11),\r\n B_Active: Joi.boolean().label(\"Active\"),\r\n I_Photo01: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n .optional(),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n isPasswordVisible: Joi.boolean().optional()\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.string(),\r\n A_RolesID: Joi.string()\r\n .required()\r\n .label(\"Role\"),\r\n A_Email: Joi.string()\r\n .required()\r\n .email()\r\n .label(\"Email\"),\r\n A_Password: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .min(4)\r\n .label(\"Password\"),\r\n passwordConfirm: Joi.string()\r\n .min(4)\r\n .label(\"Password Confirm\"),\r\n A_Name: Joi.string()\r\n .required()\r\n .label(\"Name\"),\r\n N_Mobile: Joi.number()\r\n .required()\r\n .label(\"Mobile\")\r\n .min(11),\r\n B_Active: Joi.boolean().label(\"Active\"),\r\n I_Photo01: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n .optional(),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional()\r\n // .required()\r\n };\r\n\r\n // async populateRoles() {\r\n // const { data: roles } = await getRoles();\r\n // this.setState({ roles });\r\n // }\r\n\r\n // async populateUsers() {\r\n // //console.log(\"populateUsers-1\");\r\n // try {\r\n // const userId = this.props.match.params.id;\r\n // if (userId === \"new\") return;\r\n\r\n // const { data: user } = await getUser(userId);\r\n // this.setState({ data: this.mapToViewModel(user) });\r\n // //console.log(\"populateUsers-2\", this.mapToViewModel(user));\r\n // //this.setState({ data: user });\r\n // //console.log(\"populateUsers-2\", this.state.data);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 404)\r\n // this.props.history.replace(\"/not-found\");\r\n // }\r\n // }\r\n\r\n // async componentDidMount() {\r\n // this.setState({ hidden: true });\r\n // //console.log(\"SubmicomponentDidMounttted\");\r\n // await this.populateRoles();\r\n // await this.populateUsers();\r\n // }\r\n\r\n componentDidMount() {\r\n const userId = this.props.match.params.id;\r\n console.log(\"UserForm, componentDidMount : \", userId);\r\n\r\n if (userId === \"new\") {\r\n this.props.loadRoles();\r\n return;\r\n }\r\n\r\n // const { data: user } = await getuser(userId);\r\n // this.setState({ data: this.mapToViewModel(user) });\r\n this.props.loadUser(userId);\r\n this.props.loadRoles();\r\n\r\n //\r\n // Babak's Notes: 'componentDidMount' will not update 'this.props', we have to wait until we reach 'componentWillReceiveProps' or 'getDerivedStateFromProps'.\r\n // 'componentWillReceiveProps' should be replace by renwer version 'getDerivedStateFromProps'.\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n console.log(\"UserForm, componentWillReceiveProps\", nextProps.userSuccess);\r\n //\r\n // Babak's Note: 'componentWillReceiveProps' is ran after Redux store is updated, therefore 'this.props' is updated which passes values via param 'nextProps':-\r\n // 'componentWillReceiveProps' alos runs after 'componentDidMount'. 'componentDidMount' will not update 'this.props', we have to wait until\r\n // we reach 'componentWillReceiveProps'.\r\n // window.alert(`No Userrrr found : ${nextProps.userError}`);\r\n if (nextProps.userError) {\r\n // this.setState({ errors: nextProps.userError });\r\n const errors = { ...this.state.data };\r\n // console.log(\r\n // \"componentWillReceiveProps 2 : \",\r\n // nextProps.A_Email,\r\n // errors,\r\n // this.state.errors.username\r\n // );\r\n errors.A_Email = nextProps.userError;\r\n // console.log(\r\n // \"componentWillReceiveProps 3 : \",\r\n // nextProps.userError,\r\n // errors,\r\n // this.state.errors.username\r\n // );\r\n this.setState({ errors });\r\n } else if (nextProps.userSuccess) {\r\n this.props.history.goBack();\r\n } else if (\r\n this.props.match.params.id !== \"new\" &&\r\n this.state.data !== nextProps.user\r\n ) {\r\n // console.log(\"UserForm, componentWillReceiveProps\", nextProps.user);\r\n this.setState({\r\n data: await this.mapToViewModel(nextProps.user),\r\n roles: await nextProps.roles\r\n });\r\n } else if (this.state.roles !== nextProps.roles) {\r\n this.setState({ roles: await nextProps.roles });\r\n }\r\n }\r\n\r\n // static getDerivedStateFromProps(props, state) {\r\n // //\r\n // // Babak's Notes: DO NOT USE 'async' on 'getDerivedStateFromProps'.\r\n // if (props.user !== state.data) {\r\n // // window.alert(\"Hello : \");\r\n // console.log(\"UserForm, getDerivedStateFromProps\", props.user, state.data);\r\n // return {\r\n // data: {\r\n // ID: props.user.ID,\r\n // A_Name: props.user.A_Name,\r\n // A_Description: props.user.A_Description,\r\n // A_Discriminator: props.user.A_Discriminator\r\n // }\r\n // };\r\n // }\r\n // // Return null to indicate no change to state.\r\n // return null;\r\n // }\r\n\r\n mapToViewModel(user) {\r\n console.log(\"mapToViewModel-1\", user);\r\n return {\r\n ID: user.ID,\r\n A_RolesID: user.A_RolesID,\r\n A_Email: user.A_Email,\r\n A_Password: \"\",\r\n A_Name: user.A_Name,\r\n N_Mobile: user.N_Mobile,\r\n B_Active: user.B_Active,\r\n I_Photo01: user.I_Photo01\r\n };\r\n }\r\n\r\n doSubmit = async () => {\r\n // await saveUser(this.state.data);\r\n // this.props.history.push(\"/users\");\r\n\r\n // console.log(\"UserForm, doSubmit : \", this.state.data);\r\n\r\n try {\r\n const userId = this.props.match.params.id;\r\n const { A_Password, passwordConfirm } = this.state.data;\r\n\r\n if (userId === \"new\") {\r\n if (A_Password !== passwordConfirm) {\r\n //alert(\"Passwords don't match\");\r\n const errors = { ...this.state.errors };\r\n errors.passwordConfirm = \"Passwords don't match\";\r\n this.setState({ errors });\r\n } else {\r\n //const response = await saveUser(this.state.data);\r\n await this.props.addUser(this.state.data);\r\n }\r\n } else {\r\n //const response = await saveUser(this.state.data);\r\n await this.props.changeUser(this.state.data);\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.A_Email = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n // this.props.history.push(\"/usersList\");\r\n //\r\n // Babak's Note: Use below rather than above:-\r\n // this.props.history.goBack();\r\n };\r\n\r\n toggleShow = () => {\r\n this.setState({ isPasswordVisible: !this.state.hidden });\r\n console.log(\"toggleShow wwwwwwwwwwwwwwwwwwwwwwww: \", this.state.hidden);\r\n };\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_Photo01\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n render() {\r\n // // Babak's Note: *** Below 3 lines will stop rendering of child component 'TableBodyAppoints' section\r\n // // 'console.log(\"Hello 04 : \");' first *** :-\r\n // const { length: count } = this.state.roles;\r\n // //if (count === 0) return

;\r\n // if (count === 0) return
;\r\n\r\n const userId = this.props.match.params.id;\r\n console.log(\"UserForm render\", this.props.user, this.state.data);\r\n return (\r\n \r\n

User Form

\r\n
\r\n {userId === \"new\"\r\n ? this.renderInputCreateEmail(\"A_Email\", \"Email\", \"email\")\r\n : this.renderInputEditEmail(\"A_Email\", \"Email\", \"email\")}\r\n
\r\n {this.renderPasswordInput(\"A_Password\", \"Password\", \"password\")}\r\n \r\n {this.state.type === \"input\" ? \"Hide\" : \"Show\"}\r\n \r\n \r\n
\r\n {/*
\r\n {this.renderPasswordInput(\"A_Password\", \"Password\", \"password\")}\r\n \r\n this.setState({\r\n isPasswordVisible: !this.state.isPasswordVisible\r\n })\r\n }\r\n >\r\n {this.state.isPasswordVisible ? \"Hide\" : \"Show\"} Password\r\n
\r\n */}\r\n {userId === \"new\"\r\n ? this.renderInputCreatePasswordConfirm(\r\n \"passwordConfirm\",\r\n \"Password Confirm\",\r\n \"password\"\r\n )\r\n : \"\"}\r\n {this.renderInput(\"A_Name\", \"Name\")}\r\n {this.renderSelect(\"A_RolesID\", \"Role\", this.state.roles)}\r\n {this.renderInputCreateMobile(\"N_Mobile\", \"Mobile\")}\r\n {this.renderCheckbox(\"B_Active\", \"Active\")}\r\n {this.renderImageFile(\"I_Photo01\", \"Upload Image\")}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading image file...\r\n
\r\n )}\r\n \r\n {/* */}\r\n
\r\n
\r\n Clear Image\r\n
\r\n
\r\n
\r\n
\r\n
{this.renderButton(\"Submit\")}
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // users: state.entities.users.list.filter(user => !user.resolved)\r\n user: state.entities.users.listSingleRow,\r\n roles: state.entities.roles.list,\r\n userError: state.entities.users.userError,\r\n userSuccess: state.entities.users.userSuccess\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadUser: id => dispatch(loadUser(id)),\r\n loadRoles: () => dispatch(loadRoles()),\r\n addUser: users => dispatch(addUser(users)),\r\n changeUser: user => dispatch(changeUser(user))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Users)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.users' and 'this.props.loadUsers()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(UserForm);\r\n","import React from \"react\";\r\n\r\n// Input: liked: boolean\r\n// Output: onClick\r\n\r\nconst Active = props => {\r\n let classes = \"fa fa-check\";\r\n if (!props.active) classes = \"fa fa-times\";\r\n return (\r\n \r\n );\r\n};\r\n\r\n// class Like extends Component {\r\n// render() {\r\n// let classes = \"fa fa-heart\";\r\n// if (!this.props.liked) classes += \"-o\";\r\n// return (\r\n// \r\n// );\r\n// }\r\n// }\r\n\r\nexport default Active;\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport { Link } from \"react-router-dom\";\r\nimport Active from \"../common/active\";\r\nimport Table from \"../common/table\";\r\n\r\nclass UsersTable extends Component {\r\n // //\r\n // // Babak's Note: A template litaral is (including ``) : `/users/${user.id}`\r\n // // Argument is : ${user.id}\r\n // //\r\n // // Babal's Note: Below are the columns in the home page 'users'. The 'Title' column is rendered dynamically\r\n // // in order so we link it to another componet (another words a page), in this case 'userForm'.\r\n // // Path is the database column name.\r\n // columns = [\r\n // {\r\n // path: \"ID\",\r\n // label: \"Identifier\",\r\n // hidden: true\r\n // },\r\n // { path: \"A_Email\", label: \"Email\" },\r\n // { path: \"A_Name\", label: \"Name\" },\r\n // { path: \"T_Role_A_Name\", label: \"Role\" },\r\n // {\r\n // path: \"B_Active\",\r\n // label: \"Active\",\r\n // content: user => \r\n // }\r\n // ];\r\n columns = [];\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount UsersTable 01 : \");\r\n }\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: user =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(user)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: user =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete user '${user.A_Email}'?`\r\n )\r\n ) {\r\n this.props.onDelete(user);\r\n }\r\n }}\r\n className=\"btn btn-danger btn-sm enabled\"\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n const patientAppointments = [{ ID: 1 }];\r\n\r\n patientAppointments.map(\r\n item => (\r\n this.columns.push({\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Email\",\r\n label: \"Email\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({ path: \"A_Name\", label: \"Name\", type: \"text\" }),\r\n this.columns.push({\r\n path: \"T_Role_A_Name\",\r\n label: \"Role\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"B_Active\",\r\n label: \"Active\",\r\n type: \"text\",\r\n content: user => \r\n })\r\n )\r\n );\r\n\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n // const user = auth.getCurrentUser();\r\n // console.log(\"User details : \", user);\r\n }\r\n // //\r\n // // Babak's Note: Below we add a condition that the user must be logged in and have an admin user in order to see\r\n // // the 'delete' button:-\r\n // constructor() {\r\n // super();\r\n // const user = auth.getCurrentUser();\r\n // if (user && user.isAdmin) this.columns.push(this.deleteColumn);\r\n // }\r\n\r\n render() {\r\n //console.log(\"render usersTable\");\r\n const { usersList, onSort, sortColumn } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\nexport default UsersTable;\r\n","import React, { Component } from \"react\";\r\n// import StoreContext from \"../contexts/storeContext\";\r\nimport { Link } from \"react-router-dom\";\r\n// import { Redirect } from \"react-router\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { loadUsers, getUsers, deleteUser } from \"../../store/users\";\r\nimport UsersTable from \"./usersTable\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\nimport { connect } from \"react-redux\";\r\n\r\n// **********\r\n// ********** I USE THIS FORM, I DONT NOT USE 'Users' **********\r\n// **********\r\n\r\nclass UsersList extends Component {\r\n // static contextType = StoreContext;\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n // UserForm: false,\r\n userID: 0,\r\n usersList: [],\r\n currentPage: 1,\r\n pageSize: 10,\r\n searchQuery: \"\",\r\n sortColumn: { path: \"A_Name\", order: \"asc\" }\r\n };\r\n }\r\n\r\n async componentDidMount() {\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n // window.alert(\"UsersList, componentDidMount : \");\r\n\r\n await this.props.loadUsers();\r\n }\r\n\r\n // componentWillUnmount() {\r\n // this.unsubscribe();\r\n // }\r\n\r\n handleUpdate = async user => {\r\n //console.log(\"UsersList, handleUpdate : \", user.ID);\r\n\r\n //\r\n // Babak's Notes: 'Redirect' does not work for some reason (back to prev screen browser arrow key), no time to investifate for now:-\r\n // this.setState({ UserForm: true, userID: user.ID });\r\n\r\n try {\r\n window.location = `/usersList/${user.ID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n //console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n console.log(\"UsersList, getPageData : \", this.props.users, searchQuery);\r\n\r\n const allUsers = this.props.users;\r\n\r\n let filtered = allUsers;\r\n if (searchQuery)\r\n filtered = allUsers.filter(m =>\r\n m.A_Name.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const users = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: users };\r\n };\r\n\r\n render() {\r\n console.log(\"UsersList, render() : \", this.props.users);\r\n\r\n // if (this.state.UserForm === true) {\r\n // //console.log(\"UsersList, render(), Redirect : \", this.state.userID);\r\n // return ;\r\n // }\r\n\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'users'\r\n const { totalCount, data: usersList } = this.getPagedData();\r\n\r\n const { length: count } = usersList;\r\n console.log(`Hello00000000000000000000 : ${count} : ${usersList}`);\r\n // if (count === 10) return
\"\"
;\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Users

\r\n
\r\n \r\n New User\r\n \r\n

Showing {totalCount} users in the database.

\r\n \r\n this.props.deleteUser(user)}\r\n onUpdate={this.handleUpdate}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.users.list.filter(bug => !bug.resolved)\r\n users: state.entities.users.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadUsers: () => dispatch(loadUsers()),\r\n deleteUser: id => dispatch(deleteUser(id))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(UsersList);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"billboardOrigins\",\r\n initialState: {\r\n list: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'billboardOriginsRequested' or 'billboardOriginsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'billboardOrigins' below represents the 'state':-\r\n billboardOriginsRequested: (billboardOrigins, action) => {\r\n console.log(\"billboardOriginsRequested : \", action.payload);\r\n billboardOrigins.loading = true;\r\n },\r\n billboardOriginsReceived: (billboardOrigins, action) => {\r\n console.log(\"billboardOriginsReceived : \", action.payload);\r\n billboardOrigins.list = action.payload;\r\n billboardOrigins.loading = false;\r\n billboardOrigins.lastFetch = Date.now();\r\n },\r\n billboardOriginsRequestedFailed: (billboardOrigins, action) => {\r\n billboardOrigins.loading = false;\r\n // window.alert(`No BillboardOrigins found.`);\r\n },\r\n billboardOriginRequested: (billboardOrigin, action) => {\r\n console.log(\"billboardOriginRequested : \", action.payload);\r\n billboardOrigin.loading = true;\r\n },\r\n billboardOriginReceived: (billboardOrigin, action) => {\r\n console.log(\"billboardOriginReceived : \", action.payload);\r\n billboardOrigin.list = action.payload;\r\n billboardOrigin.loading = false;\r\n billboardOrigin.lastFetch = Date.now();\r\n },\r\n billboardOriginRequestedFailed: (billboardOrigin, action) => {\r\n billboardOrigin.loading = false;\r\n // window.alert(`No BillboardOrigin found.`);\r\n },\r\n billboardOriginChangeRequested: (billboardOrigin, action) => {\r\n console.log(\"billboardOriginChangeRequested : \", action.payload);\r\n billboardOrigin.loading = true;\r\n },\r\n billboardOriginChangeFailed: (billboardOrigin, action) => {\r\n billboardOrigin.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete billboardOrigin api at the back end.\r\n // const { ID: billboardOriginId, A_Origin: billboardOriginName } = action.payload;\r\n\r\n // window.alert(`BillboardOrigin '${billboardOriginName}' no longer exists.`);\r\n\r\n // const index = billboardOrigin.list.findIndex(billboardOrigin => billboardOrigin.ID === billboardOriginId);\r\n // //console.log(\"billboardOriginDeleted ha \", index);\r\n // billboardOrigin.list.splice(index, 1);\r\n },\r\n billboardOriginChanged: (billboardOrigin, action) => {\r\n billboardOrigin.loading = false;\r\n },\r\n billboardOriginDeleteRequested: (billboardOrigin, action) => {\r\n console.log(\"billboardOriginDeleteRequested : \", action.payload);\r\n billboardOrigin.loading = true;\r\n },\r\n billboardOriginDeleteFailed: (billboardOrigins, action) => {\r\n billboardOrigins.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete billboardOrigin api at the back end.\r\n const {\r\n ID: billboardOriginId,\r\n A_Origin: billboardOriginName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with billboardOrigin '${billboardOriginName}'. ${action.payload}`\r\n );\r\n\r\n const index = billboardOrigins.list.findIndex(\r\n billboardOrigin => billboardOrigin.ID === billboardOriginId\r\n );\r\n //console.log(\"billboardOriginDeleted ha \", index);\r\n billboardOrigins.list.splice(index, 1);\r\n },\r\n billboardOriginDeleted: (billboardOrigins, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete billboardOrigin api at the back end.\r\n const { ID: billboardOriginID } = action.payload;\r\n // console.log(\"billboardOriginDeleted ha \", action.payload, billboardOriginID, billboardOrigins);\r\n const index = billboardOrigins.list.findIndex(\r\n billboardOrigin => billboardOrigin.ID === billboardOriginID\r\n );\r\n //console.log(\"billboardOriginDeleted, ha! ha! \", index);\r\n billboardOrigins.list.splice(index, 1);\r\n },\r\n billboardOriginAddRequested: (billboardOrigin, action) => {\r\n console.log(\"billboardOriginAddRequested : \", action.payload);\r\n billboardOrigin.loading = true;\r\n },\r\n billboardOriginAddFailed: (billboardOrigin, action) => {\r\n billboardOrigin.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'billboardOrigins' below represents the 'state':-\r\n billboardOriginAdded: (billboardOrigins, action) => {\r\n console.log(\"billboardOriginAdded : \", action.payload);\r\n billboardOrigins.list.push(action.payload);\r\n }\r\n // billboardOriginAdded: (billboardOrigins, action) => {\r\n // billboardOrigins.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // billboardOriginDeleted: (billboardOrigins, action) => {\r\n // console.log(\"billboardOriginDeleted ha \", action.payload.ID);\r\n // billboardOrigins.list.filter(billboardOrigin => billboardOrigin.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n billboardOriginAddRequested,\r\n billboardOriginAdded,\r\n billboardOriginAddFailed,\r\n billboardOriginChangeRequested,\r\n billboardOriginChanged,\r\n billboardOriginChangeFailed,\r\n billboardOriginDeleteRequested,\r\n billboardOriginDeleted,\r\n billboardOriginDeleteFailed,\r\n billboardOriginsReceived,\r\n billboardOriginsRequested,\r\n billboardOriginsRequestedFailed,\r\n billboardOriginReceived,\r\n billboardOriginRequested,\r\n billboardOriginRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/billboardOrigins\";\r\n\r\nexport const loadBillboardOrigins = () => (dispatch, getState) => {\r\n const { lastFetch } = getState().entities.billboardOrigins;\r\n\r\n console.log(\"loadBillboardOrigins lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: billboardOriginsRequested.type,\r\n method: \"get\",\r\n onSuccess: billboardOriginsReceived.type,\r\n onError: billboardOriginsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadBillboardOrigin = billboardOriginID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.billboardOrigins;\r\n\r\n //console.log(\"loadBillboardOrigin : \", billboardOriginID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + billboardOriginID,\r\n onStart: billboardOriginRequested.type,\r\n method: \"get\",\r\n onSuccess: billboardOriginReceived.type,\r\n onError: billboardOriginRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addBillboardOrigin':-\r\nexport const addBillboardOrigin = billboardOrigin =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: billboardOriginAddRequested.type,\r\n data: billboardOrigin,\r\n onSuccess: billboardOriginAdded.type,\r\n onError: billboardOriginAddFailed.type\r\n });\r\n\r\nexport const getBillboardOrigins = createSelector(\r\n state => state.entities.billboardOrigins,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (billboardOrigins, projects) has not changed then do not requery again:-\r\n // (billboardOrigins) => billboardOrigins.list.filter(billboardOrigin => !billboardOrigin.B_Active)\r\n billboardOrigins => billboardOrigins.list\r\n);\r\n\r\nexport const changeBillboardOrigin = billboardOrigin =>\r\n apiCallBegan({\r\n url: url + \"/\" + billboardOrigin.ID,\r\n method: \"put\",\r\n onStart: billboardOriginChangeRequested.type,\r\n data: {\r\n A_Origin: billboardOrigin.A_Origin\r\n },\r\n onSuccess: billboardOriginChanged.type,\r\n onError: billboardOriginChangeFailed.type\r\n });\r\n\r\nexport const deleteBillboardOrigin = billboardOrigin =>\r\n apiCallBegan({\r\n url: url + \"/\" + billboardOrigin.ID,\r\n method: \"delete\",\r\n onStart: billboardOriginDeleteRequested.type,\r\n data: { ID: billboardOrigin.ID, A_Origin: billboardOrigin.A_Origin },\r\n onSuccess: billboardOriginDeleted.type,\r\n onError: billboardOriginDeleteFailed.type\r\n });\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeLocationGroups\",\r\n initialState: {\r\n list: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeLocationGroupsRequested' or 'homeLocationGroupsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeLocationGroups' below represents the 'state':-\r\n homeLocationGroupsRequested: (homeLocationGroups, action) => {\r\n console.log(\"homeLocationGroupsRequested : \", action.payload);\r\n homeLocationGroups.loading = true;\r\n },\r\n homeLocationGroupsReceived: (homeLocationGroups, action) => {\r\n console.log(\"homeLocationGroupsReceived : \", action.payload);\r\n homeLocationGroups.list = action.payload;\r\n homeLocationGroups.loading = false;\r\n homeLocationGroups.lastFetch = Date.now();\r\n },\r\n homeLocationGroupsRequestedFailed: (homeLocationGroups, action) => {\r\n homeLocationGroups.loading = false;\r\n // window.alert(`No HomeLocationGroups found.`);\r\n },\r\n homeLocationGroupRequested: (homeLocationGroup, action) => {\r\n console.log(\"homeLocationGroupRequested : \", action.payload);\r\n homeLocationGroup.loading = true;\r\n },\r\n homeLocationGroupReceived: (homeLocationGroup, action) => {\r\n console.log(\"homeLocationGroupReceived : \", action.payload);\r\n homeLocationGroup.list = action.payload;\r\n homeLocationGroup.loading = false;\r\n homeLocationGroup.lastFetch = Date.now();\r\n },\r\n homeLocationGroupRequestedFailed: (homeLocationGroup, action) => {\r\n homeLocationGroup.loading = false;\r\n // window.alert(`No HomeLocationGroup found.`);\r\n },\r\n homeLocationGroupChangeRequested: (homeLocationGroup, action) => {\r\n console.log(\"homeLocationGroupChangeRequested : \", action.payload);\r\n homeLocationGroup.loading = true;\r\n },\r\n homeLocationGroupChangeFailed: (homeLocationGroup, action) => {\r\n homeLocationGroup.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeLocationGroup api at the back end.\r\n // const { ID: homeLocationGroupId, A_Name: homeLocationGroupName } = action.payload;\r\n\r\n // window.alert(`HomeLocationGroup '${homeLocationGroupName}' no longer exists.`);\r\n\r\n // const index = homeLocationGroup.list.findIndex(homeLocationGroup => homeLocationGroup.ID === homeLocationGroupId);\r\n // //console.log(\"homeLocationGroupDeleted ha \", index);\r\n // homeLocationGroup.list.splice(index, 1);\r\n },\r\n homeLocationGroupChanged: (homeLocationGroup, action) => {\r\n homeLocationGroup.loading = false;\r\n },\r\n homeLocationGroupDeleteRequested: (homeLocationGroup, action) => {\r\n console.log(\"homeLocationGroupDeleteRequested : \", action.payload);\r\n homeLocationGroup.loading = true;\r\n },\r\n homeLocationGroupDeleteFailed: (homeLocationGroups, action) => {\r\n homeLocationGroups.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeLocationGroup api at the back end.\r\n const {\r\n ID: homeLocationGroupId,\r\n A_Name: homeLocationGroupName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeLocationGroup '${homeLocationGroupName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeLocationGroups.list.findIndex(\r\n homeLocationGroup => homeLocationGroup.ID === homeLocationGroupId\r\n );\r\n //console.log(\"homeLocationGroupDeleted ha \", index);\r\n homeLocationGroups.list.splice(index, 1);\r\n },\r\n homeLocationGroupDeleted: (homeLocationGroups, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeLocationGroup api at the back end.\r\n const { ID: homeLocationGroupID } = action.payload;\r\n // console.log(\"homeLocationGroupDeleted ha \", action.payload, homeLocationGroupID, homeLocationGroups);\r\n const index = homeLocationGroups.list.findIndex(\r\n homeLocationGroup => homeLocationGroup.ID === homeLocationGroupID\r\n );\r\n //console.log(\"homeLocationGroupDeleted, ha! ha! \", index);\r\n homeLocationGroups.list.splice(index, 1);\r\n },\r\n homeLocationGroupAddRequested: (homeLocationGroup, action) => {\r\n console.log(\"homeLocationGroupAddRequested : \", action.payload);\r\n homeLocationGroup.loading = true;\r\n },\r\n homeLocationGroupAddFailed: (homeLocationGroup, action) => {\r\n homeLocationGroup.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeLocationGroups' below represents the 'state':-\r\n homeLocationGroupAdded: (homeLocationGroups, action) => {\r\n console.log(\"homeLocationGroupAdded : \", action.payload);\r\n homeLocationGroups.list.push(action.payload);\r\n }\r\n // homeLocationGroupAdded: (homeLocationGroups, action) => {\r\n // homeLocationGroups.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeLocationGroupDeleted: (homeLocationGroups, action) => {\r\n // console.log(\"homeLocationGroupDeleted ha \", action.payload.ID);\r\n // homeLocationGroups.list.filter(homeLocationGroup => homeLocationGroup.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeLocationGroupAddRequested,\r\n homeLocationGroupAdded,\r\n homeLocationGroupAddFailed,\r\n homeLocationGroupChangeRequested,\r\n homeLocationGroupChanged,\r\n homeLocationGroupChangeFailed,\r\n homeLocationGroupDeleteRequested,\r\n homeLocationGroupDeleted,\r\n homeLocationGroupDeleteFailed,\r\n homeLocationGroupsReceived,\r\n homeLocationGroupsRequested,\r\n homeLocationGroupsRequestedFailed,\r\n homeLocationGroupReceived,\r\n homeLocationGroupRequested,\r\n homeLocationGroupRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/homeLocationGroups\";\r\n\r\nexport const loadHomeLocationGroups = () => (dispatch, getState) => {\r\n const { lastFetch } = getState().entities.homeLocationGroups;\r\n\r\n console.log(\"loadHomeLocationGroups lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: homeLocationGroupsRequested.type,\r\n method: \"get\",\r\n onSuccess: homeLocationGroupsReceived.type,\r\n onError: homeLocationGroupsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeLocationGroup = homeLocationGroupID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeLocationGroups;\r\n\r\n //console.log(\"loadHomeLocationGroup : \", homeLocationGroupID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeLocationGroupID,\r\n onStart: homeLocationGroupRequested.type,\r\n method: \"get\",\r\n onSuccess: homeLocationGroupReceived.type,\r\n onError: homeLocationGroupRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeLocationGroup':-\r\nexport const addHomeLocationGroup = homeLocationGroup =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeLocationGroupAddRequested.type,\r\n data: homeLocationGroup,\r\n onSuccess: homeLocationGroupAdded.type,\r\n onError: homeLocationGroupAddFailed.type\r\n });\r\n\r\nexport const getHomeLocationGroups = createSelector(\r\n state => state.entities.homeLocationGroups,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeLocationGroups, projects) has not changed then do not requery again:-\r\n // (homeLocationGroups) => homeLocationGroups.list.filter(homeLocationGroup => !homeLocationGroup.B_Active)\r\n homeLocationGroups => homeLocationGroups.list\r\n);\r\n\r\nexport const changeHomeLocationGroup = homeLocationGroup =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeLocationGroup.ID,\r\n method: \"put\",\r\n onStart: homeLocationGroupChangeRequested.type,\r\n data: {\r\n A_Group: homeLocationGroup.A_Group\r\n },\r\n onSuccess: homeLocationGroupChanged.type,\r\n onError: homeLocationGroupChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeLocationGroup = homeLocationGroup =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeLocationGroup.ID,\r\n method: \"delete\",\r\n onStart: homeLocationGroupDeleteRequested.type,\r\n data: { ID: homeLocationGroup.ID, A_Group: homeLocationGroup.A_Group },\r\n onSuccess: homeLocationGroupDeleted.type,\r\n onError: homeLocationGroupDeleteFailed.type\r\n });\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"billboardMenuBGs\",\r\n initialState: {\r\n list: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'billboardMenuBGsRequested' or 'billboardMenuBGsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'billboardMenuBGs' below represents the 'state':-\r\n billboardMenuBGsRequested: (billboardMenuBGs, action) => {\r\n console.log(\"billboardMenuBGsRequested : \", action.payload);\r\n billboardMenuBGs.loading = true;\r\n },\r\n billboardMenuBGsReceived: (billboardMenuBGs, action) => {\r\n console.log(\"billboardMenuBGsReceived : \", action.payload);\r\n billboardMenuBGs.list = action.payload;\r\n billboardMenuBGs.loading = false;\r\n billboardMenuBGs.lastFetch = Date.now();\r\n },\r\n billboardMenuBGsRequestedFailed: (billboardMenuBGs, action) => {\r\n billboardMenuBGs.loading = false;\r\n // window.alert(`No BillboardMenuBGs found.`);\r\n },\r\n billboardMenuBGRequested: (billboardMenuBG, action) => {\r\n console.log(\"billboardMenuBGRequested : \", action.payload);\r\n billboardMenuBG.loading = true;\r\n },\r\n billboardMenuBGReceived: (billboardMenuBG, action) => {\r\n console.log(\"billboardMenuBGReceived : \", action.payload);\r\n billboardMenuBG.list = action.payload;\r\n billboardMenuBG.loading = false;\r\n billboardMenuBG.lastFetch = Date.now();\r\n },\r\n billboardMenuBGRequestedFailed: (billboardMenuBG, action) => {\r\n billboardMenuBG.loading = false;\r\n // window.alert(`No HomeLocationGroup found.`);\r\n },\r\n billboardMenuBGChangeRequested: (billboardMenuBG, action) => {\r\n console.log(\"billboardMenuBGChangeRequested : \", action.payload);\r\n billboardMenuBG.loading = true;\r\n },\r\n billboardMenuBGChangeFailed: (billboardMenuBG, action) => {\r\n billboardMenuBG.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete billboardMenuBG api at the back end.\r\n // const { ID: billboardMenuBGId, A_Name: billboardMenuBGName } = action.payload;\r\n\r\n // window.alert(`HomeLocationGroup '${billboardMenuBGName}' no longer exists.`);\r\n\r\n // const index = billboardMenuBG.list.findIndex(billboardMenuBG => billboardMenuBG.ID === billboardMenuBGId);\r\n // //console.log(\"billboardMenuBGDeleted ha \", index);\r\n // billboardMenuBG.list.splice(index, 1);\r\n },\r\n billboardMenuBGChanged: (billboardMenuBG, action) => {\r\n billboardMenuBG.loading = false;\r\n },\r\n billboardMenuBGDeleteRequested: (billboardMenuBG, action) => {\r\n console.log(\"billboardMenuBGDeleteRequested : \", action.payload);\r\n billboardMenuBG.loading = true;\r\n },\r\n billboardMenuBGDeleteFailed: (billboardMenuBGs, action) => {\r\n billboardMenuBGs.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete billboardMenuBG api at the back end.\r\n const {\r\n ID: billboardMenuBGId,\r\n A_Name: billboardMenuBGName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with billboardMenuBG '${billboardMenuBGName}'. ${action.payload}`\r\n );\r\n\r\n const index = billboardMenuBGs.list.findIndex(\r\n billboardMenuBG => billboardMenuBG.ID === billboardMenuBGId\r\n );\r\n //console.log(\"billboardMenuBGDeleted ha \", index);\r\n billboardMenuBGs.list.splice(index, 1);\r\n },\r\n billboardMenuBGDeleted: (billboardMenuBGs, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete billboardMenuBG api at the back end.\r\n const { ID: billboardMenuBGID } = action.payload;\r\n // console.log(\"billboardMenuBGDeleted ha \", action.payload, billboardMenuBGID, billboardMenuBGs);\r\n const index = billboardMenuBGs.list.findIndex(\r\n billboardMenuBG => billboardMenuBG.ID === billboardMenuBGID\r\n );\r\n //console.log(\"billboardMenuBGDeleted, ha! ha! \", index);\r\n billboardMenuBGs.list.splice(index, 1);\r\n },\r\n billboardMenuBGAddRequested: (billboardMenuBG, action) => {\r\n console.log(\"billboardMenuBGAddRequested : \", action.payload);\r\n billboardMenuBG.loading = true;\r\n },\r\n billboardMenuBGAddFailed: (billboardMenuBG, action) => {\r\n billboardMenuBG.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'billboardMenuBGs' below represents the 'state':-\r\n billboardMenuBGAdded: (billboardMenuBGs, action) => {\r\n console.log(\"billboardMenuBGAdded : \", action.payload);\r\n billboardMenuBGs.list.push(action.payload);\r\n }\r\n // billboardMenuBGAdded: (billboardMenuBGs, action) => {\r\n // billboardMenuBGs.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // billboardMenuBGDeleted: (billboardMenuBGs, action) => {\r\n // console.log(\"billboardMenuBGDeleted ha \", action.payload.ID);\r\n // billboardMenuBGs.list.filter(billboardMenuBG => billboardMenuBG.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n billboardMenuBGAddRequested,\r\n billboardMenuBGAdded,\r\n billboardMenuBGAddFailed,\r\n billboardMenuBGChangeRequested,\r\n billboardMenuBGChanged,\r\n billboardMenuBGChangeFailed,\r\n billboardMenuBGDeleteRequested,\r\n billboardMenuBGDeleted,\r\n billboardMenuBGDeleteFailed,\r\n billboardMenuBGsReceived,\r\n billboardMenuBGsRequested,\r\n billboardMenuBGsRequestedFailed,\r\n billboardMenuBGReceived,\r\n billboardMenuBGRequested,\r\n billboardMenuBGRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/billboardMenuBGs\";\r\n\r\nexport const loadBillboardMenuBGs = () => (dispatch, getState) => {\r\n const { lastFetch } = getState().entities.billboardMenuBGs;\r\n\r\n console.log(\"loadBillboardMenuBGs lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: billboardMenuBGsRequested.type,\r\n method: \"get\",\r\n onSuccess: billboardMenuBGsReceived.type,\r\n onError: billboardMenuBGsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadBillboardMenuBG = billboardMenuBGID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.billboardMenuBGs;\r\n\r\n //console.log(\"loadHomeLocationGroup : \", billboardMenuBGID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + billboardMenuBGID,\r\n onStart: billboardMenuBGRequested.type,\r\n method: \"get\",\r\n onSuccess: billboardMenuBGReceived.type,\r\n onError: billboardMenuBGRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeLocationGroup':-\r\nexport const addHomeLocationGroup = billboardMenuBG =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: billboardMenuBGAddRequested.type,\r\n data: billboardMenuBG,\r\n onSuccess: billboardMenuBGAdded.type,\r\n onError: billboardMenuBGAddFailed.type\r\n });\r\n\r\nexport const getBillboardMenuBGs = createSelector(\r\n state => state.entities.billboardMenuBGs,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (billboardMenuBGs, projects) has not changed then do not requery again:-\r\n // (billboardMenuBGs) => billboardMenuBGs.list.filter(billboardMenuBG => !billboardMenuBG.B_Active)\r\n billboardMenuBGs => billboardMenuBGs.list\r\n);\r\n\r\nexport const changeHomeLocationGroup = billboardMenuBG =>\r\n apiCallBegan({\r\n url: url + \"/\" + billboardMenuBG.ID,\r\n method: \"put\",\r\n onStart: billboardMenuBGChangeRequested.type,\r\n data: {\r\n A_Background: billboardMenuBG.A_Background\r\n },\r\n onSuccess: billboardMenuBGChanged.type,\r\n onError: billboardMenuBGChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeLocationGroup = billboardMenuBG =>\r\n apiCallBegan({\r\n url: url + \"/\" + billboardMenuBG.ID,\r\n method: \"delete\",\r\n onStart: billboardMenuBGDeleteRequested.type,\r\n data: {\r\n ID: billboardMenuBG.ID,\r\n A_Background: billboardMenuBG.A_Background\r\n },\r\n onSuccess: billboardMenuBGDeleted.type,\r\n onError: billboardMenuBGDeleteFailed.type\r\n });\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport { loadMenu, addMenu, changeMenu } from \"../../store/menus\";\r\nimport { loadBillboardOrigins } from \"../../store/billboardOrigins\";\r\nimport { loadHomeLocationGroups } from \"../../store/homeLocationGroups\";\r\nimport { loadBillboardMenuBGs } from \"../../store/billboardMenuBGs\";\r\nimport { connect } from \"react-redux\";\r\n// import { getMenu, saveMenu } from \"../../services/menuService\";\r\n// import { getBillboardOrigins } from \"../../services/billboardOriginService\";\r\n// import { getHomeLocationGroups } from \"../../services/homeLocationGroupService\";\r\n\r\nclass MenuForm extends Form {\r\n state = {\r\n data: {\r\n B_Billboard: false,\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_BillboardMenuBG_ID: \"\",\r\n N_Order_No: \"\",\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n // A_Description: \"\",\r\n I_Image: \"\",\r\n A_MenuCursorColour: \"\",\r\n // N_BillboardLarge_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n waitingForFileUpload: false\r\n },\r\n errors: {},\r\n billboardOrigins: [],\r\n homeLocationGroups: [],\r\n billboardMenuBGs: [],\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n user: []\r\n };\r\n\r\n schemaCreate = {\r\n ID: Joi.number(),\r\n B_Billboard: Joi.boolean().label(\"Display Menu\"),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_BillboardMenuBG_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Menu Background\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .required()\r\n .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n .required()\r\n .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .required()\r\n // .min(3)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n A_MenuCursorColour: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Menu Cursor Colour\")\r\n // N_BillboardLarge_ID: Joi.string()\r\n // .min(1)\r\n // .max(100)\r\n // .label(\"BillboardIndentifier\")\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.number(),\r\n B_Billboard: Joi.boolean().label(\"Display Menu\"),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_BillboardMenuBG_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Menu Background\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .required()\r\n .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n .required()\r\n .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .required()\r\n // .min(3)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n A_MenuCursorColour: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Menu Cursor Colour\")\r\n // N_BillboardLarge_ID: Joi.string()\r\n // .min(1)\r\n // .max(100)\r\n // .label(\"BillboardIndentifier\")\r\n };\r\n\r\n async populateMenus() {\r\n try {\r\n // window.alert(\"populateMenus-1\", auth.getCurrentUser());\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_BillboardMenuBG_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n await this.props.loadBillboardOrigins();\r\n\r\n await this.props.loadHomeLocationGroups();\r\n\r\n await this.props.loadBillboardMenuBGs();\r\n\r\n const menuId = this.props.match.params.id;\r\n if (menuId === \"new\") {\r\n data[\"N_BillboardOrigin_ID\"] = 1;\r\n N_BillboardOrigin_ID = 1;\r\n data[\"N_HomeLocationGroup_ID\"] = 1;\r\n N_HomeLocationGroup_ID = 1;\r\n data[\"N_BillboardMenuBG_ID\"] = 1;\r\n N_BillboardMenuBG_ID = 1;\r\n data[\"N_ParentOrigin_ID\"] = 1;\r\n N_ParentOrigin_ID = 1;\r\n\r\n this.setState({\r\n data,\r\n // billboardOrigin,\r\n // homeLocationGroup,\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_BillboardMenuBG_ID,\r\n N_ParentOrigin_ID,\r\n user: auth.getCurrentUser()\r\n });\r\n return;\r\n }\r\n\r\n // const { data: menu } = await getMenu(MenuId);\r\n await this.props.loadMenu(menuId);\r\n\r\n // const rawData = this.mapToViewModel(menu);\r\n\r\n // data[\"ID\"] = rawData.ID;\r\n // N_BillboardOrigin_ID = rawData.N_BillboardOrigin_ID;\r\n // data[\"N_BillboardOrigin_ID\"] = rawData.N_BillboardOrigin_ID;\r\n // N_HomeLocationGroup_ID = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_HomeLocationGroup_ID\"] = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_Order_No\"] = rawData.N_Order_No;\r\n // data[\"A_Reference\"] = rawData.A_Reference;\r\n // data[\"A_Summary\"] = rawData.A_Summary;\r\n // // data[\"A_Description\"] = rawData.A_Description;\r\n // data[\"I_Image\"] = rawData.I_Image;\r\n // //data[\"N_BillboardLarge_ID\"] = rawData.N_BillboardLarge_ID;\r\n // N_ParentOrigin_ID = rawData.N_ParentOrigin_ID;\r\n // data[\"N_ParentOrigin_ID\"] = rawData.N_ParentOrigin_ID;\r\n\r\n //console.log(\"populateMenus-1\", N_BillboardOrigin_ID);\r\n\r\n // this.setState({\r\n // data,\r\n // // billboardOrigin,\r\n // homeLocationGroup,\r\n // N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID,\r\n // N_ParentOrigin_ID,\r\n // user: auth.getCurrentUser()\r\n // });\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n this.props.history.replace(\"/not-found\");\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateMenus();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_BillboardMenuBG_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n if (\r\n this.props.match.params.id !== \"new\" &&\r\n this.state.data !== nextProps.menu\r\n ) {\r\n data[\"ID\"] = nextProps.menu.ID;\r\n data[\"B_Billboard\"] = nextProps.menu.B_Billboard;\r\n N_BillboardOrigin_ID = nextProps.menu.N_BillboardOrigin_ID;\r\n data[\"N_BillboardOrigin_ID\"] = nextProps.menu.N_BillboardOrigin_ID;\r\n N_HomeLocationGroup_ID = nextProps.menu.N_HomeLocationGroup_ID;\r\n data[\"N_HomeLocationGroup_ID\"] = nextProps.menu.N_HomeLocationGroup_ID;\r\n data[\"N_BillboardMenuBG_ID\"] = nextProps.menu.N_BillboardMenuBG_ID;\r\n data[\"N_Order_No\"] = nextProps.menu.N_Order_No;\r\n data[\"A_Reference\"] = nextProps.menu.A_Reference;\r\n data[\"A_Summary\"] = nextProps.menu.A_Summary;\r\n data[\"I_Image\"] = nextProps.menu.I_Image;\r\n data[\"A_MenuCursorColour\"] = nextProps.menu.A_MenuCursorColour;\r\n N_ParentOrigin_ID = nextProps.menu.N_ParentOrigin_ID;\r\n data[\"N_ParentOrigin_ID\"] = nextProps.menu.N_ParentOrigin_ID;\r\n\r\n this.setState({\r\n data,\r\n billboardOrigins: await nextProps.billboardOrigins,\r\n homeLocationGroups: await nextProps.homeLocationGroups,\r\n billboardMenuBGs: await nextProps.billboardMenuBGs,\r\n user: auth.getCurrentUser()\r\n });\r\n } else {\r\n data[\"N_BillboardOrigin_ID\"] = 1;\r\n N_BillboardOrigin_ID = 1;\r\n data[\"N_HomeLocationGroup_ID\"] = 1;\r\n N_HomeLocationGroup_ID = 1;\r\n data[\"N_BillboardMenuBG_ID\"] = 1;\r\n N_BillboardMenuBG_ID = 1;\r\n data[\"N_ParentOrigin_ID\"] = 1;\r\n N_ParentOrigin_ID = 1;\r\n\r\n this.setState({\r\n data,\r\n billboardOrigins: await nextProps.billboardOrigins,\r\n homeLocationGroups: await nextProps.homeLocationGroups,\r\n billboardMenuBGs: await nextProps.billboardMenuBGs,\r\n user: auth.getCurrentUser()\r\n });\r\n }\r\n }\r\n\r\n // mapToViewModel(menu) {\r\n // //console.log(\"mapToViewModel-1\", menu);\r\n // return {\r\n // ID: menu.ID,\r\n // N_BillboardOrigin_ID: menu.N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID: menu.N_HomeLocationGroup_ID,\r\n // N_Order_No: menu.N_Order_No,\r\n // A_Reference: menu.A_Reference,\r\n // A_Summary: menu.A_Summary,\r\n // // A_Description: menu.A_Description,\r\n // I_Image: menu.I_Image,\r\n // N_ParentOrigin_ID: menu.N_ParentOrigin_ID\r\n // //N_BillboardLarge_ID: menu.N_BillboardLarge_ID\r\n // };\r\n // }\r\n\r\n doSubmit = async () => {\r\n try {\r\n const menuId = this.props.match.params.id;\r\n if (menuId === \"new\") {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.addMenu(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n } else {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.changeMenu(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n }\r\n // await saveMenu(this.state.data);\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.title = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n // this.props.history.push(\"/menusList\");\r\n //\r\n // Babak's Note: Use below rather than above:-\r\n await this.props.history.goBack();\r\n };\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_Image\"] = \"\";\r\n //\r\n // Babak's Note: Unquate below line to make Image mandatory:-\r\n // obj[\"N_PhotoSize01\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n cancelForm = async () => {\r\n this.props.history.push(\"/menusList\");\r\n // await this.props.history.goBack();\r\n };\r\n\r\n constructor() {\r\n // ...\r\n super();\r\n\r\n // this.handleRadioGroupChange = this.handleRadioGroupChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n render() {\r\n // const billboardOrigins = this.props.billboardOrigins;\r\n\r\n // const homeLocationGroups = this.props.homeLocationGroups;\r\n\r\n console.log(\r\n \"menu render : \",\r\n this.state.N_BillboardOrigin_ID,\r\n this.state.data[\"N_BillboardOrigin_ID\"]\r\n );\r\n\r\n // Babak's Note: *** Below 3 lines will stop rendering of child component 'TableBodyAppoints' section\r\n // 'console.log(\"Hello 04 : \");' first *** :-\r\n const { length: count } = this.props.billboardOrigins;\r\n //if (count === 0) return

;\r\n if (count === 0)\r\n return

There are currently no Billboard Origins in the database.

;\r\n\r\n return (\r\n \r\n

Menu Form

\r\n
\r\n
\r\n {this.props.match.params.id === \"new\"\r\n ? this.renderRadioGroup(\r\n \"N_BillboardOrigin_ID\",\r\n \"A_Origin\",\r\n \"Billboard Origin\",\r\n this.props.billboardOrigins,\r\n 0\r\n )\r\n : this.renderRadioGroup(\r\n \"N_BillboardOrigin_ID\",\r\n \"A_Origin\",\r\n \"Billboard Origin\",\r\n this.props.billboardOrigins,\r\n 99\r\n )}\r\n
\r\n {this.renderRadioGroup(\r\n \"N_HomeLocationGroup_ID\",\r\n \"A_Group\",\r\n \"Home Location Group\",\r\n this.props.homeLocationGroups,\r\n 99\r\n )}\r\n
\r\n {this.renderInput(\"N_Order_No\", \"Order Number\", \"number\")}\r\n
\r\n {this.renderInput(\"A_Reference\", \"Reference\")}\r\n\r\n
\r\n\r\n {this.renderInput(\"A_Summary\", \"Summary\")}\r\n {/* {this.renderInput(\"A_Description\", \"Description\")} */}\r\n
\r\n\r\n {this.renderRadioGroup(\r\n \"N_BillboardMenuBG_ID\",\r\n \"A_Background\",\r\n \"Menu Background\",\r\n this.props.billboardMenuBGs,\r\n 0\r\n )}\r\n\r\n {this.renderInputColourPickerMenu(\r\n \"A_MenuCursorColour\",\r\n \"Menu Cursor Colour\"\r\n )}\r\n
\r\n\r\n {this.renderImageFile(\"I_Image\", \"Upload Image\")}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n\r\n \r\n Clear Image\r\n \r\n
\r\n \r\n {/* */}\r\n
\r\n\r\n
\r\n {this.renderCheckbox(\"B_Billboard\", \"Display Menu\")}\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n {this.renderButton(\"Submit\")}\r\n {this.renderButtonCancel(\"Cancel\")}\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // menus: state.entities.menus.list.filter(menu => !menu.resolved)\r\n menu: state.entities.menus.listSingleRow,\r\n billboardOrigins: state.entities.billboardOrigins.list,\r\n homeLocationGroups: state.entities.homeLocationGroups.list,\r\n billboardMenuBGs: state.entities.billboardMenuBGs.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadMenu: id => dispatch(loadMenu(id)),\r\n loadBillboardOrigins: () => dispatch(loadBillboardOrigins()),\r\n loadHomeLocationGroups: () => dispatch(loadHomeLocationGroups()),\r\n loadBillboardMenuBGs: () => dispatch(loadBillboardMenuBGs()),\r\n addMenu: (menu, user, currentDate) =>\r\n dispatch(addMenu(menu, user, currentDate)),\r\n changeMenu: (menu, user, currentDate) =>\r\n dispatch(changeMenu(menu, user, currentDate))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Menus)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.menus' and 'this.props.loadMenus()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(MenuForm);\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\n\r\nclass MenusTable extends Component {\r\n columns = [];\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount MenusTable 01 : \");\r\n }\r\n\r\n groupColumn = {\r\n key: \"tree\",\r\n type: \"text\",\r\n content: menu =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onGroup(menu)}\r\n className={\r\n menu.N_BillboardOrigin_ID === 1\r\n ? menu.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? menu.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? menu.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n }\r\n >\r\n {menu.N_BillboardOrigin_ID === 1\r\n ? \"Group Level\"\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? \"Sum of Article Level\"\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? \"Article Level\"\r\n : \"-\"}\r\n \r\n ) : (\r\n 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? menu.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? menu.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n }\r\n >\r\n {menu.N_BillboardOrigin_ID === 1\r\n ? \"Group Level\"\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? \"Sum of Article Level\"\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? \"Article Level\"\r\n : \"-\"}\r\n \r\n )\r\n };\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: menu =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(menu)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: menu =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (menu.N_BB_Count < 1) {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete Menu '${menu.A_Reference}'?`\r\n )\r\n ) {\r\n this.props.onDelete(menu);\r\n }\r\n }\r\n }}\r\n className={\r\n menu.N_BB_Count > 0\r\n ? \"btn btn-danger btn-sm disabled clickableNon\"\r\n : \"btn btn-danger btn-sm enabled\"\r\n }\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n const menus = [{}];\r\n\r\n menus.map(\r\n item => (\r\n this.columns.push({\r\n ID: 1,\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 2,\r\n path: \"B_Billboard\",\r\n label: \"Billboard\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 3,\r\n path: \"N_BillboardOrigin_ID\",\r\n label: \"BillboardOriginIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 4,\r\n path: \"N_HomeLocationGroup_ID\",\r\n label: \"HomeLocationGroupIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 5,\r\n path: \"N_Order_No\",\r\n label: \"Order\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 6,\r\n path: \"A_Reference\",\r\n label: \"Reference\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 7,\r\n path: \"I_Image\",\r\n label: \"Image\",\r\n type: \"image\"\r\n }),\r\n this.columns.push({\r\n ID: 8,\r\n path: \"N_BillboardLarge_ID\",\r\n label: \"BillboardLargeIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 9,\r\n path: \"D_Inserted\",\r\n label: \"Inserted\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n ID: 10,\r\n path: \"A_Inserted_By\",\r\n label: \"Inserted_By\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 11,\r\n path: \"D_Updated\",\r\n label: \"Updated\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n ID: 12,\r\n path: \"A_Updated_By\",\r\n label: \"Updated_By\",\r\n type: \"text\"\r\n })\r\n )\r\n );\r\n\r\n this.columns.push(this.groupColumn);\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n }\r\n\r\n render() {\r\n //console.log(\"render usersTable\");\r\n const { menusList, onSort, sortColumn } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default MenusTable;\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { toast } from \"react-toastify\";\r\nimport MenusTable from \"./menusTable\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport { loadMenus, deleteMenu } from \"../../store/menus\";\r\nimport { connect } from \"react-redux\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\nimport { Redirect } from \"react-router\";\r\n\r\nclass MenusList extends Component {\r\n state = {\r\n menus: [],\r\n menuForm: false,\r\n groups: false,\r\n sumOfArticles: false,\r\n articles: false,\r\n menuID: 0,\r\n currentPage: 1,\r\n pageSize: 8,\r\n searchQuery: \"\",\r\n sortColumn: { path: \"N_Order_No\", order: \"asc\" }\r\n };\r\n\r\n async componentDidMount() {\r\n // window.alert(\"componentDidMount Menus 01 : \");\r\n\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n const billLocationGroupID = 1;\r\n\r\n // window.alert(\"MenusList, componentDidMount : \");\r\n\r\n await this.props.loadMenus(billLocationGroupID);\r\n }\r\n\r\n handleGroup = async menu => {\r\n try {\r\n if (menu.N_BillboardOrigin_ID === 1) {\r\n this.setState({ groups: true, menuID: menu.ID });\r\n //window.location = `/groups/groups/${menu.ID}`;\r\n } else if (menu.N_BillboardOrigin_ID === 2) {\r\n this.setState({ sumOfArticles: true, menuID: menu.ID });\r\n //window.location = `/sumOfArticles/sumOfArticles/${menu.ID}`;\r\n } else if (menu.N_BillboardOrigin_ID === 3) {\r\n this.setState({ articles: true, menuID: menu.ID });\r\n //window.location = `/articles/articles/${menu.ID}`;\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handleUpdate = async menu => {\r\n try {\r\n // window.alert(`menuList, handleUpdate : ${menu.ID}`);\r\n this.setState({ menuForm: true, menuID: menu.ID });\r\n // window.location = `/menusList/${menu.ID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n // handleDelete = async menu => {\r\n // const originalMenus = this.state.menus;\r\n // const menus = originalMenus.filter(m => m.ID !== menu.ID);\r\n // this.setState({ menus });\r\n\r\n // try {\r\n // // await deleteMenu(menu.ID);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 404)\r\n // toast.error(\"This menu has already been deleted.\");\r\n\r\n // this.setState({ menus: originalMenus });\r\n // }\r\n // };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n console.log(\"query : \", query);\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n console.log(\"searchQuery 2 : \", searchQuery);\r\n\r\n const allMenus = this.props.menus;\r\n\r\n let filtered = allMenus;\r\n if (searchQuery)\r\n filtered = allMenus.filter(m =>\r\n m.A_Reference.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n //\r\n // Babak's Note: lodash used:-\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const menus = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: menus };\r\n };\r\n\r\n render() {\r\n // window.alert(\"render menus 01 : \", this.state.groups, this.state.menuID);\r\n\r\n if (this.state.groups === true) {\r\n return ;\r\n }\r\n if (this.state.sumOfArticles === true) {\r\n return (\r\n \r\n );\r\n }\r\n if (this.state.articles === true) {\r\n return (\r\n \r\n );\r\n }\r\n if (this.state.menuForm === true) {\r\n // window.alert(`menuList, render() : ${this.state.menuID}`);\r\n return ;\r\n }\r\n\r\n if (this.props.menus.length === 0) return
;\r\n\r\n // const { length: count } = this.state.menus;\r\n\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'menus'\r\n // console.log(\"searchQuery 1 : \", searchQuery);\r\n\r\n const { totalCount, data: menusList } = this.getPagedData();\r\n\r\n console.log(\"render menus 02 : \", menusList);\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Menus

\r\n
\r\n\r\n {totalCount <= 7 ? (\r\n \r\n New Menu\r\n \r\n ) : (\r\n \r\n New Menu\r\n \r\n )}\r\n\r\n

Showing {totalCount} menus in the database.

\r\n \r\n this.props.deleteMenu(menu)}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n menus: state.entities.menus.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadMenus: billLocationGroupID => dispatch(loadMenus(billLocationGroupID)),\r\n deleteMenu: menu => dispatch(deleteMenu(menu))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(MenusList);\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport { loadGroup, addGroup, changeGroup } from \"../../store/groups\";\r\nimport { loadBillboardOrigins } from \"../../store/billboardOrigins\";\r\nimport { loadHomeLocationGroups } from \"../../store/homeLocationGroups\";\r\nimport { connect } from \"react-redux\";\r\n\r\nclass GroupForm extends Form {\r\n state = {\r\n data: {\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_Order_No: \"\",\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n // A_Description: \"\",\r\n I_Image: \"\",\r\n N_BillboardLarge_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n waitingForFileUpload: false\r\n },\r\n errors: {},\r\n billboardOrigin: [],\r\n homeLocationGroup: [],\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n user: []\r\n };\r\n\r\n schemaCreate = {\r\n ID: Joi.number(),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .required()\r\n .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n .required()\r\n .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .required()\r\n // .min(3)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_BillboardLarge_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.number(),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .required()\r\n .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n .required()\r\n .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .required()\r\n // .min(3)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_BillboardLarge_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n async populateGroups() {\r\n try {\r\n //console.log(\"populateGroups-1\", auth.getCurrentUser());\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n await this.props.loadBillboardOrigins();\r\n\r\n await this.props.loadHomeLocationGroups();\r\n\r\n const groupId = this.props.match.params.id;\r\n\r\n if (groupId === \"new\") {\r\n data[\"N_BillboardOrigin_ID\"] = 2;\r\n N_BillboardOrigin_ID = 2;\r\n data[\"N_HomeLocationGroup_ID\"] = 4;\r\n N_HomeLocationGroup_ID = 4;\r\n data[\"N_BillboardLarge_ID\"] = this.props.match.params.menuID;\r\n data[\"N_ParentOrigin_ID\"] = 2;\r\n N_ParentOrigin_ID = 2;\r\n\r\n this.setState({\r\n data,\r\n // billboardOrigin,\r\n // homeLocationGroup,\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID,\r\n user: auth.getCurrentUser()\r\n });\r\n return;\r\n }\r\n\r\n // const { data: group } = await getGroup(this.props.match.params.id);\r\n await this.props.loadGroup(groupId);\r\n\r\n // const rawData = this.mapToViewModel(group);\r\n\r\n // data[\"ID\"] = rawData.ID;\r\n // N_BillboardOrigin_ID = rawData.N_BillboardOrigin_ID;\r\n // data[\"N_BillboardOrigin_ID\"] = rawData.N_BillboardOrigin_ID;\r\n // N_HomeLocationGroup_ID = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_HomeLocationGroup_ID\"] = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_Order_No\"] = rawData.N_Order_No;\r\n // data[\"A_Reference\"] = rawData.A_Reference;\r\n // data[\"A_Summary\"] = rawData.A_Summary;\r\n // // data[\"A_Description\"] = rawData.A_Description;\r\n // data[\"I_Image\"] = rawData.I_Image;\r\n // data[\"N_BillboardLarge_ID\"] = rawData.N_BillboardLarge_ID;\r\n // N_ParentOrigin_ID = rawData.N_ParentOrigin_ID;\r\n // data[\"N_ParentOrigin_ID\"] = rawData.N_ParentOrigin_ID;\r\n\r\n // //console.log(\"populateGroups-1\", rawData.N_BillboardLarge_ID, MenuId);\r\n\r\n // this.setState({\r\n // data,\r\n // billboardOrigin,\r\n // homeLocationGroup,\r\n // N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID,\r\n // N_ParentOrigin_ID,\r\n // user: auth.getCurrentUser()\r\n // });\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n this.props.history.replace(\"/not-found\");\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateGroups();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n if (\r\n this.props.match.params.id !== \"new\" &&\r\n this.state.data !== nextProps.group\r\n ) {\r\n data[\"ID\"] = nextProps.group.ID;\r\n N_BillboardOrigin_ID = nextProps.group.N_BillboardOrigin_ID;\r\n data[\"N_BillboardOrigin_ID\"] = nextProps.group.N_BillboardOrigin_ID;\r\n N_HomeLocationGroup_ID = nextProps.group.N_HomeLocationGroup_ID;\r\n data[\"N_HomeLocationGroup_ID\"] = nextProps.group.N_HomeLocationGroup_ID;\r\n data[\"N_Order_No\"] = nextProps.group.N_Order_No;\r\n data[\"A_Reference\"] = nextProps.group.A_Reference;\r\n data[\"A_Summary\"] = nextProps.group.A_Summary;\r\n data[\"I_Image\"] = nextProps.group.I_Image;\r\n N_ParentOrigin_ID = nextProps.group.N_ParentOrigin_ID;\r\n data[\"N_ParentOrigin_ID\"] = nextProps.group.N_ParentOrigin_ID;\r\n\r\n this.setState({\r\n data,\r\n billboardOrigins: await nextProps.billboardOrigins,\r\n homeLocationGroups: await nextProps.homeLocationGroups,\r\n user: auth.getCurrentUser()\r\n });\r\n } else {\r\n data[\"N_BillboardOrigin_ID\"] = 2;\r\n N_BillboardOrigin_ID = 2;\r\n data[\"N_HomeLocationGroup_ID\"] = 4;\r\n N_HomeLocationGroup_ID = 4;\r\n data[\"N_ParentOrigin_ID\"] = 2;\r\n data[\"N_BillboardLarge_ID\"] = this.props.match.params.menuID;\r\n N_ParentOrigin_ID = 2;\r\n\r\n this.setState({\r\n data,\r\n billboardOrigins: await nextProps.billboardOrigins,\r\n homeLocationGroups: await nextProps.homeLocationGroups,\r\n user: auth.getCurrentUser()\r\n });\r\n }\r\n }\r\n\r\n // mapToViewModel(group) {\r\n // //console.log(\"mapToViewModel-1\", group);\r\n // return {\r\n // ID: group.ID,\r\n // N_BillboardOrigin_ID: group.N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID: group.N_HomeLocationGroup_ID,\r\n // N_Order_No: group.N_Order_No,\r\n // A_Reference: group.A_Reference,\r\n // A_Summary: group.A_Summary,\r\n // // A_Description: group.A_Description,\r\n // I_Image: group.I_Image,\r\n // N_BillboardLarge_ID: group.N_BillboardLarge_ID,\r\n // N_ParentOrigin_ID: group.N_ParentOrigin_ID\r\n // };\r\n // }\r\n\r\n doSubmit = async () => {\r\n try {\r\n const groupId = this.props.match.params.id;\r\n if (groupId === \"new\") {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.addGroup(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n } else {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.changeGroup(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.title = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n // this.props.history.push(\r\n // `/groups/groupsList/${this.props.match.params.menuID}`\r\n // );\r\n await this.props.history.goBack();\r\n };\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_Image\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n cancelForm = () => {\r\n this.props.history.push(\r\n `/groups/groupsList/${this.props.match.params.menuID}`\r\n );\r\n };\r\n\r\n constructor() {\r\n // ...\r\n super();\r\n\r\n // this.handleRadioGroupChange = this.handleRadioGroupChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n render() {\r\n const billboardOrigin = this.state.billboardOrigin;\r\n const homeLocationGroup = this.state.homeLocationGroup;\r\n\r\n console.log(\r\n \"group render : \",\r\n this.state.N_BillboardOrigin_ID,\r\n this.state.data[\"N_BillboardOrigin_ID\"]\r\n );\r\n\r\n // Babak's Note: *** Below 3 lines will stop rendering of child component 'TableBodyAppoints' section\r\n // 'console.log(\"Hello 04 : \");' first *** :-\r\n // const { length: count } = billboardOrigin;\r\n // //if (count === 0) return

;\r\n // if (count === 0)\r\n // return

There are currently no Billboard Origins in the database.

;\r\n\r\n // let string = this.props.match.params.id;\r\n // let substring = \"new\";\r\n const groupId = this.props.match.params.id;\r\n\r\n return (\r\n \r\n

Group Form

\r\n
\r\n
\r\n {groupId === \"new\"\r\n ? this.renderRadioGroup(\r\n \"N_BillboardOrigin_ID\",\r\n \"A_Origin\",\r\n \"Billboard Origin\",\r\n this.props.billboardOrigins,\r\n 1\r\n )\r\n : this.renderRadioGroup(\r\n \"N_BillboardOrigin_ID\",\r\n \"A_Origin\",\r\n \"Billboard Origin\",\r\n this.props.billboardOrigins,\r\n 99\r\n )}\r\n
\r\n {groupId === \"new\"\r\n ? this.renderRadioGroup(\r\n \"N_HomeLocationGroup_ID\",\r\n \"A_Group\",\r\n \"Home Location Group\",\r\n this.props.homeLocationGroups,\r\n 1\r\n )\r\n : this.renderRadioGroup(\r\n \"N_HomeLocationGroup_ID\",\r\n \"A_Group\",\r\n \"Home Location Group\",\r\n this.props.homeLocationGroups,\r\n 1\r\n )}\r\n
\r\n {this.renderInput(\"N_Order_No\", \"Order Number\", \"number\")}\r\n
\r\n {this.renderInput(\"A_Reference\", \"Reference\")}\r\n\r\n
\r\n\r\n {this.renderInput(\"A_Summary\", \"Summary\")}\r\n {/* {this.renderInput(\"A_Description\", \"Description\")} */}\r\n
\r\n\r\n {this.renderImageFile(\"I_Image\", \"Upload Image\")}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n\r\n \r\n Clear Image\r\n \r\n
\r\n \r\n {/* */}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderButton(\"Sunmit\")}\r\n {this.renderButtonCancel(\"Cancel\")}\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // groups: state.entities.groups.list.filter(group => !group.resolved)\r\n group: state.entities.groups.listSingleRow,\r\n billboardOrigins: state.entities.billboardOrigins.list,\r\n homeLocationGroups: state.entities.homeLocationGroups.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadGroup: id => dispatch(loadGroup(id)),\r\n loadBillboardOrigins: () => dispatch(loadBillboardOrigins()),\r\n loadHomeLocationGroups: () => dispatch(loadHomeLocationGroups()),\r\n addGroup: (group, user, currentDate) =>\r\n dispatch(addGroup(group, user, currentDate)),\r\n changeGroup: (group, user, currentDate) =>\r\n dispatch(changeGroup(group, user, currentDate))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Groups)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.groups' and 'this.props.loadGroups()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(GroupForm);\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\n\r\nclass GroupsTable extends Component {\r\n columns = [];\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount GroupsTable 01 : \");\r\n }\r\n\r\n sumOfArticleColumn = {\r\n key: \"tree\",\r\n type: \"text\",\r\n content: group =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onSumOfArticle(group)}\r\n className={\r\n group.N_BillboardOrigin_ID === 2\r\n ? group.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : group.N_BillboardOrigin_ID === 3\r\n ? group.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n }\r\n >\r\n {group.N_BillboardOrigin_ID === 2\r\n ? \"Sum of Article Level\"\r\n : group.N_BillboardOrigin_ID === 3\r\n ? \"Article Level\"\r\n : \"-\"}\r\n \r\n ) : (\r\n 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : group.N_BillboardOrigin_ID === 3\r\n ? group.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n }\r\n >\r\n {group.N_BillboardOrigin_ID === 2\r\n ? \"Sum of Article Level\"\r\n : group.N_BillboardOrigin_ID === 3\r\n ? \"Article Level\"\r\n : \"-\"}\r\n \r\n )\r\n };\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: group =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(group)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: group =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (group.N_BB_Count < 1) {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete Group Article '${group.A_Reference}'?`\r\n )\r\n ) {\r\n this.props.onDelete(group);\r\n }\r\n }\r\n }}\r\n className={\r\n group.N_BB_Count > 0\r\n ? \"btn btn-danger btn-sm disabled clickableNon\"\r\n : \"btn btn-danger btn-sm enabled\"\r\n }\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n const groups = [{ ID: 1 }];\r\n\r\n groups.map(\r\n item => (\r\n this.columns.push({\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"B_Billboard\",\r\n label: \"Billboard\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_BillboardOrigin_ID\",\r\n label: \"BillboardOriginIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_HomeLocationGroup_ID\",\r\n label: \"HomeLocationGroupIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_Order_No\",\r\n label: \"Order\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Reference\",\r\n label: \"Reference\",\r\n type: \"text\"\r\n }),\r\n // this.columns.push({\r\n // path: \"A_Summary\",\r\n // label: \"Summary\",\r\n // type: \"text\"\r\n // }),\r\n // this.columns.push({\r\n // path: \"A_Description\",\r\n // label: \"Description\",\r\n // type: \"text\"\r\n // }),\r\n this.columns.push({ path: \"I_Image\", label: \"Image\", type: \"image\" }),\r\n this.columns.push({\r\n path: \"N_BillboardLarge_ID\",\r\n label: \"BillboardLargeIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"D_Inserted\",\r\n label: \"Inserted\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Inserted_By\",\r\n label: \"Inserted_By\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"D_Updated\",\r\n label: \"Updated\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Updated_By\",\r\n label: \"Updated_By\",\r\n type: \"text\"\r\n })\r\n )\r\n );\r\n\r\n this.columns.push(this.sumOfArticleColumn);\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n }\r\n\r\n render() {\r\n //console.log(\"render usersTable\");\r\n const { groupsList, onSort, sortColumn } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default GroupsTable;\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Redirect } from \"react-router\";\r\nimport { toast } from \"react-toastify\";\r\nimport GroupsTable from \"./groupsTable\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport { loadGroups, deleteGroup } from \"../../store/groups\";\r\nimport { connect } from \"react-redux\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\n\r\nclass GroupsList extends Component {\r\n state = {\r\n groups: [],\r\n sumOfArticles: false,\r\n articles: false,\r\n groupID: 0,\r\n groupForm: false,\r\n menuID: 0,\r\n currentPage: 1,\r\n pageSize: 8,\r\n searchQuery: \"\",\r\n sortColumn: { path: \"N_Order_No\", order: \"asc\" }\r\n };\r\n\r\n async componentDidMount() {\r\n // window.alert(\"componentDidMount GroupsList 01 : \");\r\n\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n const menuId = this.props.match.params.menuID;\r\n\r\n // window.alert(\"GroupsList, componentDidMount : \");\r\n\r\n await this.props.loadGroups(menuId);\r\n }\r\n\r\n handleSumOfArticle = async group => {\r\n try {\r\n if (group.N_BillboardOrigin_ID === 2) {\r\n this.setState({ sumOfArticles: true, groupID: group.ID });\r\n // window.location = `/sumOfArticles/sumOfArticles/${group.ID}`;\r\n } else if (group.N_BillboardOrigin_ID === 3) {\r\n this.setState({ articles: true, groupID: group.ID });\r\n // window.location = `/articles/articles/${group.ID}`;\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handleUpdate = async group => {\r\n try {\r\n this.setState({\r\n groupForm: true,\r\n groupID: group.ID,\r\n menuID: this.props.match.params.menuID\r\n });\r\n // window.location = `/groupForm/${group.ID}/${this.props.match.params.menuID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n // handleDelete = async group => {\r\n // const originalGroups = this.state.groups;\r\n // const groups = originalGroups.filter(m => m.ID !== group.ID);\r\n // this.setState({ groups });\r\n\r\n // try {\r\n // await deleteGroup(group.ID);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 404)\r\n // toast.error(\"This group has already been deleted.\");\r\n\r\n // this.setState({ groups: originalGroups });\r\n // }\r\n // };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n // console.log(\"query : \", query);\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n // console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //console.log(\"searchQuery 2 : \", searchQuery);\r\n\r\n const allGroups = this.props.groups;\r\n\r\n let filtered = allGroups;\r\n if (searchQuery)\r\n filtered = allGroups.filter(m =>\r\n m.A_Reference.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const groups = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: groups };\r\n };\r\n\r\n render() {\r\n //console.log(\"render groups\");\r\n\r\n if (this.state.sumOfArticles === true) {\r\n return (\r\n \r\n );\r\n }\r\n if (this.state.articles === true) {\r\n return (\r\n \r\n );\r\n }\r\n if (this.state.groupForm === true) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // if (this.props.groups.length === 0)\r\n // return
;\r\n\r\n // const { length: count } = this.state.groups;\r\n\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'groups'\r\n // console.log(\"searchQuery 1 : \");\r\n\r\n const { totalCount, data: groupsList } = this.getPagedData();\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Groups

\r\n
\r\n \r\n New Group\r\n \r\n

Showing {totalCount} groups in the database.

\r\n \r\n this.props.deleteGroup(group)}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n \r\n Back to Menus\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n groups: state.entities.groups.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadGroups: billboardLargeID => dispatch(loadGroups(billboardLargeID)),\r\n deleteGroup: group => dispatch(deleteGroup(group))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(GroupsList);\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport {\r\n loadSumOfArticle,\r\n addSumOfArticle,\r\n changeSumOfArticle\r\n} from \"../../store/sumOfArticles\";\r\nimport { loadBillboardOrigins } from \"../../store/billboardOrigins\";\r\nimport { loadHomeLocationGroups } from \"../../store/homeLocationGroups\";\r\nimport { connect } from \"react-redux\";\r\n\r\nclass SumOfArticleForm extends Form {\r\n state = {\r\n data: {\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_Order_No: \"\",\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n // A_Description: \"\",\r\n I_Image: \"\",\r\n N_BillboardLarge_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n waitingForFileUpload: false\r\n },\r\n errors: {},\r\n billboardOrigin: [],\r\n homeLocationGroup: [],\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n user: []\r\n };\r\n\r\n schemaCreate = {\r\n ID: Joi.number(),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .required()\r\n .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n .required()\r\n .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .required()\r\n // .min(3)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_BillboardLarge_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.number(),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .required()\r\n .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n .required()\r\n .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .required()\r\n // .min(3)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_BillboardLarge_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n async populateSumOfArticles() {\r\n try {\r\n //console.log(\"populateSumOfArticles-1\", auth.getCurrentUser());\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n await this.props.loadBillboardOrigins();\r\n\r\n await this.props.loadHomeLocationGroups();\r\n\r\n const sumOfArticleId = this.props.match.params.id;\r\n\r\n if (sumOfArticleId === \"new\") {\r\n data[\"N_BillboardOrigin_ID\"] = 3;\r\n N_BillboardOrigin_ID = 3;\r\n data[\"N_HomeLocationGroup_ID\"] = 4;\r\n N_HomeLocationGroup_ID = 4;\r\n data[\"N_BillboardLarge_ID\"] = this.props.match.params.groupID;\r\n data[\"N_ParentOrigin_ID\"] = 3;\r\n N_ParentOrigin_ID = 3;\r\n\r\n this.setState({\r\n data,\r\n // billboardOrigin,\r\n // homeLocationGroup,\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID,\r\n user: auth.getCurrentUser()\r\n });\r\n return;\r\n }\r\n\r\n // const { data: sumOfArticle } = await getSumOfArticle(\r\n // this.props.match.params.id\r\n // );\r\n\r\n await this.props.loadSumOfArticle(sumOfArticleId);\r\n\r\n // const rawData = this.mapToViewModel(sumOfArticle);\r\n\r\n // data[\"ID\"] = rawData.ID;\r\n // N_BillboardOrigin_ID = rawData.N_BillboardOrigin_ID;\r\n // data[\"N_BillboardOrigin_ID\"] = rawData.N_BillboardOrigin_ID;\r\n // N_HomeLocationGroup_ID = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_HomeLocationGroup_ID\"] = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_Order_No\"] = rawData.N_Order_No;\r\n // data[\"A_Reference\"] = rawData.A_Reference;\r\n // data[\"A_Summary\"] = rawData.A_Summary;\r\n // // data[\"A_Description\"] = rawData.A_Description;\r\n // data[\"I_Image\"] = rawData.I_Image;\r\n // data[\"N_BillboardLarge_ID\"] = rawData.N_BillboardLarge_ID;\r\n // N_ParentOrigin_ID = rawData.N_ParentOrigin_ID;\r\n // data[\"N_ParentOrigin_ID\"] = rawData.N_ParentOrigin_ID;\r\n\r\n // console.log(\r\n // \"populateSumOfArticles-1\",\r\n // rawData.N_BillboardLarge_ID,\r\n // GroupId\r\n // );\r\n\r\n // this.setState({\r\n // data,\r\n // billboardOrigin,\r\n // homeLocationGroup,\r\n // N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID,\r\n // N_ParentOrigin_ID,\r\n // user: auth.getCurrentUser()\r\n // });\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n this.props.history.replace(\"/not-found\");\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateSumOfArticles();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n if (\r\n this.props.match.params.id !== \"new\" &&\r\n this.state.data !== nextProps.sumOfArticle\r\n ) {\r\n data[\"ID\"] = nextProps.sumOfArticle.ID;\r\n N_BillboardOrigin_ID = nextProps.sumOfArticle.N_BillboardOrigin_ID;\r\n data[\"N_BillboardOrigin_ID\"] =\r\n nextProps.sumOfArticle.N_BillboardOrigin_ID;\r\n N_HomeLocationGroup_ID = nextProps.sumOfArticle.N_HomeLocationGroup_ID;\r\n data[\"N_HomeLocationGroup_ID\"] =\r\n nextProps.sumOfArticle.N_HomeLocationGroup_ID;\r\n data[\"N_Order_No\"] = nextProps.sumOfArticle.N_Order_No;\r\n data[\"A_Reference\"] = nextProps.sumOfArticle.A_Reference;\r\n data[\"A_Summary\"] = nextProps.sumOfArticle.A_Summary;\r\n data[\"I_Image\"] = nextProps.sumOfArticle.I_Image;\r\n N_ParentOrigin_ID = nextProps.sumOfArticle.N_ParentOrigin_ID;\r\n data[\"N_ParentOrigin_ID\"] = nextProps.sumOfArticle.N_ParentOrigin_ID;\r\n\r\n this.setState({\r\n data,\r\n billboardOrigins: await nextProps.billboardOrigins,\r\n homeLocationGroups: await nextProps.homeLocationGroups,\r\n user: auth.getCurrentUser()\r\n });\r\n } else {\r\n data[\"N_BillboardOrigin_ID\"] = 3;\r\n N_BillboardOrigin_ID = 3;\r\n data[\"N_HomeLocationGroup_ID\"] = 4;\r\n N_HomeLocationGroup_ID = 4;\r\n data[\"N_BillboardLarge_ID\"] = this.props.match.params.groupID;\r\n data[\"N_ParentOrigin_ID\"] = 3;\r\n N_ParentOrigin_ID = 3;\r\n\r\n this.setState({\r\n data,\r\n billboardOrigins: await nextProps.billboardOrigins,\r\n homeLocationGroups: await nextProps.homeLocationGroups,\r\n user: auth.getCurrentUser()\r\n });\r\n }\r\n }\r\n\r\n // mapToViewModel(sumOfArticle) {\r\n // //console.log(\"mapToViewModel-1\", sumOfArticle);\r\n // return {\r\n // ID: sumOfArticle.ID,\r\n // N_BillboardOrigin_ID: sumOfArticle.N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID: sumOfArticle.N_HomeLocationGroup_ID,\r\n // N_Order_No: sumOfArticle.N_Order_No,\r\n // A_Reference: sumOfArticle.A_Reference,\r\n // A_Summary: sumOfArticle.A_Summary,\r\n // // A_Description: sumOfArticle.A_Description,\r\n // I_Image: sumOfArticle.I_Image,\r\n // N_BillboardLarge_ID: sumOfArticle.N_BillboardLarge_ID,\r\n // N_ParentOrigin_ID: sumOfArticle.N_ParentOrigin_ID\r\n // };\r\n // }\r\n\r\n doSubmit = async () => {\r\n try {\r\n const sumOfArticleId = this.props.match.params.id;\r\n if (sumOfArticleId === \"new\") {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.addSumOfArticle(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n } else {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.changeSumOfArticle(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.title = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n this.props.history.push(\r\n `/sumOfArticles/sumOfArticlesList/${this.props.match.params.groupID}`\r\n );\r\n };\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_Image\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n cancelForm = () => {\r\n this.props.history.push(\r\n `/sumOfArticles/sumOfArticlesList/${this.props.match.params.groupID}`\r\n );\r\n };\r\n\r\n constructor() {\r\n // ...\r\n super();\r\n\r\n // this.handleRadioGroupChange = this.handleRadioGroupChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n render() {\r\n const billboardOrigin = this.state.billboardOrigin;\r\n const homeLocationGroup = this.state.homeLocationGroup;\r\n\r\n console.log(\r\n \"SumOfArticle render : \",\r\n this.state.N_BillboardOrigin_ID,\r\n this.state.data[\"N_BillboardOrigin_ID\"]\r\n );\r\n\r\n // // Babak's Note: *** Below 3 lines will stop rendering of child component 'TableBodyAppoints' section\r\n // // 'console.log(\"Hello 04 : \");' first *** :-\r\n // const { length: count } = billboardOrigin;\r\n // //if (count === 0) return

;\r\n // if (count === 0)\r\n // return

There are currently no Billboard Origins in the database.

;\r\n\r\n // // let string = this.props.match.params.id;\r\n // // let substring = \"new\";\r\n\r\n const sumOfArticleId = this.props.match.params.id;\r\n\r\n return (\r\n \r\n

SumOfArticle Form

\r\n
\r\n
\r\n {sumOfArticleId === \"new\"\r\n ? this.renderRadioGroup(\r\n \"N_BillboardOrigin_ID\",\r\n \"A_Origin\",\r\n \"Billboard Origin\",\r\n this.props.billboardOrigins,\r\n 2\r\n )\r\n : this.renderRadioGroup(\r\n \"N_BillboardOrigin_ID\",\r\n \"A_Origin\",\r\n \"Billboard Origin\",\r\n this.props.billboardOrigins,\r\n 99\r\n )}\r\n
\r\n {sumOfArticleId === \"new\"\r\n ? this.renderRadioGroup(\r\n \"N_HomeLocationGroup_ID\",\r\n \"A_Group\",\r\n \"Home Location Group\",\r\n this.props.homeLocationGroups,\r\n 1\r\n )\r\n : this.renderRadioGroup(\r\n \"N_HomeLocationGroup_ID\",\r\n \"A_Group\",\r\n \"Home Location Group\",\r\n this.props.homeLocationGroups,\r\n 1\r\n )}\r\n
\r\n {this.renderInput(\"N_Order_No\", \"Order Number\", \"number\")}\r\n
\r\n {this.renderInput(\"A_Reference\", \"Reference\")}\r\n\r\n
\r\n\r\n {this.renderInput(\"A_Summary\", \"Summary\")}\r\n {/* {this.renderInput(\"A_Description\", \"Description\")} */}\r\n
\r\n\r\n {this.renderImageFile(\"I_Image\", \"Upload Image\")}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n\r\n \r\n Clear Image\r\n \r\n
\r\n \r\n {/* */}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderButton(\"Save\")}\r\n {this.renderButtonCancel(\"Cancel\")}\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // sumOfArticles: state.entities.sumOfArticles.list.filter(sumOfArticle => !sumOfArticle.resolved)\r\n sumOfArticle: state.entities.sumOfArticles.listSingleRow,\r\n billboardOrigins: state.entities.billboardOrigins.list,\r\n homeLocationGroups: state.entities.homeLocationGroups.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadSumOfArticle: id => dispatch(loadSumOfArticle(id)),\r\n loadBillboardOrigins: () => dispatch(loadBillboardOrigins()),\r\n loadHomeLocationGroups: () => dispatch(loadHomeLocationGroups()),\r\n addSumOfArticle: (sumOfArticle, user, currentDate) =>\r\n dispatch(addSumOfArticle(sumOfArticle, user, currentDate)),\r\n changeSumOfArticle: (sumOfArticle, user, currentDate) =>\r\n dispatch(changeSumOfArticle(sumOfArticle, user, currentDate))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Groups)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.sumOfArticles' and 'this.props.loadGroups()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(SumOfArticleForm);\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\n\r\nclass SumOfArticlesTable extends Component {\r\n columns = [];\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount SumOfArticlesTable 01 : \");\r\n }\r\n\r\n articleColumn = {\r\n key: \"tree\",\r\n type: \"text\",\r\n content: article =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onArticle(article)}\r\n className={\r\n article.N_BB_Count > 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n }\r\n >\r\n {\"Article Level\"}\r\n \r\n ) : (\r\n 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n }\r\n >\r\n {\"Article Level\"}\r\n \r\n )\r\n };\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: sumOfArticle =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(sumOfArticle)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: sumOfArticle =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (sumOfArticle.N_BB_Count < 1) {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete Sum Of Article '${sumOfArticle.A_Reference}'?`\r\n )\r\n ) {\r\n this.props.onDelete(sumOfArticle);\r\n }\r\n }\r\n }}\r\n className={\r\n sumOfArticle.N_BB_Count > 0\r\n ? \"btn btn-danger btn-sm disabled clickableNon\"\r\n : \"btn btn-danger btn-sm enabled\"\r\n }\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n const sumOfArticles = [{ ID: 1 }];\r\n\r\n sumOfArticles.map(\r\n item => (\r\n this.columns.push({\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"B_Billboard\",\r\n label: \"Billboard\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_BillboardOrigin_ID\",\r\n label: \"BillboardOriginIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_HomeLocationGroup_ID\",\r\n label: \"HomeLocationGroupIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_Order_No\",\r\n label: \"Order\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Reference\",\r\n label: \"Reference\",\r\n type: \"text\"\r\n }),\r\n // this.columns.push({\r\n // path: \"A_Summary\",\r\n // label: \"Summary\",\r\n // type: \"text\"\r\n // }),\r\n // this.columns.push({\r\n // path: \"A_Description\",\r\n // label: \"Description\",\r\n // type: \"text\"\r\n // }),\r\n this.columns.push({ path: \"I_Image\", label: \"Image\", type: \"image\" }),\r\n this.columns.push({\r\n path: \"N_BillboardLarge_ID\",\r\n label: \"BillboardLargeIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"D_Inserted\",\r\n label: \"Inserted\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Inserted_By\",\r\n label: \"Inserted_By\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"D_Updated\",\r\n label: \"Updated\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Updated_By\",\r\n label: \"Updated_By\",\r\n type: \"text\"\r\n })\r\n )\r\n );\r\n\r\n this.columns.push(this.articleColumn);\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n }\r\n\r\n render() {\r\n //console.log(\"render usersTable\");\r\n const { sumOfArticlesList, onSort, sortColumn } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default SumOfArticlesTable;\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Redirect } from \"react-router\";\r\nimport { toast } from \"react-toastify\";\r\nimport SumOfArticlesTable from \"./sumOfArticlesTable\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport {\r\n loadSumOfArticles,\r\n loadParentOriginIDMenus,\r\n deleteSumOfArticle\r\n} from \"../../store/sumOfArticles\";\r\nimport { connect } from \"react-redux\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\n\r\nclass SumOfArticles extends Component {\r\n state = {\r\n sumOfArticles: [],\r\n articles: false,\r\n sumOfArticleForm: false,\r\n sumOfArticleID: 0,\r\n currentPage: 1,\r\n pageSize: 8,\r\n searchQuery: \"\",\r\n N_BillboardLarge_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n sortColumn: { path: \"N_Order_No\", order: \"asc\" }\r\n };\r\n\r\n async componentDidMount() {\r\n console.log(\r\n \"componentDidMount SumOfArticles 01 : \",\r\n this.props.match.params.groupID\r\n );\r\n\r\n // const billboardLargeID = this.props.match.params.groupID;\r\n\r\n // const { data: sumOfArticles } = await getSumOfArticlesID(billboardLargeID);\r\n\r\n // const { data: parentOrigin } = await getParentOriginIDMenus(\r\n // billboardLargeID\r\n // );\r\n // const rawParentOriginData = this.mapToViewModel(parentOrigin);\r\n // const N_ParentOrigin_ID = rawParentOriginData.N_ParentOrigin_ID;\r\n // const N_BillboardLarge_ID = rawParentOriginData.N_BillboardLarge_ID;\r\n\r\n // this.setState({ sumOfArticles, N_ParentOrigin_ID, N_BillboardLarge_ID });\r\n\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n const billboardLargeID = this.props.match.params.groupID;\r\n\r\n // window.alert(\"GroupsList, componentDidMount : \");\r\n\r\n await this.props.loadSumOfArticles(billboardLargeID);\r\n\r\n await this.props.loadParentOriginIDMenus(billboardLargeID);\r\n }\r\n\r\n // mapToViewModel(parentOrigin) {\r\n // //console.log(\"mapToViewModel-1\", month);\r\n // return {\r\n // N_ParentOrigin_ID: parentOrigin.N_ParentOrigin_ID,\r\n // N_BillboardLarge_ID: parentOrigin.N_BillboardLarge_ID\r\n // };\r\n // }\r\n\r\n handleArticle = async sumOfArticle => {\r\n try {\r\n if (sumOfArticle.N_BillboardOrigin_ID === 3) {\r\n this.setState({ articles: true, sumOfArticleID: sumOfArticle.ID });\r\n // window.location = `/articles/articles/${sumOfArticle.ID}`;\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handleUpdate = async sumOfArticle => {\r\n try {\r\n this.setState({\r\n sumOfArticleForm: true,\r\n sumOfArticleID: sumOfArticle.ID,\r\n groupID: this.props.match.params.groupID\r\n });\r\n // window.location = `/sumOfArticleForm/${sumOfArticle.ID}/${this.props.match.params.groupID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n // handleDelete = async sumOfArticle => {\r\n // const originalSumOfArticles = this.state.sumOfArticles;\r\n // const sumOfArticles = originalSumOfArticles.filter(\r\n // m => m.ID !== sumOfArticle.ID\r\n // );\r\n // this.setState({ sumOfArticles });\r\n\r\n // try {\r\n // await deleteSumOfArticle(sumOfArticle.ID);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 404)\r\n // toast.error(\"This sumOfArticle has already been deleted.\");\r\n\r\n // this.setState({ sumOfArticles: originalSumOfArticles });\r\n // }\r\n // };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n console.log(\"query : \", query);\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n console.log(\"searchQuery 2 : \", searchQuery);\r\n\r\n const allSumOfArticles = this.props.sumOfArticles;\r\n\r\n let filtered = allSumOfArticles;\r\n if (searchQuery)\r\n filtered = allSumOfArticles.filter(m =>\r\n m.A_Reference.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const sumOfArticles = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: sumOfArticles };\r\n };\r\n\r\n render() {\r\n //console.log(\"render sumOfArticles\");\r\n\r\n if (this.state.articles === true) {\r\n return (\r\n \r\n );\r\n }\r\n if (this.state.sumOfArticleForm === true) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // if (this.props.sumOfArticles.length === 0)\r\n // return
;\r\n\r\n const { length: count } = this.state.sumOfArticles;\r\n\r\n const {\r\n pageSize,\r\n currentPage,\r\n sortColumn,\r\n searchQuery\r\n // N_ParentOrigin_ID: ParentOriginID\r\n } = this.state;\r\n\r\n const parentOriginID = this.props.parentOriginIDMenus.N_ParentOrigin_ID;\r\n const billboardLarge_ID = this.props.parentOriginIDMenus\r\n .N_BillboardLarge_ID;\r\n\r\n // //\r\n // //Babak's Note: Below I renamed 'data' to 'sumOfArticles'\r\n // window.alert(\r\n // `searchQuery 1 : ${this.state.N_BillboardLarge_ID}, ${ParentOriginID}`\r\n // );\r\n\r\n const { totalCount, data: sumOfArticlesList } = this.getPagedData();\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Sum Of Articles

\r\n
\r\n \r\n New Sum Of Article\r\n \r\n

Showing {totalCount} Sum Of Articles in the database.

\r\n \r\n \r\n this.props.deleteSumOfArticle(sumOfArticle)\r\n }\r\n onUpdate={this.handleUpdate}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n \r\n {parentOriginID === 1\r\n ? \"Back to Menus\"\r\n : parentOriginID === 2\r\n ? \"Back to Groups\"\r\n : \"--\"}\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n sumOfArticles: state.entities.sumOfArticles.list,\r\n parentOriginIDMenus: state.entities.sumOfArticles.listParentOriginIDMenus\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadSumOfArticles: billboardLargeID =>\r\n dispatch(loadSumOfArticles(billboardLargeID)),\r\n loadParentOriginIDMenus: billboardLargeID =>\r\n dispatch(loadParentOriginIDMenus(billboardLargeID)),\r\n deleteSumOfArticle: sumOfArticle => dispatch(deleteSumOfArticle(sumOfArticle))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(SumOfArticles);\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport { loadArticle, addArticle, changeArticle } from \"../../store/articles\";\r\nimport { connect } from \"react-redux\";\r\n\r\nclass ArticleForm extends Form {\r\n state = {\r\n data: {\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_Order_No: \"\",\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n A_Description: \"\",\r\n I_Image: \"\",\r\n N_BillboardLarge_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n waitingForFileUpload: false\r\n },\r\n errors: {},\r\n billboardOrigin: [],\r\n //homeLocationGroup: [],\r\n N_BillboardOrigin_ID: \"\",\r\n N_HomeLocationGroup_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n user: []\r\n };\r\n\r\n schemaCreate = {\r\n ID: Joi.number(),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n // .required()\r\n // .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n // .required()\r\n // .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n A_Description: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n // .required()\r\n // .min(3)\r\n .max(2000)\r\n .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_BillboardLarge_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.number(),\r\n N_BillboardOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Billboard Origin\"),\r\n N_HomeLocationGroup_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n //.required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Home Location Group\"),\r\n N_Order_No: Joi.number()\r\n .required()\r\n // .min(1)\r\n // .max(100)\r\n .label(\"Order No\"),\r\n A_Reference: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n // .required()\r\n // .min(3)\r\n .max(30)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n // .required()\r\n // .min(3)\r\n .max(200)\r\n .label(\"Summary\"),\r\n A_Description: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n // .required()\r\n // .min(3)\r\n .max(2000)\r\n .label(\"Description\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n N_BillboardLarge_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n N_ParentOrigin_ID: Joi.number()\r\n .allow(\"\")\r\n .optional()\r\n };\r\n\r\n async populateArticles() {\r\n try {\r\n console.log(\"populateArticles-1\", this.props.match.params.sumOfArticleID);\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n const articleId = this.props.match.params.id;\r\n\r\n if (articleId === \"new\") {\r\n data[\"N_BillboardOrigin_ID\"] = 0;\r\n N_BillboardOrigin_ID = 0;\r\n data[\"N_HomeLocationGroup_ID\"] = 4;\r\n N_HomeLocationGroup_ID = 4;\r\n data[\"N_BillboardLarge_ID\"] = this.props.match.params.sumOfArticleID;\r\n data[\"N_ParentOrigin_ID\"] = 4;\r\n N_ParentOrigin_ID = 4;\r\n\r\n this.setState({\r\n data,\r\n // homeLocationGroup,\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID,\r\n user: auth.getCurrentUser()\r\n });\r\n return;\r\n }\r\n\r\n await this.props.loadArticle(articleId);\r\n\r\n // const { data: article } = await getArticle(ArticleId);\r\n\r\n // const rawData = this.mapToViewModel(article);\r\n\r\n // data[\"ID\"] = rawData.ID;\r\n // N_BillboardOrigin_ID = rawData.N_BillboardOrigin_ID;\r\n // data[\"N_BillboardOrigin_ID\"] = rawData.N_BillboardOrigin_ID;\r\n // N_HomeLocationGroup_ID = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_HomeLocationGroup_ID\"] = rawData.N_HomeLocationGroup_ID;\r\n // data[\"N_Order_No\"] = rawData.N_Order_No;\r\n // data[\"A_Reference\"] = rawData.A_Reference;\r\n // data[\"A_Summary\"] = rawData.A_Summary;\r\n // data[\"A_Description\"] = rawData.A_Description;\r\n // data[\"I_Image\"] = rawData.I_Image;\r\n // data[\"N_BillboardLarge_ID\"] = rawData.N_BillboardLarge_ID;\r\n // N_ParentOrigin_ID = rawData.N_ParentOrigin_ID;\r\n // data[\"N_ParentOrigin_ID\"] = rawData.N_ParentOrigin_ID;\r\n\r\n // console.log(\r\n // \"populateArticles-1\",\r\n // rawData.N_BillboardLarge_ID,\r\n // sumOfArticleID\r\n // );\r\n\r\n // this.setState({\r\n // data,\r\n // // billboardOrigin,\r\n // // homeLocationGroup,\r\n // N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID,\r\n // N_ParentOrigin_ID,\r\n // user: auth.getCurrentUser()\r\n // });\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n this.props.history.replace(\"/not-found\");\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateArticles();\r\n }\r\n\r\n // mapToViewModel(article) {\r\n // //console.log(\"mapToViewModel-1\", article);\r\n // return {\r\n // ID: article.ID,\r\n // N_BillboardOrigin_ID: article.N_BillboardOrigin_ID,\r\n // N_HomeLocationGroup_ID: article.N_HomeLocationGroup_ID,\r\n // N_Order_No: article.N_Order_No,\r\n // A_Reference: article.A_Reference,\r\n // A_Summary: article.A_Summary,\r\n // A_Description: article.A_Description,\r\n // I_Image: article.I_Image,\r\n // N_BillboardLarge_ID: article.N_BillboardLarge_ID,\r\n // N_ParentOrigin_ID: article.N_ParentOrigin_ID\r\n // };\r\n // }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_BillboardOrigin_ID,\r\n N_HomeLocationGroup_ID,\r\n N_ParentOrigin_ID\r\n } = this.state;\r\n\r\n if (\r\n this.props.match.params.id !== \"new\" &&\r\n this.state.data !== nextProps.sumOfArticle\r\n ) {\r\n data[\"ID\"] = nextProps.article.ID;\r\n N_BillboardOrigin_ID = nextProps.article.N_BillboardOrigin_ID;\r\n data[\"N_BillboardOrigin_ID\"] = nextProps.article.N_BillboardOrigin_ID;\r\n N_HomeLocationGroup_ID = nextProps.article.N_HomeLocationGroup_ID;\r\n data[\"N_HomeLocationGroup_ID\"] = nextProps.article.N_HomeLocationGroup_ID;\r\n data[\"N_Order_No\"] = nextProps.article.N_Order_No;\r\n data[\"A_Reference\"] = nextProps.article.A_Reference;\r\n data[\"A_Summary\"] = nextProps.article.A_Summary;\r\n data[\"A_Description\"] = nextProps.article.A_Description;\r\n data[\"I_Image\"] = nextProps.article.I_Image;\r\n N_ParentOrigin_ID = nextProps.article.N_ParentOrigin_ID;\r\n data[\"N_ParentOrigin_ID\"] = nextProps.article.N_ParentOrigin_ID;\r\n\r\n this.setState({\r\n data,\r\n user: auth.getCurrentUser()\r\n });\r\n } else {\r\n data[\"N_BillboardOrigin_ID\"] = 0;\r\n N_BillboardOrigin_ID = 0;\r\n data[\"N_HomeLocationGroup_ID\"] = 4;\r\n N_HomeLocationGroup_ID = 4;\r\n data[\"N_BillboardLarge_ID\"] = this.props.match.params.sumOfArticleID;\r\n data[\"N_ParentOrigin_ID\"] = 4;\r\n N_ParentOrigin_ID = 4;\r\n\r\n this.setState({\r\n data,\r\n user: auth.getCurrentUser()\r\n });\r\n }\r\n }\r\n\r\n doSubmit = async () => {\r\n try {\r\n const articleId = this.props.match.params.id;\r\n if (articleId === \"new\") {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.addArticle(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n } else {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.changeArticle(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.title = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n this.props.history.push(\r\n `/articles/articlesList/${this.props.match.params.sumOfArticleID}`\r\n );\r\n };\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_Image\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n cancelForm = () => {\r\n this.props.history.push(\r\n `/articles/articlesList/${this.props.match.params.sumOfArticleID}`\r\n );\r\n };\r\n\r\n constructor() {\r\n // ...\r\n super();\r\n\r\n // this.handleRadioGroupChange = this.handleRadioGroupChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n render() {\r\n const billboardOrigin = this.state.billboardOrigin;\r\n const homeLocationGroup = this.state.homeLocationGroup;\r\n\r\n // console.log(\r\n // \"Article render : \",\r\n // this.state.N_BillboardOrigin_ID,\r\n // this.state.data[\"N_BillboardOrigin_ID\"]\r\n // );\r\n\r\n // Babak's Note: *** Below 3 lines will stop rendering of child component 'TableBodyAppoints' section\r\n // 'console.log(\"Hello 04 : \");' first *** :-\r\n // const { length: count } = billboardOrigin;\r\n // //if (count === 0) return

;\r\n // if (count === 0)\r\n // return

There are currently no Billboard Origins in the database.

;\r\n\r\n // let string = this.props.match.params.id;\r\n // let substring = \"new\";\r\n\r\n return (\r\n \r\n

Article Form

\r\n
\r\n
\r\n
\r\n {this.renderInput(\"N_Order_No\", \"Order Number\", \"number\")}\r\n
\r\n {this.renderInput(\"A_Reference\", \"Reference\")}\r\n\r\n
\r\n\r\n {this.renderInput(\"A_Summary\", \"Summary\")}\r\n {this.renderTextArea(\"A_Description\", \"Description\")}\r\n
\r\n\r\n {this.renderImageFile(\"I_Image\", \"Upload Image\")}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n\r\n \r\n Clear Image\r\n \r\n
\r\n \r\n {/* */}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {this.renderButton(\"Save\")}\r\n {this.renderButtonCancel(\"Cancel\")}\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // sumOfArticles: state.entities.sumOfArticles.list.filter(sumOfArticle => !sumOfArticle.resolved)\r\n article: state.entities.articles.listSingleRow\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadArticle: id => dispatch(loadArticle(id)),\r\n addArticle: (Article, user, currentDate) =>\r\n dispatch(addArticle(Article, user, currentDate)),\r\n changeArticle: (Article, user, currentDate) =>\r\n dispatch(changeArticle(Article, user, currentDate))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Groups)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.sumOfArticles' and 'this.props.loadGroups()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ArticleForm);\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\n\r\nclass ArticlesTable extends Component {\r\n columns = [];\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount SumOfArticlesTable 01 : \");\r\n }\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: article =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(article)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: article =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (article.N_BB_Count < 1) {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete Article '${article.A_Reference}'?`\r\n )\r\n ) {\r\n this.props.onDelete(article);\r\n }\r\n }\r\n }}\r\n className={\r\n article.N_BB_Count > 0\r\n ? \"btn btn-danger btn-sm disabled clickableNon\"\r\n : \"btn btn-danger btn-sm enabled\"\r\n }\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n const articles = [{ ID: 1 }];\r\n\r\n articles.map(\r\n item => (\r\n this.columns.push({\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"B_Billboard\",\r\n label: \"Billboard\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_BillboardOrigin_ID\",\r\n label: \"BillboardOriginIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_HomeLocationGroup_ID\",\r\n label: \"HomeLocationGroupIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_Order_No\",\r\n label: \"Order\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Reference\",\r\n label: \"Reference\",\r\n type: \"text\"\r\n }),\r\n // this.columns.push({\r\n // path: \"A_Summary\",\r\n // label: \"Summary\",\r\n // type: \"text\"\r\n // }),\r\n // this.columns.push({\r\n // path: \"A_Description\",\r\n // label: \"Description\",\r\n // type: \"text\"\r\n // }),\r\n this.columns.push({ path: \"I_Image\", label: \"Image\", type: \"image\" }),\r\n this.columns.push({\r\n path: \"N_BillboardLarge_ID\",\r\n label: \"BillboardLargeIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"D_Inserted\",\r\n label: \"Inserted\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Inserted_By\",\r\n label: \"Inserted_By\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"D_Updated\",\r\n label: \"Updated\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Updated_By\",\r\n label: \"Updated_By\",\r\n type: \"text\"\r\n })\r\n )\r\n );\r\n\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n }\r\n\r\n render() {\r\n //console.log(\"render usersTable\");\r\n const { articlesList, onSort, sortColumn } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default ArticlesTable;\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Redirect } from \"react-router\";\r\nimport { toast } from \"react-toastify\";\r\nimport ArticlesTable from \"./articlesTable\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport {\r\n loadArticles,\r\n loadParentOriginIDMenus,\r\n deleteArticle\r\n} from \"../../store/articles\";\r\nimport { connect } from \"react-redux\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\n\r\nclass ArticlesList extends Component {\r\n state = {\r\n articles: [],\r\n articleForm: false,\r\n articleID: 0,\r\n sumOfArticleID: 0,\r\n currentPage: 1,\r\n pageSize: 8,\r\n searchQuery: \"\",\r\n N_BillboardLarge_ID: \"\",\r\n N_ParentOrigin_ID: \"\",\r\n sortColumn: { path: \"N_Order_No\", order: \"asc\" }\r\n };\r\n\r\n async componentDidMount() {\r\n console.log(\r\n \"componentDidMount Articles 01 : \",\r\n this.props.match.params.sumOfArticleID\r\n );\r\n\r\n // const billboardLargeID = this.props.match.params.sumOfArticleID;\r\n\r\n // const { data: articles } = await getArticlesID(billboardLargeID);\r\n // console.log(\"componentDidMount Articles 02 : \", articles);\r\n\r\n // const { data: parentOrigin } = await getParentOriginIDMenus(\r\n // billboardLargeID\r\n // );\r\n // const rawParentOriginData = this.mapToViewModel(parentOrigin);\r\n // const N_ParentOrigin_ID = rawParentOriginData.N_ParentOrigin_ID;\r\n // const N_BillboardLarge_ID = rawParentOriginData.N_BillboardLarge_ID;\r\n\r\n // this.setState({ articles, N_ParentOrigin_ID, N_BillboardLarge_ID });\r\n\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n const billboardLargeID = this.props.match.params.sumOfArticleID;\r\n\r\n // window.alert(\"GroupsList, componentDidMount : \");\r\n\r\n await this.props.loadArticles(billboardLargeID);\r\n\r\n await this.props.loadParentOriginIDMenus(billboardLargeID);\r\n }\r\n\r\n // mapToViewModel(parentOrigin) {\r\n // //console.log(\"mapToViewModel-1\", month);\r\n // return {\r\n // N_ParentOrigin_ID: parentOrigin.N_ParentOrigin_ID,\r\n // N_BillboardLarge_ID: parentOrigin.N_BillboardLarge_ID\r\n // };\r\n // }\r\n\r\n handleUpdate = async article => {\r\n try {\r\n this.setState({\r\n articleForm: true,\r\n articleID: article.ID,\r\n sumOfArticleID: this.props.match.params.sumOfArticleID\r\n });\r\n // window.location = `/articleForm/${article.ID}/${this.props.match.params.sumOfArticleID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n // handleDelete = async article => {\r\n // const originalArticles = this.state.articles;\r\n // const articles = originalArticles.filter(m => m.ID !== article.ID);\r\n // this.setState({ articles });\r\n\r\n // try {\r\n // // window.alert(`article ID : ${article.ID}`);\r\n // await deleteArticle(article.ID);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 404)\r\n // toast.error(\"This Article has already been deleted.\");\r\n\r\n // this.setState({ articles: originalArticles });\r\n // }\r\n // };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n console.log(\"query : \", query);\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n console.log(\"searchQuery 2 : \", searchQuery);\r\n\r\n const allArticles = this.props.articles;\r\n\r\n let filtered = allArticles;\r\n if (searchQuery)\r\n filtered = allArticles.filter(m =>\r\n m.A_Reference.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const articles = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: articles };\r\n };\r\n\r\n render() {\r\n //console.log(\"render articles\");\r\n\r\n if (this.state.articleForm === true) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // if (this.props.articles.length === 0)\r\n // return
;\r\n\r\n const { length: count } = this.state.articles;\r\n\r\n const {\r\n pageSize,\r\n currentPage,\r\n sortColumn,\r\n searchQuery\r\n // N_ParentOrigin_ID: ParentOriginID\r\n } = this.state;\r\n\r\n const parentOriginID = this.props.parentOriginIDMenus.N_ParentOrigin_ID;\r\n const billboardLarge_ID = this.props.parentOriginIDMenus\r\n .N_BillboardLarge_ID;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'articles'\r\n // console.log(\"searchQuery 1 : \", searchQuery);\r\n\r\n const { totalCount, data: articlesList } = this.getPagedData();\r\n\r\n // if (totalCount === 0) return
;\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Articles

\r\n
\r\n \r\n New Article\r\n \r\n

Showing {totalCount} Articles in the database.

\r\n \r\n this.props.deleteArticle(article)}\r\n onUpdate={this.handleUpdate}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n \r\n {parentOriginID === 1\r\n ? \"Back to Menus\"\r\n : parentOriginID === 2\r\n ? \"Back to Groups\"\r\n : parentOriginID === 3\r\n ? \"Back to Sum Of Articles\"\r\n : \"--\"}\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n articles: state.entities.articles.list,\r\n parentOriginIDMenus: state.entities.articles.listParentOriginIDMenus\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadArticles: billboardLargeID => dispatch(loadArticles(billboardLargeID)),\r\n loadParentOriginIDMenus: billboardLargeID =>\r\n dispatch(loadParentOriginIDMenus(billboardLargeID)),\r\n deleteArticle: article => dispatch(deleteArticle(article))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(ArticlesList);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeBillboards\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeBillboardsRequested' or 'homeBillboardsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeBillboards' below represents the 'state':-\r\n homeBillboardsRequested: (homeBillboards, action) => {\r\n console.log(\"homeBillboardsRequested : \", action.payload);\r\n homeBillboards.loading = true;\r\n },\r\n homeBillboardsReceived: (homeBillboards, action) => {\r\n console.log(\"homeBillboardsReceived : \", action.payload);\r\n homeBillboards.list = action.payload;\r\n homeBillboards.loading = false;\r\n homeBillboards.lastFetch = Date.now();\r\n },\r\n homeBillboardsRequestedFailed: (homeBillboards, action) => {\r\n homeBillboards.loading = false;\r\n // window.alert(`No HomeBillboards found.`);\r\n },\r\n\r\n homeBillboardsOnNavbarRequested: (homeBillboards, action) => {\r\n console.log(\"homeBillboardsOnNavbarRequested : \", action.payload);\r\n homeBillboards.loading = true;\r\n },\r\n homeBillboardsOnNavbarReceived: (homeBillboards, action) => {\r\n console.log(\"homeBillboardsOnNavbarReceived : \", action.payload);\r\n homeBillboards.listOnNavvar = action.payload;\r\n homeBillboards.loading = false;\r\n homeBillboards.lastFetch = Date.now();\r\n },\r\n homeBillboardsOnNavbarRequestedFailed: (homeBillboards, action) => {\r\n homeBillboards.loading = false;\r\n // window.alert(`No HomeBillboards found.`);\r\n },\r\n\r\n homeBillboardRequested: (homeBillboard, action) => {\r\n console.log(\"homeBillboardRequested : \", action.payload);\r\n homeBillboard.loading = true;\r\n },\r\n homeBillboardReceived: (homeBillboard, action) => {\r\n console.log(\"homeBillboardReceived : \", action.payload);\r\n homeBillboard.listSingleRow = action.payload;\r\n homeBillboard.loading = false;\r\n homeBillboard.lastFetch = Date.now();\r\n },\r\n homeBillboardRequestedFailed: (homeBillboard, action) => {\r\n homeBillboard.loading = false;\r\n // window.alert(`No HomeBillboard found.`);\r\n },\r\n homeBillboardChangeRequested: (homeBillboard, action) => {\r\n console.log(\"homeBillboardChangeRequested : \", action.payload);\r\n homeBillboard.loading = true;\r\n },\r\n homeBillboardChangeFailed: (homeBillboard, action) => {\r\n homeBillboard.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboard api at the back end.\r\n // const { ID: homeBillboardId, A_Name: homeBillboardName } = action.payload;\r\n\r\n // window.alert(`HomeBillboard '${homeBillboardName}' no longer exists.`);\r\n\r\n // const index = homeBillboard.list.findIndex(homeBillboard => homeBillboard.ID === homeBillboardId);\r\n // //console.log(\"homeBillboardDeleted ha \", index);\r\n // homeBillboard.list.splice(index, 1);\r\n },\r\n homeBillboardChanged: (homeBillboard, action) => {\r\n homeBillboard.loading = false;\r\n },\r\n homeBillboardDeleteRequested: (homeBillboard, action) => {\r\n console.log(\"homeBillboardDeleteRequested : \", action.payload);\r\n homeBillboard.loading = true;\r\n },\r\n homeBillboardDeleteFailed: (homeBillboards, action) => {\r\n homeBillboards.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboard api at the back end.\r\n const { ID: homeBillboardId, A_Name: homeBillboardName } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeBillboard '${homeBillboardName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeBillboards.list.findIndex(\r\n homeBillboard => homeBillboard.ID === homeBillboardId\r\n );\r\n //console.log(\"homeBillboardDeleted ha \", index);\r\n homeBillboards.list.splice(index, 1);\r\n },\r\n homeBillboardDeleted: (homeBillboards, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboard api at the back end.\r\n const { ID: homeBillboardID } = action.payload;\r\n // console.log(\"homeBillboardDeleted ha \", action.payload, homeBillboardID, homeBillboards);\r\n const index = homeBillboards.list.findIndex(\r\n homeBillboard => homeBillboard.ID === homeBillboardID\r\n );\r\n //console.log(\"homeBillboardDeleted, ha! ha! \", index);\r\n homeBillboards.list.splice(index, 1);\r\n },\r\n homeBillboardAddRequested: (homeBillboard, action) => {\r\n console.log(\"homeBillboardAddRequested : \", action.payload);\r\n homeBillboard.loading = true;\r\n },\r\n homeBillboardAddFailed: (homeBillboard, action) => {\r\n homeBillboard.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeBillboards' below represents the 'state':-\r\n homeBillboardAdded: (homeBillboards, action) => {\r\n console.log(\"homeBillboardAdded : \", action.payload);\r\n homeBillboards.list.push(action.payload);\r\n }\r\n // homeBillboardAdded: (homeBillboards, action) => {\r\n // homeBillboards.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeBillboardDeleted: (homeBillboards, action) => {\r\n // console.log(\"homeBillboardDeleted ha \", action.payload.ID);\r\n // homeBillboards.list.filter(homeBillboard => homeBillboard.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeBillboardAddRequested,\r\n homeBillboardAdded,\r\n homeBillboardAddFailed,\r\n homeBillboardChangeRequested,\r\n homeBillboardChanged,\r\n homeBillboardChangeFailed,\r\n homeBillboardDeleteRequested,\r\n homeBillboardDeleted,\r\n homeBillboardDeleteFailed,\r\n homeBillboardsReceived,\r\n homeBillboardsRequested,\r\n homeBillboardsRequestedFailed,\r\n homeBillboardsOnNavbarReceived,\r\n homeBillboardsOnNavbarRequested,\r\n homeBillboardsOnNavbarRequestedFailed,\r\n homeBillboardReceived,\r\n homeBillboardRequested,\r\n homeBillboardRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/homeBillboards\";\r\n\r\nexport const loadHomeBillboards = () => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.homeBillboards;\r\n\r\n // console.log(\"loadHomeBillboards lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/main\",\r\n onStart: homeBillboardsRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardsReceived.type,\r\n onError: homeBillboardsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeBillboard = homeBillboardID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.homeBillboards;\r\n\r\n //console.log(\"loadHomeBillboard : \", homeBillboardID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardID,\r\n onStart: homeBillboardRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardReceived.type,\r\n onError: homeBillboardRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeBillboard':-\r\nexport const addHomeBillboard = (homeBillboard, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeBillboardAddRequested.type,\r\n //data: homeBillboard,\r\n data: {\r\n N_OrderNo: homeBillboard.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboard.N_RadioGrpDirections_ID,\r\n N_HomeBillboards_ID: homeBillboard.N_HomeBillboards_ID,\r\n A_Reference: homeBillboard.A_Reference,\r\n A_Summary: homeBillboard.A_Summary,\r\n A_Description: homeBillboard.A_Description,\r\n A_HoverSummary01: homeBillboard.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboard.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboard.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboard.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboard.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboard.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboard.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboard.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboard.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboard.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboard.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboard.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboard.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboard.A_HoverSummary08_Link,\r\n B_HoverSummary08_External: homeBillboard.B_HoverSummary08_External,\r\n A_BGC: homeBillboard.A_BGC,\r\n A_BGC_Shadow: homeBillboard.A_BGC_Shadow,\r\n B_BGC_Shadow_Off: homeBillboard.B_BGC_Shadow_Off,\r\n A_TextFC: homeBillboard.A_TextFC,\r\n I_Image: homeBillboard.I_Image,\r\n I_ImageOnImage: homeBillboard.I_ImageOnImage,\r\n A_Button_Link: homeBillboard.A_Button_Link,\r\n B_Button_Link_External: homeBillboard.B_Button_Link_External,\r\n A_Button: homeBillboard.A_Button,\r\n B_GoogleMapHomeBiilboard: homeBillboard.B_GoogleMapHomeBiilboard,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: homeBillboardAdded.type,\r\n onError: homeBillboardAddFailed.type\r\n });\r\n\r\nexport const getHomeBillboards = createSelector(\r\n state => state.entities.homeBillboards,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeBillboards, projects) has not changed then do not requery again:-\r\n // (homeBillboards) => homeBillboards.list.filter(homeBillboard => !homeBillboard.B_Active)\r\n homeBillboards => homeBillboards.list\r\n);\r\n\r\nexport const changeHomeBillboard = (homeBillboard, user, currentDate) =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboard.ID,\r\n method: \"put\",\r\n onStart: homeBillboardChangeRequested.type,\r\n data: {\r\n N_OrderNo: homeBillboard.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboard.N_RadioGrpDirections_ID,\r\n N_HomeBillboards_ID: homeBillboard.N_HomeBillboards_ID,\r\n A_Reference: homeBillboard.A_Reference,\r\n A_Summary: homeBillboard.A_Summary,\r\n A_Description: homeBillboard.A_Description,\r\n A_HoverSummary01: homeBillboard.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboard.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboard.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboard.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboard.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboard.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboard.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboard.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboard.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboard.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboard.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboard.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboard.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboard.A_HoverSummary08_Link,\r\n B_HoverSummary08_External: homeBillboard.B_HoverSummary08_External,\r\n A_BGC: homeBillboard.A_BGC,\r\n A_BGC_Shadow: homeBillboard.A_BGC_Shadow,\r\n B_BGC_Shadow_Off: homeBillboard.B_BGC_Shadow_Off,\r\n A_TextFC: homeBillboard.A_TextFC,\r\n I_Image: homeBillboard.I_Image,\r\n I_ImageOnImage: homeBillboard.I_ImageOnImage,\r\n A_Button_Link: homeBillboard.A_Button_Link,\r\n B_Button_Link_External: homeBillboard.B_Button_Link_External,\r\n A_Button: homeBillboard.A_Button,\r\n B_GoogleMapHomeBiilboard: homeBillboard.B_GoogleMapHomeBiilboard,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: homeBillboardChanged.type,\r\n onError: homeBillboardChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeBillboard = homeBillboard =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboard.ID,\r\n method: \"delete\",\r\n onStart: homeBillboardDeleteRequested.type,\r\n data: { ID: homeBillboard.ID, A_Reference: homeBillboard.A_Reference },\r\n onSuccess: homeBillboardDeleted.type,\r\n onError: homeBillboardDeleteFailed.type\r\n });\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"radioGrpDirections\",\r\n initialState: {\r\n list: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'radioGrpDirectionsRequested' or 'radioGrpDirectionsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'radioGrpDirections' below represents the 'state':-\r\n radioGrpDirectionsRequested: (radioGrpDirections, action) => {\r\n console.log(\"radioGrpDirectionsRequested : \", action.payload);\r\n radioGrpDirections.loading = true;\r\n },\r\n radioGrpDirectionsReceived: (radioGrpDirections, action) => {\r\n console.log(\"radioGrpDirectionsReceived : \", action.payload);\r\n radioGrpDirections.list = action.payload;\r\n radioGrpDirections.loading = false;\r\n radioGrpDirections.lastFetch = Date.now();\r\n },\r\n radioGrpDirectionsRequestedFailed: (radioGrpDirections, action) => {\r\n radioGrpDirections.loading = false;\r\n // window.alert(`No RadioGrpDirections found.`);\r\n },\r\n radioGrpDirectionRequested: (radioGrpDirection, action) => {\r\n console.log(\"radioGrpDirectionRequested : \", action.payload);\r\n radioGrpDirection.loading = true;\r\n },\r\n radioGrpDirectionReceived: (radioGrpDirection, action) => {\r\n console.log(\"radioGrpDirectionReceived : \", action.payload);\r\n radioGrpDirection.list = action.payload;\r\n radioGrpDirection.loading = false;\r\n radioGrpDirection.lastFetch = Date.now();\r\n },\r\n radioGrpDirectionRequestedFailed: (radioGrpDirection, action) => {\r\n radioGrpDirection.loading = false;\r\n // window.alert(`No RadioGrpDirection found.`);\r\n },\r\n radioGrpDirectionChangeRequested: (radioGrpDirection, action) => {\r\n console.log(\"radioGrpDirectionChangeRequested : \", action.payload);\r\n radioGrpDirection.loading = true;\r\n },\r\n radioGrpDirectionChangeFailed: (radioGrpDirection, action) => {\r\n radioGrpDirection.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete radioGrpDirection api at the back end.\r\n // const { ID: radioGrpDirectionId, A_Name: radioGrpDirectionName } = action.payload;\r\n\r\n // window.alert(`RadioGrpDirection '${radioGrpDirectionName}' no longer exists.`);\r\n\r\n // const index = radioGrpDirection.list.findIndex(radioGrpDirection => radioGrpDirection.ID === radioGrpDirectionId);\r\n // //console.log(\"radioGrpDirectionDeleted ha \", index);\r\n // radioGrpDirection.list.splice(index, 1);\r\n },\r\n radioGrpDirectionChanged: (radioGrpDirection, action) => {\r\n radioGrpDirection.loading = false;\r\n },\r\n radioGrpDirectionDeleteRequested: (radioGrpDirection, action) => {\r\n console.log(\"radioGrpDirectionDeleteRequested : \", action.payload);\r\n radioGrpDirection.loading = true;\r\n },\r\n radioGrpDirectionDeleteFailed: (radioGrpDirections, action) => {\r\n radioGrpDirections.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete radioGrpDirection api at the back end.\r\n const {\r\n ID: radioGrpDirectionId,\r\n A_Name: radioGrpDirectionName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with radioGrpDirection '${radioGrpDirectionName}'. ${action.payload}`\r\n );\r\n\r\n const index = radioGrpDirections.list.findIndex(\r\n radioGrpDirection => radioGrpDirection.ID === radioGrpDirectionId\r\n );\r\n //console.log(\"radioGrpDirectionDeleted ha \", index);\r\n radioGrpDirections.list.splice(index, 1);\r\n },\r\n radioGrpDirectionDeleted: (radioGrpDirections, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete radioGrpDirection api at the back end.\r\n const { ID: radioGrpDirectionID } = action.payload;\r\n // console.log(\"radioGrpDirectionDeleted ha \", action.payload, radioGrpDirectionID, radioGrpDirections);\r\n const index = radioGrpDirections.list.findIndex(\r\n radioGrpDirection => radioGrpDirection.ID === radioGrpDirectionID\r\n );\r\n //console.log(\"radioGrpDirectionDeleted, ha! ha! \", index);\r\n radioGrpDirections.list.splice(index, 1);\r\n },\r\n radioGrpDirectionAddRequested: (radioGrpDirection, action) => {\r\n console.log(\"radioGrpDirectionAddRequested : \", action.payload);\r\n radioGrpDirection.loading = true;\r\n },\r\n radioGrpDirectionAddFailed: (radioGrpDirection, action) => {\r\n radioGrpDirection.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'radioGrpDirections' below represents the 'state':-\r\n radioGrpDirectionAdded: (radioGrpDirections, action) => {\r\n console.log(\"radioGrpDirectionAdded : \", action.payload);\r\n radioGrpDirections.list.push(action.payload);\r\n }\r\n // radioGrpDirectionAdded: (radioGrpDirections, action) => {\r\n // radioGrpDirections.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // radioGrpDirectionDeleted: (radioGrpDirections, action) => {\r\n // console.log(\"radioGrpDirectionDeleted ha \", action.payload.ID);\r\n // radioGrpDirections.list.filter(radioGrpDirection => radioGrpDirection.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n radioGrpDirectionAddRequested,\r\n radioGrpDirectionAdded,\r\n radioGrpDirectionAddFailed,\r\n radioGrpDirectionChangeRequested,\r\n radioGrpDirectionChanged,\r\n radioGrpDirectionChangeFailed,\r\n radioGrpDirectionDeleteRequested,\r\n radioGrpDirectionDeleted,\r\n radioGrpDirectionDeleteFailed,\r\n radioGrpDirectionsReceived,\r\n radioGrpDirectionsRequested,\r\n radioGrpDirectionsRequestedFailed,\r\n radioGrpDirectionReceived,\r\n radioGrpDirectionRequested,\r\n radioGrpDirectionRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/radioGrpDirections\";\r\n\r\nexport const loadRadioGrpDirections = () => (dispatch, getState) => {\r\n const { lastFetch } = getState().entities.radioGrpDirections;\r\n\r\n console.log(\"loadRadioGrpDirections lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: radioGrpDirectionsRequested.type,\r\n method: \"get\",\r\n onSuccess: radioGrpDirectionsReceived.type,\r\n onError: radioGrpDirectionsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadRadioGrpDirection = radioGrpDirectionID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.radioGrpDirections;\r\n\r\n //console.log(\"loadRadioGrpDirection : \", radioGrpDirectionID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + radioGrpDirectionID,\r\n onStart: radioGrpDirectionRequested.type,\r\n method: \"get\",\r\n onSuccess: radioGrpDirectionReceived.type,\r\n onError: radioGrpDirectionRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addRadioGrpDirection':-\r\nexport const addRadioGrpDirection = radioGrpDirection =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: radioGrpDirectionAddRequested.type,\r\n data: radioGrpDirection,\r\n onSuccess: radioGrpDirectionAdded.type,\r\n onError: radioGrpDirectionAddFailed.type\r\n });\r\n\r\nexport const getRadioGrpDirections = createSelector(\r\n state => state.entities.radioGrpDirections,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (radioGrpDirections, projects) has not changed then do not requery again:-\r\n // (radioGrpDirections) => radioGrpDirections.list.filter(radioGrpDirection => !radioGrpDirection.B_Active)\r\n radioGrpDirections => radioGrpDirections.list\r\n);\r\n\r\nexport const changeRadioGrpDirection = radioGrpDirection =>\r\n apiCallBegan({\r\n url: url + \"/\" + radioGrpDirection.ID,\r\n method: \"put\",\r\n onStart: radioGrpDirectionChangeRequested.type,\r\n data: {\r\n A_Group: radioGrpDirection.A_Group\r\n },\r\n onSuccess: radioGrpDirectionChanged.type,\r\n onError: radioGrpDirectionChangeFailed.type\r\n });\r\n\r\nexport const deleteRadioGrpDirection = radioGrpDirection =>\r\n apiCallBegan({\r\n url: url + \"/\" + radioGrpDirection.ID,\r\n method: \"delete\",\r\n onStart: radioGrpDirectionDeleteRequested.type,\r\n data: { ID: radioGrpDirection.ID, A_Group: radioGrpDirection.A_Group },\r\n onSuccess: radioGrpDirectionDeleted.type,\r\n onError: radioGrpDirectionDeleteFailed.type\r\n });\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport {\r\n loadHomeBillboard,\r\n addHomeBillboard,\r\n changeHomeBillboard\r\n} from \"../../store/homeBillboards\";\r\nimport { loadRadioGrpDirections } from \"../../store/radioGrpDirections\";\r\nimport { connect } from \"react-redux\";\r\n\r\n//import ControlledEditor from \"../common/controlledEditor\";\r\n\r\nclass HomeBillboardForm extends Form {\r\n state = {\r\n data: {\r\n N_OrderNo: \"\",\r\n N_RadioGrpDirections_ID: \"\",\r\n // N_HomeBillboards_ID: \"\",\r\n // A_BillboardLargeLink: \"\",\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n A_Description: \"\",\r\n A_HoverSummary01: \"\",\r\n A_HoverSummary01_Link: \"\",\r\n A_HoverSummary02: \"\",\r\n A_HoverSummary02_Link: \"\",\r\n A_HoverSummary03: \"\",\r\n A_HoverSummary03_Link: \"\",\r\n A_HoverSummary04: \"\",\r\n A_HoverSummary04_Link: \"\",\r\n A_HoverSummary05: \"\",\r\n A_HoverSummary05_Link: \"\",\r\n A_HoverSummary06: \"\",\r\n A_HoverSummary07: \"\",\r\n A_HoverSummary08: \"\",\r\n A_HoverSummary08_Link: \"\",\r\n B_HoverSummary08_External: false,\r\n A_BGC: \"\",\r\n A_BGC_Shadow: \"\",\r\n B_BGC_Shadow_Off: true,\r\n A_TextFC: \"\",\r\n I_Image: \"\",\r\n // N_PhotoSize01: \"\",\r\n waitingForFileUpload: false,\r\n I_ImageOnImage: \"\",\r\n // N_PhotoSize02: \"\",\r\n waitingForFileUpload02: false,\r\n A_Button_Link: \"\",\r\n B_Button_Link_External: false,\r\n A_Button: \"\",\r\n B_GoogleMapHomeBiilboard: false\r\n },\r\n errors: {},\r\n radioGrpDirection: [],\r\n N_RadioGrpDirections_ID: \"\",\r\n user: []\r\n };\r\n\r\n schemaCreate = {\r\n ID: Joi.number(),\r\n N_OrderNo: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n N_RadioGrpDirections_ID: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(10)\r\n .label(\"Direction\"),\r\n // N_HomeBillboards_ID: Joi.number()\r\n // .allow(\"\")\r\n // .optional(),\r\n // A_BillboardLargeLink: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"URL Link\"),\r\n A_Reference: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(20)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n //.min(5)\r\n .max(25)\r\n .label(\"Summary\"),\r\n A_Description: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(10)\r\n .label(\"Description\"),\r\n A_HoverSummary01: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover One\"),\r\n A_HoverSummary01_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover One URL Link\"),\r\n A_HoverSummary02: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Two\"),\r\n A_HoverSummary02_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Two URL Link\"),\r\n A_HoverSummary03: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Three\"),\r\n A_HoverSummary03_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Three URL Link\"),\r\n A_HoverSummary04: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Four\"),\r\n A_HoverSummary04_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Four URL Link\"),\r\n A_HoverSummary05: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Five\"),\r\n A_HoverSummary05_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Five URL Link\"),\r\n A_HoverSummary06: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(70)\r\n .label(\"Hover Six\"),\r\n A_HoverSummary07: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(73)\r\n .label(\"Hover Seven\"),\r\n A_HoverSummary08: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Eight\"),\r\n A_HoverSummary08_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Eight URL Link\"),\r\n B_HoverSummary08_External: Joi.boolean().label(\"Hover Eight External Link\"),\r\n A_BGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Background Colour\"),\r\n A_BGC_Shadow: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Background Colour Shadow\"),\r\n B_BGC_Shadow_Off: Joi.boolean().label(\"Background Colour Shadow Off\"),\r\n A_TextFC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Title Text Colour\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n I_ImageOnImage: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"ImageOnImage\"),\r\n N_PhotoSize02: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload02: Joi.boolean().optional(),\r\n A_Button_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Learn More URL Link\"),\r\n B_Button_Link_External: Joi.boolean().label(\"Learn More URL Link External\"),\r\n A_Button: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(15)\r\n .label(\"Learn More Button\"),\r\n B_GoogleMapHomeBiilboard: Joi.boolean().label(\"Google Map\")\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.number(),\r\n N_OrderNo: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n N_RadioGrpDirections_ID: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(10)\r\n .label(\"Direction\"),\r\n // N_HomeBillboards_ID: Joi.number()\r\n // .allow(\"\")\r\n // .optional(),\r\n // A_BillboardLargeLink: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"URL Link\"),\r\n A_Reference: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(20)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n //.min(5)\r\n .max(25)\r\n .label(\"Summary\"),\r\n A_Description: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n //.min(5)\r\n .max(10)\r\n .label(\"Description\"),\r\n A_HoverSummary01: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover One\"),\r\n A_HoverSummary01_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover One URL Link\"),\r\n A_HoverSummary02: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Two\"),\r\n A_HoverSummary02_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Two URL Link\"),\r\n A_HoverSummary03: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Three\"),\r\n A_HoverSummary03_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Three URL Link\"),\r\n A_HoverSummary04: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Four\"),\r\n A_HoverSummary04_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Four URL Link\"),\r\n A_HoverSummary05: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Five\"),\r\n A_HoverSummary05_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Five URL Link\"),\r\n A_HoverSummary06: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(70)\r\n .label(\"Hover Six\"),\r\n A_HoverSummary07: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(73)\r\n .label(\"Hover Seven\"),\r\n A_HoverSummary08: Joi.string()\r\n .allow(\"\")\r\n .optional()\r\n .max(20)\r\n .label(\"Hover Eight\"),\r\n A_HoverSummary08_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Hover Eight URL Link\"),\r\n B_HoverSummary08_External: Joi.boolean().label(\"Hover Eight External Link\"),\r\n A_BGC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Background Colour\"),\r\n A_BGC_Shadow: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Background Colour Shadow\"),\r\n B_BGC_Shadow_Off: Joi.boolean().label(\"Background Colour Shadow Off\"),\r\n A_TextFC: Joi.string()\r\n .required()\r\n .min(5)\r\n .max(50)\r\n .label(\"Title Text Colour\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n I_ImageOnImage: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"ImageOnImage\"),\r\n N_PhotoSize02: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload02: Joi.boolean().optional(),\r\n A_Button_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"Learn More URL Link\"),\r\n B_Button_Link_External: Joi.boolean().label(\"Learn More URL Link External\"),\r\n A_Button: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(15)\r\n .label(\"Learn More Button\"),\r\n B_GoogleMapHomeBiilboard: Joi.boolean().label(\"Google Map\")\r\n };\r\n\r\n async populateHomeBillboard() {\r\n //console.log(\"populateHomeBillboard-1 : \", this.props.match.params.id);\r\n try {\r\n let data = { ...this.state.data };\r\n let {\r\n N_RadioGrpDirections_ID\r\n // N_HomeBillboards_ID,\r\n // A_BillboardLargeLink\r\n } = this.state;\r\n\r\n await this.props.loadRadioGrpDirections();\r\n\r\n const homeBillboardId = this.props.match.params.id;\r\n\r\n if (homeBillboardId === \"new\") {\r\n data[\"N_RadioGrpDirections_ID\"] = 1;\r\n N_RadioGrpDirections_ID = 1;\r\n // data[\"N_HomeBillboards_ID\"] = null;\r\n // N_HomeBillboards_ID = null;\r\n // data[\"A_BillboardLargeLink\"] = null;\r\n // A_BillboardLargeLink = null;\r\n\r\n this.setState({\r\n data,\r\n N_RadioGrpDirections_ID,\r\n // N_HomeBillboards_ID,\r\n user: auth.getCurrentUser()\r\n });\r\n return;\r\n }\r\n\r\n await this.props.loadHomeBillboard(homeBillboardId);\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n this.props.history.replace(\"/not-found\");\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateHomeBillboard();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_RadioGrpDirections_ID\r\n // N_HomeBillboards_ID,\r\n // A_BillboardLargeLink\r\n } = this.state;\r\n\r\n if (\r\n this.props.match.params.id !== \"new\" &&\r\n this.state.data !== nextProps.homeBillboard\r\n ) {\r\n data[\"ID\"] = nextProps.homeBillboard.ID;\r\n data[\"N_OrderNo\"] = nextProps.homeBillboard.N_OrderNo;\r\n N_RadioGrpDirections_ID = nextProps.homeBillboard.N_RadioGrpDirections_ID;\r\n data[\"N_RadioGrpDirections_ID\"] =\r\n nextProps.homeBillboard.N_RadioGrpDirections_ID;\r\n data[\"A_Reference\"] = nextProps.homeBillboard.A_Reference;\r\n data[\"A_Summary\"] = nextProps.homeBillboard.A_Summary;\r\n data[\"A_Description\"] = nextProps.homeBillboard.A_Description;\r\n data[\"A_HoverSummary01\"] = nextProps.homeBillboard.A_HoverSummary01;\r\n data[\"A_HoverSummary01_Link\"] =\r\n nextProps.homeBillboard.A_HoverSummary01_Link;\r\n data[\"A_HoverSummary02\"] = nextProps.homeBillboard.A_HoverSummary02;\r\n data[\"A_HoverSummary02_Link\"] =\r\n nextProps.homeBillboard.A_HoverSummary02_Link;\r\n data[\"A_HoverSummary03\"] = nextProps.homeBillboard.A_HoverSummary03;\r\n data[\"A_HoverSummary03_Link\"] =\r\n nextProps.homeBillboard.A_HoverSummary03_Link;\r\n data[\"A_HoverSummary04\"] = nextProps.homeBillboard.A_HoverSummary04;\r\n data[\"A_HoverSummary04_Link\"] =\r\n nextProps.homeBillboard.A_HoverSummary04_Link;\r\n data[\"A_HoverSummary05\"] = nextProps.homeBillboard.A_HoverSummary05;\r\n data[\"A_HoverSummary05_Link\"] =\r\n nextProps.homeBillboard.A_HoverSummary05_Link;\r\n data[\"A_HoverSummary06\"] = nextProps.homeBillboard.A_HoverSummary06;\r\n data[\"A_HoverSummary07\"] = nextProps.homeBillboard.A_HoverSummary07;\r\n data[\"A_HoverSummary08\"] = nextProps.homeBillboard.A_HoverSummary08;\r\n data[\"A_HoverSummary08_Link\"] =\r\n nextProps.homeBillboard.A_HoverSummary08_Link;\r\n data[\"B_HoverSummary08_External\"] =\r\n nextProps.homeBillboard.B_HoverSummary08_External;\r\n data[\"A_BGC\"] = nextProps.homeBillboard.A_BGC;\r\n data[\"A_BGC_Shadow\"] = nextProps.homeBillboard.A_BGC_Shadow;\r\n data[\"B_BGC_Shadow_Off\"] = nextProps.homeBillboard.B_BGC_Shadow_Off;\r\n data[\"A_TextFC\"] = nextProps.homeBillboard.A_TextFC;\r\n data[\"I_Image\"] = nextProps.homeBillboard.I_Image;\r\n // data[\"N_PhotoSize01\"] = 10000;\r\n data[\"I_ImageOnImage\"] = nextProps.homeBillboard.I_ImageOnImage;\r\n // data[\"N_PhotoSize02\"] = 10000;\r\n data[\"A_Button_Link\"] = nextProps.homeBillboard.A_Button_Link;\r\n data[\"B_Button_Link_External\"] =\r\n nextProps.homeBillboard.B_Button_Link_External;\r\n data[\"A_Button\"] = nextProps.homeBillboard.A_Button;\r\n data[\"B_GoogleMapHomeBiilboard\"] =\r\n nextProps.homeBillboard.B_GoogleMapHomeBiilboard;\r\n\r\n this.setState({\r\n data,\r\n N_RadioGrpDirections_ID,\r\n radioGrpDirections: await nextProps.radioGrpDirections,\r\n user: auth.getCurrentUser()\r\n });\r\n } else {\r\n data[\"N_RadioGrpDirections_ID\"] = 1;\r\n N_RadioGrpDirections_ID = 1;\r\n // data[\"N_HomeBillboards_ID\"] = null;\r\n // N_HomeBillboards_ID = null;\r\n // data[\"A_BillboardLargeLink\"] = null;\r\n // A_BillboardLargeLink = null;\r\n\r\n this.setState({\r\n data,\r\n N_RadioGrpDirections_ID,\r\n radioGrpDirections: await nextProps.radioGrpDirections,\r\n user: auth.getCurrentUser()\r\n });\r\n }\r\n }\r\n\r\n // mapToViewModel(homeBillboard) {\r\n // //console.log(\"mapToViewModel-1\", month);\r\n // return {\r\n // ID: homeBillboard.ID,\r\n // N_OrderNo: homeBillboard.N_OrderNo,\r\n // N_RadioGrpDirection: homeBillboard.N_RadioGrpDirection,\r\n // A_Reference: homeBillboard.A_Reference,\r\n // A_Summary: homeBillboard.A_Summary,\r\n // A_Description: homeBillboard.A_Description,\r\n // A_HoverSummary01: homeBillboard.A_HoverSummary01,\r\n // A_HoverSummary02: homeBillboard.A_HoverSummary02,\r\n // A_HoverSummary03: homeBillboard.A_HoverSummary03,\r\n // A_BulletPointParent: homeBillboard.A_BulletPointParent,\r\n // A_BulletPointChild: homeBillboard.A_BulletPointChild,\r\n // A_BulletPointerIconColour: homeBillboard.A_BulletPointerIconColour,\r\n // A_BulletPointerIcon: homeBillboard.A_BulletPointerIcon,\r\n // B_TimeLine: homeBillboard.B_TimeLine,\r\n // //A_Description: convertFromRaw(JSON.parse(homeBillboard.A_Description)),\r\n // I_Image: homeBillboard.I_Image\r\n // };\r\n // }\r\n\r\n doSubmit = async () => {\r\n try {\r\n const homeBillboardId = this.props.match.params.id;\r\n if (homeBillboardId === \"new\") {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.addHomeBillboard(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n } else {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.changeHomeBillboard(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.title = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n await this.props.history.goBack();\r\n };\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_Image\"] = \"\";\r\n //\r\n // Babak's Note: Unquate below line to make Image mandatory:-\r\n // obj[\"N_PhotoSize01\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n clearSideImage = () => {\r\n let obj = this.state.data;\r\n obj[\"I_ImageOnImage\"] = \"\";\r\n // obj[\"N_PhotoSize02\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n cancelForm = async () => {\r\n this.props.history.push(\"/homeBillboardsList\");\r\n // await this.props.history.goBack();\r\n };\r\n\r\n constructor() {\r\n // ...\r\n super();\r\n\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n render() {\r\n // console.log(\r\n // \"render\",\r\n // this.state.data[\"N_OrderNo\"],\r\n // this.state.data[\"N_RadioGrpDirection\"],\r\n // this.state.N_RadioGrpDirection,\r\n // this.state.data[\"A_Summary\"],\r\n // this.state.data[\"A_Description\"]\r\n // );\r\n\r\n const homeBillboardId = this.props.match.params.id;\r\n\r\n return (\r\n \r\n

Home Billboard Form

\r\n
\r\n {this.renderInput(\"N_OrderNo\", \"Order Number\")}\r\n\r\n
\r\n {homeBillboardId === \"new\"\r\n ? this.renderRadioGroupDirections(\r\n \"N_RadioGrpDirections_ID\",\r\n \"A_Destination\",\r\n \"Direction\",\r\n this.props.radioGrpDirections,\r\n 0\r\n )\r\n : this.renderRadioGroupDirections(\r\n \"N_RadioGrpDirections_ID\",\r\n \"A_Destination\",\r\n \"Direction\",\r\n this.props.radioGrpDirections,\r\n 99\r\n )}\r\n
\r\n\r\n
\r\n {this.renderInputColourPicker(\"A_BGC\", \"Background Colour\")}\r\n
\r\n\r\n {this.renderInputColourPicker(\r\n \"A_BGC_Shadow\",\r\n \"Background Colour Shadow\"\r\n )}\r\n {this.renderCheckbox(\"B_BGC_Shadow_Off\", \"Background Shadow\")}\r\n
\r\n\r\n {this.renderImageFile(\"I_Image\", \"Background Image\")}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n \r\n Clear Image\r\n \r\n
\r\n \r\n {/* */}\r\n\r\n {/*
\r\n
\r\n\r\n {this.renderInputBillboardLargeLink(\r\n \"A_BillboardLargeLink\",\r\n \"URL Link\"\r\n )} */}\r\n\r\n
\r\n
\r\n\r\n {this.renderSideImageFile(\"I_ImageOnImage\", \"Upload Side Image\")}\r\n {this.state.waitingForFileUpload02 && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n \r\n Clear Side Image\r\n \r\n
\r\n \r\n\r\n
\r\n
\r\n\r\n {this.renderInputHoverSummary(\"A_HoverSummary01\", \"Hover One\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary01_Link\",\r\n \"Hover One URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary02\", \"Hover Two\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary02_Link\",\r\n \"Hover Two URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary03\", \"Hover Three\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary03_Link\",\r\n \"Hover Three URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary04\", \"Hover Four\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary04_Link\",\r\n \"Hover Four URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary05\", \"Hover Five\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary05_Link\",\r\n \"Hover Five URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary06\", \"Hover Six\")}\r\n {this.renderInputHoverSummary(\"A_HoverSummary07\", \"Hover Seven\")}\r\n {this.renderInputHoverSummary(\"A_HoverSummary08\", \"Hover Eight\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary08_Link\",\r\n \"Hover Eight URL Link\"\r\n )}\r\n {this.renderCheckboxHover(\r\n \"B_HoverSummary08_External\",\r\n \"Hover Eight External Link\"\r\n )}\r\n\r\n
\r\n
\r\n\r\n {this.renderInputColourPicker(\"A_TextFC\", \"Title Text Colour\")}\r\n
\r\n\r\n {this.renderInputReference(\"A_Reference\", \"Reference\")}\r\n {this.renderInputSummary(\"A_Summary\", \"Summary\")}\r\n {this.renderInput(\"A_Description\", \"Description\")}\r\n
\r\n\r\n {this.renderInputLinkButton(\"A_Button_Link\", \"Learn More URL Link\")}\r\n {this.renderCheckboxLinkButton(\r\n \"B_Button_Link_External\",\r\n \"Learn More URL Link External\"\r\n )}\r\n {this.renderInputButton(\"A_Button\", \"Learn More Button\")}\r\n\r\n
\r\n\r\n {this.renderCheckboxGoogleMap(\r\n \"B_GoogleMapHomeBiilboard\",\r\n \"Google Map\"\r\n )}\r\n\r\n
\r\n
\r\n
\r\n {this.renderButton(\"Save\")}\r\n {this.renderButtonCancel(\"Cancel\")}\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // menus: state.entities.menus.list.filter(menu => !menu.resolved)\r\n homeBillboard: state.entities.homeBillboards.listSingleRow,\r\n radioGrpDirections: state.entities.radioGrpDirections.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboard: id => dispatch(loadHomeBillboard(id)),\r\n loadRadioGrpDirections: () => dispatch(loadRadioGrpDirections()),\r\n addHomeBillboard: (homeBillboard, user, currentDate) =>\r\n dispatch(addHomeBillboard(homeBillboard, user, currentDate)),\r\n changeHomeBillboard: (homeBillboard, user, currentDate) =>\r\n dispatch(changeHomeBillboard(homeBillboard, user, currentDate))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Menus)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.menus' and 'this.props.loadMenus()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(HomeBillboardForm);\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\nimport Active from \"../common/active\";\r\n\r\nclass HomeBillboardsTable extends Component {\r\n columns = [];\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount UsersTable 01 : \");\r\n }\r\n\r\n homeBillboardChildColumn = {\r\n key: \"tree\",\r\n type: \"text\",\r\n content: homeBillboardChild =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (\r\n homeBillboardChild.N_RadioGrpDirections_ID != 1 &&\r\n homeBillboardChild.N_RadioGrpDirections_ID != 4 &&\r\n homeBillboardChild.N_RadioGrpDirections_ID != 10\r\n )\r\n this.props.onHomeBillboardChild(homeBillboardChild);\r\n }}\r\n className={\r\n homeBillboardChild.N_HB_Count > 0 &&\r\n (homeBillboardChild.N_RadioGrpDirections_ID != 1 &&\r\n homeBillboardChild.N_RadioGrpDirections_ID != 4 &&\r\n homeBillboardChild.N_RadioGrpDirections_ID != 10)\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : homeBillboardChild.N_HB_Count < 1 &&\r\n (homeBillboardChild.N_RadioGrpDirections_ID != 1 &&\r\n homeBillboardChild.N_RadioGrpDirections_ID != 4 &&\r\n homeBillboardChild.N_RadioGrpDirections_ID != 10)\r\n ? \"btn btn-secondary btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right disabled clickableNon\"\r\n }\r\n >\r\n {\"Child Level\"}\r\n \r\n ) : (\r\n 0\r\n ? \"btn btn-warning btn-sm pull-right enabled\"\r\n : \"btn btn-secondary btn-sm pull-right enabled\"\r\n }\r\n >\r\n {\"Child Level\"}\r\n \r\n )\r\n };\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: homeBillboard =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(homeBillboard)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: homeBillboard =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (homeBillboard.N_HB_Count < 1) {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete Home Billboard '${homeBillboard.A_Reference}${homeBillboard.A_HoverSummary01}'?`\r\n )\r\n ) {\r\n this.props.onDelete(homeBillboard);\r\n }\r\n }\r\n }}\r\n className={\r\n homeBillboard.N_HB_Count > 0\r\n ? \"btn btn-danger btn-sm disabled clickableNon\"\r\n : \"btn btn-danger btn-sm enabled\"\r\n }\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n const homeBillboards = [{ ID: 1 }];\r\n\r\n homeBillboards.map(\r\n item => (\r\n this.columns.push({\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_OrderNo\",\r\n label: \"Order\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_RadioGrpDirections\",\r\n label: \"Direction\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_HoverSummary01\",\r\n label: \"Hover\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Reference\",\r\n label: \"Reference\",\r\n type: \"text\"\r\n }),\r\n // this.columns.push({\r\n // path: \"A_Summary\",\r\n // label: \"Summary\",\r\n // type: \"textEditor\"\r\n // }),\r\n // this.columns.push({\r\n // path: \"A_Description\",\r\n // label: \"Description\",\r\n // type: \"textEditor\"\r\n // }),\r\n this.columns.push({ path: \"I_Image\", label: \"Image\", type: \"image\" }),\r\n this.columns.push({\r\n ID: 9,\r\n path: \"D_Inserted\",\r\n label: \"Inserted\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n ID: 10,\r\n path: \"A_Inserted_By\",\r\n label: \"Inserted_By\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 11,\r\n path: \"D_Updated\",\r\n label: \"Updated\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n ID: 12,\r\n path: \"A_Updated_By\",\r\n label: \"Updated_By\",\r\n type: \"text\"\r\n })\r\n )\r\n );\r\n\r\n this.columns.push(this.homeBillboardChildColumn);\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n //console.log(\"Home Billboards details : \", homeBillboard);\r\n }\r\n // //\r\n // // Babak's Note: Below we add a condition that the user must be logged in and have an admin user in order to see\r\n // // the 'delete' button:-\r\n // constructor() {\r\n // super();\r\n // const user = auth.getCurrentUser();\r\n // if (user && user.isAdmin) this.columns.push(this.deleteColumn);\r\n // }\r\n\r\n render() {\r\n //console.log(\"render usersTable\");\r\n const { homeBillboardsList, onSort, sortColumn } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\nexport default HomeBillboardsTable;\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { toast } from \"react-toastify\";\r\nimport HomeBillboardsTable from \"./homeBillboardsTable\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport {\r\n loadHomeBillboards,\r\n deleteHomeBillboard\r\n} from \"../../store/homeBillboards\";\r\nimport { connect } from \"react-redux\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\nimport { Redirect } from \"react-router\";\r\n\r\nclass HomeBillboardsList extends Component {\r\n state = {\r\n homeBillboards: [],\r\n homeBillboardChilds: false,\r\n homeBillboardForm: false,\r\n homeBillboardID: 0,\r\n RadioGrpDirectionsID: 0,\r\n currentPage: 1,\r\n pageSize: 5,\r\n searchQuery: \"\",\r\n sortColumn: { path: \"N_OrderNo\", order: \"asc\" }\r\n };\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount HomeBillboards 01 : \");\r\n\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n await this.props.loadHomeBillboards();\r\n }\r\n\r\n handleHomeBillboardChild = async homeBillboard => {\r\n try {\r\n this.setState({\r\n homeBillboardChilds: true,\r\n homeBillboardID: homeBillboard.ID,\r\n RadioGrpDirectionsID: homeBillboard.N_RadioGrpDirections_ID\r\n });\r\n // window.location = `/articles/articles/${sumOfArticle.ID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n // handleDelete = async homeBillboard => {\r\n // const originalHomeBillboards = this.state.homeBillboards;\r\n // const homeBillboards = originalHomeBillboards.filter(\r\n // m => m.ID !== homeBillboard.ID\r\n // );\r\n // this.setState({ homeBillboards });\r\n\r\n // try {\r\n // await deleteHomeBillboard(homeBillboard.ID);\r\n // } catch (ex) {\r\n // if (ex.response && ex.response.status === 404)\r\n // toast.error(\"This Home Billboard has already been deleted.\");\r\n\r\n // this.setState({ homeBillboards: originalHomeBillboards });\r\n // }\r\n // };\r\n\r\n handleUpdate = async homeBillboard => {\r\n try {\r\n this.setState({\r\n homeBillboardForm: true,\r\n homeBillboardID: homeBillboard.ID\r\n });\r\n // window.location = `/homeBillboards/${homeBillboard.ID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n //console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n const allHomeBillboards = this.props.homeBillboards;\r\n\r\n let filtered = allHomeBillboards;\r\n if (searchQuery)\r\n filtered = allHomeBillboards.filter(m =>\r\n m.A_Summary.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const homeBillboards = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: homeBillboards };\r\n };\r\n\r\n render() {\r\n if (this.state.homeBillboardChilds === true) {\r\n // window.alert(\r\n // `RadioGrpDirectionsID 1 : ${this.state.RadioGrpDirectionsID}`\r\n // );\r\n return (\r\n \r\n );\r\n }\r\n if (this.state.homeBillboardForm === true) {\r\n // window.alert(`menuList, render() : ${this.state.menuID}`);\r\n return (\r\n \r\n );\r\n }\r\n\r\n // if (this.props.homeBillboards.length === 0)\r\n // return
;\r\n\r\n //console.log(\"render homeBillboards\");\r\n const { length: count } = this.state.homeBillboards;\r\n\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'homeBillboards'\r\n const { totalCount, data: homeBillboardsList } = this.getPagedData();\r\n\r\n return (\r\n \r\n
\r\n
\r\n

Home Billboards

\r\n
\r\n \r\n New Home Billboard\r\n \r\n

Showing {totalCount} Home Billboards in the database.

\r\n \r\n \r\n this.props.deleteHomeBillboard(homeBillboard)\r\n }\r\n onUpdate={this.handleUpdate}\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n homeBillboards: state.entities.homeBillboards.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboards: () => dispatch(loadHomeBillboards()),\r\n deleteHomeBillboard: homeBillboard =>\r\n dispatch(deleteHomeBillboard(homeBillboard))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(HomeBillboardsList);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeBillboardChilds\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeBillboardChildsRequested' or 'homeBillboardChildsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeBillboardChilds' below represents the 'state':-\r\n homeBillboardChildsRequested: (homeBillboardChilds, action) => {\r\n console.log(\"homeBillboardChildsRequested : \", action.payload);\r\n homeBillboardChilds.loading = true;\r\n },\r\n homeBillboardChildsReceived: (homeBillboardChilds, action) => {\r\n console.log(\"homeBillboardChildsReceived : \", action.payload);\r\n homeBillboardChilds.list = action.payload;\r\n homeBillboardChilds.loading = false;\r\n homeBillboardChilds.lastFetch = Date.now();\r\n },\r\n homeBillboardChildsRequestedFailed: (homeBillboardChilds, action) => {\r\n homeBillboardChilds.loading = false;\r\n // window.alert(`No HomeBillboardChilds found.`);\r\n },\r\n\r\n homeBillboardChildsOnNavbarRequested: (homeBillboardChilds, action) => {\r\n console.log(\"homeBillboardChildsOnNavbarRequested : \", action.payload);\r\n homeBillboardChilds.loading = true;\r\n },\r\n homeBillboardChildsOnNavbarReceived: (homeBillboardChilds, action) => {\r\n console.log(\"homeBillboardChildsOnNavbarReceived : \", action.payload);\r\n homeBillboardChilds.listOnNavvar = action.payload;\r\n homeBillboardChilds.loading = false;\r\n homeBillboardChilds.lastFetch = Date.now();\r\n },\r\n homeBillboardChildsOnNavbarRequestedFailed: (\r\n homeBillboardChilds,\r\n action\r\n ) => {\r\n homeBillboardChilds.loading = false;\r\n // window.alert(`No HomeBillboardChilds found.`);\r\n },\r\n\r\n homeBillboardChildRequested: (homeBillboardChild, action) => {\r\n console.log(\"homeBillboardChildRequested : \", action.payload);\r\n homeBillboardChild.loading = true;\r\n },\r\n homeBillboardChildReceived: (homeBillboardChild, action) => {\r\n console.log(\"homeBillboardChildReceived : \", action.payload);\r\n homeBillboardChild.listSingleRow = action.payload;\r\n homeBillboardChild.loading = false;\r\n homeBillboardChild.lastFetch = Date.now();\r\n },\r\n homeBillboardChildRequestedFailed: (homeBillboardChild, action) => {\r\n homeBillboardChild.loading = false;\r\n // window.alert(`No HomeBillboardChild found.`);\r\n },\r\n homeBillboardChildChangeRequested: (homeBillboardChild, action) => {\r\n console.log(\"homeBillboardChildChangeRequested : \", action.payload);\r\n homeBillboardChild.loading = true;\r\n },\r\n homeBillboardChildChangeFailed: (homeBillboardChild, action) => {\r\n homeBillboardChild.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardChild api at the back end.\r\n // const { ID: homeBillboardChildId, A_Name: homeBillboardChildName } = action.payload;\r\n\r\n // window.alert(`HomeBillboardChild '${homeBillboardChildName}' no longer exists.`);\r\n\r\n // const index = homeBillboardChild.list.findIndex(homeBillboardChild => homeBillboardChild.ID === homeBillboardChildId);\r\n // //console.log(\"homeBillboardChildDeleted ha \", index);\r\n // homeBillboardChild.list.splice(index, 1);\r\n },\r\n homeBillboardChildChanged: (homeBillboardChild, action) => {\r\n homeBillboardChild.loading = false;\r\n },\r\n homeBillboardChildDeleteRequested: (homeBillboardChild, action) => {\r\n console.log(\"homeBillboardChildDeleteRequested : \", action.payload);\r\n homeBillboardChild.loading = true;\r\n },\r\n homeBillboardChildDeleteFailed: (homeBillboardChilds, action) => {\r\n homeBillboardChilds.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardChild api at the back end.\r\n const {\r\n ID: homeBillboardChildId,\r\n A_Name: homeBillboardChildName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeBillboardChild '${homeBillboardChildName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeBillboardChilds.list.findIndex(\r\n homeBillboardChild => homeBillboardChild.ID === homeBillboardChildId\r\n );\r\n //console.log(\"homeBillboardChildDeleted ha \", index);\r\n homeBillboardChilds.list.splice(index, 1);\r\n },\r\n homeBillboardChildDeleted: (homeBillboardChilds, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardChild api at the back end.\r\n const { ID: homeBillboardChildID } = action.payload;\r\n // console.log(\"homeBillboardChildDeleted ha \", action.payload, homeBillboardChildID, homeBillboardChilds);\r\n const index = homeBillboardChilds.list.findIndex(\r\n homeBillboardChild => homeBillboardChild.ID === homeBillboardChildID\r\n );\r\n //console.log(\"homeBillboardChildDeleted, ha! ha! \", index);\r\n homeBillboardChilds.list.splice(index, 1);\r\n },\r\n homeBillboardChildAddRequested: (homeBillboardChild, action) => {\r\n console.log(\"homeBillboardChildAddRequested : \", action.payload);\r\n homeBillboardChild.loading = true;\r\n },\r\n homeBillboardChildAddFailed: (homeBillboardChild, action) => {\r\n homeBillboardChild.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeBillboardChilds' below represents the 'state':-\r\n homeBillboardChildAdded: (homeBillboardChilds, action) => {\r\n console.log(\"homeBillboardChildAdded : \", action.payload);\r\n homeBillboardChilds.list.push(action.payload);\r\n }\r\n // homeBillboardChildAdded: (homeBillboardChilds, action) => {\r\n // homeBillboardChilds.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeBillboardChildDeleted: (homeBillboardChilds, action) => {\r\n // console.log(\"homeBillboardChildDeleted ha \", action.payload.ID);\r\n // homeBillboardChilds.list.filter(homeBillboardChild => homeBillboardChild.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeBillboardChildAddRequested,\r\n homeBillboardChildAdded,\r\n homeBillboardChildAddFailed,\r\n homeBillboardChildChangeRequested,\r\n homeBillboardChildChanged,\r\n homeBillboardChildChangeFailed,\r\n homeBillboardChildDeleteRequested,\r\n homeBillboardChildDeleted,\r\n homeBillboardChildDeleteFailed,\r\n homeBillboardChildsReceived,\r\n homeBillboardChildsRequested,\r\n homeBillboardChildsRequestedFailed,\r\n homeBillboardChildsOnNavbarReceived,\r\n homeBillboardChildsOnNavbarRequested,\r\n homeBillboardChildsOnNavbarRequestedFailed,\r\n homeBillboardChildReceived,\r\n homeBillboardChildRequested,\r\n homeBillboardChildRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/homeBillboardChilds\";\r\n\r\nexport const loadHomeBillboardChilds = homeBillboardID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardChilds;\r\n\r\n // console.log(\"loadHomeBillboardChilds lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/main\" + \"/\" + homeBillboardID,\r\n onStart: homeBillboardChildsRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardChildsReceived.type,\r\n onError: homeBillboardChildsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeBillboardChild = homeBillboardChildID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardChilds;\r\n\r\n //console.log(\"loadHomeBillboardChild : \", homeBillboardChildID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardChildID,\r\n onStart: homeBillboardChildRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardChildReceived.type,\r\n onError: homeBillboardChildRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeBillboardChild':-\r\nexport const addHomeBillboardChild = (homeBillboardChild, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeBillboardChildAddRequested.type,\r\n //data: homeBillboardChild,\r\n data: {\r\n N_OrderNo: homeBillboardChild.N_OrderNo,\r\n N_RadioGrpDirections_ID: 7,\r\n N_HomeBillboards_ID: homeBillboardChild.N_HomeBillboards_ID,\r\n A_Reference: homeBillboardChild.A_Reference,\r\n A_Summary: homeBillboardChild.A_Summary,\r\n // A_Description: homeBillboardChild.A_Description,\r\n // A_HoverSummary01: homeBillboardChild.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardChild.A_HoverSummary01_Link,\r\n B_HoverSummary01_Linked: homeBillboardChild.B_HoverSummary01_Linked,\r\n B_HoverSummary01_Link_External:\r\n homeBillboardChild.B_HoverSummary01_Link_External,\r\n // A_HoverSummary02: homeBillboardChild.A_HoverSummary02,\r\n // A_HoverSummary02_Link: homeBillboardChild.A_HoverSummary02_Link,\r\n // A_HoverSummary03: homeBillboardChild.A_HoverSummary03,\r\n // A_HoverSummary03_Link: homeBillboardChild.A_HoverSummary03_Link,\r\n // A_HoverSummary04: homeBillboardChild.A_HoverSummary04,\r\n // A_HoverSummary04_Link: homeBillboardChild.A_HoverSummary04_Link,\r\n // A_HoverSummary05: homeBillboardChild.A_HoverSummary05,\r\n // A_HoverSummary05_Link: homeBillboardChild.A_HoverSummary05_Link,\r\n // A_HoverSummary06: homeBillboardChild.A_HoverSummary06,\r\n // A_HoverSummary07: homeBillboardChild.A_HoverSummary07,\r\n // A_HoverSummary08: homeBillboardChild.A_HoverSummary08,\r\n // A_HoverSummary08_Link: homeBillboardChild.A_HoverSummary08_Link,\r\n I_Image: homeBillboardChild.I_Image,\r\n I_ImageOnImage: homeBillboardChild.I_ImageOnImage,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: homeBillboardChildAdded.type,\r\n onError: homeBillboardChildAddFailed.type\r\n });\r\n\r\nexport const getHomeBillboardChilds = createSelector(\r\n state => state.entities.homeBillboardChilds,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeBillboardChilds, projects) has not changed then do not requery again:-\r\n // (homeBillboardChilds) => homeBillboardChilds.list.filter(homeBillboardChild => !homeBillboardChild.B_Active)\r\n homeBillboardChilds => homeBillboardChilds.list\r\n);\r\n\r\nexport const changeHomeBillboardChild = (\r\n homeBillboardChild,\r\n user,\r\n currentDate\r\n) =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardChild.ID,\r\n method: \"put\",\r\n onStart: homeBillboardChildChangeRequested.type,\r\n data: {\r\n N_OrderNo: homeBillboardChild.N_OrderNo,\r\n A_Reference: homeBillboardChild.A_Reference,\r\n A_Summary: homeBillboardChild.A_Summary,\r\n // A_Description: homeBillboardChild.A_Description,\r\n // A_HoverSummary01: homeBillboardChild.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardChild.A_HoverSummary01_Link,\r\n B_HoverSummary01_Linked: homeBillboardChild.B_HoverSummary01_Linked,\r\n B_HoverSummary01_Link_External:\r\n homeBillboardChild.B_HoverSummary01_Link_External,\r\n // A_HoverSummary02: homeBillboardChild.A_HoverSummary02,\r\n // A_HoverSummary02_Link: homeBillboardChild.A_HoverSummary02_Link,\r\n // A_HoverSummary03: homeBillboardChild.A_HoverSummary03,\r\n // A_HoverSummary03_Link: homeBillboardChild.A_HoverSummary03_Link,\r\n // A_HoverSummary04: homeBillboardChild.A_HoverSummary04,\r\n // A_HoverSummary04_Link: homeBillboardChild.A_HoverSummary04_Link,\r\n // A_HoverSummary05: homeBillboardChild.A_HoverSummary05,\r\n // A_HoverSummary05_Link: homeBillboardChild.A_HoverSummary05_Link,\r\n // A_HoverSummary06: homeBillboardChild.A_HoverSummary06,\r\n // A_HoverSummary07: homeBillboardChild.A_HoverSummary07,\r\n // A_HoverSummary08: homeBillboardChild.A_HoverSummary08,\r\n // A_HoverSummary08_Link: homeBillboardChild.A_HoverSummary08_Link,\r\n I_Image: homeBillboardChild.I_Image,\r\n I_ImageOnImage: homeBillboardChild.I_ImageOnImage,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: homeBillboardChildChanged.type,\r\n onError: homeBillboardChildChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeBillboardChild = homeBillboardChild =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardChild.ID,\r\n method: \"delete\",\r\n onStart: homeBillboardChildDeleteRequested.type,\r\n data: {\r\n ID: homeBillboardChild.ID,\r\n A_Reference: homeBillboardChild.A_Reference\r\n },\r\n onSuccess: homeBillboardChildDeleted.type,\r\n onError: homeBillboardChildDeleteFailed.type\r\n });\r\n","import React from \"react\";\r\nimport Joi from \"joi-browser\";\r\nimport Form from \"../common/form\";\r\nimport auth from \"../../services/authService\";\r\nimport {\r\n loadHomeBillboardChild,\r\n addHomeBillboardChild,\r\n changeHomeBillboardChild\r\n} from \"../../store/homeBillboardChilds\";\r\n// import { loadRadioGrpDirections } from \"../../store/radioGrpDirections\";\r\nimport { connect } from \"react-redux\";\r\n\r\n//import ControlledEditor from \"../common/controlledEditor\";\r\n\r\nclass HomeBillboardForm extends Form {\r\n state = {\r\n data: {\r\n N_OrderNo: \"\",\r\n // N_RadioGrpDirections_ID: \"\",\r\n // N_HomeBillboards_ID: \"\",\r\n // A_BillboardLargeLink: \"\",\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n // A_Description: \"\",\r\n // A_HoverSummary01: \"\",\r\n A_HoverSummary01_Link: \"\",\r\n B_HoverSummary01_Linked: false,\r\n B_HoverSummary01_Link_External: false,\r\n // A_HoverSummary02: \"\",\r\n // A_HoverSummary02_Link: \"\",\r\n // A_HoverSummary03: \"\",\r\n // A_HoverSummary03_Link: \"\",\r\n // A_HoverSummary04: \"\",\r\n // A_HoverSummary04_Link: \"\",\r\n // A_HoverSummary05: \"\",\r\n // A_HoverSummary05_Link: \"\",\r\n // A_HoverSummary06: \"\",\r\n // A_HoverSummary07: \"\",\r\n // A_HoverSummary08: \"\",\r\n // A_HoverSummary08_Link: \"\",\r\n I_Image: \"\",\r\n N_PhotoSize01: \"\",\r\n waitingForFileUpload: false,\r\n I_ImageOnImage: \"\",\r\n // N_PhotoSize02: \"\",\r\n waitingForFileUpload02: false\r\n },\r\n B_HoverSummary01_Linked: false,\r\n errors: {},\r\n RadioGrpDirectionsID: 0,\r\n // radioGrpDirection: [],\r\n // N_RadioGrpDirections_ID: \"\",\r\n user: []\r\n };\r\n\r\n schemaCreate = {\r\n ID: Joi.number(),\r\n N_OrderNo: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n // N_RadioGrpDirections_ID: Joi.number()\r\n // .required()\r\n // .min(1)\r\n // .max(10)\r\n // .label(\"Direction\"),\r\n N_HomeBillboards_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n // A_BillboardLargeLink: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"URL Link\"),\r\n A_Reference: Joi.string()\r\n // .allow(\"\")\r\n .required()\r\n // .optional()\r\n .min(4)\r\n .max(40)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(40)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n // A_HoverSummary01: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover One\"),\r\n A_HoverSummary01_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"URL Link\"),\r\n B_HoverSummary01_Linked: Joi.boolean().label(\"URL Linked\"),\r\n B_HoverSummary01_Link_External: Joi.boolean().label(\"URL Linked External\"),\r\n // A_HoverSummary02: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Two\"),\r\n // A_HoverSummary02_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Two URL Link\"),\r\n // A_HoverSummary03: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Three\"),\r\n // A_HoverSummary03_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Three URL Link\"),\r\n // A_HoverSummary04: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Four\"),\r\n // A_HoverSummary04_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Four URL Link\"),\r\n // A_HoverSummary05: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Five\"),\r\n // A_HoverSummary05_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Five URL Link\"),\r\n // A_HoverSummary06: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(30)\r\n // .label(\"Hover Six\"),\r\n // A_HoverSummary07: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(73)\r\n // .label(\"Hover Seven\"),\r\n // A_HoverSummary08: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Eight\"),\r\n // A_HoverSummary08_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Eight URL Link\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n I_ImageOnImage: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"ImageOnImage\"),\r\n N_PhotoSize02: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload02: Joi.boolean().optional()\r\n };\r\n\r\n schemaEdit = {\r\n ID: Joi.number(),\r\n N_OrderNo: Joi.number()\r\n .required()\r\n .min(1)\r\n .max(100)\r\n .label(\"Order No\"),\r\n // N_RadioGrpDirections_ID: Joi.number()\r\n // .required()\r\n // .min(1)\r\n // .max(10)\r\n // .label(\"Direction\"),\r\n N_HomeBillboards_ID: Joi.number()\r\n .allow(\"\")\r\n .optional(),\r\n // A_BillboardLargeLink: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"URL Link\"),\r\n A_Reference: Joi.string()\r\n // .allow(\"\")\r\n .required()\r\n // .optional()\r\n .min(4)\r\n .max(40)\r\n .label(\"Reference\"),\r\n A_Summary: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n .min(5)\r\n // .max(40)\r\n .label(\"Summary\"),\r\n // A_Description: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // //.min(5)\r\n // .max(1000)\r\n // .label(\"Description\"),\r\n // A_HoverSummary01: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover One\"),\r\n A_HoverSummary01_Link: Joi.string()\r\n .allow(\"\")\r\n // .required()\r\n .optional()\r\n // .min(5)\r\n .max(1000)\r\n .label(\"URL Link\"),\r\n B_HoverSummary01_Linked: Joi.boolean().label(\"URL Linked\"),\r\n B_HoverSummary01_Link_External: Joi.boolean().label(\"URL Linked External\"),\r\n // A_HoverSummary02: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Two\"),\r\n // A_HoverSummary02_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Two URL Link\"),\r\n // A_HoverSummary03: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Three\"),\r\n // A_HoverSummary03_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Three URL Link\"),\r\n // A_HoverSummary04: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Four\"),\r\n // A_HoverSummary04_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Four URL Link\"),\r\n // A_HoverSummary05: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Five\"),\r\n // A_HoverSummary05_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Five URL Link\"),\r\n // A_HoverSummary06: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(30)\r\n // .label(\"Hover Six\"),\r\n // A_HoverSummary07: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(73)\r\n // .label(\"Hover Seven\"),\r\n // A_HoverSummary08: Joi.string()\r\n // .allow(\"\")\r\n // .optional()\r\n // .max(20)\r\n // .label(\"Hover Eight\"),\r\n // A_HoverSummary08_Link: Joi.string()\r\n // .allow(\"\")\r\n // // .required()\r\n // .optional()\r\n // // .min(5)\r\n // .max(1000)\r\n // .label(\"Hover Eight URL Link\"),\r\n I_Image: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"Image\"),\r\n N_PhotoSize01: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload: Joi.boolean().optional(),\r\n I_ImageOnImage: Joi.any()\r\n .meta({ swaggerType: \"file\" })\r\n // .required()\r\n .optional()\r\n .label(\"ImageOnImage\"),\r\n N_PhotoSize02: Joi.number()\r\n .min(5000)\r\n .max(10000000)\r\n .optional(),\r\n waitingForFileUpload02: Joi.boolean().optional()\r\n };\r\n\r\n async populateHomeBillboardChild() {\r\n // window.alert(\r\n // `RadioGrpDirectionsID : ${this.props.match.params.RadioGrpDirectionsID}`\r\n // );\r\n //console.log(\"populateHomeBillboard-1 : \", this.props.match.params.id);\r\n try {\r\n let data = { ...this.state.data };\r\n let {\r\n // N_RadioGrpDirections_ID\r\n N_HomeBillboards_ID\r\n // B_HoverSummary01_Linked\r\n // A_BillboardLargeLink\r\n } = this.state;\r\n\r\n const homeBillboardChildId = this.props.match.params.id;\r\n\r\n if (homeBillboardChildId === \"new\") {\r\n // data[\"N_RadioGrpDirections_ID\"] = 1;\r\n // N_RadioGrpDirections_ID = 1;\r\n data[\"N_HomeBillboards_ID\"] = this.props.match.params.homeBillboardID;\r\n // B_HoverSummary01_Linked = false;\r\n // N_HomeBillboards_ID = null;\r\n // data[\"A_BillboardLargeLink\"] = null;\r\n // A_BillboardLargeLink = null;\r\n\r\n this.setState({\r\n data,\r\n RadioGrpDirectionsID: this.props.match.params.RadioGrpDirectionsID,\r\n // B_HoverSummary01_Linked,\r\n // N_RadioGrpDirections_ID,\r\n // N_HomeBillboards_ID,\r\n user: auth.getCurrentUser()\r\n });\r\n return;\r\n }\r\n\r\n await this.props.loadHomeBillboardChild(homeBillboardChildId);\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 404)\r\n this.props.history.replace(\"/not-found\");\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateHomeBillboardChild();\r\n }\r\n\r\n async componentWillReceiveProps(nextProps) {\r\n // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n let data = { ...this.state.data };\r\n let {\r\n N_RadioGrpDirections_ID,\r\n B_HoverSummary01_Linked\r\n // N_HomeBillboards_ID,\r\n // A_BillboardLargeLink\r\n } = this.state;\r\n\r\n if (\r\n this.props.match.params.id !== \"new\" &&\r\n this.state.data !== nextProps.homeBillboardChild\r\n ) {\r\n data[\"ID\"] = nextProps.homeBillboardChild.ID;\r\n data[\"N_OrderNo\"] = nextProps.homeBillboardChild.N_OrderNo;\r\n // N_RadioGrpDirections_ID = nextProps.homeBillboardChild.N_RadioGrpDirections_ID;\r\n // data[\"N_RadioGrpDirections_ID\"] =\r\n // nextProps.homeBillboardChild.N_RadioGrpDirections_ID;\r\n data[\"A_Reference\"] = nextProps.homeBillboardChild.A_Reference;\r\n data[\"A_Summary\"] = nextProps.homeBillboardChild.A_Summary;\r\n // data[\"A_Description\"] = nextProps.homeBillboardChild.A_Description;\r\n // data[\"A_HoverSummary01\"] = nextProps.homeBillboardChild.A_HoverSummary01;\r\n data[\"A_HoverSummary01_Link\"] =\r\n nextProps.homeBillboardChild.A_HoverSummary01_Link;\r\n data[\"B_HoverSummary01_Linked\"] =\r\n nextProps.homeBillboardChild.B_HoverSummary01_Linked;\r\n B_HoverSummary01_Linked =\r\n nextProps.homeBillboardChild.B_HoverSummary01_Linked;\r\n\r\n data[\"B_HoverSummary01_Link_External\"] =\r\n nextProps.homeBillboardChild.B_HoverSummary01_Link_External;\r\n\r\n // data[\"A_HoverSummary02\"] = nextProps.homeBillboardChild.A_HoverSummary02;\r\n // data[\"A_HoverSummary02_Link\"] =\r\n // nextProps.homeBillboardChild.A_HoverSummary02_Link;\r\n // data[\"A_HoverSummary03\"] = nextProps.homeBillboardChild.A_HoverSummary03;\r\n // data[\"A_HoverSummary03_Link\"] =\r\n // nextProps.homeBillboardChild.A_HoverSummary03_Link;\r\n // data[\"A_HoverSummary04\"] = nextProps.homeBillboardChild.A_HoverSummary04;\r\n // data[\"A_HoverSummary04_Link\"] =\r\n // nextProps.homeBillboardChild.A_HoverSummary04_Link;\r\n // data[\"A_HoverSummary05\"] = nextProps.homeBillboardChild.A_HoverSummary05;\r\n // data[\"A_HoverSummary05_Link\"] =\r\n // nextProps.homeBillboardChild.A_HoverSummary05_Link;\r\n // data[\"A_HoverSummary06\"] = nextProps.homeBillboardChild.A_HoverSummary06;\r\n // data[\"A_HoverSummary07\"] = nextProps.homeBillboardChild.A_HoverSummary07;\r\n // data[\"A_HoverSummary08\"] = nextProps.homeBillboardChild.A_HoverSummary08;\r\n // data[\"A_HoverSummary08_Link\"] =\r\n // nextProps.homeBillboardChild.A_HoverSummary08_Link;\r\n data[\"I_Image\"] = nextProps.homeBillboardChild.I_Image;\r\n data[\"N_PhotoSize01\"] = 10000;\r\n data[\"I_ImageOnImage\"] = nextProps.homeBillboardChild.I_ImageOnImage;\r\n // data[\"N_PhotoSize02\"] = 10000;\r\n this.setState({\r\n data,\r\n RadioGrpDirectionsID: this.props.match.params.RadioGrpDirectionsID,\r\n B_HoverSummary01_Linked,\r\n // N_RadioGrpDirections_ID,\r\n // radioGrpDirections: await nextProps.radioGrpDirections,\r\n user: auth.getCurrentUser()\r\n });\r\n } else {\r\n // data[\"N_RadioGrpDirections_ID\"] = 1;\r\n // N_RadioGrpDirections_ID = 1;\r\n\r\n data[\"N_HomeBillboards_ID\"] = this.props.match.params.homeBillboardID;\r\n B_HoverSummary01_Linked = false;\r\n // N_HomeBillboards_ID = null;\r\n // data[\"A_BillboardLargeLink\"] = null;\r\n // A_BillboardLargeLink = null;\r\n\r\n this.setState({\r\n data,\r\n RadioGrpDirectionsID: this.props.match.params.RadioGrpDirectionsID,\r\n B_HoverSummary01_Linked,\r\n // N_RadioGrpDirections_ID,\r\n // radioGrpDirections: await nextProps.radioGrpDirections,\r\n user: auth.getCurrentUser()\r\n });\r\n }\r\n }\r\n\r\n // mapToViewModel(homeBillboard) {\r\n // //console.log(\"mapToViewModel-1\", month);\r\n // return {\r\n // ID: homeBillboard.ID,\r\n // N_OrderNo: homeBillboard.N_OrderNo,\r\n // N_RadioGrpDirection: homeBillboard.N_RadioGrpDirection,\r\n // A_Reference: homeBillboard.A_Reference,\r\n // A_Summary: homeBillboard.A_Summary,\r\n // A_Description: homeBillboard.A_Description,\r\n // A_HoverSummary01: homeBillboard.A_HoverSummary01,\r\n // A_HoverSummary02: homeBillboard.A_HoverSummary02,\r\n // A_HoverSummary03: homeBillboard.A_HoverSummary03,\r\n // A_BulletPointParent: homeBillboard.A_BulletPointParent,\r\n // A_BulletPointChild: homeBillboard.A_BulletPointChild,\r\n // A_BulletPointerIconColour: homeBillboard.A_BulletPointerIconColour,\r\n // A_BulletPointerIcon: homeBillboard.A_BulletPointerIcon,\r\n // B_TimeLine: homeBillboard.B_TimeLine,\r\n // //A_Description: convertFromRaw(JSON.parse(homeBillboard.A_Description)),\r\n // I_Image: homeBillboard.I_Image\r\n // };\r\n // }\r\n\r\n doSubmit = async () => {\r\n try {\r\n const homeBillboardId = this.props.match.params.id;\r\n if (homeBillboardId === \"new\") {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.addHomeBillboardChild(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n } else {\r\n const currentDate = new Date();\r\n const month = currentDate.getMonth() + 1;\r\n const currentDateWithoutTime =\r\n month +\r\n \"/\" +\r\n currentDate.getDate() +\r\n \"/\" +\r\n currentDate.getFullYear() +\r\n \" \" +\r\n currentDate.getHours() +\r\n \":\" +\r\n currentDate.getMinutes();\r\n\r\n await this.props.changeHomeBillboardChild(\r\n this.state.data,\r\n auth.getCurrentUser().a_name,\r\n currentDateWithoutTime\r\n );\r\n }\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...this.state.errors };\r\n errors.title = ex.response.data;\r\n this.setState({ errors });\r\n }\r\n }\r\n\r\n await this.props.history.goBack();\r\n };\r\n\r\n clearImages = () => {\r\n let obj = this.state.data;\r\n obj[\"I_Image\"] = \"\";\r\n obj[\"N_PhotoSize01\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n clearImageOnImage = () => {\r\n let obj = this.state.data;\r\n obj[\"I_ImageOnImage\"] = \"\";\r\n // obj[\"N_PhotoSize02\"] = \"\";\r\n this.setState({ data: obj });\r\n };\r\n\r\n cancelForm = async () => {\r\n // window.alert(`RadioGrpDirectionsID : ${this.state.RadioGrpDirectionsID}`);\r\n this.props.history.push(\r\n `/homeBillboardChilds/homeBillboardChildsList/${this.props.match.params.homeBillboardID}/${this.state.RadioGrpDirectionsID}`\r\n );\r\n // await this.props.history.goBack();\r\n };\r\n\r\n constructor() {\r\n // ...\r\n super();\r\n\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n render() {\r\n // console.log(\r\n // \"render\",\r\n // this.state.data[\"N_OrderNo\"],\r\n // this.state.data[\"N_RadioGrpDirection\"],\r\n // this.state.N_RadioGrpDirection,\r\n // this.state.data[\"A_Summary\"],\r\n // this.state.data[\"A_Description\"]\r\n // );\r\n\r\n const homeBillboardId = this.props.match.params.id;\r\n\r\n return (\r\n \r\n

Home Billboard Form

\r\n
\r\n {this.renderInput(\"N_OrderNo\", \"Order Number\")}\r\n
\r\n {/* {homeBillboardId === \"new\"\r\n ? this.renderRadioGroupDirections(\r\n \"N_RadioGrpDirections_ID\",\r\n \"A_Destination\",\r\n \"Direction\",\r\n this.props.radioGrpDirections,\r\n 0\r\n )\r\n : this.renderRadioGroupDirections(\r\n \"N_RadioGrpDirections_ID\",\r\n \"A_Destination\",\r\n \"Direction\",\r\n this.props.radioGrpDirections,\r\n 0\r\n )} */}\r\n
\r\n
\r\n {this.renderImageFile(\"I_Image\", \"Upload Image\")}\r\n {this.state.waitingForFileUpload && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n \r\n Clear Image\r\n \r\n
\r\n \r\n
\r\n

\r\n
\r\n {this.renderImageOnImageFile(\r\n \"I_ImageOnImage\",\r\n \"Upload Image On Image\"\r\n )}\r\n {this.state.waitingForFileUpload02 && (\r\n
\r\n Uploading file...\r\n
\r\n )}\r\n \r\n Clear Image On Image\r\n \r\n
\r\n \r\n {/* */}\r\n {/*
\r\n
\r\n\r\n {this.renderInputBillboardLargeLink(\r\n \"A_BillboardLargeLink\",\r\n \"URL Link\"\r\n )} */}\r\n
\r\n
\r\n {/* {this.renderInputHoverSummary(\"A_HoverSummary01\", \"Hover One\")} */}\r\n {this.renderInputHoverSummary01_Link(\r\n \"A_HoverSummary01_Link\",\r\n \"URL Link\"\r\n )}\r\n {this.renderCheckboxHoverSummary01_Link(\r\n \"B_HoverSummary01_Linked\",\r\n \"URL Linked\"\r\n )}\r\n {this.renderCheckbox(\r\n \"B_HoverSummary01_Link_External\",\r\n \"URL Linked External\"\r\n )}\r\n {/* {this.renderInputHoverSummary(\"A_HoverSummary02\", \"Hover Two\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary02_Link\",\r\n \"Hover Two URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary03\", \"Hover Three\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary03_Link\",\r\n \"Hover Three URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary04\", \"Hover Four\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary04_Link\",\r\n \"Hover Four URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary05\", \"Hover Five\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary05_Link\",\r\n \"Hover Five URL Link\"\r\n )}\r\n {this.renderInputHoverSummary(\"A_HoverSummary06\", \"Hover Six\")}\r\n {this.renderInputHoverSummary(\"A_HoverSummary07\", \"Hover Seven\")}\r\n {this.renderInputHoverSummary(\"A_HoverSummary08\", \"Hover Eight\")}\r\n {this.renderInputHoverSummary(\r\n \"A_HoverSummary08_Link\",\r\n \"Hover Eight URL Link\"\r\n )} */}\r\n
\r\n
\r\n {this.renderInput(\"A_Reference\", \"Reference\")}\r\n {this.renderInput(\"A_Summary\", \"Summary\")}\r\n {/* {this.renderInput(\"A_Description\", \"Description\")} */}\r\n
\r\n
\r\n
\r\n {this.renderButton(\"Save\")}\r\n {this.renderButtonCancel(\"Cancel\")}\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // menus: state.entities.menus.list.filter(menu => !menu.resolved)\r\n homeBillboardChild: state.entities.homeBillboardChilds.listSingleRow\r\n // radioGrpDirections: state.entities.radioGrpDirections.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboardChild: id => dispatch(loadHomeBillboardChild(id)),\r\n // loadRadioGrpDirections: () => dispatch(loadRadioGrpDirections()),\r\n addHomeBillboardChild: (homeBillboardChild, user, currentDate) =>\r\n dispatch(addHomeBillboardChild(homeBillboardChild, user, currentDate)),\r\n changeHomeBillboardChild: (homeBillboardChild, user, currentDate) =>\r\n dispatch(changeHomeBillboardChild(homeBillboardChild, user, currentDate))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Menus)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.menus' and 'this.props.loadMenus()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(HomeBillboardForm);\r\n","import React, { Component } from \"react\";\r\nimport auth from \"../../services/authService\";\r\nimport Table from \"../common/table\";\r\nimport Active from \"../common/active\";\r\n\r\nclass HomeBillboardChildsTable extends Component {\r\n columns = [];\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount UsersTable 01 : \");\r\n }\r\n\r\n updateColumn = {\r\n key: \"update\",\r\n type: \"text\",\r\n content: homeBillboardChild =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n this.props.onUpdate(homeBillboardChild)}\r\n className=\"btn btn-info btn-sm pull-right enabled\"\r\n >\r\n Update\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n deleteColumn = {\r\n key: \"delete\",\r\n type: \"text\",\r\n content: homeBillboardChild =>\r\n auth.getCurrentUser().t_role_a_name === \"Admin\" ? (\r\n {\r\n if (homeBillboardChild.N_HB_Count < 1) {\r\n if (\r\n window.confirm(\r\n `Are you sure you want to delete Home Billboard '${homeBillboardChild.A_Reference}${homeBillboardChild.A_HoverSummary01}'?`\r\n )\r\n ) {\r\n this.props.onDelete(homeBillboardChild);\r\n }\r\n }\r\n }}\r\n className={\r\n homeBillboardChild.N_HB_Count > 0\r\n ? \"btn btn-danger btn-sm disabled\"\r\n : \"btn btn-danger btn-sm enabled\"\r\n }\r\n >\r\n Delete\r\n \r\n ) : (\r\n \r\n )\r\n };\r\n\r\n constructor() {\r\n super();\r\n const homeBillboardChilds = [{ ID: 1 }];\r\n\r\n homeBillboardChilds.map(\r\n item => (\r\n this.columns.push({\r\n path: \"ID\",\r\n label: \"Identifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"N_OrderNo\",\r\n label: \"Order\",\r\n type: \"text\"\r\n }),\r\n // this.columns.push({\r\n // path: \"A_RadioGrpDirections\",\r\n // label: \"Direction\",\r\n // type: \"text\"\r\n // }),\r\n this.columns.push({\r\n path: \"A_HoverSummary01\",\r\n label: \"Hover\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n path: \"A_Reference\",\r\n label: \"Reference\",\r\n type: \"text\"\r\n }),\r\n // this.columns.push({\r\n // path: \"A_Summary\",\r\n // label: \"Summary\",\r\n // type: \"textEditor\"\r\n // }),\r\n // this.columns.push({\r\n // path: \"A_Description\",\r\n // label: \"Description\",\r\n // type: \"textEditor\"\r\n // }),\r\n this.columns.push({\r\n path: \"N_HomeBillboards_ID\",\r\n label: \"BillboardHomesIdentifier\",\r\n hidden: true,\r\n type: \"text\"\r\n }),\r\n this.columns.push({ path: \"I_Image\", label: \"Image\", type: \"image\" }),\r\n this.columns.push({\r\n ID: 9,\r\n path: \"D_Inserted\",\r\n label: \"Inserted\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n ID: 10,\r\n path: \"A_Inserted_By\",\r\n label: \"Inserted_By\",\r\n type: \"text\"\r\n }),\r\n this.columns.push({\r\n ID: 11,\r\n path: \"D_Updated\",\r\n label: \"Updated\",\r\n type: \"date\"\r\n }),\r\n this.columns.push({\r\n ID: 12,\r\n path: \"A_Updated_By\",\r\n label: \"Updated_By\",\r\n type: \"text\"\r\n })\r\n )\r\n );\r\n\r\n this.columns.push(this.updateColumn);\r\n this.columns.push(this.deleteColumn);\r\n\r\n //const user = auth.getCurrentUser();\r\n //console.log(\"Home Billboards details : \", homeBillboard);\r\n }\r\n // //\r\n // // Babak's Note: Below we add a condition that the user must be logged in and have an admin user in order to see\r\n // // the 'delete' button:-\r\n // constructor() {\r\n // super();\r\n // const user = auth.getCurrentUser();\r\n // if (user && user.isAdmin) this.columns.push(this.deleteColumn);\r\n // }\r\n\r\n render() {\r\n //console.log(\"render usersTable\");\r\n const { homeBillboardChildsList, onSort, sortColumn } = this.props;\r\n return (\r\n \r\n );\r\n }\r\n}\r\nexport default HomeBillboardChildsTable;\r\n","import React, { Component } from \"react\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Redirect } from \"react-router\";\r\nimport { toast } from \"react-toastify\";\r\nimport HomeBillboardChildsTable from \"./homeBillboardChildsTable\";\r\nimport Pagination from \"../common/pagination\";\r\nimport { paginate } from \"../../utils/paginate\";\r\nimport {\r\n loadHomeBillboardChilds,\r\n deleteHomeBillboardChild\r\n} from \"../../store/homeBillboardChilds\";\r\nimport { connect } from \"react-redux\";\r\nimport _ from \"lodash\";\r\nimport SearchBox from \"../searchBox\";\r\n\r\nclass HomeBillboardChildsList extends Component {\r\n state = {\r\n groups: [],\r\n homeBillboardID: 0,\r\n homeBillboardChildForm: false,\r\n homeBillboardID: 0,\r\n currentPage: 1,\r\n pageSize: 8,\r\n searchQuery: \"\",\r\n sortColumn: { path: \"N_Order_No\", order: \"asc\" }\r\n };\r\n\r\n async componentDidMount() {\r\n // window.alert(\"componentDidMount GroupsList 01 : \");\r\n\r\n document.body.style.backgroundImage = `url()`;\r\n document.body.style.backgroundColor = \"white\";\r\n document.body.style.backgroundPosition = \"center center\";\r\n document.body.style.backgroundAttachment = \"fixed\";\r\n document.body.style.backgroundRepeat = \"no-repeat\";\r\n document.body.style.backgroundSize = \"cover\";\r\n\r\n const homeBillboardID = this.props.match.params.homeBillboardID;\r\n\r\n // window.alert(\r\n // `RadioGrpDirectionsID 2 : ${this.props.match.params.RadioGrpDirectionsID}`\r\n // );\r\n\r\n await this.props.loadHomeBillboardChilds(homeBillboardID);\r\n }\r\n\r\n handleUpdate = async homeBillboardChild => {\r\n try {\r\n this.setState({\r\n homeBillboardChildForm: true,\r\n homeBillboardChildID: homeBillboardChild.ID,\r\n homeBillboardID: this.props.match.params.homeBillboardID\r\n });\r\n // window.location = `/groupForm/${group.ID}/${this.props.match.params.homeBillboardID}`;\r\n } catch (ex) {\r\n if (ex.response && ex.response.status === 400) {\r\n const errors = { ...ex.errors };\r\n this.setState({ errors });\r\n }\r\n }\r\n };\r\n\r\n handlePageChange = page => {\r\n //console.log(page);\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n //\r\n // Babak's Note: We have put this 'input' field inside of the 'SearchBox' component, this component raises\r\n // an event and in the we get an string. So below 'query' will contain the string the user\r\n // types in the search field.\r\n handleSearch = query => {\r\n // console.log(\"query : \", query);\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n // console.log(\"handleSort : \", sortColumn);\r\n this.setState({ sortColumn });\r\n };\r\n\r\n getPagedData = () => {\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //console.log(\"searchQuery 2 : \", searchQuery);\r\n\r\n const allHomeBillboardChilds = this.props.homeBillboardChilds;\r\n\r\n let filtered = allHomeBillboardChilds;\r\n if (searchQuery)\r\n filtered = allHomeBillboardChilds.filter(m =>\r\n m.A_Reference.toLowerCase().includes(searchQuery.toLowerCase())\r\n );\r\n\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n\r\n const homeBillboardChilds = paginate(sorted, currentPage, pageSize);\r\n\r\n return { totalCount: filtered.length, data: homeBillboardChilds };\r\n };\r\n\r\n render() {\r\n //console.log(\"render homeBillboardChilds\");\r\n\r\n const RadioGrpDirectionsID = this.props.match.params.RadioGrpDirectionsID;\r\n\r\n if (this.state.homeBillboardChildForm === true) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n // if (this.props.homeBillboardChilds.length === 0)\r\n // return
;\r\n\r\n // const { length: count } = this.state.homeBillboardChilds;\r\n\r\n const { pageSize, currentPage, sortColumn, searchQuery } = this.state;\r\n\r\n //\r\n //Babak's Note: Below I renamed 'data' to 'homeBillboardChilds'\r\n // console.log(\"searchQuery 1 : \");\r\n\r\n const { totalCount, data: homeBillboardChildsList } = this.getPagedData();\r\n\r\n // console.log(\r\n // \"render homeBillboardChilds ddddddddddddddddddddddddddd : \",\r\n // RadioGrpDirectionsID,\r\n // totalCount\r\n // );\r\n\r\n return (\r\n
\r\n
\r\n \r\n

Home Billboard Childs

\r\n
\r\n\r\n {RadioGrpDirectionsID === \"1\" && totalCount === 1 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"2\" && totalCount <= 2 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"3\" && totalCount <= 4 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"4\" && totalCount <= 6 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"5\" && totalCount <= 4 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"6\" && totalCount <= 4 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"7\" && totalCount <= 7 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"8\" && totalCount <= 4 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : RadioGrpDirectionsID === \"9\" && totalCount <= 4 ? (\r\n \r\n New Home Billboard Child\r\n \r\n ) : (\r\n \r\n Maximum number of Home Billboard Childs reached!\r\n \r\n )}\r\n\r\n

Showing {totalCount} Home Billboard Childs in the database.

\r\n \r\n \r\n this.props.deleteHomeBillboardChild(homeBillboardChild)\r\n }\r\n onSort={this.handleSort}\r\n />\r\n
\r\n \r\n
\r\n
\r\n \r\n Back to Home Billboards\r\n \r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n homeBillboardChilds: state.entities.homeBillboardChilds.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboardChilds: homeBillboardID =>\r\n dispatch(loadHomeBillboardChilds(homeBillboardID)),\r\n deleteHomeBillboardChild: homeBillboardChild =>\r\n dispatch(deleteHomeBillboardChild(homeBillboardChild))\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(HomeBillboardChildsList);\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeBillboardsMains\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeBillboardsMainsRequested' or 'homeBillboardsMainsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeBillboardsMains' below represents the 'state':-\r\n homeBillboardsMainsRequested: (homeBillboardsMains, action) => {\r\n console.log(\"homeBillboardsMainsRequested : \", action.payload);\r\n homeBillboardsMains.loading = true;\r\n },\r\n homeBillboardsMainsReceived: (homeBillboardsMains, action) => {\r\n console.log(\"homeBillboardsMainsReceived : \", action.payload);\r\n homeBillboardsMains.list = action.payload;\r\n homeBillboardsMains.loading = false;\r\n homeBillboardsMains.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainsRequestedFailed: (homeBillboardsMains, action) => {\r\n homeBillboardsMains.loading = false;\r\n // window.alert(`No HomeBillboardsMains found.`);\r\n },\r\n\r\n homeBillboardsMainsOnNavbarRequested: (homeBillboardsMains, action) => {\r\n console.log(\"homeBillboardsMainsOnNavbarRequested : \", action.payload);\r\n homeBillboardsMains.loading = true;\r\n },\r\n homeBillboardsMainsOnNavbarReceived: (homeBillboardsMains, action) => {\r\n console.log(\"homeBillboardsMainsOnNavbarReceived : \", action.payload);\r\n homeBillboardsMains.listOnNavvar = action.payload;\r\n homeBillboardsMains.loading = false;\r\n homeBillboardsMains.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainsOnNavbarRequestedFailed: (\r\n homeBillboardsMains,\r\n action\r\n ) => {\r\n homeBillboardsMains.loading = false;\r\n // window.alert(`No HomeBillboardsMains found.`);\r\n },\r\n\r\n homeBillboardsMainRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainReceived: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainReceived : \", action.payload);\r\n homeBillboardsMain.listSingleRow = action.payload;\r\n homeBillboardsMain.loading = false;\r\n homeBillboardsMain.lastFetch = Date.now();\r\n },\r\n homeBillboardsMainRequestedFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n // window.alert(`No HomeBillboardsMain found.`);\r\n },\r\n homeBillboardsMainChangeRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainChangeRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainChangeFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n // const { ID: homeBillboardsMainId, A_Name: homeBillboardsMainName } = action.payload;\r\n\r\n // window.alert(`HomeBillboardsMain '${homeBillboardsMainName}' no longer exists.`);\r\n\r\n // const index = homeBillboardsMain.list.findIndex(homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainId);\r\n // //console.log(\"homeBillboardsMainDeleted ha \", index);\r\n // homeBillboardsMain.list.splice(index, 1);\r\n },\r\n homeBillboardsMainChanged: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n },\r\n homeBillboardsMainDeleteRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainDeleteRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainDeleteFailed: (homeBillboardsMains, action) => {\r\n homeBillboardsMains.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n const {\r\n ID: homeBillboardsMainId,\r\n A_Name: homeBillboardsMainName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeBillboardsMain '${homeBillboardsMainName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeBillboardsMains.list.findIndex(\r\n homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainId\r\n );\r\n //console.log(\"homeBillboardsMainDeleted ha \", index);\r\n homeBillboardsMains.list.splice(index, 1);\r\n },\r\n homeBillboardsMainDeleted: (homeBillboardsMains, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardsMain api at the back end.\r\n const { ID: homeBillboardsMainID } = action.payload;\r\n // console.log(\"homeBillboardsMainDeleted ha \", action.payload, homeBillboardsMainID, homeBillboardsMains);\r\n const index = homeBillboardsMains.list.findIndex(\r\n homeBillboardsMain => homeBillboardsMain.ID === homeBillboardsMainID\r\n );\r\n //console.log(\"homeBillboardsMainDeleted, ha! ha! \", index);\r\n homeBillboardsMains.list.splice(index, 1);\r\n },\r\n homeBillboardsMainAddRequested: (homeBillboardsMain, action) => {\r\n console.log(\"homeBillboardsMainAddRequested : \", action.payload);\r\n homeBillboardsMain.loading = true;\r\n },\r\n homeBillboardsMainAddFailed: (homeBillboardsMain, action) => {\r\n homeBillboardsMain.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeBillboardsMains' below represents the 'state':-\r\n homeBillboardsMainAdded: (homeBillboardsMains, action) => {\r\n console.log(\"homeBillboardsMainAdded : \", action.payload);\r\n homeBillboardsMains.list.push(action.payload);\r\n }\r\n // homeBillboardsMainAdded: (homeBillboardsMains, action) => {\r\n // homeBillboardsMains.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeBillboardsMainDeleted: (homeBillboardsMains, action) => {\r\n // console.log(\"homeBillboardsMainDeleted ha \", action.payload.ID);\r\n // homeBillboardsMains.list.filter(homeBillboardsMain => homeBillboardsMain.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeBillboardsMainAddRequested,\r\n homeBillboardsMainAdded,\r\n homeBillboardsMainAddFailed,\r\n homeBillboardsMainChangeRequested,\r\n homeBillboardsMainChanged,\r\n homeBillboardsMainChangeFailed,\r\n homeBillboardsMainDeleteRequested,\r\n homeBillboardsMainDeleted,\r\n homeBillboardsMainDeleteFailed,\r\n homeBillboardsMainsReceived,\r\n homeBillboardsMainsRequested,\r\n homeBillboardsMainsRequestedFailed,\r\n homeBillboardsMainsOnNavbarReceived,\r\n homeBillboardsMainsOnNavbarRequested,\r\n homeBillboardsMainsOnNavbarRequestedFailed,\r\n homeBillboardsMainReceived,\r\n homeBillboardsMainRequested,\r\n homeBillboardsMainRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/homeBillboardsMains\";\r\n\r\nexport const loadHomeBillboardsMains = () => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.homeBillboardsMains;\r\n\r\n // console.log(\"loadHomeBillboardsMains lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/main\",\r\n onStart: homeBillboardsMainsRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardsMainsReceived.type,\r\n onError: homeBillboardsMainsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeBillboardsMain = homeBillboardsMainID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardsMains;\r\n\r\n //console.log(\"loadHomeBillboardsMain : \", homeBillboardsMainID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMainID,\r\n onStart: homeBillboardsMainRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardsMainReceived.type,\r\n onError: homeBillboardsMainRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeBillboardsMain':-\r\nexport const addHomeBillboardsMain = (homeBillboardsMain, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeBillboardsMainAddRequested.type,\r\n //data: homeBillboardsMain,\r\n data: {\r\n N_OrderNo: homeBillboardsMain.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardsMain.N_RadioGrpDirections_ID,\r\n N_HomeBillboardsMains_ID: homeBillboardsMain.N_HomeBillboardsMains_ID,\r\n // A_BillboardLargeLink: homeBillboardsMain.A_BillboardLargeLink,\r\n A_Reference: homeBillboardsMain.A_Reference,\r\n A_Summary: homeBillboardsMain.A_Summary,\r\n A_Description: homeBillboardsMain.A_Description,\r\n A_HoverSummary01: homeBillboardsMain.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardsMain.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardsMain.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardsMain.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardsMain.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardsMain.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardsMain.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardsMain.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardsMain.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardsMain.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardsMain.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardsMain.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardsMain.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardsMain.A_HoverSummary08_Link,\r\n I_Image: homeBillboardsMain.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: homeBillboardsMainAdded.type,\r\n onError: homeBillboardsMainAddFailed.type\r\n });\r\n\r\nexport const getHomeBillboardsMains = createSelector(\r\n state => state.entities.homeBillboardsMains,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeBillboardsMains, projects) has not changed then do not requery again:-\r\n // (homeBillboardsMains) => homeBillboardsMains.list.filter(homeBillboardsMain => !homeBillboardsMain.B_Active)\r\n homeBillboardsMains => homeBillboardsMains.list\r\n);\r\n\r\nexport const changeHomeBillboardsMain = (\r\n homeBillboardsMain,\r\n user,\r\n currentDate\r\n) =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMain.ID,\r\n method: \"put\",\r\n onStart: homeBillboardsMainChangeRequested.type,\r\n data: {\r\n N_OrderNo: homeBillboardsMain.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardsMain.N_RadioGrpDirections_ID,\r\n N_HomeBillboardsMains_ID: homeBillboardsMain.N_HomeBillboardsMains_ID,\r\n // A_BillboardLargeLink: homeBillboardsMain.A_BillboardLargeLink,\r\n A_Reference: homeBillboardsMain.A_Reference,\r\n A_Summary: homeBillboardsMain.A_Summary,\r\n A_Description: homeBillboardsMain.A_Description,\r\n A_HoverSummary01: homeBillboardsMain.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardsMain.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardsMain.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardsMain.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardsMain.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardsMain.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardsMain.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardsMain.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardsMain.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardsMain.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardsMain.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardsMain.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardsMain.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardsMain.A_HoverSummary08_Link,\r\n I_Image: homeBillboardsMain.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: homeBillboardsMainChanged.type,\r\n onError: homeBillboardsMainChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeBillboardsMain = homeBillboardsMain =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardsMain.ID,\r\n method: \"delete\",\r\n onStart: homeBillboardsMainDeleteRequested.type,\r\n data: {\r\n ID: homeBillboardsMain.ID,\r\n A_Reference: homeBillboardsMain.A_Reference\r\n },\r\n onSuccess: homeBillboardsMainDeleted.type,\r\n onError: homeBillboardsMainDeleteFailed.type\r\n });\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMains extends Component {\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderImage = ({\r\n image,\r\n ChildImageLink,\r\n ChildImage,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n
\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n className={ChildImageLink}\r\n >\r\n
\r\n
\r\n
\r\n ) : (\r\n \r\n
\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n className={ChildImageLink}\r\n >\r\n
\r\n
\r\n
\r\n )\r\n ) : (\r\n
\r\n
\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n src={image}\r\n className={ChildImage}\r\n >\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderReference = ({\r\n reference,\r\n referenceCSS,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n return (\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n \r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n
*/}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n item,\r\n nameOfClass,\r\n referenceCSS,\r\n ChildImageLink,\r\n ChildImage\r\n } = this.props;\r\n\r\n return (\r\n \r\n \r\n\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMains;\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMainsXS extends Component {\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderImage = ({\r\n image,\r\n ChildImageLink,\r\n ChildImage,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n
\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n className={ChildImageLink}\r\n >\r\n
\r\n
\r\n
\r\n ) : (\r\n \r\n
\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n className={ChildImageLink}\r\n >\r\n
\r\n
\r\n
\r\n )\r\n ) : (\r\n
\r\n
\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n src={image}\r\n className={ChildImage}\r\n >\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderReference = ({\r\n reference,\r\n referenceCSS,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n return (\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n \r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n
*/}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n item,\r\n nameOfClass,\r\n referenceCSS,\r\n ChildImageLink,\r\n ChildImage\r\n } = this.props;\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMainsXS;\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/homeBillboards\";\r\n// const apiEndpointHomeBillboardsMain = apiUrl + \"/homeBillboards/main\";\r\n\r\nconst apiEndpointHomeBillboardChildsMains = \"/homeBillboardChildsMains\";\r\n\r\nfunction HomeBillboardChildsMainsUrl(id) {\r\n return `${apiEndpointHomeBillboardChildsMains}/main/${id}`;\r\n}\r\n\r\nexport function getHomeBillboardChildsMains(homeBillboardID) {\r\n //console.log(\"getHomeBillboardChildsMains : \", HomeBillboardChildsMainsUrl(homeBillboardID));\r\n\r\n return http.get(HomeBillboardChildsMainsUrl(homeBillboardID));\r\n}\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport RenderHomeBillboardChildsMains from \"./renderHomeBillboardChildsMains\";\r\nimport RenderHomeBillboardChildsMainsXS from \"./renderHomeBillboardChildsMainsXS\";\r\n//import slideInLeft from \"react-animations/lib/slide-in-left\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMains\";\r\n\r\nclass HomeBillboardChildsMain extends Component {\r\n state = {\r\n homeBillboardChildsMains: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMains\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({ homeBillboardChildsMains });\r\n }\r\n\r\n render() {\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n\r\n const { homeBillboardChildsMains } = this.state;\r\n const { length: count } = this.state.homeBillboardChildsMains;\r\n if (count === 0) return
;\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {homeBillboardChildsMains.map((item, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {homeBillboardChildsMains.map((item, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {homeBillboardChildsMains.map((item, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {homeBillboardChildsMains.map((item, index) => (\r\n \r\n ))}\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n {/* \r\n \r\n \r\n */}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMain;\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n// import backgroundImage from \"../../images/logo.jpeg\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMainKeypad extends Component {\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderParentImage = ({\r\n image,\r\n imageOnImage,\r\n parentImageLink,\r\n reference,\r\n parentReferenceLink,\r\n summary,\r\n parentSummaryLink,\r\n urlLink\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={parentImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n RenderChildImage = ({\r\n image,\r\n imageOnImage,\r\n childImageLink,\r\n reference,\r\n childReferenceLink,\r\n summary,\r\n childSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n // console.log(`Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${reference}`);\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={childImageLink}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n
\r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderReference = ({ reference, referenceCSS, urlLink }) => {\r\n return (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n homeBillboardChildsMainKeypad,\r\n nameOfClassParentColumn,\r\n nameOfClassChildColumn,\r\n mediaAttribute,\r\n parentImageLink,\r\n parentReferenceLink,\r\n parentSummaryLink,\r\n childImageLink,\r\n childReferenceLink,\r\n childSummaryLink\r\n } = this.props;\r\n\r\n // console.log(\r\n // `Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${homeBillboardChildsMainKeypad.length}`\r\n // );\r\n\r\n return (\r\n
\r\n {/*
Hello
\r\n
\r\n
\r\n Bye1\r\n
\r\n
\r\n Bye2\r\n
\r\n
\r\n Bye3\r\n
\r\n
\r\n Bye4\r\n
\r\n
*/}\r\n {/* *** Babak's Notes: Below is the make up of above *** */}\r\n\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainKeypad.map((item, index) =>\r\n index < 4 ? (\r\n \r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"MD\" ? (\r\n
\r\n \r\n {homeBillboardChildsMainKeypad.map((item, index) => (\r\n \r\n \r\n
\r\n ))}\r\n \r\n \r\n ) : mediaAttribute === \"SM\" ? (\r\n
\r\n \r\n {homeBillboardChildsMainKeypad.map((item, index) => (\r\n \r\n \r\n
\r\n ))}\r\n \r\n \r\n ) : mediaAttribute === \"XS\" ? (\r\n
\r\n \r\n {homeBillboardChildsMainKeypad.map((item, index) => (\r\n \r\n \r\n
\r\n ))}\r\n \r\n \r\n ) : (\r\n \"\"\r\n )}\r\n\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainKeypad.map((item, index) =>\r\n index > 3 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n // \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMainKeypad;\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/homeBillboards\";\r\n// const apiEndpointHomeBillboardsMain = apiUrl + \"/homeBillboards/main\";\r\n\r\nconst apiEndpointHomeBillboardChildsMains = \"/homeBillboardChildsMains\";\r\n\r\nfunction HomeBillboardChildsMainsUrl(id) {\r\n return `${apiEndpointHomeBillboardChildsMains}/main/${id}`;\r\n}\r\n\r\nexport function getHomeBillboardChildsMains(homeBillboardID) {\r\n //console.log(\"getHomeBillboardChildsMains : \", HomeBillboardChildsMainsUrl(homeBillboardID));\r\n\r\n return http.get(HomeBillboardChildsMainsUrl(homeBillboardID));\r\n}\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport RenderHomeBillboardChildsMainKeypad from \"./renderHomeBillboardChildsMainKeypad\";\r\n//import slideInLeft from \"react-animations/lib/slide-in-left\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMainKeypad\";\r\n\r\nclass HomeBillboardChildsMainKeypad extends Component {\r\n state = {\r\n homeBillboardChildsMainKeypad: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMainKeypad\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({ homeBillboardChildsMainKeypad });\r\n }\r\n\r\n render() {\r\n const mainView = this.props.mainView;\r\n const identifier = this.props.identifier;\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n const imageParent = this.props.imageParent;\r\n const urlLinkParent = this.props.urlLinkParent;\r\n\r\n const { homeBillboardChildsMainKeypad } = this.state;\r\n // const { length: count } = this.state.homeBillboardChildsMainKeypad;\r\n // window.alert(`Number of rows : ${count}`);\r\n // if (count === 0) return
;\r\n\r\n // window.alert(`Number of rows : ${reference}`);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {/*
\r\n
top row
\r\n
\r\n
\r\n
\r\n top row2\r\n
\r\n
\r\n bottom row2\r\n
\r\n
\r\n top row3\r\n
\r\n
\r\n bottom row3\r\n
\r\n
*/}\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMainKeypad;\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Link, NavLink, withRouter, Route } from \"react-router-dom\";\r\n// import backgroundImage from \"../../images/logo.jpeg\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMainKeypadListRight extends Component {\r\n state = {\r\n navMaster: false,\r\n navDetail: false,\r\n link: \"\"\r\n };\r\n\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderParentImage = ({\r\n id,\r\n image,\r\n imageOnImage,\r\n parentImageLink,\r\n reference,\r\n parentReferenceLink,\r\n summary,\r\n parentSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"310px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={parentImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderChildImage = ({\r\n id,\r\n image,\r\n imageOnImage,\r\n childImageLink,\r\n reference,\r\n childReferenceLink,\r\n summary,\r\n childSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n // console.log(`Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${reference}`);\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n src={image}\r\n className={childImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderVericalMenu = ({ id, reference, billboardOriginID, billboardID }) => {\r\n return billboardOriginID === 2 ? (\r\n \r\n \r\n {reference}\r\n \r\n \r\n ) : billboardOriginID === 3 ? (\r\n \r\n \r\n {reference}\r\n \r\n \r\n ) : (\r\n \"\"\r\n );\r\n };\r\n\r\n closeNav = item => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n // if (window.location.pathname != \"/homeBillboardsMain\") {\r\n // window.location = `/appointments`;\r\n // }\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n this.setState({ navMaster: true, link: `../detailsMaster/${item.ID}` });\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n this.setState({ navDetail: true, link: `../detailsDetail/${item.ID}` });\r\n }\r\n };\r\n\r\n RenderReference = ({ reference, referenceCSS, urlLink }) => {\r\n return (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n homeBillboardChildsMainKeypadList,\r\n homeBillboardLargesWindows,\r\n nameOfClassParentColumn,\r\n nameOfClassChildColumn,\r\n mediaAttribute,\r\n parentImageLink,\r\n parentReferenceLink,\r\n parentSummaryLink,\r\n childImageLink,\r\n childReferenceLink,\r\n childSummaryLink,\r\n textFC,\r\n description\r\n } = this.props;\r\n\r\n if (this.state.navMaster === true) {\r\n // window.alert(`${this.state.link}`);\r\n window.location = `../detailsMaster/${this.state.link}`;\r\n } else if (this.state.navDetail === true) {\r\n // window.alert(`${this.state.link}`);\r\n window.location = `../detailsDetail/${this.state.link}`;\r\n }\r\n\r\n // console.log(\r\n // `Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${homeBillboardChildsMainKeypadList.length}`\r\n // );\r\n\r\n return (\r\n
\r\n {/*
Hello
\r\n
\r\n
\r\n Bye1\r\n
\r\n
\r\n Bye2\r\n
\r\n
\r\n Bye3\r\n
\r\n
\r\n Bye4\r\n
\r\n
*/}\r\n {/* *** Babak's Notes: Below is the make up of above *** */}\r\n\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n
\r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"MD\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n \r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"SM\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n \r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"XS\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n \r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n\r\n \r\n \r\n \r\n {description}\r\n \r\n {homeBillboardLargesWindows.map((item, index) => (\r\n {\r\n this.closeNav(item);\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n }}\r\n // style={{ backgroundImage: `url(${item.I_Image})` }}\r\n >\r\n \r\n {/* {item.A_Reference} */}\r\n \r\n ))}\r\n \r\n \r\n \r\n\r\n // \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMainKeypadListRight;\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/homeBillboards\";\r\n// const apiEndpointHomeBillboardsMain = apiUrl + \"/homeBillboards/main\";\r\n\r\nconst apiEndpointHomeBillboardChildsMains = \"/homeBillboardChildsMains\";\r\n\r\nfunction HomeBillboardChildsMainsUrl(id) {\r\n return `${apiEndpointHomeBillboardChildsMains}/main/${id}`;\r\n}\r\n\r\nexport function getHomeBillboardChildsMains(homeBillboardID) {\r\n //console.log(\"getHomeBillboardChildsMains : \", HomeBillboardChildsMainsUrl(homeBillboardID));\r\n\r\n return http.get(HomeBillboardChildsMainsUrl(homeBillboardID));\r\n}\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport RenderHomeBillboardChildsMainKeypadListRight from \"./renderHomeBillboardChildsMainKeypadListRight\";\r\n//import slideInLeft from \"react-animations/lib/slide-in-left\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMainKeypadList\";\r\nimport { getBillboardLargesSlides } from \"../../services/billboardLargeService\";\r\n\r\nclass HomeBillboardChildsMainKeypadListRight extends Component {\r\n state = {\r\n homeBillboardChildsMainKeypadList: [],\r\n homeBillboardLargesWindows: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMainKeypadList\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n const {\r\n data: homeBillboardLargesWindows\r\n } = await getBillboardLargesSlides();\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({\r\n homeBillboardChildsMainKeypadList,\r\n homeBillboardLargesWindows\r\n });\r\n }\r\n\r\n render() {\r\n const identifier = this.props.identifier;\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n const description = this.props.description;\r\n const imageParent = this.props.imageParent;\r\n const urlLinkParent = this.props.urlLinkParent;\r\n\r\n const {\r\n homeBillboardChildsMainKeypadList,\r\n homeBillboardLargesWindows\r\n } = this.state;\r\n\r\n // const { length: count } = this.state.homeBillboardChildsMainKeypadList;\r\n // window.alert(`Number of rows : ${count}`);\r\n // if (count === 0) return
;\r\n\r\n // window.alert(`Number of rows : ${reference}`);\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n {/*
\r\n
top row
\r\n
\r\n
\r\n
\r\n top row2\r\n
\r\n
\r\n bottom row2\r\n
\r\n
\r\n top row3\r\n
\r\n
\r\n bottom row3\r\n
\r\n
*/}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMainKeypadListRight;\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Link, NavLink, withRouter, Route } from \"react-router-dom\";\r\n// import backgroundImage from \"../../images/logo.jpeg\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMainKeypadListLeft extends Component {\r\n state = {\r\n navMaster: false,\r\n navDetail: false,\r\n link: \"\"\r\n };\r\n\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderParentImage = ({\r\n id,\r\n image,\r\n imageOnImage,\r\n parentImageLink,\r\n reference,\r\n parentReferenceLink,\r\n summary,\r\n parentSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"310px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={parentImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={parentImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderChildImage = ({\r\n id,\r\n image,\r\n imageOnImage,\r\n childImageLink,\r\n reference,\r\n childReferenceLink,\r\n summary,\r\n childSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n // console.log(`Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${reference}`);\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={childImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderVericalMenu = ({ id, reference, billboardOriginID, billboardID }) => {\r\n return billboardOriginID === 2 ? (\r\n \r\n \r\n {reference}\r\n \r\n \r\n ) : billboardOriginID === 3 ? (\r\n \r\n \r\n {reference}\r\n \r\n \r\n ) : (\r\n \"\"\r\n );\r\n };\r\n\r\n closeNav = item => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n // if (window.location.pathname != \"/homeBillboardsMain\") {\r\n // window.location = `/appointments`;\r\n // }\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n this.setState({ navMaster: true, link: `../detailsMaster/${item.ID}` });\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n this.setState({ navDetail: true, link: `../detailsDetail/${item.ID}` });\r\n }\r\n };\r\n\r\n RenderReference = ({ reference, referenceCSS, urlLink }) => {\r\n return (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n homeBillboardChildsMainKeypadList,\r\n homeBillboardLargesSlides,\r\n nameOfClassParentColumn,\r\n nameOfClassChildColumn,\r\n mediaAttribute,\r\n parentImageLink,\r\n parentReferenceLink,\r\n parentSummaryLink,\r\n childImageLink,\r\n childReferenceLink,\r\n childSummaryLink,\r\n textFC,\r\n description\r\n } = this.props;\r\n\r\n if (this.state.navMaster === true) {\r\n // window.alert(`${this.state.link}`);\r\n window.location = `../detailsMaster/${this.state.link}`;\r\n } else if (this.state.navDetail === true) {\r\n // window.alert(`${this.state.link}`);\r\n window.location = `../detailsDetail/${this.state.link}`;\r\n }\r\n\r\n // console.log(\r\n // `Number of rows xxxxxxxxxxxxxxxxxxxxxxxxxx : ${homeBillboardChildsMainKeypadList.length}`\r\n // );\r\n\r\n return (\r\n
\r\n {/*
Hello
\r\n
\r\n
\r\n Bye1\r\n
\r\n
\r\n Bye2\r\n
\r\n
\r\n Bye3\r\n
\r\n
\r\n Bye4\r\n
\r\n
*/}\r\n {/* *** Babak's Notes: Below is the make up of above *** */}\r\n\r\n \r\n \r\n {description}\r\n \r\n \r\n {homeBillboardLargesSlides.map((item, index) => (\r\n {\r\n this.closeNav(item);\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n }}\r\n // style={{ backgroundImage: `url(${item.I_Image})` }}\r\n >\r\n \r\n {/* {item.A_Reference} */}\r\n \r\n ))}\r\n \r\n
\r\n\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n \r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"MD\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n \r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"SM\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n \r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"XS\" ? (\r\n \r\n {homeBillboardChildsMainKeypadList.map((item, index) =>\r\n index === 0 ? (\r\n \r\n \r\n \r\n ) : index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n // \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMainKeypadListLeft;\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport RenderHomeBillboardChildsMainKeypadListLeft from \"./renderHomeBillboardChildsMainKeypadListLeft\";\r\n//import slideInLeft from \"react-animations/lib/slide-in-left\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMainKeypadList\";\r\nimport { getBillboardLargesWindows } from \"../../services/billboardLargeService\";\r\n\r\nclass HomeBillboardChildsMainKeypadListLeft extends Component {\r\n state = {\r\n homeBillboardChildsMainKeypadList: [],\r\n homeBillboardLargesSlides: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMainKeypadList\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n const {\r\n data: homeBillboardLargesSlides\r\n } = await getBillboardLargesWindows();\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({\r\n homeBillboardChildsMainKeypadList,\r\n homeBillboardLargesSlides\r\n });\r\n }\r\n\r\n render() {\r\n const identifier = this.props.identifier;\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n const description = this.props.description;\r\n const imageParent = this.props.imageParent;\r\n const urlLinkParent = this.props.urlLinkParent;\r\n\r\n const {\r\n homeBillboardChildsMainKeypadList,\r\n homeBillboardLargesSlides\r\n } = this.state;\r\n\r\n // const { length: count } = this.state.homeBillboardChildsMainKeypadList;\r\n // window.alert(`Number of rows : ${count}`);\r\n // if (count === 0) return
;\r\n\r\n // window.alert(`Number of rows : ${reference}`);\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n {/*
\r\n
top row
\r\n
\r\n
\r\n
\r\n top row2\r\n
\r\n
\r\n bottom row2\r\n
\r\n
\r\n top row3\r\n
\r\n
\r\n bottom row3\r\n
\r\n
*/}\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMainKeypadListLeft;\r\n","import React, { Component } from \"react\";\r\nimport Flash from \"react-reveal/Flash\";\r\nimport HeadShake from \"react-reveal/HeadShake\";\r\nimport Jello from \"react-reveal/Jello\";\r\nimport Jump from \"react-reveal/Jump\";\r\nimport RubberBand from \"react-reveal/RubberBand\";\r\nimport Swing from \"react-reveal/Swing\";\r\nimport Tada from \"react-reveal/Tada\";\r\nimport Wobble from \"react-reveal/Wobble\";\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n\r\nimport { bottom } from \"@popperjs/core\";\r\n\r\nclass RenderHomeBillboardChildsMainVerticalImages extends Component {\r\n // async componentWillReceiveProps(nextProps) {\r\n // const { homeBillboardChildsMains } = nextProps;\r\n\r\n // if (\r\n // this.state.homeBillboardChildsMains !== nextProps.homeBillboardChildsMains\r\n // ) {\r\n // for (let i = 1; i < this.props.homeBillboardChildsMains.length; i++) {\r\n // console.log(\r\n // \"HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : \",\r\n // homeBillboardChildsMains[i],\r\n // this.props.homeBillboardChildsMains.length\r\n // );\r\n // }\r\n // this.setState({ homeBillboardChildsMains });\r\n // }\r\n\r\n // // console.log(\r\n // // `HomeBillboardChildsMain, componentWillReceivePropsssssssssssssssssssssssssssss : ${nextProps.homeBillboardChildsMains}`\r\n // // );\r\n // // const { homeBillboardChildsMains } = nextProps.homeBillboardChildsMains;\r\n // // this.setState({\r\n // // homeBillboardChildsMains\r\n // // });\r\n // }\r\n\r\n RenderParentImage = ({\r\n image,\r\n imageOnImage,\r\n parentImageLink,\r\n reference,\r\n parentReferenceLink,\r\n summary,\r\n parentSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${parentImageLink} boxShadowLight`}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={parentImageLink}\r\n >\r\n \r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n \r\n {reference}\r\n \r\n

{summary}

\r\n \r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderChildImage = ({\r\n image,\r\n imageOnImage,\r\n childImageLink,\r\n reference,\r\n childReferenceLink,\r\n summary,\r\n childSummaryLink,\r\n urlLink,\r\n urlLinked,\r\n urlLinkedExternal\r\n }) => {\r\n const sectionStyle = {\r\n // height: \"510px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n backgroundImage: `url(${image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n\r\n return (\r\n \r\n {urlLinked ? (\r\n urlLinkedExternal ? (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n
\r\n ) : (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={`${childImageLink} boxShadowLight`}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n \r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n // src={image}\r\n className={childImageLink}\r\n >\r\n
\r\n {imageOnImage ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n
\r\n\r\n \r\n

{reference}

\r\n

{summary}

\r\n
\r\n \r\n \r\n )}\r\n
\r\n );\r\n };\r\n\r\n RenderReference = ({ reference, referenceCSS, urlLink }) => {\r\n return (\r\n \r\n {\r\n // // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // // rows where N_HomeLocationGroup_ID === 1:-\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n // }}\r\n >\r\n
{reference}
\r\n\r\n {/* \r\n {item.A_Summary}\r\n */}\r\n {/* {\r\n // Babak's Note: HomeLocationGroup ID will always be \"1\" as I query for all \"t_billboardLarge\"\r\n // rows where N_HomeLocationGroup_ID === 1:-\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n window.location = `../detailsMaster/${item.ID}`;\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n window.location = `../detailsDetail/${item.ID}`;\r\n }\r\n }}\r\n >\r\n More...\r\n */}\r\n \r\n
\r\n );\r\n };\r\n\r\n render() {\r\n const {\r\n homeBillboardChildsMainVerticalImages,\r\n nameOfClassParentColumn,\r\n nameOfClassChildColumn,\r\n mediaAttribute,\r\n parentImageLink,\r\n parentReferenceLink,\r\n parentSummaryLink,\r\n childImageLink,\r\n childReferenceLink,\r\n childSummaryLink\r\n } = this.props;\r\n\r\n return (\r\n
\r\n {/*
Hello
\r\n
\r\n
\r\n Bye1\r\n
\r\n
\r\n Bye2\r\n
\r\n
\r\n Bye3\r\n
\r\n
\r\n Bye4\r\n
\r\n
*/}\r\n {/* *** Babak's Notes: Below is the make up of above *** */}\r\n \r\n {homeBillboardChildsMainVerticalImages.map((item, index) =>\r\n index === 0 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n
\r\n {mediaAttribute === \"LG\" ? (\r\n \r\n {homeBillboardChildsMainVerticalImages.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"MD\" ? (\r\n \r\n {homeBillboardChildsMainVerticalImages.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"SM\" ? (\r\n \r\n {homeBillboardChildsMainVerticalImages.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : mediaAttribute === \"XS\" ? (\r\n \r\n {homeBillboardChildsMainVerticalImages.map((item, index) =>\r\n index > 0 ? (\r\n \r\n \r\n \r\n ) : (\r\n \"\"\r\n )\r\n )}\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n\r\n // \r\n );\r\n }\r\n}\r\n\r\nexport default RenderHomeBillboardChildsMainVerticalImages;\r\n","import http from \"./httpService\";\r\n\r\n// import { apiUrl } from \"../config.json\";\r\n// const apiEndpoint = apiUrl + \"/homeBillboards\";\r\n// const apiEndpointHomeBillboardsMain = apiUrl + \"/homeBillboards/main\";\r\n\r\nconst apiEndpointHomeBillboardChildsMains = \"/homeBillboardChildsMains\";\r\n\r\nfunction HomeBillboardChildsMainsUrl(id) {\r\n return `${apiEndpointHomeBillboardChildsMains}/main/${id}`;\r\n}\r\n\r\nexport function getHomeBillboardChildsMains(homeBillboardID) {\r\n //console.log(\"getHomeBillboardChildsMains : \", HomeBillboardChildsMainsUrl(homeBillboardID));\r\n\r\n return http.get(HomeBillboardChildsMainsUrl(homeBillboardID));\r\n}\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport RenderHomeBillboardChildsMainVerticalImages from \"./renderHomeBillboardChildsMainVerticalImages\";\r\n//import slideInLeft from \"react-animations/lib/slide-in-left\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMainVerticalImages\";\r\n\r\nclass HomeBillboardChildsMainVerticalImages extends Component {\r\n state = {\r\n homeBillboardChildsMainVerticalImages: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMainVerticalImages\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({ homeBillboardChildsMainVerticalImages });\r\n }\r\n\r\n render() {\r\n const mainView = this.props.mainView;\r\n const identifier = this.props.identifier;\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n const imageParent = this.props.imageParent;\r\n const urlLinkParent = this.props.urlLinkParent;\r\n\r\n const { homeBillboardChildsMainVerticalImages } = this.state;\r\n // const { length: count } = this.state.homeBillboardChildsMainVerticalImages;\r\n // window.alert(`Number of rows : ${count}`);\r\n // if (count === 0) return
;\r\n\r\n // window.alert(`Number of rows : ${reference}`);\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n {/*
\r\n
top row
\r\n
\r\n
\r\n
\r\n top row2\r\n
\r\n
\r\n bottom row2\r\n
\r\n
\r\n top row3\r\n
\r\n
\r\n bottom row3\r\n
\r\n
*/}\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMainVerticalImages;\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n// import RenderomeBillboardChildsMainImageOnStrip from \"./renderomeBillboardChildsMainImageOnStrip\";\r\nimport { getHomeBillboardChildsMains } from \"../../services/homeBillboardChildsMainKeypadList\";\r\nimport { getBillboardLargesWindows } from \"../../services/billboardLargeService\";\r\n\r\nclass HomeBillboardChildsMainImageOnStrip extends Component {\r\n state = {\r\n homeBillboardChildsMainKeypadList: [],\r\n homeBillboardLargesWindows: []\r\n };\r\n\r\n async componentDidMount() {\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n\r\n // window.alert(`renderBillboardBulletPinterChilds 01 : ${homeBillboardsID}`);\r\n\r\n // console.log(\r\n // `HomeBillboardBulletPointChilds, componentDidMount 01 : ${homeBillboardID}`\r\n // );\r\n\r\n const {\r\n data: homeBillboardChildsMainKeypadList\r\n } = await getHomeBillboardChildsMains(homeBillboardsID);\r\n\r\n const {\r\n data: homeBillboardLargesWindows\r\n } = await getBillboardLargesWindows();\r\n\r\n // console.log(\r\n // \"componentDidMount BulletPointChild 02 : \",\r\n // homeBillboardChilds\r\n // );\r\n\r\n this.setState({\r\n homeBillboardChildsMainKeypadList,\r\n homeBillboardLargesWindows\r\n });\r\n }\r\n\r\n render() {\r\n const identifier = this.props.identifier;\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const homeBillboardsID = this.props.homeBillboardsID;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n const image = this.props.image;\r\n const urlLink = this.props.urlLink;\r\n const urlLinkExternal = this.props.urlLinkExternal;\r\n const button = this.props.button;\r\n\r\n // if (homeBillboardsID === 10) window.alert(\"Hello : \");\r\n\r\n // const {\r\n // homeBillboardChildsMainKeypadList,\r\n // homeBillboardLargesWindows\r\n // } = this.state;\r\n\r\n // window.alert(\"Hello : \");\r\n\r\n // const { length: count } = this.state.homeBillboardChildsMainKeypadList;\r\n // window.alert(`Number of rows : ${count}`);\r\n // if (count === 0) return
;\r\n\r\n // window.alert(`Number of rows : ${reference}`);\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n \r\n {summary}\r\n \r\n
\r\n\r\n {urlLinkExternal ? (\r\n \r\n {button}\r\n \r\n ) : (\r\n \r\n {button}\r\n \r\n )}\r\n\r\n {/* */}\r\n
\r\n\r\n
\r\n
\r\n
\r\n {urlLinkExternal ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n \r\n {summary}\r\n \r\n
\r\n\r\n {urlLinkExternal ? (\r\n \r\n {button}\r\n \r\n ) : (\r\n \r\n {button}\r\n \r\n )}\r\n\r\n {/* */}\r\n
\r\n\r\n
\r\n
\r\n
\r\n {urlLinkExternal ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n \r\n {summary}\r\n \r\n
\r\n\r\n {urlLinkExternal ? (\r\n \r\n {button}\r\n \r\n ) : (\r\n \r\n {button}\r\n \r\n )}\r\n\r\n {/* */}\r\n
\r\n\r\n
\r\n
\r\n
\r\n {urlLinkExternal ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n \r\n {summary}\r\n \r\n
\r\n\r\n {urlLinkExternal ? (\r\n \r\n {button}\r\n \r\n ) : (\r\n \r\n {button}\r\n \r\n )}\r\n\r\n {/* */}\r\n
\r\n\r\n
\r\n
\r\n
\r\n {urlLinkExternal ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default HomeBillboardChildsMainImageOnStrip;\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeBillboardSlides\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeBillboardSlidesRequested' or 'homeBillboardSlidesReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeBillboardSlides' below represents the 'state':-\r\n homeBillboardSlidesRequested: (homeBillboardSlides, action) => {\r\n console.log(\"homeBillboardSlidesRequested : \", action.payload);\r\n homeBillboardSlides.loading = true;\r\n },\r\n homeBillboardSlidesReceived: (homeBillboardSlides, action) => {\r\n console.log(\"homeBillboardSlidesReceived : \", action.payload);\r\n homeBillboardSlides.list = action.payload;\r\n homeBillboardSlides.loading = false;\r\n homeBillboardSlides.lastFetch = Date.now();\r\n },\r\n homeBillboardSlidesRequestedFailed: (homeBillboardSlides, action) => {\r\n homeBillboardSlides.loading = false;\r\n // window.alert(`No HomeBillboardSlides found.`);\r\n },\r\n\r\n homeBillboardSlidesOnNavbarRequested: (homeBillboardSlides, action) => {\r\n console.log(\"homeBillboardSlidesOnNavbarRequested : \", action.payload);\r\n homeBillboardSlides.loading = true;\r\n },\r\n homeBillboardSlidesOnNavbarReceived: (homeBillboardSlides, action) => {\r\n console.log(\"homeBillboardSlidesOnNavbarReceived : \", action.payload);\r\n homeBillboardSlides.listOnNavvar = action.payload;\r\n homeBillboardSlides.loading = false;\r\n homeBillboardSlides.lastFetch = Date.now();\r\n },\r\n homeBillboardSlidesOnNavbarRequestedFailed: (\r\n homeBillboardSlides,\r\n action\r\n ) => {\r\n homeBillboardSlides.loading = false;\r\n // window.alert(`No HomeBillboardSlides found.`);\r\n },\r\n\r\n homeBillboardSlideRequested: (homeBillboardSlide, action) => {\r\n console.log(\"homeBillboardSlideRequested : \", action.payload);\r\n homeBillboardSlide.loading = true;\r\n },\r\n homeBillboardSlideReceived: (homeBillboardSlide, action) => {\r\n console.log(\"homeBillboardSlideReceived : \", action.payload);\r\n homeBillboardSlide.listSingleRow = action.payload;\r\n homeBillboardSlide.loading = false;\r\n homeBillboardSlide.lastFetch = Date.now();\r\n },\r\n homeBillboardSlideRequestedFailed: (homeBillboardSlide, action) => {\r\n homeBillboardSlide.loading = false;\r\n // window.alert(`No HomeBillboardSlide found.`);\r\n },\r\n homeBillboardSlideChangeRequested: (homeBillboardSlide, action) => {\r\n console.log(\"homeBillboardSlideChangeRequested : \", action.payload);\r\n homeBillboardSlide.loading = true;\r\n },\r\n homeBillboardSlideChangeFailed: (homeBillboardSlide, action) => {\r\n homeBillboardSlide.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardSlide api at the back end.\r\n // const { ID: homeBillboardSlideId, A_Name: homeBillboardSlideName } = action.payload;\r\n\r\n // window.alert(`HomeBillboardSlide '${homeBillboardSlideName}' no longer exists.`);\r\n\r\n // const index = homeBillboardSlide.list.findIndex(homeBillboardSlide => homeBillboardSlide.ID === homeBillboardSlideId);\r\n // //console.log(\"homeBillboardSlideDeleted ha \", index);\r\n // homeBillboardSlide.list.splice(index, 1);\r\n },\r\n homeBillboardSlideChanged: (homeBillboardSlide, action) => {\r\n homeBillboardSlide.loading = false;\r\n },\r\n homeBillboardSlideDeleteRequested: (homeBillboardSlide, action) => {\r\n console.log(\"homeBillboardSlideDeleteRequested : \", action.payload);\r\n homeBillboardSlide.loading = true;\r\n },\r\n homeBillboardSlideDeleteFailed: (homeBillboardSlides, action) => {\r\n homeBillboardSlides.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardSlide api at the back end.\r\n const {\r\n ID: homeBillboardSlideId,\r\n A_Name: homeBillboardSlideName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeBillboardSlide '${homeBillboardSlideName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeBillboardSlides.list.findIndex(\r\n homeBillboardSlide => homeBillboardSlide.ID === homeBillboardSlideId\r\n );\r\n //console.log(\"homeBillboardSlideDeleted ha \", index);\r\n homeBillboardSlides.list.splice(index, 1);\r\n },\r\n homeBillboardSlideDeleted: (homeBillboardSlides, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardSlide api at the back end.\r\n const { ID: homeBillboardSlideID } = action.payload;\r\n // console.log(\"homeBillboardSlideDeleted ha \", action.payload, homeBillboardSlideID, homeBillboardSlides);\r\n const index = homeBillboardSlides.list.findIndex(\r\n homeBillboardSlide => homeBillboardSlide.ID === homeBillboardSlideID\r\n );\r\n //console.log(\"homeBillboardSlideDeleted, ha! ha! \", index);\r\n homeBillboardSlides.list.splice(index, 1);\r\n },\r\n homeBillboardSlideAddRequested: (homeBillboardSlide, action) => {\r\n console.log(\"homeBillboardSlideAddRequested : \", action.payload);\r\n homeBillboardSlide.loading = true;\r\n },\r\n homeBillboardSlideAddFailed: (homeBillboardSlide, action) => {\r\n homeBillboardSlide.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeBillboardSlides' below represents the 'state':-\r\n homeBillboardSlideAdded: (homeBillboardSlides, action) => {\r\n console.log(\"homeBillboardSlideAdded : \", action.payload);\r\n homeBillboardSlides.list.push(action.payload);\r\n }\r\n // homeBillboardSlideAdded: (homeBillboardSlides, action) => {\r\n // homeBillboardSlides.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeBillboardSlideDeleted: (homeBillboardSlides, action) => {\r\n // console.log(\"homeBillboardSlideDeleted ha \", action.payload.ID);\r\n // homeBillboardSlides.list.filter(homeBillboardSlide => homeBillboardSlide.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeBillboardSlideAddRequested,\r\n homeBillboardSlideAdded,\r\n homeBillboardSlideAddFailed,\r\n homeBillboardSlideChangeRequested,\r\n homeBillboardSlideChanged,\r\n homeBillboardSlideChangeFailed,\r\n homeBillboardSlideDeleteRequested,\r\n homeBillboardSlideDeleted,\r\n homeBillboardSlideDeleteFailed,\r\n homeBillboardSlidesReceived,\r\n homeBillboardSlidesRequested,\r\n homeBillboardSlidesRequestedFailed,\r\n homeBillboardSlidesOnNavbarReceived,\r\n homeBillboardSlidesOnNavbarRequested,\r\n homeBillboardSlidesOnNavbarRequestedFailed,\r\n homeBillboardSlideReceived,\r\n homeBillboardSlideRequested,\r\n homeBillboardSlideRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/billboardLarges\";\r\n\r\nexport const loadHomeBillboardSlides = () => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.homeBillboardSlides;\r\n\r\n // console.log(\"loadHomeBillboardSlides lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/slides\",\r\n onStart: homeBillboardSlidesRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardSlidesReceived.type,\r\n onError: homeBillboardSlidesRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeBillboardSlide = homeBillboardSlideID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardSlides;\r\n\r\n //console.log(\"loadHomeBillboardSlide : \", homeBillboardSlideID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardSlideID,\r\n onStart: homeBillboardSlideRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardSlideReceived.type,\r\n onError: homeBillboardSlideRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeBillboardSlide':-\r\nexport const addHomeBillboardSlide = (homeBillboardSlide, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeBillboardSlideAddRequested.type,\r\n //data: homeBillboardSlide,\r\n data: {\r\n N_OrderNo: homeBillboardSlide.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardSlide.N_RadioGrpDirections_ID,\r\n N_HomeBillboards_ID: homeBillboardSlide.N_HomeBillboards_ID,\r\n A_Reference: homeBillboardSlide.A_Reference,\r\n A_Summary: homeBillboardSlide.A_Summary,\r\n A_Description: homeBillboardSlide.A_Description,\r\n A_HoverSummary01: homeBillboardSlide.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardSlide.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardSlide.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardSlide.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardSlide.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardSlide.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardSlide.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardSlide.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardSlide.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardSlide.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardSlide.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardSlide.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardSlide.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardSlide.A_HoverSummary08_Link,\r\n I_Image: homeBillboardSlide.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: homeBillboardSlideAdded.type,\r\n onError: homeBillboardSlideAddFailed.type\r\n });\r\n\r\nexport const getHomeBillboardSlides = createSelector(\r\n state => state.entities.homeBillboardSlides,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeBillboardSlides, projects) has not changed then do not requery again:-\r\n // (homeBillboardSlides) => homeBillboardSlides.list.filter(homeBillboardSlide => !homeBillboardSlide.B_Active)\r\n homeBillboardSlides => homeBillboardSlides.list\r\n);\r\n\r\nexport const changeHomeBillboardSlide = (\r\n homeBillboardSlide,\r\n user,\r\n currentDate\r\n) =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardSlide.ID,\r\n method: \"put\",\r\n onStart: homeBillboardSlideChangeRequested.type,\r\n data: {\r\n N_OrderNo: homeBillboardSlide.N_OrderNo,\r\n N_RadioGrpDirections_ID: homeBillboardSlide.N_RadioGrpDirections_ID,\r\n N_HomeBillboards_ID: homeBillboardSlide.N_HomeBillboards_ID,\r\n A_Reference: homeBillboardSlide.A_Reference,\r\n A_Summary: homeBillboardSlide.A_Summary,\r\n A_Description: homeBillboardSlide.A_Description,\r\n A_HoverSummary01: homeBillboardSlide.A_HoverSummary01,\r\n A_HoverSummary01_Link: homeBillboardSlide.A_HoverSummary01_Link,\r\n A_HoverSummary02: homeBillboardSlide.A_HoverSummary02,\r\n A_HoverSummary02_Link: homeBillboardSlide.A_HoverSummary02_Link,\r\n A_HoverSummary03: homeBillboardSlide.A_HoverSummary03,\r\n A_HoverSummary03_Link: homeBillboardSlide.A_HoverSummary03_Link,\r\n A_HoverSummary04: homeBillboardSlide.A_HoverSummary04,\r\n A_HoverSummary04_Link: homeBillboardSlide.A_HoverSummary04_Link,\r\n A_HoverSummary05: homeBillboardSlide.A_HoverSummary05,\r\n A_HoverSummary05_Link: homeBillboardSlide.A_HoverSummary05_Link,\r\n A_HoverSummary06: homeBillboardSlide.A_HoverSummary06,\r\n A_HoverSummary07: homeBillboardSlide.A_HoverSummary07,\r\n A_HoverSummary08: homeBillboardSlide.A_HoverSummary08,\r\n A_HoverSummary08_Link: homeBillboardSlide.A_HoverSummary08_Link,\r\n I_Image: homeBillboardSlide.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: homeBillboardSlideChanged.type,\r\n onError: homeBillboardSlideChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeBillboardSlide = homeBillboardSlide =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardSlide.ID,\r\n method: \"delete\",\r\n onStart: homeBillboardSlideDeleteRequested.type,\r\n data: {\r\n ID: homeBillboardSlide.ID,\r\n A_Reference: homeBillboardSlide.A_Reference\r\n },\r\n onSuccess: homeBillboardSlideDeleted.type,\r\n onError: homeBillboardSlideDeleteFailed.type\r\n });\r\n","import React, { Component } from \"react\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport Carousel from \"react-bootstrap/Carousel\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\nimport { loadHomeBillboardSlides } from \"../../store/homeBillboardSlides\";\r\nimport { Redirect } from \"react-router\";\r\nimport { connect } from \"react-redux\";\r\n\r\nclass CarouselSlide extends Component {\r\n state = {\r\n homeBillboardChilds: [],\r\n detailsMaster: false,\r\n masterID: 0,\r\n detailsDetail: false,\r\n detailsDetailID: 0\r\n };\r\n\r\n //\r\n // https://stackoverflow.com/questions/43592711/how-to-change-react-bootstrap-carousel-animation-ton-fadein\r\n // Simply add fade={true} to the Carousel component. Or if you want it to slide, add slide={true}. That's it!\r\n\r\n async componentDidMount() {\r\n //console.log(\"componentDidMount CarouselSlide 01 : \");\r\n\r\n // const { data: homeBillboardChilds } = await getHomeBillboardSlides();\r\n await this.props.loadHomeBillboardSlides();\r\n\r\n // console.log(\"componentDidMount CarouselSlide 02 : \", homeBillboardChilds);\r\n\r\n // this.setState({ homeBillboardChilds });\r\n }\r\n\r\n onClickBillboardLarges = async item => {\r\n // console.log(\r\n // \"NavBar 2 : \",\r\n // item.N_BillboardOrigin_ID,\r\n // window.location.pathname\r\n // );\r\n\r\n // if (item.N_BillboardOrigin_ID === 2) {\r\n // window.location = `../detailsMaster/${item.ID}`;\r\n // } else if (item.N_BillboardOrigin_ID === 3) {\r\n // window.location = `../detailsDetail/${item.ID}`;\r\n // }\r\n if (item.N_BillboardOrigin_ID === 2) {\r\n //window.location = `../detailsMaster/${item.ID}`;\r\n this.setState({ detailsMaster: true, masterID: item.ID });\r\n } else if (item.N_BillboardOrigin_ID === 3) {\r\n //window.location = `../detailsDetail/${item.ID}`;\r\n this.setState({ detailsDetail: true, detailsDetailID: item.ID });\r\n }\r\n\r\n // window.location = `/profileForm`;\r\n\r\n // e.stopPropagation();\r\n //console.log(e.target.className); // This gets the className of the target\r\n };\r\n\r\n renderBillboardSlides = ({ item, rowCount, minHeight, maxHeight }) => {\r\n // console.log(\"renderBillboardSlides 01 : \", item, rowCount);\r\n\r\n // https://www.npmjs.com/package/react-animations\r\n\r\n // const styles = StyleSheet.create({\r\n // bounce: {\r\n // animationName: bounce,\r\n // animationDuration: \"1s\"\r\n // }\r\n // });\r\n\r\n // const style = {\r\n // animation: animations.popIn\r\n // };\r\n\r\n // const position = useMousePosition();\r\n\r\n // Babak's Notes: Commented out on 20200115: START\r\n return (\r\n
\r\n {/*
\r\n {position.x}:{position.y}\r\n
*/}\r\n this.onClickBillboardLarges(item)}\r\n src={item.I_Image}\r\n style={{ minHeight: minHeight, maxHeight: maxHeight }}\r\n alt=\"First slide\"\r\n />\r\n \r\n this.onClickBillboardLarges(item)}\r\n style={{ color: \"white\", textShadow: \"2px 1px rgba(0, 0, 0, 0.9)\" }}\r\n >\r\n {item.A_Reference}\r\n \r\n this.onClickBillboardLarges(item)}\r\n style={{ color: \"white\", textShadow: \"2px 1px rgba(0, 0, 0, 0.9)\" }}\r\n >\r\n {item.A_Summary}\r\n

\r\n this.onClickBillboardLarges(item)}\r\n style={{ color: \"white\", textShadow: \"2px 1px rgba(0, 0, 0, 0.9)\" }}\r\n >\r\n More...\r\n

\r\n
\r\n
\r\n );\r\n };\r\n\r\n render() {\r\n if (this.state.detailsMaster === true) {\r\n // return ;\r\n window.location = `../detailsMaster/${this.state.masterID}`;\r\n }\r\n if (this.state.detailsDetail === true) {\r\n // return ;\r\n window.location = `../detailsDetail/${this.state.detailsDetailID}`;\r\n }\r\n\r\n const sectionStyle = this.props.sectionStyle;\r\n const sectionStyleMD = this.props.sectionStyleMD;\r\n const sectionStyleSM = this.props.sectionStyleSM;\r\n const sectionStyleXS = this.props.sectionStyleXS;\r\n const textFC = this.props.textFC;\r\n const reference = this.props.reference;\r\n const summary = this.props.summary;\r\n\r\n // const { homeBillboardChilds } = this.state;\r\n const { length: count } = this.props.homeBillboardSlides;\r\n if (count === 0) return

;\r\n // console.log(\"render homeBillboard Childs\", homeBillboardChilds, count);\r\n\r\n return (\r\n
\r\n \r\n {/*
*/}\r\n {/*
\r\n
*/}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n {this.props.homeBillboardSlides.map((item, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {/*
\r\n
*/}\r\n {/* */}\r\n \r\n\r\n \r\n {/*
*/}\r\n {/*
\r\n
*/}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n {this.props.homeBillboardSlides.map((item, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n {/*
\r\n */}\r\n {/* */}\r\n \r\n\r\n \r\n {/*
*/}\r\n {/*
\r\n
*/}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n {this.props.homeBillboardSlides.map((item, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {/* \r\n */}\r\n {/* */}\r\n \r\n\r\n \r\n {/*
*/}\r\n {/*
\r\n
*/}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n {reference}\r\n \r\n
\r\n\r\n \r\n {summary}\r\n \r\n
\r\n
\r\n
\r\n\r\n \r\n \r\n {this.props.homeBillboardSlides.map((item, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {/* \r\n */}\r\n {/* */}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.customizations.list.filter(bug => !bug.resolved)\r\n homeBillboardSlides: state.entities.homeBillboardSlides.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboardSlides: () => dispatch(loadHomeBillboardSlides())\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(CarouselSlide);\r\n","import React, { Component, Suspense } from \"react\";\r\nimport { loadHomeBillboardsMains } from \"../../store/homeBillboardsMains\";\r\nimport HomeBillboardChildsMain from \"./homeBillboardChildsMain\";\r\nimport HomeBillboardChildsMainAboutUs from \"./homeBillboardChildsMainAboutUs\";\r\nimport HomeBillboardChildsMainContactUs from \"./homeBillboardChildsMainContactUs\";\r\nimport HomeBillboardChildsMainKeypad from \"./homeBillboardChildsMainKeypad\";\r\nimport HomeBillboardChildsMainKeypadListRight from \"./homeBillboardChildsMainKeypadListRight\";\r\nimport HomeBillboardChildsMainKeypadListLeft from \"./homeBillboardChildsMainKeypadListLeft\";\r\nimport HomeBillboardChildsMainVerticalImages from \"./homeBillboardChildsMainVerticalImages\";\r\nimport HomeBillboardChildsMainImageOnStrip from \"./homeBillboardChildsMainImageOnStrip\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\nimport CarouselSlide from \"../home/carouselSlide\";\r\nimport NavBarFooter from \"../navBarFooter\";\r\nimport { connect } from \"react-redux\";\r\nimport LazyLoad from \"react-lazy-load\";\r\nimport {\r\n fadeIn,\r\n fadeInUp,\r\n bounce,\r\n flipInX,\r\n flipInY,\r\n rubberBand,\r\n shake,\r\n rotateInUpRight,\r\n rotateInUpLeft,\r\n slideInUp\r\n} from \"react-animations\";\r\nimport Radium, { StyleRoot } from \"radium\";\r\nimport ScrollUpButton from \"react-scroll-up-button\";\r\n\r\nclass HomeBillboardsMain extends Component {\r\n state = {\r\n data: {\r\n A_Reference: \"\",\r\n A_Summary: \"\",\r\n I_Image: \"\"\r\n }\r\n };\r\n\r\n async populateHomeBillboardsMains() {\r\n // window.alert(`componentDidMount (DetailsGroup) : ${menuId}`);\r\n\r\n await this.props.loadHomeBillboardsMains();\r\n }\r\n\r\n async componentDidMount() {\r\n await this.populateHomeBillboardsMains();\r\n }\r\n\r\n // async componentWillReceiveProps(nextProps) {\r\n // // window.alert(\"MenuForm, componentWillReceiveProps\", nextProps.menuSuccess);\r\n\r\n // let data = { ...this.state.data };\r\n\r\n // // if (this.state.data !== nextProps.menu) {\r\n\r\n // data[\"A_Reference\"] = nextProps.menus.A_Reference;\r\n // data[\"A_Summary\"] = nextProps.menus.A_Summary;\r\n // data[\"I_Image\"] = nextProps.menus.I_Image;\r\n\r\n // this.setState({\r\n // data\r\n // });\r\n // // }\r\n // }\r\n\r\n // async mapToViewModel(billboardLarge) {\r\n // //console.log(\"mapToViewModel-1\", billboardLarge);\r\n // return {\r\n // A_Reference: billboardLarge.A_Reference,\r\n // A_Summary: billboardLarge.A_Summary,\r\n // I_Image: billboardLarge.I_Image\r\n // };\r\n // }\r\n\r\n renderBillboardData = ({ item }) => {\r\n // if (item.N_RadioGrpDirections_ID === 10) window.alert(\"Hello : \");\r\n\r\n // console.log(\"renderBillboardData 01 : \", item, rowCount);\r\n\r\n let sectionStyleTop;\r\n let sectionStyle, sectionStyleMD, sectionStyleSM, sectionStyleXS;\r\n let sectionStyleBottom;\r\n\r\n const styles = {\r\n bounce: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(bounce, \"bounce\")\r\n },\r\n fadeIn: {\r\n animation: \"y 8s\",\r\n animationName: Radium.keyframes(fadeIn, \"fadeIn\")\r\n },\r\n fadeInUp01: {\r\n animation: \"y 1s\",\r\n animationName: Radium.keyframes(fadeInUp, \"fadeInUp01\")\r\n },\r\n fadeInUp02: {\r\n animation: \"y 2s\",\r\n animationName: Radium.keyframes(fadeInUp, \"fadeInUp02\")\r\n },\r\n fadeInUp03: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(fadeInUp, \"fadeInUp03\")\r\n },\r\n fadeInUp04: {\r\n animation: \"y 4s\",\r\n animationName: Radium.keyframes(fadeInUp, \"fadeInUp04\")\r\n },\r\n flipInX: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(flipInX, \"flipInX\")\r\n },\r\n flipInY: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(flipInY, \"flipInY\")\r\n },\r\n rubberBand: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(rubberBand, \"rubberBand\")\r\n },\r\n shake: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(shake, \"shake\")\r\n },\r\n rotateInUpRight: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(rotateInUpRight, \"rotateInUpRight\")\r\n },\r\n rotateInUpLeft: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(rotateInUpLeft, \"rotateInUpLeft\")\r\n },\r\n slideInUp01: {\r\n animation: \"y 3s\",\r\n animationName: Radium.keyframes(slideInUp, fadeIn, \"slideInUp01\")\r\n },\r\n slideInUp02: {\r\n animation: \"y 5s\",\r\n animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n },\r\n slideInUp03: {\r\n animation: \"y 8s\",\r\n animationName: Radium.keyframes(slideInUp, \"slideInUp03\")\r\n }\r\n };\r\n\r\n const customizationSingleRow = this.props.customizationSingleRow;\r\n\r\n // document.body.style.backgroundImage = `url(${item.I_Image})`;\r\n // document.body.style.backgroundRepeat = \"no-repeat\";\r\n // document.body.style.backgroundSize = \"cover\";\r\n\r\n if (item.N_RadioGrpDirections_ID === 1) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n sectionStyle = {\r\n height: \"100vh\",\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"100vh\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"100vh\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"100vh\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyle = {\r\n // height: \"100vh\",\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // backgroundPosition: \"center center\",\r\n // backgroundAttachment: \"fixed\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 2) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height: \"440px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"425px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"405px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"605px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 3) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height: \"1010px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"970px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 4) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n sectionStyle = {\r\n height: \"760px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"560px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"565px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"500px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n } else if (item.N_RadioGrpDirections_ID === 5) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height: \"510px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"870px\",\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 6) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height:\r\n customizationSingleRow.B_GoogleMap && item.B_GoogleMapHomeBiilboard\r\n ? \"760px\"\r\n : \"510px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height:\r\n customizationSingleRow.B_GoogleMap && item.B_GoogleMapHomeBiilboard\r\n ? \"1130px\"\r\n : \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height:\r\n customizationSingleRow.B_GoogleMap && item.B_GoogleMapHomeBiilboard\r\n ? \"1130px\"\r\n : \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height:\r\n customizationSingleRow.B_GoogleMap && item.B_GoogleMapHomeBiilboard\r\n ? \"1130px\"\r\n : \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 7) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height: \"510px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"870px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 8) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n sectionStyle = {\r\n height: \"820px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n // backgroundAttachment: \"fixed\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"790px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"1260px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"1250px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 9) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n sectionStyle = {\r\n height: \"820px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n // backgroundAttachment: \"fixed\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"790px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"1260px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"1250px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else if (item.N_RadioGrpDirections_ID === 10) {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n // sectionStyleTop = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n sectionStyle = {\r\n height: \"200px\",\r\n // backgroundImage: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n // backgroundColor: \"orange\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n\r\n // backgroundAttachment: \"fixed\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleMD = {\r\n height: \"835px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleSM = {\r\n height: \"1350px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n sectionStyleXS = {\r\n height: \"1350px\",\r\n\r\n background: !item.B_BGC_Shadow_Off\r\n ? `${item.A_BGC}`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), ${item.A_BGC}`,\r\n\r\n // background: `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), orange`,\r\n\r\n backgroundImage: !item.B_BGC_Shadow_Off\r\n ? `url(${item.I_Image})`\r\n : `linear-gradient(to bottom, ${item.A_BGC_Shadow}, 35%, rgba(0, 0, 0, 0)), url(${item.I_Image})`,\r\n\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // boxShadow: \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\",\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n // sectionStyleBottom = {\r\n // height: \"30vh\",\r\n // color: \"white\",\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n } else {\r\n //\r\n // Babak's note: Below configures if we are currently on IOS (IPhone):\r\n const is_ios = /(iPad|iPhone|iPod)/g.test(navigator.userAgent);\r\n\r\n sectionStyle = {\r\n height: \"100vh\",\r\n backgroundImage: `url(${item.I_Image})`,\r\n backgroundPosition: \"center center\",\r\n backgroundAttachment:\r\n is_ios || item.B_BGC_Shadow_Off ? \"scroll\" : \"fixed\",\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n\r\n // let sectionStyleSmallerLg;\r\n // sectionStyleSmallerLg = {\r\n // height: \"50vh\",\r\n // backgroundImage: `url(${item.I_Image})`,\r\n // backgroundPosition: \"center center\",\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // Babak's Notes: Commented out on 20200115: START\r\n return (\r\n //
\r\n
\r\n {item.N_RadioGrpDirections_ID === 1 ? (\r\n
\r\n \r\n
\r\n
\r\n

\r\n \r\n \r\n {item.A_HoverSummary01}\r\n \r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n \r\n \r\n {item.A_HoverSummary02},{\" \"}\r\n \r\n \r\n \r\n \r\n {item.A_HoverSummary03}\r\n \r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n {item.A_HoverSummary02}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary03}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary04}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary05}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n {item.A_HoverSummary06}\r\n \r\n
\r\n
\r\n \r\n {item.B_HoverSummary08_External ? (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n

\r\n {item.A_HoverSummary06}\r\n

\r\n

\r\n {item.A_HoverSummary07}\r\n

\r\n
\r\n\r\n
\r\n \r\n {item.B_HoverSummary08_External ? (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n

\r\n \r\n \r\n {item.A_HoverSummary01}\r\n \r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n \r\n \r\n {item.A_HoverSummary02},{\" \"}\r\n \r\n \r\n \r\n \r\n {item.A_HoverSummary03}\r\n \r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n {item.A_HoverSummary02}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary03}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary04}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary05}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n
\r\n
\r\n
\r\n \r\n {item.A_HoverSummary06}\r\n \r\n
\r\n
\r\n \r\n {item.B_HoverSummary08_External ? (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n

\r\n {item.A_HoverSummary06}\r\n

\r\n

\r\n {item.A_HoverSummary07}\r\n

\r\n
\r\n
\r\n \r\n {item.B_HoverSummary08_External ? (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n

\r\n \r\n \r\n {item.A_HoverSummary01}\r\n \r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n \r\n \r\n {item.A_HoverSummary02},{\" \"}\r\n \r\n \r\n \r\n \r\n {item.A_HoverSummary03}\r\n \r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n {item.A_HoverSummary02}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary03}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary04}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary05}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n

\r\n
\r\n
\r\n\r\n {/*
\r\n
\r\n
\r\n
\r\n */}\r\n\r\n
\r\n
\r\n
\r\n \r\n {item.A_HoverSummary06}\r\n \r\n
\r\n
\r\n \r\n {item.B_HoverSummary08_External ? (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n {item.A_HoverSummary06}\r\n \r\n
\r\n
\r\n \r\n {item.B_HoverSummary08_External ? (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n

\r\n \r\n \r\n {item.A_HoverSummary01}\r\n \r\n \r\n

\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n {item.A_HoverSummary02}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary03}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary04}\r\n \r\n \r\n\r\n \r\n \r\n {item.A_HoverSummary05}\r\n \r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n {item.A_HoverSummary06}\r\n \r\n
\r\n
\r\n \r\n {item.B_HoverSummary08_External ? (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n ) : (\r\n \r\n \r\n {item.A_HoverSummary08}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n ) : item.N_RadioGrpDirections_ID === 2 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 3 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 4 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 5 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 6 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 7 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 8 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 9 ? (\r\n
\r\n \r\n
\r\n ) : item.N_RadioGrpDirections_ID === 10 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \"\"\r\n )}\r\n \r\n );\r\n };\r\n\r\n render() {\r\n const { data } = this.state;\r\n // const { billboardLargesGroup } = this.props.groups;\r\n\r\n // let sectionStyle;\r\n\r\n // sectionStyle = {\r\n // // height: \"100vh\",\r\n // // backgroundAttachment: \"fixed\",\r\n // // backgroundSize: \"cover\",\r\n // // width: width,\r\n // //opacity: 0.5,\r\n // backgroundImage: `url(${data.I_Image})`,\r\n // backgroundRepeat: \"no-repeat\",\r\n // backgroundSize: \"cover\"\r\n // };\r\n\r\n // console.log(\r\n // \"DetailsGroup render, Number of billboardLargesGroup: \",\r\n // this.props.match.params.id,\r\n // data,\r\n // this.props.groups,\r\n // this.props.groups.length\r\n // );\r\n\r\n if (this.props.homeBillboardsMains.length === 0)\r\n return
;\r\n\r\n return (\r\n
\r\n
\r\n {this.props.homeBillboardsMains.map((item, index) => (\r\n \r\n ))}\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\n//\r\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\r\nconst mapStateToProps = state => ({\r\n // bugs: state.entities.menus.list.filter(bug => !bug.resolved)\r\n homeBillboardsMains: state.entities.homeBillboardsMains.list\r\n});\r\n\r\nconst mapDispatchToProps = dispatch => ({\r\n loadHomeBillboardsMains: () => dispatch(loadHomeBillboardsMains())\r\n});\r\n\r\n// Container Component\r\n// Presentation (Bugs)\r\n//\r\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(HomeBillboardsMain);\r\n","import React from \"react\";\r\n\r\nconst NotFound = () => {\r\n return

Not Found

;\r\n};\r\n\r\nexport default NotFound;\r\n","import React, { Component, useState } from \"react\";\r\nimport auth from \"../services/authService\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\nimport { getBillboardLargesSearchAutoComplete } from \"../services/billboardLargeService\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Link, animateScroll as scroll } from \"react-scroll\";\r\nimport {\r\n Form,\r\n FormControl,\r\n Nav,\r\n Navbar,\r\n NavDropdown,\r\n Button\r\n} from \"react-bootstrap\";\r\n\r\n//\r\n// Babak's Note: Below 'user' is from 'props', we have used destructering so by adding only 'user' reactjs will\r\n// automnatically take it from 'props':-\r\nclass NavBar extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isOpen: false,\r\n navExpanded: false,\r\n suggestions: [],\r\n text: \"\",\r\n dynamicSearchIcon: \"\"\r\n };\r\n this.handleScroll = this.handleScroll.bind(this);\r\n }\r\n\r\n intervalID;\r\n\r\n // state = {\r\n // // aboutUs: false,\r\n // // contactUs: false,\r\n // windowLocationPathname: false\r\n // }\r\n\r\n // AboutUsNavigate = ({ title, history }) => {\r\n // return ( \r\n // {title}\r\n // \r\n // )};\r\n\r\n // AboutUsComponent = () => {\r\n // return (\r\n // } />\r\n // )}\r\n\r\n // ContactUsNavigate = ({ title, history }) => {\r\n // return( \r\n // {title}\r\n // \r\n // )};\r\n\r\n // ContactUsComponent = () => {\r\n // return (\r\n // } />\r\n // )}\r\n\r\n HomeNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n // const bgColors = {\r\n // default: \"#81b71a\",\r\n // blue: \"#00B1E1\",\r\n // cyan: \"#37BC9B\",\r\n // green: \"#8CC152\",\r\n // red: \"#E9573F\",\r\n // yellow: \"#F6BB42\",\r\n // white: \"#fff\",\r\n // lightBlue: \"#ADD8E6\",\r\n // darkCyan: \"#008B8B\",\r\n // menuBlue: \"#0078d4\",\r\n // white: \"white\"\r\n // };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/\"\r\n onClick={this.closeNav}\r\n >\r\n Home\r\n \r\n );\r\n };\r\n\r\n MenuNavigate = ({ customizationSingleRow, menu, index, rowLength }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to={\r\n menu.N_BillboardOrigin_ID === 1\r\n ? `/detailsGroup/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? `/detailsMaster/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? `/detailsDetail/${menu.ID}`\r\n : \"\"\r\n }\r\n onClick={this.closeNav2}\r\n >\r\n {menu.A_Reference}\r\n \r\n );\r\n };\r\n\r\n MaintenanceNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n // data-toggle=\"dropdown\"\r\n // style={{ color: bgColors.darkCyan }}\r\n >\r\n Maintenance\r\n \r\n );\r\n };\r\n\r\n RolesNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/rolesList\"\r\n onClick={this.closeNav}\r\n >\r\n Roles\r\n \r\n );\r\n };\r\n\r\n UsersNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/usersList\"\r\n onClick={this.closeNav}\r\n >\r\n Users\r\n \r\n );\r\n };\r\n\r\n BillboardsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/menusList\"\r\n onClick={this.closeNav}\r\n >\r\n Client Menus\r\n \r\n );\r\n };\r\n\r\n HomeLayoutsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/homeBillboardsList\"\r\n onClick={this.closeNav}\r\n >\r\n Home Layout\r\n \r\n );\r\n };\r\n\r\n CustomizationsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/customizationsList\"\r\n onClick={this.closeNav}\r\n >\r\n Customizations\r\n \r\n );\r\n };\r\n\r\n AboutUsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n // const bgColors = {\r\n // default: \"#81b71a\",\r\n // blue: \"#00B1E1\",\r\n // cyan: \"#37BC9B\",\r\n // green: \"#8CC152\",\r\n // red: \"#E9573F\",\r\n // yellow: \"#F6BB42\",\r\n // white: \"#fff\",\r\n // lightBlue: \"#ADD8E6\",\r\n // darkCyan: \"#008B8B\",\r\n // menuBlue: \"#0078d4\",\r\n // white: \"white\"\r\n // };\r\n\r\n if (window.location.pathname === \"/homeBillboardsMain\") {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n activeClass=\"active\"\r\n to={customizationSingleRow.N_AboutUsNo}\r\n spy={true}\r\n smooth={true}\r\n offset={-70}\r\n duration={1000}\r\n onClick={this.closeNav}\r\n >\r\n About Us\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/aboutUs\"\r\n onClick={this.closeNav}\r\n >\r\n About Us\r\n \r\n );\r\n }\r\n };\r\n\r\n ContactUsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n // const bgColors = {\r\n // default: \"#81b71a\",\r\n // blue: \"#00B1E1\",\r\n // cyan: \"#37BC9B\",\r\n // green: \"#8CC152\",\r\n // red: \"#E9573F\",\r\n // yellow: \"#F6BB42\",\r\n // white: \"#fff\",\r\n // lightBlue: \"#ADD8E6\",\r\n // darkCyan: \"#008B8B\",\r\n // menuBlue: \"#0078d4\",\r\n // white: \"white\"\r\n // };\r\n if (window.location.pathname === \"/homeBillboardsMain\") {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n activeClass=\"active\"\r\n to={customizationSingleRow.N_ContactUsNo}\r\n spy={true}\r\n smooth={true}\r\n offset={-70}\r\n duration={1000}\r\n onClick={this.closeNav}\r\n >\r\n Contact Us\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/contactUs\"\r\n onClick={this.closeNav}\r\n >\r\n Contact Us\r\n \r\n );\r\n }\r\n };\r\n\r\n HelloNavigate = ({ customizationSingleRow, user }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/profileForm\"\r\n onClick={this.closeNav}\r\n >\r\n Hello {user.a_name}\r\n \r\n );\r\n };\r\n\r\n LogoutNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/logout\"\r\n onClick={this.closeNav}\r\n >\r\n Logout\r\n \r\n );\r\n };\r\n\r\n SearchNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_BaseSearchBtnFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseSearchBtnFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseSearchBtnBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseSearchBtnHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseSearchBtnFGC}`)\r\n }\r\n // onClick={e => {\r\n // onClickSearch(e);\r\n // }}\r\n >\r\n Search\r\n \r\n );\r\n };\r\n\r\n LoginNavigate = ({ customizationSingleRow, user }) => {\r\n if (!customizationSingleRow.A_BaseNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_BaseNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_BaseNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_BaseNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_BaseNavbarFGC}`)\r\n }\r\n to=\"/login\"\r\n onClick={this.closeNav}\r\n >\r\n Login\r\n \r\n );\r\n };\r\n\r\n handleOpen = () => {\r\n //window.alert(`Open`);\r\n this.setState({ isOpen: true });\r\n };\r\n\r\n handleClose = () => {\r\n //window.alert(`Leave`);\r\n this.setState({ isOpen: false });\r\n };\r\n\r\n setNavExpanded = expanded => {\r\n this.setState({ navExpanded: expanded });\r\n };\r\n\r\n closeNav = () => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n // if (window.location.pathname != \"/homeBillboardsMain\") {\r\n // window.location = `/appointments`;\r\n // }\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n //\r\n // Babak's Note: Had to add below line so when tabbing (by finger when in tablet or mobile mode) the hamberger menu does not un-expand.\r\n // I don't why it works???\r\n // let origin = e.target.placeholder;\r\n // window.alert(`Hello close : ${this.state.navExpanded} : `);\r\n this.setState({ navExpanded: false });\r\n };\r\n\r\n closeNav2 = () => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n // if (window.location.pathname != \"/homeBillboardsMain\") {\r\n // window.location = `/appointments`;\r\n // }\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n window.reload(false);\r\n // this.setState({ navExpanded: false });\r\n };\r\n\r\n // closeNavToAboutUs = () => {\r\n // console.log(\r\n // \"NavBar 2 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n\r\n // //https://stackoverflow.com/questions/42123261/programmatically-navigate-using-react-router-v4\r\n // if (window.location.pathname != \"/homeBillboardsMain\") {\r\n // //window.location = `/infoUs/38`;\r\n // //this.props.location.push(`/infoUs/38`);\r\n\r\n // this.setState({ aboutUs: true });\r\n // }\r\n\r\n // // e.stopPropagation();\r\n // //console.log(e.target.className); // This gets the className of the target\r\n\r\n // this.setState({ navExpanded: false });\r\n // };\r\n\r\n // closeNavToContactUs = () => {\r\n // console.log(\r\n // \"NavBar 2 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n\r\n // if (window.location.pathname != \"/homeBillboardsMain\") {\r\n // // window.location = `/infoUs/26`;\r\n\r\n // this.setState({ contactUs: true });\r\n // }\r\n\r\n // // e.stopPropagation();\r\n // //console.log(e.target.className); // This gets the className of the target\r\n\r\n // this.setState({ navExpanded: false });\r\n // };\r\n\r\n // shouldComponentUpdate() {\r\n // console.log(\"hello shouldComponentUpdate : \");\r\n // }\r\n\r\n delaySearchAutoComplete = () => {\r\n clearInterval(this.intervalID);\r\n\r\n const { suggestions } = this.state;\r\n if (suggestions.length === 0) {\r\n this.setState(() => ({\r\n dynamicSearchIcon: \"\",\r\n suggestions: \"\",\r\n text: \"\"\r\n }));\r\n }\r\n };\r\n\r\n onTextChanged = async e => {\r\n // window.alert(`Hello onTextChanged : ${this.state.navExpanded} : `);\r\n const value = e.target.value;\r\n let suggestions = [];\r\n if (value.length > 0) {\r\n //const regex = new RegExp(`^${value}`, \"i\");\r\n //suggestions = this.items.sort().filter(v => regex.test(v));\r\n\r\n // this.intervalID = setInterval(\r\n // this.delaySearchAutoComplete.bind(this),\r\n // 10000\r\n // );\r\n\r\n this.setState(\r\n { dynamicSearchIcon: \"dynamicSearchIcon\", suggestions, text: value },\r\n async () => {\r\n await getBillboardLargesSearchAutoComplete(value).then(result =>\r\n this.setState({\r\n dynamicSearchIcon: \"\",\r\n text: value,\r\n suggestions: [...result.data]\r\n })\r\n );\r\n // Axios.get('/endpoint')\r\n // .then(result => this.setState({\r\n // loading: false,\r\n // data: [...result.data],\r\n // }));\r\n }\r\n );\r\n\r\n // const { data: suggestion } = await getBillboardLargesSearchAutoComplete(value);\r\n // suggestions = suggestion;\r\n }\r\n this.setState(() => ({ suggestions, text: value }));\r\n };\r\n\r\n suggestionSelected(e, value) {\r\n e.preventDefault();\r\n window.location = `/searchDynamic/'${value}'`;\r\n this.setState(() => ({\r\n suggestions: [],\r\n text: value,\r\n dynamicSearchView: true\r\n }));\r\n }\r\n\r\n renderSuggestions() {\r\n const { suggestions, text } = this.state;\r\n if (suggestions.length === 0) {\r\n if (text) {\r\n // return (\r\n //
\r\n // {\" \"}\r\n //
\r\n // );\r\n return null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n return (\r\n
    \r\n {suggestions.map(item => (\r\n
  • this.suggestionSelected(e, item.A_Reference)}>\r\n {item.A_Reference}\r\n
  • \r\n ))}\r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener(\"scroll\", this.handleScroll);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"scroll\", this.handleScroll);\r\n clearInterval(this.intervalID);\r\n }\r\n\r\n handleScroll() {\r\n // const { scrollPos } = this.state;\r\n // this.setState({\r\n // scrollPos: document.body.getBoundingClientRect().top,\r\n // show: document.body.getBoundingClientRect().top < scrollPos\r\n // });\r\n if (document.body.getBoundingClientRect().top < -100) {\r\n // this.closeNav();\r\n this.setState({ suggestions: \"\", text: \"\", isOpen: false });\r\n }\r\n // this.setState({\r\n // show: document.body.getBoundingClientRect().top < -100 ? true : false\r\n // });\r\n }\r\n\r\n render() {\r\n const { text } = this.state;\r\n\r\n //console.log(`navBar render() : ${text}`);\r\n\r\n // if (this.state.aboutUs === true) {\r\n // return \r\n // }\r\n // if (this.state.contactUs === true) {\r\n // return \r\n // }\r\n\r\n const {\r\n user,\r\n customizationSingleRow,\r\n menuOnNavvar,\r\n onClickSearch\r\n } = this.props;\r\n\r\n // const menuOnNavvar = [\r\n // { id: 1, description: \"Menu One\", colour: \"red\" },\r\n // { id: 2, description: \"Menu Two\", colour: \"green\" },\r\n // { id: 3, description: \"Menu Three\", colour: \"blue\" },\r\n // { id: 4, description: \"Menu Four\", colour: \"cyan\" },\r\n // { id: 5, description: \"Menu Five\", colour: \"orange\" }\r\n // ];\r\n\r\n const rowLength = menuOnNavvar.length;\r\n\r\n const bgColors = {\r\n default: \"#81b71a\",\r\n blue: \"#00B1E1\",\r\n cyan: \"#37BC9B\",\r\n green: \"#8CC152\",\r\n red: \"#E9573F\",\r\n yellow: \"#F6BB42\",\r\n white: \"#fff\",\r\n lightBlue: \"#ADD8E6\",\r\n darkCyan: \"#008B8B\",\r\n menuBlue: \"#0078d4\",\r\n white: \"white\"\r\n };\r\n\r\n const openMenu = this.state.isOpen;\r\n\r\n return (\r\n // \r\n\r\n // https://stackoverflow.com/questions/32452695/react-bootstrap-how-to-collapse-menu-when-item-is-selected\r\n //\r\n // Babak's Note: Look at below line \"style={{ marginTop: 20 }}\"\r\n // \r\n \r\n \r\n\r\n \r\n \r\n \r\n
onClickSearch(e)}>\r\n
\r\n \r\n {this.renderSuggestions()}\r\n
\r\n {/*
\r\n \r\n
\r\n \r\n {this.renderSuggestions()} */}\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\n// export default withRouter(NavBar);\r\nexport default NavBar;\r\n","import React, { Component, useState } from \"react\";\r\nimport auth from \"../services/authService\";\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { getBillboardLargesSearchAutoComplete } from \"../services/billboardLargeService\";\r\nimport { Link, animateScroll as scroll } from \"react-scroll\";\r\nimport {\r\n Form,\r\n FormControl,\r\n Nav,\r\n Navbar,\r\n NavDropdown,\r\n Button\r\n} from \"react-bootstrap\";\r\nimport logo02 from \"../images/logo05.png\";\r\n\r\n// Babak's Note: Below is no longer required even though I have installed it:-\r\n//import styled from \"styled-components\";\r\n\r\n//\r\n// Babak's Note: Below 'user' is from 'props', we have used destructering so by adding only 'user' reactjs will\r\n// automnatically take it from 'props':-\r\nclass NavBar2 extends Component {\r\n scrollToTop = () => {\r\n scroll.scrollToTop();\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n show: false,\r\n isOpen: false,\r\n navExpanded: false,\r\n suggestions: [],\r\n text: \"\",\r\n dynamicSearchIcon: \"\"\r\n };\r\n this.handleScroll = this.handleScroll.bind(this);\r\n }\r\n\r\n intervalID;\r\n\r\n HomeNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n //\r\n // Babak's Notes: VERY GOOD \"https://getbootstrap.com/docs/4.0/utilities/spacing/\"\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/\"\r\n onClick={this.closeNav}\r\n >\r\n Home\r\n \r\n );\r\n };\r\n\r\n MenuNavigate = ({ customizationSingleRow, menu, index, rowLength }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to={\r\n menu.N_BillboardOrigin_ID === 1\r\n ? `/detailsGroup/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? `/detailsMaster/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? `/detailsDetail/${menu.ID}`\r\n : \"\"\r\n }\r\n onClick={this.closeNav2}\r\n >\r\n {menu.A_Reference}\r\n \r\n );\r\n };\r\n\r\n MaintenanceNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n // data-toggle=\"dropdown\"\r\n // style={{ color: bgColors.darkCyan }}\r\n >\r\n Maintenance\r\n \r\n );\r\n };\r\n\r\n RolesNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/rolesList\"\r\n onClick={this.closeNav}\r\n >\r\n Roles\r\n \r\n );\r\n };\r\n\r\n UsersNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/usersList\"\r\n onClick={this.closeNav}\r\n >\r\n Users\r\n \r\n );\r\n };\r\n\r\n BillboardsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/menusList\"\r\n onClick={this.closeNav}\r\n >\r\n Client Menus\r\n \r\n );\r\n };\r\n\r\n HomeLayoutsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/homeBillboardsList\"\r\n onClick={this.closeNav}\r\n >\r\n Home Layout\r\n \r\n );\r\n };\r\n\r\n CustomizationsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/customizationsList\"\r\n onClick={this.closeNav}\r\n >\r\n Customizations\r\n \r\n );\r\n };\r\n\r\n AboutUsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n // const bgColors = {\r\n // default: \"#81b71a\",\r\n // blue: \"#00B1E1\",\r\n // cyan: \"#37BC9B\",\r\n // green: \"#8CC152\",\r\n // red: \"#E9573F\",\r\n // yellow: \"#F6BB42\",\r\n // white: \"#fff\",\r\n // lightBlue: \"#ADD8E6\",\r\n // darkCyan: \"#008B8B\",\r\n // menuBlue: \"#0078d4\",\r\n // white: \"white\"\r\n // };\r\n\r\n if (window.location.pathname === \"/homeBillboardsMain\") {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n activeClass=\"active\"\r\n to={customizationSingleRow.N_AboutUsNo}\r\n spy={true}\r\n smooth={true}\r\n offset={-70}\r\n duration={1000}\r\n onClick={this.closeNav}\r\n >\r\n About Us\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/aboutUs\"\r\n onClick={this.closeNav}\r\n >\r\n About Us\r\n \r\n );\r\n }\r\n };\r\n\r\n ContactUsNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n // const bgColors = {\r\n // default: \"#81b71a\",\r\n // blue: \"#00B1E1\",\r\n // cyan: \"#37BC9B\",\r\n // green: \"#8CC152\",\r\n // red: \"#E9573F\",\r\n // yellow: \"#F6BB42\",\r\n // white: \"#fff\",\r\n // lightBlue: \"#ADD8E6\",\r\n // darkCyan: \"#008B8B\",\r\n // menuBlue: \"#0078d4\",\r\n // white: \"white\"\r\n // };\r\n if (window.location.pathname === \"/homeBillboardsMain\") {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n activeClass=\"active\"\r\n to={customizationSingleRow.N_ContactUsNo}\r\n spy={true}\r\n smooth={true}\r\n offset={-70}\r\n duration={1000}\r\n onClick={this.closeNav}\r\n >\r\n Contact Us\r\n \r\n );\r\n } else {\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/contactUs\"\r\n onClick={this.closeNav}\r\n >\r\n Contact Us\r\n \r\n );\r\n }\r\n };\r\n\r\n HelloNavigate = ({ customizationSingleRow, user }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/profileForm\"\r\n onClick={this.closeNav}\r\n >\r\n Hello {user.a_name}\r\n \r\n );\r\n };\r\n\r\n LoginNavigate = ({ customizationSingleRow, user }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/login\"\r\n onClick={this.closeNav}\r\n >\r\n Login\r\n \r\n );\r\n };\r\n\r\n LogoutNavigate = ({ customizationSingleRow, user }) => {\r\n if (!customizationSingleRow.A_TopNavbarFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopNavbarFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopNavbarBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopNavbarHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopNavbarFGC}`)\r\n }\r\n to=\"/logout\"\r\n // style={{ color: bgColors.darkCyan }}\r\n onClick={this.closeNav}\r\n >\r\n Logout\r\n \r\n );\r\n };\r\n\r\n SearchNavigate = ({ customizationSingleRow }) => {\r\n if (!customizationSingleRow.A_TopSearchBtnFGC) return \"\";\r\n\r\n const [bgColour, setBgColour] = useState(\r\n `${customizationSingleRow.A_TopSearchBtnFGC}`\r\n );\r\n\r\n const styles = {\r\n background: `${customizationSingleRow.A_TopSearchBtnBGC}`,\r\n color: `${bgColour}`\r\n };\r\n\r\n return (\r\n \r\n setBgColour(`${customizationSingleRow.A_TopSearchBtnHover}`)\r\n }\r\n onMouseLeave={() =>\r\n setBgColour(`${customizationSingleRow.A_TopSearchBtnFGC}`)\r\n }\r\n // type=\"submit\"\r\n //variant=\"outline-primary\"\r\n //variant=\"outline-secondary\"\r\n //variant=\"outline-success\"\r\n //variant=\"outline-danger\"\r\n //variant=\"outline-warning\"\r\n //variant=\"outline-info\"\r\n //variant=\"outline-light\"\r\n //variant=\"outline-primary\" // Babak's Note: Used before\r\n //variant=\"primary\"\r\n //variant=\"secondary\"\r\n //variant=\"success\"\r\n //variant=\"danger\"\r\n //variant=\"warning\"\r\n //variant=\"info\"\r\n //variant=\"light\"\r\n //variant=\"dark\"\r\n\r\n // onClick={e => {\r\n // onClickSearch(e);\r\n // }}\r\n >\r\n Search\r\n \r\n );\r\n };\r\n\r\n handleOpen = () => {\r\n //window.alert(`Open`);\r\n this.setState({ isOpen: true });\r\n };\r\n\r\n handleClose = () => {\r\n //window.alert(`Leave`);\r\n this.setState({ isOpen: false });\r\n };\r\n\r\n setNavExpanded = expanded => {\r\n this.setState({ navExpanded: expanded });\r\n };\r\n\r\n closeNav = () => {\r\n // console.log(\r\n // \"NavBar 2 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n //\r\n // Babak's Note: Had to add below line so when tabbing (by finger when in tablet or mobile mode) the hamberger menu does not un-expand.\r\n // I don't why it works???\r\n // let origin = e.target.placeholder;\r\n // window.alert(`Hello : ${this.state.navExpanded} : ${e.target.placeholder}`)\r\n this.setState({ navExpanded: false });\r\n };\r\n\r\n closeNav2 = () => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n // if (window.location.pathname != \"/homeBillboardsMain\") {\r\n // window.location = `/appointments`;\r\n // }\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n window.reload(false);\r\n // this.setState({ navExpanded: false });\r\n };\r\n\r\n closeNavToAboutUs = () => {\r\n // console.log(\r\n // \"NavBar 2 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n if (window.location.pathname != \"/homeBillboardsMain\") {\r\n window.location = `/infoUs/38`;\r\n }\r\n\r\n // e.stopPropagation();\r\n //console.log(e.target.className); // This gets the className of the target\r\n\r\n this.setState({ navExpanded: false });\r\n };\r\n\r\n closeNavToContactUs = () => {\r\n // console.log(\r\n // \"NavBar 2 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n if (window.location.pathname != \"/homeBillboardsMain\") {\r\n window.location = `/infoUs/26`;\r\n }\r\n\r\n // e.stopPropagation();\r\n //console.log(e.target.className); // This gets the className of the target\r\n\r\n this.setState({ navExpanded: false });\r\n };\r\n\r\n delaySearchAutoComplete = () => {\r\n clearInterval(this.intervalID);\r\n\r\n const { suggestions } = this.state;\r\n if (suggestions.length === 0) {\r\n this.setState(() => ({\r\n dynamicSearchIcon: \"\",\r\n suggestions: \"\",\r\n text: \"\"\r\n }));\r\n }\r\n };\r\n\r\n onTextChanged = async e => {\r\n const value = e.target.value;\r\n let suggestions = [];\r\n if (value.length > 0) {\r\n //const regex = new RegExp(`^${value}`, \"i\");\r\n //suggestions = this.items.sort().filter(v => regex.test(v));\r\n\r\n // this.intervalID = setInterval(\r\n // this.delaySearchAutoComplete.bind(this),\r\n // 10000\r\n // );\r\n\r\n this.setState(\r\n { dynamicSearchIcon: \"dynamicSearchIcon\", suggestions, text: value },\r\n async () => {\r\n await getBillboardLargesSearchAutoComplete(value).then(result =>\r\n this.setState({\r\n dynamicSearchIcon: \"\",\r\n text: value,\r\n suggestions: [...result.data]\r\n })\r\n );\r\n // Axios.get('/endpoint')\r\n // .then(result => this.setState({\r\n // loading: false,\r\n // data: [...result.data],\r\n // }));\r\n }\r\n );\r\n\r\n // const { data: suggestion } = await getBillboardLargesSearchAutoComplete(value);\r\n // suggestions = suggestion;\r\n }\r\n this.setState(() => ({ suggestions, text: value }));\r\n };\r\n\r\n suggestionSelected(e, value) {\r\n e.preventDefault();\r\n window.location = `/searchDynamic/'${value}'`;\r\n this.setState(() => ({\r\n suggestions: [],\r\n text: value,\r\n dynamicSearchView: true\r\n }));\r\n }\r\n\r\n renderSuggestions() {\r\n const { suggestions, text } = this.state;\r\n if (suggestions.length === 0) {\r\n if (text) {\r\n // return (\r\n //
\r\n // {\" \"}\r\n //
\r\n // );\r\n return null;\r\n } else {\r\n return null;\r\n }\r\n }\r\n return (\r\n
    \r\n {suggestions.map(item => (\r\n
  • this.suggestionSelected(e, item.A_Reference)}>\r\n {item.A_Reference}\r\n
  • \r\n ))}\r\n
\r\n );\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener(\"scroll\", this.handleScroll);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"scroll\", this.handleScroll);\r\n clearInterval(this.intervalID);\r\n }\r\n\r\n handleScroll() {\r\n // const { scrollPos } = this.state;\r\n // this.setState({\r\n // scrollPos: document.body.getBoundingClientRect().top,\r\n // show: document.body.getBoundingClientRect().top < scrollPos\r\n // });\r\n if (document.body.getBoundingClientRect().top < -100) {\r\n // this.closeNav();\r\n this.setState({ show: true, suggestions: \"\", text: \"\", isOpen: false });\r\n } else {\r\n this.setState({ show: false });\r\n }\r\n // this.setState({\r\n // show: document.body.getBoundingClientRect().top < -100 ? true : false\r\n // });\r\n }\r\n\r\n render() {\r\n const { text } = this.state;\r\n\r\n const {\r\n user,\r\n customizationSingleRow,\r\n menuOnNavvar,\r\n onClickSearch\r\n } = this.props;\r\n\r\n const rowLength = menuOnNavvar.length;\r\n\r\n const navbarShow = this.state.show;\r\n\r\n const bgColors = {\r\n default: \"#81b71a\",\r\n blue: \"#00B1E1\",\r\n cyan: \"#37BC9B\",\r\n green: \"#8CC152\",\r\n lightGreen: \"#58FF33\",\r\n red: \"#E9573F\",\r\n yellow: \"#F6BB42\",\r\n white: \"#fff\",\r\n lightBlue: \"#33BBFF\",\r\n darkCyan: \"#008B8B\",\r\n menuBlue: \"#0078d4\"\r\n };\r\n\r\n const openMenu = this.state.isOpen;\r\n\r\n //window.alert(`Leave ${openMenu}`);\r\n // console.log(\r\n // \"document.body.getBoundingClientRect().top : \",\r\n // document.body.getBoundingClientRect().top,\r\n // \", this.state.show : \",\r\n // this.state.show,\r\n // \", navbarShow : \",\r\n // navbarShow\r\n // );\r\n\r\n return (\r\n // \r\n\r\n //\r\n // Babak's Note: Look at below line \"style={{ marginTop: 20 }}\"\r\n // \r\n\r\n \r\n \r\n {/* Babak's Note: Different colour menu options : \r\n https://bootstrap-vue.js.org/docs/components/button/\r\n https://getbootstrap.com/docs/4.0/utilities/colors/\r\n https://getbootstrap.com/docs/4.0/utilities/colors/\r\n https://www.youtube.com/watch?v=3J-bSecBdj8\r\n */}\r\n\r\n \r\n \r\n \r\n \r\n
onClickSearch(e)}>\r\n
\r\n \r\n {this.renderSuggestions()}\r\n
\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default NavBar2;\r\n","import React, { Component, useState } from \"react\";\r\n// import Flash from \"react-reveal/Flash\";\r\n// import HeadShake from \"react-reveal/HeadShake\";\r\n// import Jello from \"react-reveal/Jello\";\r\n// import Jump from \"react-reveal/Jump\";\r\n// import RubberBand from \"react-reveal/RubberBand\";\r\n// import Swing from \"react-reveal/Swing\";\r\n// import Tada from \"react-reveal/Tada\";\r\n// import Wobble from \"react-reveal/Wobble\";\r\nimport Fade from \"react-reveal/Fade\";\r\n// import _ from \"lodash\";\r\nimport auth from \"../services/authService\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n// import { getBillboardLargesSearchAutoComplete } from \"../services/billboardLargeService\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Link, animateScroll as scroll } from \"react-scroll\";\r\nimport {\r\n Form,\r\n FormControl,\r\n Nav,\r\n Navbar,\r\n NavDropdown,\r\n Button\r\n} from \"react-bootstrap\";\r\n\r\n//\r\n// Babak's Note: Below 'user' is from 'props', we have used destructering so by adding only 'user' reactjs will\r\n// automnatically take it from 'props':-\r\nclass NavBar3 extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isOpen: false,\r\n navExpanded: false,\r\n suggestions: [],\r\n text: \"\",\r\n dynamicSearchIcon: \"\",\r\n reRun: true\r\n };\r\n }\r\n\r\n intervalID;\r\n\r\n // renderCell = (item, column) => {\r\n // //\r\n // // Babak's Note: Using lodash:-\r\n // return _.get(item, column);\r\n // };\r\n\r\n closeNav = () => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n\r\n // window.location = `/detailsGroup/7`;\r\n // window.location.reload(false);\r\n window.reload(false);\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n\r\n // this.setState({ navExpanded: false });\r\n };\r\n\r\n MenuItemNavigate = ({ menu, index, rowLength }) => {\r\n const [bgColour, setBgColour] = useState(\r\n \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\"\r\n );\r\n\r\n let styles;\r\n\r\n if (rowLength === index + 1) {\r\n if (menu.N_BillboardMenuBG_ID === 1) {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n borderRight: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\"\r\n };\r\n } else {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n borderRight: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\",\r\n backgroundImage: `url(${menu.I_Image})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n } else if (menu.N_BillboardMenuBG_ID === 1) {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\"\r\n };\r\n } else {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\",\r\n backgroundImage: `url(${menu.I_Image})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n\r\n return (\r\n \r\n //setBgColour(`inset 0px -5px 0px ${menu.A_MenuCursorColour}`)\r\n // setBgColour(`inset 1rem -5rem 0 0 ${menu.A_MenuCursorColour}`)\r\n setBgColour(`0 0.5rem 0 0 ${menu.A_MenuCursorColour}`)\r\n // setBgColour(`inset 1rem 0.5rem 0 0 ${menu.A_MenuCursorColour}`)\r\n }\r\n onMouseLeave={() => setBgColour(\"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\")}\r\n to={\r\n menu.N_BillboardOrigin_ID === 1\r\n ? `/detailsGroup/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? `/detailsMaster/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? `/detailsDetail/${menu.ID}`\r\n : \"\"\r\n }\r\n onClick={this.closeNav}\r\n >\r\n {menu.N_BillboardMenuBG_ID === 1 ? (\r\n
{menu.A_Reference}
\r\n ) : (\r\n \r\n {menu.A_Reference}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n componentDidMount() {}\r\n\r\n componentWillUnmount() {}\r\n\r\n render() {\r\n const { text } = this.state;\r\n\r\n //console.log(`navBar render() : ${text}`);\r\n\r\n // if (this.state.aboutUs === true) {\r\n // return \r\n // }\r\n // if (this.state.contactUs === true) {\r\n // return \r\n // }\r\n\r\n const { user, menuOnNavvar, onClickSearch } = this.props;\r\n\r\n // const menuOnNavvar = [\r\n // { id: 1, description: \"Menu One\", colour: \"red\" },\r\n // { id: 2, description: \"Menu Two\", colour: \"green\" },\r\n // { id: 3, description: \"Menu Three\", colour: \"blue\" },\r\n // { id: 4, description: \"Menu Four\", colour: \"cyan\" },\r\n // { id: 5, description: \"Menu Five\", colour: \"orange\" }\r\n // ];\r\n\r\n const rowLength = menuOnNavvar.length;\r\n\r\n return (\r\n // https://stackoverflow.com/questions/32452695/react-bootstrap-how-to-collapse-menu-when-item-is-selected\r\n //\r\n // Babak's Note: Look at below line \"style={{ marginTop: 20 }}\"\r\n // \r\n // Also look at \"https://getbootstrap.com/docs/4.0/utilities/display/\" for \"
hide on screens wider than lg
\r\n //
hide on screens smaller than lg
\"\r\n //
\r\n // \r\n \r\n
\r\n \r\n \r\n \r\n {/*
\r\n \r\n //
\r\n //
\r\n );\r\n }\r\n}\r\n\r\n// export default withRouter(NavBar);\r\nexport default NavBar3;\r\n","import React, { Component, useState } from \"react\";\r\n// import Flash from \"react-reveal/Flash\";\r\n// import HeadShake from \"react-reveal/HeadShake\";\r\n// import Jello from \"react-reveal/Jello\";\r\n// import Jump from \"react-reveal/Jump\";\r\n// import RubberBand from \"react-reveal/RubberBand\";\r\n// import Swing from \"react-reveal/Swing\";\r\n// import Tada from \"react-reveal/Tada\";\r\n// import Wobble from \"react-reveal/Wobble\";\r\nimport Fade from \"react-reveal/Fade\";\r\n// import _ from \"lodash\";\r\nimport auth from \"../services/authService\";\r\nimport { NavLink, withRouter, Route } from \"react-router-dom\";\r\n// import { getBillboardLargesSearchAutoComplete } from \"../services/billboardLargeService\";\r\nimport { Redirect } from \"react-router\";\r\nimport { Link, animateScroll as scroll } from \"react-scroll\";\r\nimport {\r\n Form,\r\n FormControl,\r\n Nav,\r\n Navbar,\r\n NavDropdown,\r\n Button\r\n} from \"react-bootstrap\";\r\n\r\n//\r\n// Babak's Note: Below 'user' is from 'props', we have used destructering so by adding only 'user' reactjs will\r\n// automnatically take it from 'props':-\r\nclass NavBar3 extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n show: false,\r\n isOpen: false,\r\n navExpanded: false,\r\n suggestions: [],\r\n text: \"\",\r\n dynamicSearchIcon: \"\",\r\n reRun: true\r\n };\r\n this.handleScroll = this.handleScroll.bind(this);\r\n }\r\n\r\n intervalID;\r\n\r\n // renderCell = (item, column) => {\r\n // //\r\n // // Babak's Note: Using lodash:-\r\n // return _.get(item, column);\r\n // };\r\n\r\n closeNav = () => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n\r\n // window.location = `/detailsGroup/7`;\r\n // window.location.reload(false);\r\n window.reload(false);\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n\r\n // this.setState({ navExpanded: false });\r\n };\r\n\r\n closeNav2 = () => {\r\n // console.log(\r\n // \"NavBar 1 : \",\r\n // this.state.navExpanded,\r\n // window.location.pathname\r\n // );\r\n\r\n // window.location = `/detailsGroup/7`;\r\n // window.location.reload(false);\r\n this.setState({ navExpanded: false });\r\n\r\n // e.stopPropagation();\r\n // console.log(e.target.className); // This gets the className of the target\r\n\r\n // this.setState({ navExpanded: false });\r\n };\r\n\r\n MenuItemNavigate = ({ menu, index, rowLength }) => {\r\n const [bgColour, setBgColour] = useState(\r\n \"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\"\r\n );\r\n\r\n let styles;\r\n\r\n if (rowLength === index + 1) {\r\n if (menu.N_BillboardMenuBG_ID === 1) {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n borderRight: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\"\r\n };\r\n } else {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n borderRight: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\",\r\n backgroundImage: `url(${menu.I_Image})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n } else if (menu.N_BillboardMenuBG_ID === 1) {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\"\r\n };\r\n } else {\r\n styles = {\r\n background: \"white\",\r\n color: `${menu.A_MenuCursorColour}`,\r\n borderLeft: \"0.5px solid white\",\r\n borderTop: \"0.5px solid white\",\r\n borderBottom: \"0.5px solid white\",\r\n boxShadow: `${bgColour}`,\r\n paddingTop: \"15px\",\r\n paddingBottom: \"15px\",\r\n backgroundImage: `url(${menu.I_Image})`,\r\n backgroundRepeat: \"no-repeat\",\r\n backgroundSize: \"cover\"\r\n };\r\n }\r\n\r\n return (\r\n \r\n //setBgColour(`inset 0px -5px 0px ${menu.A_MenuCursorColour}`)\r\n // setBgColour(`inset 1rem -5rem 0 0 ${menu.A_MenuCursorColour}`)\r\n setBgColour(`0 0.5rem 0 0 ${menu.A_MenuCursorColour}`)\r\n // setBgColour(`inset 1rem 0.5rem 0 0 ${menu.A_MenuCursorColour}`)\r\n }\r\n onMouseLeave={() => setBgColour(\"0 0.5rem 1rem 0 rgba(0, 0, 0, 0.9)\")}\r\n to={\r\n menu.N_BillboardOrigin_ID === 1\r\n ? `/detailsGroup/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 2\r\n ? `/detailsMaster/${menu.ID}`\r\n : menu.N_BillboardOrigin_ID === 3\r\n ? `/detailsDetail/${menu.ID}`\r\n : \"\"\r\n }\r\n onClick={this.closeNav}\r\n >\r\n {menu.N_BillboardMenuBG_ID === 1 ? (\r\n
{menu.A_Reference}
\r\n ) : (\r\n \r\n {menu.A_Reference}\r\n \r\n )}\r\n \r\n );\r\n };\r\n\r\n componentDidMount() {\r\n window.addEventListener(\"scroll\", this.handleScroll);\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener(\"scroll\", this.handleScroll);\r\n clearInterval(this.intervalID);\r\n }\r\n\r\n handleScroll() {\r\n // const { scrollPos } = this.state;\r\n // this.setState({\r\n // scrollPos: document.body.getBoundingClientRect().top,\r\n // show: document.body.getBoundingClientRect().top < scrollPos\r\n // });\r\n if (document.body.getBoundingClientRect().top < -200) {\r\n this.closeNav2();\r\n this.setState({ show: true, suggestions: \"\", text: \"\", isOpen: false });\r\n } else {\r\n this.setState({ show: false });\r\n }\r\n // this.setState({\r\n // show: document.body.getBoundingClientRect().top < -100 ? true : false\r\n // });\r\n }\r\n\r\n render() {\r\n const { text } = this.state;\r\n\r\n const navbarShow = this.state.show;\r\n\r\n //console.log(`navBar render() : ${text}`);\r\n\r\n // if (this.state.aboutUs === true) {\r\n // return \r\n // }\r\n // if (this.state.contactUs === true) {\r\n // return \r\n // }\r\n\r\n const { user, menuOnNavvar, onClickSearch } = this.props;\r\n\r\n // const menuOnNavvar = [\r\n // { id: 1, description: \"Menu One\", colour: \"red\" },\r\n // { id: 2, description: \"Menu Two\", colour: \"green\" },\r\n // { id: 3, description: \"Menu Three\", colour: \"blue\" },\r\n // { id: 4, description: \"Menu Four\", colour: \"cyan\" },\r\n // { id: 5, description: \"Menu Five\", colour: \"orange\" }\r\n // ];\r\n\r\n const rowLength = menuOnNavvar.length;\r\n\r\n return (\r\n // https://stackoverflow.com/questions/32452695/react-bootstrap-how-to-collapse-menu-when-item-is-selected\r\n //\r\n // Babak's Note: Look at below line \"style={{ marginTop: 20 }}\"\r\n // \r\n // Also look at \"https://getbootstrap.com/docs/4.0/utilities/display/\" for \"
hide on screens wider than lg
\r\n //
hide on screens smaller than lg
\"\r\n //
\r\n // \r\n \r\n
\r\n \r\n \r\n \r\n {/*
\r\n \r\n //
\r\n //
\r\n );\r\n }\r\n}\r\n\r\n// export default withRouter(NavBar);\r\nexport default NavBar3;\r\n","import React, { Component } from \"react\";\nimport { Route, Redirect, Switch, BrowserRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\n\nimport auth from \"./services/authService\";\n\n// import { ToastContainer } from \"react-toastify\";\nimport ProtectedRoute from \"./components/common/protectedRoute\";\nimport LoginForm from \"./components/authentication/loginForm\";\nimport Logout from \"./components/authentication/logout\";\n\n// import Customization from \"./components/customizations/customization\";\nimport { loadCustomizationSingleRow } from \"../src/store/customizations\";\nimport { loadMenusOnNavbar } from \"../src/store/menus\";\nimport CustomizationForm from \"./components/customizations/customizationForm\";\nimport CustomizationsList from \"./components/customizations/customizationsList\";\n\nimport SearchDynamic from \"./components/home/searchDynamic\";\n\nimport DetailsGroup from \"./components/home/detailsGroup\";\nimport DetailsMaster from \"./components/home/detailsMaster\";\nimport DetailsDetail from \"./components/home/detailsDetail\";\n\nimport AboutUs from \"./components/homeBillboards/aboutUs\";\nimport ContactUs from \"./components/homeBillboards/contactUs\";\n\nimport RoleForm from \"./components/authorization/roleForm\";\nimport RolesList from \"./components/authorization/rolesList\";\nimport UserForm from \"./components/users/userForm\";\nimport UsersList from \"./components/users/usersList\";\n\nimport MenuForm from \"./components/billboardAdmin/menuForm\";\nimport MenusList from \"./components/billboardAdmin/menusList\";\nimport GroupForm from \"./components/billboardAdmin/groupForm\";\nimport GroupsList from \"./components/billboardAdmin/groupsList\";\nimport SumOfArticleForm from \"./components/billboardAdmin/sumOfArticleForm\";\nimport SumOfArticlesList from \"./components/billboardAdmin/sumOfArticlesList\";\nimport ArticleForm from \"./components/billboardAdmin/articleForm\";\nimport ArticlesList from \"./components/billboardAdmin/articlesList\";\n\nimport HomeBillboardForm from \"./components/homeBillboards/homeBillboardForm\";\nimport HomeBillboardsList from \"./components/homeBillboards/homeBillboardsList\";\nimport HomeBillboardChildForm from \"./components/homeBillboards/homeBillboardChildForm\";\nimport HomeBillboardChildsList from \"./components/homeBillboards/homeBillboardChildsList\";\n\nimport HomeBillboardsMain from \"./components/homeBillboards/homeBillboardsMain\";\n\nimport NotFound from \"./components/notFound\";\nimport NavBar from \"./components/navBar\";\nimport NavBar2 from \"./components/navBar2\";\nimport NavBar3 from \"./components/navBar3\";\nimport NavBar4 from \"./components/navBar4\";\nimport NavBarFooter from \"./components/navBarFooter\";\n\nimport \"./App.css\";\n\nclass App extends Component {\n state = {\n data: {\n B_TopNavbarActive: false\n }\n };\n\n async componentDidMount() {\n const user = auth.getCurrentUser();\n await this.props.loadCustomizationSingleRow(1);\n await this.props.loadMenusOnNavbar(1);\n\n // const topNavbarActive = this.mapCustomizationToViewModel(Customization());\n // const topNavbarActive = Customization();\n console.log(`App componentDidMount() : ${user} `);\n this.setState({\n user\n });\n }\n\n // mapCustomizationToViewModel(customization) {\n // console.log(\n // \"App, mapCustomizationToViewModel() iiiiiiiiiiiiiiiii : \",\n // customization.B_TopNavbarActive\n // );\n // return {\n // B_TopNavbarActive: customization.B_TopNavbarActive\n // };\n // }\n\n onClickSearchHandle = async event => {\n //window.confirm(`Are you sure you ${event.target.elements.searchID.value}?`);\n if (event.target.elements.searchID.value) {\n event.preventDefault();\n window.location = `/searchDynamic/'${event.target.elements.searchID.value}'`;\n } else {\n event.preventDefault();\n // window.alert(\"متن جستجو را اضافه کنید\");\n }\n };\n\n render() {\n const { B_TopNavbarActive } = this.props.customizationSingleRow;\n\n // console.log(\n // \"App, Render() iiiiiiiiiiiiiiiii : \",\n // this.props.customizationSingleRow,\n // B_TopNavbarActive\n // );\n const { user } = this.state;\n return (\n \n \n {/* */}\n {this.props.customizationSingleRow.A_WebAppTitle}\n \n {this.props.customizationSingleRow.B_ClientNavbarActive ? (\n \n ) : (\n \"\"\n )}\n {this.props.customizationSingleRow.B_TopNavbarActive ? (\n
\n \n {this.props.customizationSingleRow.B_ClientNavbarActive ? (\n \n ) : (\n \"\"\n )}\n
\n ) : (\n \"\"\n )}\n\n {/* */}\n\n {/*
\n \n
*/}\n
\n \n (\n \n )}\n />\n \n\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n\n (\n \n )}\n />\n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n \n (\n \n )}\n />\n\n {/* (\n \n )}\n /> */}\n\n (\n \n )}\n />\n\n (\n \n )}\n />\n\n \n \n \n \n
\n
\n
\n );\n }\n}\n\n//\n// Babak's Notes: goto tutorial directory '11-Integration with React' file '5- Connecting Components Using react-redux'\nconst mapStateToProps = state => ({\n // bugs: state.entities.customizations.list.filter(bug => !bug.resolved)\n customizationSingleRow: state.entities.customizations.listSingleRow,\n menuOnNavvar: state.entities.menus.listOnNavvar\n});\n\nconst mapDispatchToProps = dispatch => ({\n loadCustomizationSingleRow: id => dispatch(loadCustomizationSingleRow(id)),\n loadMenusOnNavbar: billLocationGroupID =>\n dispatch(loadMenusOnNavbar(billLocationGroupID))\n});\n\n// Container Component\n// Presentation (Bugs)\n//\n// Babak's Notes: Below I populate 'this.props.bugs' and 'this.props.loadBugs()':-\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(App);\n\n// export default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"homeBillboardChildsMains\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n listOnNavvar: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'homeBillboardChildsMainsRequested' or 'homeBillboardChildsMainsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'homeBillboardChildsMains' below represents the 'state':-\r\n homeBillboardChildsMainsRequested: (homeBillboardChildsMains, action) => {\r\n // window.alert(\r\n // \" homeBillboardChildsMainsRequested : \",\r\n // homeBillboardChildsMains\r\n // );\r\n homeBillboardChildsMains.loading = true;\r\n },\r\n homeBillboardChildsMainsReceived: (homeBillboardChildsMains, action) => {\r\n console.log(\r\n \"homeBillboardChildsMainsReceiveddddddddddddddddddddddddddd : \",\r\n action.payload\r\n );\r\n homeBillboardChildsMains.list = action.payload;\r\n homeBillboardChildsMains.loading = false;\r\n homeBillboardChildsMains.lastFetch = Date.now();\r\n },\r\n homeBillboardChildsMainsRequestedFailed: (\r\n homeBillboardChildsMains,\r\n action\r\n ) => {\r\n homeBillboardChildsMains.loading = false;\r\n // window.alert(`No HomeBillboardChildsMains found.`);\r\n },\r\n\r\n homeBillboardChildsMainsOnNavbarRequested: (\r\n homeBillboardChildsMains,\r\n action\r\n ) => {\r\n console.log(\r\n \"homeBillboardChildsMainsOnNavbarRequested : \",\r\n action.payload\r\n );\r\n homeBillboardChildsMains.loading = true;\r\n },\r\n homeBillboardChildsMainsOnNavbarReceived: (\r\n homeBillboardChildsMains,\r\n action\r\n ) => {\r\n console.log(\r\n \"homeBillboardChildsMainsOnNavbarReceived : \",\r\n action.payload\r\n );\r\n homeBillboardChildsMains.listOnNavvar = action.payload;\r\n homeBillboardChildsMains.loading = false;\r\n homeBillboardChildsMains.lastFetch = Date.now();\r\n },\r\n homeBillboardChildsMainsOnNavbarRequestedFailed: (\r\n homeBillboardChildsMains,\r\n action\r\n ) => {\r\n homeBillboardChildsMains.loading = false;\r\n // window.alert(`No HomeBillboardChildsMains found.`);\r\n },\r\n\r\n homeBillboardChildsMainRequested: (homeBillboardChildsMain, action) => {\r\n console.log(\"homeBillboardChildsMainRequested : \", action.payload);\r\n homeBillboardChildsMain.loading = true;\r\n },\r\n homeBillboardChildsMainReceived: (homeBillboardChildsMain, action) => {\r\n console.log(\"homeBillboardChildsMainReceived : \", action.payload);\r\n homeBillboardChildsMain.listSingleRow = action.payload;\r\n homeBillboardChildsMain.loading = false;\r\n homeBillboardChildsMain.lastFetch = Date.now();\r\n },\r\n homeBillboardChildsMainRequestedFailed: (\r\n homeBillboardChildsMain,\r\n action\r\n ) => {\r\n homeBillboardChildsMain.loading = false;\r\n // window.alert(`No HomeBillboardChildsMain found.`);\r\n },\r\n homeBillboardChildsMainChangeRequested: (\r\n homeBillboardChildsMain,\r\n action\r\n ) => {\r\n console.log(\"homeBillboardChildsMainChangeRequested : \", action.payload);\r\n homeBillboardChildsMain.loading = true;\r\n },\r\n homeBillboardChildsMainChangeFailed: (homeBillboardChildsMain, action) => {\r\n homeBillboardChildsMain.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardChildsMain api at the back end.\r\n // const { ID: homeBillboardChildsMainId, A_Name: homeBillboardChildsMainName } = action.payload;\r\n\r\n // window.alert(`HomeBillboardChildsMain '${homeBillboardChildsMainName}' no longer exists.`);\r\n\r\n // const index = homeBillboardChildsMain.list.findIndex(homeBillboardChildsMain => homeBillboardChildsMain.ID === homeBillboardChildsMainId);\r\n // //console.log(\"homeBillboardChildsMainDeleted ha \", index);\r\n // homeBillboardChildsMain.list.splice(index, 1);\r\n },\r\n homeBillboardChildsMainChanged: (homeBillboardChildsMain, action) => {\r\n homeBillboardChildsMain.loading = false;\r\n },\r\n homeBillboardChildsMainDeleteRequested: (\r\n homeBillboardChildsMain,\r\n action\r\n ) => {\r\n console.log(\"homeBillboardChildsMainDeleteRequested : \", action.payload);\r\n homeBillboardChildsMain.loading = true;\r\n },\r\n homeBillboardChildsMainDeleteFailed: (homeBillboardChildsMains, action) => {\r\n homeBillboardChildsMains.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardChildsMain api at the back end.\r\n const {\r\n ID: homeBillboardChildsMainId,\r\n A_Name: homeBillboardChildsMainName\r\n } = action.payload;\r\n\r\n window.alert(\r\n `An issue has occured with homeBillboardChildsMain '${homeBillboardChildsMainName}'. ${action.payload}`\r\n );\r\n\r\n const index = homeBillboardChildsMains.list.findIndex(\r\n homeBillboardChildsMain =>\r\n homeBillboardChildsMain.ID === homeBillboardChildsMainId\r\n );\r\n //console.log(\"homeBillboardChildsMainDeleted ha \", index);\r\n homeBillboardChildsMains.list.splice(index, 1);\r\n },\r\n homeBillboardChildsMainDeleted: (homeBillboardChildsMains, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete homeBillboardChildsMain api at the back end.\r\n const { ID: homeBillboardChildsMainID } = action.payload;\r\n // console.log(\"homeBillboardChildsMainDeleted ha \", action.payload, homeBillboardChildsMainID, homeBillboardChildsMains);\r\n const index = homeBillboardChildsMains.list.findIndex(\r\n homeBillboardChildsMain =>\r\n homeBillboardChildsMain.ID === homeBillboardChildsMainID\r\n );\r\n //console.log(\"homeBillboardChildsMainDeleted, ha! ha! \", index);\r\n homeBillboardChildsMains.list.splice(index, 1);\r\n },\r\n homeBillboardChildsMainAddRequested: (homeBillboardChildsMain, action) => {\r\n console.log(\"homeBillboardChildsMainAddRequested : \", action.payload);\r\n homeBillboardChildsMain.loading = true;\r\n },\r\n homeBillboardChildsMainAddFailed: (homeBillboardChildsMain, action) => {\r\n homeBillboardChildsMain.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'homeBillboardChildsMains' below represents the 'state':-\r\n homeBillboardChildsMainAdded: (homeBillboardChildsMains, action) => {\r\n console.log(\"homeBillboardChildsMainAdded : \", action.payload);\r\n homeBillboardChildsMains.list.push(action.payload);\r\n }\r\n // homeBillboardChildsMainAdded: (homeBillboardChildsMains, action) => {\r\n // homeBillboardChildsMains.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // homeBillboardChildsMainDeleted: (homeBillboardChildsMains, action) => {\r\n // console.log(\"homeBillboardChildsMainDeleted ha \", action.payload.ID);\r\n // homeBillboardChildsMains.list.filter(homeBillboardChildsMain => homeBillboardChildsMain.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n homeBillboardChildsMainAddRequested,\r\n homeBillboardChildsMainAdded,\r\n homeBillboardChildsMainAddFailed,\r\n homeBillboardChildsMainChangeRequested,\r\n homeBillboardChildsMainChanged,\r\n homeBillboardChildsMainChangeFailed,\r\n homeBillboardChildsMainDeleteRequested,\r\n homeBillboardChildsMainDeleted,\r\n homeBillboardChildsMainDeleteFailed,\r\n homeBillboardChildsMainsReceived,\r\n homeBillboardChildsMainsRequested,\r\n homeBillboardChildsMainsRequestedFailed,\r\n homeBillboardChildsMainsOnNavbarReceived,\r\n homeBillboardChildsMainsOnNavbarRequested,\r\n homeBillboardChildsMainsOnNavbarRequestedFailed,\r\n homeBillboardChildsMainReceived,\r\n homeBillboardChildsMainRequested,\r\n homeBillboardChildsMainRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/homeBillboardChildsMains\";\r\n\r\nexport const loadHomeBillboardChildsMains = homeBillboardID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardChildsMains;\r\n\r\n // window.alert(`loadHomeBillboardChildsMains lastFetch : ${homeBillboardID}`);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/main\" + \"/\" + homeBillboardID,\r\n onStart: homeBillboardChildsMainsRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardChildsMainsReceived.type,\r\n onError: homeBillboardChildsMainsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadHomeBillboardChildsMain = homeBillboardChildsMainID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.homeBillboardChildsMains;\r\n\r\n //console.log(\"loadHomeBillboardChildsMain : \", homeBillboardChildsMainID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardChildsMainID,\r\n onStart: homeBillboardChildsMainRequested.type,\r\n method: \"get\",\r\n onSuccess: homeBillboardChildsMainReceived.type,\r\n onError: homeBillboardChildsMainRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addHomeBillboardChildsMain':-\r\nexport const addHomeBillboardChildsMain = (\r\n homeBillboardChildsMain,\r\n user,\r\n currentDate\r\n) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: homeBillboardChildsMainAddRequested.type,\r\n //data: homeBillboardChildsMain,\r\n data: {\r\n N_OrderNo: homeBillboardChildsMain.N_OrderNo,\r\n A_Reference: homeBillboardChildsMain.A_Reference,\r\n A_Summary: homeBillboardChildsMain.A_Summary,\r\n A_HoverSummary01_Link: homeBillboardChildsMain.A_HoverSummary01_Link,\r\n I_Image: homeBillboardChildsMain.I_Image,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: homeBillboardChildsMainAdded.type,\r\n onError: homeBillboardChildsMainAddFailed.type\r\n });\r\n\r\nexport const getHomeBillboardChildsMains = createSelector(\r\n state => state.entities.homeBillboardChildsMains,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (homeBillboardChildsMains, projects) has not changed then do not requery again:-\r\n // (homeBillboardChildsMains) => homeBillboardChildsMains.list.filter(homeBillboardChildsMain => !homeBillboardChildsMain.B_Active)\r\n homeBillboardChildsMains => homeBillboardChildsMains.list\r\n);\r\n\r\nexport const changeHomeBillboardChildsMain = (\r\n homeBillboardChildsMain,\r\n user,\r\n currentDate\r\n) =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardChildsMain.ID,\r\n method: \"put\",\r\n onStart: homeBillboardChildsMainChangeRequested.type,\r\n data: {\r\n N_OrderNo: homeBillboardChildsMain.N_OrderNo,\r\n A_Reference: homeBillboardChildsMain.A_Reference,\r\n A_Summary: homeBillboardChildsMain.A_Summary,\r\n A_HoverSummary01_Link: homeBillboardChildsMain.A_HoverSummary01_Link,\r\n I_Image: homeBillboardChildsMain.I_Image,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: homeBillboardChildsMainChanged.type,\r\n onError: homeBillboardChildsMainChangeFailed.type\r\n });\r\n\r\nexport const deleteHomeBillboardChildsMain = homeBillboardChildsMain =>\r\n apiCallBegan({\r\n url: url + \"/\" + homeBillboardChildsMain.ID,\r\n method: \"delete\",\r\n onStart: homeBillboardChildsMainDeleteRequested.type,\r\n data: {\r\n ID: homeBillboardChildsMain.ID,\r\n A_Reference: homeBillboardChildsMain.A_Reference\r\n },\r\n onSuccess: homeBillboardChildsMainDeleted.type,\r\n onError: homeBillboardChildsMainDeleteFailed.type\r\n });\r\n","import { createAction, createReducer, createSlice } from \"@reduxjs/toolkit\";\r\nimport { createSelector } from \"reselect\";\r\nimport { apiCallBegan } from \"./api\";\r\nimport moment from \"moment\";\r\n\r\nconst slice = createSlice({\r\n name: \"customizationMaintains\",\r\n initialState: {\r\n list: [],\r\n listSingleRow: [],\r\n loading: false,\r\n lastFetch: null\r\n },\r\n reducers: {\r\n //\r\n // Babak's Note: By adding 'customizationsRequested' or 'customizationsReceived' below, a action is created for us:-\r\n // actions => action handlers. The 'customizations' below represents the 'state':-\r\n customizationsRequested: (customizationMaintains, action) => {\r\n console.log(\"customizationsRequested : \", action.payload);\r\n customizationMaintains.loading = true;\r\n },\r\n customizationsReceived: (customizationMaintains, action) => {\r\n console.log(\"customizationsReceived : \", action.payload);\r\n customizationMaintains.list = action.payload;\r\n customizationMaintains.loading = false;\r\n customizationMaintains.lastFetch = Date.now();\r\n },\r\n customizationsRequestedFailed: (customizationMaintains, action) => {\r\n customizationMaintains.loading = false;\r\n // window.alert(`No Customizations found.`);\r\n },\r\n customizationRequested: (customizationMaintain, action) => {\r\n // window.alert(\"customizationRequested : \", action.payload);\r\n customizationMaintain.loading = true;\r\n },\r\n customizationReceived: (customizationMaintain, action) => {\r\n console.log(\"customizationReceived : \", action.payload);\r\n customizationMaintain.list = action.payload;\r\n customizationMaintain.loading = false;\r\n customizationMaintain.lastFetch = Date.now();\r\n },\r\n customizationRequestedFailed: (customizationMaintain, action) => {\r\n // window.alert(`No Customization found.`);\r\n customizationMaintain.loading = false;\r\n },\r\n\r\n customizationSingleRowRequested: (customizationMaintain, action) => {\r\n // window.alert(\"customizationSingleRowequested : \", action.payload);\r\n customizationMaintain.loading = true;\r\n },\r\n customizationSingleRowReceived: (customizationMaintain, action) => {\r\n console.log(\"customizationSingleRowReceived : \", action.payload);\r\n customizationMaintain.listSingleRow = action.payload;\r\n customizationMaintain.loading = false;\r\n customizationMaintain.lastFetch = Date.now();\r\n },\r\n customizationSingleRowRequestedFailed: (customizationMaintain, action) => {\r\n // window.alert(`No customizationSingleRowRequestedFailed found.`);\r\n customizationMaintain.loading = false;\r\n },\r\n\r\n customizationChangeRequested: (customizationMaintain, action) => {\r\n console.log(\"customizationChangeRequested : \", action.payload);\r\n customizationMaintain.loading = true;\r\n },\r\n customizationChangeFailed: (customizationMaintain, action) => {\r\n customizationMaintain.loading = false;\r\n\r\n // //\r\n // // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete customization api at the back end.\r\n // const { ID: customizationId, A_Name: customizationName } = action.payload;\r\n\r\n // window.alert(`Customization '${customizationName}' no longer exists.`);\r\n\r\n // const index = customization.list.findIndex(customization => customization.ID === customizationId);\r\n // //console.log(\"customizationDeleted ha \", index);\r\n // customization.list.splice(index, 1);\r\n },\r\n customizationChanged: (customizationMaintain, action) => {\r\n customizationMaintain.loading = false;\r\n },\r\n customizationDeleteRequested: (customizationMaintain, action) => {\r\n console.log(\"customizationDeleteRequested : \", action.payload);\r\n customizationMaintain.loading = true;\r\n },\r\n customizationDeleteFailed: (customizationMaintains, action) => {\r\n customizationMaintains.loading = false;\r\n\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete customization api at the back end.\r\n const { ID: customizationId, A_Name: customizationName } = action.payload;\r\n\r\n // window.alert(\r\n // `An issue has occured with customization '${customizationName}'. ${action.payload}`\r\n // );\r\n\r\n const index = customizationMaintains.list.findIndex(\r\n customizationMaintain => customizationMaintain.ID === customizationId\r\n );\r\n //console.log(\"customizationDeleted ha \", index);\r\n customizationMaintains.list.splice(index, 1);\r\n },\r\n customizationDeleted: (customizationMaintains, action) => {\r\n //\r\n // Babak's Notes: The 'action.payload' contains the returned data from database. Note: look what I am returning from delete customization api at the back end.\r\n const { ID: customizationID } = action.payload;\r\n // console.log(\"customizationDeleted ha \", action.payload, customizationID, customizations);\r\n const index = customizationMaintains.list.findIndex(\r\n customizationMaintain => customizationMaintain.ID === customizationID\r\n );\r\n //console.log(\"customizationDeleted, ha! ha! \", index);\r\n customizationMaintains.list.splice(index, 1);\r\n },\r\n customizationAddRequested: (customizationMaintain, action) => {\r\n console.log(\"customizationAddRequested : \", action.payload);\r\n customizationMaintain.loading = true;\r\n },\r\n customizationAddFailed: (customizationMaintain, action) => {\r\n customizationMaintain.loading = false;\r\n },\r\n //\r\n // Babak's Note: The 'customizations' below represents the 'state':-\r\n customizationAdded: (customizationMaintains, action) => {\r\n console.log(\"customizationAdded : \", action.payload);\r\n customizationMaintains.list.push(action.payload);\r\n }\r\n // customizationAdded: (customizations, action) => {\r\n // customizations.list.push({\r\n // id: ++lastId,\r\n // description: action.payload.description,\r\n // resolved: false\r\n // });\r\n // },\r\n // customizationDeleted: (customizations, action) => {\r\n // console.log(\"customizationDeleted ha \", action.payload.ID);\r\n // customizations.list.filter(customization => customization.ID !== action.payload.ID);\r\n // },\r\n }\r\n});\r\nconst {\r\n customizationAddRequested,\r\n customizationAdded,\r\n customizationAddFailed,\r\n customizationChangeRequested,\r\n customizationChanged,\r\n customizationChangeFailed,\r\n customizationDeleteRequested,\r\n customizationDeleted,\r\n customizationDeleteFailed,\r\n customizationsReceived,\r\n customizationsRequested,\r\n customizationsRequestedFailed,\r\n customizationReceived,\r\n customizationRequested,\r\n customizationRequestedFailed,\r\n customizationSingleRowReceived,\r\n customizationSingleRowRequested,\r\n customizationSingleRowRequestedFailed\r\n} = slice.actions;\r\nexport default slice.reducer;\r\n\r\n//\r\n// Action Creators\r\nconst url = \"/customizations\";\r\n\r\nexport const loadCustomizations = () => (dispatch, getState) => {\r\n const { lastFetch } = getState().entities.customizationMaintains;\r\n\r\n console.log(\"loadCustomizations lastFetch : \", lastFetch);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url,\r\n onStart: customizationsRequested.type,\r\n method: \"get\",\r\n onSuccess: customizationsReceived.type,\r\n onError: customizationsRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadCustomization = customizationID => (dispatch, getState) => {\r\n // const { lastFetch } = getState().entities.customizations;\r\n\r\n //console.log(\"loadCustomization : \", customizationID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + customizationID,\r\n onStart: customizationRequested.type,\r\n method: \"get\",\r\n onSuccess: customizationReceived.type,\r\n onError: customizationRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\nexport const loadCustomizationSingleRow = customizationID => (\r\n dispatch,\r\n getState\r\n) => {\r\n // const { lastFetch } = getState().entities.customizations;\r\n\r\n //console.log(\"loadCustomization : \", customizationID);\r\n\r\n // //\r\n // // Babak's Note: Below we check with 'moment' that catch that if this request was already fetched less than 10 minutes ago then do not fetch again:-\r\n // const diffInMinutes = moment().diff(moment(lastFetch), \"minutes\");\r\n // if (diffInMinutes < 10) return;\r\n\r\n dispatch(\r\n apiCallBegan({\r\n url: url + \"/\" + customizationID,\r\n onStart: customizationSingleRowRequested.type,\r\n method: \"get\",\r\n onSuccess: customizationSingleRowReceived.type,\r\n onError: customizationSingleRowRequestedFailed.type\r\n })\r\n );\r\n};\r\n\r\n//\r\n// Babak's Note: Below function 'apiCallBegan' is returned back by which function (in this case from within 'index.js') calls 'addCustomization':-\r\nexport const addCustomization = (customizationMaintain, user, currentDate) =>\r\n apiCallBegan({\r\n url,\r\n method: \"post\",\r\n onStart: customizationAddRequested.type,\r\n // data: customization,\r\n data: {\r\n A_WebAppTitle: customizationMaintain.A_WebAppTitle,\r\n A_BaseNavbarBGC: customizationMaintain.A_BaseNavbarBGC,\r\n A_BaseNavbarFGC: customizationMaintain.A_BaseNavbarFGC,\r\n A_BaseNavbarHover: customizationMaintain.A_BaseNavbarHover,\r\n A_BaseSearchBtnBGC: customizationMaintain.A_BaseSearchBtnBGC,\r\n A_BaseSearchBtnFGC: customizationMaintain.A_BaseSearchBtnFGC,\r\n A_BaseSearchBtnHover: customizationMaintain.A_BaseSearchBtnHover,\r\n B_ClientNavbarActive: customizationMaintain.B_ClientNavbarActive,\r\n B_TopNavbarActive: customizationMaintain.B_TopNavbarActive,\r\n A_TopNavbarBGC: customizationMaintain.A_TopNavbarBGC,\r\n A_TopNavbarFGC: customizationMaintain.A_TopNavbarFGC,\r\n A_TopNavbarHover: customizationMaintain.A_TopNavbarHover,\r\n A_TopSearchBtnBGC: customizationMaintain.A_TopSearchBtnBGC,\r\n A_TopSearchBtnFGC: customizationMaintain.A_TopSearchBtnFGC,\r\n A_TopSearchBtnHover: customizationMaintain.A_TopSearchBtnHover,\r\n I_LoginBGImage: customizationMaintain.I_LoginBGImage,\r\n N_AboutUsNo: customizationMaintain.N_AboutUsNo,\r\n N_ContactUsNo: customizationMaintain.N_ContactUsNo,\r\n B_GoogleMap: customizationMaintain.B_GoogleMap,\r\n F_Lat: customizationMaintain.F_Lat,\r\n F_Lng: customizationMaintain.F_Lng,\r\n D_Inserted: currentDate,\r\n A_Inserted_By: user\r\n },\r\n onSuccess: customizationAdded.type,\r\n onError: customizationAddFailed.type\r\n });\r\n\r\nexport const getCustomizations = createSelector(\r\n state => state.entities.customizations,\r\n //\r\n // Babak's Note: In the below line, by installing above 'reselect' (at the top of this file) if the list of (customizations, projects) has not changed then do not requery again:-\r\n // (customizations) => customizations.list.filter(customization => !customization.B_Active)\r\n customizations => customizations.list\r\n);\r\n\r\nexport const changeCustomization = (customizationMaintain, user, currentDate) =>\r\n apiCallBegan({\r\n url: url + \"/\" + customizationMaintain.ID,\r\n method: \"put\",\r\n onStart: customizationChangeRequested.type,\r\n // data: customization,\r\n data: {\r\n ID: customizationMaintain.ID,\r\n A_WebAppTitle: customizationMaintain.A_WebAppTitle,\r\n A_BaseNavbarBGC: customizationMaintain.A_BaseNavbarBGC,\r\n A_BaseNavbarFGC: customizationMaintain.A_BaseNavbarFGC,\r\n A_BaseNavbarHover: customizationMaintain.A_BaseNavbarHover,\r\n A_BaseSearchBtnBGC: customizationMaintain.A_BaseSearchBtnBGC,\r\n A_BaseSearchBtnFGC: customizationMaintain.A_BaseSearchBtnFGC,\r\n A_BaseSearchBtnHover: customizationMaintain.A_BaseSearchBtnHover,\r\n B_ClientNavbarActive: customizationMaintain.B_ClientNavbarActive,\r\n B_TopNavbarActive: customizationMaintain.B_TopNavbarActive,\r\n A_TopNavbarBGC: customizationMaintain.A_TopNavbarBGC,\r\n A_TopNavbarFGC: customizationMaintain.A_TopNavbarFGC,\r\n A_TopNavbarHover: customizationMaintain.A_TopNavbarHover,\r\n A_TopSearchBtnBGC: customizationMaintain.A_TopSearchBtnBGC,\r\n A_TopSearchBtnFGC: customizationMaintain.A_TopSearchBtnFGC,\r\n A_TopSearchBtnHover: customizationMaintain.A_TopSearchBtnHover,\r\n I_LoginBGImage: customizationMaintain.I_LoginBGImage,\r\n N_AboutUsNo: customizationMaintain.N_AboutUsNo,\r\n N_ContactUsNo: customizationMaintain.N_ContactUsNo,\r\n B_GoogleMap: customizationMaintain.B_GoogleMap,\r\n F_Lat: customizationMaintain.F_Lat,\r\n F_Lng: customizationMaintain.F_Lng,\r\n D_Updated: currentDate,\r\n A_Updated_By: user\r\n },\r\n onSuccess: customizationChanged.type,\r\n onError: customizationChangeFailed.type\r\n });\r\n\r\nexport const deleteCustomization = customizationMaintain =>\r\n apiCallBegan({\r\n url: url + \"/\" + customizationMaintain.ID,\r\n method: \"delete\",\r\n onStart: customizationDeleteRequested.type,\r\n data: {\r\n ID: customizationMaintain.ID,\r\n A_Name: customizationMaintain.A_Name\r\n },\r\n onSuccess: customizationDeleted.type,\r\n onError: customizationDeleteFailed.type\r\n });\r\n","import { combineReducers } from \"redux\";\r\nimport billboardOriginsReducer from \"./billboardOrigins\";\r\nimport homeLocationGroupsReducer from \"./homeLocationGroups\";\r\nimport billboardMenuBGsReducer from \"./billboardMenuBGs\";\r\nimport menusReducer from \"./menus\";\r\nimport groupsReducer from \"./groups\";\r\nimport sumOfArticlesReducer from \"./sumOfArticles\";\r\nimport articlesReducer from \"./articles\";\r\nimport homeBillboardsReducer from \"./homeBillboards\";\r\nimport homeBillboardChildsReducer from \"./homeBillboardChilds\";\r\nimport homeBillboardsMainsReducer from \"./homeBillboardsMains\";\r\nimport homeBillboardChildsMainsReducer from \"./homeBillboardChildsMains\";\r\nimport homeBillboardsMainsAboutUsReducer from \"./homeBillboardsMainsAboutUs\";\r\nimport homeBillboardsMainsContactUsReducer from \"./homeBillboardsMainsContactUs\";\r\nimport radioGrpDirectionsReducer from \"./radioGrpDirections\";\r\nimport customizationsReducer from \"./customizations\";\r\nimport customizationMaintainsReducer from \"./customizationMaintains\";\r\nimport homeBillboardSlidesReducer from \"./homeBillboardSlides\";\r\nimport rolesReducer from \"./roles\";\r\nimport usersReducer from \"./users\";\r\nimport authReducer from \"./auth\";\r\n\r\nexport default combineReducers({\r\n billboardOrigins: billboardOriginsReducer,\r\n homeLocationGroups: homeLocationGroupsReducer,\r\n billboardMenuBGs: billboardMenuBGsReducer,\r\n menus: menusReducer,\r\n groups: groupsReducer,\r\n sumOfArticles: sumOfArticlesReducer,\r\n articles: articlesReducer,\r\n homeBillboards: homeBillboardsReducer,\r\n homeBillboardChilds: homeBillboardChildsReducer,\r\n homeBillboardsMains: homeBillboardsMainsReducer,\r\n homeBillboardChildsMains: homeBillboardChildsMainsReducer,\r\n homeBillboardsMainsAboutUs: homeBillboardsMainsAboutUsReducer,\r\n homeBillboardsMainsContactUs: homeBillboardsMainsContactUsReducer,\r\n radioGrpDirections: radioGrpDirectionsReducer,\r\n customizations: customizationsReducer,\r\n customizationMaintains: customizationMaintainsReducer,\r\n homeBillboardSlides: homeBillboardSlidesReducer,\r\n roles: rolesReducer,\r\n users: usersReducer,\r\n auth: authReducer\r\n});\r\n","import { combineReducers } from \"redux\";\r\nimport entitiesReducer from \"./entities\";\r\n\r\nexport default combineReducers({\r\n entities: entitiesReducer\r\n});\r\n","const logger = param => store => next => action => {\r\n //console.log(\"Logging : \", param);\r\n // console.log(\"store : \", store);\r\n // console.log(\"next : \", next);\r\n // console.log(\"action : \", action);\r\n next(action);\r\n};\r\n\r\nexport default logger;\r\n","const toast = store => next => action => {\r\n //console.log(\"Logging : \", param);\r\n // console.log(\"store : \", store);\r\n // console.log(\"next : \", next);\r\n // console.log(\"action : \", action);\r\n if (action.type === \"error\")\r\n console.log(\"Toastify : \", action.payload.message);\r\n else next(action);\r\n};\r\n\r\nexport default toast;\r\n","import axios from \"axios\";\r\nimport * as actions from \"../api\";\r\nimport auth from \"../../services/authService\";\r\n\r\nconst api = ({ dispatch }) => next => async action => {\r\n console.log(\"action.type 1 : \", action.type, actions.apiCallBegan.type);\r\n if (action.type !== actions.apiCallBegan.type) {\r\n console.log(\"action.type 10 : \", action.type);\r\n return next(action);\r\n }\r\n\r\n ///console.log(\"action.type 2 : \", action.type);\r\n\r\n const { url, method, data, onStart, onSuccess, onError } = action.payload;\r\n\r\n //console.log(\"action.type 3 : \", action.type, action.payload);\r\n\r\n if (onStart) dispatch({ type: onStart });\r\n\r\n //console.log(\"action.type 4 : \", action.type);\r\n\r\n next(action);\r\n\r\n //console.log(\"action.type 5 : \", action.type);\r\n\r\n axios.defaults.baseURL = process.env.REACT_APP_API_URL;\r\n\r\n axios.defaults.headers.common[\"x-auth-token\"] = auth.getJwt();\r\n\r\n //console.log(\"action.type 6 : \", action.type);\r\n\r\n // const timeStamp = `${url}?timestamp=${Math.random()}`;\r\n const timeStamp = `${url}?timestamp=${new Date().getTime()}`;\r\n\r\n //console.log(\"action.type 7 : \", action.type);\r\n\r\n // console.log(\"middleware api 1111111 : \", url, data, timeStamp);\r\n\r\n // if (method === \"put\") window.alert(`data : ${Object.values(data)} : ${url}`);\r\n\r\n // var myHeaders = new Headers();\r\n // myHeaders.set(\"Cache-Control\", \"no-store\");\r\n // // myHeaders.set('Pragma', 'no-cache');\r\n // // myHeaders.set('Expires', '0');\r\n\r\n try {\r\n console.log(\"middleware api 2222222 : \", url, data);\r\n const response = await axios.request({\r\n // baseURL: \"http://localhost:3800/api\",\r\n url: `${timeStamp}`,\r\n method,\r\n data\r\n // headers: myHeaders\r\n // Pragma: \"no-cache\",\r\n // Expires: \"0\"\r\n });\r\n // General Success:-\r\n console.log(\"dispatch Success 1 : \", action.type, response.data);\r\n dispatch(actions.apiCallSuccess(response.data));\r\n // Specific Success:-\r\n\r\n if (onSuccess) {\r\n console.log(\"dispatch Success 2 : \", action.type, response.data);\r\n dispatch({ type: onSuccess, payload: response.data });\r\n }\r\n } catch (error) {\r\n // window.alert(`No user found.`);\r\n //\r\n // Babak's Notes: Below 'error.response.data' contians the actual error message sent from the back end:-\r\n // General Error:-\r\n console.log(\"Error 1 : \", error.response.data, data);\r\n dispatch(actions.apiCallFailed(error.response.data));\r\n\r\n // Specific Error:-\r\n //\r\n if (onError) dispatch({ type: onError, payload: error.response.data });\r\n }\r\n};\r\n\r\nexport default api;\r\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.scss\";\nimport App from \"./App\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport \"bootstrap/dist/css/bootstrap.css\";\nimport \"font-awesome/css/font-awesome.css\";\nimport configureStore from \"./store/configureStore\";\nimport { Provider } from \"react-redux\";\n\n// console.log(\"index 01 : \", process.env);\n\n//\n// Babak's Note: Below is our single source of truth, meaning we have one store and it's at this level. All our 'reducers' are set and initialized here:-\nconst store = configureStore();\n\nReactDOM.render(\n //\n // Babak's Note: 'store' is sent to all components that are wrapped in ' eg '':-\n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","// import { createStore } from \"redux\";\r\n// import { devToolsEnhancer } from \"redux-devtools-extension\";\r\nimport { configureStore, getDefaultMiddleware } from \"@reduxjs/toolkit\";\r\nimport reducer from \"./reducer\";\r\nimport logger from \"./middleware/logger\";\r\nimport toast from \"./middleware/toast\";\r\nimport api from \"./middleware/api\";\r\n\r\n// const store = createStore(\r\n// reducer,\r\n// window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()\r\n// );\r\n\r\n// export default function configureStore() {\r\n// const store = createStore(reducer, devToolsEnhancer({ trace: true }));\r\n// return store;\r\n// }\r\n\r\n//\r\n// Babak's Note: Below I have not named this function, this is called a \"anonymous function\" even though I can name it if I want:-\r\nexport default function() {\r\n return configureStore({\r\n reducer: reducer,\r\n middleware: [\r\n ...getDefaultMiddleware(),\r\n logger({ destination: \"console\" }),\r\n toast,\r\n api\r\n ]\r\n });\r\n}\r\n"],"sourceRoot":""}